@mnaoumov/typescript-dev-toolkit 5.4.1 → 6.0.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/dist/lib/cjs/docs-site/docs-snippets.cjs +3 -3
- package/dist/lib/cjs/docs-site/link-check.cjs +4 -4
- package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +2 -5
- package/dist/lib/cjs/link-check-skip.cjs +2 -5
- package/dist/lib/cjs/linters/eslint-config.cjs +13 -1
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +4 -7
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +3 -6
- package/dist/lib/cjs/linters/eslint-rules/prefer-dedent.cjs +2 -5
- package/dist/lib/cjs/linters/eslint-rules/prefer-logical-operator-over-ternary.cjs +20 -2
- package/dist/lib/cjs/linters/eslint-rules/prefer-logical-operator-over-ternary.d.cts +6 -3
- package/dist/lib/cjs/linters/over-exposure.cjs +2 -2
- package/dist/lib/cjs/root.cjs +1 -1
- package/dist/lib/cjs/test-runners/jest.cjs +3 -3
- package/dist/lib/cjs/upstream-sync.cjs +2 -2
- package/dist/lib/esm/docs-site/docs-snippets.mjs +3 -3
- package/dist/lib/esm/docs-site/link-check.mjs +4 -4
- package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +2 -5
- package/dist/lib/esm/link-check-skip.mjs +2 -5
- package/dist/lib/esm/linters/eslint-config.mjs +13 -1
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +4 -7
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +3 -6
- package/dist/lib/esm/linters/eslint-rules/prefer-dedent.mjs +2 -5
- package/dist/lib/esm/linters/eslint-rules/prefer-logical-operator-over-ternary.d.mts +6 -3
- package/dist/lib/esm/linters/eslint-rules/prefer-logical-operator-over-ternary.mjs +20 -2
- package/dist/lib/esm/linters/over-exposure.mjs +2 -2
- package/dist/lib/esm/root.mjs +1 -1
- package/dist/lib/esm/test-runners/jest.mjs +3 -3
- package/dist/lib/esm/upstream-sync.mjs +2 -2
- package/package.json +32 -30
|
@@ -105,7 +105,7 @@ async function compareWithUpstream(entry, dependencies) {
|
|
|
105
105
|
}
|
|
106
106
|
const compare = await dependencies.fetchJson(`https://api.github.com/repos/${entry.repo}/compare/${entry.commit}...${head}`);
|
|
107
107
|
const files = compare.files ?? [];
|
|
108
|
-
const touched = new Set(files.flatMap((file) => file.previous_filename === void 0 ?
|
|
108
|
+
const touched = new Set(files.flatMap((file) => file.previous_filename === void 0 ? file.filename : [file.filename, file.previous_filename]));
|
|
109
109
|
const changedPaths = [...touched].filter((path) => entry.paths.some((glob) => (0, import_node_path.matchesGlob)(path, glob))).sort();
|
|
110
110
|
const isTruncated = files.length >= COMPARE_FILE_LIMIT;
|
|
111
111
|
return {
|
|
@@ -318,4 +318,4 @@ function toLastLineState(line) {
|
|
|
318
318
|
syncUpstreams,
|
|
319
319
|
writePin
|
|
320
320
|
});
|
|
321
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Vwc3RyZWFtLXN5bmMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXYXRjaGVzIHRoZSB1cHN0cmVhbXMgYSByZXBvc2l0b3J5IG1pcnJvcnMgYW5kIG9wZW5zIG9uZSB1cGRhdGUgUFIgcGVyIHVwc3RyZWFtIHRoYXQgbW92ZWQuXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIGRyaXZlbiBieSBgdXBzdHJlYW1zLmpzb25gIGFuZCB0aGUgaGFuZGxlciBjb21tYW5kcyBpdCBuYW1lcywgc28gYW55IHJlcG9zaXRvcnkgdGhhdCB2ZW5kb3JzXG4gKiB1cHN0cmVhbSBjb2RlIGNhbiB1c2UgaXQ6IHRocm91Z2ggdGhlIGBzeW5jLXVwc3RyZWFtc2AgYmluLCBvciB0aGUgcmV1c2FibGUgYHN5bmMtdXBzdHJlYW1zLnltbGAgd29ya2Zsb3cuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWF0Y2hlc0dsb2IgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFdoYXQgYSBjb21tYW5kIHByaW50ZWQgYW5kIGhvdyBpdCBleGl0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdCB7XG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIG9uIGEgR2l0SHViIGJyYW5jaCBvciB0YWcsIHBpbm5lZCB0byBhIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgY29tbWl0OiB0aGUgbGFzdCB1cHN0cmVhbSBzdGF0ZSB0aGUgaGFuZGxlciB3YXMgcnVuIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBjb21taXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgdHVybnMgYSBuZXdlciB1cHN0cmVhbSBzdGF0ZSBpbnRvIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgd2F0Y2hlZCB1cHN0cmVhbSwgYXMgZ2xvYnMgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gQSBtb3ZlIHRoYXQgdG91Y2hlcyBub25lIG9mIHRoZW0gb3BlbnMgbm8gUFIuXG4gICAqL1xuICByZWFkb25seSBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIG9yIHRhZyBmb2xsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZjogc3RyaW5nO1xuICAvKipcbiAgICogYDxvd25lcj4vPHJlcG8+YCBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgaGFuZGxlcidzIHJlc3VsdC4gT3ZlcnJpZGVzIHRoZSBmaWxlJ3MgdG9wLWxldmVsIGB2ZXJpZnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIGFzIGFuIG5wbSBwYWNrYWdlJ3MgZGlzdC10YWcsIHBpbm5lZCB0byBhIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtVXBzdHJlYW1FbnRyeSB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5wbTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRpc3QtdGFnIGZvbGxvd2VkLiBgbGF0ZXN0YCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBpbm5lZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgdGhlIHN5bmMgZG9lcyB0byB0aGUgb3V0c2lkZSB3b3JsZCwgc28gYSB0ZXN0IGNhbiBzdGFuZCBhIGZpeHR1cmUgaW4gZm9yIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNEZXBlbmRlbmNpZXMge1xuICAvKipcbiAgICogUnVucyBhbiBleGVjdXRhYmxlIHdpdGggYXJndW1lbnRzIGFuZCBubyBzaGVsbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWM6IChmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdLCBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4gQ29tbWFuZFJlc3VsdDtcbiAgLyoqXG4gICAqIEdFVHMgYSBVUkwgYW5kIHBhcnNlcyB0aGUgSlNPTiBpdCByZXR1cm5zLCB0aHJvd2luZyBvbiBhbiBIVFRQIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hKc29uOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRvbmx5IGxvZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgc2hlbGw6IGEgaGFuZGxlciBvciBhIHZlcmlmeSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGw6IChjb21tYW5kOiBzdHJpbmcsIGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSA9PiBDb21tYW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBQUiBhbiB1cHN0cmVhbSBtb3ZlIGFza3MgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNQbGFuIHtcbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1czogVXBzdHJlYW1TdGF0dXM7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBoYXBwZW5lZCB0byBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBjaGVja2luZyBvciBhcHBseWluZyB0aHJldzogdGhlIGpvYiByZXBvcnRzIGl0IGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgcGxhbm5lZGAgaW4gYSBkcnkgcnVuLCBgb3BlbmVkYC9gdXBkYXRlZGAgd2hlbiBhIFBSIHdhcyBwdXNoZWQsIGB1bmNoYW5nZWRgIHdoZW4gdGhlIGJyYW5jaCBhbHJlYWR5IGhlbGQgdGhpcyByZXN1bHQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiAnY3VycmVudCcgfCAnZXJyb3InIHwgJ29wZW5lZCcgfCAncGxhbm5lZCcgfCAndW5jaGFuZ2VkJyB8ICd1bndhdGNoZWQnIHwgJ3VwZGF0ZWQnO1xuICByZWFkb25seSBwck51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzeW5jVXBzdHJlYW1zfSBzeW5jcywgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW5jVXBzdHJlYW1zT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIGVhY2ggUFIgdGFyZ2V0cyBhbmQgZWFjaCB1cGRhdGUgYnJhbmNoIGlzIGN1dCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gYHVwc3RyZWFtcy5qc29uYCwgd2hpY2ggdGhlIHN5bmMgdXBkYXRlcyB0aGUgcGluIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGxhbiBhbmQgcHJpbnQgZXZlcnkgUFIsIGFuZCBjaGFuZ2Ugbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9ubHkgdGhlIGVudHJpZXMgd2l0aCB0aGVzZSBuYW1lcywgb3IgZXZlcnkgZW50cnkgd2hlbiBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IG9ubHk6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSB1cHN0cmVhbSB0aGF0IGB1cHN0cmVhbXMuanNvbmAgbGlzdHM6IGEgZ2l0IG9uZSBvciBhbiBucG0gb25lLlxuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbUVudHJ5ID0gR2l0VXBzdHJlYW1FbnRyeSB8IE5wbVVwc3RyZWFtRW50cnk7XG5cbi8qKlxuICogVGhlIGNvbnRlbnQgb2YgYHVwc3RyZWFtcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHN0cmVhbXNDb25maWcge1xuICByZWFkb25seSB1cHN0cmVhbXM6IHJlYWRvbmx5IFVwc3RyZWFtRW50cnlbXTtcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgY2hlY2tzIGV2ZXJ5IGhhbmRsZXIncyByZXN1bHQsIHVubGVzcyBhbiBlbnRyeSBuYW1lcyBpdHMgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgb25lIGNvbXBhcmlzb24gb2YgYW4gZW50cnkgd2l0aCBpdHMgdXBzdHJlYW0gZm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzdHJlYW1TdGF0dXMge1xuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIHBhdGhzIHRoYXQgY2hhbmdlZCBhbmQgYXJlIHdhdGNoZWQsIHNvcnRlZC4gQWx3YXlzIGVtcHR5IGZvciBhbiBucG0gdXBzdHJlYW0uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VkUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQSBsaW5rIHRoYXQgc2hvd3Mgd2hhdCBjaGFuZ2VkIGJldHdlZW4gdGhlIHBpbiBhbmQgdGhlIGhlYWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXJlVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudHJ5OiBVcHN0cmVhbUVudHJ5O1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBvciB2ZXJzaW9uIHRoZSB1cHN0cmVhbSBpcyBhdCBub3cuXG4gICAqL1xuICByZWFkb25seSBoZWFkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG9yIHZlcnNpb24gYHVwc3RyZWFtcy5qc29uYCByZWNvcmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGluOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgY3VycmVudGA6IG5vdGhpbmcgdG8gZG8uIGBtb3ZlZGA6IGEgUFIgaXMgZHVlLiBgdW53YXRjaGVkYDogdXBzdHJlYW0gbW92ZWQsIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiAnY3VycmVudCcgfCAnbW92ZWQnIHwgJ3Vud2F0Y2hlZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEdpdEh1YiB0cnVuY2F0ZWQgdGhlIGNvbXBhcmUncyBmaWxlIGxpc3QsIHNvIGEgd2F0Y2hlZCBwYXRoIG1heSBiZSBtaXNzaW5nIGZyb20gYGNoYW5nZWRQYXRoc2AuXG4gICAqL1xuICByZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBHaXRIdWJDb21taXQge1xuICByZWFkb25seSBzaGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YkNvbXBhcmUge1xuICByZWFkb25seSBmaWxlcz86IHJlYWRvbmx5IEdpdEh1YkNvbXBhcmVGaWxlW107XG59XG5cbi8qKlxuICogT25lIGZpbGUgb2YgYSBHaXRIdWIgY29tcGFyZSwgYXMgdGhlIEFQSSBzcGVsbHMgaXQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJDb21wYXJlRmlsZSB7XG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgcHJldmlvdXNfZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOcG1QYWNrdW1lbnQge1xuICByZWFkb25seSAnZGlzdC10YWdzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBSZXN1bHQge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdDogQ29tbWFuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxlciBhbmQgdmVyaWZ5IHJ1bnMgYSBQUiBib2R5IHJlcG9ydHMuXG4gKi9cbmludGVyZmFjZSBTdGVwUmVzdWx0cyB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IFN0ZXBSZXN1bHQ7XG4gIHJlYWRvbmx5IHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQ7XG59XG5cbi8qKlxuICogYHVwc3RyZWFtcy5qc29uYCByZWFkIGxvb3NlbHksIHRvIHdyaXRlIG9uZSB2YWx1ZSBiYWNrIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgcmVzdC5cbiAqL1xuaW50ZXJmYWNlIFVwc3RyZWFtc0ZpbGVTaGFwZSB7XG4gIHJlYWRvbmx5IHVwc3RyZWFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBHaXRIdWIncyBjb21wYXJlIEFQSSBsaXN0cyBhdCBtb3N0IHRoaXMgbWFueSBmaWxlcywgYW5kIHNheXMgbm90aGluZyB3aGVuIGl0IHN0b3BzLlxuICovXG5jb25zdCBDT01QQVJFX0ZJTEVfTElNSVQgPSAzMDA7XG5cbmNvbnN0IFNIT1JUX1NIQV9MRU5HVEggPSAxMjtcblxuLyoqXG4gKiBUaGUgdGFpbCBvZiBhIGNvbW1hbmQncyBvdXRwdXQgYSBQUiBib2R5IHF1b3RlczogZW5vdWdoIHRvIHJlYWQgYSBmYWlsdXJlLCBzaG9ydCBlbm91Z2ggdG8gc3RheSB1bmRlciBHaXRIdWIncyBib2R5IGxpbWl0LlxuICovXG5jb25zdCBPVVRQVVRfVEFJTF9MSU5FUyA9IDYwO1xuXG4vKipcbiAqIFRoZSBtb3N0IGxpbmVzIHRoYXQgcmVwb3J0IGEgZmFpbHVyZSBhIGZhaWxlZCBzdGVwJ3Mgc2VjdGlvbiBvcGVucyB3aXRoLCBhaGVhZCBvZiBpdHMgb3V0cHV0IHRhaWwuXG4gKi9cbmNvbnN0IEZBSUxVUkVfTElORV9MSU1JVCA9IDIwO1xuXG5jb25zdCBKU09OX0lOREVOVF9TUEFDRVMgPSAyO1xuXG4vKipcbiAqIFRoZSBFU0MgdGhhdCBvcGVucyBhIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UsIGVpdGhlciBhcyB0aGUgYnl0ZSBvciBhcyB0aGUgY2FyZXQgdGV4dCBgXltgIGEgbG9nIHZpZXdlciBvciBhblxuICogZWFybGllciBjb3B5IHR1cm5lZCBpdCBpbnRvLiBCb3RoIHJlYWNoZWQgYSBQUiBib2R5OiBjcmVhdGUtb2JzaWRpYW4tcGx1Z2luIzIgY2FycmllZCB0aGUgY2FyZXQgZm9ybS5cbiAqL1xuY29uc3QgRVNDID0gU3RyaW5nLnJhd2AoPzpcXHUwMDFCfFxcXlxcWylgO1xuXG4vKipcbiAqIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciBzZXF1ZW5jZXMgKGNvbG9ycywgY3Vyc29yIG1vdmVzKSwgT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kIHNlcXVlbmNlcyAoaHlwZXJsaW5rcyxcbiAqIHRpdGxlcywgZW5kZWQgYnkgQkVMIG9yIFNULCBhbHNvIGFzIGBeR2ApLCBhbmQgdGhlIHR3by1jaGFyYWN0ZXIgZXNjYXBlcy4gQSB0d28tY2hhcmFjdGVyIGVzY2FwZSBpcyBtYXRjaGVkIG9ubHkgYXNcbiAqIHRoZSBieXRlLCBiZWNhdXNlIGl0cyBjYXJldCB0ZXh0IGFsc28gc3BlbGxzIGFuIG9yZGluYXJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiwgc3VjaCBhcyBgXltBLVpdYC5cbiAqL1xuY29uc3QgVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQID0gbmV3IFJlZ0V4cChcbiAgU3RyaW5nLnJhd2Ake0VTQ31cXFtbMC0/XSpbIC0vXSpbQC1+XXwke0VTQ31cXF1bXlxcdTAwMDdcXHUwMDFCXl0qKD86XFx1MDAwN3xcXF5HfCR7RVNDfVxcXFwpfFxcdTAwMUJbQC1aXFxcXC1fXWAsXG4gICdnJ1xuKTtcblxuLyoqXG4gKiBBIGxpbmUgdGhhdCByZXBvcnRzIGEgZmFpbHVyZSwgd2hpY2ggYSBmYWlsZWQgc3RlcCdzIHNlY3Rpb24gcXVvdGVzIGZpcnN0LCBiZWNhdXNlIHRoZSB0YWlsIG1heSBiZSBhIGdyZWVuIHRlc3QgcnVuXG4gKiB0aGF0IGZpbmlzaGVkIGFmdGVyIGl0LlxuICovXG5jb25zdCBGQUlMVVJFX0xJTkVfUkVHX0VYUCA9IC9zdGVwLWZhaWxlZHxcXGJmYWlsKD86c3xlZHx1cmV8aW5nKT9cXGJ8XFxiZXJyb3JcXGJ8XFxibm90IGZvdW5kXFxifFxcYkVSUiF8W1x1MjcxN1x1MDBEN10vaTtcblxuLyoqXG4gKiBXcml0ZXMgdGhlIFBSIGJvZHkuXG4gKlxuICogQHBhcmFtIHBsYW4gLSBUaGUgcGxhbi5cbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBoYW5kbGVyIGFuZCB2ZXJpZnkgcnVucywgb3IgYG51bGxgIGluIGEgZHJ5IHJ1biwgd2hlcmUgbmVpdGhlciBydW5zLlxuICogQHBhcmFtIGRpZmZTdGF0IC0gYGdpdCBkaWZmIC0tc3RhdGAgb2YgdGhlIHVwZGF0ZSBjb21taXQsIG9yIGBudWxsYCBpbiBhIGRyeSBydW4uXG4gKiBAcmV0dXJucyBUaGUgYm9keSwgaW4gTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByQm9keShwbGFuOiBTeW5jUGxhbiwgc3RlcHM6IG51bGwgfCBTdGVwUmVzdWx0cywgZGlmZlN0YXQ6IG51bGwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB7IGVudHJ5LCBoZWFkLCBwaW4gfSA9IHBsYW4uc3RhdHVzO1xuICBjb25zdCBzb3VyY2UgPSBpc0dpdFVwc3RyZWFtKGVudHJ5KSA/IGBcXGAke2VudHJ5LnJlcG99QCR7ZW50cnkucmVmfVxcYGAgOiBgbnBtIFxcYCR7ZW50cnkubnBtfUAke2VudHJ5LnRhZyA/PyAnbGF0ZXN0J31cXGBgO1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgVXBzdHJlYW0gXFxgJHtlbnRyeS5uYW1lfVxcYCBtb3ZlZDogJHtzb3VyY2V9IGZyb20gXFxgJHtwaW59XFxgIHRvIFxcYCR7aGVhZH1cXGAuYCxcbiAgICAnJyxcbiAgICBgQ29tcGFyZTogJHtwbGFuLnN0YXR1cy5jb21wYXJlVXJsfWAsXG4gICAgJydcbiAgXTtcblxuICBpZiAoaXNHaXRVcHN0cmVhbShlbnRyeSkpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgQ2hhbmdlZCB1cHN0cmVhbSBmaWxlcycsICcnLCAuLi5wbGFuLnN0YXR1cy5jaGFuZ2VkUGF0aHMubWFwKChwYXRoKSA9PiBgLSBcXGAke3BhdGh9XFxgYCkpO1xuICAgIGlmIChwbGFuLnN0YXR1cy50cnVuY2F0ZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gR2l0SHViIGxpc3RzIGF0IG1vc3QgJHtTdHJpbmcoQ09NUEFSRV9GSUxFX0xJTUlUKX0gZmlsZXM6IG9wZW4gdGhlIGNvbXBhcmUgbGluayBmb3IgdGhlIHJlc3QuYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgaWYgKHN0ZXBzID09PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEhhbmRsZXInLCAnJywgYFxcYCR7ZW50cnkuaGFuZGxlcn1cXGA6IG5vdCBydW4gKGRyeSBydW4pLmAsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnSGFuZGxlcicsIHN0ZXBzLmhhbmRsZXIpKTtcbiAgICBpZiAoc3RlcHMudmVyaWZ5ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnVmVyaWZ5Jywgc3RlcHMudmVyaWZ5KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpZmZTdGF0ICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEdlbmVyYXRlZCBjaGFuZ2VzJywgJycsICdgYGB0ZXh0JywgY2xlYW5Db21tYW5kT3V0cHV0KGRpZmZTdGF0KS50cmltRW5kKCksICdgYGAnLCAnJyk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCdUaGlzIFBSIHdhcyBvcGVuZWQgYnkgdGhlIHVwc3RyZWFtLXN5bmMgam9iIGFuZCBpcyBuZXZlciBtZXJnZWQgYXV0b21hdGljYWxseS4nKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbi8qKlxuICogVHVybnMgYSBjb21tYW5kJ3MgY2FwdHVyZWQgb3V0cHV0IGludG8gcGxhaW4gdGV4dCBhIFBSIGJvZHkgY2FuIHF1b3RlOiB0ZXJtaW5hbCBjb250cm9sIHNlcXVlbmNlcyBhcmUgcmVtb3ZlZCxcbiAqIHdoZXRoZXIgdGhleSBhcnJpdmVkIGFzIEVTQyBieXRlcyBvciBhcyB0aGVpciBjYXJldC1yZW5kZXJlZCBgXltbLi4ubWAgdGV4dCwgYW5kIGEgbGluZSBhIHByb2dyZXNzIGRpc3BsYXkgcmV3cm90ZVxuICogd2l0aCBgXFxyYCBrZWVwcyBvbmx5IGl0cyBsYXN0IHN0YXRlLlxuICpcbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgY2FwdHVyZWQgb3V0cHV0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNvbW1hbmRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gb3V0cHV0XG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQLCAnJylcbiAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHRvTGFzdExpbmVTdGF0ZShsaW5lKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgb25lIGVudHJ5IHdpdGggaXRzIHVwc3RyZWFtLlxuICpcbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgb3V0c2lkZSB3b3JsZC5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIGNvbXBhcmlzb24gZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBkZXBlbmRlbmNpZXM6IFBpY2s8U3luY0RlcGVuZGVuY2llcywgJ2ZldGNoSnNvbic+KTogUHJvbWlzZTxVcHN0cmVhbVN0YXR1cz4ge1xuICBpZiAoIWlzR2l0VXBzdHJlYW0oZW50cnkpKSB7XG4gICAgY29uc3QgdGFnID0gZW50cnkudGFnID8/ICdsYXRlc3QnO1xuICAgIGNvbnN0IHBhY2t1bWVudCA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7ZW50cnkubnBtLnJlcGxhY2UoJy8nLCAnJTJmJyl9YCkgYXMgTnBtUGFja3VtZW50O1xuICAgIGNvbnN0IGhlYWQgPSBwYWNrdW1lbnRbJ2Rpc3QtdGFncyddW3RhZ107XG4gICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBucG0gcGFja2FnZSAke2VudHJ5Lm5wbX0gaGFzIG5vIGRpc3QtdGFnIFwiJHt0YWd9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VkUGF0aHM6IFtdLFxuICAgICAgY29tcGFyZVVybDogYGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlLyR7ZW50cnkubnBtfS92LyR7aGVhZH1gLFxuICAgICAgZW50cnksXG4gICAgICBoZWFkLFxuICAgICAgcGluOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgc3RhdGU6IGhlYWQgPT09IGVudHJ5LnZlcnNpb24gPyAnY3VycmVudCcgOiAnbW92ZWQnLFxuICAgICAgdHJ1bmNhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21taXQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuZmV0Y2hKc29uKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7ZW50cnkucmVwb30vY29tbWl0cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbnRyeS5yZWYpfWApIGFzIEdpdEh1YkNvbW1pdDtcbiAgY29uc3QgaGVhZCA9IGNvbW1pdC5zaGE7XG4gIGNvbnN0IGNvbXBhcmVVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vY29tcGFyZS8ke2VudHJ5LmNvbW1pdH0uLi4ke2hlYWR9YDtcbiAgaWYgKGhlYWQgPT09IGVudHJ5LmNvbW1pdCkge1xuICAgIHJldHVybiB7IGNoYW5nZWRQYXRoczogW10sIGNvbXBhcmVVcmwsIGVudHJ5LCBoZWFkLCBwaW46IGVudHJ5LmNvbW1pdCwgc3RhdGU6ICdjdXJyZW50JywgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgY29tcGFyZSA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9jb21wYXJlLyR7ZW50cnkuY29tbWl0fS4uLiR7aGVhZH1gKSBhcyBHaXRIdWJDb21wYXJlO1xuICBjb25zdCBmaWxlcyA9IGNvbXBhcmUuZmlsZXMgPz8gW107XG4gIGNvbnN0IHRvdWNoZWQgPSBuZXcgU2V0KGZpbGVzLmZsYXRNYXAoKGZpbGUpID0+IGZpbGUucHJldmlvdXNfZmlsZW5hbWUgPT09IHVuZGVmaW5lZCA/IFtmaWxlLmZpbGVuYW1lXSA6IFtmaWxlLmZpbGVuYW1lLCBmaWxlLnByZXZpb3VzX2ZpbGVuYW1lXSkpO1xuICBjb25zdCBjaGFuZ2VkUGF0aHMgPSBbLi4udG91Y2hlZF0uZmlsdGVyKChwYXRoKSA9PiBlbnRyeS5wYXRocy5zb21lKChnbG9iKSA9PiBtYXRjaGVzR2xvYihwYXRoLCBnbG9iKSkpLnNvcnQoKTtcbiAgY29uc3QgaXNUcnVuY2F0ZWQgPSBmaWxlcy5sZW5ndGggPj0gQ09NUEFSRV9GSUxFX0xJTUlUO1xuICByZXR1cm4ge1xuICAgIGNoYW5nZWRQYXRocyxcbiAgICBjb21wYXJlVXJsLFxuICAgIGVudHJ5LFxuICAgIGhlYWQsXG4gICAgcGluOiBlbnRyeS5jb21taXQsXG4gICAgc3RhdGU6IGNoYW5nZWRQYXRocy5sZW5ndGggPiAwIHx8IGlzVHJ1bmNhdGVkID8gJ21vdmVkJyA6ICd1bndhdGNoZWQnLFxuICAgIHRydW5jYXRlZDogaXNUcnVuY2F0ZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhbiBgdXBzdHJlYW1zLmpzb25gLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIGZpbGUncyBjb250ZW50LlxuICogQHJldHVybnMgVGhlIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBzdHJlYW1zQ29uZmlnKHRleHQ6IHN0cmluZyk6IFVwc3RyZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGV4dCkgYXMgUGFydGlhbDxVcHN0cmVhbXNDb25maWc+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnVwc3RyZWFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1cHN0cmVhbXMuanNvbiBoYXMgbm8gXCJ1cHN0cmVhbXNcIiBhcnJheS4nKTtcbiAgfVxuICAvLyBSZWFkIHRocm91Z2ggYFJlZmxlY3QuZ2V0YCwgYmVjYXVzZSBub3RoaW5nIGFib3V0IHRoZSBwYXJzZWQgZW50cmllcyBpcyBrbm93biB5ZXQuXG4gIGNvbnN0IGVudHJpZXM6IHJlYWRvbmx5IG9iamVjdFtdID0gY29uZmlnLnVwc3RyZWFtcztcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5hbWU6IHVua25vd24gPSBSZWZsZWN0LmdldChlbnRyeSwgJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IGBcIiR7bmFtZX1cImAgOiAnd2l0aCBubyBuYW1lJztcbiAgICBjb25zdCBpc0dpdCA9ICdyZXBvJyBpbiBlbnRyeTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGlzR2l0ID8gWyduYW1lJywgJ3JlcG8nLCAncmVmJywgJ2NvbW1pdCcsICdoYW5kbGVyJ10gOiBbJ25hbWUnLCAnbnBtJywgJ3ZlcnNpb24nLCAnaGFuZGxlciddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QuZ2V0KGVudHJ5LCBrZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1cHN0cmVhbXMuanNvbjogZW50cnkgJHtsYWJlbH0gbmVlZHMgYSBzdHJpbmcgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzR2l0ICYmICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGVudHJ5LCAncGF0aHMnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb246IGVudHJ5ICR7bGFiZWx9IG5lZWRzIGEgXCJwYXRoc1wiIGFycmF5LmApO1xuICAgIH1cbiAgICBpZiAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uOiB0aGUgbmFtZSAke2xhYmVsfSBpcyB1c2VkIHR3aWNlLmApO1xuICAgIH1cbiAgICBuYW1lcy5hZGQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZyBhcyBVcHN0cmVhbXNDb25maWc7XG59XG5cbi8qKlxuICogUGxhbnMgdGhlIFBSIGEgbW92ZWQgdXBzdHJlYW0gYXNrcyBmb3IuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBjb21wYXJpc29uIG9mIGEgbW92ZWQgZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgYnJhbmNoIGFuZCB0aXRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYW5TeW5jKHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiBTeW5jUGxhbiB7XG4gIHJldHVybiB7XG4gICAgYnJhbmNoOiBgdXBzdHJlYW0vJHtzdGF0dXMuZW50cnkubmFtZX1gLFxuICAgIHN0YXR1cyxcbiAgICB0aXRsZTogYGNob3JlKHVwc3RyZWFtKTogc3luYyAke3N0YXR1cy5lbnRyeS5uYW1lfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgZXZlcnkgZW50cnksIGFuZCBvcGVucyBvciB1cGRhdGVzIG9uZSBQUiBwZXIgbW92ZWQgdXBzdHJlYW0uXG4gKlxuICogQSBoYW5kbGVyIG9yIHZlcmlmeSBmYWlsdXJlIHN0aWxsIG9wZW5zIHRoZSBQUiwgYXMgYSBkcmFmdCB3aXRoIHRoZSBmYWlsdXJlIGluIGl0cyBib2R5LCBzbyBhIGJyZWFraW5nIHVwc3RyZWFtIGNoYW5nZVxuICogaXMgc2VlbiByYXRoZXIgdGhhbiBza2lwcGVkLiBBbiBlcnJvciBpbiB0aGUgc3luYyBpdHNlbGYsIHN1Y2ggYXMgYSBmYWlsZWQgQVBJIGNhbGwsIGlzIHJlcG9ydGVkIGluIHRoZSBlbnRyeSdzIHJlc3VsdFxuICogYW5kIHRoZSBuZXh0IGVudHJ5IHN0aWxsIHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBXaGF0IHRvIHN5bmMsIGFuZCBob3cuXG4gKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIG91dHNpZGUgd29ybGQuXG4gKiBAcmV0dXJucyBPbmUgcmVzdWx0IHBlciBlbnRyeSBjaGVja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1Vwc3RyZWFtcyhvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogUHJvbWlzZTxTeW5jUmVzdWx0W10+IHtcbiAgY29uc3QgY29uZmlnID0gcGFyc2VVcHN0cmVhbXNDb25maWcocmVhZEZpbGVTeW5jKG9wdGlvbnMuY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICBjb25zdCB1bmtub3duID0gb3B0aW9ucy5vbmx5LmZpbHRlcigobmFtZSkgPT4gY29uZmlnLnVwc3RyZWFtcy5ldmVyeSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpKTtcbiAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb24gaGFzIG5vIGVudHJ5IG5hbWVkICR7dW5rbm93bi5tYXAoKG5hbWUpID0+IGBcIiR7bmFtZX1cImApLmpvaW4oJywgJyl9LmApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0czogU3luY1Jlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgY29uZmlnLnVwc3RyZWFtcykge1xuICAgIGlmIChvcHRpb25zLm9ubHkubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5vbmx5LmluY2x1ZGVzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCBzeW5jRW50cnkoZW50cnksIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBFUlJPUiAke21lc3NhZ2V9YCk7XG4gICAgICByZXN1bHRzLnB1c2goeyBlcnJvcjogbWVzc2FnZSwgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogUmVjb3JkcyBgaGVhZGAgYXMgdGhlIGVudHJ5J3MgcGluIGluIGB1cHN0cmVhbXMuanNvbmAsIHVubGVzcyB0aGUgaGFuZGxlciBhbHJlYWR5IG1vdmVkIGl0LCBrZWVwaW5nIHRoZSBmaWxlJ3NcbiAqIGtleSBvcmRlciBhbmQgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnUGF0aCAtIFRoZSBwYXRoIHRvIGB1cHN0cmVhbXMuanNvbmAuXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIGNvbXBhcmlzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBpbihjb25maWdQYXRoOiBzdHJpbmcsIHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiB2b2lkIHtcbiAgY29uc3QgdGV4dCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyBVcHN0cmVhbXNGaWxlU2hhcGU7XG4gIGNvbnN0IGtleSA9IGlzR2l0VXBzdHJlYW0oc3RhdHVzLmVudHJ5KSA/ICdjb21taXQnIDogJ3ZlcnNpb24nO1xuICBjb25zdCB0YXJnZXQgPSBwYXJzZWQudXBzdHJlYW1zLmZpbmQoKGVudHJ5KSA9PiBlbnRyeVsnbmFtZSddID09PSBzdGF0dXMuZW50cnkubmFtZSk7XG4gIGlmICh0YXJnZXQ/LltrZXldICE9PSBzdGF0dXMucGluKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRhcmdldFtrZXldID0gc3RhdHVzLmhlYWQ7XG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBKU09OX0lOREVOVF9TUEFDRVMpfVxcbmApO1xufVxuXG5mdW5jdGlvbiBhcHBseVBsYW4ocGxhbjogU3luY1BsYW4sIGNvbmZpZzogVXBzdHJlYW1zQ29uZmlnLCBvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogU3luY1Jlc3VsdCB7XG4gIGNvbnN0IHsgZW50cnkgfSA9IHBsYW4uc3RhdHVzO1xuICAvLyBObyBjb2xvcjogdGhlIG91dHB1dCBpcyBxdW90ZWQgaW4gYSBQUiBib2R5LCB3aGVyZSBhIGNvbG9yIGNvZGUgaXMgb25seSBub2lzZS4gYENJYCBpcyBsZWZ0IGFsb25lLCBiZWNhdXNlIGl0XG4gIC8vIGNoYW5nZXMgd2hhdCBzb21lIHRvb2xzIGRvLCBub3QganVzdCBob3cgdGhleSBwcmludC5cbiAgY29uc3QgZW52ID0geyBGT1JDRV9DT0xPUjogJzAnLCBOT19DT0xPUjogJzEnLCBVUFNUUkVBTV9OQU1FOiBlbnRyeS5uYW1lLCBVUFNUUkVBTV9UQVJHRVQ6IHBsYW4uc3RhdHVzLmhlYWQgfTtcbiAgY29uc3QgaGFuZGxlcjogU3RlcFJlc3VsdCA9IHsgY29tbWFuZDogZW50cnkuaGFuZGxlciwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwoZW50cnkuaGFuZGxlciwgZW52KSB9O1xuICB3cml0ZVBpbihvcHRpb25zLmNvbmZpZ1BhdGgsIHBsYW4uc3RhdHVzKTtcbiAgY29uc3QgdmVyaWZ5Q29tbWFuZCA9IGVudHJ5LnZlcmlmeSA/PyBjb25maWcudmVyaWZ5O1xuICBjb25zdCB2ZXJpZnk6IG51bGwgfCBTdGVwUmVzdWx0ID0gdmVyaWZ5Q29tbWFuZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHsgY29tbWFuZDogdmVyaWZ5Q29tbWFuZCwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwodmVyaWZ5Q29tbWFuZCwgZW52KSB9O1xuICBjb25zdCBpc0ZhaWxlZCA9IGhhbmRsZXIucmVzdWx0LmV4aXRDb2RlICE9PSAwIHx8ICh2ZXJpZnkgIT09IG51bGwgJiYgdmVyaWZ5LnJlc3VsdC5leGl0Q29kZSAhPT0gMCk7XG5cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydhZGQnLCAnLS1hbGwnXSk7XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnY29tbWl0JywgJy0tbm8tdmVyaWZ5JywgJy0tbWVzc2FnZScsIHBsYW4udGl0bGVdKTtcbiAgY29uc3QgZGlmZlN0YXQgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2RpZmYnLCAnLS1zdGF0JywgJ0hFQUR+MScsICdIRUFEJ10pO1xuXG4gIGNvbnN0IGJvZHkgPSBidWlsZFByQm9keShwbGFuLCB7IGhhbmRsZXIsIHZlcmlmeSB9LCBkaWZmU3RhdCk7XG4gIGNvbnN0IGlzUmVtb3RlQnJhbmNoID0gZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnbHMtcmVtb3RlJywgJy0tZXhpdC1jb2RlJywgJy0taGVhZHMnLCAnb3JpZ2luJywgcGxhbi5icmFuY2hdKS5leGl0Q29kZSA9PT0gMDtcbiAgaWYgKGlzUmVtb3RlQnJhbmNoKSB7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBwbGFuLmJyYW5jaF0pO1xuICAgIGlmIChkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydkaWZmJywgJy0tcXVpZXQnLCAnRkVUQ0hfSEVBRCcsICdIRUFEJ10pLmV4aXRDb2RlID09PSAwKSB7XG4gICAgICAvLyBUaGUgYm9keSBpcyBzdGlsbCByZXdyaXR0ZW4sIHNvIGEgY2hhbmdlIHRvIGhvdyBpdCBpcyB3cml0dGVuIHJlYWNoZXMgYSBQUiB3aG9zZSBicmFuY2ggaGFzIG5vdCBtb3ZlZC5cbiAgICAgIGNvbnN0IG9wZW4gPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICAgICAgaWYgKG9wZW4gIT09IG51bGwpIHtcbiAgICAgICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBvcGVuLCAnLS1ib2R5JywgYm9keV0pO1xuICAgICAgfVxuICAgICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogJHtwbGFuLmJyYW5jaH0gYWxyZWFkeSBob2xkcyB0aGlzIHJlc3VsdDsgbm90aGluZyBwdXNoZWQke29wZW4gPT09IG51bGwgPyAnJyA6IGAsIFBSICMke29wZW59J3MgYm9keSByZXdyaXR0ZW5gfS5gKTtcbiAgICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bmNoYW5nZWQnIH07XG4gICAgfVxuICB9XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsncHVzaCcsICctLWZvcmNlJywgJ29yaWdpbicsIGBIRUFEOnJlZnMvaGVhZHMvJHtwbGFuLmJyYW5jaH1gXSk7XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICBpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcbiAgICBjb25zdCBwck51bWJlciA9IE51bWJlcihleGlzdGluZyk7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBleGlzdGluZywgJy0tdGl0bGUnLCBwbGFuLnRpdGxlLCAnLS1ib2R5JywgYm9keV0pO1xuICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgaXNGYWlsZWQgPyBbJ3ByJywgJ3JlYWR5JywgZXhpc3RpbmcsICctLXVuZG8nXSA6IFsncHInLCAncmVhZHknLCBleGlzdGluZ10pO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IHVwZGF0ZWQgUFIgIyR7ZXhpc3Rpbmd9JHtpc0ZhaWxlZCA/ICcgKGRyYWZ0OiBhIHN0ZXAgZmFpbGVkKScgOiAnJ30uYCk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3VwZGF0ZWQnLCBwck51bWJlciB9O1xuICB9XG5cbiAgY29uc3QgdXJsID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbXG4gICAgJ3ByJyxcbiAgICAnY3JlYXRlJyxcbiAgICAnLS1iYXNlJyxcbiAgICBvcHRpb25zLmJhc2VCcmFuY2gsXG4gICAgJy0taGVhZCcsXG4gICAgcGxhbi5icmFuY2gsXG4gICAgJy0tdGl0bGUnLFxuICAgIHBsYW4udGl0bGUsXG4gICAgJy0tYm9keScsXG4gICAgYm9keSxcbiAgICAuLi4oaXNGYWlsZWQgPyBbJy0tZHJhZnQnXSA6IFtdKVxuICBdKS50cmltKCk7XG4gIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG9wZW5lZCAke3VybH0ke2lzRmFpbGVkID8gJyAoZHJhZnQ6IGEgc3RlcCBmYWlsZWQpJyA6ICcnfS5gKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBOdW1iZXIoL1xcL3B1bGxcXC8oPzxOdW1iZXI+XFxkKykvLmV4ZWModXJsKT8uZ3JvdXBzPy5bJ051bWJlciddID8/IE5hTik7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocHJOdW1iZXIpID8geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJyB9IDogeyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJywgcHJOdW1iZXIgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVTdGVwKGhlYWRpbmc6IHN0cmluZywgc3RlcDogU3RlcFJlc3VsdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaXNQYXNzZWQgPSBzdGVwLnJlc3VsdC5leGl0Q29kZSA9PT0gMDtcbiAgY29uc3Qgb3V0cHV0TGluZXMgPSBjbGVhbkNvbW1hbmRPdXRwdXQoc3RlcC5yZXN1bHQub3V0cHV0KS50cmltRW5kKCkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0YWlsID0gb3V0cHV0TGluZXMuc2xpY2UoLU9VVFBVVF9UQUlMX0xJTkVTKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmFpbHVyZUxpbmVzID0gaXNQYXNzZWQgPyBbXSA6IG91dHB1dExpbmVzLmZpbHRlcigobGluZSkgPT4gRkFJTFVSRV9MSU5FX1JFR19FWFAudGVzdChsaW5lKSkuc2xpY2UoMCwgRkFJTFVSRV9MSU5FX0xJTUlUKTtcbiAgcmV0dXJuIFtcbiAgICBgIyMjICR7aGVhZGluZ31gLFxuICAgICcnLFxuICAgIGBcXGAke3N0ZXAuY29tbWFuZH1cXGA6ICR7aXNQYXNzZWQgPyAncGFzc2VkJyA6IGAqKkZBSUxFRCoqIChleGl0ICR7U3RyaW5nKHN0ZXAucmVzdWx0LmV4aXRDb2RlKX0pYH0uYCxcbiAgICAnJyxcbiAgICAuLi4oZmFpbHVyZUxpbmVzLmxlbmd0aCA9PT0gMCA/IFtdIDogWydMaW5lcyByZXBvcnRpbmcgdGhlIGZhaWx1cmU6JywgJycsICdgYGB0ZXh0JywgLi4uZmFpbHVyZUxpbmVzLCAnYGBgJywgJyddKSxcbiAgICBpc1Bhc3NlZCA/ICc8ZGV0YWlscz48c3VtbWFyeT5PdXRwdXQ8L3N1bW1hcnk+JyA6ICc8ZGV0YWlscyBvcGVuPjxzdW1tYXJ5Pk91dHB1dDwvc3VtbWFyeT4nLFxuICAgICcnLFxuICAgICdgYGB0ZXh0JyxcbiAgICB0YWlsLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgICc8L2RldGFpbHM+JyxcbiAgICAnJ1xuICBdO1xufVxuXG5mdW5jdGlvbiBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMsIGZpbGU6IHN0cmluZywgYXJndW1lbnRzXzogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBkZXBlbmRlbmNpZXMuZXhlYyhmaWxlLCBhcmd1bWVudHNfKTtcbiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWxlfSAke2FyZ3VtZW50c18uam9pbignICcpfSBmYWlsZWQgKGV4aXQgJHtTdHJpbmcocmVzdWx0LmV4aXRDb2RlKX0pOiAke3Jlc3VsdC5vdXRwdXQudHJpbSgpfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmaW5kT3BlblByKGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcywgYnJhbmNoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgJG51bWJlciA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgWydwcicsICdsaXN0JywgJy0taGVhZCcsIGJyYW5jaCwgJy0tc3RhdGUnLCAnb3BlbicsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLlswXS5udW1iZXInXSkudHJpbSgpO1xuICByZXR1cm4gJG51bWJlciA9PT0gJycgfHwgJG51bWJlciA9PT0gJ251bGwnID8gbnVsbCA6ICRudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGlzR2l0VXBzdHJlYW0oZW50cnk6IFVwc3RyZWFtRW50cnkpOiBlbnRyeSBpcyBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgcmV0dXJuICdyZXBvJyBpbiBlbnRyeTtcbn1cblxuZnVuY3Rpb24gc2hvcnRlbihoZWFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gL15bMC05YS1mXXs0MH0kLy50ZXN0KGhlYWQpID8gaGVhZC5zbGljZSgwLCBTSE9SVF9TSEFfTEVOR1RIKSA6IGhlYWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN5bmNFbnRyeShlbnRyeTogVXBzdHJlYW1FbnRyeSwgY29uZmlnOiBVcHN0cmVhbXNDb25maWcsIG9wdGlvbnM6IFN5bmNVcHN0cmVhbXNPcHRpb25zLCBkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMpOiBQcm9taXNlPFN5bmNSZXN1bHQ+IHtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgY29tcGFyZVdpdGhVcHN0cmVhbShlbnRyeSwgZGVwZW5kZW5jaWVzKTtcbiAgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ2N1cnJlbnQnKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogY3VycmVudCBhdCAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfS5gKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnY3VycmVudCcgfTtcbiAgfVxuICBpZiAoc3RhdHVzLnN0YXRlID09PSAndW53YXRjaGVkJykge1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG1vdmVkIHRvICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LCBidXQgbm8gd2F0Y2hlZCBwYXRoIGNoYW5nZWQgc2luY2UgJHtzaG9ydGVuKHN0YXR1cy5waW4pfS5gKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAndW53YXRjaGVkJyB9O1xuICB9XG5cbiAgY29uc3QgcGxhbiA9IHBsYW5TeW5jKHN0YXR1cyk7XG4gIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG1vdmVkIGZyb20gJHtzaG9ydGVuKHN0YXR1cy5waW4pfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfS4gV291bGQgcHVzaCAke3BsYW4uYnJhbmNofSBhbmQgb3BlbjpgKTtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAgIHRpdGxlOiAke3BsYW4udGl0bGV9YCk7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhidWlsZFByQm9keShwbGFuLCBudWxsLCBudWxsKS5yZXBsYWNlQWxsKC9eL2dtLCAnICB8ICcpKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAncGxhbm5lZCcgfTtcbiAgfVxuXG4gIC8vIFRoZSB1cGRhdGUgY29tbWl0IHRha2VzIGV2ZXJ5IGZpbGUgaW4gdGhlIHRyZWUsIHNvIGEgZmlsZSBsZWZ0IGx5aW5nIGFyb3VuZCB3b3VsZCBiZSBwdXNoZWQgd2l0aCBpdC5cbiAgY29uc3QgZGlydHkgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ3N0YXR1cycsICctLXBvcmNlbGFpbiddKS50cmltKCk7XG4gIGlmIChkaXJ0eSAhPT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRoZSB3b3JraW5nIHRyZWUgaXMgbm90IGNsZWFuLCBhbmQgdGhlIHVwZGF0ZSBjb21taXQgd291bGQgdGFrZSB0aGVzZSBmaWxlcyB3aXRoIGl0OlxcbiR7ZGlydHl9YCk7XG4gIH1cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBvcHRpb25zLmJhc2VCcmFuY2hdKTtcbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydjaGVja291dCcsICctQicsIHBsYW4uYnJhbmNoLCBgb3JpZ2luLyR7b3B0aW9ucy5iYXNlQnJhbmNofWBdKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXBwbHlQbGFuKHBsYW4sIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydjaGVja291dCcsICctLWZvcmNlJywgb3B0aW9ucy5iYXNlQnJhbmNoXSk7XG4gICAgZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnYnJhbmNoJywgJy0tZGVsZXRlJywgJy0tZm9yY2UnLCBwbGFuLmJyYW5jaF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvTGFzdExpbmVTdGF0ZShsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzdGF0ZXMgPSBsaW5lLnJlcGxhY2UoL1xcciskLywgJycpO1xuICByZXR1cm4gc3RhdGVzLnNsaWNlKHN0YXRlcy5sYXN0SW5kZXhPZignXFxyJykgKyAxKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLHFCQUdPO0FBQ1AsdUJBQTRCO0FBMk41QixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLG1CQUFtQjtBQUt6QixNQUFNLG9CQUFvQjtBQUsxQixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLHFCQUFxQjtBQU0zQixNQUFNLE1BQU0sT0FBTztBQU9uQixNQUFNLDJCQUEyQixJQUFJO0FB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
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Vwc3RyZWFtLXN5bmMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXYXRjaGVzIHRoZSB1cHN0cmVhbXMgYSByZXBvc2l0b3J5IG1pcnJvcnMgYW5kIG9wZW5zIG9uZSB1cGRhdGUgUFIgcGVyIHVwc3RyZWFtIHRoYXQgbW92ZWQuXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIGRyaXZlbiBieSBgdXBzdHJlYW1zLmpzb25gIGFuZCB0aGUgaGFuZGxlciBjb21tYW5kcyBpdCBuYW1lcywgc28gYW55IHJlcG9zaXRvcnkgdGhhdCB2ZW5kb3JzXG4gKiB1cHN0cmVhbSBjb2RlIGNhbiB1c2UgaXQ6IHRocm91Z2ggdGhlIGBzeW5jLXVwc3RyZWFtc2AgYmluLCBvciB0aGUgcmV1c2FibGUgYHN5bmMtdXBzdHJlYW1zLnltbGAgd29ya2Zsb3cuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWF0Y2hlc0dsb2IgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFdoYXQgYSBjb21tYW5kIHByaW50ZWQgYW5kIGhvdyBpdCBleGl0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdCB7XG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIG9uIGEgR2l0SHViIGJyYW5jaCBvciB0YWcsIHBpbm5lZCB0byBhIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgY29tbWl0OiB0aGUgbGFzdCB1cHN0cmVhbSBzdGF0ZSB0aGUgaGFuZGxlciB3YXMgcnVuIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBjb21taXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgdHVybnMgYSBuZXdlciB1cHN0cmVhbSBzdGF0ZSBpbnRvIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgd2F0Y2hlZCB1cHN0cmVhbSwgYXMgZ2xvYnMgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gQSBtb3ZlIHRoYXQgdG91Y2hlcyBub25lIG9mIHRoZW0gb3BlbnMgbm8gUFIuXG4gICAqL1xuICByZWFkb25seSBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIG9yIHRhZyBmb2xsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZjogc3RyaW5nO1xuICAvKipcbiAgICogYDxvd25lcj4vPHJlcG8+YCBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgaGFuZGxlcidzIHJlc3VsdC4gT3ZlcnJpZGVzIHRoZSBmaWxlJ3MgdG9wLWxldmVsIGB2ZXJpZnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIGFzIGFuIG5wbSBwYWNrYWdlJ3MgZGlzdC10YWcsIHBpbm5lZCB0byBhIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtVXBzdHJlYW1FbnRyeSB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5wbTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRpc3QtdGFnIGZvbGxvd2VkLiBgbGF0ZXN0YCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBpbm5lZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgdGhlIHN5bmMgZG9lcyB0byB0aGUgb3V0c2lkZSB3b3JsZCwgc28gYSB0ZXN0IGNhbiBzdGFuZCBhIGZpeHR1cmUgaW4gZm9yIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNEZXBlbmRlbmNpZXMge1xuICAvKipcbiAgICogUnVucyBhbiBleGVjdXRhYmxlIHdpdGggYXJndW1lbnRzIGFuZCBubyBzaGVsbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWM6IChmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdLCBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4gQ29tbWFuZFJlc3VsdDtcbiAgLyoqXG4gICAqIEdFVHMgYSBVUkwgYW5kIHBhcnNlcyB0aGUgSlNPTiBpdCByZXR1cm5zLCB0aHJvd2luZyBvbiBhbiBIVFRQIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hKc29uOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRvbmx5IGxvZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgc2hlbGw6IGEgaGFuZGxlciBvciBhIHZlcmlmeSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGw6IChjb21tYW5kOiBzdHJpbmcsIGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSA9PiBDb21tYW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBQUiBhbiB1cHN0cmVhbSBtb3ZlIGFza3MgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNQbGFuIHtcbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1czogVXBzdHJlYW1TdGF0dXM7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBoYXBwZW5lZCB0byBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBjaGVja2luZyBvciBhcHBseWluZyB0aHJldzogdGhlIGpvYiByZXBvcnRzIGl0IGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgcGxhbm5lZGAgaW4gYSBkcnkgcnVuLCBgb3BlbmVkYC9gdXBkYXRlZGAgd2hlbiBhIFBSIHdhcyBwdXNoZWQsIGB1bmNoYW5nZWRgIHdoZW4gdGhlIGJyYW5jaCBhbHJlYWR5IGhlbGQgdGhpcyByZXN1bHQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiAnY3VycmVudCcgfCAnZXJyb3InIHwgJ29wZW5lZCcgfCAncGxhbm5lZCcgfCAndW5jaGFuZ2VkJyB8ICd1bndhdGNoZWQnIHwgJ3VwZGF0ZWQnO1xuICByZWFkb25seSBwck51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzeW5jVXBzdHJlYW1zfSBzeW5jcywgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW5jVXBzdHJlYW1zT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIGVhY2ggUFIgdGFyZ2V0cyBhbmQgZWFjaCB1cGRhdGUgYnJhbmNoIGlzIGN1dCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gYHVwc3RyZWFtcy5qc29uYCwgd2hpY2ggdGhlIHN5bmMgdXBkYXRlcyB0aGUgcGluIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGxhbiBhbmQgcHJpbnQgZXZlcnkgUFIsIGFuZCBjaGFuZ2Ugbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9ubHkgdGhlIGVudHJpZXMgd2l0aCB0aGVzZSBuYW1lcywgb3IgZXZlcnkgZW50cnkgd2hlbiBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IG9ubHk6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSB1cHN0cmVhbSB0aGF0IGB1cHN0cmVhbXMuanNvbmAgbGlzdHM6IGEgZ2l0IG9uZSBvciBhbiBucG0gb25lLlxuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbUVudHJ5ID0gR2l0VXBzdHJlYW1FbnRyeSB8IE5wbVVwc3RyZWFtRW50cnk7XG5cbi8qKlxuICogVGhlIGNvbnRlbnQgb2YgYHVwc3RyZWFtcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHN0cmVhbXNDb25maWcge1xuICByZWFkb25seSB1cHN0cmVhbXM6IHJlYWRvbmx5IFVwc3RyZWFtRW50cnlbXTtcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgY2hlY2tzIGV2ZXJ5IGhhbmRsZXIncyByZXN1bHQsIHVubGVzcyBhbiBlbnRyeSBuYW1lcyBpdHMgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgb25lIGNvbXBhcmlzb24gb2YgYW4gZW50cnkgd2l0aCBpdHMgdXBzdHJlYW0gZm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzdHJlYW1TdGF0dXMge1xuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIHBhdGhzIHRoYXQgY2hhbmdlZCBhbmQgYXJlIHdhdGNoZWQsIHNvcnRlZC4gQWx3YXlzIGVtcHR5IGZvciBhbiBucG0gdXBzdHJlYW0uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VkUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQSBsaW5rIHRoYXQgc2hvd3Mgd2hhdCBjaGFuZ2VkIGJldHdlZW4gdGhlIHBpbiBhbmQgdGhlIGhlYWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXJlVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudHJ5OiBVcHN0cmVhbUVudHJ5O1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBvciB2ZXJzaW9uIHRoZSB1cHN0cmVhbSBpcyBhdCBub3cuXG4gICAqL1xuICByZWFkb25seSBoZWFkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG9yIHZlcnNpb24gYHVwc3RyZWFtcy5qc29uYCByZWNvcmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGluOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgY3VycmVudGA6IG5vdGhpbmcgdG8gZG8uIGBtb3ZlZGA6IGEgUFIgaXMgZHVlLiBgdW53YXRjaGVkYDogdXBzdHJlYW0gbW92ZWQsIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiAnY3VycmVudCcgfCAnbW92ZWQnIHwgJ3Vud2F0Y2hlZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEdpdEh1YiB0cnVuY2F0ZWQgdGhlIGNvbXBhcmUncyBmaWxlIGxpc3QsIHNvIGEgd2F0Y2hlZCBwYXRoIG1heSBiZSBtaXNzaW5nIGZyb20gYGNoYW5nZWRQYXRoc2AuXG4gICAqL1xuICByZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBHaXRIdWJDb21taXQge1xuICByZWFkb25seSBzaGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YkNvbXBhcmUge1xuICByZWFkb25seSBmaWxlcz86IHJlYWRvbmx5IEdpdEh1YkNvbXBhcmVGaWxlW107XG59XG5cbi8qKlxuICogT25lIGZpbGUgb2YgYSBHaXRIdWIgY29tcGFyZSwgYXMgdGhlIEFQSSBzcGVsbHMgaXQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJDb21wYXJlRmlsZSB7XG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgcHJldmlvdXNfZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOcG1QYWNrdW1lbnQge1xuICByZWFkb25seSAnZGlzdC10YWdzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBSZXN1bHQge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdDogQ29tbWFuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxlciBhbmQgdmVyaWZ5IHJ1bnMgYSBQUiBib2R5IHJlcG9ydHMuXG4gKi9cbmludGVyZmFjZSBTdGVwUmVzdWx0cyB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IFN0ZXBSZXN1bHQ7XG4gIHJlYWRvbmx5IHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQ7XG59XG5cbi8qKlxuICogYHVwc3RyZWFtcy5qc29uYCByZWFkIGxvb3NlbHksIHRvIHdyaXRlIG9uZSB2YWx1ZSBiYWNrIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgcmVzdC5cbiAqL1xuaW50ZXJmYWNlIFVwc3RyZWFtc0ZpbGVTaGFwZSB7XG4gIHJlYWRvbmx5IHVwc3RyZWFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBHaXRIdWIncyBjb21wYXJlIEFQSSBsaXN0cyBhdCBtb3N0IHRoaXMgbWFueSBmaWxlcywgYW5kIHNheXMgbm90aGluZyB3aGVuIGl0IHN0b3BzLlxuICovXG5jb25zdCBDT01QQVJFX0ZJTEVfTElNSVQgPSAzMDA7XG5cbmNvbnN0IFNIT1JUX1NIQV9MRU5HVEggPSAxMjtcblxuLyoqXG4gKiBUaGUgdGFpbCBvZiBhIGNvbW1hbmQncyBvdXRwdXQgYSBQUiBib2R5IHF1b3RlczogZW5vdWdoIHRvIHJlYWQgYSBmYWlsdXJlLCBzaG9ydCBlbm91Z2ggdG8gc3RheSB1bmRlciBHaXRIdWIncyBib2R5IGxpbWl0LlxuICovXG5jb25zdCBPVVRQVVRfVEFJTF9MSU5FUyA9IDYwO1xuXG4vKipcbiAqIFRoZSBtb3N0IGxpbmVzIHRoYXQgcmVwb3J0IGEgZmFpbHVyZSBhIGZhaWxlZCBzdGVwJ3Mgc2VjdGlvbiBvcGVucyB3aXRoLCBhaGVhZCBvZiBpdHMgb3V0cHV0IHRhaWwuXG4gKi9cbmNvbnN0IEZBSUxVUkVfTElORV9MSU1JVCA9IDIwO1xuXG5jb25zdCBKU09OX0lOREVOVF9TUEFDRVMgPSAyO1xuXG4vKipcbiAqIFRoZSBFU0MgdGhhdCBvcGVucyBhIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UsIGVpdGhlciBhcyB0aGUgYnl0ZSBvciBhcyB0aGUgY2FyZXQgdGV4dCBgXltgIGEgbG9nIHZpZXdlciBvciBhblxuICogZWFybGllciBjb3B5IHR1cm5lZCBpdCBpbnRvLiBCb3RoIHJlYWNoZWQgYSBQUiBib2R5OiBjcmVhdGUtb2JzaWRpYW4tcGx1Z2luIzIgY2FycmllZCB0aGUgY2FyZXQgZm9ybS5cbiAqL1xuY29uc3QgRVNDID0gU3RyaW5nLnJhd2AoPzpcXHUwMDFCfFxcXlxcWylgO1xuXG4vKipcbiAqIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciBzZXF1ZW5jZXMgKGNvbG9ycywgY3Vyc29yIG1vdmVzKSwgT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kIHNlcXVlbmNlcyAoaHlwZXJsaW5rcyxcbiAqIHRpdGxlcywgZW5kZWQgYnkgQkVMIG9yIFNULCBhbHNvIGFzIGBeR2ApLCBhbmQgdGhlIHR3by1jaGFyYWN0ZXIgZXNjYXBlcy4gQSB0d28tY2hhcmFjdGVyIGVzY2FwZSBpcyBtYXRjaGVkIG9ubHkgYXNcbiAqIHRoZSBieXRlLCBiZWNhdXNlIGl0cyBjYXJldCB0ZXh0IGFsc28gc3BlbGxzIGFuIG9yZGluYXJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiwgc3VjaCBhcyBgXltBLVpdYC5cbiAqL1xuY29uc3QgVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQID0gbmV3IFJlZ0V4cChcbiAgU3RyaW5nLnJhd2Ake0VTQ31cXFtbMC0/XSpbIC0vXSpbQC1+XXwke0VTQ31cXF1bXlxcdTAwMDdcXHUwMDFCXl0qKD86XFx1MDAwN3xcXF5HfCR7RVNDfVxcXFwpfFxcdTAwMUJbQC1aXFxcXC1fXWAsXG4gICdnJ1xuKTtcblxuLyoqXG4gKiBBIGxpbmUgdGhhdCByZXBvcnRzIGEgZmFpbHVyZSwgd2hpY2ggYSBmYWlsZWQgc3RlcCdzIHNlY3Rpb24gcXVvdGVzIGZpcnN0LCBiZWNhdXNlIHRoZSB0YWlsIG1heSBiZSBhIGdyZWVuIHRlc3QgcnVuXG4gKiB0aGF0IGZpbmlzaGVkIGFmdGVyIGl0LlxuICovXG5jb25zdCBGQUlMVVJFX0xJTkVfUkVHX0VYUCA9IC9zdGVwLWZhaWxlZHxcXGJmYWlsKD86c3xlZHx1cmV8aW5nKT9cXGJ8XFxiZXJyb3JcXGJ8XFxibm90IGZvdW5kXFxifFxcYkVSUiF8W1x1MjcxN1x1MDBEN10vaTtcblxuLyoqXG4gKiBXcml0ZXMgdGhlIFBSIGJvZHkuXG4gKlxuICogQHBhcmFtIHBsYW4gLSBUaGUgcGxhbi5cbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBoYW5kbGVyIGFuZCB2ZXJpZnkgcnVucywgb3IgYG51bGxgIGluIGEgZHJ5IHJ1biwgd2hlcmUgbmVpdGhlciBydW5zLlxuICogQHBhcmFtIGRpZmZTdGF0IC0gYGdpdCBkaWZmIC0tc3RhdGAgb2YgdGhlIHVwZGF0ZSBjb21taXQsIG9yIGBudWxsYCBpbiBhIGRyeSBydW4uXG4gKiBAcmV0dXJucyBUaGUgYm9keSwgaW4gTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByQm9keShwbGFuOiBTeW5jUGxhbiwgc3RlcHM6IG51bGwgfCBTdGVwUmVzdWx0cywgZGlmZlN0YXQ6IG51bGwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB7IGVudHJ5LCBoZWFkLCBwaW4gfSA9IHBsYW4uc3RhdHVzO1xuICBjb25zdCBzb3VyY2UgPSBpc0dpdFVwc3RyZWFtKGVudHJ5KSA/IGBcXGAke2VudHJ5LnJlcG99QCR7ZW50cnkucmVmfVxcYGAgOiBgbnBtIFxcYCR7ZW50cnkubnBtfUAke2VudHJ5LnRhZyA/PyAnbGF0ZXN0J31cXGBgO1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgVXBzdHJlYW0gXFxgJHtlbnRyeS5uYW1lfVxcYCBtb3ZlZDogJHtzb3VyY2V9IGZyb20gXFxgJHtwaW59XFxgIHRvIFxcYCR7aGVhZH1cXGAuYCxcbiAgICAnJyxcbiAgICBgQ29tcGFyZTogJHtwbGFuLnN0YXR1cy5jb21wYXJlVXJsfWAsXG4gICAgJydcbiAgXTtcblxuICBpZiAoaXNHaXRVcHN0cmVhbShlbnRyeSkpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgQ2hhbmdlZCB1cHN0cmVhbSBmaWxlcycsICcnLCAuLi5wbGFuLnN0YXR1cy5jaGFuZ2VkUGF0aHMubWFwKChwYXRoKSA9PiBgLSBcXGAke3BhdGh9XFxgYCkpO1xuICAgIGlmIChwbGFuLnN0YXR1cy50cnVuY2F0ZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gR2l0SHViIGxpc3RzIGF0IG1vc3QgJHtTdHJpbmcoQ09NUEFSRV9GSUxFX0xJTUlUKX0gZmlsZXM6IG9wZW4gdGhlIGNvbXBhcmUgbGluayBmb3IgdGhlIHJlc3QuYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgaWYgKHN0ZXBzID09PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEhhbmRsZXInLCAnJywgYFxcYCR7ZW50cnkuaGFuZGxlcn1cXGA6IG5vdCBydW4gKGRyeSBydW4pLmAsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnSGFuZGxlcicsIHN0ZXBzLmhhbmRsZXIpKTtcbiAgICBpZiAoc3RlcHMudmVyaWZ5ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnVmVyaWZ5Jywgc3RlcHMudmVyaWZ5KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpZmZTdGF0ICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEdlbmVyYXRlZCBjaGFuZ2VzJywgJycsICdgYGB0ZXh0JywgY2xlYW5Db21tYW5kT3V0cHV0KGRpZmZTdGF0KS50cmltRW5kKCksICdgYGAnLCAnJyk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCdUaGlzIFBSIHdhcyBvcGVuZWQgYnkgdGhlIHVwc3RyZWFtLXN5bmMgam9iIGFuZCBpcyBuZXZlciBtZXJnZWQgYXV0b21hdGljYWxseS4nKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbi8qKlxuICogVHVybnMgYSBjb21tYW5kJ3MgY2FwdHVyZWQgb3V0cHV0IGludG8gcGxhaW4gdGV4dCBhIFBSIGJvZHkgY2FuIHF1b3RlOiB0ZXJtaW5hbCBjb250cm9sIHNlcXVlbmNlcyBhcmUgcmVtb3ZlZCxcbiAqIHdoZXRoZXIgdGhleSBhcnJpdmVkIGFzIEVTQyBieXRlcyBvciBhcyB0aGVpciBjYXJldC1yZW5kZXJlZCBgXltbLi4ubWAgdGV4dCwgYW5kIGEgbGluZSBhIHByb2dyZXNzIGRpc3BsYXkgcmV3cm90ZVxuICogd2l0aCBgXFxyYCBrZWVwcyBvbmx5IGl0cyBsYXN0IHN0YXRlLlxuICpcbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgY2FwdHVyZWQgb3V0cHV0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNvbW1hbmRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gb3V0cHV0XG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQLCAnJylcbiAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHRvTGFzdExpbmVTdGF0ZShsaW5lKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgb25lIGVudHJ5IHdpdGggaXRzIHVwc3RyZWFtLlxuICpcbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgb3V0c2lkZSB3b3JsZC5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIGNvbXBhcmlzb24gZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBkZXBlbmRlbmNpZXM6IFBpY2s8U3luY0RlcGVuZGVuY2llcywgJ2ZldGNoSnNvbic+KTogUHJvbWlzZTxVcHN0cmVhbVN0YXR1cz4ge1xuICBpZiAoIWlzR2l0VXBzdHJlYW0oZW50cnkpKSB7XG4gICAgY29uc3QgdGFnID0gZW50cnkudGFnID8/ICdsYXRlc3QnO1xuICAgIGNvbnN0IHBhY2t1bWVudCA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7ZW50cnkubnBtLnJlcGxhY2UoJy8nLCAnJTJmJyl9YCkgYXMgTnBtUGFja3VtZW50O1xuICAgIGNvbnN0IGhlYWQgPSBwYWNrdW1lbnRbJ2Rpc3QtdGFncyddW3RhZ107XG4gICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBucG0gcGFja2FnZSAke2VudHJ5Lm5wbX0gaGFzIG5vIGRpc3QtdGFnIFwiJHt0YWd9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VkUGF0aHM6IFtdLFxuICAgICAgY29tcGFyZVVybDogYGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlLyR7ZW50cnkubnBtfS92LyR7aGVhZH1gLFxuICAgICAgZW50cnksXG4gICAgICBoZWFkLFxuICAgICAgcGluOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgc3RhdGU6IGhlYWQgPT09IGVudHJ5LnZlcnNpb24gPyAnY3VycmVudCcgOiAnbW92ZWQnLFxuICAgICAgdHJ1bmNhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21taXQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuZmV0Y2hKc29uKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7ZW50cnkucmVwb30vY29tbWl0cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbnRyeS5yZWYpfWApIGFzIEdpdEh1YkNvbW1pdDtcbiAgY29uc3QgaGVhZCA9IGNvbW1pdC5zaGE7XG4gIGNvbnN0IGNvbXBhcmVVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vY29tcGFyZS8ke2VudHJ5LmNvbW1pdH0uLi4ke2hlYWR9YDtcbiAgaWYgKGhlYWQgPT09IGVudHJ5LmNvbW1pdCkge1xuICAgIHJldHVybiB7IGNoYW5nZWRQYXRoczogW10sIGNvbXBhcmVVcmwsIGVudHJ5LCBoZWFkLCBwaW46IGVudHJ5LmNvbW1pdCwgc3RhdGU6ICdjdXJyZW50JywgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgY29tcGFyZSA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9jb21wYXJlLyR7ZW50cnkuY29tbWl0fS4uLiR7aGVhZH1gKSBhcyBHaXRIdWJDb21wYXJlO1xuICBjb25zdCBmaWxlcyA9IGNvbXBhcmUuZmlsZXMgPz8gW107XG4gIGNvbnN0IHRvdWNoZWQgPSBuZXcgU2V0KGZpbGVzLmZsYXRNYXAoKGZpbGUpID0+IGZpbGUucHJldmlvdXNfZmlsZW5hbWUgPT09IHVuZGVmaW5lZCA/IGZpbGUuZmlsZW5hbWUgOiBbZmlsZS5maWxlbmFtZSwgZmlsZS5wcmV2aW91c19maWxlbmFtZV0pKTtcbiAgY29uc3QgY2hhbmdlZFBhdGhzID0gWy4uLnRvdWNoZWRdLmZpbHRlcigocGF0aCkgPT4gZW50cnkucGF0aHMuc29tZSgoZ2xvYikgPT4gbWF0Y2hlc0dsb2IocGF0aCwgZ2xvYikpKS5zb3J0KCk7XG4gIGNvbnN0IGlzVHJ1bmNhdGVkID0gZmlsZXMubGVuZ3RoID49IENPTVBBUkVfRklMRV9MSU1JVDtcbiAgcmV0dXJuIHtcbiAgICBjaGFuZ2VkUGF0aHMsXG4gICAgY29tcGFyZVVybCxcbiAgICBlbnRyeSxcbiAgICBoZWFkLFxuICAgIHBpbjogZW50cnkuY29tbWl0LFxuICAgIHN0YXRlOiBjaGFuZ2VkUGF0aHMubGVuZ3RoID4gMCB8fCBpc1RydW5jYXRlZCA/ICdtb3ZlZCcgOiAndW53YXRjaGVkJyxcbiAgICB0cnVuY2F0ZWQ6IGlzVHJ1bmNhdGVkXG4gIH07XG59XG5cbi8qKlxuICogUGFyc2VzIGFuZCB2YWxpZGF0ZXMgYW4gYHVwc3RyZWFtcy5qc29uYC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBmaWxlJ3MgY29udGVudC5cbiAqIEByZXR1cm5zIFRoZSBjb25maWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVwc3RyZWFtc0NvbmZpZyh0ZXh0OiBzdHJpbmcpOiBVcHN0cmVhbXNDb25maWcge1xuICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHRleHQpIGFzIFBhcnRpYWw8VXBzdHJlYW1zQ29uZmlnPjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy51cHN0cmVhbXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndXBzdHJlYW1zLmpzb24gaGFzIG5vIFwidXBzdHJlYW1zXCIgYXJyYXkuJyk7XG4gIH1cbiAgLy8gUmVhZCB0aHJvdWdoIGBSZWZsZWN0LmdldGAsIGJlY2F1c2Ugbm90aGluZyBhYm91dCB0aGUgcGFyc2VkIGVudHJpZXMgaXMga25vd24geWV0LlxuICBjb25zdCBlbnRyaWVzOiByZWFkb25seSBvYmplY3RbXSA9IGNvbmZpZy51cHN0cmVhbXM7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDx1bmtub3duPigpO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBuYW1lOiB1bmtub3duID0gUmVmbGVjdC5nZXQoZW50cnksICduYW1lJyk7XG4gICAgY29uc3QgbGFiZWwgPSB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgPyBgXCIke25hbWV9XCJgIDogJ3dpdGggbm8gbmFtZSc7XG4gICAgY29uc3QgaXNHaXQgPSAncmVwbycgaW4gZW50cnk7XG4gICAgY29uc3QgcmVxdWlyZWQgPSBpc0dpdCA/IFsnbmFtZScsICdyZXBvJywgJ3JlZicsICdjb21taXQnLCAnaGFuZGxlciddIDogWyduYW1lJywgJ25wbScsICd2ZXJzaW9uJywgJ2hhbmRsZXInXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiByZXF1aXJlZCkge1xuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0LmdldChlbnRyeSwga2V5KSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdXBzdHJlYW1zLmpzb246IGVudHJ5ICR7bGFiZWx9IG5lZWRzIGEgc3RyaW5nIFwiJHtrZXl9XCIuYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0dpdCAmJiAhQXJyYXkuaXNBcnJheShSZWZsZWN0LmdldChlbnRyeSwgJ3BhdGhzJykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uOiBlbnRyeSAke2xhYmVsfSBuZWVkcyBhIFwicGF0aHNcIiBhcnJheS5gKTtcbiAgICB9XG4gICAgaWYgKG5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1cHN0cmVhbXMuanNvbjogdGhlIG5hbWUgJHtsYWJlbH0gaXMgdXNlZCB0d2ljZS5gKTtcbiAgICB9XG4gICAgbmFtZXMuYWRkKG5hbWUpO1xuICB9XG4gIHJldHVybiBjb25maWcgYXMgVXBzdHJlYW1zQ29uZmlnO1xufVxuXG4vKipcbiAqIFBsYW5zIHRoZSBQUiBhIG1vdmVkIHVwc3RyZWFtIGFza3MgZm9yLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgY29tcGFyaXNvbiBvZiBhIG1vdmVkIGVudHJ5LlxuICogQHJldHVybnMgVGhlIGJyYW5jaCBhbmQgdGl0bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbGFuU3luYyhzdGF0dXM6IFVwc3RyZWFtU3RhdHVzKTogU3luY1BsYW4ge1xuICByZXR1cm4ge1xuICAgIGJyYW5jaDogYHVwc3RyZWFtLyR7c3RhdHVzLmVudHJ5Lm5hbWV9YCxcbiAgICBzdGF0dXMsXG4gICAgdGl0bGU6IGBjaG9yZSh1cHN0cmVhbSk6IHN5bmMgJHtzdGF0dXMuZW50cnkubmFtZX0gdG8gJHtzaG9ydGVuKHN0YXR1cy5oZWFkKX1gXG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGV2ZXJ5IGVudHJ5LCBhbmQgb3BlbnMgb3IgdXBkYXRlcyBvbmUgUFIgcGVyIG1vdmVkIHVwc3RyZWFtLlxuICpcbiAqIEEgaGFuZGxlciBvciB2ZXJpZnkgZmFpbHVyZSBzdGlsbCBvcGVucyB0aGUgUFIsIGFzIGEgZHJhZnQgd2l0aCB0aGUgZmFpbHVyZSBpbiBpdHMgYm9keSwgc28gYSBicmVha2luZyB1cHN0cmVhbSBjaGFuZ2VcbiAqIGlzIHNlZW4gcmF0aGVyIHRoYW4gc2tpcHBlZC4gQW4gZXJyb3IgaW4gdGhlIHN5bmMgaXRzZWxmLCBzdWNoIGFzIGEgZmFpbGVkIEFQSSBjYWxsLCBpcyByZXBvcnRlZCBpbiB0aGUgZW50cnkncyByZXN1bHRcbiAqIGFuZCB0aGUgbmV4dCBlbnRyeSBzdGlsbCBydW5zLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gV2hhdCB0byBzeW5jLCBhbmQgaG93LlxuICogQHBhcmFtIGRlcGVuZGVuY2llcyAtIFRoZSBvdXRzaWRlIHdvcmxkLlxuICogQHJldHVybnMgT25lIHJlc3VsdCBwZXIgZW50cnkgY2hlY2tlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN5bmNVcHN0cmVhbXMob3B0aW9uczogU3luY1Vwc3RyZWFtc09wdGlvbnMsIGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcyk6IFByb21pc2U8U3luY1Jlc3VsdFtdPiB7XG4gIGNvbnN0IGNvbmZpZyA9IHBhcnNlVXBzdHJlYW1zQ29uZmlnKHJlYWRGaWxlU3luYyhvcHRpb25zLmNvbmZpZ1BhdGgsICd1dGYtOCcpKTtcbiAgY29uc3QgdW5rbm93biA9IG9wdGlvbnMub25seS5maWx0ZXIoKG5hbWUpID0+IGNvbmZpZy51cHN0cmVhbXMuZXZlcnkoKGVudHJ5KSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKSk7XG4gIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uIGhhcyBubyBlbnRyeSBuYW1lZCAke3Vua25vd24ubWFwKChuYW1lKSA9PiBgXCIke25hbWV9XCJgKS5qb2luKCcsICcpfS5gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdHM6IFN5bmNSZXN1bHRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbmZpZy51cHN0cmVhbXMpIHtcbiAgICBpZiAob3B0aW9ucy5vbmx5Lmxlbmd0aCA+IDAgJiYgIW9wdGlvbnMub25seS5pbmNsdWRlcyhlbnRyeS5uYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgc3luY0VudHJ5KGVudHJ5LCBjb25maWcsIG9wdGlvbnMsIGRlcGVuZGVuY2llcykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogRVJST1IgJHttZXNzYWdlfWApO1xuICAgICAgcmVzdWx0cy5wdXNoKHsgZXJyb3I6IG1lc3NhZ2UsIG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdlcnJvcicgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIFJlY29yZHMgYGhlYWRgIGFzIHRoZSBlbnRyeSdzIHBpbiBpbiBgdXBzdHJlYW1zLmpzb25gLCB1bmxlc3MgdGhlIGhhbmRsZXIgYWxyZWFkeSBtb3ZlZCBpdCwga2VlcGluZyB0aGUgZmlsZSdzXG4gKiBrZXkgb3JkZXIgYW5kIGZvcm1hdHRpbmcuXG4gKlxuICogQHBhcmFtIGNvbmZpZ1BhdGggLSBUaGUgcGF0aCB0byBgdXBzdHJlYW1zLmpzb25gLlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBjb21wYXJpc29uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVQaW4oY29uZmlnUGF0aDogc3RyaW5nLCBzdGF0dXM6IFVwc3RyZWFtU3RhdHVzKTogdm9pZCB7XG4gIGNvbnN0IHRleHQgPSByZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0Zi04Jyk7XG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCkgYXMgVXBzdHJlYW1zRmlsZVNoYXBlO1xuICBjb25zdCBrZXkgPSBpc0dpdFVwc3RyZWFtKHN0YXR1cy5lbnRyeSkgPyAnY29tbWl0JyA6ICd2ZXJzaW9uJztcbiAgY29uc3QgdGFyZ2V0ID0gcGFyc2VkLnVwc3RyZWFtcy5maW5kKChlbnRyeSkgPT4gZW50cnlbJ25hbWUnXSA9PT0gc3RhdHVzLmVudHJ5Lm5hbWUpO1xuICBpZiAodGFyZ2V0Py5ba2V5XSAhPT0gc3RhdHVzLnBpbikge1xuICAgIHJldHVybjtcbiAgfVxuICB0YXJnZXRba2V5XSA9IHN0YXR1cy5oZWFkO1xuICB3cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIGAke0pTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgSlNPTl9JTkRFTlRfU1BBQ0VTKX1cXG5gKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlQbGFuKHBsYW46IFN5bmNQbGFuLCBjb25maWc6IFVwc3RyZWFtc0NvbmZpZywgb3B0aW9uczogU3luY1Vwc3RyZWFtc09wdGlvbnMsIGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcyk6IFN5bmNSZXN1bHQge1xuICBjb25zdCB7IGVudHJ5IH0gPSBwbGFuLnN0YXR1cztcbiAgLy8gTm8gY29sb3I6IHRoZSBvdXRwdXQgaXMgcXVvdGVkIGluIGEgUFIgYm9keSwgd2hlcmUgYSBjb2xvciBjb2RlIGlzIG9ubHkgbm9pc2UuIGBDSWAgaXMgbGVmdCBhbG9uZSwgYmVjYXVzZSBpdFxuICAvLyBjaGFuZ2VzIHdoYXQgc29tZSB0b29scyBkbywgbm90IGp1c3QgaG93IHRoZXkgcHJpbnQuXG4gIGNvbnN0IGVudiA9IHsgRk9SQ0VfQ09MT1I6ICcwJywgTk9fQ09MT1I6ICcxJywgVVBTVFJFQU1fTkFNRTogZW50cnkubmFtZSwgVVBTVFJFQU1fVEFSR0VUOiBwbGFuLnN0YXR1cy5oZWFkIH07XG4gIGNvbnN0IGhhbmRsZXI6IFN0ZXBSZXN1bHQgPSB7IGNvbW1hbmQ6IGVudHJ5LmhhbmRsZXIsIHJlc3VsdDogZGVwZW5kZW5jaWVzLnNoZWxsKGVudHJ5LmhhbmRsZXIsIGVudikgfTtcbiAgd3JpdGVQaW4ob3B0aW9ucy5jb25maWdQYXRoLCBwbGFuLnN0YXR1cyk7XG4gIGNvbnN0IHZlcmlmeUNvbW1hbmQgPSBlbnRyeS52ZXJpZnkgPz8gY29uZmlnLnZlcmlmeTtcbiAgY29uc3QgdmVyaWZ5OiBudWxsIHwgU3RlcFJlc3VsdCA9IHZlcmlmeUNvbW1hbmQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB7IGNvbW1hbmQ6IHZlcmlmeUNvbW1hbmQsIHJlc3VsdDogZGVwZW5kZW5jaWVzLnNoZWxsKHZlcmlmeUNvbW1hbmQsIGVudikgfTtcbiAgY29uc3QgaXNGYWlsZWQgPSBoYW5kbGVyLnJlc3VsdC5leGl0Q29kZSAhPT0gMCB8fCAodmVyaWZ5ICE9PSBudWxsICYmIHZlcmlmeS5yZXN1bHQuZXhpdENvZGUgIT09IDApO1xuXG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnYWRkJywgJy0tYWxsJ10pO1xuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2NvbW1pdCcsICctLW5vLXZlcmlmeScsICctLW1lc3NhZ2UnLCBwbGFuLnRpdGxlXSk7XG4gIGNvbnN0IGRpZmZTdGF0ID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydkaWZmJywgJy0tc3RhdCcsICdIRUFEfjEnLCAnSEVBRCddKTtcblxuICBjb25zdCBib2R5ID0gYnVpbGRQckJvZHkocGxhbiwgeyBoYW5kbGVyLCB2ZXJpZnkgfSwgZGlmZlN0YXQpO1xuICBjb25zdCBpc1JlbW90ZUJyYW5jaCA9IGRlcGVuZGVuY2llcy5leGVjKCdnaXQnLCBbJ2xzLXJlbW90ZScsICctLWV4aXQtY29kZScsICctLWhlYWRzJywgJ29yaWdpbicsIHBsYW4uYnJhbmNoXSkuZXhpdENvZGUgPT09IDA7XG4gIGlmIChpc1JlbW90ZUJyYW5jaCkge1xuICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnZmV0Y2gnLCAnb3JpZ2luJywgcGxhbi5icmFuY2hdKTtcbiAgICBpZiAoZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnZGlmZicsICctLXF1aWV0JywgJ0ZFVENIX0hFQUQnLCAnSEVBRCddKS5leGl0Q29kZSA9PT0gMCkge1xuICAgICAgLy8gVGhlIGJvZHkgaXMgc3RpbGwgcmV3cml0dGVuLCBzbyBhIGNoYW5nZSB0byBob3cgaXQgaXMgd3JpdHRlbiByZWFjaGVzIGEgUFIgd2hvc2UgYnJhbmNoIGhhcyBub3QgbW92ZWQuXG4gICAgICBjb25zdCBvcGVuID0gZmluZE9wZW5QcihkZXBlbmRlbmNpZXMsIHBsYW4uYnJhbmNoKTtcbiAgICAgIGlmIChvcGVuICE9PSBudWxsKSB7XG4gICAgICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgWydwcicsICdlZGl0Jywgb3BlbiwgJy0tYm9keScsIGJvZHldKTtcbiAgICAgIH1cbiAgICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06ICR7cGxhbi5icmFuY2h9IGFscmVhZHkgaG9sZHMgdGhpcyByZXN1bHQ7IG5vdGhpbmcgcHVzaGVkJHtvcGVuID09PSBudWxsID8gJycgOiBgLCBQUiAjJHtvcGVufSdzIGJvZHkgcmV3cml0dGVuYH0uYCk7XG4gICAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAndW5jaGFuZ2VkJyB9O1xuICAgIH1cbiAgfVxuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ3B1c2gnLCAnLS1mb3JjZScsICdvcmlnaW4nLCBgSEVBRDpyZWZzL2hlYWRzLyR7cGxhbi5icmFuY2h9YF0pO1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gZmluZE9wZW5QcihkZXBlbmRlbmNpZXMsIHBsYW4uYnJhbmNoKTtcbiAgaWYgKGV4aXN0aW5nICE9PSBudWxsKSB7XG4gICAgY29uc3QgcHJOdW1iZXIgPSBOdW1iZXIoZXhpc3RpbmcpO1xuICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgWydwcicsICdlZGl0JywgZXhpc3RpbmcsICctLXRpdGxlJywgcGxhbi50aXRsZSwgJy0tYm9keScsIGJvZHldKTtcbiAgICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaCcsIGlzRmFpbGVkID8gWydwcicsICdyZWFkeScsIGV4aXN0aW5nLCAnLS11bmRvJ10gOiBbJ3ByJywgJ3JlYWR5JywgZXhpc3RpbmddKTtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiB1cGRhdGVkIFBSICMke2V4aXN0aW5nfSR7aXNGYWlsZWQgPyAnIChkcmFmdDogYSBzdGVwIGZhaWxlZCknIDogJyd9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1cGRhdGVkJywgcHJOdW1iZXIgfTtcbiAgfVxuXG4gIGNvbnN0IHVybCA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgW1xuICAgICdwcicsXG4gICAgJ2NyZWF0ZScsXG4gICAgJy0tYmFzZScsXG4gICAgb3B0aW9ucy5iYXNlQnJhbmNoLFxuICAgICctLWhlYWQnLFxuICAgIHBsYW4uYnJhbmNoLFxuICAgICctLXRpdGxlJyxcbiAgICBwbGFuLnRpdGxlLFxuICAgICctLWJvZHknLFxuICAgIGJvZHksXG4gICAgLi4uKGlzRmFpbGVkID8gWyctLWRyYWZ0J10gOiBbXSlcbiAgXSkudHJpbSgpO1xuICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBvcGVuZWQgJHt1cmx9JHtpc0ZhaWxlZCA/ICcgKGRyYWZ0OiBhIHN0ZXAgZmFpbGVkKScgOiAnJ30uYCk7XG4gIGNvbnN0IHByTnVtYmVyID0gTnVtYmVyKC9cXC9wdWxsXFwvKD88TnVtYmVyPlxcZCspLy5leGVjKHVybCk/Lmdyb3Vwcz8uWydOdW1iZXInXSA/PyBOYU4pO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKHByTnVtYmVyKSA/IHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ29wZW5lZCcgfSA6IHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ29wZW5lZCcsIHByTnVtYmVyIH07XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlU3RlcChoZWFkaW5nOiBzdHJpbmcsIHN0ZXA6IFN0ZXBSZXN1bHQpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlzUGFzc2VkID0gc3RlcC5yZXN1bHQuZXhpdENvZGUgPT09IDA7XG4gIGNvbnN0IG91dHB1dExpbmVzID0gY2xlYW5Db21tYW5kT3V0cHV0KHN0ZXAucmVzdWx0Lm91dHB1dCkudHJpbUVuZCgpLnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgdGFpbCA9IG91dHB1dExpbmVzLnNsaWNlKC1PVVRQVVRfVEFJTF9MSU5FUykuam9pbignXFxuJyk7XG4gIGNvbnN0IGZhaWx1cmVMaW5lcyA9IGlzUGFzc2VkID8gW10gOiBvdXRwdXRMaW5lcy5maWx0ZXIoKGxpbmUpID0+IEZBSUxVUkVfTElORV9SRUdfRVhQLnRlc3QobGluZSkpLnNsaWNlKDAsIEZBSUxVUkVfTElORV9MSU1JVCk7XG4gIHJldHVybiBbXG4gICAgYCMjIyAke2hlYWRpbmd9YCxcbiAgICAnJyxcbiAgICBgXFxgJHtzdGVwLmNvbW1hbmR9XFxgOiAke2lzUGFzc2VkID8gJ3Bhc3NlZCcgOiBgKipGQUlMRUQqKiAoZXhpdCAke1N0cmluZyhzdGVwLnJlc3VsdC5leGl0Q29kZSl9KWB9LmAsXG4gICAgJycsXG4gICAgLi4uKGZhaWx1cmVMaW5lcy5sZW5ndGggPT09IDAgPyBbXSA6IFsnTGluZXMgcmVwb3J0aW5nIHRoZSBmYWlsdXJlOicsICcnLCAnYGBgdGV4dCcsIC4uLmZhaWx1cmVMaW5lcywgJ2BgYCcsICcnXSksXG4gICAgaXNQYXNzZWQgPyAnPGRldGFpbHM+PHN1bW1hcnk+T3V0cHV0PC9zdW1tYXJ5PicgOiAnPGRldGFpbHMgb3Blbj48c3VtbWFyeT5PdXRwdXQ8L3N1bW1hcnk+JyxcbiAgICAnJyxcbiAgICAnYGBgdGV4dCcsXG4gICAgdGFpbCxcbiAgICAnYGBgJyxcbiAgICAnJyxcbiAgICAnPC9kZXRhaWxzPicsXG4gICAgJydcbiAgXTtcbn1cblxuZnVuY3Rpb24gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzLCBmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gZGVwZW5kZW5jaWVzLmV4ZWMoZmlsZSwgYXJndW1lbnRzXyk7XG4gIGlmIChyZXN1bHQuZXhpdENvZGUgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZmlsZX0gJHthcmd1bWVudHNfLmpvaW4oJyAnKX0gZmFpbGVkIChleGl0ICR7U3RyaW5nKHJlc3VsdC5leGl0Q29kZSl9KTogJHtyZXN1bHQub3V0cHV0LnRyaW0oKX1gKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0Lm91dHB1dDtcbn1cblxuZnVuY3Rpb24gZmluZE9wZW5QcihkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMsIGJyYW5jaDogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0ICRudW1iZXIgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaCcsIFsncHInLCAnbGlzdCcsICctLWhlYWQnLCBicmFuY2gsICctLXN0YXRlJywgJ29wZW4nLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5bMF0ubnVtYmVyJ10pLnRyaW0oKTtcbiAgcmV0dXJuICRudW1iZXIgPT09ICcnIHx8ICRudW1iZXIgPT09ICdudWxsJyA/IG51bGwgOiAkbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBpc0dpdFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5KTogZW50cnkgaXMgR2l0VXBzdHJlYW1FbnRyeSB7XG4gIHJldHVybiAncmVwbycgaW4gZW50cnk7XG59XG5cbmZ1bmN0aW9uIHNob3J0ZW4oaGVhZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIC9eWzAtOWEtZl17NDB9JC8udGVzdChoZWFkKSA/IGhlYWQuc2xpY2UoMCwgU0hPUlRfU0hBX0xFTkdUSCkgOiBoZWFkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzeW5jRW50cnkoZW50cnk6IFVwc3RyZWFtRW50cnksIGNvbmZpZzogVXBzdHJlYW1zQ29uZmlnLCBvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogUHJvbWlzZTxTeW5jUmVzdWx0PiB7XG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGNvbXBhcmVXaXRoVXBzdHJlYW0oZW50cnksIGRlcGVuZGVuY2llcyk7XG4gIGlmIChzdGF0dXMuc3RhdGUgPT09ICdjdXJyZW50Jykge1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IGN1cnJlbnQgYXQgJHtzaG9ydGVuKHN0YXR1cy5oZWFkKX0uYCk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ2N1cnJlbnQnIH07XG4gIH1cbiAgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ3Vud2F0Y2hlZCcpIHtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBtb3ZlZCB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfSwgYnV0IG5vIHdhdGNoZWQgcGF0aCBjaGFuZ2VkIHNpbmNlICR7c2hvcnRlbihzdGF0dXMucGluKX0uYCk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3Vud2F0Y2hlZCcgfTtcbiAgfVxuXG4gIGNvbnN0IHBsYW4gPSBwbGFuU3luYyhzdGF0dXMpO1xuICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBtb3ZlZCBmcm9tICR7c2hvcnRlbihzdGF0dXMucGluKX0gdG8gJHtzaG9ydGVuKHN0YXR1cy5oZWFkKX0uIFdvdWxkIHB1c2ggJHtwbGFuLmJyYW5jaH0gYW5kIG9wZW46YCk7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgICB0aXRsZTogJHtwbGFuLnRpdGxlfWApO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYnVpbGRQckJvZHkocGxhbiwgbnVsbCwgbnVsbCkucmVwbGFjZUFsbCgvXi9nbSwgJyAgfCAnKSk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3BsYW5uZWQnIH07XG4gIH1cblxuICAvLyBUaGUgdXBkYXRlIGNvbW1pdCB0YWtlcyBldmVyeSBmaWxlIGluIHRoZSB0cmVlLCBzbyBhIGZpbGUgbGVmdCBseWluZyBhcm91bmQgd291bGQgYmUgcHVzaGVkIHdpdGggaXQuXG4gIGNvbnN0IGRpcnR5ID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydzdGF0dXMnLCAnLS1wb3JjZWxhaW4nXSkudHJpbSgpO1xuICBpZiAoZGlydHkgIT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB0aGUgd29ya2luZyB0cmVlIGlzIG5vdCBjbGVhbiwgYW5kIHRoZSB1cGRhdGUgY29tbWl0IHdvdWxkIHRha2UgdGhlc2UgZmlsZXMgd2l0aCBpdDpcXG4ke2RpcnR5fWApO1xuICB9XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnZmV0Y2gnLCAnb3JpZ2luJywgb3B0aW9ucy5iYXNlQnJhbmNoXSk7XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnY2hlY2tvdXQnLCAnLUInLCBwbGFuLmJyYW5jaCwgYG9yaWdpbi8ke29wdGlvbnMuYmFzZUJyYW5jaH1gXSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5UGxhbihwbGFuLCBjb25maWcsIG9wdGlvbnMsIGRlcGVuZGVuY2llcyk7XG4gIH0gZmluYWxseSB7XG4gICAgZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnY2hlY2tvdXQnLCAnLS1mb3JjZScsIG9wdGlvbnMuYmFzZUJyYW5jaF0pO1xuICAgIGRlcGVuZGVuY2llcy5leGVjKCdnaXQnLCBbJ2JyYW5jaCcsICctLWRlbGV0ZScsICctLWZvcmNlJywgcGxhbi5icmFuY2hdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0xhc3RMaW5lU3RhdGUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdGVzID0gbGluZS5yZXBsYWNlKC9cXHIrJC8sICcnKTtcbiAgcmV0dXJuIHN0YXRlcy5zbGljZShzdGF0ZXMubGFzdEluZGV4T2YoJ1xccicpICsgMSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSxxQkFHTztBQUNQLHVCQUE0QjtBQTJONUIsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSxtQkFBbUI7QUFLekIsTUFBTSxvQkFBb0I7QUFLMUIsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSxxQkFBcUI7QUFNM0IsTUFBTSxNQUFNLE9BQU87QUFPbkIsTUFBTSwyQkFBMkIsSUFBSTtBQUFB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
|
|
@@ -229,9 +229,9 @@ function compileSnippets(params) {
|
|
|
229
229
|
delete compilerOptions.tsBuildInfoFile;
|
|
230
230
|
const host = createCompilerHost(compilerOptions, true);
|
|
231
231
|
const originalGetSourceFile = host.getSourceFile.bind(host);
|
|
232
|
-
const
|
|
232
|
+
const doesOriginalFileExist = host.fileExists.bind(host);
|
|
233
233
|
const originalReadFile = host.readFile.bind(host);
|
|
234
|
-
host.fileExists = (fileName) => virtualFiles.has(normalizePath(fileName)) ||
|
|
234
|
+
host.fileExists = (fileName) => virtualFiles.has(normalizePath(fileName)) || doesOriginalFileExist(fileName);
|
|
235
235
|
host.readFile = (fileName) => virtualFiles.get(normalizePath(fileName))?.code ?? originalReadFile(fileName);
|
|
236
236
|
host.getSourceFile = (fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile) => {
|
|
237
237
|
const virtualFile = virtualFiles.get(normalizePath(fileName));
|
|
@@ -295,4 +295,4 @@ export {
|
|
|
295
295
|
findDocsSnippetProblems,
|
|
296
296
|
formatDocsSnippetProblems
|
|
297
297
|
};
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zbmlwcGV0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0cmFjdHMgdGhlIGNvZGUgc25pcHBldHMgb2YgYSBwYWNrYWdlJ3MgZG9jdW1lbnRhdGlvbiBndWlkZXMgYW5kIHR5cGUtY2hlY2tzIHRoZW0gYWdhaW5zdCBpdHMgc291cmNlcy5cbiAqXG4gKiBBIGd1aWRlJ3Mgc25pcHBldCBpcyBjb2RlIGEgcmVhZGVyIGNvcGllcywgc28gYSByZW5hbWVkIG1lbWJlciBvciBhIHN0YWxlIGltcG9ydCBwYXRoIGluIGl0IGlzIGEgYnVnIHRoYXQgc2hpcHNcbiAqIHRvIHRoZSBzaXRlIHdpdGggZXZlcnkgY2hlY2sgZ3JlZW4uIEV2ZXJ5IGZlbmNlZCBgdHNgLCBgdHlwZXNjcmlwdGAsIGBqc2Agb3IgYGphdmFzY3JpcHRgIGJsb2NrIGluXG4gKiBgZG9jcy9zcmMvY29udGVudC9kb2NzYCBpcyBjb21waWxlZCBhcyBpdHMgb3duIG1vZHVsZSwgd2l0aCB0aGUgcHJvamVjdCdzIGB0c2NvbmZpZy5qc29uYCwgc28gYW4gaW1wb3J0IG9mIHRoZVxuICogcGFja2FnZSdzIG93biBuYW1lIHJlc29sdmVzIHdoZXJldmVyIHRoYXQgY29uZmlndXJhdGlvbiBzZW5kcyBpdCAoaXRzIGBwYXRoc2AsIG9yIHRoZSBgY29tcGlsZXJPcHRpb25zYCBwYXNzZWRcbiAqIGhlcmUpIGFuZCBhIHdyb25nIG5hbWUgZmFpbHMuIEEgYHRzYCAvIGB0eXBlc2NyaXB0YCBibG9jayBpcyBjb21waWxlZCBhcyBUeXBlU2NyaXB0OyBhIGBqc2AgLyBgamF2YXNjcmlwdGAgYmxvY2ssXG4gKiBvZnRlbiBhIGRldnRvb2xzLWNvbnNvbGUgcmVjaXBlLCBpcyBjb21waWxlZCBhcyBKYXZhU2NyaXB0IHdpdGggYGNoZWNrSnNgLCBzbyBhIHdyb25nIG1lbWJlciBvZiBhIHR5cGVkIG9iamVjdFxuICogc3RpbGwgZmFpbHMgd2hpbGUgYW4gdW50eXBlZCBsb29rdXAgZG9lcyBub3QuIFRoZSBnZW5lcmF0ZWQgQVBJIHJlZmVyZW5jZSAoYGRvY3Mvc3JjL2NvbnRlbnQvZG9jcy9hcGlgKSBpc1xuICogc2tpcHBlZDogaXQgaXMgcmVuZGVyZWQgZnJvbSB0aGUgVFNEb2MuXG4gKlxuICogVGhyZWUgdGhpbmdzIHNoYXBlIHdoYXQgYSBzbmlwcGV0IGlzIGNvbXBpbGVkIHdpdGgsIGVhY2ggYnV0IHRoZSBmaXJzdCB3cml0dGVuIGluIHRoZSBndWlkZSBhcyBhbiBIVE1MIGNvbW1lbnQsXG4gKiBpbnZpc2libGUgb24gdGhlIHNpdGUsIG9uIHRoZSBsaW5lcyByaWdodCBhYm92ZSB0aGUgZmVuY2U6XG4gKlxuICogLSBUaGUgbmFtZXMgZXZlcnkgZ3VpZGUgbWF5IHVzZSB3aXRob3V0IGRlY2xhcmluZyB0aGVtIGFyZSB0aGUgcGFja2FnZSdzIGBwcmVsdWRlYCwgY29tcGlsZWQgYXMgYSBtb2R1bGUgb2YgaXRzXG4gKiAgIG93biAoYSBgZGVjbGFyZSBnbG9iYWxgIGJsb2NrLCB3aXRoIHRoZSBpbXBvcnRzIGl0IG5lZWRzKS5cbiAqIC0gYDwhLS0gc25pcHBldC1jaGVjazogY29udGV4dCA8VHlwZVNjcmlwdD4gLS0+YCBwcmVwZW5kcyBkZWNsYXJhdGlvbnMgdG8gdGhhdCBvbmUgc25pcHBldCwgZm9yIHRoZSBuYW1lcyBpdHNcbiAqICAgcHJvc2UgaGFzIGFscmVhZHkgaW50cm9kdWNlZCAoYGRlY2xhcmUgY29uc3QgbGlua0VsOiBIVE1MQW5jaG9yRWxlbWVudDtgKS4gU2V2ZXJhbCBzdWNoIGxpbmVzIGFkZCB1cC5cbiAqIC0gYDwhLS0gc25pcHBldC1jaGVjazogc2tpcCA8cmVhc29uPiAtLT5gIGV4ZW1wdHMgYSBzbmlwcGV0IHRoYXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBjb21waWxhYmxlLCBzdWNoIGFzXG4gKiAgIHBzZXVkby1jb2RlLiBUaGUgcmVhc29uIGlzIHJlcXVpcmVkLCBzbyBhIHNraXAgaXMgYSBkZWNpc2lvbiBzb21lYm9keSB3cm90ZSBkb3duLCBuZXZlciBhIHNpbGVudCBob2xlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcGlsZXJPcHRpb25zLFxuICBTb3VyY2VGaWxlXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1xuICByZWFkZGlyLFxuICByZWFkRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7XG4gIGpvaW4sXG4gIHJlbGF0aXZlLFxuICByZXNvbHZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICBjcmVhdGVDb21waWxlckhvc3QsXG4gIGNyZWF0ZVByb2dyYW0sXG4gIGNyZWF0ZVNvdXJjZUZpbGUsXG4gIGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQsXG4gIGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlLFxuICBTY3JpcHRLaW5kLFxuICBzeXNcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8qKlxuICogVGhlIGxhbmd1YWdlcyBvZiB0aGUgZmVuY2VkIGJsb2NrcyB0aGF0IGFyZSB0eXBlLWNoZWNrZWQsIGFuZCB3aGV0aGVyIGVhY2ggaXMgSmF2YVNjcmlwdC5cbiAqL1xuY29uc3QgQ0hFQ0tFRF9MQU5HVUFHRVM6IFJlYWRvbmx5TWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKFtcbiAgWydqYXZhc2NyaXB0JywgdHJ1ZV0sXG4gIFsnanMnLCB0cnVlXSxcbiAgWyd0cycsIGZhbHNlXSxcbiAgWyd0eXBlc2NyaXB0JywgZmFsc2VdXG5dKTtcblxuLyoqXG4gKiBUaGUgb2Zmc2V0IGZyb20gYSBmZW5jZSBsaW5lJ3MgMC1iYXNlZCBpbmRleCB0byB0aGUgMS1iYXNlZCBsaW5lIG9mIHRoZSBjb2RlIGFmdGVyIGl0LlxuICovXG5jb25zdCBMSU5FX0FGVEVSX0ZFTkNFX09GRlNFVCA9IDI7XG5cbmNvbnN0IE1BUktFUl9SRUdfRVhQID0gL148IS0tXFxzKnNuaXBwZXQtY2hlY2s6XFxzKig/PGtpbmQ+W2Etel0rKVxcYig/PHRleHQ+Lio/KS0tPiQvc3U7XG5cbi8qKlxuICogRGlhZ25vc3RpY3MgYSBzbmlwcGV0IGlzIG5vdCBoZWxkIHRvOiBhbiBpbGx1c3RyYXRpb24gZGVjbGFyZXMgbmFtZXMgaXQgbmV2ZXIgcmVhZHMuXG4gKi9cbmNvbnN0IERJQUdOT1NUSUNfREVDTEFSRURfQlVUX1ZBTFVFX05FVkVSX1JFQUQgPSA2MTMzO1xuY29uc3QgRElBR05PU1RJQ19BTExfSU1QT1JUU19VTlVTRUQgPSA2MTkyO1xuY29uc3QgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfTkVWRVJfVVNFRCA9IDYxOTY7XG5jb25zdCBESUFHTk9TVElDX0FMTF9ERVNUUlVDVFVSRURfRUxFTUVOVFNfVU5VU0VEID0gNjE5ODtcbmNvbnN0IElHTk9SRURfRElBR05PU1RJQ19DT0RFUyA9IG5ldyBTZXQoW1xuICBESUFHTk9TVElDX0FMTF9ERVNUUlVDVFVSRURfRUxFTUVOVFNfVU5VU0VELFxuICBESUFHTk9TVElDX0FMTF9JTVBPUlRTX1VOVVNFRCxcbiAgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfTkVWRVJfVVNFRCxcbiAgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfVkFMVUVfTkVWRVJfUkVBRFxuXSk7XG5cbi8qKlxuICogVGhlIGltcGxpY2l0LWBhbnlgIGRpYWdub3N0aWNzLCB3aGljaCBhIEphdmFTY3JpcHQgc25pcHBldCBpcyBub3QgaGVsZCB0bzogYSBjb25zb2xlIHJlY2lwZSBoYXMgbm8gYW5ub3RhdGlvbnMgdG9cbiAqIGdpdmUsIGFuZCBhbiB1bnR5cGVkIGxvb2t1cCBzdWNoIGFzIGEgYFN5bWJvbC5mb3JgIHNsb3Qgb24gYGdsb2JhbFRoaXNgIGlzIHdoYXQgcGxhaW4gSmF2YVNjcmlwdCBkb2VzLlxuICovXG5jb25zdCBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZID0gNzAwNTtcbmNvbnN0IERJQUdOT1NUSUNfUEFSQU1FVEVSX0lNUExJQ0lUTFlfQU5ZID0gNzAwNjtcbmNvbnN0IERJQUdOT1NUSUNfTUVNQkVSX0lNUExJQ0lUTFlfQU5ZID0gNzAwODtcbmNvbnN0IERJQUdOT1NUSUNfQklORElOR19FTEVNRU5UX0lNUExJQ0lUTFlfQU5ZID0gNzAzMTtcbmNvbnN0IERJQUdOT1NUSUNfVkFSSUFCTEVfSU1QTElDSVRMWV9BTllfSU5fU09NRV9MT0NBVElPTlMgPSA3MDM0O1xuY29uc3QgRElBR05PU1RJQ19BUlJPV19GVU5DVElPTl9DQVBUVVJFU19HTE9CQUxfVEhJUyA9IDcwNDE7XG5jb25zdCBESUFHTk9TVElDX0VMRU1FTlRfSU1QTElDSVRMWV9BTlkgPSA3MDUzO1xuY29uc3QgSkFWQVNDUklQVF9JR05PUkVEX0RJQUdOT1NUSUNfQ09ERVMgPSBuZXcgU2V0KFtcbiAgRElBR05PU1RJQ19BUlJPV19GVU5DVElPTl9DQVBUVVJFU19HTE9CQUxfVEhJUyxcbiAgRElBR05PU1RJQ19CSU5ESU5HX0VMRU1FTlRfSU1QTElDSVRMWV9BTlksXG4gIERJQUdOT1NUSUNfRUxFTUVOVF9JTVBMSUNJVExZX0FOWSxcbiAgRElBR05PU1RJQ19NRU1CRVJfSU1QTElDSVRMWV9BTlksXG4gIERJQUdOT1NUSUNfUEFSQU1FVEVSX0lNUExJQ0lUTFlfQU5ZLFxuICBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZLFxuICBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZX0lOX1NPTUVfTE9DQVRJT05TXG5dKTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZX06IHRoZSBzYW1lIGFzIHtAbGluayBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtc30gdGFrZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2VydERvY3NTbmlwcGV0c0NvbXBpbGVQYXJhbXMgPSBGaW5kRG9jc1NuaXBwZXRQcm9ibGVtc1BhcmFtcztcblxuLyoqXG4gKiBPbmUgZmVuY2VkIGNvZGUgYmxvY2sgb2YgYSBndWlkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NzU25pcHBldCB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSwgd2l0aCBhbnkgYmxvY2txdW90ZSBvciBpbmRlbnRhdGlvbiBwcmVmaXggb2YgdGhlIGZlbmNlIHN0cmlwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgMS1iYXNlZCBsaW5lIG9mIHRoZSBndWlkZSBvbiB3aGljaCB0aGUgY29kZSBzdGFydHMgKHRoZSBsaW5lIGFmdGVyIHRoZSBvcGVuaW5nIGZlbmNlKS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVTdGFydExpbmU6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgYHNuaXBwZXQtY2hlY2s6IGNvbnRleHRgIG1hcmtlcnMgYWJvdmUgdGhlIGZlbmNlLCBqb2luZWQgYnkgbmV3bGluZXMuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNuaXBwZXQgaXMgSmF2YVNjcmlwdCByYXRoZXIgdGhhbiBUeXBlU2NyaXB0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNKYXZhU2NyaXB0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGZlbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiBnaXZlbiBieSBhIGBzbmlwcGV0LWNoZWNrOiBza2lwYCBtYXJrZXIsIG9yIGBudWxsYCB3aGVuIHRoZSBzbmlwcGV0IGlzIGNoZWNrZWQuXG4gICAqL1xuICByZWFkb25seSBza2lwUmVhc29uOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcHJvYmxlbSBmb3VuZCBpbiBhIGd1aWRlJ3Mgc25pcHBldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NzU25pcHBldFByb2JsZW0ge1xuICAvKipcbiAgICogVGhlIGd1aWRlJ3MgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2Ugcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSAxLWJhc2VkIGxpbmUgb2YgdGhlIGd1aWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGF0IGlzIHdyb25nLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXMge1xuICAvKipcbiAgICogQ29tcGlsZXIgb3B0aW9ucyBsYWlkIG92ZXIgdGhlIG9uZXMgYHRzY29uZmlnLmpzb25gIGdpdmVzLCBmb3IgaW5zdGFuY2UgYHBhdGhzYCB0aGF0IHJlc29sdmUgdGhlIHBhY2thZ2UncyBvd25cbiAgICogbmFtZSBvbnRvIGl0cyBzb3VyY2VzIHdoZW4gaXRzIGB0c2NvbmZpZy5qc29uYCBoYXMgbm9uZS4gQSByZWxhdGl2ZSBwYXRoIGluIHRoZW0gaXMgbm90IHJlc29sdmVkLCBzbyBwYXNzXG4gICAqIGFic29sdXRlIG9uZXMuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlck9wdGlvbnM/OiBDb21waWxlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBndWlkZXMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB7QGxpbmsgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXMucm9vdERpcmVjdG9yeX0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnZG9jcy9zcmMvY29udGVudC9kb2NzJ2BcbiAgICovXG4gIHJlYWRvbmx5IGRvY3NEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhbWJpZW50IGNvbnRleHQgZXZlcnkgc25pcHBldCBpcyBjb21waWxlZCB3aXRoOiB0aGUgbmFtZXMgYSBndWlkZSBtYXkgdXNlIHdpdGhvdXQgZGVjbGFyaW5nIHRoZW0sIHdyaXR0ZW4gYXNcbiAgICogYSBtb2R1bGUgKGBkZWNsYXJlIGdsb2JhbCB7IC4uLiB9YCwgd2l0aCB0aGUgaW1wb3J0cyBpdCBuZWVkcykuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2AsIG5vIHByZWx1ZGUuXG4gICAqL1xuICByZWFkb25seSBwcmVsdWRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSByb290LCBob2xkaW5nIGB0c2NvbmZpZy5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbXBpbGVTbmlwcGV0c1BhcmFtcyB7XG4gIHJlYWRvbmx5IGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xuICByZWFkb25seSByb290RGlyZWN0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHZpcnR1YWxGaWxlczogUmVhZG9ubHlNYXA8c3RyaW5nLCBWaXJ0dWFsU25pcHBldEZpbGU+O1xufVxuXG5pbnRlcmZhY2UgT3BlbkZlbmNlIHtcbiAgcmVhZG9ubHkgY29udGV4dDogc3RyaW5nW107XG4gIHJlYWRvbmx5IGZlbmNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhbmd1YWdlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSBza2lwUmVhc29uOiBudWxsIHwgc3RyaW5nO1xuICByZWFkb25seSBzdGFydExpbmU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFZpcnR1YWxTbmlwcGV0RmlsZSB7XG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZVN0YXJ0TGluZTogbnVtYmVyO1xuICByZWFkb25seSBjb250ZXh0TGluZUNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHlwZS1jaGVja3MgZXZlcnkgc25pcHBldCBvZiB0aGUgZ3VpZGVzIGFuZCB0aHJvd3Mgd2hlbiBvbmUgZmFpbHMsIGZvciBhIGBkb2NzOmNoZWNrLXNuaXBwZXRzYCBzY3JpcHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZVBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5IHNuaXBwZXQgY29tcGlsZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gTGlzdGluZyBldmVyeSBwcm9ibGVtLCBvbmUgcGVyIGxpbmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlcnREb2NzU25pcHBldHNDb21waWxlKHBhcmFtczogQXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9ibGVtcyA9IGF3YWl0IGZpbmREb2NzU25pcHBldFByb2JsZW1zKHBhcmFtcyk7XG4gIGlmIChwcm9ibGVtcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke1N0cmluZyhwcm9ibGVtcy5sZW5ndGgpfSBwcm9ibGVtKHMpIGluIHRoZSBkb2N1bWVudGF0aW9uIHNuaXBwZXRzOlxcbiR7Zm9ybWF0RG9jc1NuaXBwZXRQcm9ibGVtcyhwcm9ibGVtcyl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZmVuY2VkIGNvZGUgYmxvY2tzIG9mIHRoZSBjaGVja2VkIGxhbmd1YWdlcyBmcm9tIGEgbWFya2Rvd24gZG9jdW1lbnQuXG4gKlxuICogQSBmZW5jZSBpbnNpZGUgYSBibG9ja3F1b3RlIG9yIGEgbGlzdCBpdGVtIGlzIHJlY29nbml6ZWQgdG9vOiBpdHMgcHJlZml4IChgPiBgLCBpbmRlbnRhdGlvbikgaXMgc3RyaXBwZWQgZnJvbVxuICogZXZlcnkgbGluZSBvZiBpdHMgY29kZS5cbiAqXG4gKiBAcGFyYW0gbWFya2Rvd24gLSBUaGUgbWFya2Rvd24gZG9jdW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgc25pcHBldHMsIGluIGRvY3VtZW50IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERvY3NTbmlwcGV0cyhtYXJrZG93bjogc3RyaW5nKTogRG9jc1NuaXBwZXRbXSB7XG4gIGNvbnN0IGxpbmVzID0gbWFya2Rvd24uc3BsaXQoL1xccj9cXG4vdSk7XG4gIGNvbnN0IHNuaXBwZXRzOiBEb2NzU25pcHBldFtdID0gW107XG4gIGxldCBvcGVuRmVuY2U6IG51bGwgfCBPcGVuRmVuY2UgPSBudWxsO1xuICBsZXQgY29kZUxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGVuZGluZ1NraXBSZWFzb246IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBsZXQgcGVuZGluZ0NvbnRleHQ6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGxpbmVdIG9mIGxpbmVzLmVudHJpZXMoKSkge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzdHJpcFByZWZpeChsaW5lLCBvcGVuRmVuY2UucHJlZml4KTtcbiAgICAgIGlmIChjb250ZW50LnRyaW1FbmQoKSA9PT0gb3BlbkZlbmNlLmZlbmNlKSB7XG4gICAgICAgIGNvbnN0IGlzSmF2YVNjcmlwdCA9IENIRUNLRURfTEFOR1VBR0VTLmdldChvcGVuRmVuY2UubGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoaXNKYXZhU2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzbmlwcGV0cy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIGNvZGVTdGFydExpbmU6IG9wZW5GZW5jZS5zdGFydExpbmUsXG4gICAgICAgICAgICBjb250ZXh0OiBvcGVuRmVuY2UuY29udGV4dC5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIGlzSmF2YVNjcmlwdCxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBvcGVuRmVuY2UubGFuZ3VhZ2UsXG4gICAgICAgICAgICBza2lwUmVhc29uOiBvcGVuRmVuY2Uuc2tpcFJlYXNvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICAgIGNvZGVMaW5lcyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZUxpbmVzLnB1c2goY29udGVudCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmZW5jZU1hdGNoID0gL14oPzxwcmVmaXg+KD86XFxzKj4pKlxccyopKD88ZmVuY2U+YHszLH18fnszLH0pKD88bGFuZ3VhZ2U+W1xcdy1dKikvdS5leGVjKGxpbmUpO1xuICAgIGlmIChmZW5jZU1hdGNoPy5ncm91cHMpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFdmVyeSBncm91cCBvZiB0aGUgZmVuY2UgcGF0dGVybiB0YWtlcyBwYXJ0IGluIGEgbWF0Y2gsIHNvIHRoZSBmYWxsYmFja3MgbmV2ZXIgYXBwbHkuICovXG4gICAgICBvcGVuRmVuY2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHBlbmRpbmdDb250ZXh0LFxuICAgICAgICBmZW5jZTogZmVuY2VNYXRjaC5ncm91cHNbJ2ZlbmNlJ10gPz8gJycsXG4gICAgICAgIGxhbmd1YWdlOiAoZmVuY2VNYXRjaC5ncm91cHNbJ2xhbmd1YWdlJ10gPz8gJycpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHByZWZpeDogZmVuY2VNYXRjaC5ncm91cHNbJ3ByZWZpeCddID8/ICcnLFxuICAgICAgICBza2lwUmVhc29uOiBwZW5kaW5nU2tpcFJlYXNvbixcbiAgICAgICAgc3RhcnRMaW5lOiBpbmRleCArIExJTkVfQUZURVJfRkVOQ0VfT0ZGU0VUXG4gICAgICB9O1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIHBlbmRpbmdTa2lwUmVhc29uID0gbnVsbDtcbiAgICAgIHBlbmRpbmdDb250ZXh0ID0gW107XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0ID0gbGluZS5yZXBsYWNlKC9eKD86XFxzKj4pKlxccyovdSwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBtYXJrZXJNYXRjaCA9IE1BUktFUl9SRUdfRVhQLmV4ZWModGV4dCk7XG4gICAgY29uc3Qga2luZCA9IG1hcmtlck1hdGNoPy5ncm91cHM/Llsna2luZCddO1xuICAgIGNvbnN0IG1hcmtlclRleHQgPSAobWFya2VyTWF0Y2g/Lmdyb3Vwcz8uWyd0ZXh0J10gPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoa2luZCA9PT0gJ3NraXAnKSB7XG4gICAgICBwZW5kaW5nU2tpcFJlYXNvbiA9IG1hcmtlclRleHQucmVwbGFjZSgvXlst4oCUOl1cXHMqL3UsICcnKTtcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdjb250ZXh0Jykge1xuICAgICAgcGVuZGluZ0NvbnRleHQucHVzaChtYXJrZXJUZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRleHQgIT09ICcnKSB7XG4gICAgICBwZW5kaW5nU2tpcFJlYXNvbiA9IG51bGw7XG4gICAgICBwZW5kaW5nQ29udGV4dCA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzbmlwcGV0cztcbn1cblxuLyoqXG4gKiBUeXBlLWNoZWNrcyBldmVyeSBzbmlwcGV0IG9mIHRoZSBndWlkZXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIHByb2JsZW1zIGZvdW5kLCBlbXB0eSB3aGVuIGV2ZXJ5IHNuaXBwZXQgY29tcGlsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtcyhwYXJhbXM6IEZpbmREb2NzU25pcHBldFByb2JsZW1zUGFyYW1zKTogUHJvbWlzZTxEb2NzU25pcHBldFByb2JsZW1bXT4ge1xuICBjb25zdCByb290RGlyZWN0b3J5ID0gcmVzb2x2ZShwYXJhbXMucm9vdERpcmVjdG9yeSk7XG4gIGNvbnN0IGRvY3NEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksIHBhcmFtcy5kb2NzRGlyZWN0b3J5ID8/ICdkb2NzL3NyYy9jb250ZW50L2RvY3MnKTtcbiAgY29uc3QgcHJvYmxlbXM6IERvY3NTbmlwcGV0UHJvYmxlbVtdID0gW107XG4gIGNvbnN0IHZpcnR1YWxGaWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBWaXJ0dWFsU25pcHBldEZpbGU+KCk7XG4gIGNvbnN0IHJvb3ROYW1lczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc25pcHBldHNEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksICdkb2NzJywgJ19fc25pcHBldHNfXycpO1xuXG4gIGZ1bmN0aW9uIGFkZFZpcnR1YWxGaWxlKHBhdGg6IHN0cmluZywgZmlsZTogVmlydHVhbFNuaXBwZXRGaWxlKTogdm9pZCB7XG4gICAgdmlydHVhbEZpbGVzLnNldChub3JtYWxpemVQYXRoKHBhdGgpLCBmaWxlKTtcbiAgICByb290TmFtZXMucHVzaChwYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHByZWx1ZGUgPSBwYXJhbXMucHJlbHVkZSA/PyAnJztcbiAgaWYgKHByZWx1ZGUgIT09ICcnKSB7XG4gICAgYWRkVmlydHVhbEZpbGUoam9pbihzbmlwcGV0c0RpcmVjdG9yeSwgJ3ByZWx1ZGUudHMnKSwgeyBjb2RlOiBwcmVsdWRlLCBjb2RlU3RhcnRMaW5lOiAxLCBjb250ZXh0TGluZUNvdW50OiAwLCBmaWxlUGF0aDogJzxwcmVsdWRlPicgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGd1aWRlUGF0aCBvZiBhd2FpdCBsaXN0R3VpZGVzKGRvY3NEaXJlY3RvcnkpKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSB0b1Bvc2l4KHJlbGF0aXZlKHJvb3REaXJlY3RvcnksIGd1aWRlUGF0aCkpO1xuICAgIGNvbnN0IG1hcmtkb3duID0gYXdhaXQgcmVhZEZpbGUoZ3VpZGVQYXRoLCAndXRmLTgnKTtcbiAgICBmb3IgKGNvbnN0IHNuaXBwZXQgb2YgZXh0cmFjdERvY3NTbmlwcGV0cyhtYXJrZG93bikpIHtcbiAgICAgIGlmIChzbmlwcGV0LnNraXBSZWFzb24gPT09ICcnKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGZpbGVQYXRoLFxuICAgICAgICAgIGxpbmU6IHNuaXBwZXQuY29kZVN0YXJ0TGluZSAtIDEsXG4gICAgICAgICAgbWVzc2FnZTogJ0EgYHNuaXBwZXQtY2hlY2s6IHNraXBgIG1hcmtlciBtdXN0IGdpdmUgaXRzIHJlYXNvbi4nXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzbmlwcGV0LnNraXBSZWFzb24gIT09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBleHRlbnNpb24gPSBzbmlwcGV0LmlzSmF2YVNjcmlwdCA/ICdqcycgOiAndHMnO1xuICAgICAgY29uc3QgYmFzZU5hbWUgPSBgJHt0b1Bvc2l4KHJlbGF0aXZlKGRvY3NEaXJlY3RvcnksIGd1aWRlUGF0aCkpLnJlcGxhY2VBbGwoJy8nLCAnX18nKX0uTCR7U3RyaW5nKHNuaXBwZXQuY29kZVN0YXJ0TGluZSl9LiR7ZXh0ZW5zaW9ufWA7XG4gICAgICBjb25zdCBjb250ZXh0ID0gc25pcHBldC5jb250ZXh0ID09PSAnJyA/ICcnIDogYCR7c25pcHBldC5jb250ZXh0fVxcbmA7XG4gICAgICBhZGRWaXJ0dWFsRmlsZShqb2luKHNuaXBwZXRzRGlyZWN0b3J5LCBiYXNlTmFtZSksIHtcbiAgICAgICAgY29kZTogYCR7Y29udGV4dH0ke3NuaXBwZXQuY29kZX1cXG5leHBvcnQge307XFxuYCxcbiAgICAgICAgY29kZVN0YXJ0TGluZTogc25pcHBldC5jb2RlU3RhcnRMaW5lLFxuICAgICAgICBjb250ZXh0TGluZUNvdW50OiBjb250ZXh0ID09PSAnJyA/IDAgOiBjb250ZXh0LnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxLFxuICAgICAgICBmaWxlUGF0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvYmxlbXMucHVzaCguLi5jb21waWxlU25pcHBldHMoeyBjb21waWxlck9wdGlvbnM6IHBhcmFtcy5jb21waWxlck9wdGlvbnMgPz8ge30sIHJvb3REaXJlY3RvcnksIHJvb3ROYW1lcywgdmlydHVhbEZpbGVzIH0pKTtcbiAgcmV0dXJuIHByb2JsZW1zO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgcHJvYmxlbXMgb25lIHBlciBsaW5lLCBhcyBgcGF0aDpsaW5lIC0gbWVzc2FnZWAuXG4gKlxuICogQHBhcmFtIHByb2JsZW1zIC0gVGhlIHByb2JsZW1zLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RG9jc1NuaXBwZXRQcm9ibGVtcyhwcm9ibGVtczogcmVhZG9ubHkgRG9jc1NuaXBwZXRQcm9ibGVtW10pOiBzdHJpbmcge1xuICByZXR1cm4gcHJvYmxlbXMubWFwKChwcm9ibGVtKSA9PiBgJHtwcm9ibGVtLmZpbGVQYXRofToke1N0cmluZyhwcm9ibGVtLmxpbmUpfSAtICR7cHJvYmxlbS5tZXNzYWdlfWApLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBjb21waWxlU25pcHBldHMocGFyYW1zOiBDb21waWxlU25pcHBldHNQYXJhbXMpOiBEb2NzU25pcHBldFByb2JsZW1bXSB7XG4gIGNvbnN0IHsgcm9vdERpcmVjdG9yeSwgcm9vdE5hbWVzLCB2aXJ0dWFsRmlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4ocm9vdERpcmVjdG9yeSwgJ3RzY29uZmlnLmpzb24nKTtcbiAgY29uc3QgcGFyc2VkID0gZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUoY29uZmlnUGF0aCwge30sIHtcbiAgICAuLi5zeXMsXG4gICAgb25VblJlY292ZXJhYmxlQ29uZmlnRmlsZURpYWdub3N0aWMoZGlhZ25vc3RpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgJ1xcbicpKTtcbiAgICB9XG4gIH0pO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQW4gdW5yZWFkYWJsZSBjb25maWd1cmF0aW9uIHRocm93cyBpbiB0aGUgaGFuZGxlciBhYm92ZSBiZWZvcmUgdGhpcyBjYW4gYmUgcmVhY2hlZC4gKi9cbiAgaWYgKCFwYXJzZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkICR7Y29uZmlnUGF0aH1gKTtcbiAgfVxuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4gIGNvbnN0IGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zID0ge1xuICAgIC4uLnBhcnNlZC5vcHRpb25zLFxuICAgIC4uLnBhcmFtcy5jb21waWxlck9wdGlvbnMsXG4gICAgYWxsb3dKczogdHJ1ZSxcbiAgICBjaGVja0pzOiB0cnVlLFxuICAgIGNvbXBvc2l0ZTogZmFsc2UsXG4gICAgaW5jcmVtZW50YWw6IGZhbHNlLFxuICAgIG5vRW1pdDogdHJ1ZSxcbiAgICBub1VudXNlZExvY2FsczogZmFsc2UsXG4gICAgbm9VbnVzZWRQYXJhbWV0ZXJzOiBmYWxzZVxuICB9O1xuICBkZWxldGUgY29tcGlsZXJPcHRpb25zLnRzQnVpbGRJbmZvRmlsZTtcblxuICBjb25zdCBob3N0ID0gY3JlYXRlQ29tcGlsZXJIb3N0KGNvbXBpbGVyT3B0aW9ucywgdHJ1ZSk7XG4gIGNvbnN0IG9yaWdpbmFsR2V0U291cmNlRmlsZSA9IGhvc3QuZ2V0U291cmNlRmlsZS5iaW5kKGhvc3QpO1xuICBjb25zdCBvcmlnaW5hbEZpbGVFeGlzdHMgPSBob3N0LmZpbGVFeGlzdHMuYmluZChob3N0KTtcbiAgY29uc3Qgb3JpZ2luYWxSZWFkRmlsZSA9IGhvc3QucmVhZEZpbGUuYmluZChob3N0KTtcbiAgaG9zdC5maWxlRXhpc3RzID0gKGZpbGVOYW1lKTogYm9vbGVhbiA9PiB2aXJ0dWFsRmlsZXMuaGFzKG5vcm1hbGl6ZVBhdGgoZmlsZU5hbWUpKSB8fCBvcmlnaW5hbEZpbGVFeGlzdHMoZmlsZU5hbWUpO1xuICBob3N0LnJlYWRGaWxlID0gKGZpbGVOYW1lKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHZpcnR1YWxGaWxlcy5nZXQobm9ybWFsaXplUGF0aChmaWxlTmFtZSkpPy5jb2RlID8/IG9yaWdpbmFsUmVhZEZpbGUoZmlsZU5hbWUpO1xuICBob3N0LmdldFNvdXJjZUZpbGUgPSAoZmlsZU5hbWUsIGxhbmd1YWdlVmVyc2lvbk9yT3B0aW9ucywgb25FcnJvciwgc2hvdWxkQ3JlYXRlTmV3U291cmNlRmlsZSk6IFNvdXJjZUZpbGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHZpcnR1YWxGaWxlID0gdmlydHVhbEZpbGVzLmdldChub3JtYWxpemVQYXRoKGZpbGVOYW1lKSk7XG4gICAgaWYgKHZpcnR1YWxGaWxlKSB7XG4gICAgICBjb25zdCBzY3JpcHRLaW5kID0gZmlsZU5hbWUuZW5kc1dpdGgoJy5qcycpID8gU2NyaXB0S2luZC5KUyA6IFNjcmlwdEtpbmQuVFM7XG4gICAgICByZXR1cm4gY3JlYXRlU291cmNlRmlsZShmaWxlTmFtZSwgdmlydHVhbEZpbGUuY29kZSwgbGFuZ3VhZ2VWZXJzaW9uT3JPcHRpb25zLCB0cnVlLCBzY3JpcHRLaW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbmFsR2V0U291cmNlRmlsZShmaWxlTmFtZSwgbGFuZ3VhZ2VWZXJzaW9uT3JPcHRpb25zLCBvbkVycm9yLCBzaG91bGRDcmVhdGVOZXdTb3VyY2VGaWxlKTtcbiAgfTtcblxuICBjb25zdCBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSh7IGhvc3QsIG9wdGlvbnM6IGNvbXBpbGVyT3B0aW9ucywgcm9vdE5hbWVzIH0pO1xuICBjb25zdCBwcm9ibGVtczogRG9jc1NuaXBwZXRQcm9ibGVtW10gPSBbXTtcbiAgZm9yIChjb25zdCByb290TmFtZSBvZiByb290TmFtZXMpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHJvb3ROYW1lKTtcbiAgICBjb25zdCB2aXJ0dWFsRmlsZSA9IHZpcnR1YWxGaWxlcy5nZXQobm9ybWFsaXplUGF0aChyb290TmFtZSkpO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFdmVyeSByb290IG5hbWUgaXMgYSB2aXJ0dWFsIGZpbGUgdGhlIHByb2dyYW0gd2FzIGJ1aWx0IGZyb20uICovXG4gICAgaWYgKCFzb3VyY2VGaWxlIHx8ICF2aXJ0dWFsRmlsZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgY29uc3QgaXNKYXZhU2NyaXB0ID0gcm9vdE5hbWUuZW5kc1dpdGgoJy5qcycpO1xuICAgIGNvbnN0IGRpYWdub3N0aWNzID0gWy4uLnByb2dyYW0uZ2V0U3ludGFjdGljRGlhZ25vc3RpY3Moc291cmNlRmlsZSksIC4uLnByb2dyYW0uZ2V0U2VtYW50aWNEaWFnbm9zdGljcyhzb3VyY2VGaWxlKV07XG4gICAgZm9yIChjb25zdCBkaWFnbm9zdGljIG9mIGRpYWdub3N0aWNzKSB7XG4gICAgICBpZiAoSUdOT1JFRF9ESUFHTk9TVElDX0NPREVTLmhhcyhkaWFnbm9zdGljLmNvZGUpIHx8IChpc0phdmFTY3JpcHQgJiYgSkFWQVNDUklQVF9JR05PUkVEX0RJQUdOT1NUSUNfQ09ERVMuaGFzKGRpYWdub3N0aWMuY29kZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIG5leHQgLS0gQSBkaWFnbm9zdGljIG9mIG9uZSBzb3VyY2UgZmlsZSBhbHdheXMgY2FycmllcyBpdHMgcG9zaXRpb24uICovXG4gICAgICBjb25zdCBmaWxlTGluZSA9IGRpYWdub3N0aWMuc3RhcnQgPT09IHVuZGVmaW5lZCA/IDAgOiBzb3VyY2VGaWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKGRpYWdub3N0aWMuc3RhcnQpLmxpbmU7XG4gICAgICBjb25zdCBzbmlwcGV0TGluZSA9IE1hdGgubWF4KDAsIGZpbGVMaW5lIC0gdmlydHVhbEZpbGUuY29udGV4dExpbmVDb3VudCk7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZmlsZVBhdGg6IHZpcnR1YWxGaWxlLmZpbGVQYXRoLFxuICAgICAgICBsaW5lOiB2aXJ0dWFsRmlsZS5jb2RlU3RhcnRMaW5lICsgc25pcHBldExpbmUsXG4gICAgICAgIG1lc3NhZ2U6IGBUUyR7U3RyaW5nKGRpYWdub3N0aWMuY29kZSl9OiAke2ZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgJyAnKX1gXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByb2JsZW1zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0R3VpZGVzKGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBndWlkZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgYXdhaXQgcmVhZGRpcihkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGpvaW4oZGlyZWN0b3J5LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYgKGVudHJ5Lm5hbWUgIT09ICdhcGknKSB7XG4gICAgICAgIGd1aWRlcy5wdXNoKC4uLmF3YWl0IGxpc3RHdWlkZXMoZW50cnlQYXRoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgvXFwubWR4PyQvdS50ZXN0KGVudHJ5Lm5hbWUpKSB7XG4gICAgICBndWlkZXMucHVzaChlbnRyeVBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3VpZGVzLnNvcnQoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Qb3NpeChyZXNvbHZlKHBhdGgpKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpcFByZWZpeChsaW5lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxpbmUuc3RhcnRzV2l0aChwcmVmaXgpID8gbGluZS5zbGljZShwcmVmaXgubGVuZ3RoKSA6IGxpbmUucmVwbGFjZSgvXig/Olxccyo+KSpcXHM/L3UsICcnKTtcbn1cblxuZnVuY3Rpb24gdG9Qb3NpeChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsTUFBTSxvQkFBa0Qsb0JBQUksSUFBSTtBQUFBLEVBQzlELENBQUMsY0FBYyxJQUFJO0FBQUEsRUFDbkIsQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNYLENBQUMsTUFBTSxLQUFLO0FBQUEsRUFDWixDQUFDLGNBQWMsS0FBSztBQUN0QixDQUFDO0FBS0QsTUFBTSwwQkFBMEI7QUFFaEMsTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxxQ0FBcUM7QUFDM0MsTUFBTSw4Q0FBOEM7QUFDcEQsTUFBTSwyQkFBMkIsb0JBQUksSUFB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
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zbmlwcGV0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0cmFjdHMgdGhlIGNvZGUgc25pcHBldHMgb2YgYSBwYWNrYWdlJ3MgZG9jdW1lbnRhdGlvbiBndWlkZXMgYW5kIHR5cGUtY2hlY2tzIHRoZW0gYWdhaW5zdCBpdHMgc291cmNlcy5cbiAqXG4gKiBBIGd1aWRlJ3Mgc25pcHBldCBpcyBjb2RlIGEgcmVhZGVyIGNvcGllcywgc28gYSByZW5hbWVkIG1lbWJlciBvciBhIHN0YWxlIGltcG9ydCBwYXRoIGluIGl0IGlzIGEgYnVnIHRoYXQgc2hpcHNcbiAqIHRvIHRoZSBzaXRlIHdpdGggZXZlcnkgY2hlY2sgZ3JlZW4uIEV2ZXJ5IGZlbmNlZCBgdHNgLCBgdHlwZXNjcmlwdGAsIGBqc2Agb3IgYGphdmFzY3JpcHRgIGJsb2NrIGluXG4gKiBgZG9jcy9zcmMvY29udGVudC9kb2NzYCBpcyBjb21waWxlZCBhcyBpdHMgb3duIG1vZHVsZSwgd2l0aCB0aGUgcHJvamVjdCdzIGB0c2NvbmZpZy5qc29uYCwgc28gYW4gaW1wb3J0IG9mIHRoZVxuICogcGFja2FnZSdzIG93biBuYW1lIHJlc29sdmVzIHdoZXJldmVyIHRoYXQgY29uZmlndXJhdGlvbiBzZW5kcyBpdCAoaXRzIGBwYXRoc2AsIG9yIHRoZSBgY29tcGlsZXJPcHRpb25zYCBwYXNzZWRcbiAqIGhlcmUpIGFuZCBhIHdyb25nIG5hbWUgZmFpbHMuIEEgYHRzYCAvIGB0eXBlc2NyaXB0YCBibG9jayBpcyBjb21waWxlZCBhcyBUeXBlU2NyaXB0OyBhIGBqc2AgLyBgamF2YXNjcmlwdGAgYmxvY2ssXG4gKiBvZnRlbiBhIGRldnRvb2xzLWNvbnNvbGUgcmVjaXBlLCBpcyBjb21waWxlZCBhcyBKYXZhU2NyaXB0IHdpdGggYGNoZWNrSnNgLCBzbyBhIHdyb25nIG1lbWJlciBvZiBhIHR5cGVkIG9iamVjdFxuICogc3RpbGwgZmFpbHMgd2hpbGUgYW4gdW50eXBlZCBsb29rdXAgZG9lcyBub3QuIFRoZSBnZW5lcmF0ZWQgQVBJIHJlZmVyZW5jZSAoYGRvY3Mvc3JjL2NvbnRlbnQvZG9jcy9hcGlgKSBpc1xuICogc2tpcHBlZDogaXQgaXMgcmVuZGVyZWQgZnJvbSB0aGUgVFNEb2MuXG4gKlxuICogVGhyZWUgdGhpbmdzIHNoYXBlIHdoYXQgYSBzbmlwcGV0IGlzIGNvbXBpbGVkIHdpdGgsIGVhY2ggYnV0IHRoZSBmaXJzdCB3cml0dGVuIGluIHRoZSBndWlkZSBhcyBhbiBIVE1MIGNvbW1lbnQsXG4gKiBpbnZpc2libGUgb24gdGhlIHNpdGUsIG9uIHRoZSBsaW5lcyByaWdodCBhYm92ZSB0aGUgZmVuY2U6XG4gKlxuICogLSBUaGUgbmFtZXMgZXZlcnkgZ3VpZGUgbWF5IHVzZSB3aXRob3V0IGRlY2xhcmluZyB0aGVtIGFyZSB0aGUgcGFja2FnZSdzIGBwcmVsdWRlYCwgY29tcGlsZWQgYXMgYSBtb2R1bGUgb2YgaXRzXG4gKiAgIG93biAoYSBgZGVjbGFyZSBnbG9iYWxgIGJsb2NrLCB3aXRoIHRoZSBpbXBvcnRzIGl0IG5lZWRzKS5cbiAqIC0gYDwhLS0gc25pcHBldC1jaGVjazogY29udGV4dCA8VHlwZVNjcmlwdD4gLS0+YCBwcmVwZW5kcyBkZWNsYXJhdGlvbnMgdG8gdGhhdCBvbmUgc25pcHBldCwgZm9yIHRoZSBuYW1lcyBpdHNcbiAqICAgcHJvc2UgaGFzIGFscmVhZHkgaW50cm9kdWNlZCAoYGRlY2xhcmUgY29uc3QgbGlua0VsOiBIVE1MQW5jaG9yRWxlbWVudDtgKS4gU2V2ZXJhbCBzdWNoIGxpbmVzIGFkZCB1cC5cbiAqIC0gYDwhLS0gc25pcHBldC1jaGVjazogc2tpcCA8cmVhc29uPiAtLT5gIGV4ZW1wdHMgYSBzbmlwcGV0IHRoYXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBjb21waWxhYmxlLCBzdWNoIGFzXG4gKiAgIHBzZXVkby1jb2RlLiBUaGUgcmVhc29uIGlzIHJlcXVpcmVkLCBzbyBhIHNraXAgaXMgYSBkZWNpc2lvbiBzb21lYm9keSB3cm90ZSBkb3duLCBuZXZlciBhIHNpbGVudCBob2xlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcGlsZXJPcHRpb25zLFxuICBTb3VyY2VGaWxlXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1xuICByZWFkZGlyLFxuICByZWFkRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7XG4gIGpvaW4sXG4gIHJlbGF0aXZlLFxuICByZXNvbHZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICBjcmVhdGVDb21waWxlckhvc3QsXG4gIGNyZWF0ZVByb2dyYW0sXG4gIGNyZWF0ZVNvdXJjZUZpbGUsXG4gIGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQsXG4gIGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlLFxuICBTY3JpcHRLaW5kLFxuICBzeXNcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8qKlxuICogVGhlIGxhbmd1YWdlcyBvZiB0aGUgZmVuY2VkIGJsb2NrcyB0aGF0IGFyZSB0eXBlLWNoZWNrZWQsIGFuZCB3aGV0aGVyIGVhY2ggaXMgSmF2YVNjcmlwdC5cbiAqL1xuY29uc3QgQ0hFQ0tFRF9MQU5HVUFHRVM6IFJlYWRvbmx5TWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKFtcbiAgWydqYXZhc2NyaXB0JywgdHJ1ZV0sXG4gIFsnanMnLCB0cnVlXSxcbiAgWyd0cycsIGZhbHNlXSxcbiAgWyd0eXBlc2NyaXB0JywgZmFsc2VdXG5dKTtcblxuLyoqXG4gKiBUaGUgb2Zmc2V0IGZyb20gYSBmZW5jZSBsaW5lJ3MgMC1iYXNlZCBpbmRleCB0byB0aGUgMS1iYXNlZCBsaW5lIG9mIHRoZSBjb2RlIGFmdGVyIGl0LlxuICovXG5jb25zdCBMSU5FX0FGVEVSX0ZFTkNFX09GRlNFVCA9IDI7XG5cbmNvbnN0IE1BUktFUl9SRUdfRVhQID0gL148IS0tXFxzKnNuaXBwZXQtY2hlY2s6XFxzKig/PGtpbmQ+W2Etel0rKVxcYig/PHRleHQ+Lio/KS0tPiQvc3U7XG5cbi8qKlxuICogRGlhZ25vc3RpY3MgYSBzbmlwcGV0IGlzIG5vdCBoZWxkIHRvOiBhbiBpbGx1c3RyYXRpb24gZGVjbGFyZXMgbmFtZXMgaXQgbmV2ZXIgcmVhZHMuXG4gKi9cbmNvbnN0IERJQUdOT1NUSUNfREVDTEFSRURfQlVUX1ZBTFVFX05FVkVSX1JFQUQgPSA2MTMzO1xuY29uc3QgRElBR05PU1RJQ19BTExfSU1QT1JUU19VTlVTRUQgPSA2MTkyO1xuY29uc3QgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfTkVWRVJfVVNFRCA9IDYxOTY7XG5jb25zdCBESUFHTk9TVElDX0FMTF9ERVNUUlVDVFVSRURfRUxFTUVOVFNfVU5VU0VEID0gNjE5ODtcbmNvbnN0IElHTk9SRURfRElBR05PU1RJQ19DT0RFUyA9IG5ldyBTZXQoW1xuICBESUFHTk9TVElDX0FMTF9ERVNUUlVDVFVSRURfRUxFTUVOVFNfVU5VU0VELFxuICBESUFHTk9TVElDX0FMTF9JTVBPUlRTX1VOVVNFRCxcbiAgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfTkVWRVJfVVNFRCxcbiAgRElBR05PU1RJQ19ERUNMQVJFRF9CVVRfVkFMVUVfTkVWRVJfUkVBRFxuXSk7XG5cbi8qKlxuICogVGhlIGltcGxpY2l0LWBhbnlgIGRpYWdub3N0aWNzLCB3aGljaCBhIEphdmFTY3JpcHQgc25pcHBldCBpcyBub3QgaGVsZCB0bzogYSBjb25zb2xlIHJlY2lwZSBoYXMgbm8gYW5ub3RhdGlvbnMgdG9cbiAqIGdpdmUsIGFuZCBhbiB1bnR5cGVkIGxvb2t1cCBzdWNoIGFzIGEgYFN5bWJvbC5mb3JgIHNsb3Qgb24gYGdsb2JhbFRoaXNgIGlzIHdoYXQgcGxhaW4gSmF2YVNjcmlwdCBkb2VzLlxuICovXG5jb25zdCBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZID0gNzAwNTtcbmNvbnN0IERJQUdOT1NUSUNfUEFSQU1FVEVSX0lNUExJQ0lUTFlfQU5ZID0gNzAwNjtcbmNvbnN0IERJQUdOT1NUSUNfTUVNQkVSX0lNUExJQ0lUTFlfQU5ZID0gNzAwODtcbmNvbnN0IERJQUdOT1NUSUNfQklORElOR19FTEVNRU5UX0lNUExJQ0lUTFlfQU5ZID0gNzAzMTtcbmNvbnN0IERJQUdOT1NUSUNfVkFSSUFCTEVfSU1QTElDSVRMWV9BTllfSU5fU09NRV9MT0NBVElPTlMgPSA3MDM0O1xuY29uc3QgRElBR05PU1RJQ19BUlJPV19GVU5DVElPTl9DQVBUVVJFU19HTE9CQUxfVEhJUyA9IDcwNDE7XG5jb25zdCBESUFHTk9TVElDX0VMRU1FTlRfSU1QTElDSVRMWV9BTlkgPSA3MDUzO1xuY29uc3QgSkFWQVNDUklQVF9JR05PUkVEX0RJQUdOT1NUSUNfQ09ERVMgPSBuZXcgU2V0KFtcbiAgRElBR05PU1RJQ19BUlJPV19GVU5DVElPTl9DQVBUVVJFU19HTE9CQUxfVEhJUyxcbiAgRElBR05PU1RJQ19CSU5ESU5HX0VMRU1FTlRfSU1QTElDSVRMWV9BTlksXG4gIERJQUdOT1NUSUNfRUxFTUVOVF9JTVBMSUNJVExZX0FOWSxcbiAgRElBR05PU1RJQ19NRU1CRVJfSU1QTElDSVRMWV9BTlksXG4gIERJQUdOT1NUSUNfUEFSQU1FVEVSX0lNUExJQ0lUTFlfQU5ZLFxuICBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZLFxuICBESUFHTk9TVElDX1ZBUklBQkxFX0lNUExJQ0lUTFlfQU5ZX0lOX1NPTUVfTE9DQVRJT05TXG5dKTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZX06IHRoZSBzYW1lIGFzIHtAbGluayBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtc30gdGFrZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2VydERvY3NTbmlwcGV0c0NvbXBpbGVQYXJhbXMgPSBGaW5kRG9jc1NuaXBwZXRQcm9ibGVtc1BhcmFtcztcblxuLyoqXG4gKiBPbmUgZmVuY2VkIGNvZGUgYmxvY2sgb2YgYSBndWlkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NzU25pcHBldCB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSwgd2l0aCBhbnkgYmxvY2txdW90ZSBvciBpbmRlbnRhdGlvbiBwcmVmaXggb2YgdGhlIGZlbmNlIHN0cmlwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgMS1iYXNlZCBsaW5lIG9mIHRoZSBndWlkZSBvbiB3aGljaCB0aGUgY29kZSBzdGFydHMgKHRoZSBsaW5lIGFmdGVyIHRoZSBvcGVuaW5nIGZlbmNlKS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVTdGFydExpbmU6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgYHNuaXBwZXQtY2hlY2s6IGNvbnRleHRgIG1hcmtlcnMgYWJvdmUgdGhlIGZlbmNlLCBqb2luZWQgYnkgbmV3bGluZXMuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNuaXBwZXQgaXMgSmF2YVNjcmlwdCByYXRoZXIgdGhhbiBUeXBlU2NyaXB0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNKYXZhU2NyaXB0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGZlbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiBnaXZlbiBieSBhIGBzbmlwcGV0LWNoZWNrOiBza2lwYCBtYXJrZXIsIG9yIGBudWxsYCB3aGVuIHRoZSBzbmlwcGV0IGlzIGNoZWNrZWQuXG4gICAqL1xuICByZWFkb25seSBza2lwUmVhc29uOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcHJvYmxlbSBmb3VuZCBpbiBhIGd1aWRlJ3Mgc25pcHBldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NzU25pcHBldFByb2JsZW0ge1xuICAvKipcbiAgICogVGhlIGd1aWRlJ3MgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2Ugcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSAxLWJhc2VkIGxpbmUgb2YgdGhlIGd1aWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGF0IGlzIHdyb25nLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXMge1xuICAvKipcbiAgICogQ29tcGlsZXIgb3B0aW9ucyBsYWlkIG92ZXIgdGhlIG9uZXMgYHRzY29uZmlnLmpzb25gIGdpdmVzLCBmb3IgaW5zdGFuY2UgYHBhdGhzYCB0aGF0IHJlc29sdmUgdGhlIHBhY2thZ2UncyBvd25cbiAgICogbmFtZSBvbnRvIGl0cyBzb3VyY2VzIHdoZW4gaXRzIGB0c2NvbmZpZy5qc29uYCBoYXMgbm9uZS4gQSByZWxhdGl2ZSBwYXRoIGluIHRoZW0gaXMgbm90IHJlc29sdmVkLCBzbyBwYXNzXG4gICAqIGFic29sdXRlIG9uZXMuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlck9wdGlvbnM/OiBDb21waWxlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBndWlkZXMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB7QGxpbmsgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXMucm9vdERpcmVjdG9yeX0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnZG9jcy9zcmMvY29udGVudC9kb2NzJ2BcbiAgICovXG4gIHJlYWRvbmx5IGRvY3NEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhbWJpZW50IGNvbnRleHQgZXZlcnkgc25pcHBldCBpcyBjb21waWxlZCB3aXRoOiB0aGUgbmFtZXMgYSBndWlkZSBtYXkgdXNlIHdpdGhvdXQgZGVjbGFyaW5nIHRoZW0sIHdyaXR0ZW4gYXNcbiAgICogYSBtb2R1bGUgKGBkZWNsYXJlIGdsb2JhbCB7IC4uLiB9YCwgd2l0aCB0aGUgaW1wb3J0cyBpdCBuZWVkcykuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2AsIG5vIHByZWx1ZGUuXG4gICAqL1xuICByZWFkb25seSBwcmVsdWRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSByb290LCBob2xkaW5nIGB0c2NvbmZpZy5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbXBpbGVTbmlwcGV0c1BhcmFtcyB7XG4gIHJlYWRvbmx5IGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xuICByZWFkb25seSByb290RGlyZWN0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHZpcnR1YWxGaWxlczogUmVhZG9ubHlNYXA8c3RyaW5nLCBWaXJ0dWFsU25pcHBldEZpbGU+O1xufVxuXG5pbnRlcmZhY2UgT3BlbkZlbmNlIHtcbiAgcmVhZG9ubHkgY29udGV4dDogc3RyaW5nW107XG4gIHJlYWRvbmx5IGZlbmNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhbmd1YWdlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSBza2lwUmVhc29uOiBudWxsIHwgc3RyaW5nO1xuICByZWFkb25seSBzdGFydExpbmU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFZpcnR1YWxTbmlwcGV0RmlsZSB7XG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29kZVN0YXJ0TGluZTogbnVtYmVyO1xuICByZWFkb25seSBjb250ZXh0TGluZUNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHlwZS1jaGVja3MgZXZlcnkgc25pcHBldCBvZiB0aGUgZ3VpZGVzIGFuZCB0aHJvd3Mgd2hlbiBvbmUgZmFpbHMsIGZvciBhIGBkb2NzOmNoZWNrLXNuaXBwZXRzYCBzY3JpcHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZVBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5IHNuaXBwZXQgY29tcGlsZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gTGlzdGluZyBldmVyeSBwcm9ibGVtLCBvbmUgcGVyIGxpbmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlcnREb2NzU25pcHBldHNDb21waWxlKHBhcmFtczogQXNzZXJ0RG9jc1NuaXBwZXRzQ29tcGlsZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9ibGVtcyA9IGF3YWl0IGZpbmREb2NzU25pcHBldFByb2JsZW1zKHBhcmFtcyk7XG4gIGlmIChwcm9ibGVtcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke1N0cmluZyhwcm9ibGVtcy5sZW5ndGgpfSBwcm9ibGVtKHMpIGluIHRoZSBkb2N1bWVudGF0aW9uIHNuaXBwZXRzOlxcbiR7Zm9ybWF0RG9jc1NuaXBwZXRQcm9ibGVtcyhwcm9ibGVtcyl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZmVuY2VkIGNvZGUgYmxvY2tzIG9mIHRoZSBjaGVja2VkIGxhbmd1YWdlcyBmcm9tIGEgbWFya2Rvd24gZG9jdW1lbnQuXG4gKlxuICogQSBmZW5jZSBpbnNpZGUgYSBibG9ja3F1b3RlIG9yIGEgbGlzdCBpdGVtIGlzIHJlY29nbml6ZWQgdG9vOiBpdHMgcHJlZml4IChgPiBgLCBpbmRlbnRhdGlvbikgaXMgc3RyaXBwZWQgZnJvbVxuICogZXZlcnkgbGluZSBvZiBpdHMgY29kZS5cbiAqXG4gKiBAcGFyYW0gbWFya2Rvd24gLSBUaGUgbWFya2Rvd24gZG9jdW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgc25pcHBldHMsIGluIGRvY3VtZW50IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERvY3NTbmlwcGV0cyhtYXJrZG93bjogc3RyaW5nKTogRG9jc1NuaXBwZXRbXSB7XG4gIGNvbnN0IGxpbmVzID0gbWFya2Rvd24uc3BsaXQoL1xccj9cXG4vdSk7XG4gIGNvbnN0IHNuaXBwZXRzOiBEb2NzU25pcHBldFtdID0gW107XG4gIGxldCBvcGVuRmVuY2U6IG51bGwgfCBPcGVuRmVuY2UgPSBudWxsO1xuICBsZXQgY29kZUxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGVuZGluZ1NraXBSZWFzb246IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBsZXQgcGVuZGluZ0NvbnRleHQ6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGxpbmVdIG9mIGxpbmVzLmVudHJpZXMoKSkge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzdHJpcFByZWZpeChsaW5lLCBvcGVuRmVuY2UucHJlZml4KTtcbiAgICAgIGlmIChjb250ZW50LnRyaW1FbmQoKSA9PT0gb3BlbkZlbmNlLmZlbmNlKSB7XG4gICAgICAgIGNvbnN0IGlzSmF2YVNjcmlwdCA9IENIRUNLRURfTEFOR1VBR0VTLmdldChvcGVuRmVuY2UubGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoaXNKYXZhU2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzbmlwcGV0cy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIGNvZGVTdGFydExpbmU6IG9wZW5GZW5jZS5zdGFydExpbmUsXG4gICAgICAgICAgICBjb250ZXh0OiBvcGVuRmVuY2UuY29udGV4dC5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIGlzSmF2YVNjcmlwdCxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBvcGVuRmVuY2UubGFuZ3VhZ2UsXG4gICAgICAgICAgICBza2lwUmVhc29uOiBvcGVuRmVuY2Uuc2tpcFJlYXNvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICAgIGNvZGVMaW5lcyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZUxpbmVzLnB1c2goY29udGVudCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmZW5jZU1hdGNoID0gL14oPzxwcmVmaXg+KD86XFxzKj4pKlxccyopKD88ZmVuY2U+YHszLH18fnszLH0pKD88bGFuZ3VhZ2U+W1xcdy1dKikvdS5leGVjKGxpbmUpO1xuICAgIGlmIChmZW5jZU1hdGNoPy5ncm91cHMpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFdmVyeSBncm91cCBvZiB0aGUgZmVuY2UgcGF0dGVybiB0YWtlcyBwYXJ0IGluIGEgbWF0Y2gsIHNvIHRoZSBmYWxsYmFja3MgbmV2ZXIgYXBwbHkuICovXG4gICAgICBvcGVuRmVuY2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHBlbmRpbmdDb250ZXh0LFxuICAgICAgICBmZW5jZTogZmVuY2VNYXRjaC5ncm91cHNbJ2ZlbmNlJ10gPz8gJycsXG4gICAgICAgIGxhbmd1YWdlOiAoZmVuY2VNYXRjaC5ncm91cHNbJ2xhbmd1YWdlJ10gPz8gJycpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHByZWZpeDogZmVuY2VNYXRjaC5ncm91cHNbJ3ByZWZpeCddID8/ICcnLFxuICAgICAgICBza2lwUmVhc29uOiBwZW5kaW5nU2tpcFJlYXNvbixcbiAgICAgICAgc3RhcnRMaW5lOiBpbmRleCArIExJTkVfQUZURVJfRkVOQ0VfT0ZGU0VUXG4gICAgICB9O1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIHBlbmRpbmdTa2lwUmVhc29uID0gbnVsbDtcbiAgICAgIHBlbmRpbmdDb250ZXh0ID0gW107XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0ID0gbGluZS5yZXBsYWNlKC9eKD86XFxzKj4pKlxccyovdSwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBtYXJrZXJNYXRjaCA9IE1BUktFUl9SRUdfRVhQLmV4ZWModGV4dCk7XG4gICAgY29uc3Qga2luZCA9IG1hcmtlck1hdGNoPy5ncm91cHM/Llsna2luZCddO1xuICAgIGNvbnN0IG1hcmtlclRleHQgPSAobWFya2VyTWF0Y2g/Lmdyb3Vwcz8uWyd0ZXh0J10gPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoa2luZCA9PT0gJ3NraXAnKSB7XG4gICAgICBwZW5kaW5nU2tpcFJlYXNvbiA9IG1hcmtlclRleHQucmVwbGFjZSgvXlst4oCUOl1cXHMqL3UsICcnKTtcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdjb250ZXh0Jykge1xuICAgICAgcGVuZGluZ0NvbnRleHQucHVzaChtYXJrZXJUZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRleHQgIT09ICcnKSB7XG4gICAgICBwZW5kaW5nU2tpcFJlYXNvbiA9IG51bGw7XG4gICAgICBwZW5kaW5nQ29udGV4dCA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzbmlwcGV0cztcbn1cblxuLyoqXG4gKiBUeXBlLWNoZWNrcyBldmVyeSBzbmlwcGV0IG9mIHRoZSBndWlkZXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRmluZERvY3NTbmlwcGV0UHJvYmxlbXNQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIHByb2JsZW1zIGZvdW5kLCBlbXB0eSB3aGVuIGV2ZXJ5IHNuaXBwZXQgY29tcGlsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kRG9jc1NuaXBwZXRQcm9ibGVtcyhwYXJhbXM6IEZpbmREb2NzU25pcHBldFByb2JsZW1zUGFyYW1zKTogUHJvbWlzZTxEb2NzU25pcHBldFByb2JsZW1bXT4ge1xuICBjb25zdCByb290RGlyZWN0b3J5ID0gcmVzb2x2ZShwYXJhbXMucm9vdERpcmVjdG9yeSk7XG4gIGNvbnN0IGRvY3NEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksIHBhcmFtcy5kb2NzRGlyZWN0b3J5ID8/ICdkb2NzL3NyYy9jb250ZW50L2RvY3MnKTtcbiAgY29uc3QgcHJvYmxlbXM6IERvY3NTbmlwcGV0UHJvYmxlbVtdID0gW107XG4gIGNvbnN0IHZpcnR1YWxGaWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBWaXJ0dWFsU25pcHBldEZpbGU+KCk7XG4gIGNvbnN0IHJvb3ROYW1lczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc25pcHBldHNEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksICdkb2NzJywgJ19fc25pcHBldHNfXycpO1xuXG4gIGZ1bmN0aW9uIGFkZFZpcnR1YWxGaWxlKHBhdGg6IHN0cmluZywgZmlsZTogVmlydHVhbFNuaXBwZXRGaWxlKTogdm9pZCB7XG4gICAgdmlydHVhbEZpbGVzLnNldChub3JtYWxpemVQYXRoKHBhdGgpLCBmaWxlKTtcbiAgICByb290TmFtZXMucHVzaChwYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHByZWx1ZGUgPSBwYXJhbXMucHJlbHVkZSA/PyAnJztcbiAgaWYgKHByZWx1ZGUgIT09ICcnKSB7XG4gICAgYWRkVmlydHVhbEZpbGUoam9pbihzbmlwcGV0c0RpcmVjdG9yeSwgJ3ByZWx1ZGUudHMnKSwgeyBjb2RlOiBwcmVsdWRlLCBjb2RlU3RhcnRMaW5lOiAxLCBjb250ZXh0TGluZUNvdW50OiAwLCBmaWxlUGF0aDogJzxwcmVsdWRlPicgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGd1aWRlUGF0aCBvZiBhd2FpdCBsaXN0R3VpZGVzKGRvY3NEaXJlY3RvcnkpKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSB0b1Bvc2l4KHJlbGF0aXZlKHJvb3REaXJlY3RvcnksIGd1aWRlUGF0aCkpO1xuICAgIGNvbnN0IG1hcmtkb3duID0gYXdhaXQgcmVhZEZpbGUoZ3VpZGVQYXRoLCAndXRmLTgnKTtcbiAgICBmb3IgKGNvbnN0IHNuaXBwZXQgb2YgZXh0cmFjdERvY3NTbmlwcGV0cyhtYXJrZG93bikpIHtcbiAgICAgIGlmIChzbmlwcGV0LnNraXBSZWFzb24gPT09ICcnKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGZpbGVQYXRoLFxuICAgICAgICAgIGxpbmU6IHNuaXBwZXQuY29kZVN0YXJ0TGluZSAtIDEsXG4gICAgICAgICAgbWVzc2FnZTogJ0EgYHNuaXBwZXQtY2hlY2s6IHNraXBgIG1hcmtlciBtdXN0IGdpdmUgaXRzIHJlYXNvbi4nXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzbmlwcGV0LnNraXBSZWFzb24gIT09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBleHRlbnNpb24gPSBzbmlwcGV0LmlzSmF2YVNjcmlwdCA/ICdqcycgOiAndHMnO1xuICAgICAgY29uc3QgYmFzZU5hbWUgPSBgJHt0b1Bvc2l4KHJlbGF0aXZlKGRvY3NEaXJlY3RvcnksIGd1aWRlUGF0aCkpLnJlcGxhY2VBbGwoJy8nLCAnX18nKX0uTCR7U3RyaW5nKHNuaXBwZXQuY29kZVN0YXJ0TGluZSl9LiR7ZXh0ZW5zaW9ufWA7XG4gICAgICBjb25zdCBjb250ZXh0ID0gc25pcHBldC5jb250ZXh0ID09PSAnJyA/ICcnIDogYCR7c25pcHBldC5jb250ZXh0fVxcbmA7XG4gICAgICBhZGRWaXJ0dWFsRmlsZShqb2luKHNuaXBwZXRzRGlyZWN0b3J5LCBiYXNlTmFtZSksIHtcbiAgICAgICAgY29kZTogYCR7Y29udGV4dH0ke3NuaXBwZXQuY29kZX1cXG5leHBvcnQge307XFxuYCxcbiAgICAgICAgY29kZVN0YXJ0TGluZTogc25pcHBldC5jb2RlU3RhcnRMaW5lLFxuICAgICAgICBjb250ZXh0TGluZUNvdW50OiBjb250ZXh0ID09PSAnJyA/IDAgOiBjb250ZXh0LnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxLFxuICAgICAgICBmaWxlUGF0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvYmxlbXMucHVzaCguLi5jb21waWxlU25pcHBldHMoeyBjb21waWxlck9wdGlvbnM6IHBhcmFtcy5jb21waWxlck9wdGlvbnMgPz8ge30sIHJvb3REaXJlY3RvcnksIHJvb3ROYW1lcywgdmlydHVhbEZpbGVzIH0pKTtcbiAgcmV0dXJuIHByb2JsZW1zO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgcHJvYmxlbXMgb25lIHBlciBsaW5lLCBhcyBgcGF0aDpsaW5lIC0gbWVzc2FnZWAuXG4gKlxuICogQHBhcmFtIHByb2JsZW1zIC0gVGhlIHByb2JsZW1zLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RG9jc1NuaXBwZXRQcm9ibGVtcyhwcm9ibGVtczogcmVhZG9ubHkgRG9jc1NuaXBwZXRQcm9ibGVtW10pOiBzdHJpbmcge1xuICByZXR1cm4gcHJvYmxlbXMubWFwKChwcm9ibGVtKSA9PiBgJHtwcm9ibGVtLmZpbGVQYXRofToke1N0cmluZyhwcm9ibGVtLmxpbmUpfSAtICR7cHJvYmxlbS5tZXNzYWdlfWApLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBjb21waWxlU25pcHBldHMocGFyYW1zOiBDb21waWxlU25pcHBldHNQYXJhbXMpOiBEb2NzU25pcHBldFByb2JsZW1bXSB7XG4gIGNvbnN0IHsgcm9vdERpcmVjdG9yeSwgcm9vdE5hbWVzLCB2aXJ0dWFsRmlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4ocm9vdERpcmVjdG9yeSwgJ3RzY29uZmlnLmpzb24nKTtcbiAgY29uc3QgcGFyc2VkID0gZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUoY29uZmlnUGF0aCwge30sIHtcbiAgICAuLi5zeXMsXG4gICAgb25VblJlY292ZXJhYmxlQ29uZmlnRmlsZURpYWdub3N0aWMoZGlhZ25vc3RpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgJ1xcbicpKTtcbiAgICB9XG4gIH0pO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQW4gdW5yZWFkYWJsZSBjb25maWd1cmF0aW9uIHRocm93cyBpbiB0aGUgaGFuZGxlciBhYm92ZSBiZWZvcmUgdGhpcyBjYW4gYmUgcmVhY2hlZC4gKi9cbiAgaWYgKCFwYXJzZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkICR7Y29uZmlnUGF0aH1gKTtcbiAgfVxuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4gIGNvbnN0IGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zID0ge1xuICAgIC4uLnBhcnNlZC5vcHRpb25zLFxuICAgIC4uLnBhcmFtcy5jb21waWxlck9wdGlvbnMsXG4gICAgYWxsb3dKczogdHJ1ZSxcbiAgICBjaGVja0pzOiB0cnVlLFxuICAgIGNvbXBvc2l0ZTogZmFsc2UsXG4gICAgaW5jcmVtZW50YWw6IGZhbHNlLFxuICAgIG5vRW1pdDogdHJ1ZSxcbiAgICBub1VudXNlZExvY2FsczogZmFsc2UsXG4gICAgbm9VbnVzZWRQYXJhbWV0ZXJzOiBmYWxzZVxuICB9O1xuICBkZWxldGUgY29tcGlsZXJPcHRpb25zLnRzQnVpbGRJbmZvRmlsZTtcblxuICBjb25zdCBob3N0ID0gY3JlYXRlQ29tcGlsZXJIb3N0KGNvbXBpbGVyT3B0aW9ucywgdHJ1ZSk7XG4gIGNvbnN0IG9yaWdpbmFsR2V0U291cmNlRmlsZSA9IGhvc3QuZ2V0U291cmNlRmlsZS5iaW5kKGhvc3QpO1xuICBjb25zdCBkb2VzT3JpZ2luYWxGaWxlRXhpc3QgPSBob3N0LmZpbGVFeGlzdHMuYmluZChob3N0KTtcbiAgY29uc3Qgb3JpZ2luYWxSZWFkRmlsZSA9IGhvc3QucmVhZEZpbGUuYmluZChob3N0KTtcbiAgaG9zdC5maWxlRXhpc3RzID0gKGZpbGVOYW1lKTogYm9vbGVhbiA9PiB2aXJ0dWFsRmlsZXMuaGFzKG5vcm1hbGl6ZVBhdGgoZmlsZU5hbWUpKSB8fCBkb2VzT3JpZ2luYWxGaWxlRXhpc3QoZmlsZU5hbWUpO1xuICBob3N0LnJlYWRGaWxlID0gKGZpbGVOYW1lKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHZpcnR1YWxGaWxlcy5nZXQobm9ybWFsaXplUGF0aChmaWxlTmFtZSkpPy5jb2RlID8/IG9yaWdpbmFsUmVhZEZpbGUoZmlsZU5hbWUpO1xuICBob3N0LmdldFNvdXJjZUZpbGUgPSAoZmlsZU5hbWUsIGxhbmd1YWdlVmVyc2lvbk9yT3B0aW9ucywgb25FcnJvciwgc2hvdWxkQ3JlYXRlTmV3U291cmNlRmlsZSk6IFNvdXJjZUZpbGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHZpcnR1YWxGaWxlID0gdmlydHVhbEZpbGVzLmdldChub3JtYWxpemVQYXRoKGZpbGVOYW1lKSk7XG4gICAgaWYgKHZpcnR1YWxGaWxlKSB7XG4gICAgICBjb25zdCBzY3JpcHRLaW5kID0gZmlsZU5hbWUuZW5kc1dpdGgoJy5qcycpID8gU2NyaXB0S2luZC5KUyA6IFNjcmlwdEtpbmQuVFM7XG4gICAgICByZXR1cm4gY3JlYXRlU291cmNlRmlsZShmaWxlTmFtZSwgdmlydHVhbEZpbGUuY29kZSwgbGFuZ3VhZ2VWZXJzaW9uT3JPcHRpb25zLCB0cnVlLCBzY3JpcHRLaW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbmFsR2V0U291cmNlRmlsZShmaWxlTmFtZSwgbGFuZ3VhZ2VWZXJzaW9uT3JPcHRpb25zLCBvbkVycm9yLCBzaG91bGRDcmVhdGVOZXdTb3VyY2VGaWxlKTtcbiAgfTtcblxuICBjb25zdCBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSh7IGhvc3QsIG9wdGlvbnM6IGNvbXBpbGVyT3B0aW9ucywgcm9vdE5hbWVzIH0pO1xuICBjb25zdCBwcm9ibGVtczogRG9jc1NuaXBwZXRQcm9ibGVtW10gPSBbXTtcbiAgZm9yIChjb25zdCByb290TmFtZSBvZiByb290TmFtZXMpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHJvb3ROYW1lKTtcbiAgICBjb25zdCB2aXJ0dWFsRmlsZSA9IHZpcnR1YWxGaWxlcy5nZXQobm9ybWFsaXplUGF0aChyb290TmFtZSkpO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFdmVyeSByb290IG5hbWUgaXMgYSB2aXJ0dWFsIGZpbGUgdGhlIHByb2dyYW0gd2FzIGJ1aWx0IGZyb20uICovXG4gICAgaWYgKCFzb3VyY2VGaWxlIHx8ICF2aXJ0dWFsRmlsZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgY29uc3QgaXNKYXZhU2NyaXB0ID0gcm9vdE5hbWUuZW5kc1dpdGgoJy5qcycpO1xuICAgIGNvbnN0IGRpYWdub3N0aWNzID0gWy4uLnByb2dyYW0uZ2V0U3ludGFjdGljRGlhZ25vc3RpY3Moc291cmNlRmlsZSksIC4uLnByb2dyYW0uZ2V0U2VtYW50aWNEaWFnbm9zdGljcyhzb3VyY2VGaWxlKV07XG4gICAgZm9yIChjb25zdCBkaWFnbm9zdGljIG9mIGRpYWdub3N0aWNzKSB7XG4gICAgICBpZiAoSUdOT1JFRF9ESUFHTk9TVElDX0NPREVTLmhhcyhkaWFnbm9zdGljLmNvZGUpIHx8IChpc0phdmFTY3JpcHQgJiYgSkFWQVNDUklQVF9JR05PUkVEX0RJQUdOT1NUSUNfQ09ERVMuaGFzKGRpYWdub3N0aWMuY29kZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIG5leHQgLS0gQSBkaWFnbm9zdGljIG9mIG9uZSBzb3VyY2UgZmlsZSBhbHdheXMgY2FycmllcyBpdHMgcG9zaXRpb24uICovXG4gICAgICBjb25zdCBmaWxlTGluZSA9IGRpYWdub3N0aWMuc3RhcnQgPT09IHVuZGVmaW5lZCA/IDAgOiBzb3VyY2VGaWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKGRpYWdub3N0aWMuc3RhcnQpLmxpbmU7XG4gICAgICBjb25zdCBzbmlwcGV0TGluZSA9IE1hdGgubWF4KDAsIGZpbGVMaW5lIC0gdmlydHVhbEZpbGUuY29udGV4dExpbmVDb3VudCk7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZmlsZVBhdGg6IHZpcnR1YWxGaWxlLmZpbGVQYXRoLFxuICAgICAgICBsaW5lOiB2aXJ0dWFsRmlsZS5jb2RlU3RhcnRMaW5lICsgc25pcHBldExpbmUsXG4gICAgICAgIG1lc3NhZ2U6IGBUUyR7U3RyaW5nKGRpYWdub3N0aWMuY29kZSl9OiAke2ZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgJyAnKX1gXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByb2JsZW1zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0R3VpZGVzKGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBndWlkZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgYXdhaXQgcmVhZGRpcihkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGpvaW4oZGlyZWN0b3J5LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYgKGVudHJ5Lm5hbWUgIT09ICdhcGknKSB7XG4gICAgICAgIGd1aWRlcy5wdXNoKC4uLmF3YWl0IGxpc3RHdWlkZXMoZW50cnlQYXRoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgvXFwubWR4PyQvdS50ZXN0KGVudHJ5Lm5hbWUpKSB7XG4gICAgICBndWlkZXMucHVzaChlbnRyeVBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3VpZGVzLnNvcnQoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Qb3NpeChyZXNvbHZlKHBhdGgpKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpcFByZWZpeChsaW5lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxpbmUuc3RhcnRzV2l0aChwcmVmaXgpID8gbGluZS5zbGljZShwcmVmaXgubGVuZ3RoKSA6IGxpbmUucmVwbGFjZSgvXig/Olxccyo+KSpcXHM/L3UsICcnKTtcbn1cblxuZnVuY3Rpb24gdG9Qb3NpeChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsTUFBTSxvQkFBa0Qsb0JBQUksSUFBSTtBQUFBLEVBQzlELENBQUMsY0FBYyxJQUFJO0FBQUEsRUFDbkIsQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNYLENBQUMsTUFBTSxLQUFLO0FBQUEsRUFDWixDQUFDLGNBQWMsS0FBSztBQUN0QixDQUFDO0FBS0QsTUFBTSwwQkFBMEI7QUFFaEMsTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxxQ0FBcUM7QUFDM0MsTUFBTSw4Q0FBOEM7QUFDcEQsTUFBTSwyQkFBMkIsb0JB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
|
|
@@ -184,7 +184,7 @@ function resolveWithinRoot(outputRootPath, outputRelativePath) {
|
|
|
184
184
|
if (joined.length > 1) {
|
|
185
185
|
joined = joined.replace(/\/$/u, "");
|
|
186
186
|
}
|
|
187
|
-
return joined
|
|
187
|
+
return joined === root || joined.startsWith(`${root}/`) ? joined : null;
|
|
188
188
|
}
|
|
189
189
|
function describeHttpStatus(httpStatus) {
|
|
190
190
|
return httpStatus === void 0 || httpStatus === NETWORK_FAILURE_STATUS ? "a network failure" : `HTTP ${String(httpStatus)}`;
|
|
@@ -201,14 +201,14 @@ async function probeWithRetry(url, fetchUrlStatus, retry) {
|
|
|
201
201
|
let waitedInMilliseconds = 0;
|
|
202
202
|
for (let attempt = 0; ; attempt++) {
|
|
203
203
|
const probeResult = await fetchUrlStatus(url);
|
|
204
|
-
const { retryAfterInMilliseconds, status } = typeof probeResult === "number" ? { retryAfterInMilliseconds: void 0, status: probeResult } : probeResult;
|
|
204
|
+
const { retryAfterInMilliseconds = 0, status } = typeof probeResult === "number" ? { retryAfterInMilliseconds: void 0, status: probeResult } : probeResult;
|
|
205
205
|
const remainingInMilliseconds = totalBudgetInMilliseconds - waitedInMilliseconds;
|
|
206
206
|
if (!isTransientStatus(status) || remainingInMilliseconds <= 0) {
|
|
207
207
|
return status;
|
|
208
208
|
}
|
|
209
209
|
const backoffInMilliseconds = Math.min(maxDelayInMilliseconds, initialDelayInMilliseconds * BACKOFF_FACTOR ** attempt);
|
|
210
210
|
const jitteredInMilliseconds = backoffInMilliseconds * (JITTER_FLOOR + (1 - JITTER_FLOOR) * random());
|
|
211
|
-
const delayInMilliseconds = Math.min(remainingInMilliseconds, Math.max(jitteredInMilliseconds, retryAfterInMilliseconds
|
|
211
|
+
const delayInMilliseconds = Math.min(remainingInMilliseconds, Math.max(jitteredInMilliseconds, retryAfterInMilliseconds));
|
|
212
212
|
await sleep(delayInMilliseconds);
|
|
213
213
|
waitedInMilliseconds += delayInMilliseconds;
|
|
214
214
|
}
|
|
@@ -236,4 +236,4 @@ export {
|
|
|
236
236
|
parseRetryAfterInMilliseconds,
|
|
237
237
|
resolveWithinRoot
|
|
238
238
|
};
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvbGluay1jaGVjay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGlvbiBvZiB0aGUgbGlua3MgZW1pdHRlZCBieSB0aGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBIVE1MLlxuICpcbiAqIEludGVybmFsIChzYW1lLXNpdGUpIGxpbmtzIGFyZSB2YWxpZGF0ZWQgb2ZmbGluZTogZXZlcnkgYGhyZWZgL2BzcmNgIG11c3QgcmVzb2x2ZSB0byBhIHJlYWxcbiAqIGZpbGUgaW4gdGhlIGJ1aWxkIG91dHB1dCwgYW5kIGV2ZXJ5IGAjZnJhZ21lbnRgIG11c3QgcmVzb2x2ZSB0byBhIHJlYWwgZWxlbWVudCBpZCBvbiB0aGVcbiAqIHRhcmdldCBwYWdlLlxuICpcbiAqIEV4dGVybmFsIGxpbmtzIGNhbiBvbmx5IGJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLCBzbyB0aG9zZSByZXF1ZXN0cyBhcmUgaGVhdmlseVxuICogZGVkdXBsaWNhdGVkIOKAlCBlYWNoIHVuaXF1ZSBleHRlcm5hbCBVUkwgaXMgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcmVnYXJkbGVzcyBvZiBob3cgbWFueSBvZiB0aGVcbiAqIHRob3VzYW5kcyBvZiBnZW5lcmF0ZWQgcGFnZXMgcmVmZXJlbmNlIGl0IOKAlCBhbmQgcnVuIHRocm91Z2ggYSBib3VuZGVkIGNvbmN1cnJlbmN5IHBvb2wuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7XG4gIGFzc2VydE5ldmVyLFxuICBlbnN1cmVOb25OdWxsYWJsZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSAnbm9kZTpwYXRoL3Bvc2l4JztcblxuY29uc3QgTElOS19BVFRSSUJVVEVfUkVHRVggPSAvXFxiKD86aHJlZnxzcmMpPSg/PHF1b3RlPlsnXCJdKSg/PHZhbHVlPi4qPylcXGs8cXVvdGU+L2dpdTtcbmNvbnN0IElEX0FUVFJJQlVURV9SRUdFWCA9IC9cXGJpZD0oPzxxdW90ZT5bJ1wiXSkoPzx2YWx1ZT4uKj8pXFxrPHF1b3RlPi9naXU7XG5jb25zdCBIVFRQX09LX1NUQVRVUyA9IDIwMDtcblxuLyoqXG4gKiBUaGUge0BsaW5rIEJyb2tlbkxpbmsuaHR0cFN0YXR1c30gc2VudGluZWwgZm9yIGEgbmV0d29yay1sZXZlbCBmYWlsdXJlICh0aW1lb3V0LCBETlMsXG4gKiBjb25uZWN0aW9uIHJlZnVzZWQpIHdoZXJlIG5vIEhUVFAgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlxuICovXG5leHBvcnQgY29uc3QgTkVUV09SS19GQUlMVVJFX1NUQVRVUyA9IDA7XG5cbi8qKlxuICogQSBzaW5nbGUgbGluayB0aGF0IGRvZXMgbm90IHJlc29sdmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJva2VuTGluayB7XG4gIC8qKlxuICAgKiBUaGUgSFRUUCBzdGF0dXMgcmV0dXJuZWQgYnkgYW4gZXh0ZXJuYWwgbGluaywgd2hlbiB7QGxpbmsgQnJva2VuTGluay5yZWFzb259IGlzXG4gICAqIGBleHRlcm5hbC1lcnJvcmAuIGAwYCBkZW5vdGVzIGEgbmV0d29yay1sZXZlbCBmYWlsdXJlICh0aW1lb3V0LCBETlMsIGNvbm5lY3Rpb24gcmVmdXNlZCkuXG4gICAqL1xuICByZWFkb25seSBodHRwU3RhdHVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgdGhlIGJyb2tlbiBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFnZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaHkgdGhlIGxpbmsgaXMgY29uc2lkZXJlZCBicm9rZW4uXG4gICAqL1xuICByZWFkb25seSByZWFzb246ICdleHRlcm5hbC1lcnJvcicgfCAnbWlzc2luZy1mcmFnbWVudCcgfCAnbWlzc2luZy1wYWdlJztcblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGFic29sdXRlIFVSTCB0aGUgbGluayBwb2ludHMgYXQuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHByb2JlcyBhZ2FpbnN0IG9uZSBob3N0LiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1BFUl9IT1NUX0NPTkNVUlJFTkNZfS5cbiAgICovXG4gIHJlYWRvbmx5IHBlckhvc3RDb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IGEgdHJhbnNpZW50IGZhaWx1cmUgaXMgcmV0cmllZC5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5PzogRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGJ1aWx0IGRvY3VtZW50YXRpb24gcGFnZSB0byB2YWxpZGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudGF0aW9uUGFnZSB7XG4gIC8qKlxuICAgKiBUaGUgcGFnZSdzIHJlbmRlcmVkIEhUTUwuXG4gICAqL1xuICByZWFkb25seSBodG1sOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYWdlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVpbGQtb3V0cHV0IHJvb3QsIGUuZy4gYGFwaS9mb28vaW5kZXguaHRtbGAuXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGF0IG9uZSBwcm9iZSBvZiBhbiBleHRlcm5hbCBVUkwgbGVhcm5lZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbExpbmtQcm9iZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgc2VydmVyIGFza2VkIHRoZSBjbGllbnQgdG8gd2FpdCBiZWZvcmUgYXNraW5nIGFnYWluIChpdHMgYFJldHJ5LUFmdGVyYCBoZWFkZXIpLCB3aGVuIGl0IHNhaWQuXG4gICAqL1xuICByZWFkb25seSByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIHN0YXR1cywgb3Ige0BsaW5rIE5FVFdPUktfRkFJTFVSRV9TVEFUVVN9IHdoZW4gbm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXI7XG59XG5cbi8qKlxuICogSG93IHtAbGluayBjb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc30gcmV0cmllcyBhIHRyYW5zaWVudCBmYWlsdXJlOiBhIG5ldHdvcmsgZmFpbHVyZSwgYW4gSFRUUCBgNDA4YCwgYW4gSFRUUCBgNDI5YCBvciBhbiBIVFRQIGA1eHhgLlxuICpcbiAqIEVhY2ggd2FpdCBkb3VibGVzIGZyb20ge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9ucy5pbml0aWFsRGVsYXlJbk1pbGxpc2Vjb25kc30gdXAgdG9cbiAqIHtAbGluayBFeHRlcm5hbExpbmtSZXRyeU9wdGlvbnMubWF4RGVsYXlJbk1pbGxpc2Vjb25kc30sIGlzIGppdHRlcmVkIGludG8gaXRzIHVwcGVyIGhhbGYsIGFuZCBpcyBuZXZlciBzaG9ydGVyIHRoYW4gdGhlXG4gKiBzZXJ2ZXIncyBgUmV0cnktQWZ0ZXJgLiBUaGUgd2FpdHMgb2Ygb25lIFVSTCBuZXZlciBhZGQgdXAgdG8gbW9yZSB0aGFuXG4gKiB7QGxpbmsgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zLnRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHN9OyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGF0dGVtcHQgaXMgZmluYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBmaXJzdCB3YWl0LiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX0lOSVRJQUxfREVMQVlfSU5fTUlMTElTRUNPTkRTfS5cbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9uZ2VzdCBzaW5nbGUgd2FpdCB0aGUgYmFja29mZiBncm93cyB0by4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVhURVJOQUxfTElOS19SRVRSWV9NQVhfREVMQVlfSU5fTUlMTElTRUNPTkRTfS5cbiAgICovXG4gIHJlYWRvbmx5IG1heERlbGF5SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBudW1iZXIgaW4gYFswLCAxKWAgZm9yIHRoZSBqaXR0ZXIuIERlZmF1bHRzIHRvIGBNYXRoLnJhbmRvbWAuXG4gICAqL1xuICByZWFkb25seSByYW5kb20/OiAoKSA9PiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdhaXRzIHRoZSBnaXZlbiB0aW1lLiBEZWZhdWx0cyB0byBhIGBzZXRUaW1lb3V0YC5cbiAgICovXG4gIHJlYWRvbmx5IHNsZWVwPzogKG1pbGxpc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9zdCBvbmUgVVJMIG1heSBzcGVuZCB3YWl0aW5nIGJldHdlZW4gaXRzIGF0dGVtcHRzLiBEZWZhdWx0cyB0b1xuICAgKiB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX1RPVEFMX0JVREdFVF9JTl9NSUxMSVNFQ09ORFN9LlxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWxCdWRnZXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaWxlc3lzdGVtIGFjY2VzcyB0aGUgbGluayBjaGVja2VyIG5lZWRzLCBpbmplY3RlZCBzbyB0aGUgcHVyZSBkZWNpc2lvbiBsb2dpYyBjYW4gYmUgdGVzdGVkXG4gKiBhZ2FpbnN0IGFuIGluLW1lbW9yeSBzdHViIGluc3RlYWQgb2YgYSByZWFsIGJ1aWxkIG91dHB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rQ2hlY2tGaWxlU3lzdGVtIHtcbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBlbGVtZW50IGlkcyBwcmVzZW50IG9uIGFuIGFscmVhZHktcmVzb2x2ZWQgcGFnZS5cbiAgICpcbiAgICogQHBhcmFtIHBhZ2VLZXkgLSBUaGUga2V5IHJldHVybmVkIGJ5IHtAbGluayBMaW5rQ2hlY2tGaWxlU3lzdGVtLnJlc29sdmVFeGlzdGluZ1BhZ2V9LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGVsZW1lbnQgaWRzIG9uIHRoYXQgcGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRJZHM6IChwYWdlS2V5OiBzdHJpbmcpID0+IFNldDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBvdXRwdXQtcmVsYXRpdmUgcGF0aCB0byBhbiBleGlzdGluZyBwYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gb3V0cHV0UmVsYXRpdmVQYXRoIC0gVGhlIGRlY29kZWQgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVpbGQtb3V0cHV0IHJvb3QuXG4gICAqIEByZXR1cm5zIEEgc3RhYmxlIGtleSAoZS5nLiB0aGUgcmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoKSBmb3IgdGhlIGV4aXN0aW5nIHBhZ2UsIG9yXG4gICAqICAgYG51bGxgIHdoZW4gbm90aGluZyBleGlzdHMgYXQgdGhhdCBwYXRoIG9yIHRoZSBwYXRoIGVzY2FwZXMgdGhlIGJ1aWxkLW91dHB1dCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZUV4aXN0aW5nUGFnZTogKG91dHB1dFJlbGF0aXZlUGF0aDogc3RyaW5nKSA9PiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHtAbGluayBDb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc09wdGlvbnMucGVySG9zdENvbmN1cnJlbmN5fS4gQSBkb2N1bWVudGF0aW9uIHNpdGUgbGlua3MgdGhvdXNhbmRzIG9mXG4gKiBwYWdlcyBvZiBpdHMgc2libGluZyBzaXRlcywgYWxsIG9uIG9uZSBob3N0LCBhbmQgR2l0SHViIFBhZ2VzIGFuc3dlcnMgYSBidXJzdCBvZiB0aGVtIHdpdGggYSBgNTAzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhURVJOQUxfTElOS19QRVJfSE9TVF9DT05DVVJSRU5DWSA9IDg7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9ucy5pbml0aWFsRGVsYXlJbk1pbGxpc2Vjb25kc30uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYVEVSTkFMX0xJTktfUkVUUllfSU5JVElBTF9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHtAbGluayBFeHRlcm5hbExpbmtSZXRyeU9wdGlvbnMubWF4RGVsYXlJbk1pbGxpc2Vjb25kc30uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYVEVSTkFMX0xJTktfUkVUUllfTUFYX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDE2XzAwMDtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB7QGxpbmsgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zLnRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHN9LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX1RPVEFMX0JVREdFVF9JTl9NSUxMSVNFQ09ORFMgPSA0NV8wMDA7XG5cbmNvbnN0IEhUVFBfUkVRVUVTVF9USU1FT1VUX1NUQVRVUyA9IDQwODtcbmNvbnN0IEhUVFBfVE9PX01BTllfUkVRVUVTVFNfU1RBVFVTID0gNDI5O1xuY29uc3QgSFRUUF9TRVJWRVJfRVJST1JfTUlOX1NUQVRVUyA9IDUwMDtcbmNvbnN0IE1JTExJU0VDT05EU19QRVJfU0VDT05EID0gMTAwMDtcbmNvbnN0IEpJVFRFUl9GTE9PUiA9IDAuNTtcbmNvbnN0IEJBQ0tPRkZfRkFDVE9SID0gMjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQcm9iZSB7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcbiAgcmVhZG9ubHkgcGFnZVVybDogc3RyaW5nO1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGRlZHVwbGljYXRlZCBleHRlcm5hbCBVUkxzIG92ZXIgdGhlIG5ldHdvcmsgdGhyb3VnaCBhIGJvdW5kZWQgY29uY3VycmVuY3kgcG9vbC5cbiAqXG4gKiBBIG5ldHdvcmsgZmFpbHVyZSwgYW4gSFRUUCBgNDA4YCwgYW4gSFRUUCBgNDI5YCBhbmQgYW4gSFRUUCBgNXh4YCBhcmUgcmV0cmllZCB3aXRoIGFuIGV4cG9uZW50aWFsLCBqaXR0ZXJlZCBiYWNrb2ZmIHRoYXQgaG9ub3JzXG4gKiBgUmV0cnktQWZ0ZXJgIChzZWUge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9uc30pOyBhbnkgb3RoZXIgc3RhdHVzLCBhIGA0MDRgIGluY2x1ZGVkLCBpcyBmaW5hbCBhdCBvbmNlLiBQcm9iZXMgb2ZcbiAqIG9uZSBob3N0IGFyZSBhbHNvIGNhcHBlZCBhdCB7QGxpbmsgQ29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3NPcHRpb25zLnBlckhvc3RDb25jdXJyZW5jeX0sIGFuZCBhIHByb2JlIG9mIGFub3RoZXIgaG9zdFxuICogaXMgc3RhcnRlZCB3aGlsZSBvbmUgaG9zdCBpcyBhdCBpdHMgY2FwLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRzIC0gVGhlIHVuaXF1ZSBleHRlcm5hbCBVUkwg4oaSIHJlZmVyZW5jaW5nIHBhZ2UgbWFwIGZyb20ge0BsaW5rIGNvbGxlY3RFeHRlcm5hbFRhcmdldHN9LlxuICogQHBhcmFtIGZldGNoVXJsU3RhdHVzIC0gSW5qZWN0ZWQgcHJvYmUgcmV0dXJuaW5nIHRoZSBIVFRQIHN0YXR1cyBmb3IgYSBVUkwgKGAwYCBmb3IgYSBuZXR3b3JrIGZhaWx1cmUpLCBvciBhblxuICogICB7QGxpbmsgRXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHR9IHRoYXQgYWxzbyBjYXJyaWVzIHRoZSBzZXJ2ZXIncyBgUmV0cnktQWZ0ZXJgLlxuICogQHBhcmFtIGNvbmN1cnJlbmN5IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGluLWZsaWdodCBwcm9iZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwZXItaG9zdCBjYXAgYW5kIHRoZSByZXRyeSBwb2xpY3kuXG4gKiBAcmV0dXJucyBFdmVyeSBleHRlcm5hbCBVUkwgdGhhdCBkaWQgbm90IHJldHVybiBIVFRQIGAyMDBgLCBpbiB0aGUgbWFwJ3MgaXRlcmF0aW9uIG9yZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3MoXG4gIHRhcmdldHM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4gIGZldGNoVXJsU3RhdHVzOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8RXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHQgfCBudW1iZXI+LFxuICBjb25jdXJyZW5jeTogbnVtYmVyLFxuICBvcHRpb25zOiBDb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxCcm9rZW5MaW5rW10+IHtcbiAgY29uc3QgcGVySG9zdENvbmN1cnJlbmN5ID0gTWF0aC5tYXgoMSwgb3B0aW9ucy5wZXJIb3N0Q29uY3VycmVuY3kgPz8gREVGQVVMVF9FWFRFUk5BTF9MSU5LX1BFUl9IT1NUX0NPTkNVUlJFTkNZKTtcbiAgY29uc3QgcGVuZGluZzogUGVuZGluZ1Byb2JlW10gPSBbLi4udGFyZ2V0c10ubWFwKChbdXJsLCBwYWdlVXJsXSwgaW5kZXgpID0+ICh7IGhvc3Q6IG5ldyBVUkwodXJsKS5ob3N0LCBpbmRleCwgcGFnZVVybCwgdXJsIH0pKTtcbiAgY29uc3QgcmVzdWx0czogKEJyb2tlbkxpbmsgfCBudWxsKVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogcGVuZGluZy5sZW5ndGggfSwgKCkgPT4gbnVsbCk7XG4gIGNvbnN0IGluRmxpZ2h0QnlIb3N0ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3Qgd2FpdGVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICBhc3luYyBmdW5jdGlvbiBydW5Xb3JrZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBwZW5kaW5nLmZpbmRJbmRleCgocHJvYmUpID0+IChpbkZsaWdodEJ5SG9zdC5nZXQocHJvYmUuaG9zdCkgPz8gMCkgPCBwZXJIb3N0Q29uY3VycmVuY3kpO1xuICAgICAgaWYgKHBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAvLyBFdmVyeSBwZW5kaW5nIFVSTCBpcyBvbiBhIGhvc3QgYXQgaXRzIGNhcCwgc28gYSBwcm9iZSBpcyBpbiBmbGlnaHQgdGhlcmUgYW5kIHdha2VzIHRoaXMgd29ya2VyIHdoZW4gaXQgZW5kcy5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmVQcm9taXNlKSA9PiB7XG4gICAgICAgICAgd2FpdGVycy5wdXNoKHJlc29sdmVQcm9taXNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbcHJvYmVdID0gcGVuZGluZy5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgICAgY29uc3QgeyBob3N0LCBpbmRleCwgcGFnZVVybCwgdXJsIH0gPSBlbnN1cmVOb25OdWxsYWJsZShwcm9iZSk7XG4gICAgICBpbkZsaWdodEJ5SG9zdC5zZXQoaG9zdCwgKGluRmxpZ2h0QnlIb3N0LmdldChob3N0KSA/PyAwKSArIDEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaHR0cFN0YXR1cyA9IGF3YWl0IHByb2JlV2l0aFJldHJ5KHVybCwgZmV0Y2hVcmxTdGF0dXMsIG9wdGlvbnMucmV0cnkgPz8ge30pO1xuICAgICAgICBpZiAoaHR0cFN0YXR1cyAhPT0gSFRUUF9PS19TVEFUVVMpIHtcbiAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHsgaHR0cFN0YXR1cywgcGFnZVVybCwgcmVhc29uOiAnZXh0ZXJuYWwtZXJyb3InLCB0YXJnZXRVcmw6IHVybCB9O1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpbkZsaWdodEJ5SG9zdC5zZXQoaG9zdCwgZW5zdXJlTm9uTnVsbGFibGUoaW5GbGlnaHRCeUhvc3QuZ2V0KGhvc3QpKSAtIDEpO1xuICAgICAgICBmb3IgKGNvbnN0IHdha2Ugb2Ygd2FpdGVycy5zcGxpY2UoMCkpIHtcbiAgICAgICAgICB3YWtlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrZXJDb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKGNvbmN1cnJlbmN5LCBwZW5kaW5nLmxlbmd0aCkpO1xuICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHsgbGVuZ3RoOiB3b3JrZXJDb3VudCB9LCAoKSA9PiBydW5Xb3JrZXIoKSkpO1xuXG4gIC8vIEluZGV4ZWQgYXNzaWdubWVudCBhYm92ZSBrZWVwcyBmYWlsdXJlcyBpbiB0aGUgbWFwJ3MgaXRlcmF0aW9uIG9yZGVyOyBkcm9wIHRoZSBzdWNjZXNzZnVsIGdhcHMuXG4gIHJldHVybiByZXN1bHRzLmZpbHRlcigoYnJva2VuTGluayk6IGJyb2tlbkxpbmsgaXMgQnJva2VuTGluayA9PiBicm9rZW5MaW5rICE9PSBudWxsKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBldmVyeSBpbnRlcm5hbCBsaW5rIGFjcm9zcyB0aGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBwYWdlcyB0aGF0IGRvZXMgbm90IHJlc29sdmUuXG4gKlxuICogRXh0ZXJuYWwgYW5kIG5vbi1IVFRQIGxpbmtzIGFyZSBpZ25vcmVkLiBFYWNoIGludGVybmFsIGxpbmsgbXVzdCByZXNvbHZlIHRvIGFuIGV4aXN0aW5nIHBhZ2UsXG4gKiBhbmQgZWFjaCBgI2ZyYWdtZW50YCBtdXN0IHJlc29sdmUgdG8gYW4gZXhpc3RpbmcgZWxlbWVudCBpZCBvbiB0aGUgdGFyZ2V0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHBhZ2VzIC0gVGhlIGJ1aWx0IGRvY3VtZW50YXRpb24gcGFnZXMgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0gZmlsZVN5c3RlbSAtIEluamVjdGVkIGFjY2VzcyB0byB0aGUgYnVpbGQgb3V0cHV0LlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgRXZlcnkgYnJva2VuIGludGVybmFsIGxpbmssIGluIHBhZ2UtdGhlbi1kb2N1bWVudCBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RCcm9rZW5MaW5rcyhwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSwgZmlsZVN5c3RlbTogTGlua0NoZWNrRmlsZVN5c3RlbSwgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IEJyb2tlbkxpbmtbXSB7XG4gIGNvbnN0IGJyb2tlbkxpbmtzOiBCcm9rZW5MaW5rW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICBjb25zdCBwYWdlVXJsID0gZ2V0UGFnZVVybChwYWdlLnJlbGF0aXZlUGF0aCwgc2l0ZUJhc2VVcmwpO1xuICAgIGZvciAoY29uc3QgcmF3TGluayBvZiBleHRyYWN0TGlua3MocGFnZS5odG1sKSkge1xuICAgICAgY29uc3QgdGFyZ2V0VXJsID0gbmV3IFVSTChyYXdMaW5rLCBwYWdlVXJsKTtcbiAgICAgIGlmICghaXNJbnRlcm5hbERvY1VybCh0YXJnZXRVcmwsIHNpdGVCYXNlVXJsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZUtleSA9IGZpbGVTeXN0ZW0ucmVzb2x2ZUV4aXN0aW5nUGFnZShnZXRPdXRwdXRSZWxhdGl2ZVBhdGgodGFyZ2V0VXJsLCBzaXRlQmFzZVVybCkpO1xuICAgICAgaWYgKHBhZ2VLZXkgPT09IG51bGwpIHtcbiAgICAgICAgYnJva2VuTGlua3MucHVzaCh7IHBhZ2VVcmwsIHJlYXNvbjogJ21pc3NpbmctcGFnZScsIHRhcmdldFVybDogdGFyZ2V0VXJsLmhyZWYgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcmFnbWVudCA9IHRhcmdldFVybC5oYXNoLnNsaWNlKDEpO1xuICAgICAgaWYgKGZyYWdtZW50Lmxlbmd0aCA+IDAgJiYgIWZpbGVTeXN0ZW0ucmVhZElkcyhwYWdlS2V5KS5oYXMoZnJhZ21lbnQpKSB7XG4gICAgICAgIGJyb2tlbkxpbmtzLnB1c2goeyBwYWdlVXJsLCByZWFzb246ICdtaXNzaW5nLWZyYWdtZW50JywgdGFyZ2V0VXJsOiB0YXJnZXRVcmwuaHJlZiB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnJva2VuTGlua3M7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgZXZlcnkgdW5pcXVlIGV4dGVybmFsIFVSTCByZWZlcmVuY2VkIGFjcm9zcyB0aGUgYnVpbHQgcGFnZXMsIGRlZHVwbGljYXRlZC5cbiAqXG4gKiBPbmx5IEhUVFAoUykgbGlua3MgdGhhdCBhcmUgbm90IHtAbGluayBpc0ludGVybmFsRG9jVXJsfSBhcmUgcmV0dXJuZWQuIEVhY2ggdW5pcXVlIFVSTCBtYXBzIHRvXG4gKiB0aGUgZmlyc3QgcGFnZSB0aGF0IHJlZmVyZW5jZWQgaXQsIHNvIGEgbGF0ZXIgZmFpbHVyZSBjYW4gYmUgcmVwb3J0ZWQgd2l0aCBhIGNvbmNyZXRlIGV4YW1wbGVcbiAqIHBhZ2UgZXZlbiB0aG91Z2ggdGhlIFVSTCBpcyBmZXRjaGVkIG9ubHkgb25jZS5cbiAqXG4gKiBAcGFyYW0gcGFnZXMgLSBUaGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBwYWdlcyB0byBzY2FuLlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgQSBtYXAgZnJvbSBlYWNoIHVuaXF1ZSBleHRlcm5hbCBVUkwgdG8gb25lIHJlZmVyZW5jaW5nIHBhZ2UgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEV4dGVybmFsVGFyZ2V0cyhwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSwgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCB0YXJnZXRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICBjb25zdCBwYWdlVXJsID0gZ2V0UGFnZVVybChwYWdlLnJlbGF0aXZlUGF0aCwgc2l0ZUJhc2VVcmwpO1xuICAgIGZvciAoY29uc3QgcmF3TGluayBvZiBleHRyYWN0TGlua3MocGFnZS5odG1sKSkge1xuICAgICAgY29uc3QgdGFyZ2V0VXJsID0gbmV3IFVSTChyYXdMaW5rLCBwYWdlVXJsKTtcbiAgICAgIGlmICgodGFyZ2V0VXJsLnByb3RvY29sICE9PSAnaHR0cDonICYmIHRhcmdldFVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHx8IGlzSW50ZXJuYWxEb2NVcmwodGFyZ2V0VXJsLCBzaXRlQmFzZVVybCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gYCR7dGFyZ2V0VXJsLm9yaWdpbn0ke3RhcmdldFVybC5wYXRobmFtZX0ke3RhcmdldFVybC5zZWFyY2h9YDtcbiAgICAgIGlmICghdGFyZ2V0cy5oYXMoZXh0ZXJuYWxVcmwpKSB7XG4gICAgICAgIHRhcmdldHMuc2V0KGV4dGVybmFsVXJsLCBwYWdlVXJsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0cztcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdmFsdWVzIG9mIGV2ZXJ5IGBpZGAgYXR0cmlidXRlIGluIGEgY2h1bmsgb2YgSFRNTC5cbiAqXG4gKiBAcGFyYW0gaHRtbCAtIFRoZSBIVE1MIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgc2V0IG9mIGVsZW1lbnQgaWRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdElkcyhodG1sOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgU2V0KFsuLi5odG1sLm1hdGNoQWxsKElEX0FUVFJJQlVURV9SRUdFWCldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd2YWx1ZScpKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHZhbHVlcyBvZiBldmVyeSBgaHJlZmAvYHNyY2AgYXR0cmlidXRlIGluIGEgY2h1bmsgb2YgSFRNTC5cbiAqXG4gKiBAcGFyYW0gaHRtbCAtIFRoZSBIVE1MIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgcmF3IGxpbmsgdmFsdWVzLCBpbiBkb2N1bWVudCBvcmRlciAoZHVwbGljYXRlcyBwcmVzZXJ2ZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExpbmtzKGh0bWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5odG1sLm1hdGNoQWxsKExJTktfQVRUUklCVVRFX1JFR0VYKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3ZhbHVlJykpO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYnJva2VuIGxpbmtzIGludG8gYSBodW1hbi1yZWFkYWJsZSBtdWx0aS1saW5lIHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0gYnJva2VuTGlua3MgLSBUaGUgYnJva2VuIGxpbmtzIHRvIGRlc2NyaWJlLlxuICogQHJldHVybnMgT25lIGxpbmUgcGVyIGJyb2tlbiBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QnJva2VuTGlua3MoYnJva2VuTGlua3M6IEJyb2tlbkxpbmtbXSk6IHN0cmluZyB7XG4gIHJldHVybiBicm9rZW5MaW5rc1xuICAgIC5tYXAoKGJyb2tlbkxpbmspID0+IHtcbiAgICAgIHN3aXRjaCAoYnJva2VuTGluay5yZWFzb24pIHtcbiAgICAgICAgY2FzZSAnZXh0ZXJuYWwtZXJyb3InOiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Jyb2tlbkxpbmsucGFnZVVybH0gbGlua3MgdG8gZXh0ZXJuYWwgVVJMICR7YnJva2VuTGluay50YXJnZXRVcmx9IHRoYXQgcmV0dXJuZWQgJHtkZXNjcmliZUh0dHBTdGF0dXMoYnJva2VuTGluay5odHRwU3RhdHVzKX0uYDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtaXNzaW5nLWZyYWdtZW50Jzoge1xuICAgICAgICAgIHJldHVybiBgJHticm9rZW5MaW5rLnBhZ2VVcmx9IGxpbmtzIHRvIG1pc3NpbmcgZnJhZ21lbnQgJHticm9rZW5MaW5rLnRhcmdldFVybH0uYDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtaXNzaW5nLXBhZ2UnOiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Jyb2tlbkxpbmsucGFnZVVybH0gbGlua3MgdG8gbWlzc2luZyBwYWdlICR7YnJva2VuTGluay50YXJnZXRVcmx9LmA7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJldHVybiBhc3NlcnROZXZlcihicm9rZW5MaW5rLnJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIC5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYnVpbGQtb3V0cHV0LXJlbGF0aXZlIHBhdGggZm9yIGFuIGludGVybmFsIGRvY3VtZW50YXRpb24gVVJMLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRVcmwgLSBUaGUgcmVzb2x2ZWQgYWJzb2x1dGUgbGluayBVUkwgKG11c3QgYmUge0BsaW5rIGlzSW50ZXJuYWxEb2NVcmx9KS5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvZGVkIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJ1aWxkLW91dHB1dCByb290LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0UmVsYXRpdmVQYXRoKHRhcmdldFVybDogVVJMLCBzaXRlQmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IG5ldyBVUkwoc2l0ZUJhc2VVcmwpO1xuICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHRhcmdldFVybC5wYXRobmFtZS5zbGljZShiYXNlLnBhdGhuYW1lLmxlbmd0aCkpO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBhYnNvbHV0ZSBVUkwgYSBidWlsdCBwYWdlIGlzIHNlcnZlZCBhdC5cbiAqXG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIC0gVGhlIHBhZ2UncyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBidWlsZC1vdXRwdXQgcm9vdC5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIFRoZSBwYWdlJ3MgYWJzb2x1dGUgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZVVybChyZWxhdGl2ZVBhdGg6IHN0cmluZywgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSByZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gIGNvbnN0IHVybFBhdGggPSBub3JtYWxpemVkID09PSAnaW5kZXguaHRtbCcgPyAnJyA6IG5vcm1hbGl6ZWQucmVwbGFjZSgvaW5kZXhcXC5odG1sJC91LCAnJyk7XG4gIHJldHVybiBuZXcgVVJMKHVybFBhdGgsIHNpdGVCYXNlVXJsKS5ocmVmO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHJlc29sdmVkIGxpbmsgcG9pbnRzIGF0IGEgcGFnZSBob3N0ZWQgYnkgdGhpcyBkb2N1bWVudGF0aW9uIHNpdGUuXG4gKlxuICogQHBhcmFtIHRhcmdldFVybCAtIFRoZSByZXNvbHZlZCBhYnNvbHV0ZSBsaW5rIFVSTC5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBsaW5rIGlzIHNhbWUtb3JpZ2luIGFuZCB1bmRlciB0aGUgc2l0ZSBiYXNlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVybmFsRG9jVXJsKHRhcmdldFVybDogVVJMLCBzaXRlQmFzZVVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGJhc2UgPSBuZXcgVVJMKHNpdGVCYXNlVXJsKTtcbiAgcmV0dXJuIHRhcmdldFVybC5vcmlnaW4gPT09IGJhc2Uub3JpZ2luICYmIHRhcmdldFVybC5wYXRobmFtZS5zdGFydHNXaXRoKGJhc2UucGF0aG5hbWUpO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuIEhUVFAgYFJldHJ5LUFmdGVyYCBoZWFkZXIsIHdoaWNoIGlzIGVpdGhlciBhIG51bWJlciBvZiBzZWNvbmRzIG9yIGFuIEhUVFAgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gaGVhZGVyVmFsdWUgLSBUaGUgaGVhZGVyJ3MgdmFsdWUsIG9yIGBudWxsYCB3aGVuIHRoZSByZXNwb25zZSBoYXMgbm9uZS5cbiAqIEBwYXJhbSBub3dJbk1pbGxpc2Vjb25kcyAtIFRoZSBjdXJyZW50IHRpbWUsIGFnYWluc3Qgd2hpY2ggYSBkYXRlIGlzIG1lYXN1cmVkLlxuICogQHJldHVybnMgSG93IGxvbmcgdG8gd2FpdCwgbmV2ZXIgbmVnYXRpdmUsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIGhlYWRlciBpcyBhYnNlbnQgb3IgdW5yZWFkYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlckluTWlsbGlzZWNvbmRzKGhlYWRlclZhbHVlOiBudWxsIHwgc3RyaW5nLCBub3dJbk1pbGxpc2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdHJpbW1lZCA9IGhlYWRlclZhbHVlPy50cmltKCkgPz8gJyc7XG4gIGlmICh0cmltbWVkID09PSAnJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoL15cXGQrJC91LnRlc3QodHJpbW1lZCkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHRyaW1tZWQpICogTUlMTElTRUNPTkRTX1BFUl9TRUNPTkQ7XG4gIH1cblxuICBjb25zdCBkYXRlSW5NaWxsaXNlY29uZHMgPSBEYXRlLnBhcnNlKHRyaW1tZWQpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGVJbk1pbGxpc2Vjb25kcykgPyB1bmRlZmluZWQgOiBNYXRoLm1heCgwLCBkYXRlSW5NaWxsaXNlY29uZHMgLSBub3dJbk1pbGxpc2Vjb25kcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYW4gb3V0cHV0LXJlbGF0aXZlIHBhdGggdG8gYW4gYWJzb2x1dGUgcGF0aCBpbnNpZGUgdGhlIGJ1aWxkLW91dHB1dCByb290LCByZWplY3RpbmdcbiAqIHBhdGhzIHRoYXQgZXNjYXBlIGl0IHZpYSBgLi5gIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSBvdXRwdXRSb290UGF0aCAtIFRoZSBhYnNvbHV0ZSBidWlsZC1vdXRwdXQgcm9vdCBwYXRoLlxuICogQHBhcmFtIG91dHB1dFJlbGF0aXZlUGF0aCAtIFRoZSBkZWNvZGVkIG91dHB1dC1yZWxhdGl2ZSBwYXRoLlxuICogQHJldHVybnMgVGhlIGpvaW5lZCBwYXRoIHdoZW4gaXQgc3RheXMgd2l0aGluIHRoZSByb290LCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdpdGhpblJvb3Qob3V0cHV0Um9vdFBhdGg6IHN0cmluZywgb3V0cHV0UmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3Qgcm9vdCA9IG5vcm1hbGl6ZShvdXRwdXRSb290UGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKSkucmVwbGFjZSgvXFwvJC91LCAnJyk7XG4gIGxldCBqb2luZWQgPSBub3JtYWxpemUoYCR7cm9vdH0vJHtvdXRwdXRSZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnXFxcXCcsICcvJyl9YCk7XG4gIGlmIChqb2luZWQubGVuZ3RoID4gMSkge1xuICAgIGpvaW5lZCA9IGpvaW5lZC5yZXBsYWNlKC9cXC8kL3UsICcnKTtcbiAgfVxuXG4gIHJldHVybiBqb2luZWQgIT09IHJvb3QgJiYgIWpvaW5lZC5zdGFydHNXaXRoKGAke3Jvb3R9L2ApID8gbnVsbCA6IGpvaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVIdHRwU3RhdHVzKGh0dHBTdGF0dXM6IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBodHRwU3RhdHVzID09PSB1bmRlZmluZWQgfHwgaHR0cFN0YXR1cyA9PT0gTkVUV09SS19GQUlMVVJFX1NUQVRVUyA/ICdhIG5ldHdvcmsgZmFpbHVyZScgOiBgSFRUUCAke1N0cmluZyhodHRwU3RhdHVzKX1gO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudFN0YXR1cyhzdGF0dXM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhdHVzID09PSBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTIHx8IHN0YXR1cyA9PT0gSFRUUF9SRVFVRVNUX1RJTUVPVVRfU1RBVFVTIHx8IHN0YXR1cyA9PT0gSFRUUF9UT09fTUFOWV9SRVFVRVNUU19TVEFUVVMgfHwgc3RhdHVzID49IEhUVFBfU0VSVkVSX0VSUk9SX01JTl9TVEFUVVM7XG59XG5cbi8qXG4gKiBBIHNpdGUgbGlua2luZyBpdHMgc2libGluZyBzaXRlcyBwcm9iZXMgdGhvdXNhbmRzIG9mIFVSTHMgb24gb25lIGhvc3QsIGFuZCBpbiBDSSBHaXRIdWIgUGFnZXMgYW5zd2VycyBhIGZldyBvZiB0aGVtXG4gKiB3aXRoIGEgNTAzLCBvciBkcm9wcyB0aGUgY29ubmVjdGlvbiwgd2hpbGUgdGhlIHBhZ2Ugc2VydmVzIDIwMCBhIG1vbWVudCBsYXRlci4gVGhyZWUgYXR0ZW1wdHMgYSBzZWNvbmQgYXBhcnQgZ2F2ZSB1cFxuICogdG9vIHNvb24gZm9yIHRoYXQgKDIwMjYtMTAtMTYpLCBzbyB0aGUgd2FpdCBncm93cyB1bnRpbCB0aGUgYnVkZ2V0IGlzIHNwZW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9iZVdpdGhSZXRyeShcbiAgdXJsOiBzdHJpbmcsXG4gIGZldGNoVXJsU3RhdHVzOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8RXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHQgfCBudW1iZXI+LFxuICByZXRyeTogRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBpbml0aWFsRGVsYXlJbk1pbGxpc2Vjb25kcyA9IHJldHJ5LmluaXRpYWxEZWxheUluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfRVhURVJOQUxfTElOS19SRVRSWV9JTklUSUFMX0RFTEFZX0lOX01JTExJU0VDT05EUztcbiAgY29uc3QgbWF4RGVsYXlJbk1pbGxpc2Vjb25kcyA9IHJldHJ5Lm1heERlbGF5SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX01BWF9ERUxBWV9JTl9NSUxMSVNFQ09ORFM7XG4gIGNvbnN0IHRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHMgPSByZXRyeS50b3RhbEJ1ZGdldEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfRVhURVJOQUxfTElOS19SRVRSWV9UT1RBTF9CVURHRVRfSU5fTUlMTElTRUNPTkRTO1xuICBjb25zdCByYW5kb20gPSByZXRyeS5yYW5kb20gPz8gTWF0aC5yYW5kb207XG4gIGNvbnN0IHNsZWVwID0gcmV0cnkuc2xlZXAgPz8gc2xlZXBXaXRoVGltZW91dDtcblxuICBsZXQgd2FpdGVkSW5NaWxsaXNlY29uZHMgPSAwO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDs7IGF0dGVtcHQrKykge1xuICAgIGNvbnN0IHByb2JlUmVzdWx0ID0gYXdhaXQgZmV0Y2hVcmxTdGF0dXModXJsKTtcbiAgICBjb25zdCB7IHJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcywgc3RhdHVzIH0gPSB0eXBlb2YgcHJvYmVSZXN1bHQgPT09ICdudW1iZXInID8geyByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM6IHVuZGVmaW5lZCwgc3RhdHVzOiBwcm9iZVJlc3VsdCB9IDogcHJvYmVSZXN1bHQ7XG4gICAgY29uc3QgcmVtYWluaW5nSW5NaWxsaXNlY29uZHMgPSB0b3RhbEJ1ZGdldEluTWlsbGlzZWNvbmRzIC0gd2FpdGVkSW5NaWxsaXNlY29uZHM7XG4gICAgaWYgKCFpc1RyYW5zaWVudFN0YXR1cyhzdGF0dXMpIHx8IHJlbWFpbmluZ0luTWlsbGlzZWNvbmRzIDw9IDApIHtcbiAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgfVxuXG4gICAgY29uc3QgYmFja29mZkluTWlsbGlzZWNvbmRzID0gTWF0aC5taW4obWF4RGVsYXlJbk1pbGxpc2Vjb25kcywgaW5pdGlhbERlbGF5SW5NaWxsaXNlY29uZHMgKiBCQUNLT0ZGX0ZBQ1RPUiAqKiBhdHRlbXB0KTtcbiAgICBjb25zdCBqaXR0ZXJlZEluTWlsbGlzZWNvbmRzID0gYmFja29mZkluTWlsbGlzZWNvbmRzICogKEpJVFRFUl9GTE9PUiArICgxIC0gSklUVEVSX0ZMT09SKSAqIHJhbmRvbSgpKTtcbiAgICBjb25zdCBkZWxheUluTWlsbGlzZWNvbmRzID0gTWF0aC5taW4ocmVtYWluaW5nSW5NaWxsaXNlY29uZHMsIE1hdGgubWF4KGppdHRlcmVkSW5NaWxsaXNlY29uZHMsIHJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcyA/PyAwKSk7XG4gICAgYXdhaXQgc2xlZXAoZGVsYXlJbk1pbGxpc2Vjb25kcyk7XG4gICAgd2FpdGVkSW5NaWxsaXNlY29uZHMgKz0gZGVsYXlJbk1pbGxpc2Vjb25kcztcbiAgfVxufVxuXG5mdW5jdGlvbiBzbGVlcFdpdGhUaW1lb3V0KG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZVByb21pc2UpID0+IHtcbiAgICBnbG9iYWxUaGlzLnNldFRpbWVvdXQocmVzb2x2ZVByb21pc2UsIG1pbGxpc2Vjb25kcyk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMsOEJBQThCO0FBQ3ZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxpQkFBaUI7QUFFMUIsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxpQkFBaUI7QUFNaEIsTUFBTSx5QkFBeUI7QUF3SS9CLE1BQU0sNkNBQTZDO0FBS25ELE1BQU0sNERBQTREO0FBS2xFLE1BQU0sd0RBQXdEO0FBSzlELE1BQU0sMkRBQTJEO0FBRXhFLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0sZUFBZTtBQUNyQixNQUFNLGlCQUFpQjtBQXdCdkIsZUFBc0IsMkJBQ3BCLFNBQ0EsZ0JBQ0EsYUFDQSxVQUE2QyxDQUFD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
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvbGluay1jaGVjay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGlvbiBvZiB0aGUgbGlua3MgZW1pdHRlZCBieSB0aGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBIVE1MLlxuICpcbiAqIEludGVybmFsIChzYW1lLXNpdGUpIGxpbmtzIGFyZSB2YWxpZGF0ZWQgb2ZmbGluZTogZXZlcnkgYGhyZWZgL2BzcmNgIG11c3QgcmVzb2x2ZSB0byBhIHJlYWxcbiAqIGZpbGUgaW4gdGhlIGJ1aWxkIG91dHB1dCwgYW5kIGV2ZXJ5IGAjZnJhZ21lbnRgIG11c3QgcmVzb2x2ZSB0byBhIHJlYWwgZWxlbWVudCBpZCBvbiB0aGVcbiAqIHRhcmdldCBwYWdlLlxuICpcbiAqIEV4dGVybmFsIGxpbmtzIGNhbiBvbmx5IGJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLCBzbyB0aG9zZSByZXF1ZXN0cyBhcmUgaGVhdmlseVxuICogZGVkdXBsaWNhdGVkIOKAlCBlYWNoIHVuaXF1ZSBleHRlcm5hbCBVUkwgaXMgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcmVnYXJkbGVzcyBvZiBob3cgbWFueSBvZiB0aGVcbiAqIHRob3VzYW5kcyBvZiBnZW5lcmF0ZWQgcGFnZXMgcmVmZXJlbmNlIGl0IOKAlCBhbmQgcnVuIHRocm91Z2ggYSBib3VuZGVkIGNvbmN1cnJlbmN5IHBvb2wuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7XG4gIGFzc2VydE5ldmVyLFxuICBlbnN1cmVOb25OdWxsYWJsZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSAnbm9kZTpwYXRoL3Bvc2l4JztcblxuY29uc3QgTElOS19BVFRSSUJVVEVfUkVHRVggPSAvXFxiKD86aHJlZnxzcmMpPSg/PHF1b3RlPlsnXCJdKSg/PHZhbHVlPi4qPylcXGs8cXVvdGU+L2dpdTtcbmNvbnN0IElEX0FUVFJJQlVURV9SRUdFWCA9IC9cXGJpZD0oPzxxdW90ZT5bJ1wiXSkoPzx2YWx1ZT4uKj8pXFxrPHF1b3RlPi9naXU7XG5jb25zdCBIVFRQX09LX1NUQVRVUyA9IDIwMDtcblxuLyoqXG4gKiBUaGUge0BsaW5rIEJyb2tlbkxpbmsuaHR0cFN0YXR1c30gc2VudGluZWwgZm9yIGEgbmV0d29yay1sZXZlbCBmYWlsdXJlICh0aW1lb3V0LCBETlMsXG4gKiBjb25uZWN0aW9uIHJlZnVzZWQpIHdoZXJlIG5vIEhUVFAgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlxuICovXG5leHBvcnQgY29uc3QgTkVUV09SS19GQUlMVVJFX1NUQVRVUyA9IDA7XG5cbi8qKlxuICogQSBzaW5nbGUgbGluayB0aGF0IGRvZXMgbm90IHJlc29sdmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJva2VuTGluayB7XG4gIC8qKlxuICAgKiBUaGUgSFRUUCBzdGF0dXMgcmV0dXJuZWQgYnkgYW4gZXh0ZXJuYWwgbGluaywgd2hlbiB7QGxpbmsgQnJva2VuTGluay5yZWFzb259IGlzXG4gICAqIGBleHRlcm5hbC1lcnJvcmAuIGAwYCBkZW5vdGVzIGEgbmV0d29yay1sZXZlbCBmYWlsdXJlICh0aW1lb3V0LCBETlMsIGNvbm5lY3Rpb24gcmVmdXNlZCkuXG4gICAqL1xuICByZWFkb25seSBodHRwU3RhdHVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgdGhlIGJyb2tlbiBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFnZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaHkgdGhlIGxpbmsgaXMgY29uc2lkZXJlZCBicm9rZW4uXG4gICAqL1xuICByZWFkb25seSByZWFzb246ICdleHRlcm5hbC1lcnJvcicgfCAnbWlzc2luZy1mcmFnbWVudCcgfCAnbWlzc2luZy1wYWdlJztcblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGFic29sdXRlIFVSTCB0aGUgbGluayBwb2ludHMgYXQuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHByb2JlcyBhZ2FpbnN0IG9uZSBob3N0LiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1BFUl9IT1NUX0NPTkNVUlJFTkNZfS5cbiAgICovXG4gIHJlYWRvbmx5IHBlckhvc3RDb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IGEgdHJhbnNpZW50IGZhaWx1cmUgaXMgcmV0cmllZC5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5PzogRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGJ1aWx0IGRvY3VtZW50YXRpb24gcGFnZSB0byB2YWxpZGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudGF0aW9uUGFnZSB7XG4gIC8qKlxuICAgKiBUaGUgcGFnZSdzIHJlbmRlcmVkIEhUTUwuXG4gICAqL1xuICByZWFkb25seSBodG1sOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYWdlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVpbGQtb3V0cHV0IHJvb3QsIGUuZy4gYGFwaS9mb28vaW5kZXguaHRtbGAuXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGF0IG9uZSBwcm9iZSBvZiBhbiBleHRlcm5hbCBVUkwgbGVhcm5lZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbExpbmtQcm9iZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgc2VydmVyIGFza2VkIHRoZSBjbGllbnQgdG8gd2FpdCBiZWZvcmUgYXNraW5nIGFnYWluIChpdHMgYFJldHJ5LUFmdGVyYCBoZWFkZXIpLCB3aGVuIGl0IHNhaWQuXG4gICAqL1xuICByZWFkb25seSByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIHN0YXR1cywgb3Ige0BsaW5rIE5FVFdPUktfRkFJTFVSRV9TVEFUVVN9IHdoZW4gbm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXI7XG59XG5cbi8qKlxuICogSG93IHtAbGluayBjb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc30gcmV0cmllcyBhIHRyYW5zaWVudCBmYWlsdXJlOiBhIG5ldHdvcmsgZmFpbHVyZSwgYW4gSFRUUCBgNDA4YCwgYW4gSFRUUCBgNDI5YCBvciBhbiBIVFRQIGA1eHhgLlxuICpcbiAqIEVhY2ggd2FpdCBkb3VibGVzIGZyb20ge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9ucy5pbml0aWFsRGVsYXlJbk1pbGxpc2Vjb25kc30gdXAgdG9cbiAqIHtAbGluayBFeHRlcm5hbExpbmtSZXRyeU9wdGlvbnMubWF4RGVsYXlJbk1pbGxpc2Vjb25kc30sIGlzIGppdHRlcmVkIGludG8gaXRzIHVwcGVyIGhhbGYsIGFuZCBpcyBuZXZlciBzaG9ydGVyIHRoYW4gdGhlXG4gKiBzZXJ2ZXIncyBgUmV0cnktQWZ0ZXJgLiBUaGUgd2FpdHMgb2Ygb25lIFVSTCBuZXZlciBhZGQgdXAgdG8gbW9yZSB0aGFuXG4gKiB7QGxpbmsgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zLnRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHN9OyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGF0dGVtcHQgaXMgZmluYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBmaXJzdCB3YWl0LiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX0lOSVRJQUxfREVMQVlfSU5fTUlMTElTRUNPTkRTfS5cbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9uZ2VzdCBzaW5nbGUgd2FpdCB0aGUgYmFja29mZiBncm93cyB0by4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVhURVJOQUxfTElOS19SRVRSWV9NQVhfREVMQVlfSU5fTUlMTElTRUNPTkRTfS5cbiAgICovXG4gIHJlYWRvbmx5IG1heERlbGF5SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBudW1iZXIgaW4gYFswLCAxKWAgZm9yIHRoZSBqaXR0ZXIuIERlZmF1bHRzIHRvIGBNYXRoLnJhbmRvbWAuXG4gICAqL1xuICByZWFkb25seSByYW5kb20/OiAoKSA9PiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdhaXRzIHRoZSBnaXZlbiB0aW1lLiBEZWZhdWx0cyB0byBhIGBzZXRUaW1lb3V0YC5cbiAgICovXG4gIHJlYWRvbmx5IHNsZWVwPzogKG1pbGxpc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9zdCBvbmUgVVJMIG1heSBzcGVuZCB3YWl0aW5nIGJldHdlZW4gaXRzIGF0dGVtcHRzLiBEZWZhdWx0cyB0b1xuICAgKiB7QGxpbmsgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX1RPVEFMX0JVREdFVF9JTl9NSUxMSVNFQ09ORFN9LlxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWxCdWRnZXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaWxlc3lzdGVtIGFjY2VzcyB0aGUgbGluayBjaGVja2VyIG5lZWRzLCBpbmplY3RlZCBzbyB0aGUgcHVyZSBkZWNpc2lvbiBsb2dpYyBjYW4gYmUgdGVzdGVkXG4gKiBhZ2FpbnN0IGFuIGluLW1lbW9yeSBzdHViIGluc3RlYWQgb2YgYSByZWFsIGJ1aWxkIG91dHB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rQ2hlY2tGaWxlU3lzdGVtIHtcbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBlbGVtZW50IGlkcyBwcmVzZW50IG9uIGFuIGFscmVhZHktcmVzb2x2ZWQgcGFnZS5cbiAgICpcbiAgICogQHBhcmFtIHBhZ2VLZXkgLSBUaGUga2V5IHJldHVybmVkIGJ5IHtAbGluayBMaW5rQ2hlY2tGaWxlU3lzdGVtLnJlc29sdmVFeGlzdGluZ1BhZ2V9LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGVsZW1lbnQgaWRzIG9uIHRoYXQgcGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRJZHM6IChwYWdlS2V5OiBzdHJpbmcpID0+IFNldDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBvdXRwdXQtcmVsYXRpdmUgcGF0aCB0byBhbiBleGlzdGluZyBwYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gb3V0cHV0UmVsYXRpdmVQYXRoIC0gVGhlIGRlY29kZWQgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVpbGQtb3V0cHV0IHJvb3QuXG4gICAqIEByZXR1cm5zIEEgc3RhYmxlIGtleSAoZS5nLiB0aGUgcmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoKSBmb3IgdGhlIGV4aXN0aW5nIHBhZ2UsIG9yXG4gICAqICAgYG51bGxgIHdoZW4gbm90aGluZyBleGlzdHMgYXQgdGhhdCBwYXRoIG9yIHRoZSBwYXRoIGVzY2FwZXMgdGhlIGJ1aWxkLW91dHB1dCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZUV4aXN0aW5nUGFnZTogKG91dHB1dFJlbGF0aXZlUGF0aDogc3RyaW5nKSA9PiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHtAbGluayBDb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc09wdGlvbnMucGVySG9zdENvbmN1cnJlbmN5fS4gQSBkb2N1bWVudGF0aW9uIHNpdGUgbGlua3MgdGhvdXNhbmRzIG9mXG4gKiBwYWdlcyBvZiBpdHMgc2libGluZyBzaXRlcywgYWxsIG9uIG9uZSBob3N0LCBhbmQgR2l0SHViIFBhZ2VzIGFuc3dlcnMgYSBidXJzdCBvZiB0aGVtIHdpdGggYSBgNTAzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhURVJOQUxfTElOS19QRVJfSE9TVF9DT05DVVJSRU5DWSA9IDg7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9ucy5pbml0aWFsRGVsYXlJbk1pbGxpc2Vjb25kc30uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYVEVSTkFMX0xJTktfUkVUUllfSU5JVElBTF9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHtAbGluayBFeHRlcm5hbExpbmtSZXRyeU9wdGlvbnMubWF4RGVsYXlJbk1pbGxpc2Vjb25kc30uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYVEVSTkFMX0xJTktfUkVUUllfTUFYX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDE2XzAwMDtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB7QGxpbmsgRXh0ZXJuYWxMaW5rUmV0cnlPcHRpb25zLnRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHN9LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX1RPVEFMX0JVREdFVF9JTl9NSUxMSVNFQ09ORFMgPSA0NV8wMDA7XG5cbmNvbnN0IEhUVFBfUkVRVUVTVF9USU1FT1VUX1NUQVRVUyA9IDQwODtcbmNvbnN0IEhUVFBfVE9PX01BTllfUkVRVUVTVFNfU1RBVFVTID0gNDI5O1xuY29uc3QgSFRUUF9TRVJWRVJfRVJST1JfTUlOX1NUQVRVUyA9IDUwMDtcbmNvbnN0IE1JTExJU0VDT05EU19QRVJfU0VDT05EID0gMTAwMDtcbmNvbnN0IEpJVFRFUl9GTE9PUiA9IDAuNTtcbmNvbnN0IEJBQ0tPRkZfRkFDVE9SID0gMjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQcm9iZSB7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcbiAgcmVhZG9ubHkgcGFnZVVybDogc3RyaW5nO1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGRlZHVwbGljYXRlZCBleHRlcm5hbCBVUkxzIG92ZXIgdGhlIG5ldHdvcmsgdGhyb3VnaCBhIGJvdW5kZWQgY29uY3VycmVuY3kgcG9vbC5cbiAqXG4gKiBBIG5ldHdvcmsgZmFpbHVyZSwgYW4gSFRUUCBgNDA4YCwgYW4gSFRUUCBgNDI5YCBhbmQgYW4gSFRUUCBgNXh4YCBhcmUgcmV0cmllZCB3aXRoIGFuIGV4cG9uZW50aWFsLCBqaXR0ZXJlZCBiYWNrb2ZmIHRoYXQgaG9ub3JzXG4gKiBgUmV0cnktQWZ0ZXJgIChzZWUge0BsaW5rIEV4dGVybmFsTGlua1JldHJ5T3B0aW9uc30pOyBhbnkgb3RoZXIgc3RhdHVzLCBhIGA0MDRgIGluY2x1ZGVkLCBpcyBmaW5hbCBhdCBvbmNlLiBQcm9iZXMgb2ZcbiAqIG9uZSBob3N0IGFyZSBhbHNvIGNhcHBlZCBhdCB7QGxpbmsgQ29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3NPcHRpb25zLnBlckhvc3RDb25jdXJyZW5jeX0sIGFuZCBhIHByb2JlIG9mIGFub3RoZXIgaG9zdFxuICogaXMgc3RhcnRlZCB3aGlsZSBvbmUgaG9zdCBpcyBhdCBpdHMgY2FwLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRzIC0gVGhlIHVuaXF1ZSBleHRlcm5hbCBVUkwg4oaSIHJlZmVyZW5jaW5nIHBhZ2UgbWFwIGZyb20ge0BsaW5rIGNvbGxlY3RFeHRlcm5hbFRhcmdldHN9LlxuICogQHBhcmFtIGZldGNoVXJsU3RhdHVzIC0gSW5qZWN0ZWQgcHJvYmUgcmV0dXJuaW5nIHRoZSBIVFRQIHN0YXR1cyBmb3IgYSBVUkwgKGAwYCBmb3IgYSBuZXR3b3JrIGZhaWx1cmUpLCBvciBhblxuICogICB7QGxpbmsgRXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHR9IHRoYXQgYWxzbyBjYXJyaWVzIHRoZSBzZXJ2ZXIncyBgUmV0cnktQWZ0ZXJgLlxuICogQHBhcmFtIGNvbmN1cnJlbmN5IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGluLWZsaWdodCBwcm9iZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwZXItaG9zdCBjYXAgYW5kIHRoZSByZXRyeSBwb2xpY3kuXG4gKiBAcmV0dXJucyBFdmVyeSBleHRlcm5hbCBVUkwgdGhhdCBkaWQgbm90IHJldHVybiBIVFRQIGAyMDBgLCBpbiB0aGUgbWFwJ3MgaXRlcmF0aW9uIG9yZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3MoXG4gIHRhcmdldHM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4gIGZldGNoVXJsU3RhdHVzOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8RXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHQgfCBudW1iZXI+LFxuICBjb25jdXJyZW5jeTogbnVtYmVyLFxuICBvcHRpb25zOiBDb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rc09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxCcm9rZW5MaW5rW10+IHtcbiAgY29uc3QgcGVySG9zdENvbmN1cnJlbmN5ID0gTWF0aC5tYXgoMSwgb3B0aW9ucy5wZXJIb3N0Q29uY3VycmVuY3kgPz8gREVGQVVMVF9FWFRFUk5BTF9MSU5LX1BFUl9IT1NUX0NPTkNVUlJFTkNZKTtcbiAgY29uc3QgcGVuZGluZzogUGVuZGluZ1Byb2JlW10gPSBbLi4udGFyZ2V0c10ubWFwKChbdXJsLCBwYWdlVXJsXSwgaW5kZXgpID0+ICh7IGhvc3Q6IG5ldyBVUkwodXJsKS5ob3N0LCBpbmRleCwgcGFnZVVybCwgdXJsIH0pKTtcbiAgY29uc3QgcmVzdWx0czogKEJyb2tlbkxpbmsgfCBudWxsKVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogcGVuZGluZy5sZW5ndGggfSwgKCkgPT4gbnVsbCk7XG4gIGNvbnN0IGluRmxpZ2h0QnlIb3N0ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3Qgd2FpdGVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICBhc3luYyBmdW5jdGlvbiBydW5Xb3JrZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBwZW5kaW5nLmZpbmRJbmRleCgocHJvYmUpID0+IChpbkZsaWdodEJ5SG9zdC5nZXQocHJvYmUuaG9zdCkgPz8gMCkgPCBwZXJIb3N0Q29uY3VycmVuY3kpO1xuICAgICAgaWYgKHBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAvLyBFdmVyeSBwZW5kaW5nIFVSTCBpcyBvbiBhIGhvc3QgYXQgaXRzIGNhcCwgc28gYSBwcm9iZSBpcyBpbiBmbGlnaHQgdGhlcmUgYW5kIHdha2VzIHRoaXMgd29ya2VyIHdoZW4gaXQgZW5kcy5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmVQcm9taXNlKSA9PiB7XG4gICAgICAgICAgd2FpdGVycy5wdXNoKHJlc29sdmVQcm9taXNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbcHJvYmVdID0gcGVuZGluZy5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgICAgY29uc3QgeyBob3N0LCBpbmRleCwgcGFnZVVybCwgdXJsIH0gPSBlbnN1cmVOb25OdWxsYWJsZShwcm9iZSk7XG4gICAgICBpbkZsaWdodEJ5SG9zdC5zZXQoaG9zdCwgKGluRmxpZ2h0QnlIb3N0LmdldChob3N0KSA/PyAwKSArIDEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaHR0cFN0YXR1cyA9IGF3YWl0IHByb2JlV2l0aFJldHJ5KHVybCwgZmV0Y2hVcmxTdGF0dXMsIG9wdGlvbnMucmV0cnkgPz8ge30pO1xuICAgICAgICBpZiAoaHR0cFN0YXR1cyAhPT0gSFRUUF9PS19TVEFUVVMpIHtcbiAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHsgaHR0cFN0YXR1cywgcGFnZVVybCwgcmVhc29uOiAnZXh0ZXJuYWwtZXJyb3InLCB0YXJnZXRVcmw6IHVybCB9O1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpbkZsaWdodEJ5SG9zdC5zZXQoaG9zdCwgZW5zdXJlTm9uTnVsbGFibGUoaW5GbGlnaHRCeUhvc3QuZ2V0KGhvc3QpKSAtIDEpO1xuICAgICAgICBmb3IgKGNvbnN0IHdha2Ugb2Ygd2FpdGVycy5zcGxpY2UoMCkpIHtcbiAgICAgICAgICB3YWtlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrZXJDb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKGNvbmN1cnJlbmN5LCBwZW5kaW5nLmxlbmd0aCkpO1xuICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHsgbGVuZ3RoOiB3b3JrZXJDb3VudCB9LCAoKSA9PiBydW5Xb3JrZXIoKSkpO1xuXG4gIC8vIEluZGV4ZWQgYXNzaWdubWVudCBhYm92ZSBrZWVwcyBmYWlsdXJlcyBpbiB0aGUgbWFwJ3MgaXRlcmF0aW9uIG9yZGVyOyBkcm9wIHRoZSBzdWNjZXNzZnVsIGdhcHMuXG4gIHJldHVybiByZXN1bHRzLmZpbHRlcigoYnJva2VuTGluayk6IGJyb2tlbkxpbmsgaXMgQnJva2VuTGluayA9PiBicm9rZW5MaW5rICE9PSBudWxsKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBldmVyeSBpbnRlcm5hbCBsaW5rIGFjcm9zcyB0aGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBwYWdlcyB0aGF0IGRvZXMgbm90IHJlc29sdmUuXG4gKlxuICogRXh0ZXJuYWwgYW5kIG5vbi1IVFRQIGxpbmtzIGFyZSBpZ25vcmVkLiBFYWNoIGludGVybmFsIGxpbmsgbXVzdCByZXNvbHZlIHRvIGFuIGV4aXN0aW5nIHBhZ2UsXG4gKiBhbmQgZWFjaCBgI2ZyYWdtZW50YCBtdXN0IHJlc29sdmUgdG8gYW4gZXhpc3RpbmcgZWxlbWVudCBpZCBvbiB0aGUgdGFyZ2V0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHBhZ2VzIC0gVGhlIGJ1aWx0IGRvY3VtZW50YXRpb24gcGFnZXMgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0gZmlsZVN5c3RlbSAtIEluamVjdGVkIGFjY2VzcyB0byB0aGUgYnVpbGQgb3V0cHV0LlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgRXZlcnkgYnJva2VuIGludGVybmFsIGxpbmssIGluIHBhZ2UtdGhlbi1kb2N1bWVudCBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RCcm9rZW5MaW5rcyhwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSwgZmlsZVN5c3RlbTogTGlua0NoZWNrRmlsZVN5c3RlbSwgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IEJyb2tlbkxpbmtbXSB7XG4gIGNvbnN0IGJyb2tlbkxpbmtzOiBCcm9rZW5MaW5rW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICBjb25zdCBwYWdlVXJsID0gZ2V0UGFnZVVybChwYWdlLnJlbGF0aXZlUGF0aCwgc2l0ZUJhc2VVcmwpO1xuICAgIGZvciAoY29uc3QgcmF3TGluayBvZiBleHRyYWN0TGlua3MocGFnZS5odG1sKSkge1xuICAgICAgY29uc3QgdGFyZ2V0VXJsID0gbmV3IFVSTChyYXdMaW5rLCBwYWdlVXJsKTtcbiAgICAgIGlmICghaXNJbnRlcm5hbERvY1VybCh0YXJnZXRVcmwsIHNpdGVCYXNlVXJsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZUtleSA9IGZpbGVTeXN0ZW0ucmVzb2x2ZUV4aXN0aW5nUGFnZShnZXRPdXRwdXRSZWxhdGl2ZVBhdGgodGFyZ2V0VXJsLCBzaXRlQmFzZVVybCkpO1xuICAgICAgaWYgKHBhZ2VLZXkgPT09IG51bGwpIHtcbiAgICAgICAgYnJva2VuTGlua3MucHVzaCh7IHBhZ2VVcmwsIHJlYXNvbjogJ21pc3NpbmctcGFnZScsIHRhcmdldFVybDogdGFyZ2V0VXJsLmhyZWYgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcmFnbWVudCA9IHRhcmdldFVybC5oYXNoLnNsaWNlKDEpO1xuICAgICAgaWYgKGZyYWdtZW50Lmxlbmd0aCA+IDAgJiYgIWZpbGVTeXN0ZW0ucmVhZElkcyhwYWdlS2V5KS5oYXMoZnJhZ21lbnQpKSB7XG4gICAgICAgIGJyb2tlbkxpbmtzLnB1c2goeyBwYWdlVXJsLCByZWFzb246ICdtaXNzaW5nLWZyYWdtZW50JywgdGFyZ2V0VXJsOiB0YXJnZXRVcmwuaHJlZiB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnJva2VuTGlua3M7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgZXZlcnkgdW5pcXVlIGV4dGVybmFsIFVSTCByZWZlcmVuY2VkIGFjcm9zcyB0aGUgYnVpbHQgcGFnZXMsIGRlZHVwbGljYXRlZC5cbiAqXG4gKiBPbmx5IEhUVFAoUykgbGlua3MgdGhhdCBhcmUgbm90IHtAbGluayBpc0ludGVybmFsRG9jVXJsfSBhcmUgcmV0dXJuZWQuIEVhY2ggdW5pcXVlIFVSTCBtYXBzIHRvXG4gKiB0aGUgZmlyc3QgcGFnZSB0aGF0IHJlZmVyZW5jZWQgaXQsIHNvIGEgbGF0ZXIgZmFpbHVyZSBjYW4gYmUgcmVwb3J0ZWQgd2l0aCBhIGNvbmNyZXRlIGV4YW1wbGVcbiAqIHBhZ2UgZXZlbiB0aG91Z2ggdGhlIFVSTCBpcyBmZXRjaGVkIG9ubHkgb25jZS5cbiAqXG4gKiBAcGFyYW0gcGFnZXMgLSBUaGUgYnVpbHQgZG9jdW1lbnRhdGlvbiBwYWdlcyB0byBzY2FuLlxuICogQHBhcmFtIHNpdGVCYXNlVXJsIC0gVGhlIGFic29sdXRlIGJhc2UgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLlxuICogQHJldHVybnMgQSBtYXAgZnJvbSBlYWNoIHVuaXF1ZSBleHRlcm5hbCBVUkwgdG8gb25lIHJlZmVyZW5jaW5nIHBhZ2UgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEV4dGVybmFsVGFyZ2V0cyhwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSwgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCB0YXJnZXRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICBjb25zdCBwYWdlVXJsID0gZ2V0UGFnZVVybChwYWdlLnJlbGF0aXZlUGF0aCwgc2l0ZUJhc2VVcmwpO1xuICAgIGZvciAoY29uc3QgcmF3TGluayBvZiBleHRyYWN0TGlua3MocGFnZS5odG1sKSkge1xuICAgICAgY29uc3QgdGFyZ2V0VXJsID0gbmV3IFVSTChyYXdMaW5rLCBwYWdlVXJsKTtcbiAgICAgIGlmICgodGFyZ2V0VXJsLnByb3RvY29sICE9PSAnaHR0cDonICYmIHRhcmdldFVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHx8IGlzSW50ZXJuYWxEb2NVcmwodGFyZ2V0VXJsLCBzaXRlQmFzZVVybCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gYCR7dGFyZ2V0VXJsLm9yaWdpbn0ke3RhcmdldFVybC5wYXRobmFtZX0ke3RhcmdldFVybC5zZWFyY2h9YDtcbiAgICAgIGlmICghdGFyZ2V0cy5oYXMoZXh0ZXJuYWxVcmwpKSB7XG4gICAgICAgIHRhcmdldHMuc2V0KGV4dGVybmFsVXJsLCBwYWdlVXJsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0cztcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdmFsdWVzIG9mIGV2ZXJ5IGBpZGAgYXR0cmlidXRlIGluIGEgY2h1bmsgb2YgSFRNTC5cbiAqXG4gKiBAcGFyYW0gaHRtbCAtIFRoZSBIVE1MIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgc2V0IG9mIGVsZW1lbnQgaWRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdElkcyhodG1sOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgU2V0KFsuLi5odG1sLm1hdGNoQWxsKElEX0FUVFJJQlVURV9SRUdFWCldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd2YWx1ZScpKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHZhbHVlcyBvZiBldmVyeSBgaHJlZmAvYHNyY2AgYXR0cmlidXRlIGluIGEgY2h1bmsgb2YgSFRNTC5cbiAqXG4gKiBAcGFyYW0gaHRtbCAtIFRoZSBIVE1MIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgcmF3IGxpbmsgdmFsdWVzLCBpbiBkb2N1bWVudCBvcmRlciAoZHVwbGljYXRlcyBwcmVzZXJ2ZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExpbmtzKGh0bWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5odG1sLm1hdGNoQWxsKExJTktfQVRUUklCVVRFX1JFR0VYKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3ZhbHVlJykpO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYnJva2VuIGxpbmtzIGludG8gYSBodW1hbi1yZWFkYWJsZSBtdWx0aS1saW5lIHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0gYnJva2VuTGlua3MgLSBUaGUgYnJva2VuIGxpbmtzIHRvIGRlc2NyaWJlLlxuICogQHJldHVybnMgT25lIGxpbmUgcGVyIGJyb2tlbiBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QnJva2VuTGlua3MoYnJva2VuTGlua3M6IEJyb2tlbkxpbmtbXSk6IHN0cmluZyB7XG4gIHJldHVybiBicm9rZW5MaW5rc1xuICAgIC5tYXAoKGJyb2tlbkxpbmspID0+IHtcbiAgICAgIHN3aXRjaCAoYnJva2VuTGluay5yZWFzb24pIHtcbiAgICAgICAgY2FzZSAnZXh0ZXJuYWwtZXJyb3InOiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Jyb2tlbkxpbmsucGFnZVVybH0gbGlua3MgdG8gZXh0ZXJuYWwgVVJMICR7YnJva2VuTGluay50YXJnZXRVcmx9IHRoYXQgcmV0dXJuZWQgJHtkZXNjcmliZUh0dHBTdGF0dXMoYnJva2VuTGluay5odHRwU3RhdHVzKX0uYDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtaXNzaW5nLWZyYWdtZW50Jzoge1xuICAgICAgICAgIHJldHVybiBgJHticm9rZW5MaW5rLnBhZ2VVcmx9IGxpbmtzIHRvIG1pc3NpbmcgZnJhZ21lbnQgJHticm9rZW5MaW5rLnRhcmdldFVybH0uYDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtaXNzaW5nLXBhZ2UnOiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Jyb2tlbkxpbmsucGFnZVVybH0gbGlua3MgdG8gbWlzc2luZyBwYWdlICR7YnJva2VuTGluay50YXJnZXRVcmx9LmA7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHJldHVybiBhc3NlcnROZXZlcihicm9rZW5MaW5rLnJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIC5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYnVpbGQtb3V0cHV0LXJlbGF0aXZlIHBhdGggZm9yIGFuIGludGVybmFsIGRvY3VtZW50YXRpb24gVVJMLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRVcmwgLSBUaGUgcmVzb2x2ZWQgYWJzb2x1dGUgbGluayBVUkwgKG11c3QgYmUge0BsaW5rIGlzSW50ZXJuYWxEb2NVcmx9KS5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvZGVkIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJ1aWxkLW91dHB1dCByb290LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0UmVsYXRpdmVQYXRoKHRhcmdldFVybDogVVJMLCBzaXRlQmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IG5ldyBVUkwoc2l0ZUJhc2VVcmwpO1xuICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHRhcmdldFVybC5wYXRobmFtZS5zbGljZShiYXNlLnBhdGhuYW1lLmxlbmd0aCkpO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBhYnNvbHV0ZSBVUkwgYSBidWlsdCBwYWdlIGlzIHNlcnZlZCBhdC5cbiAqXG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIC0gVGhlIHBhZ2UncyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBidWlsZC1vdXRwdXQgcm9vdC5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIFRoZSBwYWdlJ3MgYWJzb2x1dGUgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZVVybChyZWxhdGl2ZVBhdGg6IHN0cmluZywgc2l0ZUJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSByZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gIGNvbnN0IHVybFBhdGggPSBub3JtYWxpemVkID09PSAnaW5kZXguaHRtbCcgPyAnJyA6IG5vcm1hbGl6ZWQucmVwbGFjZSgvaW5kZXhcXC5odG1sJC91LCAnJyk7XG4gIHJldHVybiBuZXcgVVJMKHVybFBhdGgsIHNpdGVCYXNlVXJsKS5ocmVmO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHJlc29sdmVkIGxpbmsgcG9pbnRzIGF0IGEgcGFnZSBob3N0ZWQgYnkgdGhpcyBkb2N1bWVudGF0aW9uIHNpdGUuXG4gKlxuICogQHBhcmFtIHRhcmdldFVybCAtIFRoZSByZXNvbHZlZCBhYnNvbHV0ZSBsaW5rIFVSTC5cbiAqIEBwYXJhbSBzaXRlQmFzZVVybCAtIFRoZSBhYnNvbHV0ZSBiYXNlIFVSTCB0aGUgc2l0ZSBpcyBzZXJ2ZWQgZnJvbSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBsaW5rIGlzIHNhbWUtb3JpZ2luIGFuZCB1bmRlciB0aGUgc2l0ZSBiYXNlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVybmFsRG9jVXJsKHRhcmdldFVybDogVVJMLCBzaXRlQmFzZVVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGJhc2UgPSBuZXcgVVJMKHNpdGVCYXNlVXJsKTtcbiAgcmV0dXJuIHRhcmdldFVybC5vcmlnaW4gPT09IGJhc2Uub3JpZ2luICYmIHRhcmdldFVybC5wYXRobmFtZS5zdGFydHNXaXRoKGJhc2UucGF0aG5hbWUpO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuIEhUVFAgYFJldHJ5LUFmdGVyYCBoZWFkZXIsIHdoaWNoIGlzIGVpdGhlciBhIG51bWJlciBvZiBzZWNvbmRzIG9yIGFuIEhUVFAgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gaGVhZGVyVmFsdWUgLSBUaGUgaGVhZGVyJ3MgdmFsdWUsIG9yIGBudWxsYCB3aGVuIHRoZSByZXNwb25zZSBoYXMgbm9uZS5cbiAqIEBwYXJhbSBub3dJbk1pbGxpc2Vjb25kcyAtIFRoZSBjdXJyZW50IHRpbWUsIGFnYWluc3Qgd2hpY2ggYSBkYXRlIGlzIG1lYXN1cmVkLlxuICogQHJldHVybnMgSG93IGxvbmcgdG8gd2FpdCwgbmV2ZXIgbmVnYXRpdmUsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIGhlYWRlciBpcyBhYnNlbnQgb3IgdW5yZWFkYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlckluTWlsbGlzZWNvbmRzKGhlYWRlclZhbHVlOiBudWxsIHwgc3RyaW5nLCBub3dJbk1pbGxpc2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdHJpbW1lZCA9IGhlYWRlclZhbHVlPy50cmltKCkgPz8gJyc7XG4gIGlmICh0cmltbWVkID09PSAnJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoL15cXGQrJC91LnRlc3QodHJpbW1lZCkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHRyaW1tZWQpICogTUlMTElTRUNPTkRTX1BFUl9TRUNPTkQ7XG4gIH1cblxuICBjb25zdCBkYXRlSW5NaWxsaXNlY29uZHMgPSBEYXRlLnBhcnNlKHRyaW1tZWQpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGVJbk1pbGxpc2Vjb25kcykgPyB1bmRlZmluZWQgOiBNYXRoLm1heCgwLCBkYXRlSW5NaWxsaXNlY29uZHMgLSBub3dJbk1pbGxpc2Vjb25kcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYW4gb3V0cHV0LXJlbGF0aXZlIHBhdGggdG8gYW4gYWJzb2x1dGUgcGF0aCBpbnNpZGUgdGhlIGJ1aWxkLW91dHB1dCByb290LCByZWplY3RpbmdcbiAqIHBhdGhzIHRoYXQgZXNjYXBlIGl0IHZpYSBgLi5gIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSBvdXRwdXRSb290UGF0aCAtIFRoZSBhYnNvbHV0ZSBidWlsZC1vdXRwdXQgcm9vdCBwYXRoLlxuICogQHBhcmFtIG91dHB1dFJlbGF0aXZlUGF0aCAtIFRoZSBkZWNvZGVkIG91dHB1dC1yZWxhdGl2ZSBwYXRoLlxuICogQHJldHVybnMgVGhlIGpvaW5lZCBwYXRoIHdoZW4gaXQgc3RheXMgd2l0aGluIHRoZSByb290LCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdpdGhpblJvb3Qob3V0cHV0Um9vdFBhdGg6IHN0cmluZywgb3V0cHV0UmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3Qgcm9vdCA9IG5vcm1hbGl6ZShvdXRwdXRSb290UGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKSkucmVwbGFjZSgvXFwvJC91LCAnJyk7XG4gIGxldCBqb2luZWQgPSBub3JtYWxpemUoYCR7cm9vdH0vJHtvdXRwdXRSZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnXFxcXCcsICcvJyl9YCk7XG4gIGlmIChqb2luZWQubGVuZ3RoID4gMSkge1xuICAgIGpvaW5lZCA9IGpvaW5lZC5yZXBsYWNlKC9cXC8kL3UsICcnKTtcbiAgfVxuXG4gIHJldHVybiBqb2luZWQgPT09IHJvb3QgfHwgam9pbmVkLnN0YXJ0c1dpdGgoYCR7cm9vdH0vYCkgPyBqb2luZWQgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUh0dHBTdGF0dXMoaHR0cFN0YXR1czogbnVtYmVyIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIGh0dHBTdGF0dXMgPT09IHVuZGVmaW5lZCB8fCBodHRwU3RhdHVzID09PSBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTID8gJ2EgbmV0d29yayBmYWlsdXJlJyA6IGBIVFRQICR7U3RyaW5nKGh0dHBTdGF0dXMpfWA7XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50U3RhdHVzKHN0YXR1czogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBzdGF0dXMgPT09IE5FVFdPUktfRkFJTFVSRV9TVEFUVVMgfHwgc3RhdHVzID09PSBIVFRQX1JFUVVFU1RfVElNRU9VVF9TVEFUVVMgfHwgc3RhdHVzID09PSBIVFRQX1RPT19NQU5ZX1JFUVVFU1RTX1NUQVRVUyB8fCBzdGF0dXMgPj0gSFRUUF9TRVJWRVJfRVJST1JfTUlOX1NUQVRVUztcbn1cblxuLypcbiAqIEEgc2l0ZSBsaW5raW5nIGl0cyBzaWJsaW5nIHNpdGVzIHByb2JlcyB0aG91c2FuZHMgb2YgVVJMcyBvbiBvbmUgaG9zdCwgYW5kIGluIENJIEdpdEh1YiBQYWdlcyBhbnN3ZXJzIGEgZmV3IG9mIHRoZW1cbiAqIHdpdGggYSA1MDMsIG9yIGRyb3BzIHRoZSBjb25uZWN0aW9uLCB3aGlsZSB0aGUgcGFnZSBzZXJ2ZXMgMjAwIGEgbW9tZW50IGxhdGVyLiBUaHJlZSBhdHRlbXB0cyBhIHNlY29uZCBhcGFydCBnYXZlIHVwXG4gKiB0b28gc29vbiBmb3IgdGhhdCAoMjAyNi0xMC0xNiksIHNvIHRoZSB3YWl0IGdyb3dzIHVudGlsIHRoZSBidWRnZXQgaXMgc3BlbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2JlV2l0aFJldHJ5KFxuICB1cmw6IHN0cmluZyxcbiAgZmV0Y2hVcmxTdGF0dXM6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTxFeHRlcm5hbExpbmtQcm9iZVJlc3VsdCB8IG51bWJlcj4sXG4gIHJldHJ5OiBFeHRlcm5hbExpbmtSZXRyeU9wdGlvbnNcbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGluaXRpYWxEZWxheUluTWlsbGlzZWNvbmRzID0gcmV0cnkuaW5pdGlhbERlbGF5SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX0lOSVRJQUxfREVMQVlfSU5fTUlMTElTRUNPTkRTO1xuICBjb25zdCBtYXhEZWxheUluTWlsbGlzZWNvbmRzID0gcmV0cnkubWF4RGVsYXlJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0VYVEVSTkFMX0xJTktfUkVUUllfTUFYX0RFTEFZX0lOX01JTExJU0VDT05EUztcbiAgY29uc3QgdG90YWxCdWRnZXRJbk1pbGxpc2Vjb25kcyA9IHJldHJ5LnRvdGFsQnVkZ2V0SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9FWFRFUk5BTF9MSU5LX1JFVFJZX1RPVEFMX0JVREdFVF9JTl9NSUxMSVNFQ09ORFM7XG4gIGNvbnN0IHJhbmRvbSA9IHJldHJ5LnJhbmRvbSA/PyBNYXRoLnJhbmRvbTtcbiAgY29uc3Qgc2xlZXAgPSByZXRyeS5zbGVlcCA/PyBzbGVlcFdpdGhUaW1lb3V0O1xuXG4gIGxldCB3YWl0ZWRJbk1pbGxpc2Vjb25kcyA9IDA7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOzsgYXR0ZW1wdCsrKSB7XG4gICAgY29uc3QgcHJvYmVSZXN1bHQgPSBhd2FpdCBmZXRjaFVybFN0YXR1cyh1cmwpO1xuICAgIGNvbnN0IHsgcmV0cnlBZnRlckluTWlsbGlzZWNvbmRzID0gMCwgc3RhdHVzIH0gPSB0eXBlb2YgcHJvYmVSZXN1bHQgPT09ICdudW1iZXInID8geyByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM6IHVuZGVmaW5lZCwgc3RhdHVzOiBwcm9iZVJlc3VsdCB9IDogcHJvYmVSZXN1bHQ7XG4gICAgY29uc3QgcmVtYWluaW5nSW5NaWxsaXNlY29uZHMgPSB0b3RhbEJ1ZGdldEluTWlsbGlzZWNvbmRzIC0gd2FpdGVkSW5NaWxsaXNlY29uZHM7XG4gICAgaWYgKCFpc1RyYW5zaWVudFN0YXR1cyhzdGF0dXMpIHx8IHJlbWFpbmluZ0luTWlsbGlzZWNvbmRzIDw9IDApIHtcbiAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgfVxuXG4gICAgY29uc3QgYmFja29mZkluTWlsbGlzZWNvbmRzID0gTWF0aC5taW4obWF4RGVsYXlJbk1pbGxpc2Vjb25kcywgaW5pdGlhbERlbGF5SW5NaWxsaXNlY29uZHMgKiBCQUNLT0ZGX0ZBQ1RPUiAqKiBhdHRlbXB0KTtcbiAgICBjb25zdCBqaXR0ZXJlZEluTWlsbGlzZWNvbmRzID0gYmFja29mZkluTWlsbGlzZWNvbmRzICogKEpJVFRFUl9GTE9PUiArICgxIC0gSklUVEVSX0ZMT09SKSAqIHJhbmRvbSgpKTtcbiAgICBjb25zdCBkZWxheUluTWlsbGlzZWNvbmRzID0gTWF0aC5taW4ocmVtYWluaW5nSW5NaWxsaXNlY29uZHMsIE1hdGgubWF4KGppdHRlcmVkSW5NaWxsaXNlY29uZHMsIHJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcykpO1xuICAgIGF3YWl0IHNsZWVwKGRlbGF5SW5NaWxsaXNlY29uZHMpO1xuICAgIHdhaXRlZEluTWlsbGlzZWNvbmRzICs9IGRlbGF5SW5NaWxsaXNlY29uZHM7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2xlZXBXaXRoVGltZW91dChtaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmVQcm9taXNlKSA9PiB7XG4gICAgZ2xvYmFsVGhpcy5zZXRUaW1lb3V0KHJlc29sdmVQcm9taXNlLCBtaWxsaXNlY29uZHMpO1xuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFTLDhCQUE4QjtBQUN2QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsaUJBQWlCO0FBRTFCLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0saUJBQWlCO0FBTWhCLE1BQU0seUJBQXlCO0FBd0kvQixNQUFNLDZDQUE2QztBQUtuRCxNQUFNLDREQUE0RDtBQUtsRSxNQUFNLHdEQUF3RDtBQUs5RCxNQUFNLDJEQUEyRDtBQUV4RSxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLCtCQUErQjtBQUNyQyxNQUFNLDBCQUEwQjtBQUNoQyxNQUFNLGVBQWU7QUFDckIsTUFBTSxpQkFBaUI7QUF3QnZCLGVBQXNCLDJCQUNwQixTQUNBLGdCQUNBLGFBQ0EsVUFBNkMsQ0FBQyxH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
|