@angular/compiler-cli 9.1.3 → 9.1.7
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/ngcc/index.d.ts +2 -1
- package/ngcc/index.js +1 -1
- package/ngcc/src/analysis/module_with_providers_analyzer.d.ts +35 -9
- package/ngcc/src/analysis/module_with_providers_analyzer.js +101 -16
- package/ngcc/src/dependencies/dts_dependency_host.d.ts +1 -1
- package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
- package/ngcc/src/dependencies/module_resolver.d.ts +1 -1
- package/ngcc/src/dependencies/module_resolver.js +1 -1
- package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.d.ts +1 -1
- package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.js +1 -1
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.d.ts +15 -8
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +86 -54
- package/ngcc/src/entry_point_finder/utils.d.ts +10 -1
- package/ngcc/src/entry_point_finder/utils.js +78 -28
- package/ngcc/src/execution/api.d.ts +3 -2
- package/ngcc/src/execution/api.js +1 -1
- package/ngcc/src/execution/cluster/api.d.ts +6 -1
- package/ngcc/src/execution/cluster/api.js +1 -1
- package/ngcc/src/execution/cluster/executor.d.ts +3 -1
- package/ngcc/src/execution/cluster/executor.js +4 -3
- package/ngcc/src/execution/cluster/master.d.ts +6 -1
- package/ngcc/src/execution/cluster/master.js +63 -19
- package/ngcc/src/execution/cluster/utils.d.ts +4 -2
- package/ngcc/src/execution/cluster/utils.js +13 -7
- package/ngcc/src/execution/cluster/worker.js +59 -29
- package/ngcc/src/execution/create_compile_function.d.ts +3 -3
- package/ngcc/src/execution/create_compile_function.js +14 -16
- package/ngcc/src/execution/single_process_executor.js +3 -3
- package/ngcc/src/execution/tasks/api.d.ts +10 -1
- package/ngcc/src/execution/tasks/api.js +1 -1
- package/ngcc/src/execution/tasks/queues/base_task_queue.d.ts +2 -1
- package/ngcc/src/execution/tasks/queues/base_task_queue.js +11 -4
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.d.ts +1 -1
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +3 -3
- package/ngcc/src/host/commonjs_host.js +6 -3
- package/ngcc/src/host/delegating_host.d.ts +1 -2
- package/ngcc/src/host/delegating_host.js +1 -4
- package/ngcc/src/host/esm2015_host.d.ts +96 -24
- package/ngcc/src/host/esm2015_host.js +320 -110
- package/ngcc/src/host/esm5_host.d.ts +0 -14
- package/ngcc/src/host/esm5_host.js +3 -35
- package/ngcc/src/host/ngcc_host.d.ts +1 -32
- package/ngcc/src/host/ngcc_host.js +1 -1
- package/ngcc/src/host/umd_host.js +14 -5
- package/ngcc/src/host/utils.d.ts +10 -0
- package/ngcc/src/host/utils.js +25 -0
- package/ngcc/src/main.js +13 -10
- package/ngcc/src/ngcc_options.d.ts +4 -10
- package/ngcc/src/ngcc_options.js +10 -18
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/build_marker.js +1 -1
- package/ngcc/src/packages/entry_point_bundle.d.ts +1 -1
- package/ngcc/src/packages/entry_point_bundle.js +1 -1
- package/ngcc/src/packages/transformer.js +2 -2
- package/ngcc/src/path_mappings.d.ts +20 -0
- package/ngcc/src/path_mappings.js +34 -0
- package/ngcc/src/rendering/esm_rendering_formatter.js +2 -2
- package/ngcc/src/writing/file_writer.d.ts +13 -1
- package/ngcc/src/writing/file_writer.js +1 -1
- package/ngcc/src/writing/in_place_file_writer.d.ts +4 -2
- package/ngcc/src/writing/in_place_file_writer.js +28 -2
- package/ngcc/src/writing/new_entry_point_file_writer.d.ts +3 -0
- package/ngcc/src/writing/new_entry_point_file_writer.js +69 -4
- package/package.json +2 -2
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +1 -0
- package/src/ngtsc/partial_evaluator/src/interpreter.js +25 -1
- package/src/ngtsc/partial_evaluator/src/result.d.ts +2 -2
- package/src/ngtsc/partial_evaluator/src/result.js +1 -1
- package/src/ngtsc/reflection/src/host.d.ts +32 -0
- package/src/ngtsc/reflection/src/host.js +1 -1
- package/src/ngtsc/reflection/src/typescript.js +3 -1
- package/src/ngtsc/typecheck/src/expression.js +18 -5
- package/src/ngtsc/typecheck/src/type_check_block.js +4 -2
- package/src/version.js +1 -1
|
@@ -68,4 +68,4 @@
|
|
|
68
68
|
KnownDeclaration[KnownDeclaration["TsHelperSpreadArrays"] = 3] = "TsHelperSpreadArrays";
|
|
69
69
|
})(KnownDeclaration = exports.KnownDeclaration || (exports.KnownDeclaration = {}));
|
|
70
70
|
});
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILCtCQUFpQztJQWtFcEIsUUFBQSxTQUFTLEdBQUc7UUFDdkIsWUFBWSxFQUFFLFVBQUMsU0FBb0I7WUFDakMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDM0IsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsT0FBUSxTQUFnQyxDQUFDLGNBQWMsQ0FBQzthQUN6RDtRQUNILENBQUM7S0FDRixDQUFDO0lBV0YsU0FBZ0IscUJBQXFCLENBQUMsR0FBa0I7UUFDdEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUN2QixFQUFFLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNyRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBSkQsc0RBSUM7SUFtQkQ7O09BRUc7SUFDSCxJQUFZLGVBTVg7SUFORCxXQUFZLGVBQWU7UUFDekIsbUVBQVcsQ0FBQTtRQUNYLHlEQUFNLENBQUE7UUFDTix5REFBTSxDQUFBO1FBQ04sNkRBQVEsQ0FBQTtRQUNSLHlEQUFNLENBQUE7SUFDUixDQUFDLEVBTlcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFNMUI7SUF5TkQ7O09BRUc7SUFDSCxJQUFZLGdCQW9CWDtJQXBCRCxXQUFZLGdCQUFnQjtRQUMxQjs7V0FFRztRQUNILDJFQUFjLENBQUE7UUFFZDs7V0FFRztRQUNILDJFQUFjLENBQUE7UUFFZDs7V0FFRztRQUNILDJFQUFjLENBQUE7UUFFZDs7V0FFRztRQUNILHVGQUFvQixDQUFBO0lBQ3RCLENBQUMsRUFwQlcsZ0JBQWdCLEdBQWhCLHdCQUFnQixLQUFoQix3QkFBZ0IsUUFvQjNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCBvciBzeW50aGVzaXplZCBmcm9tXG4gKiBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhIGNsYXNzLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3IgPSBDb25jcmV0ZURlY29yYXRvcnxTeW50aGV0aWNEZWNvcmF0b3I7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURlY29yYXRvciB7XG4gIC8qKlxuICAgKiBOYW1lIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGludm9rZWQgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGRpc3RpbmN0IGZyb20gdGhlIG5hbWUgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgaW1wb3J0ZWQgKHRob3VnaCBpbiBwcmFjdGljZSB0aGV5XG4gICAqIHdpbGwgdXN1YWxseSBiZSB0aGUgc2FtZSkuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgd2hpY2ggcmVmZXJzIHRvIHRoZSBkZWNvcmF0b3IgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKi9cbiAgaWRlbnRpZmllcjogRGVjb3JhdG9ySWRlbnRpZmllcnxudWxsO1xuXG4vKipcbiAqIGBJbXBvcnRgIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGJyb3VnaHQgaW50byB0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhcyBpbnZva2VkLCBvciBgbnVsbGBcbiAqIGlmIHRoZSBkZWNvcmF0b3Igd2FzIGRlY2xhcmVkIGluIHRoZSBzYW1lIG1vZHVsZSBhbmQgbm90IGltcG9ydGVkLlxuICovXG5pbXBvcnQ6IEltcG9ydHxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgZGVjb3JhdG9yIGl0c2VsZiwgb3IgYG51bGxgIGlmIHRoZSBkZWNvcmF0b3IgaXMgc3ludGhlc2l6ZWQgKGUuZy5cbiAgICogaW4gbmdjYykuXG4gICAqL1xuICBub2RlOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50cyBvZiB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZGVjb3JhdG9yLCBpZiB0aGUgZGVjb3JhdG9yIGlzIGludm9rZWQsIG9yIGBudWxsYFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICBhcmdzOiB0cy5FeHByZXNzaW9uW118bnVsbDtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCB3aGljaCB3YXMgYWN0dWFsbHlcbiAqIHByZXNlbnQgaW4gYSBmaWxlLlxuICpcbiAqIENvbmNyZXRlIGRlY29yYXRvcnMgYWx3YXlzIGhhdmUgYW4gYGlkZW50aWZpZXJgIGFuZCBhIGBub2RlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25jcmV0ZURlY29yYXRvciBleHRlbmRzIEJhc2VEZWNvcmF0b3Ige1xuICBpZGVudGlmaWVyOiBEZWNvcmF0b3JJZGVudGlmaWVyO1xuICBub2RlOiB0cy5Ob2RlO1xufVxuXG4vKipcbiAqIFN5bnRoZXRpYyBkZWNvcmF0b3JzIG5ldmVyIGhhdmUgYW4gYGlkZW50aWZpZXJgIG9yIGEgYG5vZGVgLCBidXQga25vdyB0aGUgbm9kZSBmb3Igd2hpY2ggdGhleVxuICogd2VyZSBzeW50aGVzaXplZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aGV0aWNEZWNvcmF0b3IgZXh0ZW5kcyBCYXNlRGVjb3JhdG9yIHtcbiAgaWRlbnRpZmllcjogbnVsbDtcbiAgbm9kZTogbnVsbDtcblxuICAvKipcbiAgICogVGhlIGB0cy5Ob2RlYCBmb3Igd2hpY2ggdGhpcyBkZWNvcmF0b3Igd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBzeW50aGVzaXplZEZvcjogdHMuTm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IERlY29yYXRvciA9IHtcbiAgbm9kZUZvckVycm9yOiAoZGVjb3JhdG9yOiBEZWNvcmF0b3IpOiB0cy5Ob2RlID0+IHtcbiAgICBpZiAoZGVjb3JhdG9yLm5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBkZWNvcmF0b3Iubm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyhhbHhodWIpOiB3ZSBjYW4ndCByZWx5IG9uIG5hcnJvd2luZyB1bnRpbCBUUyAzLjYgaXMgaW4gZzMuXG4gICAgICByZXR1cm4gKGRlY29yYXRvciBhcyBTeW50aGV0aWNEZWNvcmF0b3IpLnN5bnRoZXNpemVkRm9yO1xuICAgIH1cbiAgfSxcbn07XG5cbi8qKlxuICogQSBkZWNvcmF0b3IgaXMgaWRlbnRpZmllZCBieSBlaXRoZXIgYSBzaW1wbGUgaWRlbnRpZmllciAoZS5nLiBgRGVjb3JhdG9yYCkgb3IsIGluIHNvbWUgY2FzZXMsXG4gKiBhIG5hbWVzcGFjZWQgcHJvcGVydHkgYWNjZXNzIChlLmcuIGBjb3JlLkRlY29yYXRvcmApLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3JJZGVudGlmaWVyID0gdHMuSWRlbnRpZmllcnxOYW1lc3BhY2VkSWRlbnRpZmllcjtcbmV4cG9ydCB0eXBlIE5hbWVzcGFjZWRJZGVudGlmaWVyID0gdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJntcbiAgZXhwcmVzc2lvbjogdHMuSWRlbnRpZmllcjtcbiAgbmFtZTogdHMuSWRlbnRpZmllclxufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0RlY29yYXRvcklkZW50aWZpZXIoZXhwOiB0cy5FeHByZXNzaW9uKTogZXhwIGlzIERlY29yYXRvcklkZW50aWZpZXIge1xuICByZXR1cm4gdHMuaXNJZGVudGlmaWVyKGV4cCkgfHxcbiAgICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGV4cCkgJiYgdHMuaXNJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uKSAmJlxuICAgICAgdHMuaXNJZGVudGlmaWVyKGV4cC5uYW1lKTtcbn1cblxuLyoqXG4gKiBUaGUgYHRzLkRlY2xhcmF0aW9uYCBvZiBhIFwiY2xhc3NcIi5cbiAqXG4gKiBDbGFzc2VzIGFyZSByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgY29kZSBmb3JtYXRzOlxuICogLSBJbiBUUyBjb2RlLCB0aGV5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCB1c2luZyB0aGUgYGNsYXNzYCBrZXl3b3JkLlxuICogLSBJbiBFUzIwMTUgY29kZSwgdGhleSBhcmUgdXN1YWxseSBkZWZpbmVkIHVzaW5nIHRoZSBgY2xhc3NgIGtleXdvcmQsIGJ1dCB0aGV5IGNhbiBhbHNvIGJlXG4gKiAgIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIGEgY2xhc3MgZXhwcmVzc2lvbiAoZS5nLlxuICogICBgbGV0IEZvbyA9IEZvbzEgPSBjbGFzcyBGb28ge31gKS5cbiAqIC0gSW4gRVM1IGNvZGUsIHRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIGFzIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBiZWluZyBhc3NpZ25lZCB0aGUgcmV0dXJuXG4gKiAgIHZhbHVlIG9mIGFuIElJRkUuIFRoZSBhY3R1YWwgXCJjbGFzc1wiIGlzIGltcGxlbWVudGVkIGFzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gaW5zaWRlIHRoZSBJSUZFLFxuICogICBidXQgdGhlIG91dGVyIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHJlcHJlc2VudHMgdGhlIFwiY2xhc3NcIiB0byB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBGb3IgYFJlZmxlY3Rpb25Ib3N0YCBwdXJwb3NlcywgYSBjbGFzcyBkZWNsYXJhdGlvbiBzaG91bGQgYWx3YXlzIGhhdmUgYSBgbmFtZWAgaWRlbnRpZmllcixcbiAqIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlZmVyZW5jZSBpdCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgcHJvZ3JhbS5cbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3NEZWNsYXJhdGlvbjxUIGV4dGVuZHMgdHMuRGVjbGFyYXRpb24gPSB0cy5EZWNsYXJhdGlvbj4gPSBUJntuYW1lOiB0cy5JZGVudGlmaWVyfTtcblxuLyoqXG4gKiBBbiBlbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBraW5kcyBvZiBjbGFzcyBtZW1iZXJzLlxuICovXG5leHBvcnQgZW51bSBDbGFzc01lbWJlcktpbmQge1xuICBDb25zdHJ1Y3RvcixcbiAgR2V0dGVyLFxuICBTZXR0ZXIsXG4gIFByb3BlcnR5LFxuICBNZXRob2QsXG59XG5cbi8qKlxuICogQSBtZW1iZXIgb2YgYSBjbGFzcywgc3VjaCBhcyBhIHByb3BlcnR5LCBtZXRob2QsIG9yIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsYXNzTWVtYmVyIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgcmVmZXJlbmNlIHRvIHRoZSBjbGFzcyBtZW1iZXIgaXRzZWxmLCBvciBudWxsIGlmIGl0IGlzIG5vdCBhcHBsaWNhYmxlLlxuICAgKi9cbiAgbm9kZTogdHMuTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0aW9uIG9mIHdoaWNoIHR5cGUgb2YgbWVtYmVyIHRoaXMgaXMgKHByb3BlcnR5LCBtZXRob2QsIGV0YykuXG4gICAqL1xuICBraW5kOiBDbGFzc01lbWJlcktpbmQ7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLlR5cGVOb2RlYCByZXByZXNlbnRpbmcgdGhlIHR5cGUgb2YgdGhlIG1lbWJlciwgb3IgYG51bGxgIGlmIG5vdCBwcmVzZW50IG9yXG4gICAqIGFwcGxpY2FibGUuXG4gICAqL1xuICB0eXBlOiB0cy5UeXBlTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjbGFzcyBtZW1iZXIuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLklkZW50aWZpZXJgIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbWVtYmVyLCBvciBgbnVsbGAgaWYgbm8gc3VjaCBub2RlXG4gICAqIGlzIHByZXNlbnQuXG4gICAqXG4gICAqIFRoZSBgbmFtZU5vZGVgIGlzIHVzZWZ1bCBpbiB3cml0aW5nIHJlZmVyZW5jZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCB3aWxsIGJlIGNvcnJlY3RseSBzb3VyY2UtXG4gICAqIG1hcHBlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxlLlxuICAgKi9cbiAgbmFtZU5vZGU6IHRzLklkZW50aWZpZXJ8bnVsbDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuRXhwcmVzc2lvbmAgd2hpY2ggcmVwcmVzZW50cyB0aGUgdmFsdWUgb2YgdGhlIG1lbWJlci5cbiAgICpcbiAgICogSWYgdGhlIG1lbWJlciBpcyBhIHByb3BlcnR5LCB0aGlzIHdpbGwgYmUgdGhlIHByb3BlcnR5IGluaXRpYWxpemVyIGlmIHRoZXJlIGlzIG9uZSwgb3IgbnVsbFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICB2YWx1ZTogdHMuRXhwcmVzc2lvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAgd2hpY2ggcmVwcmVzZW50cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1lbWJlci5cbiAgICpcbiAgICogSW4gVHlwZVNjcmlwdCBjb2RlIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBub2RlLCBidXQgaW4gZG93bmxldmVsZWQgY29kZSB0aGlzIHNob3VsZCBhbHdheXMgYmVcbiAgICogdGhlIERlY2xhcmF0aW9uIHdoaWNoIGFjdHVhbGx5IHJlcHJlc2VudHMgdGhlIG1lbWJlcidzIHJ1bnRpbWUgdmFsdWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGUgVFMgY29kZTpcbiAgICpcbiAgICogYGBgXG4gICAqIGNsYXNzIENsYXp6IHtcbiAgICogICBzdGF0aWMgZ2V0IHByb3BlcnR5KCk6IHN0cmluZyB7XG4gICAqICAgICByZXR1cm4gJ3ZhbHVlJztcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIERvd25sZXZlbHMgdG86XG4gICAqXG4gICAqIGBgYFxuICAgKiB2YXIgQ2xhenogPSAoZnVuY3Rpb24gKCkge1xuICAgKiAgIGZ1bmN0aW9uIENsYXp6KCkge1xuICAgKiAgIH1cbiAgICogICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhenosIFwicHJvcGVydHlcIiwge1xuICAgKiAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICogICAgICAgICAgIHJldHVybiAndmFsdWUnO1xuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICogICB9KTtcbiAgICogICByZXR1cm4gQ2xheno7XG4gICAqIH0oKSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBJbiB0aGlzIGV4YW1wbGUsIGZvciB0aGUgcHJvcGVydHkgXCJwcm9wZXJ0eVwiLCB0aGUgbm9kZSB3b3VsZCBiZSB0aGUgZW50aXJlXG4gICAqIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBFeHByZXNzaW9uU3RhdGVtZW50LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIHdvdWxkIGJlIHRoaXNcbiAgICogRnVuY3Rpb25EZWNsYXJhdGlvbjpcbiAgICpcbiAgICogYGBgXG4gICAqIGZ1bmN0aW9uICgpIHtcbiAgICogICByZXR1cm4gJ3ZhbHVlJztcbiAgICogfSxcbiAgICogYGBgXG4gICAqL1xuICBpbXBsZW1lbnRhdGlvbjogdHMuRGVjbGFyYXRpb258bnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbWVtYmVyIGlzIHN0YXRpYyBvciBub3QuXG4gICAqL1xuICBpc1N0YXRpYzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW55IGBEZWNvcmF0b3JgcyB3aGljaCBhcmUgcHJlc2VudCBvbiB0aGUgbWVtYmVyLCBvciBgbnVsbGAgaWYgbm9uZSBhcmUgcHJlc2VudC5cbiAgICovXG4gIGRlY29yYXRvcnM6IERlY29yYXRvcltdfG51bGw7XG59XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSB2YWx1ZSB0aGF0IG9yaWdpbmF0ZWQgZnJvbSBhIHR5cGUgcG9zaXRpb24uXG4gKlxuICogRm9yIGV4YW1wbGUsIGEgY29uc3RydWN0b3IgcGFyYW1ldGVyIGNvdWxkIGJlIGRlY2xhcmVkIGFzIGBmb286IEZvb2AuIEEgYFR5cGVWYWx1ZVJlZmVyZW5jZWBcbiAqIGV4dHJhY3RlZCBmcm9tIHRoaXMgd291bGQgcmVmZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBjbGFzcyBgRm9vYCAoYXNzdW1pbmcgaXQgd2FzIGFjdHVhbGx5IGFcbiAqIHR5cGUpLlxuICpcbiAqIFRoZXJlIGFyZSB0d28ga2luZHMgb2Ygc3VjaCByZWZlcmVuY2VzLiBBIHJlZmVyZW5jZSB3aXRoIGBsb2NhbDogZmFsc2VgIHJlZmVycyB0byBhIHR5cGUgdGhhdCB3YXNcbiAqIGltcG9ydGVkLCBhbmQgZ2l2ZXMgdGhlIHN5bWJvbCBgbmFtZWAgYW5kIHRoZSBgbW9kdWxlTmFtZWAgb2YgdGhlIGltcG9ydC4gTm90ZSB0aGF0IHRoaXNcbiAqIGBtb2R1bGVOYW1lYCBtYXkgYmUgYSByZWxhdGl2ZSBwYXRoLCBhbmQgdGh1cyBpcyBsaWtlbHkgb25seSB2YWxpZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZpbGVcbiAqIHdoaWNoIGNvbnRhaW5lZCB0aGUgb3JpZ2luYWwgdHlwZSByZWZlcmVuY2UuXG4gKlxuICogQSByZWZlcmVuY2Ugd2l0aCBgbG9jYWw6IHRydWVgIHJlZmVycyB0byBhbnkgb3RoZXIga2luZCBvZiB0eXBlIHZpYSBhIGB0cy5FeHByZXNzaW9uYCB0aGF0J3NcbiAqIHZhbGlkIHdpdGhpbiB0aGUgbG9jYWwgZmlsZSB3aGVyZSB0aGUgdHlwZSB3YXMgcmVmZXJlbmNlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVHlwZVZhbHVlUmVmZXJlbmNlID0ge1xuICBsb2NhbDogdHJ1ZTsgZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbjsgZGVmYXVsdEltcG9ydFN0YXRlbWVudDogdHMuSW1wb3J0RGVjbGFyYXRpb24gfCBudWxsO1xufXx7XG4gIGxvY2FsOiBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBzcGVjaWZpZXIgZnJvbSB3aGljaCB0aGUgYGltcG9ydGVkTmFtZWAgc3ltYm9sIHNob3VsZCBiZSBpbXBvcnRlZC5cbiAgICovXG4gIG1vZHVsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBzeW1ib2wgdGhhdCBpcyBpbXBvcnRlZCBmcm9tIGBtb2R1bGVOYW1lYC4gSWYgYG5lc3RlZFBhdGhgIGlzIGFsc29cbiAgICogcHJlc2VudCwgYSBuZXN0ZWQgb2JqZWN0IGlzIGJlaW5nIHJlZmVyZW5jZWQgZnJvbSB0aGUgdG9wLWxldmVsIHN5bWJvbC5cbiAgICovXG4gIGltcG9ydGVkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCByZXByZXNlbnRzIHRoZSBzeW1ib2wgbmFtZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgaW1wb3J0LlxuICAgKiBXaGVuIGBudWxsYCBvciBlbXB0eSwgdGhlIGBpbXBvcnRlZE5hbWVgIGl0c2VsZiBpcyB0aGUgc3ltYm9sIGJlaW5nIHJlZmVyZW5jZWQuXG4gICAqL1xuICBuZXN0ZWRQYXRoOiBzdHJpbmdbXXxudWxsO1xuXG4gIHZhbHVlRGVjbGFyYXRpb246IHRzLkRlY2xhcmF0aW9uO1xufTtcblxuLyoqXG4gKiBBIHBhcmFtZXRlciB0byBhIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN0b3JQYXJhbWV0ZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyLCBpZiBhdmFpbGFibGUuXG4gICAqXG4gICAqIFNvbWUgcGFyYW1ldGVycyBkb24ndCBoYXZlIGEgc2ltcGxlIHN0cmluZyBuYW1lIChmb3IgZXhhbXBsZSwgcGFyYW1ldGVycyB3aGljaCBhcmUgZGVzdHJ1Y3R1cmVkXG4gICAqIGludG8gbXVsdGlwbGUgdmFyaWFibGVzKS4gSW4gdGhlc2UgY2FzZXMsIGBuYW1lYCBjYW4gYmUgYG51bGxgLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLkJpbmRpbmdOYW1lYCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICpcbiAgICogVGhlIGBuYW1lTm9kZWAgaXMgdXNlZnVsIGluIHdyaXRpbmcgcmVmZXJlbmNlcyB0byB0aGlzIG1lbWJlciB0aGF0IHdpbGwgYmUgY29ycmVjdGx5IHNvdXJjZS1cbiAgICogbWFwcGVkIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGZpbGUuXG4gICAqL1xuICBuYW1lTm9kZTogdHMuQmluZGluZ05hbWU7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlcidzIHR5cGUgYW5ub3RhdGlvbiwgaWYgaXQncyBwb3NzaWJsZSB0byByZWZlciB0byB0aGVcbiAgICogcGFyYW1ldGVyJ3MgdHlwZSBhcyBhIHZhbHVlLlxuICAgKlxuICAgKiBUaGlzIGNhbiBlaXRoZXIgYmUgYSByZWZlcmVuY2UgdG8gYSBsb2NhbCB2YWx1ZSwgaW4gd2hpY2ggY2FzZSBpdCBoYXMgYGxvY2FsYCBzZXQgdG8gYHRydWVgIGFuZFxuICAgKiBjb250YWlucyBhIGB0cy5FeHByZXNzaW9uYCwgb3IgaXQncyBhIHJlZmVyZW5jZSB0byBhbiBpbXBvcnRlZCB2YWx1ZSwgaW4gd2hpY2ggY2FzZSBgbG9jYWxgIGlzXG4gICAqIHNldCB0byBgZmFsc2VgIGFuZCB0aGUgc3ltYm9sIGFuZCBtb2R1bGUgbmFtZSBvZiB0aGUgaW1wb3J0ZWQgdmFsdWUgYXJlIHByb3ZpZGVkIGluc3RlYWQuXG4gICAqXG4gICAqIElmIHRoZSB0eXBlIGlzIG5vdCBwcmVzZW50IG9yIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhbiBleHByZXNzaW9uLCBgdHlwZVZhbHVlUmVmZXJlbmNlYCBpc1xuICAgKiBgbnVsbGAuXG4gICAqL1xuICB0eXBlVmFsdWVSZWZlcmVuY2U6IFR5cGVWYWx1ZVJlZmVyZW5jZXxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5UeXBlTm9kZWAgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG5vZGUgZm91bmQgaW4gdGhlIHR5cGUgcG9zaXRpb24uXG4gICAqXG4gICAqIFRoaXMgZmllbGQgY2FuIGJlIHVzZWQgZm9yIGRpYWdub3N0aWNzIHJlcG9ydGluZyBpZiBgdHlwZVZhbHVlUmVmZXJlbmNlYCBpcyBgbnVsbGAuXG4gICAqXG4gICAqIENhbiBiZSBudWxsLCBpZiB0aGUgcGFyYW0gaGFzIG5vIHR5cGUgZGVjbGFyZWQuXG4gICAqL1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGV8bnVsbDtcblxuICAvKipcbiAgICogQW55IGBEZWNvcmF0b3JgcyB3aGljaCBhcmUgcHJlc2VudCBvbiB0aGUgcGFyYW1ldGVyLCBvciBgbnVsbGAgaWYgbm9uZSBhcmUgcHJlc2VudC5cbiAgICovXG4gIGRlY29yYXRvcnM6IERlY29yYXRvcltdfG51bGw7XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIGZ1bmN0aW9uIG9yIG1ldGhvZCwgaW5jbHVkaW5nIGl0cyBib2R5IGlmIHByZXNlbnQgYW5kIGFueSBwYXJhbWV0ZXJzLlxuICpcbiAqIEluIFR5cGVTY3JpcHQgY29kZSB0aGlzIG1ldGFkYXRhIHdpbGwgYmUgYSBzaW1wbGUgcmVmbGVjdGlvbiBvZiB0aGUgZGVjbGFyYXRpb25zIGluIHRoZSBub2RlXG4gKiBpdHNlbGYuIEluIEVTNSBjb2RlIHRoaXMgY2FuIGJlIG1vcmUgY29tcGxpY2F0ZWQsIGFzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycyBtYXlcbiAqIGJlIGV4dHJhY3RlZCBmcm9tIGNlcnRhaW4gYm9keSBzdGF0ZW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgbm9kZSB3aGljaCBkZWNsYXJlcyB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICBub2RlOiB0cy5NZXRob2REZWNsYXJhdGlvbnx0cy5GdW5jdGlvbkRlY2xhcmF0aW9ufHRzLkZ1bmN0aW9uRXhwcmVzc2lvbnx0cy5WYXJpYWJsZURlY2xhcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnRzIG9mIHRoZSBmdW5jdGlvbiBib2R5LCBpZiBhIGJvZHkgaXMgcHJlc2VudCwgb3IgbnVsbCBpZiBubyBib2R5IGlzIHByZXNlbnQgb3IgdGhlXG4gICAqIGZ1bmN0aW9uIGlzIGlkZW50aWZpZWQgdG8gcmVwcmVzZW50IGEgdHNsaWIgaGVscGVyIGZ1bmN0aW9uLCBpbiB3aGljaCBjYXNlIGBoZWxwZXJgIHdpbGxcbiAgICogaW5kaWNhdGUgd2hpY2ggaGVscGVyIHRoaXMgZnVuY3Rpb24gcmVwcmVzZW50cy5cbiAgICpcbiAgICogVGhpcyBsaXN0IG1heSBoYXZlIGJlZW4gZmlsdGVyZWQgdG8gZXhjbHVkZSBzdGF0ZW1lbnRzIHdoaWNoIHBlcmZvcm0gcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVcbiAgICogaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICBib2R5OiB0cy5TdGF0ZW1lbnRbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSByZWdhcmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycywgaW5jbHVkaW5nIHBvc3NpYmxlIGRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbnMuXG4gICAqL1xuICBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXTtcbn1cblxuLyoqXG4gKiBQb3NzaWJsZSBkZWNsYXJhdGlvbnMgb2Yga25vd24gdmFsdWVzLCBzdWNoIGFzIGJ1aWx0LWluIG9iamVjdHMvZnVuY3Rpb25zIG9yIFR5cGVTY3JpcHQgaGVscGVycy5cbiAqL1xuZXhwb3J0IGVudW0gS25vd25EZWNsYXJhdGlvbiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIEphdmFTY3JpcHQgZ2xvYmFsIGBPYmplY3RgIGNsYXNzLlxuICAgKi9cbiAgSnNHbG9iYWxPYmplY3QsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fYXNzaWduYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyQXNzaWduLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX3NwcmVhZGAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlclNwcmVhZCxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBgX19zcHJlYWRBcnJheXNgIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgVHNIZWxwZXJTcHJlYWRBcnJheXMsXG59XG5cbi8qKlxuICogQSBwYXJhbWV0ZXIgdG8gYSBmdW5jdGlvbiBvciBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIERlY2xhcmF0aW9uIHdoaWNoIGNyZWF0ZWQgdGhpcyBwYXJhbWV0ZXIuXG4gICAqL1xuICBub2RlOiB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbjtcblxuICAvKipcbiAgICogRXhwcmVzc2lvbiB3aGljaCByZXByZXNlbnRzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIGlmIGFueS5cbiAgICovXG4gIGluaXRpYWxpemVyOiB0cy5FeHByZXNzaW9ufG51bGw7XG59XG5cbi8qKlxuICogVGhlIHNvdXJjZSBvZiBhbiBpbXBvcnRlZCBzeW1ib2wsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgc3ltYm9sIG5hbWUgYW5kIHRoZSBtb2R1bGUgZnJvbSB3aGljaCBpdFxuICogd2FzIGltcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1wb3J0ZWQgc3ltYm9sIHVuZGVyIHdoaWNoIGl0IHdhcyBleHBvcnRlZCAobm90IGltcG9ydGVkKS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBmcm9tIHdoaWNoIHRoZSBzeW1ib2wgd2FzIGltcG9ydGVkLlxuICAgKlxuICAgKiBUaGlzIGNvdWxkIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBtb2R1bGUgbmFtZSAoQGFuZ3VsYXIvY29yZSBmb3IgZXhhbXBsZSkgb3IgYSByZWxhdGl2ZSBwYXRoLlxuICAgKi9cbiAgZnJvbTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhc2UgdHlwZSBmb3IgYWxsIGBEZWNsYXJhdGlvbmBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEZWNsYXJhdGlvbjxUIGV4dGVuZHMgdHMuRGVjbGFyYXRpb24gPSB0cy5EZWNsYXJhdGlvbj4ge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIG1vZHVsZSBwYXRoIGZyb20gd2hpY2ggdGhlIHN5bWJvbCB3YXMgaW1wb3J0ZWQgaW50byB0aGUgYXBwbGljYXRpb24sIGlmIHRoZSBzeW1ib2xcbiAgICogd2FzIGltcG9ydGVkIHZpYSBhbiBhYnNvbHV0ZSBtb2R1bGUgKGV2ZW4gdGhyb3VnaCBhIGNoYWluIG9mIHJlLWV4cG9ydHMpLiBJZiB0aGUgc3ltYm9sIGlzIHBhcnRcbiAgICogb2YgdGhlIGFwcGxpY2F0aW9uIGFuZCB3YXMgbm90IGltcG9ydGVkIGZyb20gYW4gYWJzb2x1dGUgcGF0aCwgdGhpcyB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHZpYU1vZHVsZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgcmVmZXJlbmNlIHRvIHRoZSBkZWNsYXJhdGlvbiBpdHNlbGYsIGlmIG9uZSBleGlzdHMuXG4gICAqL1xuICBub2RlOiBUfG51bGw7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBrbm93biBkZWNsYXJhdGlvbiB0aGlzIGRlY2xhcmF0aW9uIHJlc29sdmVzIHRvLlxuICAgKi9cbiAga25vd246IEtub3duRGVjbGFyYXRpb258bnVsbDtcbn1cblxuLyoqXG4gKiBBIGRlY2xhcmF0aW9uIHRoYXQgaGFzIGFuIGFzc29jaWF0ZWQgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gLlxuICpcbiAqIFRoZSBhbHRlcm5hdGl2ZSBpcyBhbiBgSW5saW5lRGVjbGFyYXRpb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmNyZXRlRGVjbGFyYXRpb248VCBleHRlbmRzIHRzLkRlY2xhcmF0aW9uID0gdHMuRGVjbGFyYXRpb24+IGV4dGVuZHNcbiAgICBCYXNlRGVjbGFyYXRpb248VD4ge1xuICBub2RlOiBUO1xufVxuXG4vKipcbiAqIEEgZGVjbGFyYXRpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gLCBvbmx5IGFcbiAqIGB0cy5FeHByZXNzaW9uYC5cbiAqXG4gKiBUaGlzIGNhbiBvY2N1ciBpbiBzb21lIGRvd25sZXZlbGluZ3Mgd2hlbiBhbiBgZXhwb3J0IGNvbnN0IFZBUiA9IC4uLjtgIChhIGB0cy5EZWNsYXJhdGlvbmApIGlzXG4gKiB0cmFuc3BpbGVkIHRvIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50IChlLmcuIGBleHBvcnRzLlZBUiA9IC4uLjtgKS4gVGhlcmUgaXMgbm8gYHRzLkRlY2xhcmF0aW9uYFxuICogYXNzb2NpYXRlZCB3aXRoIGBWQVJgIGluIHRoYXQgY2FzZSwgb25seSBhbiBleHByZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElubGluZURlY2xhcmF0aW9uIGV4dGVuZHMgQmFzZURlY2xhcmF0aW9uIHtcbiAgbm9kZTogbnVsbDtcblxuICAvKipcbiAgICogVGhlIGB0cy5FeHByZXNzaW9uYCB3aGljaCBjb25zdGl0dXRlcyB0aGUgdmFsdWUgb2YgdGhlIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBUaGUgZGVjbGFyYXRpb24gb2YgYSBzeW1ib2wsIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgaG93IGl0IHdhcyBpbXBvcnRlZCBpbnRvIHRoZVxuICogYXBwbGljYXRpb24uXG4gKlxuICogVGhpcyBjYW4gZWl0aGVyIGJlIGEgYENvbmNyZXRlRGVjbGFyYXRpb25gIGlmIHRoZSB1bmRlcmx5aW5nIFR5cGVTY3JpcHQgbm9kZSBmb3IgdGhlIHN5bWJvbCBpcyBhblxuICogYWN0dWFsIGB0cy5EZWNsYXJhdGlvbmAsIG9yIGFuIGBJbmxpbmVEZWNsYXJhdGlvbmAgaWYgdGhlIGRlY2xhcmF0aW9uIHdhcyB0cmFuc3BpbGVkIGluIGNlcnRhaW5cbiAqIGRvd25sZXZlbGluZ3MgdG8gYSBgdHMuRXhwcmVzc2lvbmAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjbGFyYXRpb248VCBleHRlbmRzIHRzLkRlY2xhcmF0aW9uID0gdHMuRGVjbGFyYXRpb24+ID1cbiAgICBDb25jcmV0ZURlY2xhcmF0aW9uPFQ+fElubGluZURlY2xhcmF0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0cyByZWZsZWN0aW9uIG9wZXJhdGlvbnMgb24gYSBUeXBlU2NyaXB0IEFTVC5cbiAqXG4gKiBEZXBlbmRpbmcgb24gdGhlIGZvcm1hdCBvZiB0aGUgY29kZSBiZWluZyBpbnRlcnByZXRlZCwgZGlmZmVyZW50IGNvbmNlcHRzIGFyZSByZXByZXNlbnRlZFxuICogd2l0aCBkaWZmZXJlbnQgc3ludGFjdGljYWwgc3RydWN0dXJlcy4gVGhlIGBSZWZsZWN0aW9uSG9zdGAgYWJzdHJhY3RzIG92ZXIgdGhvc2UgZGlmZmVyZW5jZXMgYW5kXG4gKiBwcmVzZW50cyBhIHNpbmdsZSBBUEkgYnkgd2hpY2ggdGhlIGNvbXBpbGVyIGNhbiBxdWVyeSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQVNULlxuICpcbiAqIEFsbCBvcGVyYXRpb25zIG9uIHRoZSBgUmVmbGVjdGlvbkhvc3RgIHJlcXVpcmUgdGhlIHVzZSBvZiBUeXBlU2NyaXB0IGB0cy5Ob2RlYHMgd2l0aCBiaW5kaW5nXG4gKiBpbmZvcm1hdGlvbiBhbHJlYWR5IGF2YWlsYWJsZSAodGhhdCBpcywgbm9kZXMgdGhhdCBjb21lIGZyb20gYSBgdHMuUHJvZ3JhbWAgdGhhdCBoYXMgYmVlblxuICogdHlwZS1jaGVja2VkLCBhbmQgYXJlIG5vdCBzeW50aGV0aWNhbGx5IGNyZWF0ZWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZmxlY3Rpb25Ib3N0IHtcbiAgLyoqXG4gICAqIEV4YW1pbmUgYSBkZWNsYXJhdGlvbiAoZm9yIGV4YW1wbGUsIG9mIGEgY2xhc3Mgb3IgZnVuY3Rpb24pIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgYW55XG4gICAqIGRlY29yYXRvcnMgcHJlc2VudCBvbiB0aGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBkZWNsYXJhdGlvbiBhIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYCBub2RlIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3IgZnVuY3Rpb24gb3ZlclxuICAgKiB3aGljaCB0byByZWZsZWN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGludGVudCBpcyB0byByZWZsZWN0IHRoZSBkZWNvcmF0b3JzIG9mIGEgY2xhc3MgYW5kIHRoZVxuICAgKiBzb3VyY2UgaXMgaW4gRVM2IGZvcm1hdCwgdGhpcyB3aWxsIGJlIGEgYHRzLkNsYXNzRGVjbGFyYXRpb25gIG5vZGUuIElmIHRoZSBzb3VyY2UgaXMgaW4gRVM1XG4gICAqIGZvcm1hdCwgdGhpcyBtaWdodCBiZSBhIGB0cy5WYXJpYWJsZURlY2xhcmF0aW9uYCBhcyBjbGFzc2VzIGluIEVTNSBhcmUgcmVwcmVzZW50ZWQgYXMgdGhlXG4gICAqIHJlc3VsdCBvZiBhbiBJSUZFIGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYERlY29yYXRvcmAgbWV0YWRhdGEgaWYgZGVjb3JhdG9ycyBhcmUgcHJlc2VudCBvbiB0aGUgZGVjbGFyYXRpb24sIG9yXG4gICAqIGBudWxsYCBpZiBlaXRoZXIgbm8gZGVjb3JhdG9ycyB3ZXJlIHByZXNlbnQgb3IgaWYgdGhlIGRlY2xhcmF0aW9uIGlzIG5vdCBvZiBhIGRlY29yYXRhYmxlIHR5cGUuXG4gICAqL1xuICBnZXREZWNvcmF0b3JzT2ZEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb24pOiBEZWNvcmF0b3JbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBFeGFtaW5lIGEgZGVjbGFyYXRpb24gd2hpY2ggc2hvdWxkIGJlIG9mIGEgY2xhc3MsIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgdGhlIG1lbWJlcnMgb2YgdGhlXG4gICAqIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGBDbGFzc01lbWJlcmAgbWV0YWRhdGEgcmVwcmVzZW50aW5nIHRoZSBtZW1iZXJzIG9mIHRoZSBjbGFzcy5cbiAgICpcbiAgICogQHRocm93cyBpZiBgZGVjbGFyYXRpb25gIGRvZXMgbm90IHJlc29sdmUgdG8gYSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAgICovXG4gIGdldE1lbWJlcnNPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogQ2xhc3NNZW1iZXJbXTtcblxuICAvKipcbiAgICogUmVmbGVjdCBvdmVyIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGNsYXNzIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgaXRzIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG9ubHkgbG9va3MgYXQgdGhlIGNvbnN0cnVjdG9yIG9mIGEgY2xhc3MgZGlyZWN0bHkgYW5kIG5vdCBhdCBhbnkgaW5oZXJpdGVkXG4gICAqIGNvbnN0cnVjdG9ycy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgUGFyYW1ldGVyYCBtZXRhZGF0YSByZXByZXNlbnRpbmcgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGNvbnN0cnVjdG9yLCBpZlxuICAgKiBhIGNvbnN0cnVjdG9yIGV4aXN0cy4gSWYgdGhlIGNvbnN0cnVjdG9yIGV4aXN0cyBhbmQgaGFzIDAgcGFyYW1ldGVycywgdGhpcyBhcnJheSB3aWxsIGJlIGVtcHR5LlxuICAgKiBJZiB0aGUgY2xhc3MgaGFzIG5vIGNvbnN0cnVjdG9yLCB0aGlzIG1ldGhvZCByZXR1cm5zIGBudWxsYC5cbiAgICovXG4gIGdldENvbnN0cnVjdG9yUGFyYW1ldGVycyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IEN0b3JQYXJhbWV0ZXJbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBSZWZsZWN0IG92ZXIgYSBmdW5jdGlvbiBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IGl0cyBwYXJhbWV0ZXJzIGFuZCBib2R5LlxuICAgKlxuICAgKiBGdW5jdGlvbnMgaW4gVHlwZVNjcmlwdCBhbmQgRVM1IGNvZGUgaGF2ZSBkaWZmZXJlbnQgQVNUIHJlcHJlc2VudGF0aW9ucywgaW4gcGFydGljdWxhciBhcm91bmRcbiAgICogZGVmYXVsdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMuIEEgVHlwZVNjcmlwdCBmdW5jdGlvbiBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgYXMgdGhlIGluaXRpYWxpemVyXG4gICAqIG9uIHRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24sIHdoZXJlYXMgYW4gRVM1IGZ1bmN0aW9uIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQgaW4gYSBzdGF0ZW1lbnRcbiAgICogb2YgdGhlIGZvcm06XG4gICAqXG4gICAqIGlmIChwYXJhbSA9PT0gdm9pZCAwKSB7IHBhcmFtID0gMzsgfVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhYnN0cmFjdHMgb3ZlciB0aGVzZSBkZXRhaWxzLCBhbmQgaW50ZXJwcmV0cyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIGJvZHkgdG9cbiAgICogZXh0cmFjdCBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMgYW5kIHRoZSBcInJlYWxcIiBib2R5LlxuICAgKlxuICAgKiBBIGN1cnJlbnQgbGltaXRhdGlvbiBpcyB0aGF0IHRoaXMgbWV0YWRhdGEgaGFzIG5vIHJlcHJlc2VudGF0aW9uIGZvciBzaG9ydGhhbmQgYXNzaWdubWVudCBvZlxuICAgKiBwYXJhbWV0ZXIgb2JqZWN0cyBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gYSBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAgbm9kZSByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgYSBgRnVuY3Rpb25EZWZpbml0aW9uYCBnaXZpbmcgbWV0YWRhdGEgYWJvdXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uXG4gICAqL1xuICBnZXREZWZpbml0aW9uT2ZGdW5jdGlvbihmbjogdHMuTm9kZSk6IEZ1bmN0aW9uRGVmaW5pdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgYW4gaWRlbnRpZmllciB3YXMgaW1wb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZSBhbmQgcmV0dXJuIGBJbXBvcnRgIG1ldGFkYXRhXG4gICAqIGRlc2NyaWJpbmcgaXRzIG9yaWdpbi5cbiAgICpcbiAgICogQHBhcmFtIGlkIGEgVHlwZVNjcmlwdCBgdHMuSWRlbnRpZmVyYCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBtZXRhZGF0YSBhYm91dCB0aGUgYEltcG9ydGAgaWYgdGhlIGlkZW50aWZpZXIgd2FzIGltcG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUsIG9yXG4gICAqIGBudWxsYCBpZiB0aGUgaWRlbnRpZmllciBkb2Vzbid0IHJlc29sdmUgdG8gYW4gaW1wb3J0IGJ1dCBpbnN0ZWFkIGlzIGxvY2FsbHkgZGVmaW5lZC5cbiAgICovXG4gIGdldEltcG9ydE9mSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IEltcG9ydHxudWxsO1xuXG4gIC8qKlxuICAgKiBUcmFjZSBhbiBpZGVudGlmaWVyIHRvIGl0cyBkZWNsYXJhdGlvbiwgaWYgcG9zc2libGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBnaXZlbiBpZGVudGlmaWVyLCB0cmFjaW5nIGJhY2sgdGhyb3VnaFxuICAgKiBpbXBvcnRzIGFuZCByZS1leHBvcnRzIHVudGlsIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQgaXMgZm91bmQuIEEgYERlY2xhcmF0aW9uYFxuICAgKiBvYmplY3QgaXMgcmV0dXJuZWQgaWYgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIGlzIGZvdW5kLCBvciBgbnVsbGAgaXMgcmV0dXJuZWQgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBJZiB0aGUgZGVjbGFyYXRpb24gaXMgaW4gYSBkaWZmZXJlbnQgbW9kdWxlLCBhbmQgdGhhdCBtb2R1bGUgaXMgaW1wb3J0ZWQgdmlhIGFuIGFic29sdXRlIHBhdGgsXG4gICAqIHRoaXMgbWV0aG9kIGFsc28gcmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvZGUgaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gICAqXG4gICAqIGV4cG9ydCBjb25zdCBST1VURVMgPSBSb3V0ZXJNb2R1bGUuZm9yUm9vdChbLi4uXSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBhbmQgaWYgYGdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyYCBpcyBjYWxsZWQgb24gYFJvdXRlck1vZHVsZWAgaW4gdGhlIGBST1VURVNgIGV4cHJlc3Npb24sXG4gICAqIHRoZW4gaXQgd291bGQgdHJhY2UgYFJvdXRlck1vZHVsZWAgdmlhIGl0cyBpbXBvcnQgZnJvbSBgQGFuZ3VsYXIvY29yZWAsIGFuZCBub3RlIHRoYXQgdGhlXG4gICAqIGRlZmluaXRpb24gd2FzIGltcG9ydGVkIGZyb20gYEBhbmd1bGFyL2NvcmVgIGludG8gdGhlIGFwcGxpY2F0aW9uIHdoZXJlIGl0IHdhcyByZWZlcmVuY2VkLlxuICAgKlxuICAgKiBJZiB0aGUgZGVmaW5pdGlvbiBpcyByZS1leHBvcnRlZCBzZXZlcmFsIHRpbWVzIGZyb20gZGlmZmVyZW50IGFic29sdXRlIG1vZHVsZSBuYW1lcywgb25seVxuICAgKiB0aGUgZmlyc3Qgb25lICh0aGUgb25lIGJ5IHdoaWNoIHRoZSBhcHBsaWNhdGlvbiByZWZlcnMgdG8gdGhlIG1vZHVsZSkgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIFRoaXMgbW9kdWxlIG5hbWUgaXMgcmV0dXJuZWQgaW4gdGhlIGB2aWFNb2R1bGVgIGZpZWxkIG9mIHRoZSBgRGVjbGFyYXRpb25gLiBJZiBUaGUgZGVjbGFyYXRpb25cbiAgICogaXMgcmVsYXRpdmUgdG8gdGhlIGFwcGxpY2F0aW9uIGl0c2VsZiBhbmQgdGhlcmUgd2FzIG5vIGltcG9ydCB0aHJvdWdoIGFuIGFic29sdXRlIHBhdGgsIHRoZW5cbiAgICogYHZpYU1vZHVsZWAgaXMgYG51bGxgLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgYSBUeXBlU2NyaXB0IGB0cy5JZGVudGlmaWVyYCB0byB0cmFjZSBiYWNrIHRvIGEgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIG1ldGFkYXRhIGFib3V0IHRoZSBgRGVjbGFyYXRpb25gIGlmIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBpcyBmb3VuZCwgb3IgYG51bGxgXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIGdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyKGlkOiB0cy5JZGVudGlmaWVyKTogRGVjbGFyYXRpb258bnVsbDtcblxuICAvKipcbiAgICogQ29sbGVjdCB0aGUgZGVjbGFyYXRpb25zIGV4cG9ydGVkIGZyb20gYSBtb2R1bGUgYnkgbmFtZS5cbiAgICpcbiAgICogSXRlcmF0ZXMgb3ZlciB0aGUgZXhwb3J0cyBvZiBhIG1vZHVsZSAoaW5jbHVkaW5nIHJlLWV4cG9ydHMpIGFuZCByZXR1cm5zIGEgbWFwIG9mIGV4cG9ydFxuICAgKiBuYW1lIHRvIGl0cyBgRGVjbGFyYXRpb25gLiBJZiBhbiBleHBvcnRlZCB2YWx1ZSBpcyBpdHNlbGYgcmUtZXhwb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZSxcbiAgICogdGhlIGBEZWNsYXJhdGlvbmAncyBgdmlhTW9kdWxlYCB3aWxsIHJlZmxlY3QgdGhhdC5cbiAgICpcbiAgICogQHBhcmFtIG5vZGUgYSBUeXBlU2NyaXB0IGB0cy5Ob2RlYCByZXByZXNlbnRpbmcgdGhlIG1vZHVsZSAoZm9yIGV4YW1wbGUgYSBgdHMuU291cmNlRmlsZWApIGZvclxuICAgKiB3aGljaCB0byBjb2xsZWN0IGV4cG9ydHMuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgbWFwIG9mIGBEZWNsYXJhdGlvbmBzIGZvciB0aGUgbW9kdWxlJ3MgZXhwb3J0cywgYnkgbmFtZS5cbiAgICovXG4gIGdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGU6IHRzLk5vZGUpOiBNYXA8c3RyaW5nLCBEZWNsYXJhdGlvbj58bnVsbDtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBhY3R1YWxseSByZXByZXNlbnRzIGEgY2xhc3MuXG4gICAqL1xuICBpc0NsYXNzKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIENsYXNzRGVjbGFyYXRpb247XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gZGVjbGFyYXRpb24sIHdoaWNoIHNob3VsZCBiZSBhIGNsYXNzLCBoYXMgYSBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqL1xuICBoYXNCYXNlQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZXQgYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGJhc2UgY2xhc3MgKGlmIGFueSkgb2YgdGhlIGdpdmVuIGBjbGF6emAuXG4gICAqXG4gICAqIFRoaXMgZXhwcmVzc2lvbiBpcyBtb3N0IGNvbW1vbmx5IGFuIElkZW50aWZpZXIsIGJ1dCBpcyBwb3NzaWJsZSB0byBpbmhlcml0IGZyb20gYSBtb3JlIGR5bmFtaWNcbiAgICogZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IHRoZSBjbGFzcyB3aG9zZSBiYXNlIHdlIHdhbnQgdG8gZ2V0LlxuICAgKi9cbiAgZ2V0QmFzZUNsYXNzRXhwcmVzc2lvbihjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgb2YgYSBnaXZlbiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgY2xhc3MsIGlmIGtub3duLCBvciBgbnVsbGAgaWYgdGhlIGRlY2xhcmF0aW9uXG4gICAqIGlzIG5vdCBhIGNsYXNzIG9yIGhhcyBhbiB1bmtub3duIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBnZXRHZW5lcmljQXJpdHlPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogbnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGFzc2lnbmVkIHZhbHVlIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIE5vcm1hbGx5IHRoaXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6ZXIgb2YgdGhlIGRlY2xhcmF0aW9uLCBidXQgd2hlcmUgdGhlIHZhcmlhYmxlIGlzXG4gICAqIG5vdCBhIGBjb25zdGAgd2UgbWF5IG5lZWQgdG8gbG9vayBlbHNld2hlcmUgZm9yIHRoZSB2YXJpYWJsZSdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gZGVjbGFyYXRpb24gYSBUeXBlU2NyaXB0IHZhcmlhYmxlIGRlY2xhcmF0aW9uLCB3aG9zZSB2YWx1ZSB3ZSB3YW50LlxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCBhcyBhIFR5cGVTY3JpcHQgZXhwcmVzc2lvbiBub2RlLCBvciBgdW5kZWZpbmVkYFxuICAgKiBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbXB1dGVkLlxuICAgKi9cbiAgZ2V0VmFyaWFibGVWYWx1ZShkZWNsYXJhdGlvbjogdHMuVmFyaWFibGVEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogVGFrZSBhbiBleHBvcnRlZCBkZWNsYXJhdGlvbiAobWF5YmUgYSBjbGFzcyBkb3duLWxldmVsZWQgdG8gYSB2YXJpYWJsZSkgYW5kIGxvb2sgdXAgdGhlXG4gICAqIGRlY2xhcmF0aW9uIG9mIGl0cyB0eXBlIGluIGEgc2VwYXJhdGUgLmQudHMgdHJlZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIHJldHVybiBgbnVsbGAgaWYgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCBkb2VzIG5vdCBoYXZlIGFcbiAgICogc2VwYXJhdGUgLmQudHMgdHJlZS4gV2hlbiBjb21waWxpbmcgVHlwZVNjcmlwdCBjb2RlIHRoaXMgaXMgYWx3YXlzIHRoZSBjYXNlLCBzaW5jZSAuZC50cyBmaWxlc1xuICAgKiBhcmUgcHJvZHVjZWQgb25seSBkdXJpbmcgdGhlIGVtaXQgb2Ygc3VjaCBhIGNvbXBpbGF0aW9uLiBXaGVuIGNvbXBpbGluZyAuanMgY29kZSwgaG93ZXZlcixcbiAgICogdGhlcmUgaXMgZnJlcXVlbnRseSBhIHBhcmFsbGVsIC5kLnRzIHRyZWUgd2hpY2ggdGhpcyBtZXRob2QgZXhwb3Nlcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBgdHMuRGVjbGFyYXRpb25gIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGZyb20gdGhlIHNhbWVcbiAgICogYHRzLlByb2dyYW1gIGFzIHRoZSBpbnB1dCBkZWNsYXJhdGlvbi5cbiAgICovXG4gIGdldER0c0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uOiB0cy5EZWNsYXJhdGlvbik6IHRzLkRlY2xhcmF0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCBhIGB0cy5JZGVudGlmaWVyYCBmb3IgYSBnaXZlbiBgQ2xhc3NEZWNsYXJhdGlvbmAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGNsYXNzXG4gICAqIHdpdGhpbiBpdHMgZGVmaW5pdGlvbiAoc3VjaCBhcyBpbiBzdGF0aWMgZmllbGRzKS5cbiAgICpcbiAgICogVGhpcyBjYW4gZGlmZmVyIGZyb20gYGNsYXp6Lm5hbWVgIHdoZW4gbmdjYyBydW5zIG92ZXIgRVM1IGNvZGUsIHNpbmNlIHRoZSBjbGFzcyBtYXkgaGF2ZSBhXG4gICAqIGRpZmZlcmVudCBuYW1lIHdpdGhpbiBpdHMgSUlGRSB3cmFwcGVyIHRoYW4gaXQgZG9lcyBleHRlcm5hbGx5LlxuICAgKi9cbiAgZ2V0SW50ZXJuYWxOYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIEdldCBhIGB0cy5JZGVudGlmaWVyYCBmb3IgYSBnaXZlbiBgQ2xhc3NEZWNsYXJhdGlvbmAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGNsYXNzXG4gICAqIGZyb20gc3RhdGVtZW50cyB0aGF0IGFyZSBcImFkamFjZW50XCIsIGFuZCBjb25jZXB0dWFsbHkgdGlnaHRseSBib3VuZCwgdG8gdGhlIGNsYXNzIGJ1dCBub3RcbiAgICogYWN0dWFsbHkgaW5zaWRlIGl0LlxuICAgKlxuICAgKiBTaW1pbGFyIHRvIGBnZXRJbnRlcm5hbE5hbWVPZkNsYXNzKClgLCB0aGlzIG5hbWUgY2FuIGRpZmZlciBmcm9tIGBjbGF6ei5uYW1lYCB3aGVuIG5nY2MgcnVuc1xuICAgKiBvdmVyIEVTNSBjb2RlLCBzaW5jZSB0aGVzZSBcImFkamFjZW50XCIgc3RhdGVtZW50cyBuZWVkIHRvIGV4aXN0IGluIHRoZSBJSUZFIHdoZXJlIHRoZSBjbGFzcyBtYXlcbiAgICogaGF2ZSBhIGRpZmZlcmVudCBuYW1lIHRoYW4gaXQgZG9lcyBleHRlcm5hbGx5LlxuICAgKi9cbiAgZ2V0QWRqYWNlbnROYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXI7XG59XG4iXX0=
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILCtCQUFpQztJQWtFcEIsUUFBQSxTQUFTLEdBQUc7UUFDdkIsWUFBWSxFQUFFLFVBQUMsU0FBb0I7WUFDakMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDM0IsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsT0FBUSxTQUFnQyxDQUFDLGNBQWMsQ0FBQzthQUN6RDtRQUNILENBQUM7S0FDRixDQUFDO0lBV0YsU0FBZ0IscUJBQXFCLENBQUMsR0FBa0I7UUFDdEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUN2QixFQUFFLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNyRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBSkQsc0RBSUM7SUFtQkQ7O09BRUc7SUFDSCxJQUFZLGVBTVg7SUFORCxXQUFZLGVBQWU7UUFDekIsbUVBQVcsQ0FBQTtRQUNYLHlEQUFNLENBQUE7UUFDTix5REFBTSxDQUFBO1FBQ04sNkRBQVEsQ0FBQTtRQUNSLHlEQUFNLENBQUE7SUFDUixDQUFDLEVBTlcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFNMUI7SUF5TkQ7O09BRUc7SUFDSCxJQUFZLGdCQW9CWDtJQXBCRCxXQUFZLGdCQUFnQjtRQUMxQjs7V0FFRztRQUNILDJFQUFjLENBQUE7UUFFZDs7V0FFRztRQUNILDJFQUFjLENBQUE7UUFFZDs7V0FFRztRQUNILDJFQUFjLENBQUE7UUFFZDs7V0FFRztRQUNILHVGQUFvQixDQUFBO0lBQ3RCLENBQUMsRUFwQlcsZ0JBQWdCLEdBQWhCLHdCQUFnQixLQUFoQix3QkFBZ0IsUUFvQjNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCBvciBzeW50aGVzaXplZCBmcm9tXG4gKiBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhIGNsYXNzLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3IgPSBDb25jcmV0ZURlY29yYXRvcnxTeW50aGV0aWNEZWNvcmF0b3I7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURlY29yYXRvciB7XG4gIC8qKlxuICAgKiBOYW1lIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGludm9rZWQgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGRpc3RpbmN0IGZyb20gdGhlIG5hbWUgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgaW1wb3J0ZWQgKHRob3VnaCBpbiBwcmFjdGljZSB0aGV5XG4gICAqIHdpbGwgdXN1YWxseSBiZSB0aGUgc2FtZSkuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgd2hpY2ggcmVmZXJzIHRvIHRoZSBkZWNvcmF0b3IgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKi9cbiAgaWRlbnRpZmllcjogRGVjb3JhdG9ySWRlbnRpZmllcnxudWxsO1xuXG4vKipcbiAqIGBJbXBvcnRgIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGJyb3VnaHQgaW50byB0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhcyBpbnZva2VkLCBvciBgbnVsbGBcbiAqIGlmIHRoZSBkZWNvcmF0b3Igd2FzIGRlY2xhcmVkIGluIHRoZSBzYW1lIG1vZHVsZSBhbmQgbm90IGltcG9ydGVkLlxuICovXG5pbXBvcnQ6IEltcG9ydHxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgZGVjb3JhdG9yIGl0c2VsZiwgb3IgYG51bGxgIGlmIHRoZSBkZWNvcmF0b3IgaXMgc3ludGhlc2l6ZWQgKGUuZy5cbiAgICogaW4gbmdjYykuXG4gICAqL1xuICBub2RlOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50cyBvZiB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZGVjb3JhdG9yLCBpZiB0aGUgZGVjb3JhdG9yIGlzIGludm9rZWQsIG9yIGBudWxsYFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICBhcmdzOiB0cy5FeHByZXNzaW9uW118bnVsbDtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCB3aGljaCB3YXMgYWN0dWFsbHlcbiAqIHByZXNlbnQgaW4gYSBmaWxlLlxuICpcbiAqIENvbmNyZXRlIGRlY29yYXRvcnMgYWx3YXlzIGhhdmUgYW4gYGlkZW50aWZpZXJgIGFuZCBhIGBub2RlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25jcmV0ZURlY29yYXRvciBleHRlbmRzIEJhc2VEZWNvcmF0b3Ige1xuICBpZGVudGlmaWVyOiBEZWNvcmF0b3JJZGVudGlmaWVyO1xuICBub2RlOiB0cy5Ob2RlO1xufVxuXG4vKipcbiAqIFN5bnRoZXRpYyBkZWNvcmF0b3JzIG5ldmVyIGhhdmUgYW4gYGlkZW50aWZpZXJgIG9yIGEgYG5vZGVgLCBidXQga25vdyB0aGUgbm9kZSBmb3Igd2hpY2ggdGhleVxuICogd2VyZSBzeW50aGVzaXplZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aGV0aWNEZWNvcmF0b3IgZXh0ZW5kcyBCYXNlRGVjb3JhdG9yIHtcbiAgaWRlbnRpZmllcjogbnVsbDtcbiAgbm9kZTogbnVsbDtcblxuICAvKipcbiAgICogVGhlIGB0cy5Ob2RlYCBmb3Igd2hpY2ggdGhpcyBkZWNvcmF0b3Igd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBzeW50aGVzaXplZEZvcjogdHMuTm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IERlY29yYXRvciA9IHtcbiAgbm9kZUZvckVycm9yOiAoZGVjb3JhdG9yOiBEZWNvcmF0b3IpOiB0cy5Ob2RlID0+IHtcbiAgICBpZiAoZGVjb3JhdG9yLm5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBkZWNvcmF0b3Iubm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyhhbHhodWIpOiB3ZSBjYW4ndCByZWx5IG9uIG5hcnJvd2luZyB1bnRpbCBUUyAzLjYgaXMgaW4gZzMuXG4gICAgICByZXR1cm4gKGRlY29yYXRvciBhcyBTeW50aGV0aWNEZWNvcmF0b3IpLnN5bnRoZXNpemVkRm9yO1xuICAgIH1cbiAgfSxcbn07XG5cbi8qKlxuICogQSBkZWNvcmF0b3IgaXMgaWRlbnRpZmllZCBieSBlaXRoZXIgYSBzaW1wbGUgaWRlbnRpZmllciAoZS5nLiBgRGVjb3JhdG9yYCkgb3IsIGluIHNvbWUgY2FzZXMsXG4gKiBhIG5hbWVzcGFjZWQgcHJvcGVydHkgYWNjZXNzIChlLmcuIGBjb3JlLkRlY29yYXRvcmApLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3JJZGVudGlmaWVyID0gdHMuSWRlbnRpZmllcnxOYW1lc3BhY2VkSWRlbnRpZmllcjtcbmV4cG9ydCB0eXBlIE5hbWVzcGFjZWRJZGVudGlmaWVyID0gdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJntcbiAgZXhwcmVzc2lvbjogdHMuSWRlbnRpZmllcjtcbiAgbmFtZTogdHMuSWRlbnRpZmllclxufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0RlY29yYXRvcklkZW50aWZpZXIoZXhwOiB0cy5FeHByZXNzaW9uKTogZXhwIGlzIERlY29yYXRvcklkZW50aWZpZXIge1xuICByZXR1cm4gdHMuaXNJZGVudGlmaWVyKGV4cCkgfHxcbiAgICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGV4cCkgJiYgdHMuaXNJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uKSAmJlxuICAgICAgdHMuaXNJZGVudGlmaWVyKGV4cC5uYW1lKTtcbn1cblxuLyoqXG4gKiBUaGUgYHRzLkRlY2xhcmF0aW9uYCBvZiBhIFwiY2xhc3NcIi5cbiAqXG4gKiBDbGFzc2VzIGFyZSByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgY29kZSBmb3JtYXRzOlxuICogLSBJbiBUUyBjb2RlLCB0aGV5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCB1c2luZyB0aGUgYGNsYXNzYCBrZXl3b3JkLlxuICogLSBJbiBFUzIwMTUgY29kZSwgdGhleSBhcmUgdXN1YWxseSBkZWZpbmVkIHVzaW5nIHRoZSBgY2xhc3NgIGtleXdvcmQsIGJ1dCB0aGV5IGNhbiBhbHNvIGJlXG4gKiAgIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIGEgY2xhc3MgZXhwcmVzc2lvbiAoZS5nLlxuICogICBgbGV0IEZvbyA9IEZvbzEgPSBjbGFzcyBGb28ge31gKS5cbiAqIC0gSW4gRVM1IGNvZGUsIHRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIGFzIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBiZWluZyBhc3NpZ25lZCB0aGUgcmV0dXJuXG4gKiAgIHZhbHVlIG9mIGFuIElJRkUuIFRoZSBhY3R1YWwgXCJjbGFzc1wiIGlzIGltcGxlbWVudGVkIGFzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gaW5zaWRlIHRoZSBJSUZFLFxuICogICBidXQgdGhlIG91dGVyIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHJlcHJlc2VudHMgdGhlIFwiY2xhc3NcIiB0byB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBGb3IgYFJlZmxlY3Rpb25Ib3N0YCBwdXJwb3NlcywgYSBjbGFzcyBkZWNsYXJhdGlvbiBzaG91bGQgYWx3YXlzIGhhdmUgYSBgbmFtZWAgaWRlbnRpZmllcixcbiAqIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlZmVyZW5jZSBpdCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgcHJvZ3JhbS5cbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3NEZWNsYXJhdGlvbjxUIGV4dGVuZHMgdHMuRGVjbGFyYXRpb24gPSB0cy5EZWNsYXJhdGlvbj4gPSBUJntuYW1lOiB0cy5JZGVudGlmaWVyfTtcblxuLyoqXG4gKiBBbiBlbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBraW5kcyBvZiBjbGFzcyBtZW1iZXJzLlxuICovXG5leHBvcnQgZW51bSBDbGFzc01lbWJlcktpbmQge1xuICBDb25zdHJ1Y3RvcixcbiAgR2V0dGVyLFxuICBTZXR0ZXIsXG4gIFByb3BlcnR5LFxuICBNZXRob2QsXG59XG5cbi8qKlxuICogQSBtZW1iZXIgb2YgYSBjbGFzcywgc3VjaCBhcyBhIHByb3BlcnR5LCBtZXRob2QsIG9yIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsYXNzTWVtYmVyIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgcmVmZXJlbmNlIHRvIHRoZSBjbGFzcyBtZW1iZXIgaXRzZWxmLCBvciBudWxsIGlmIGl0IGlzIG5vdCBhcHBsaWNhYmxlLlxuICAgKi9cbiAgbm9kZTogdHMuTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0aW9uIG9mIHdoaWNoIHR5cGUgb2YgbWVtYmVyIHRoaXMgaXMgKHByb3BlcnR5LCBtZXRob2QsIGV0YykuXG4gICAqL1xuICBraW5kOiBDbGFzc01lbWJlcktpbmQ7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLlR5cGVOb2RlYCByZXByZXNlbnRpbmcgdGhlIHR5cGUgb2YgdGhlIG1lbWJlciwgb3IgYG51bGxgIGlmIG5vdCBwcmVzZW50IG9yXG4gICAqIGFwcGxpY2FibGUuXG4gICAqL1xuICB0eXBlOiB0cy5UeXBlTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjbGFzcyBtZW1iZXIuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLklkZW50aWZpZXJgIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbWVtYmVyLCBvciBgbnVsbGAgaWYgbm8gc3VjaCBub2RlXG4gICAqIGlzIHByZXNlbnQuXG4gICAqXG4gICAqIFRoZSBgbmFtZU5vZGVgIGlzIHVzZWZ1bCBpbiB3cml0aW5nIHJlZmVyZW5jZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCB3aWxsIGJlIGNvcnJlY3RseSBzb3VyY2UtXG4gICAqIG1hcHBlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxlLlxuICAgKi9cbiAgbmFtZU5vZGU6IHRzLklkZW50aWZpZXJ8bnVsbDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuRXhwcmVzc2lvbmAgd2hpY2ggcmVwcmVzZW50cyB0aGUgdmFsdWUgb2YgdGhlIG1lbWJlci5cbiAgICpcbiAgICogSWYgdGhlIG1lbWJlciBpcyBhIHByb3BlcnR5LCB0aGlzIHdpbGwgYmUgdGhlIHByb3BlcnR5IGluaXRpYWxpemVyIGlmIHRoZXJlIGlzIG9uZSwgb3IgbnVsbFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICB2YWx1ZTogdHMuRXhwcmVzc2lvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAgd2hpY2ggcmVwcmVzZW50cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1lbWJlci5cbiAgICpcbiAgICogSW4gVHlwZVNjcmlwdCBjb2RlIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBub2RlLCBidXQgaW4gZG93bmxldmVsZWQgY29kZSB0aGlzIHNob3VsZCBhbHdheXMgYmVcbiAgICogdGhlIERlY2xhcmF0aW9uIHdoaWNoIGFjdHVhbGx5IHJlcHJlc2VudHMgdGhlIG1lbWJlcidzIHJ1bnRpbWUgdmFsdWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGUgVFMgY29kZTpcbiAgICpcbiAgICogYGBgXG4gICAqIGNsYXNzIENsYXp6IHtcbiAgICogICBzdGF0aWMgZ2V0IHByb3BlcnR5KCk6IHN0cmluZyB7XG4gICAqICAgICByZXR1cm4gJ3ZhbHVlJztcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIERvd25sZXZlbHMgdG86XG4gICAqXG4gICAqIGBgYFxuICAgKiB2YXIgQ2xhenogPSAoZnVuY3Rpb24gKCkge1xuICAgKiAgIGZ1bmN0aW9uIENsYXp6KCkge1xuICAgKiAgIH1cbiAgICogICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhenosIFwicHJvcGVydHlcIiwge1xuICAgKiAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICogICAgICAgICAgIHJldHVybiAndmFsdWUnO1xuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICogICB9KTtcbiAgICogICByZXR1cm4gQ2xheno7XG4gICAqIH0oKSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBJbiB0aGlzIGV4YW1wbGUsIGZvciB0aGUgcHJvcGVydHkgXCJwcm9wZXJ0eVwiLCB0aGUgbm9kZSB3b3VsZCBiZSB0aGUgZW50aXJlXG4gICAqIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBFeHByZXNzaW9uU3RhdGVtZW50LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIHdvdWxkIGJlIHRoaXNcbiAgICogRnVuY3Rpb25EZWNsYXJhdGlvbjpcbiAgICpcbiAgICogYGBgXG4gICAqIGZ1bmN0aW9uICgpIHtcbiAgICogICByZXR1cm4gJ3ZhbHVlJztcbiAgICogfSxcbiAgICogYGBgXG4gICAqL1xuICBpbXBsZW1lbnRhdGlvbjogdHMuRGVjbGFyYXRpb258bnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbWVtYmVyIGlzIHN0YXRpYyBvciBub3QuXG4gICAqL1xuICBpc1N0YXRpYzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW55IGBEZWNvcmF0b3JgcyB3aGljaCBhcmUgcHJlc2VudCBvbiB0aGUgbWVtYmVyLCBvciBgbnVsbGAgaWYgbm9uZSBhcmUgcHJlc2VudC5cbiAgICovXG4gIGRlY29yYXRvcnM6IERlY29yYXRvcltdfG51bGw7XG59XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSB2YWx1ZSB0aGF0IG9yaWdpbmF0ZWQgZnJvbSBhIHR5cGUgcG9zaXRpb24uXG4gKlxuICogRm9yIGV4YW1wbGUsIGEgY29uc3RydWN0b3IgcGFyYW1ldGVyIGNvdWxkIGJlIGRlY2xhcmVkIGFzIGBmb286IEZvb2AuIEEgYFR5cGVWYWx1ZVJlZmVyZW5jZWBcbiAqIGV4dHJhY3RlZCBmcm9tIHRoaXMgd291bGQgcmVmZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBjbGFzcyBgRm9vYCAoYXNzdW1pbmcgaXQgd2FzIGFjdHVhbGx5IGFcbiAqIHR5cGUpLlxuICpcbiAqIFRoZXJlIGFyZSB0d28ga2luZHMgb2Ygc3VjaCByZWZlcmVuY2VzLiBBIHJlZmVyZW5jZSB3aXRoIGBsb2NhbDogZmFsc2VgIHJlZmVycyB0byBhIHR5cGUgdGhhdCB3YXNcbiAqIGltcG9ydGVkLCBhbmQgZ2l2ZXMgdGhlIHN5bWJvbCBgbmFtZWAgYW5kIHRoZSBgbW9kdWxlTmFtZWAgb2YgdGhlIGltcG9ydC4gTm90ZSB0aGF0IHRoaXNcbiAqIGBtb2R1bGVOYW1lYCBtYXkgYmUgYSByZWxhdGl2ZSBwYXRoLCBhbmQgdGh1cyBpcyBsaWtlbHkgb25seSB2YWxpZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZpbGVcbiAqIHdoaWNoIGNvbnRhaW5lZCB0aGUgb3JpZ2luYWwgdHlwZSByZWZlcmVuY2UuXG4gKlxuICogQSByZWZlcmVuY2Ugd2l0aCBgbG9jYWw6IHRydWVgIHJlZmVycyB0byBhbnkgb3RoZXIga2luZCBvZiB0eXBlIHZpYSBhIGB0cy5FeHByZXNzaW9uYCB0aGF0J3NcbiAqIHZhbGlkIHdpdGhpbiB0aGUgbG9jYWwgZmlsZSB3aGVyZSB0aGUgdHlwZSB3YXMgcmVmZXJlbmNlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVHlwZVZhbHVlUmVmZXJlbmNlID0ge1xuICBsb2NhbDogdHJ1ZTsgZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbjsgZGVmYXVsdEltcG9ydFN0YXRlbWVudDogdHMuSW1wb3J0RGVjbGFyYXRpb24gfCBudWxsO1xufXx7XG4gIGxvY2FsOiBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBzcGVjaWZpZXIgZnJvbSB3aGljaCB0aGUgYGltcG9ydGVkTmFtZWAgc3ltYm9sIHNob3VsZCBiZSBpbXBvcnRlZC5cbiAgICovXG4gIG1vZHVsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBzeW1ib2wgdGhhdCBpcyBpbXBvcnRlZCBmcm9tIGBtb2R1bGVOYW1lYC4gSWYgYG5lc3RlZFBhdGhgIGlzIGFsc29cbiAgICogcHJlc2VudCwgYSBuZXN0ZWQgb2JqZWN0IGlzIGJlaW5nIHJlZmVyZW5jZWQgZnJvbSB0aGUgdG9wLWxldmVsIHN5bWJvbC5cbiAgICovXG4gIGltcG9ydGVkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCByZXByZXNlbnRzIHRoZSBzeW1ib2wgbmFtZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgaW1wb3J0LlxuICAgKiBXaGVuIGBudWxsYCBvciBlbXB0eSwgdGhlIGBpbXBvcnRlZE5hbWVgIGl0c2VsZiBpcyB0aGUgc3ltYm9sIGJlaW5nIHJlZmVyZW5jZWQuXG4gICAqL1xuICBuZXN0ZWRQYXRoOiBzdHJpbmdbXXxudWxsO1xuXG4gIHZhbHVlRGVjbGFyYXRpb246IHRzLkRlY2xhcmF0aW9uO1xufTtcblxuLyoqXG4gKiBBIHBhcmFtZXRlciB0byBhIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN0b3JQYXJhbWV0ZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyLCBpZiBhdmFpbGFibGUuXG4gICAqXG4gICAqIFNvbWUgcGFyYW1ldGVycyBkb24ndCBoYXZlIGEgc2ltcGxlIHN0cmluZyBuYW1lIChmb3IgZXhhbXBsZSwgcGFyYW1ldGVycyB3aGljaCBhcmUgZGVzdHJ1Y3R1cmVkXG4gICAqIGludG8gbXVsdGlwbGUgdmFyaWFibGVzKS4gSW4gdGhlc2UgY2FzZXMsIGBuYW1lYCBjYW4gYmUgYG51bGxgLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLkJpbmRpbmdOYW1lYCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICpcbiAgICogVGhlIGBuYW1lTm9kZWAgaXMgdXNlZnVsIGluIHdyaXRpbmcgcmVmZXJlbmNlcyB0byB0aGlzIG1lbWJlciB0aGF0IHdpbGwgYmUgY29ycmVjdGx5IHNvdXJjZS1cbiAgICogbWFwcGVkIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGZpbGUuXG4gICAqL1xuICBuYW1lTm9kZTogdHMuQmluZGluZ05hbWU7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlcidzIHR5cGUgYW5ub3RhdGlvbiwgaWYgaXQncyBwb3NzaWJsZSB0byByZWZlciB0byB0aGVcbiAgICogcGFyYW1ldGVyJ3MgdHlwZSBhcyBhIHZhbHVlLlxuICAgKlxuICAgKiBUaGlzIGNhbiBlaXRoZXIgYmUgYSByZWZlcmVuY2UgdG8gYSBsb2NhbCB2YWx1ZSwgaW4gd2hpY2ggY2FzZSBpdCBoYXMgYGxvY2FsYCBzZXQgdG8gYHRydWVgIGFuZFxuICAgKiBjb250YWlucyBhIGB0cy5FeHByZXNzaW9uYCwgb3IgaXQncyBhIHJlZmVyZW5jZSB0byBhbiBpbXBvcnRlZCB2YWx1ZSwgaW4gd2hpY2ggY2FzZSBgbG9jYWxgIGlzXG4gICAqIHNldCB0byBgZmFsc2VgIGFuZCB0aGUgc3ltYm9sIGFuZCBtb2R1bGUgbmFtZSBvZiB0aGUgaW1wb3J0ZWQgdmFsdWUgYXJlIHByb3ZpZGVkIGluc3RlYWQuXG4gICAqXG4gICAqIElmIHRoZSB0eXBlIGlzIG5vdCBwcmVzZW50IG9yIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhbiBleHByZXNzaW9uLCBgdHlwZVZhbHVlUmVmZXJlbmNlYCBpc1xuICAgKiBgbnVsbGAuXG4gICAqL1xuICB0eXBlVmFsdWVSZWZlcmVuY2U6IFR5cGVWYWx1ZVJlZmVyZW5jZXxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5UeXBlTm9kZWAgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG5vZGUgZm91bmQgaW4gdGhlIHR5cGUgcG9zaXRpb24uXG4gICAqXG4gICAqIFRoaXMgZmllbGQgY2FuIGJlIHVzZWQgZm9yIGRpYWdub3N0aWNzIHJlcG9ydGluZyBpZiBgdHlwZVZhbHVlUmVmZXJlbmNlYCBpcyBgbnVsbGAuXG4gICAqXG4gICAqIENhbiBiZSBudWxsLCBpZiB0aGUgcGFyYW0gaGFzIG5vIHR5cGUgZGVjbGFyZWQuXG4gICAqL1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGV8bnVsbDtcblxuICAvKipcbiAgICogQW55IGBEZWNvcmF0b3JgcyB3aGljaCBhcmUgcHJlc2VudCBvbiB0aGUgcGFyYW1ldGVyLCBvciBgbnVsbGAgaWYgbm9uZSBhcmUgcHJlc2VudC5cbiAgICovXG4gIGRlY29yYXRvcnM6IERlY29yYXRvcltdfG51bGw7XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIGZ1bmN0aW9uIG9yIG1ldGhvZCwgaW5jbHVkaW5nIGl0cyBib2R5IGlmIHByZXNlbnQgYW5kIGFueSBwYXJhbWV0ZXJzLlxuICpcbiAqIEluIFR5cGVTY3JpcHQgY29kZSB0aGlzIG1ldGFkYXRhIHdpbGwgYmUgYSBzaW1wbGUgcmVmbGVjdGlvbiBvZiB0aGUgZGVjbGFyYXRpb25zIGluIHRoZSBub2RlXG4gKiBpdHNlbGYuIEluIEVTNSBjb2RlIHRoaXMgY2FuIGJlIG1vcmUgY29tcGxpY2F0ZWQsIGFzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycyBtYXlcbiAqIGJlIGV4dHJhY3RlZCBmcm9tIGNlcnRhaW4gYm9keSBzdGF0ZW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgbm9kZSB3aGljaCBkZWNsYXJlcyB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICBub2RlOiB0cy5NZXRob2REZWNsYXJhdGlvbnx0cy5GdW5jdGlvbkRlY2xhcmF0aW9ufHRzLkZ1bmN0aW9uRXhwcmVzc2lvbnx0cy5WYXJpYWJsZURlY2xhcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnRzIG9mIHRoZSBmdW5jdGlvbiBib2R5LCBpZiBhIGJvZHkgaXMgcHJlc2VudCwgb3IgbnVsbCBpZiBubyBib2R5IGlzIHByZXNlbnQgb3IgdGhlXG4gICAqIGZ1bmN0aW9uIGlzIGlkZW50aWZpZWQgdG8gcmVwcmVzZW50IGEgdHNsaWIgaGVscGVyIGZ1bmN0aW9uLCBpbiB3aGljaCBjYXNlIGBoZWxwZXJgIHdpbGxcbiAgICogaW5kaWNhdGUgd2hpY2ggaGVscGVyIHRoaXMgZnVuY3Rpb24gcmVwcmVzZW50cy5cbiAgICpcbiAgICogVGhpcyBsaXN0IG1heSBoYXZlIGJlZW4gZmlsdGVyZWQgdG8gZXhjbHVkZSBzdGF0ZW1lbnRzIHdoaWNoIHBlcmZvcm0gcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVcbiAgICogaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICBib2R5OiB0cy5TdGF0ZW1lbnRbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSByZWdhcmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycywgaW5jbHVkaW5nIHBvc3NpYmxlIGRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbnMuXG4gICAqL1xuICBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXTtcbn1cblxuLyoqXG4gKiBQb3NzaWJsZSBkZWNsYXJhdGlvbnMgb2Yga25vd24gdmFsdWVzLCBzdWNoIGFzIGJ1aWx0LWluIG9iamVjdHMvZnVuY3Rpb25zIG9yIFR5cGVTY3JpcHQgaGVscGVycy5cbiAqL1xuZXhwb3J0IGVudW0gS25vd25EZWNsYXJhdGlvbiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIEphdmFTY3JpcHQgZ2xvYmFsIGBPYmplY3RgIGNsYXNzLlxuICAgKi9cbiAgSnNHbG9iYWxPYmplY3QsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fYXNzaWduYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyQXNzaWduLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX3NwcmVhZGAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlclNwcmVhZCxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBgX19zcHJlYWRBcnJheXNgIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgVHNIZWxwZXJTcHJlYWRBcnJheXMsXG59XG5cbi8qKlxuICogQSBwYXJhbWV0ZXIgdG8gYSBmdW5jdGlvbiBvciBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIERlY2xhcmF0aW9uIHdoaWNoIGNyZWF0ZWQgdGhpcyBwYXJhbWV0ZXIuXG4gICAqL1xuICBub2RlOiB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbjtcblxuICAvKipcbiAgICogRXhwcmVzc2lvbiB3aGljaCByZXByZXNlbnRzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIGlmIGFueS5cbiAgICovXG4gIGluaXRpYWxpemVyOiB0cy5FeHByZXNzaW9ufG51bGw7XG59XG5cbi8qKlxuICogVGhlIHNvdXJjZSBvZiBhbiBpbXBvcnRlZCBzeW1ib2wsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgc3ltYm9sIG5hbWUgYW5kIHRoZSBtb2R1bGUgZnJvbSB3aGljaCBpdFxuICogd2FzIGltcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1wb3J0ZWQgc3ltYm9sIHVuZGVyIHdoaWNoIGl0IHdhcyBleHBvcnRlZCAobm90IGltcG9ydGVkKS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBmcm9tIHdoaWNoIHRoZSBzeW1ib2wgd2FzIGltcG9ydGVkLlxuICAgKlxuICAgKiBUaGlzIGNvdWxkIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBtb2R1bGUgbmFtZSAoQGFuZ3VsYXIvY29yZSBmb3IgZXhhbXBsZSkgb3IgYSByZWxhdGl2ZSBwYXRoLlxuICAgKi9cbiAgZnJvbTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGVudW0gbWVtYmVyIGV4dHJhY3RlZCBmcm9tIEphdmFTY3JpcHQgd2hlbiBubyBgdHMuRW51bURlY2xhcmF0aW9uYCBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW51bU1lbWJlciB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZW51bSBtZW1iZXIuXG4gICAqL1xuICBuYW1lOiB0cy5Qcm9wZXJ0eU5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsaXplciBleHByZXNzaW9uIG9mIHRoZSBlbnVtIG1lbWJlci4gVW5saWtlIGluIFR5cGVTY3JpcHQsIHRoaXMgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgKiBpbiBlbWl0dGVkIEphdmFTY3JpcHQuXG4gICAqL1xuICBpbml0aWFsaXplcjogdHMuRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIGFsbCBgRGVjbGFyYXRpb25gcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRGVjbGFyYXRpb248VCBleHRlbmRzIHRzLkRlY2xhcmF0aW9uID0gdHMuRGVjbGFyYXRpb24+IHtcbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBtb2R1bGUgcGF0aCBmcm9tIHdoaWNoIHRoZSBzeW1ib2wgd2FzIGltcG9ydGVkIGludG8gdGhlIGFwcGxpY2F0aW9uLCBpZiB0aGUgc3ltYm9sXG4gICAqIHdhcyBpbXBvcnRlZCB2aWEgYW4gYWJzb2x1dGUgbW9kdWxlIChldmVuIHRocm91Z2ggYSBjaGFpbiBvZiByZS1leHBvcnRzKS4gSWYgdGhlIHN5bWJvbCBpcyBwYXJ0XG4gICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBhbmQgd2FzIG5vdCBpbXBvcnRlZCBmcm9tIGFuIGFic29sdXRlIHBhdGgsIHRoaXMgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICB2aWFNb2R1bGU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgZGVjbGFyYXRpb24gaXRzZWxmLCBpZiBvbmUgZXhpc3RzLlxuICAgKi9cbiAgbm9kZTogVHxudWxsO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQsIGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUga25vd24gZGVjbGFyYXRpb24gdGhpcyBkZWNsYXJhdGlvbiByZXNvbHZlcyB0by5cbiAgICovXG4gIGtub3duOiBLbm93bkRlY2xhcmF0aW9ufG51bGw7XG59XG5cbi8qKlxuICogQSBkZWNsYXJhdGlvbiB0aGF0IGhhcyBhbiBhc3NvY2lhdGVkIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYC5cbiAqXG4gKiBUaGUgYWx0ZXJuYXRpdmUgaXMgYW4gYElubGluZURlY2xhcmF0aW9uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25jcmV0ZURlY2xhcmF0aW9uPFQgZXh0ZW5kcyB0cy5EZWNsYXJhdGlvbiA9IHRzLkRlY2xhcmF0aW9uPiBleHRlbmRzXG4gICAgQmFzZURlY2xhcmF0aW9uPFQ+IHtcbiAgbm9kZTogVDtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSByZXByZXNlbnRzIGEgc3BlY2lhbCBpZGVudGl0eSBvZiB0aGUgZGVjbGFyYXRpb24sIG9yIGBudWxsYCBpZiB0aGUgZGVjbGFyYXRpb25cbiAgICogZG9lcyBub3QgaGF2ZSBhIHNwZWNpYWwgaWRlbnRpdHkuXG4gICAqL1xuICBpZGVudGl0eTogU3BlY2lhbERlY2xhcmF0aW9uSWRlbnRpdHl8bnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgU3BlY2lhbERlY2xhcmF0aW9uSWRlbnRpdHkgPSBEb3dubGV2ZWxlZEVudW07XG5cbmV4cG9ydCBjb25zdCBlbnVtIFNwZWNpYWxEZWNsYXJhdGlvbktpbmQge1xuICBEb3dubGV2ZWxlZEVudW0sXG59XG5cbi8qKlxuICogQSBzcGVjaWFsIGRlY2xhcmF0aW9uIGlkZW50aXR5IHRoYXQgcmVwcmVzZW50cyBhbiBlbnVtLiBUaGlzIGlzIHVzZWQgaW4gZG93bmxldmVsZWQgZm9ybXMgd2hlcmVcbiAqIGEgYHRzLkVudW1EZWNsYXJhdGlvbmAgaXMgZW1pdHRlZCBpbiBhbiBhbHRlcm5hdGl2ZSBmb3JtLCBlLmcuIGFuIElJRkUgY2FsbCB0aGF0IGRlY2xhcmVzIGFsbFxuICogbWVtYmVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb3dubGV2ZWxlZEVudW0ge1xuICBraW5kOiBTcGVjaWFsRGVjbGFyYXRpb25LaW5kLkRvd25sZXZlbGVkRW51bTtcbiAgZW51bU1lbWJlcnM6IEVudW1NZW1iZXJbXTtcbn1cblxuLyoqXG4gKiBBIGRlY2xhcmF0aW9uIHRoYXQgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYCwgb25seSBhXG4gKiBgdHMuRXhwcmVzc2lvbmAuXG4gKlxuICogVGhpcyBjYW4gb2NjdXIgaW4gc29tZSBkb3dubGV2ZWxpbmdzIHdoZW4gYW4gYGV4cG9ydCBjb25zdCBWQVIgPSAuLi47YCAoYSBgdHMuRGVjbGFyYXRpb25gKSBpc1xuICogdHJhbnNwaWxlZCB0byBhbiBhc3NpZ25tZW50IHN0YXRlbWVudCAoZS5nLiBgZXhwb3J0cy5WQVIgPSAuLi47YCkuIFRoZXJlIGlzIG5vIGB0cy5EZWNsYXJhdGlvbmBcbiAqIGFzc29jaWF0ZWQgd2l0aCBgVkFSYCBpbiB0aGF0IGNhc2UsIG9ubHkgYW4gZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVEZWNsYXJhdGlvbiBleHRlbmRzIEJhc2VEZWNsYXJhdGlvbiB7XG4gIG5vZGU6IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBgdHMuRXhwcmVzc2lvbmAgd2hpY2ggY29uc3RpdHV0ZXMgdGhlIHZhbHVlIG9mIHRoZSBkZWNsYXJhdGlvbi5cbiAgICovXG4gIGV4cHJlc3Npb246IHRzLkV4cHJlc3Npb247XG59XG5cbi8qKlxuICogVGhlIGRlY2xhcmF0aW9uIG9mIGEgc3ltYm9sLCBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGhvdyBpdCB3YXMgaW1wb3J0ZWQgaW50byB0aGVcbiAqIGFwcGxpY2F0aW9uLlxuICpcbiAqIFRoaXMgY2FuIGVpdGhlciBiZSBhIGBDb25jcmV0ZURlY2xhcmF0aW9uYCBpZiB0aGUgdW5kZXJseWluZyBUeXBlU2NyaXB0IG5vZGUgZm9yIHRoZSBzeW1ib2wgaXMgYW5cbiAqIGFjdHVhbCBgdHMuRGVjbGFyYXRpb25gLCBvciBhbiBgSW5saW5lRGVjbGFyYXRpb25gIGlmIHRoZSBkZWNsYXJhdGlvbiB3YXMgdHJhbnNwaWxlZCBpbiBjZXJ0YWluXG4gKiBkb3dubGV2ZWxpbmdzIHRvIGEgYHRzLkV4cHJlc3Npb25gIGluc3RlYWQuXG4gKi9cbmV4cG9ydCB0eXBlIERlY2xhcmF0aW9uPFQgZXh0ZW5kcyB0cy5EZWNsYXJhdGlvbiA9IHRzLkRlY2xhcmF0aW9uPiA9XG4gICAgQ29uY3JldGVEZWNsYXJhdGlvbjxUPnxJbmxpbmVEZWNsYXJhdGlvbjtcblxuLyoqXG4gKiBBYnN0cmFjdHMgcmVmbGVjdGlvbiBvcGVyYXRpb25zIG9uIGEgVHlwZVNjcmlwdCBBU1QuXG4gKlxuICogRGVwZW5kaW5nIG9uIHRoZSBmb3JtYXQgb2YgdGhlIGNvZGUgYmVpbmcgaW50ZXJwcmV0ZWQsIGRpZmZlcmVudCBjb25jZXB0cyBhcmUgcmVwcmVzZW50ZWRcbiAqIHdpdGggZGlmZmVyZW50IHN5bnRhY3RpY2FsIHN0cnVjdHVyZXMuIFRoZSBgUmVmbGVjdGlvbkhvc3RgIGFic3RyYWN0cyBvdmVyIHRob3NlIGRpZmZlcmVuY2VzIGFuZFxuICogcHJlc2VudHMgYSBzaW5nbGUgQVBJIGJ5IHdoaWNoIHRoZSBjb21waWxlciBjYW4gcXVlcnkgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFTVC5cbiAqXG4gKiBBbGwgb3BlcmF0aW9ucyBvbiB0aGUgYFJlZmxlY3Rpb25Ib3N0YCByZXF1aXJlIHRoZSB1c2Ugb2YgVHlwZVNjcmlwdCBgdHMuTm9kZWBzIHdpdGggYmluZGluZ1xuICogaW5mb3JtYXRpb24gYWxyZWFkeSBhdmFpbGFibGUgKHRoYXQgaXMsIG5vZGVzIHRoYXQgY29tZSBmcm9tIGEgYHRzLlByb2dyYW1gIHRoYXQgaGFzIGJlZW5cbiAqIHR5cGUtY2hlY2tlZCwgYW5kIGFyZSBub3Qgc3ludGhldGljYWxseSBjcmVhdGVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZsZWN0aW9uSG9zdCB7XG4gIC8qKlxuICAgKiBFeGFtaW5lIGEgZGVjbGFyYXRpb24gKGZvciBleGFtcGxlLCBvZiBhIGNsYXNzIG9yIGZ1bmN0aW9uKSBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IGFueVxuICAgKiBkZWNvcmF0b3JzIHByZXNlbnQgb24gdGhlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGVjbGFyYXRpb24gYSBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAgbm9kZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG9yIGZ1bmN0aW9uIG92ZXJcbiAgICogd2hpY2ggdG8gcmVmbGVjdC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBpbnRlbnQgaXMgdG8gcmVmbGVjdCB0aGUgZGVjb3JhdG9ycyBvZiBhIGNsYXNzIGFuZCB0aGVcbiAgICogc291cmNlIGlzIGluIEVTNiBmb3JtYXQsIHRoaXMgd2lsbCBiZSBhIGB0cy5DbGFzc0RlY2xhcmF0aW9uYCBub2RlLiBJZiB0aGUgc291cmNlIGlzIGluIEVTNVxuICAgKiBmb3JtYXQsIHRoaXMgbWlnaHQgYmUgYSBgdHMuVmFyaWFibGVEZWNsYXJhdGlvbmAgYXMgY2xhc3NlcyBpbiBFUzUgYXJlIHJlcHJlc2VudGVkIGFzIHRoZVxuICAgKiByZXN1bHQgb2YgYW4gSUlGRSBleGVjdXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGBEZWNvcmF0b3JgIG1ldGFkYXRhIGlmIGRlY29yYXRvcnMgYXJlIHByZXNlbnQgb24gdGhlIGRlY2xhcmF0aW9uLCBvclxuICAgKiBgbnVsbGAgaWYgZWl0aGVyIG5vIGRlY29yYXRvcnMgd2VyZSBwcmVzZW50IG9yIGlmIHRoZSBkZWNsYXJhdGlvbiBpcyBub3Qgb2YgYSBkZWNvcmF0YWJsZSB0eXBlLlxuICAgKi9cbiAgZ2V0RGVjb3JhdG9yc09mRGVjbGFyYXRpb24oZGVjbGFyYXRpb246IHRzLkRlY2xhcmF0aW9uKTogRGVjb3JhdG9yW118bnVsbDtcblxuICAvKipcbiAgICogRXhhbWluZSBhIGRlY2xhcmF0aW9uIHdoaWNoIHNob3VsZCBiZSBvZiBhIGNsYXNzLCBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IHRoZSBtZW1iZXJzIG9mIHRoZVxuICAgKiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgQ2xhc3NNZW1iZXJgIG1ldGFkYXRhIHJlcHJlc2VudGluZyB0aGUgbWVtYmVycyBvZiB0aGUgY2xhc3MuXG4gICAqXG4gICAqIEB0aHJvd3MgaWYgYGRlY2xhcmF0aW9uYCBkb2VzIG5vdCByZXNvbHZlIHRvIGEgY2xhc3MgZGVjbGFyYXRpb24uXG4gICAqL1xuICBnZXRNZW1iZXJzT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IENsYXNzTWVtYmVyW107XG5cbiAgLyoqXG4gICAqIFJlZmxlY3Qgb3ZlciB0aGUgY29uc3RydWN0b3Igb2YgYSBjbGFzcyBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IGl0cyBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBvbmx5IGxvb2tzIGF0IHRoZSBjb25zdHJ1Y3RvciBvZiBhIGNsYXNzIGRpcmVjdGx5IGFuZCBub3QgYXQgYW55IGluaGVyaXRlZFxuICAgKiBjb25zdHJ1Y3RvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiBhIGBDbGFzc0RlY2xhcmF0aW9uYCByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYFBhcmFtZXRlcmAgbWV0YWRhdGEgcmVwcmVzZW50aW5nIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBjb25zdHJ1Y3RvciwgaWZcbiAgICogYSBjb25zdHJ1Y3RvciBleGlzdHMuIElmIHRoZSBjb25zdHJ1Y3RvciBleGlzdHMgYW5kIGhhcyAwIHBhcmFtZXRlcnMsIHRoaXMgYXJyYXkgd2lsbCBiZSBlbXB0eS5cbiAgICogSWYgdGhlIGNsYXNzIGhhcyBubyBjb25zdHJ1Y3RvciwgdGhpcyBtZXRob2QgcmV0dXJucyBgbnVsbGAuXG4gICAqL1xuICBnZXRDb25zdHJ1Y3RvclBhcmFtZXRlcnMoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBDdG9yUGFyYW1ldGVyW118bnVsbDtcblxuICAvKipcbiAgICogUmVmbGVjdCBvdmVyIGEgZnVuY3Rpb24gYW5kIHJldHVybiBtZXRhZGF0YSBhYm91dCBpdHMgcGFyYW1ldGVycyBhbmQgYm9keS5cbiAgICpcbiAgICogRnVuY3Rpb25zIGluIFR5cGVTY3JpcHQgYW5kIEVTNSBjb2RlIGhhdmUgZGlmZmVyZW50IEFTVCByZXByZXNlbnRhdGlvbnMsIGluIHBhcnRpY3VsYXIgYXJvdW5kXG4gICAqIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzLiBBIFR5cGVTY3JpcHQgZnVuY3Rpb24gaGFzIGl0cyBkZWZhdWx0IHZhbHVlIGFzIHRoZSBpbml0aWFsaXplclxuICAgKiBvbiB0aGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLCB3aGVyZWFzIGFuIEVTNSBmdW5jdGlvbiBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgc2V0IGluIGEgc3RhdGVtZW50XG4gICAqIG9mIHRoZSBmb3JtOlxuICAgKlxuICAgKiBpZiAocGFyYW0gPT09IHZvaWQgMCkgeyBwYXJhbSA9IDM7IH1cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWJzdHJhY3RzIG92ZXIgdGhlc2UgZGV0YWlscywgYW5kIGludGVycHJldHMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBib2R5IHRvXG4gICAqIGV4dHJhY3QgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVzIGFuZCB0aGUgXCJyZWFsXCIgYm9keS5cbiAgICpcbiAgICogQSBjdXJyZW50IGxpbWl0YXRpb24gaXMgdGhhdCB0aGlzIG1ldGFkYXRhIGhhcyBubyByZXByZXNlbnRhdGlvbiBmb3Igc2hvcnRoYW5kIGFzc2lnbm1lbnQgb2ZcbiAgICogcGFyYW1ldGVyIG9iamVjdHMgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAgICpcbiAgICogQHBhcmFtIGZuIGEgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgYEZ1bmN0aW9uRGVmaW5pdGlvbmAgZ2l2aW5nIG1ldGFkYXRhIGFib3V0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLlxuICAgKi9cbiAgZ2V0RGVmaW5pdGlvbk9mRnVuY3Rpb24oZm46IHRzLk5vZGUpOiBGdW5jdGlvbkRlZmluaXRpb258bnVsbDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIGFuIGlkZW50aWZpZXIgd2FzIGltcG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUgYW5kIHJldHVybiBgSW1wb3J0YCBtZXRhZGF0YVxuICAgKiBkZXNjcmliaW5nIGl0cyBvcmlnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBpZCBhIFR5cGVTY3JpcHQgYHRzLklkZW50aWZlcmAgdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIGBJbXBvcnRgIGlmIHRoZSBpZGVudGlmaWVyIHdhcyBpbXBvcnRlZCBmcm9tIGFub3RoZXIgbW9kdWxlLCBvclxuICAgKiBgbnVsbGAgaWYgdGhlIGlkZW50aWZpZXIgZG9lc24ndCByZXNvbHZlIHRvIGFuIGltcG9ydCBidXQgaW5zdGVhZCBpcyBsb2NhbGx5IGRlZmluZWQuXG4gICAqL1xuICBnZXRJbXBvcnRPZklkZW50aWZpZXIoaWQ6IHRzLklkZW50aWZpZXIpOiBJbXBvcnR8bnVsbDtcblxuICAvKipcbiAgICogVHJhY2UgYW4gaWRlbnRpZmllciB0byBpdHMgZGVjbGFyYXRpb24sIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgZ2l2ZW4gaWRlbnRpZmllciwgdHJhY2luZyBiYWNrIHRocm91Z2hcbiAgICogaW1wb3J0cyBhbmQgcmUtZXhwb3J0cyB1bnRpbCB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gc3RhdGVtZW50IGlzIGZvdW5kLiBBIGBEZWNsYXJhdGlvbmBcbiAgICogb2JqZWN0IGlzIHJldHVybmVkIGlmIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBpcyBmb3VuZCwgb3IgYG51bGxgIGlzIHJldHVybmVkIG90aGVyd2lzZS5cbiAgICpcbiAgICogSWYgdGhlIGRlY2xhcmF0aW9uIGlzIGluIGEgZGlmZmVyZW50IG1vZHVsZSwgYW5kIHRoYXQgbW9kdWxlIGlzIGltcG9ydGVkIHZpYSBhbiBhYnNvbHV0ZSBwYXRoLFxuICAgKiB0aGlzIG1ldGhvZCBhbHNvIHJldHVybnMgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGltcG9ydGVkIG1vZHVsZS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjb2RlIGlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICAgKlxuICAgKiBleHBvcnQgY29uc3QgUk9VVEVTID0gUm91dGVyTW9kdWxlLmZvclJvb3QoWy4uLl0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogYW5kIGlmIGBnZXREZWNsYXJhdGlvbk9mSWRlbnRpZmllcmAgaXMgY2FsbGVkIG9uIGBSb3V0ZXJNb2R1bGVgIGluIHRoZSBgUk9VVEVTYCBleHByZXNzaW9uLFxuICAgKiB0aGVuIGl0IHdvdWxkIHRyYWNlIGBSb3V0ZXJNb2R1bGVgIHZpYSBpdHMgaW1wb3J0IGZyb20gYEBhbmd1bGFyL2NvcmVgLCBhbmQgbm90ZSB0aGF0IHRoZVxuICAgKiBkZWZpbml0aW9uIHdhcyBpbXBvcnRlZCBmcm9tIGBAYW5ndWxhci9jb3JlYCBpbnRvIHRoZSBhcHBsaWNhdGlvbiB3aGVyZSBpdCB3YXMgcmVmZXJlbmNlZC5cbiAgICpcbiAgICogSWYgdGhlIGRlZmluaXRpb24gaXMgcmUtZXhwb3J0ZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGRpZmZlcmVudCBhYnNvbHV0ZSBtb2R1bGUgbmFtZXMsIG9ubHlcbiAgICogdGhlIGZpcnN0IG9uZSAodGhlIG9uZSBieSB3aGljaCB0aGUgYXBwbGljYXRpb24gcmVmZXJzIHRvIHRoZSBtb2R1bGUpIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBUaGlzIG1vZHVsZSBuYW1lIGlzIHJldHVybmVkIGluIHRoZSBgdmlhTW9kdWxlYCBmaWVsZCBvZiB0aGUgYERlY2xhcmF0aW9uYC4gSWYgVGhlIGRlY2xhcmF0aW9uXG4gICAqIGlzIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgYW5kIHRoZXJlIHdhcyBubyBpbXBvcnQgdGhyb3VnaCBhbiBhYnNvbHV0ZSBwYXRoLCB0aGVuXG4gICAqIGB2aWFNb2R1bGVgIGlzIGBudWxsYC5cbiAgICpcbiAgICogQHBhcmFtIGlkIGEgVHlwZVNjcmlwdCBgdHMuSWRlbnRpZmllcmAgdG8gdHJhY2UgYmFjayB0byBhIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBtZXRhZGF0YSBhYm91dCB0aGUgYERlY2xhcmF0aW9uYCBpZiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gaXMgZm91bmQsIG9yIGBudWxsYFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICBnZXREZWNsYXJhdGlvbk9mSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IERlY2xhcmF0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIENvbGxlY3QgdGhlIGRlY2xhcmF0aW9ucyBleHBvcnRlZCBmcm9tIGEgbW9kdWxlIGJ5IG5hbWUuXG4gICAqXG4gICAqIEl0ZXJhdGVzIG92ZXIgdGhlIGV4cG9ydHMgb2YgYSBtb2R1bGUgKGluY2x1ZGluZyByZS1leHBvcnRzKSBhbmQgcmV0dXJucyBhIG1hcCBvZiBleHBvcnRcbiAgICogbmFtZSB0byBpdHMgYERlY2xhcmF0aW9uYC4gSWYgYW4gZXhwb3J0ZWQgdmFsdWUgaXMgaXRzZWxmIHJlLWV4cG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUsXG4gICAqIHRoZSBgRGVjbGFyYXRpb25gJ3MgYHZpYU1vZHVsZWAgd2lsbCByZWZsZWN0IHRoYXQuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIGEgVHlwZVNjcmlwdCBgdHMuTm9kZWAgcmVwcmVzZW50aW5nIHRoZSBtb2R1bGUgKGZvciBleGFtcGxlIGEgYHRzLlNvdXJjZUZpbGVgKSBmb3JcbiAgICogd2hpY2ggdG8gY29sbGVjdCBleHBvcnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIG1hcCBvZiBgRGVjbGFyYXRpb25gcyBmb3IgdGhlIG1vZHVsZSdzIGV4cG9ydHMsIGJ5IG5hbWUuXG4gICAqL1xuICBnZXRFeHBvcnRzT2ZNb2R1bGUobW9kdWxlOiB0cy5Ob2RlKTogTWFwPHN0cmluZywgRGVjbGFyYXRpb24+fG51bGw7XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgYWN0dWFsbHkgcmVwcmVzZW50cyBhIGNsYXNzLlxuICAgKi9cbiAgaXNDbGFzcyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyBDbGFzc0RlY2xhcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIGRlY2xhcmF0aW9uLCB3aGljaCBzaG91bGQgYmUgYSBjbGFzcywgaGFzIGEgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKi9cbiAgaGFzQmFzZUNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2V0IGFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBiYXNlIGNsYXNzIChpZiBhbnkpIG9mIHRoZSBnaXZlbiBgY2xhenpgLlxuICAgKlxuICAgKiBUaGlzIGV4cHJlc3Npb24gaXMgbW9zdCBjb21tb25seSBhbiBJZGVudGlmaWVyLCBidXQgaXMgcG9zc2libGUgdG8gaW5oZXJpdCBmcm9tIGEgbW9yZSBkeW5hbWljXG4gICAqIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3Mgd2hvc2UgYmFzZSB3ZSB3YW50IHRvIGdldC5cbiAgICovXG4gIGdldEJhc2VDbGFzc0V4cHJlc3Npb24oY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiB0cy5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIG9mIGEgZ2l2ZW4gY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiBhIGBDbGFzc0RlY2xhcmF0aW9uYCByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGNsYXNzLCBpZiBrbm93biwgb3IgYG51bGxgIGlmIHRoZSBkZWNsYXJhdGlvblxuICAgKiBpcyBub3QgYSBjbGFzcyBvciBoYXMgYW4gdW5rbm93biBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgZ2V0R2VuZXJpY0FyaXR5T2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IG51bWJlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBhc3NpZ25lZCB2YWx1ZSBvZiBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBOb3JtYWxseSB0aGlzIHdpbGwgYmUgdGhlIGluaXRpYWxpemVyIG9mIHRoZSBkZWNsYXJhdGlvbiwgYnV0IHdoZXJlIHRoZSB2YXJpYWJsZSBpc1xuICAgKiBub3QgYSBgY29uc3RgIHdlIG1heSBuZWVkIHRvIGxvb2sgZWxzZXdoZXJlIGZvciB0aGUgdmFyaWFibGUncyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGRlY2xhcmF0aW9uIGEgVHlwZVNjcmlwdCB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgd2hvc2UgdmFsdWUgd2Ugd2FudC5cbiAgICogQHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgYXMgYSBUeXBlU2NyaXB0IGV4cHJlc3Npb24gbm9kZSwgb3IgYHVuZGVmaW5lZGBcbiAgICogaWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb21wdXRlZC5cbiAgICovXG4gIGdldFZhcmlhYmxlVmFsdWUoZGVjbGFyYXRpb246IHRzLlZhcmlhYmxlRGVjbGFyYXRpb24pOiB0cy5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIFRha2UgYW4gZXhwb3J0ZWQgZGVjbGFyYXRpb24gKG1heWJlIGEgY2xhc3MgZG93bi1sZXZlbGVkIHRvIGEgdmFyaWFibGUpIGFuZCBsb29rIHVwIHRoZVxuICAgKiBkZWNsYXJhdGlvbiBvZiBpdHMgdHlwZSBpbiBhIHNlcGFyYXRlIC5kLnRzIHRyZWUuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4gYG51bGxgIGlmIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgZG9lcyBub3QgaGF2ZSBhXG4gICAqIHNlcGFyYXRlIC5kLnRzIHRyZWUuIFdoZW4gY29tcGlsaW5nIFR5cGVTY3JpcHQgY29kZSB0aGlzIGlzIGFsd2F5cyB0aGUgY2FzZSwgc2luY2UgLmQudHMgZmlsZXNcbiAgICogYXJlIHByb2R1Y2VkIG9ubHkgZHVyaW5nIHRoZSBlbWl0IG9mIHN1Y2ggYSBjb21waWxhdGlvbi4gV2hlbiBjb21waWxpbmcgLmpzIGNvZGUsIGhvd2V2ZXIsXG4gICAqIHRoZXJlIGlzIGZyZXF1ZW50bHkgYSBwYXJhbGxlbCAuZC50cyB0cmVlIHdoaWNoIHRoaXMgbWV0aG9kIGV4cG9zZXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgYHRzLkRlY2xhcmF0aW9uYCByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24gbWF5IG5vdCBiZSBmcm9tIHRoZSBzYW1lXG4gICAqIGB0cy5Qcm9ncmFtYCBhcyB0aGUgaW5wdXQgZGVjbGFyYXRpb24uXG4gICAqL1xuICBnZXREdHNEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb24pOiB0cy5EZWNsYXJhdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgYSBgdHMuSWRlbnRpZmllcmAgZm9yIGEgZ2l2ZW4gYENsYXNzRGVjbGFyYXRpb25gIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBjbGFzc1xuICAgKiB3aXRoaW4gaXRzIGRlZmluaXRpb24gKHN1Y2ggYXMgaW4gc3RhdGljIGZpZWxkcykuXG4gICAqXG4gICAqIFRoaXMgY2FuIGRpZmZlciBmcm9tIGBjbGF6ei5uYW1lYCB3aGVuIG5nY2MgcnVucyBvdmVyIEVTNSBjb2RlLCBzaW5jZSB0aGUgY2xhc3MgbWF5IGhhdmUgYVxuICAgKiBkaWZmZXJlbnQgbmFtZSB3aXRoaW4gaXRzIElJRkUgd3JhcHBlciB0aGFuIGl0IGRvZXMgZXh0ZXJuYWxseS5cbiAgICovXG4gIGdldEludGVybmFsTmFtZU9mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiB0cy5JZGVudGlmaWVyO1xuXG4gIC8qKlxuICAgKiBHZXQgYSBgdHMuSWRlbnRpZmllcmAgZm9yIGEgZ2l2ZW4gYENsYXNzRGVjbGFyYXRpb25gIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBjbGFzc1xuICAgKiBmcm9tIHN0YXRlbWVudHMgdGhhdCBhcmUgXCJhZGphY2VudFwiLCBhbmQgY29uY2VwdHVhbGx5IHRpZ2h0bHkgYm91bmQsIHRvIHRoZSBjbGFzcyBidXQgbm90XG4gICAqIGFjdHVhbGx5IGluc2lkZSBpdC5cbiAgICpcbiAgICogU2ltaWxhciB0byBgZ2V0SW50ZXJuYWxOYW1lT2ZDbGFzcygpYCwgdGhpcyBuYW1lIGNhbiBkaWZmZXIgZnJvbSBgY2xhenoubmFtZWAgd2hlbiBuZ2NjIHJ1bnNcbiAgICogb3ZlciBFUzUgY29kZSwgc2luY2UgdGhlc2UgXCJhZGphY2VudFwiIHN0YXRlbWVudHMgbmVlZCB0byBleGlzdCBpbiB0aGUgSUlGRSB3aGVyZSB0aGUgY2xhc3MgbWF5XG4gICAqIGhhdmUgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIGl0IGRvZXMgZXh0ZXJuYWxseS5cbiAgICovXG4gIGdldEFkamFjZW50TmFtZU9mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiB0cy5JZGVudGlmaWVyO1xufVxuIl19
|
|
@@ -290,6 +290,7 @@
|
|
|
290
290
|
node: symbol.valueDeclaration,
|
|
291
291
|
known: null,
|
|
292
292
|
viaModule: viaModule,
|
|
293
|
+
identity: null,
|
|
293
294
|
};
|
|
294
295
|
}
|
|
295
296
|
else if (symbol.declarations !== undefined && symbol.declarations.length > 0) {
|
|
@@ -297,6 +298,7 @@
|
|
|
297
298
|
node: symbol.declarations[0],
|
|
298
299
|
known: null,
|
|
299
300
|
viaModule: viaModule,
|
|
301
|
+
identity: null,
|
|
300
302
|
};
|
|
301
303
|
}
|
|
302
304
|
else {
|
|
@@ -555,4 +557,4 @@
|
|
|
555
557
|
originalId.text;
|
|
556
558
|
}
|
|
557
559
|
});
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvdHlwZXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILCtCQUFpQztJQUVqQyw0RUFBZ0w7SUFDaEwsOEZBQTRDO0lBRTVDOztPQUVHO0lBRUg7UUFDRSxrQ0FBc0IsT0FBdUI7WUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFBRyxDQUFDO1FBRWpELDZEQUEwQixHQUExQixVQUEyQixXQUEyQjtZQUF0RCxpQkFNQztZQUxDLElBQUksV0FBVyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUMvRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFBLFNBQVMsSUFBSSxPQUFBLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBakMsQ0FBaUMsQ0FBQztpQkFDNUUsTUFBTSxDQUFDLFVBQUMsR0FBRyxJQUF1QixPQUFBLEdBQUcsS0FBSyxJQUFJLEVBQVosQ0FBWSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELG9EQUFpQixHQUFqQixVQUFrQixLQUF1QjtZQUF6QyxpQkFJQztZQUhDLElBQU0sT0FBTyxHQUFHLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxLQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUEzQixDQUEyQixDQUFDO2lCQUM1RCxNQUFNLENBQUMsVUFBQyxNQUFNLElBQTRCLE9BQUEsTUFBTSxLQUFL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LENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEUsVUFBVSxDQUFDLElBQUksQ0FBQztJQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9uLCBDbGFzc01lbWJlciwgQ2xhc3NNZW1iZXJLaW5kLCBDdG9yUGFyYW1ldGVyLCBEZWNsYXJhdGlvbiwgRGVjb3JhdG9yLCBGdW5jdGlvbkRlZmluaXRpb24sIEltcG9ydCwgaXNEZWNvcmF0b3JJZGVudGlmaWVyLCBSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi9ob3N0JztcbmltcG9ydCB7dHlwZVRvVmFsdWV9IGZyb20gJy4vdHlwZV90b192YWx1ZSc7XG5cbi8qKlxuICogcmVmbGVjdG9yLnRzIGltcGxlbWVudHMgc3RhdGljIHJlZmxlY3Rpb24gb2YgZGVjbGFyYXRpb25zIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGB0cy5UeXBlQ2hlY2tlcmAuXG4gKi9cblxuZXhwb3J0IGNsYXNzIFR5cGVTY3JpcHRSZWZsZWN0aW9uSG9zdCBpbXBsZW1lbnRzIFJlZmxlY3Rpb25Ib3N0IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKSB7fVxuXG4gIGdldERlY29yYXRvcnNPZkRlY2xhcmF0aW9uKGRlY2xhcmF0aW9uOiB0cy5EZWNsYXJhdGlvbik6IERlY29yYXRvcltdfG51bGwge1xuICAgIGlmIChkZWNsYXJhdGlvbi5kZWNvcmF0b3JzID09PSB1bmRlZmluZWQgfHwgZGVjbGFyYXRpb24uZGVjb3JhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZGVjbGFyYXRpb24uZGVjb3JhdG9ycy5tYXAoZGVjb3JhdG9yID0+IHRoaXMuX3JlZmxlY3REZWNvcmF0b3IoZGVjb3JhdG9yKSlcbiAgICAgICAgLmZpbHRlcigoZGVjKTogZGVjIGlzIERlY29yYXRvciA9PiBkZWMgIT09IG51bGwpO1xuICB9XG5cbiAgZ2V0TWVtYmVyc09mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBDbGFzc01lbWJlcltdIHtcbiAgICBjb25zdCB0c0NsYXp6ID0gY2FzdERlY2xhcmF0aW9uVG9DbGFzc09yRGllKGNsYXp6KTtcbiAgICByZXR1cm4gdHNDbGF6ei5tZW1iZXJzLm1hcChtZW1iZXIgPT4gdGhpcy5fcmVmbGVjdE1lbWJlcihtZW1iZXIpKVxuICAgICAgICAuZmlsdGVyKChtZW1iZXIpOiBtZW1iZXIgaXMgQ2xhc3NNZW1iZXIgPT4gbWVtYmVyICE9PSBudWxsKTtcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9yUGFyYW1ldGVycyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IEN0b3JQYXJhbWV0ZXJbXXxudWxsIHtcbiAgICBjb25zdCB0c0NsYXp6ID0gY2FzdERlY2xhcmF0aW9uVG9DbGFzc09yRGllKGNsYXp6KTtcblxuICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGEgYGJvZHlgLiBUaGUgY29uc3RydWN0b3JzIHdpdGhvdXQgYSBgYm9keWAgYXJlIG92ZXJsb2Fkc1xuICAgIC8vIHdoZXJlYXMgd2Ugd2FudCB0aGUgaW1wbGVtZW50YXRpb24gc2luY2UgaXQncyB0aGUgb25lIHRoYXQnbGwgYmUgZXhlY3V0ZWQgYW5kIHdoaWNoIGNhblxuICAgIC8vIGhhdmUgZGVjb3JhdG9ycy5cbiAgICBjb25zdCBjdG9yID0gdHNDbGF6ei5tZW1iZXJzLmZpbmQoXG4gICAgICAgIChtZW1iZXIpOiBtZW1iZXIgaXMgdHMuQ29uc3RydWN0b3JEZWNsYXJhdGlvbiA9PlxuICAgICAgICAgICAgdHMuaXNDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKG1lbWJlcikgJiYgbWVtYmVyLmJvZHkgIT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKGN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN0b3IucGFyYW1ldGVycy5tYXAobm9kZSA9PiB7XG4gICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGlzIGVhc3kuXG4gICAgICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTmFtZShub2RlLm5hbWUpO1xuXG4gICAgICBjb25zdCBkZWNvcmF0b3JzID0gdGhpcy5nZXREZWNvcmF0b3JzT2ZEZWNsYXJhdGlvbihub2RlKTtcblxuICAgICAgLy8gSXQgbWF5IG9yIG1heSBub3QgYmUgcG9zc2libGUgdG8gd3JpdGUgYW4gZXhwcmVzc2lvbiB0aGF0IHJlZmVycyB0byB0aGUgdmFsdWUgc2lkZSBvZiB0aGVcbiAgICAgIC8vIHR5cGUgbmFtZWQgZm9yIHRoZSBwYXJhbWV0ZXIuXG5cbiAgICAgIGxldCBvcmlnaW5hbFR5cGVOb2RlID0gbm9kZS50eXBlIHx8IG51bGw7XG4gICAgICBsZXQgdHlwZU5vZGUgPSBvcmlnaW5hbFR5cGVOb2RlO1xuXG4gICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgc2ltcGxlIG51bGxhYmxlIHVuaW9uIHR5cGUgZS5nLiBgZm9vOiBGb298bnVsbGBcbiAgICAgIC8vIGFuZCBleHRyYWN0IHRoZSB0eXBlLiBNb3JlIGNvbXBsZXggdW5pb24gdHlwZXMgZS5nLiBgZm9vOiBGb298QmFyYCBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byBzdXBwb3J0IGBmb286IEZvb3x1bmRlZmluZWRgIGJlY2F1c2UgQW5ndWxhcidzIERJIGluamVjdHMgYG51bGxgIGZvclxuICAgICAgLy8gb3B0aW9uYWwgdG9rZXMgdGhhdCBkb24ndCBoYXZlIHByb3ZpZGVycy5cbiAgICAgIGlmICh0eXBlTm9kZSAmJiB0cy5pc1VuaW9uVHlwZU5vZGUodHlwZU5vZGUpKSB7XG4gICAgICAgIGxldCBjaGlsZFR5cGVOb2RlcyA9IHR5cGVOb2RlLnR5cGVzLmZpbHRlcihcbiAgICAgICAgICAgIGNoaWxkVHlwZU5vZGUgPT4gY2hpbGRUeXBlTm9kZS5raW5kICE9PSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkKTtcblxuICAgICAgICBpZiAoY2hpbGRUeXBlTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdHlwZU5vZGUgPSBjaGlsZFR5cGVOb2Rlc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0eXBlTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVZhbHVlUmVmZXJlbmNlID0gdHlwZVRvVmFsdWUodHlwZU5vZGUsIHRoaXMuY2hlY2tlcik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5hbWVOb2RlOiBub2RlLm5hbWUsXG4gICAgICAgIHR5cGVWYWx1ZVJlZmVyZW5jZSxcbiAgICAgICAgdHlwZU5vZGU6IG9yaWdpbmFsVHlwZU5vZGUsXG4gICAgICAgIGRlY29yYXRvcnMsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0SW1wb3J0T2ZJZGVudGlmaWVyKGlkOiB0cy5JZGVudGlmaWVyKTogSW1wb3J0fG51bGwge1xuICAgIGNvbnN0IGRpcmVjdEltcG9ydCA9IHRoaXMuZ2V0RGlyZWN0SW1wb3J0T2ZJZGVudGlmaWVyKGlkKTtcbiAgICBpZiAoZGlyZWN0SW1wb3J0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZGlyZWN0SW1wb3J0O1xuICAgIH0gZWxzZSBpZiAodHMuaXNRdWFsaWZpZWROYW1lKGlkLnBhcmVudCkgJiYgaWQucGFyZW50LnJpZ2h0ID09PSBpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW1wb3J0T2ZOYW1lc3BhY2VkSWRlbnRpZmllcihpZCwgZ2V0UXVhbGlmaWVkTmFtZVJvb3QoaWQucGFyZW50KSk7XG4gICAgfSBlbHNlIGlmICh0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihpZC5wYXJlbnQpICYmIGlkLnBhcmVudC5uYW1lID09PSBpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW1wb3J0T2ZOYW1lc3BhY2VkSWRlbnRpZmllcihpZCwgZ2V0RmFyTGVmdElkZW50aWZpZXIoaWQucGFyZW50KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldEV4cG9ydHNPZk1vZHVsZShub2RlOiB0cy5Ob2RlKTogTWFwPHN0cmluZywgRGVjbGFyYXRpb24+fG51bGwge1xuICAgIC8vIEluIFR5cGVTY3JpcHQgY29kZSwgbW9kdWxlcyBhcmUgb25seSB0cy5Tb3VyY2VGaWxlcy4gVGhyb3cgaWYgdGhlIG5vZGUgaXNuJ3QgYSBtb2R1bGUuXG4gICAgaWYgKCF0cy5pc1NvdXJjZUZpbGUobm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZ2V0RXhwb3J0c09mTW9kdWxlKCkgY2FsbGVkIG9uIG5vbi1Tb3VyY2VGaWxlIGluIFRTIGNvZGVgKTtcbiAgICB9XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIERlY2xhcmF0aW9uPigpO1xuXG4gICAgLy8gUmVmbGVjdCB0aGUgbW9kdWxlIHRvIGEgU3ltYm9sLCBhbmQgdXNlIGdldEV4cG9ydHNPZk1vZHVsZSgpIHRvIGdldCBhIGxpc3Qgb2YgZXhwb3J0ZWRcbiAgICAvLyBTeW1ib2xzLlxuICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMuY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUpO1xuICAgIGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tlci5nZXRFeHBvcnRzT2ZNb2R1bGUoc3ltYm9sKS5mb3JFYWNoKGV4cG9ydFN5bWJvbCA9PiB7XG4gICAgICAvLyBNYXAgZWFjaCBleHBvcnRlZCBTeW1ib2wgdG8gYSBEZWNsYXJhdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSBtYXAuXG4gICAgICBjb25zdCBkZWNsID0gdGhpcy5nZXREZWNsYXJhdGlvbk9mU3ltYm9sKGV4cG9ydFN5bWJvbCwgbnVsbCk7XG4gICAgICBpZiAoZGVjbCAhPT0gbnVsbCkge1xuICAgICAgICBtYXAuc2V0KGV4cG9ydFN5bWJvbC5uYW1lLCBkZWNsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgaXNDbGFzcyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyBDbGFzc0RlY2xhcmF0aW9uIHtcbiAgICAvLyBJbiBUeXBlU2NyaXB0IGNvZGUsIGNsYXNzZXMgYXJlIHRzLkNsYXNzRGVjbGFyYXRpb25zLlxuICAgIC8vIChgbmFtZWAgY2FuIGJlIHVuZGVmaW5lZCBpbiB1bm5hbWVkIGRlZmF1bHQgZXhwb3J0czogYGRlZmF1bHQgZXhwb3J0IGNsYXNzIHsgLi4uIH1gKVxuICAgIHJldHVybiB0cy5pc0NsYXNzRGVjbGFyYXRpb24obm9kZSkgJiYgKG5vZGUubmFtZSAhPT0gdW5kZWZpbmVkKSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKTtcbiAgfVxuXG4gIGhhc0Jhc2VDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodHMuaXNDbGFzc0RlY2xhcmF0aW9uKGNsYXp6KSB8fCB0cy5pc0NsYXNzRXhwcmVzc2lvbihjbGF6eikpICYmXG4gICAgICAgIGNsYXp6Lmhlcml0YWdlQ2xhdXNlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGNsYXp6Lmhlcml0YWdlQ2xhdXNlcy5zb21lKGNsYXVzZSA9PiBjbGF1c2UudG9rZW4gPT09IHRzLlN5bnRheEtpbmQuRXh0ZW5kc0tleXdvcmQpO1xuICB9XG5cbiAgZ2V0QmFzZUNsYXNzRXhwcmVzc2lvbihjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbCB7XG4gICAgaWYgKCEodHMuaXNDbGFzc0RlY2xhcmF0aW9uKGNsYXp6KSB8fCB0cy5pc0NsYXNzRXhwcmVzc2lvbihjbGF6eikpIHx8XG4gICAgICAgIGNsYXp6Lmhlcml0YWdlQ2xhdXNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5kc0NsYXVzZSA9XG4gICAgICAgIGNsYXp6Lmhlcml0YWdlQ2xhdXNlcy5maW5kKGNsYXVzZSA9PiBjbGF1c2UudG9rZW4gPT09IHRzLlN5bnRheEtpbmQuRXh0ZW5kc0tleXdvcmQpO1xuICAgIGlmIChleHRlbmRzQ2xhdXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBleHRlbmRzVHlwZSA9IGV4dGVuZHNDbGF1c2UudHlwZXNbMF07XG4gICAgaWYgKGV4dGVuZHNUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5kc1R5cGUuZXhwcmVzc2lvbjtcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyKGlkOiB0cy5JZGVudGlmaWVyKTogRGVjbGFyYXRpb258bnVsbCB7XG4gICAgLy8gUmVzb2x2ZSB0aGUgaWRlbnRpZmllciB0byBhIFN5bWJvbCwgYW5kIHJldHVybiB0aGUgZGVjbGFyYXRpb24gb2YgdGhhdC5cbiAgICBsZXQgc3ltYm9sOiB0cy5TeW1ib2x8dW5kZWZpbmVkID0gdGhpcy5jaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oaWQpO1xuICAgIGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldERlY2xhcmF0aW9uT2ZTeW1ib2woc3ltYm9sLCBpZCk7XG4gIH1cblxuICBnZXREZWZpbml0aW9uT2ZGdW5jdGlvbihub2RlOiB0cy5Ob2RlKTogRnVuY3Rpb25EZWZpbml0aW9ufG51bGwge1xuICAgIGlmICghdHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpICYmICF0cy5pc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpICYmXG4gICAgICAgICF0cy5pc0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBub2RlLFxuICAgICAgYm9keTogbm9kZS5ib2R5ICE9PSB1bmRlZmluZWQgPyBBcnJheS5mcm9tKG5vZGUuYm9keS5zdGF0ZW1lbnRzKSA6IG51bGwsXG4gICAgICBwYXJhbWV0ZXJzOiBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5hbWUocGFyYW0ubmFtZSk7XG4gICAgICAgIGNvbnN0IGluaXRpYWxpemVyID0gcGFyYW0uaW5pdGlhbGl6ZXIgfHwgbnVsbDtcbiAgICAgICAgcmV0dXJuIHtuYW1lLCBub2RlOiBwYXJhbSwgaW5pdGlhbGl6ZXJ9O1xuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIGdldEdlbmVyaWNBcml0eU9mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBudW1iZXJ8bnVsbCB7XG4gICAgaWYgKCF0cy5pc0NsYXNzRGVjbGFyYXRpb24oY2xhenopKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXp6LnR5cGVQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgPyBjbGF6ei50eXBlUGFyYW1ldGVycy5sZW5ndGggOiAwO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVWYWx1ZShkZWNsYXJhdGlvbjogdHMuVmFyaWFibGVEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbCB7XG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uLmluaXRpYWxpemVyIHx8IG51bGw7XG4gIH1cblxuICBnZXREdHNEZWNsYXJhdGlvbihfOiB0cy5EZWNsYXJhdGlvbik6IHRzLkRlY2xhcmF0aW9ufG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0SW50ZXJuYWxOYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXIge1xuICAgIHJldHVybiBjbGF6ei5uYW1lO1xuICB9XG5cbiAgZ2V0QWRqYWNlbnROYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXIge1xuICAgIHJldHVybiBjbGF6ei5uYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpcmVjdEltcG9ydE9mSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IEltcG9ydHxudWxsIHtcbiAgICBjb25zdCBzeW1ib2wgPSB0aGlzLmNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihpZCk7XG5cbiAgICBpZiAoc3ltYm9sID09PSB1bmRlZmluZWQgfHwgc3ltYm9sLmRlY2xhcmF0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHN5bWJvbC5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNsOiB0cy5EZWNsYXJhdGlvbiA9IHN5bWJvbC5kZWNsYXJhdGlvbnNbMF07XG4gICAgY29uc3QgaW1wb3J0RGVjbCA9IGdldENvbnRhaW5pbmdJbXBvcnREZWNsYXJhdGlvbihkZWNsKTtcblxuICAgIC8vIElnbm9yZSBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBsb2NhbGx5IChub3QgaW1wb3J0ZWQpLlxuICAgIGlmIChpbXBvcnREZWNsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUaGUgbW9kdWxlIHNwZWNpZmllciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgc3RyaW5nIGxpdGVyYWwsIHNvIHRoaXMgc2hvdWxkIGFsd2F5cyBwYXNzLlxuICAgIGlmICghdHMuaXNTdHJpbmdMaXRlcmFsKGltcG9ydERlY2wubW9kdWxlU3BlY2lmaWVyKSkge1xuICAgICAgLy8gTm90IGFsbG93ZWQgdG8gaGFwcGVuIGluIFR5cGVTY3JpcHQgQVNUcy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7ZnJvbTogaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIudGV4dCwgbmFtZTogZ2V0RXhwb3J0ZWROYW1lKGRlY2wsIGlkKX07XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIGdldCB0aGUgaW1wb3J0IGluZm8gZm9yIHRoaXMgaWRlbnRpZmllciBhcyB0aG91Z2ggaXQgaXMgYSBuYW1lc3BhY2VkIGltcG9ydC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBpZGVudGlmaWVyIGlzIHRoZSBgRGlyZWN0aXZlYCBwYXJ0IG9mIGEgcXVhbGlmaWVkIHR5cGUgY2hhaW4gbGlrZTpcbiAgICpcbiAgICogYGBgXG4gICAqIGNvcmUuRGlyZWN0aXZlXG4gICAqIGBgYFxuICAgKlxuICAgKiB0aGVuIGl0IG1pZ2h0IGJlIHRoYXQgYGNvcmVgIGlzIGEgbmFtZXNwYWNlIGltcG9ydCBzdWNoIGFzOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0ICogYXMgY29yZSBmcm9tICd0c2xpYic7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gaWQgdGhlIFR5cGVTY3JpcHQgaWRlbnRpZmllciB0byBmaW5kIHRoZSBpbXBvcnQgaW5mbyBmb3IuXG4gICAqIEByZXR1cm5zIFRoZSBpbXBvcnQgaW5mbyBpZiB0aGlzIGlzIGEgbmFtZXNwYWNlZCBpbXBvcnQgb3IgYG51bGxgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEltcG9ydE9mTmFtZXNwYWNlZElkZW50aWZpZXIoXG4gICAgICBpZDogdHMuSWRlbnRpZmllciwgbmFtZXNwYWNlSWRlbnRpZmllcjogdHMuSWRlbnRpZmllcnxudWxsKTogSW1wb3J0fG51bGwge1xuICAgIGlmIChuYW1lc3BhY2VJZGVudGlmaWVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbmFtZXNwYWNlU3ltYm9sID0gdGhpcy5jaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obmFtZXNwYWNlSWRlbnRpZmllcik7XG4gICAgaWYgKCFuYW1lc3BhY2VTeW1ib2wpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9XG4gICAgICAgIG5hbWVzcGFjZVN5bWJvbC5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxID8gbmFtZXNwYWNlU3ltYm9sLmRlY2xhcmF0aW9uc1swXSA6IG51bGw7XG4gICAgaWYgKCFkZWNsYXJhdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzcGFjZURlY2xhcmF0aW9uID0gdHMuaXNOYW1lc3BhY2VJbXBvcnQoZGVjbGFyYXRpb24pID8gZGVjbGFyYXRpb24gOiBudWxsO1xuICAgIGlmICghbmFtZXNwYWNlRGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydERlY2xhcmF0aW9uID0gbmFtZXNwYWNlRGVjbGFyYXRpb24ucGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXRzLmlzU3RyaW5nTGl0ZXJhbChpbXBvcnREZWNsYXJhdGlvbi5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgICAvLyBTaG91bGQgbm90IGhhcHBlbiBhcyB0aGlzIHdvdWxkIGJlIGludmFsaWQgVHlwZXNTY3JpcHRcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBpbXBvcnREZWNsYXJhdGlvbi5tb2R1bGVTcGVjaWZpZXIudGV4dCxcbiAgICAgIG5hbWU6IGlkLnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgYHRzLlN5bWJvbGAgdG8gaXRzIGRlY2xhcmF0aW9uLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBgdmlhTW9kdWxlYCBhbG9uZyB0aGUgd2F5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldERlY2xhcmF0aW9uT2ZTeW1ib2woc3ltYm9sOiB0cy5TeW1ib2wsIG9yaWdpbmFsSWQ6IHRzLklkZW50aWZpZXJ8bnVsbCk6IERlY2xhcmF0aW9uXG4gICAgICB8bnVsbCB7XG4gICAgLy8gSWYgdGhlIHN5bWJvbCBwb2ludHMgdG8gYSBTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQsIHJlc29sdmUgaXQuXG4gICAgbGV0IHZhbHVlRGVjbGFyYXRpb246IHRzLkRlY2xhcmF0aW9ufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWVEZWNsYXJhdGlvbiA9IHN5bWJvbC52YWx1ZURlY2xhcmF0aW9uO1xuICAgIH0gZWxzZSBpZiAoc3ltYm9sLmRlY2xhcmF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHN5bWJvbC5kZWNsYXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsdWVEZWNsYXJhdGlvbiA9IHN5bWJvbC5kZWNsYXJhdGlvbnNbMF07XG4gICAgfVxuICAgIGlmICh2YWx1ZURlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQodmFsdWVEZWNsYXJhdGlvbikpIHtcbiAgICAgIGNvbnN0IHNob3J0aGFuZFN5bWJvbCA9IHRoaXMuY2hlY2tlci5nZXRTaG9ydGhhbmRBc3NpZ25tZW50VmFsdWVTeW1ib2wodmFsdWVEZWNsYXJhdGlvbik7XG4gICAgICBpZiAoc2hvcnRoYW5kU3ltYm9sID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXREZWNsYXJhdGlvbk9mU3ltYm9sKHNob3J0aGFuZFN5bWJvbCwgb3JpZ2luYWxJZCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZURlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdHMuaXNFeHBvcnRTcGVjaWZpZXIodmFsdWVEZWNsYXJhdGlvbikpIHtcbiAgICAgIGNvbnN0IHRhcmdldFN5bWJvbCA9IHRoaXMuY2hlY2tlci5nZXRFeHBvcnRTcGVjaWZpZXJMb2NhbFRhcmdldFN5bWJvbCh2YWx1ZURlY2xhcmF0aW9uKTtcbiAgICAgIGlmICh0YXJnZXRTeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldERlY2xhcmF0aW9uT2ZTeW1ib2wodGFyZ2V0U3ltYm9sLCBvcmlnaW5hbElkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRJbmZvID0gb3JpZ2luYWxJZCAmJiB0aGlzLmdldEltcG9ydE9mSWRlbnRpZmllcihvcmlnaW5hbElkKTtcbiAgICBjb25zdCB2aWFNb2R1bGUgPVxuICAgICAgICBpbXBvcnRJbmZvICE9PSBudWxsICYmIGltcG9ydEluZm8uZnJvbSAhPT0gbnVsbCAmJiAhaW1wb3J0SW5mby5mcm9tLnN0YXJ0c1dpdGgoJy4nKSA/XG4gICAgICAgIGltcG9ydEluZm8uZnJvbSA6XG4gICAgICAgIG51bGw7XG5cbiAgICAvLyBOb3csIHJlc29sdmUgdGhlIFN5bWJvbCB0byBpdHMgZGVjbGFyYXRpb24gYnkgZm9sbG93aW5nIGFueSBhbmQgYWxsIGFsaWFzZXMuXG4gICAgd2hpbGUgKHN5bWJvbC5mbGFncyAmIHRzLlN5bWJvbEZsYWdzLkFsaWFzKSB7XG4gICAgICBzeW1ib2wgPSB0aGlzLmNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbChzeW1ib2wpO1xuICAgIH1cblxuICAgIC8vIExvb2sgYXQgdGhlIHJlc29sdmVkIFN5bWJvbCdzIGRlY2xhcmF0aW9ucyBhbmQgcGljayBvbmUgb2YgdGhlbSB0byByZXR1cm4uIFZhbHVlIGRlY2xhcmF0aW9uc1xuICAgIC8vIGFyZSBnaXZlbiBwcmVjZWRlbmNlIG92ZXIgdHlwZSBkZWNsYXJhdGlvbnMuXG4gICAgaWYgKHN5bWJvbC52YWx1ZURlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IHN5bWJvbC52YWx1ZURlY2xhcmF0aW9uLFxuICAgICAgICBrbm93bjogbnVsbCxcbiAgICAgICAgdmlhTW9kdWxlLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHN5bWJvbC5kZWNsYXJhdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBzeW1ib2wuZGVjbGFyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IHN5bWJvbC5kZWNsYXJhdGlvbnNbMF0sXG4gICAgICAgIGtub3duOiBudWxsLFxuICAgICAgICB2aWFNb2R1bGUsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWZsZWN0RGVjb3JhdG9yKG5vZGU6IHRzLkRlY29yYXRvcik6IERlY29yYXRvcnxudWxsIHtcbiAgICAvLyBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIGRlY29yYXRvciBleHByZXNzaW9uIGludG8gYSByZWZlcmVuY2UgdG8gYSBjb25jcmV0ZSBJZGVudGlmaWVyLiBUaGVcbiAgICAvLyBleHByZXNzaW9uIG1heSBjb250YWluIGEgY2FsbCB0byBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIGRlY29yYXRvciBmdW5jdGlvbiwgaW4gd2hpY2hcbiAgICAvLyBjYXNlIHdlIHdhbnQgdG8gcmV0dXJuIHRoZSBhcmd1bWVudHMuXG4gICAgbGV0IGRlY29yYXRvckV4cHI6IHRzLkV4cHJlc3Npb24gPSBub2RlLmV4cHJlc3Npb247XG4gICAgbGV0IGFyZ3M6IHRzLkV4cHJlc3Npb25bXXxudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGZvciBjYWxsIGV4cHJlc3Npb25zLlxuICAgIGlmICh0cy5pc0NhbGxFeHByZXNzaW9uKGRlY29yYXRvckV4cHIpKSB7XG4gICAgICBhcmdzID0gQXJyYXkuZnJvbShkZWNvcmF0b3JFeHByLmFyZ3VtZW50cyk7XG4gICAgICBkZWNvcmF0b3JFeHByID0gZGVjb3JhdG9yRXhwci5leHByZXNzaW9uO1xuICAgIH1cblxuICAgIC8vIFRoZSBmaW5hbCByZXNvbHZlZCBkZWNvcmF0b3Igc2hvdWxkIGJlIGEgYHRzLklkZW50aWZpZXJgIC0gaWYgaXQncyBub3QsIHRoZW4gc29tZXRoaW5nIGlzXG4gICAgLy8gd3JvbmcgYW5kIHRoZSBkZWNvcmF0b3IgY2FuJ3QgYmUgcmVzb2x2ZWQgc3RhdGljYWxseS5cbiAgICBpZiAoIWlzRGVjb3JhdG9ySWRlbnRpZmllcihkZWNvcmF0b3JFeHByKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjb3JhdG9ySWRlbnRpZmllciA9IHRzLmlzSWRlbnRpZmllcihkZWNvcmF0b3JFeHByKSA/IGRlY29yYXRvckV4cHIgOiBkZWNvcmF0b3JFeHByLm5hbWU7XG4gICAgY29uc3QgaW1wb3J0RGVjbCA9IHRoaXMuZ2V0SW1wb3J0T2ZJZGVudGlmaWVyKGRlY29yYXRvcklkZW50aWZpZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGRlY29yYXRvcklkZW50aWZpZXIudGV4dCxcbiAgICAgIGlkZW50aWZpZXI6IGRlY29yYXRvckV4cHIsXG4gICAgICBpbXBvcnQ6IGltcG9ydERlY2wsXG4gICAgICBub2RlLFxuICAgICAgYXJncyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVmbGVjdE1lbWJlcihub2RlOiB0cy5DbGFzc0VsZW1lbnQpOiBDbGFzc01lbWJlcnxudWxsIHtcbiAgICBsZXQga2luZDogQ2xhc3NNZW1iZXJLaW5kfG51bGwgPSBudWxsO1xuICAgIGxldCB2YWx1ZTogdHMuRXhwcmVzc2lvbnxudWxsID0gbnVsbDtcbiAgICBsZXQgbmFtZTogc3RyaW5nfG51bGwgPSBudWxsO1xuICAgIGxldCBuYW1lTm9kZTogdHMuSWRlbnRpZmllcnxudWxsID0gbnVsbDtcblxuICAgIGlmICh0cy5pc1Byb3BlcnR5RGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGtpbmQgPSBDbGFzc01lbWJlcktpbmQuUHJvcGVydHk7XG4gICAgICB2YWx1ZSA9IG5vZGUuaW5pdGlhbGl6ZXIgfHwgbnVsbDtcbiAgICB9IGVsc2UgaWYgKHRzLmlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAga2luZCA9IENsYXNzTWVtYmVyS2luZC5HZXR0ZXI7XG4gICAgfSBlbHNlIGlmICh0cy5pc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGtpbmQgPSBDbGFzc01lbWJlcktpbmQuU2V0dGVyO1xuICAgIH0gZWxzZSBpZiAodHMuaXNNZXRob2REZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAga2luZCA9IENsYXNzTWVtYmVyS2luZC5NZXRob2Q7XG4gICAgfSBlbHNlIGlmICh0cy5pc0NvbnN0cnVjdG9yRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGtpbmQgPSBDbGFzc01lbWJlcktpbmQuQ29uc3RydWN0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0cy5pc0NvbnN0cnVjdG9yRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIG5hbWUgPSAnY29uc3RydWN0b3InO1xuICAgIH0gZWxzZSBpZiAodHMuaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICAgIG5hbWUgPSBub2RlLm5hbWUudGV4dDtcbiAgICAgIG5hbWVOb2RlID0gbm9kZS5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvcmF0b3JzID0gdGhpcy5nZXREZWNvcmF0b3JzT2ZEZWNsYXJhdGlvbihub2RlKTtcbiAgICBjb25zdCBpc1N0YXRpYyA9IG5vZGUubW9kaWZpZXJzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgbm9kZS5tb2RpZmllcnMuc29tZShtb2QgPT4gbW9kLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuU3RhdGljS2V5d29yZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbm9kZSxcbiAgICAgIGltcGxlbWVudGF0aW9uOiBub2RlLFxuICAgICAga2luZCxcbiAgICAgIHR5cGU6IG5vZGUudHlwZSB8fCBudWxsLFxuICAgICAgbmFtZSxcbiAgICAgIG5hbWVOb2RlLFxuICAgICAgZGVjb3JhdG9ycyxcbiAgICAgIHZhbHVlLFxuICAgICAgaXNTdGF0aWMsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmbGVjdE5hbWVPZkRlY2xhcmF0aW9uKGRlY2w6IHRzLkRlY2xhcmF0aW9uKTogc3RyaW5nfG51bGwge1xuICBjb25zdCBpZCA9IHJlZmxlY3RJZGVudGlmaWVyT2ZEZWNsYXJhdGlvbihkZWNsKTtcbiAgcmV0dXJuIGlkICYmIGlkLnRleHQgfHwgbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmxlY3RJZGVudGlmaWVyT2ZEZWNsYXJhdGlvbihkZWNsOiB0cy5EZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXJ8bnVsbCB7XG4gIGlmICh0cy5pc0NsYXNzRGVjbGFyYXRpb24oZGVjbCkgfHwgdHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKGRlY2wpKSB7XG4gICAgcmV0dXJuIGRlY2wubmFtZSB8fCBudWxsO1xuICB9IGVsc2UgaWYgKHRzLmlzVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsKSkge1xuICAgIGlmICh0cy5pc0lkZW50aWZpZXIoZGVjbC5uYW1lKSkge1xuICAgICAgcmV0dXJuIGRlY2wubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZsZWN0VHlwZUVudGl0eVRvRGVjbGFyYXRpb24oXG4gICAgdHlwZTogdHMuRW50aXR5TmFtZSwgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpOiB7bm9kZTogdHMuRGVjbGFyYXRpb24sIGZyb206IHN0cmluZ3xudWxsfSB7XG4gIGxldCByZWFsU3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHR5cGUpO1xuICBpZiAocmVhbFN5bWJvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSB0eXBlIGVudGl0eSAke3R5cGUuZ2V0VGV4dCgpfSB0byBzeW1ib2xgKTtcbiAgfVxuICB3aGlsZSAocmVhbFN5bWJvbC5mbGFncyAmIHRzLlN5bWJvbEZsYWdzLkFsaWFzKSB7XG4gICAgcmVhbFN5bWJvbCA9IGNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbChyZWFsU3ltYm9sKTtcbiAgfVxuXG4gIGxldCBub2RlOiB0cy5EZWNsYXJhdGlvbnxudWxsID0gbnVsbDtcbiAgaWYgKHJlYWxTeW1ib2wudmFsdWVEZWNsYXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbm9kZSA9IHJlYWxTeW1ib2wudmFsdWVEZWNsYXJhdGlvbjtcbiAgfSBlbHNlIGlmIChyZWFsU3ltYm9sLmRlY2xhcmF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHJlYWxTeW1ib2wuZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgIG5vZGUgPSByZWFsU3ltYm9sLmRlY2xhcmF0aW9uc1swXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIHR5cGUgZW50aXR5IHN5bWJvbCB0byBkZWNsYXJhdGlvbmApO1xuICB9XG5cbiAgaWYgKHRzLmlzUXVhbGlmaWVkTmFtZSh0eXBlKSkge1xuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKHR5cGUubGVmdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGhhbmRsZSBxdWFsaWZpZWQgbmFtZSB3aXRoIG5vbi1pZGVudGlmaWVyIGxoc2ApO1xuICAgIH1cbiAgICBjb25zdCBzeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24odHlwZS5sZWZ0KTtcbiAgICBpZiAoc3ltYm9sID09PSB1bmRlZmluZWQgfHwgc3ltYm9sLmRlY2xhcmF0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHN5bWJvbC5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIHF1YWxpZmllZCB0eXBlIGVudGl0eSBsaHMgdG8gc3ltYm9sYCk7XG4gICAgfVxuICAgIGNvbnN0IGRlY2wgPSBzeW1ib2wuZGVjbGFyYXRpb25zWzBdO1xuICAgIGlmICh0cy5pc05hbWVzcGFjZUltcG9ydChkZWNsKSkge1xuICAgICAgY29uc3QgY2xhdXNlID0gZGVjbC5wYXJlbnQhO1xuICAgICAgY29uc3QgaW1wb3J0RGVjbCA9IGNsYXVzZS5wYXJlbnQhO1xuICAgICAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwoaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIHNwZWNpZmllciBpcyBub3QgYSBzdHJpbmdgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7bm9kZSwgZnJvbTogaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIudGV4dH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBpbXBvcnQgdHlwZT9gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtub2RlLCBmcm9tOiBudWxsfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyVG9NZW1iZXJzV2l0aERlY29yYXRvcihtZW1iZXJzOiBDbGFzc01lbWJlcltdLCBuYW1lOiBzdHJpbmcsIG1vZHVsZT86IHN0cmluZyk6XG4gICAge21lbWJlcjogQ2xhc3NNZW1iZXIsIGRlY29yYXRvcnM6IERlY29yYXRvcltdfVtdIHtcbiAgcmV0dXJuIG1lbWJlcnMuZmlsdGVyKG1lbWJlciA9PiAhbWVtYmVyLmlzU3RhdGljKVxuICAgICAgLm1hcChtZW1iZXIgPT4ge1xuICAgICAgICBpZiAobWVtYmVyLmRlY29yYXRvcnMgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBtZW1iZXIuZGVjb3JhdG9ycy5maWx0ZXIoZGVjID0+IHtcbiAgICAgICAgICBpZiAoZGVjLmltcG9ydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlYy5pbXBvcnQubmFtZSA9PT0gbmFtZSAmJiAobW9kdWxlID09PSB1bmRlZmluZWQgfHwgZGVjLmltcG9ydC5mcm9tID09PSBtb2R1bGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjLm5hbWUgPT09IG5hbWUgJiYgbW9kdWxlID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZGVjb3JhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7bWVtYmVyLCBkZWNvcmF0b3JzfTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHttZW1iZXI6IENsYXNzTWVtYmVyLCBkZWNvcmF0b3JzOiBEZWNvcmF0b3JbXX0gPT4gdmFsdWUgIT09IG51bGwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE1lbWJlcihcbiAgICBtZW1iZXJzOiBDbGFzc01lbWJlcltdLCBuYW1lOiBzdHJpbmcsIGlzU3RhdGljOiBib29sZWFuID0gZmFsc2UpOiBDbGFzc01lbWJlcnxudWxsIHtcbiAgcmV0dXJuIG1lbWJlcnMuZmluZChtZW1iZXIgPT4gbWVtYmVyLmlzU3RhdGljID09PSBpc1N0YXRpYyAmJiBtZW1iZXIubmFtZSA9PT0gbmFtZSkgfHwgbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmxlY3RPYmplY3RMaXRlcmFsKG5vZGU6IHRzLk9iamVjdExpdGVyYWxFeHByZXNzaW9uKTogTWFwPHN0cmluZywgdHMuRXhwcmVzc2lvbj4ge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgdHMuRXhwcmVzc2lvbj4oKTtcbiAgbm9kZS5wcm9wZXJ0aWVzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKHRzLmlzUHJvcGVydHlBc3NpZ25tZW50KHByb3ApKSB7XG4gICAgICBjb25zdCBuYW1lID0gcHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcC5uYW1lKTtcbiAgICAgIGlmIChuYW1lID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG1hcC5zZXQobmFtZSwgcHJvcC5pbml0aWFsaXplcik7XG4gICAgfSBlbHNlIGlmICh0cy5pc1Nob3J0aGFuZFByb3BlcnR5QXNzaWdubWVudChwcm9wKSkge1xuICAgICAgbWFwLnNldChwcm9wLm5hbWUudGV4dCwgcHJvcC5uYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtYXA7XG59XG5cbmZ1bmN0aW9uIGNhc3REZWNsYXJhdGlvblRvQ2xhc3NPckRpZShkZWNsYXJhdGlvbjogQ2xhc3NEZWNsYXJhdGlvbik6XG4gICAgQ2xhc3NEZWNsYXJhdGlvbjx0cy5DbGFzc0RlY2xhcmF0aW9uPiB7XG4gIGlmICghdHMuaXNDbGFzc0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFJlZmxlY3Rpbmcgb24gYSAke3RzLlN5bnRheEtpbmRbZGVjbGFyYXRpb24ua2luZF19IGluc3RlYWQgb2YgYSBDbGFzc0RlY2xhcmF0aW9uLmApO1xuICB9XG4gIHJldHVybiBkZWNsYXJhdGlvbjtcbn1cblxuZnVuY3Rpb24gcGFyYW1ldGVyTmFtZShuYW1lOiB0cy5CaW5kaW5nTmFtZSk6IHN0cmluZ3xudWxsIHtcbiAgaWYgKHRzLmlzSWRlbnRpZmllcihuYW1lKSkge1xuICAgIHJldHVybiBuYW1lLnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvcGVydHlOYW1lVG9TdHJpbmcobm9kZTogdHMuUHJvcGVydHlOYW1lKTogc3RyaW5nfG51bGwge1xuICBpZiAodHMuaXNJZGVudGlmaWVyKG5vZGUpIHx8IHRzLmlzU3RyaW5nTGl0ZXJhbChub2RlKSB8fCB0cy5pc051bWVyaWNMaXRlcmFsKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUudGV4dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxlZnQgbW9zdCBpZGVudGlmaWVyIGluIGEgcXVhbGlmaWVkIHR5cGUgY2hhaW4uIEUuZy4gdGhlIGBhYCBvZiBgYS5iLmMuU29tZVR5cGVgLlxuICogQHBhcmFtIHF1YWxpZmllZE5hbWUgVGhlIHN0YXJ0aW5nIHByb3BlcnR5IGFjY2VzcyBleHByZXNzaW9uIGZyb20gd2hpY2ggd2Ugd2FudCB0byBjb21wdXRlXG4gKiB0aGUgbGVmdCBtb3N0IGlkZW50aWZpZXIuXG4gKiBAcmV0dXJucyB0aGUgbGVmdCBtb3N0IGlkZW50aWZpZXIgaW4gdGhlIGNoYWluIG9yIGBudWxsYCBpZiBpdCBpcyBub3QgYW4gaWRlbnRpZmllci5cbiAqL1xuZnVuY3Rpb24gZ2V0UXVhbGlmaWVkTmFtZVJvb3QocXVhbGlmaWVkTmFtZTogdHMuUXVhbGlmaWVkTmFtZSk6IHRzLklkZW50aWZpZXJ8bnVsbCB7XG4gIHdoaWxlICh0cy5pc1F1YWxpZmllZE5hbWUocXVhbGlmaWVkTmFtZS5sZWZ0KSkge1xuICAgIHF1YWxpZmllZE5hbWUgPSBxdWFsaWZpZWROYW1lLmxlZnQ7XG4gIH1cbiAgcmV0dXJuIHRzLmlzSWRlbnRpZmllcihxdWFsaWZpZWROYW1lLmxlZnQpID8gcXVhbGlmaWVkTmFtZS5sZWZ0IDogbnVsbDtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsZWZ0IG1vc3QgaWRlbnRpZmllciBpbiBhIHByb3BlcnR5IGFjY2VzcyBjaGFpbi4gRS5nLiB0aGUgYGFgIG9mIGBhLmIuYy5kYC5cbiAqIEBwYXJhbSBwcm9wZXJ0eUFjY2VzcyBUaGUgc3RhcnRpbmcgcHJvcGVydHkgYWNjZXNzIGV4cHJlc3Npb24gZnJvbSB3aGljaCB3ZSB3YW50IHRvIGNvbXB1dGVcbiAqIHRoZSBsZWZ0IG1vc3QgaWRlbnRpZmllci5cbiAqIEByZXR1cm5zIHRoZSBsZWZ0IG1vc3QgaWRlbnRpZmllciBpbiB0aGUgY2hhaW4gb3IgYG51bGxgIGlmIGl0IGlzIG5vdCBhbiBpZGVudGlmaWVyLlxuICovXG5mdW5jdGlvbiBnZXRGYXJMZWZ0SWRlbnRpZmllcihwcm9wZXJ0eUFjY2VzczogdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKTogdHMuSWRlbnRpZmllcnxudWxsIHtcbiAgd2hpbGUgKHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHByb3BlcnR5QWNjZXNzLmV4cHJlc3Npb24pKSB7XG4gICAgcHJvcGVydHlBY2Nlc3MgPSBwcm9wZXJ0eUFjY2Vzcy5leHByZXNzaW9uO1xuICB9XG4gIHJldHVybiB0cy5pc0lkZW50aWZpZXIocHJvcGVydHlBY2Nlc3MuZXhwcmVzc2lvbikgPyBwcm9wZXJ0eUFjY2Vzcy5leHByZXNzaW9uIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIEltcG9ydERlY2xhcmF0aW9uIGZvciB0aGUgZ2l2ZW4gYG5vZGVgIGlmIGl0IGlzIGVpdGhlciBhbiBgSW1wb3J0U3BlY2lmaWVyYCBvciBhXG4gKiBgTmFtZXNwYWNlSW1wb3J0YC4gSWYgbm90IHJldHVybiBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdJbXBvcnREZWNsYXJhdGlvbihub2RlOiB0cy5Ob2RlKTogdHMuSW1wb3J0RGVjbGFyYXRpb258bnVsbCB7XG4gIHJldHVybiB0cy5pc0ltcG9ydFNwZWNpZmllcihub2RlKSA/IG5vZGUucGFyZW50IS5wYXJlbnQhLnBhcmVudCEgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5pc05hbWVzcGFjZUltcG9ydChub2RlKSA/IG5vZGUucGFyZW50LnBhcmVudCA6IG51bGw7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbmFtZSBieSB3aGljaCB0aGUgYGRlY2xgIHdhcyBleHBvcnRlZCwgbm90IGltcG9ydGVkLlxuICogSWYgbm8gc3VjaCBkZWNsYXJhdGlvbiBjYW4gYmUgZm91bmQgKGUuZy4gaXQgaXMgYSBuYW1lc3BhY2UgaW1wb3J0KVxuICogdGhlbiBmYWxsYmFjayB0byB0aGUgYG9yaWdpbmFsSWRgLlxuICovXG5mdW5jdGlvbiBnZXRFeHBvcnRlZE5hbWUoZGVjbDogdHMuRGVjbGFyYXRpb24sIG9yaWdpbmFsSWQ6IHRzLklkZW50aWZpZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdHMuaXNJbXBvcnRTcGVjaWZpZXIoZGVjbCkgP1xuICAgICAgKGRlY2wucHJvcGVydHlOYW1lICE9PSB1bmRlZmluZWQgPyBkZWNsLnByb3BlcnR5TmFtZSA6IGRlY2wubmFtZSkudGV4dCA6XG4gICAgICBvcmlnaW5hbElkLnRleHQ7XG59XG4iXX0=
|
|
560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvdHlwZXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILCtCQUFpQztJQUVqQyw0RUFBZ0w7SUFDaEwsOEZBQTRDO0lBRTVDOztPQUVHO0lBRUg7UUFDRSxrQ0FBc0IsT0FBdUI7WUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFBRyxDQUFDO1FBRWpELDZEQUEwQixHQUExQixVQUEyQixXQUEyQjtZQUF0RCxpQkFNQztZQUxDLElBQUksV0FBVyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUMvRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFBLFNBQVMsSUFBSSxPQUFBLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBakMsQ0FBaUMsQ0FBQztpQkFDNUUsTUFBTSxDQUFDLFVBQUMsR0FBRyxJQUF1QixPQUFBLEdBQUcsS0FBSyxJQUFJLEVBQVosQ0FBWSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELG9EQUFpQixHQUFqQixVQUFrQixLQUF1QjtZQUF6QyxpQkFJQztZQUhDLElBQU0sT0FBTyxHQUFHLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxLQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUEzQixDQUEyQixDQUFDO2lCQUM1RCxNQUFNLENBQUMsVUFBQyxNQUFNLElBQTRCLE9BQUEsTUFBTSxLQUFL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QUksQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEUsVUFBVSxDQUFDLElBQUksQ0FBQztJQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9uLCBDbGFzc01lbWJlciwgQ2xhc3NNZW1iZXJLaW5kLCBDdG9yUGFyYW1ldGVyLCBEZWNsYXJhdGlvbiwgRGVjb3JhdG9yLCBGdW5jdGlvbkRlZmluaXRpb24sIEltcG9ydCwgaXNEZWNvcmF0b3JJZGVudGlmaWVyLCBSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi9ob3N0JztcbmltcG9ydCB7dHlwZVRvVmFsdWV9IGZyb20gJy4vdHlwZV90b192YWx1ZSc7XG5cbi8qKlxuICogcmVmbGVjdG9yLnRzIGltcGxlbWVudHMgc3RhdGljIHJlZmxlY3Rpb24gb2YgZGVjbGFyYXRpb25zIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGB0cy5UeXBlQ2hlY2tlcmAuXG4gKi9cblxuZXhwb3J0IGNsYXNzIFR5cGVTY3JpcHRSZWZsZWN0aW9uSG9zdCBpbXBsZW1lbnRzIFJlZmxlY3Rpb25Ib3N0IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKSB7fVxuXG4gIGdldERlY29yYXRvcnNPZkRlY2xhcmF0aW9uKGRlY2xhcmF0aW9uOiB0cy5EZWNsYXJhdGlvbik6IERlY29yYXRvcltdfG51bGwge1xuICAgIGlmIChkZWNsYXJhdGlvbi5kZWNvcmF0b3JzID09PSB1bmRlZmluZWQgfHwgZGVjbGFyYXRpb24uZGVjb3JhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZGVjbGFyYXRpb24uZGVjb3JhdG9ycy5tYXAoZGVjb3JhdG9yID0+IHRoaXMuX3JlZmxlY3REZWNvcmF0b3IoZGVjb3JhdG9yKSlcbiAgICAgICAgLmZpbHRlcigoZGVjKTogZGVjIGlzIERlY29yYXRvciA9PiBkZWMgIT09IG51bGwpO1xuICB9XG5cbiAgZ2V0TWVtYmVyc09mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBDbGFzc01lbWJlcltdIHtcbiAgICBjb25zdCB0c0NsYXp6ID0gY2FzdERlY2xhcmF0aW9uVG9DbGFzc09yRGllKGNsYXp6KTtcbiAgICByZXR1cm4gdHNDbGF6ei5tZW1iZXJzLm1hcChtZW1iZXIgPT4gdGhpcy5fcmVmbGVjdE1lbWJlcihtZW1iZXIpKVxuICAgICAgICAuZmlsdGVyKChtZW1iZXIpOiBtZW1iZXIgaXMgQ2xhc3NNZW1iZXIgPT4gbWVtYmVyICE9PSBudWxsKTtcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9yUGFyYW1ldGVycyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IEN0b3JQYXJhbWV0ZXJbXXxudWxsIHtcbiAgICBjb25zdCB0c0NsYXp6ID0gY2FzdERlY2xhcmF0aW9uVG9DbGFzc09yRGllKGNsYXp6KTtcblxuICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGEgYGJvZHlgLiBUaGUgY29uc3RydWN0b3JzIHdpdGhvdXQgYSBgYm9keWAgYXJlIG92ZXJsb2Fkc1xuICAgIC8vIHdoZXJlYXMgd2Ugd2FudCB0aGUgaW1wbGVtZW50YXRpb24gc2luY2UgaXQncyB0aGUgb25lIHRoYXQnbGwgYmUgZXhlY3V0ZWQgYW5kIHdoaWNoIGNhblxuICAgIC8vIGhhdmUgZGVjb3JhdG9ycy5cbiAgICBjb25zdCBjdG9yID0gdHNDbGF6ei5tZW1iZXJzLmZpbmQoXG4gICAgICAgIChtZW1iZXIpOiBtZW1iZXIgaXMgdHMuQ29uc3RydWN0b3JEZWNsYXJhdGlvbiA9PlxuICAgICAgICAgICAgdHMuaXNDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKG1lbWJlcikgJiYgbWVtYmVyLmJvZHkgIT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKGN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN0b3IucGFyYW1ldGVycy5tYXAobm9kZSA9PiB7XG4gICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGlzIGVhc3kuXG4gICAgICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTmFtZShub2RlLm5hbWUpO1xuXG4gICAgICBjb25zdCBkZWNvcmF0b3JzID0gdGhpcy5nZXREZWNvcmF0b3JzT2ZEZWNsYXJhdGlvbihub2RlKTtcblxuICAgICAgLy8gSXQgbWF5IG9yIG1heSBub3QgYmUgcG9zc2libGUgdG8gd3JpdGUgYW4gZXhwcmVzc2lvbiB0aGF0IHJlZmVycyB0byB0aGUgdmFsdWUgc2lkZSBvZiB0aGVcbiAgICAgIC8vIHR5cGUgbmFtZWQgZm9yIHRoZSBwYXJhbWV0ZXIuXG5cbiAgICAgIGxldCBvcmlnaW5hbFR5cGVOb2RlID0gbm9kZS50eXBlIHx8IG51bGw7XG4gICAgICBsZXQgdHlwZU5vZGUgPSBvcmlnaW5hbFR5cGVOb2RlO1xuXG4gICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgc2ltcGxlIG51bGxhYmxlIHVuaW9uIHR5cGUgZS5nLiBgZm9vOiBGb298bnVsbGBcbiAgICAgIC8vIGFuZCBleHRyYWN0IHRoZSB0eXBlLiBNb3JlIGNvbXBsZXggdW5pb24gdHlwZXMgZS5nLiBgZm9vOiBGb298QmFyYCBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byBzdXBwb3J0IGBmb286IEZvb3x1bmRlZmluZWRgIGJlY2F1c2UgQW5ndWxhcidzIERJIGluamVjdHMgYG51bGxgIGZvclxuICAgICAgLy8gb3B0aW9uYWwgdG9rZXMgdGhhdCBkb24ndCBoYXZlIHByb3ZpZGVycy5cbiAgICAgIGlmICh0eXBlTm9kZSAmJiB0cy5pc1VuaW9uVHlwZU5vZGUodHlwZU5vZGUpKSB7XG4gICAgICAgIGxldCBjaGlsZFR5cGVOb2RlcyA9IHR5cGVOb2RlLnR5cGVzLmZpbHRlcihcbiAgICAgICAgICAgIGNoaWxkVHlwZU5vZGUgPT4gY2hpbGRUeXBlTm9kZS5raW5kICE9PSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkKTtcblxuICAgICAgICBpZiAoY2hpbGRUeXBlTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdHlwZU5vZGUgPSBjaGlsZFR5cGVOb2Rlc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0eXBlTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVZhbHVlUmVmZXJlbmNlID0gdHlwZVRvVmFsdWUodHlwZU5vZGUsIHRoaXMuY2hlY2tlcik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5hbWVOb2RlOiBub2RlLm5hbWUsXG4gICAgICAgIHR5cGVWYWx1ZVJlZmVyZW5jZSxcbiAgICAgICAgdHlwZU5vZGU6IG9yaWdpbmFsVHlwZU5vZGUsXG4gICAgICAgIGRlY29yYXRvcnMsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0SW1wb3J0T2ZJZGVudGlmaWVyKGlkOiB0cy5JZGVudGlmaWVyKTogSW1wb3J0fG51bGwge1xuICAgIGNvbnN0IGRpcmVjdEltcG9ydCA9IHRoaXMuZ2V0RGlyZWN0SW1wb3J0T2ZJZGVudGlmaWVyKGlkKTtcbiAgICBpZiAoZGlyZWN0SW1wb3J0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZGlyZWN0SW1wb3J0O1xuICAgIH0gZWxzZSBpZiAodHMuaXNRdWFsaWZpZWROYW1lKGlkLnBhcmVudCkgJiYgaWQucGFyZW50LnJpZ2h0ID09PSBpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW1wb3J0T2ZOYW1lc3BhY2VkSWRlbnRpZmllcihpZCwgZ2V0UXVhbGlmaWVkTmFtZVJvb3QoaWQucGFyZW50KSk7XG4gICAgfSBlbHNlIGlmICh0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihpZC5wYXJlbnQpICYmIGlkLnBhcmVudC5uYW1lID09PSBpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW1wb3J0T2ZOYW1lc3BhY2VkSWRlbnRpZmllcihpZCwgZ2V0RmFyTGVmdElkZW50aWZpZXIoaWQucGFyZW50KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldEV4cG9ydHNPZk1vZHVsZShub2RlOiB0cy5Ob2RlKTogTWFwPHN0cmluZywgRGVjbGFyYXRpb24+fG51bGwge1xuICAgIC8vIEluIFR5cGVTY3JpcHQgY29kZSwgbW9kdWxlcyBhcmUgb25seSB0cy5Tb3VyY2VGaWxlcy4gVGhyb3cgaWYgdGhlIG5vZGUgaXNuJ3QgYSBtb2R1bGUuXG4gICAgaWYgKCF0cy5pc1NvdXJjZUZpbGUobm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZ2V0RXhwb3J0c09mTW9kdWxlKCkgY2FsbGVkIG9uIG5vbi1Tb3VyY2VGaWxlIGluIFRTIGNvZGVgKTtcbiAgICB9XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIERlY2xhcmF0aW9uPigpO1xuXG4gICAgLy8gUmVmbGVjdCB0aGUgbW9kdWxlIHRvIGEgU3ltYm9sLCBhbmQgdXNlIGdldEV4cG9ydHNPZk1vZHVsZSgpIHRvIGdldCBhIGxpc3Qgb2YgZXhwb3J0ZWRcbiAgICAvLyBTeW1ib2xzLlxuICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMuY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUpO1xuICAgIGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tlci5nZXRFeHBvcnRzT2ZNb2R1bGUoc3ltYm9sKS5mb3JFYWNoKGV4cG9ydFN5bWJvbCA9PiB7XG4gICAgICAvLyBNYXAgZWFjaCBleHBvcnRlZCBTeW1ib2wgdG8gYSBEZWNsYXJhdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSBtYXAuXG4gICAgICBjb25zdCBkZWNsID0gdGhpcy5nZXREZWNsYXJhdGlvbk9mU3ltYm9sKGV4cG9ydFN5bWJvbCwgbnVsbCk7XG4gICAgICBpZiAoZGVjbCAhPT0gbnVsbCkge1xuICAgICAgICBtYXAuc2V0KGV4cG9ydFN5bWJvbC5uYW1lLCBkZWNsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgaXNDbGFzcyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyBDbGFzc0RlY2xhcmF0aW9uIHtcbiAgICAvLyBJbiBUeXBlU2NyaXB0IGNvZGUsIGNsYXNzZXMgYXJlIHRzLkNsYXNzRGVjbGFyYXRpb25zLlxuICAgIC8vIChgbmFtZWAgY2FuIGJlIHVuZGVmaW5lZCBpbiB1bm5hbWVkIGRlZmF1bHQgZXhwb3J0czogYGRlZmF1bHQgZXhwb3J0IGNsYXNzIHsgLi4uIH1gKVxuICAgIHJldHVybiB0cy5pc0NsYXNzRGVjbGFyYXRpb24obm9kZSkgJiYgKG5vZGUubmFtZSAhPT0gdW5kZWZpbmVkKSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKTtcbiAgfVxuXG4gIGhhc0Jhc2VDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodHMuaXNDbGFzc0RlY2xhcmF0aW9uKGNsYXp6KSB8fCB0cy5pc0NsYXNzRXhwcmVzc2lvbihjbGF6eikpICYmXG4gICAgICAgIGNsYXp6Lmhlcml0YWdlQ2xhdXNlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGNsYXp6Lmhlcml0YWdlQ2xhdXNlcy5zb21lKGNsYXVzZSA9PiBjbGF1c2UudG9rZW4gPT09IHRzLlN5bnRheEtpbmQuRXh0ZW5kc0tleXdvcmQpO1xuICB9XG5cbiAgZ2V0QmFzZUNsYXNzRXhwcmVzc2lvbihjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbCB7XG4gICAgaWYgKCEodHMuaXNDbGFzc0RlY2xhcmF0aW9uKGNsYXp6KSB8fCB0cy5pc0NsYXNzRXhwcmVzc2lvbihjbGF6eikpIHx8XG4gICAgICAgIGNsYXp6Lmhlcml0YWdlQ2xhdXNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5kc0NsYXVzZSA9XG4gICAgICAgIGNsYXp6Lmhlcml0YWdlQ2xhdXNlcy5maW5kKGNsYXVzZSA9PiBjbGF1c2UudG9rZW4gPT09IHRzLlN5bnRheEtpbmQuRXh0ZW5kc0tleXdvcmQpO1xuICAgIGlmIChleHRlbmRzQ2xhdXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBleHRlbmRzVHlwZSA9IGV4dGVuZHNDbGF1c2UudHlwZXNbMF07XG4gICAgaWYgKGV4dGVuZHNUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5kc1R5cGUuZXhwcmVzc2lvbjtcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyKGlkOiB0cy5JZGVudGlmaWVyKTogRGVjbGFyYXRpb258bnVsbCB7XG4gICAgLy8gUmVzb2x2ZSB0aGUgaWRlbnRpZmllciB0byBhIFN5bWJvbCwgYW5kIHJldHVybiB0aGUgZGVjbGFyYXRpb24gb2YgdGhhdC5cbiAgICBsZXQgc3ltYm9sOiB0cy5TeW1ib2x8dW5kZWZpbmVkID0gdGhpcy5jaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oaWQpO1xuICAgIGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldERlY2xhcmF0aW9uT2ZTeW1ib2woc3ltYm9sLCBpZCk7XG4gIH1cblxuICBnZXREZWZpbml0aW9uT2ZGdW5jdGlvbihub2RlOiB0cy5Ob2RlKTogRnVuY3Rpb25EZWZpbml0aW9ufG51bGwge1xuICAgIGlmICghdHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpICYmICF0cy5pc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpICYmXG4gICAgICAgICF0cy5pc0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBub2RlLFxuICAgICAgYm9keTogbm9kZS5ib2R5ICE9PSB1bmRlZmluZWQgPyBBcnJheS5mcm9tKG5vZGUuYm9keS5zdGF0ZW1lbnRzKSA6IG51bGwsXG4gICAgICBwYXJhbWV0ZXJzOiBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5hbWUocGFyYW0ubmFtZSk7XG4gICAgICAgIGNvbnN0IGluaXRpYWxpemVyID0gcGFyYW0uaW5pdGlhbGl6ZXIgfHwgbnVsbDtcbiAgICAgICAgcmV0dXJuIHtuYW1lLCBub2RlOiBwYXJhbSwgaW5pdGlhbGl6ZXJ9O1xuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIGdldEdlbmVyaWNBcml0eU9mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBudW1iZXJ8bnVsbCB7XG4gICAgaWYgKCF0cy5pc0NsYXNzRGVjbGFyYXRpb24oY2xhenopKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXp6LnR5cGVQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgPyBjbGF6ei50eXBlUGFyYW1ldGVycy5sZW5ndGggOiAwO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVWYWx1ZShkZWNsYXJhdGlvbjogdHMuVmFyaWFibGVEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbCB7XG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uLmluaXRpYWxpemVyIHx8IG51bGw7XG4gIH1cblxuICBnZXREdHNEZWNsYXJhdGlvbihfOiB0cy5EZWNsYXJhdGlvbik6IHRzLkRlY2xhcmF0aW9ufG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0SW50ZXJuYWxOYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXIge1xuICAgIHJldHVybiBjbGF6ei5uYW1lO1xuICB9XG5cbiAgZ2V0QWRqYWNlbnROYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXIge1xuICAgIHJldHVybiBjbGF6ei5uYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpcmVjdEltcG9ydE9mSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IEltcG9ydHxudWxsIHtcbiAgICBjb25zdCBzeW1ib2wgPSB0aGlzLmNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihpZCk7XG5cbiAgICBpZiAoc3ltYm9sID09PSB1bmRlZmluZWQgfHwgc3ltYm9sLmRlY2xhcmF0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHN5bWJvbC5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNsOiB0cy5EZWNsYXJhdGlvbiA9IHN5bWJvbC5kZWNsYXJhdGlvbnNbMF07XG4gICAgY29uc3QgaW1wb3J0RGVjbCA9IGdldENvbnRhaW5pbmdJbXBvcnREZWNsYXJhdGlvbihkZWNsKTtcblxuICAgIC8vIElnbm9yZSBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBsb2NhbGx5IChub3QgaW1wb3J0ZWQpLlxuICAgIGlmIChpbXBvcnREZWNsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUaGUgbW9kdWxlIHNwZWNpZmllciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgc3RyaW5nIGxpdGVyYWwsIHNvIHRoaXMgc2hvdWxkIGFsd2F5cyBwYXNzLlxuICAgIGlmICghdHMuaXNTdHJpbmdMaXRlcmFsKGltcG9ydERlY2wubW9kdWxlU3BlY2lmaWVyKSkge1xuICAgICAgLy8gTm90IGFsbG93ZWQgdG8gaGFwcGVuIGluIFR5cGVTY3JpcHQgQVNUcy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7ZnJvbTogaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIudGV4dCwgbmFtZTogZ2V0RXhwb3J0ZWROYW1lKGRlY2wsIGlkKX07XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIGdldCB0aGUgaW1wb3J0IGluZm8gZm9yIHRoaXMgaWRlbnRpZmllciBhcyB0aG91Z2ggaXQgaXMgYSBuYW1lc3BhY2VkIGltcG9ydC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBpZGVudGlmaWVyIGlzIHRoZSBgRGlyZWN0aXZlYCBwYXJ0IG9mIGEgcXVhbGlmaWVkIHR5cGUgY2hhaW4gbGlrZTpcbiAgICpcbiAgICogYGBgXG4gICAqIGNvcmUuRGlyZWN0aXZlXG4gICAqIGBgYFxuICAgKlxuICAgKiB0aGVuIGl0IG1pZ2h0IGJlIHRoYXQgYGNvcmVgIGlzIGEgbmFtZXNwYWNlIGltcG9ydCBzdWNoIGFzOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0ICogYXMgY29yZSBmcm9tICd0c2xpYic7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gaWQgdGhlIFR5cGVTY3JpcHQgaWRlbnRpZmllciB0byBmaW5kIHRoZSBpbXBvcnQgaW5mbyBmb3IuXG4gICAqIEByZXR1cm5zIFRoZSBpbXBvcnQgaW5mbyBpZiB0aGlzIGlzIGEgbmFtZXNwYWNlZCBpbXBvcnQgb3IgYG51bGxgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEltcG9ydE9mTmFtZXNwYWNlZElkZW50aWZpZXIoXG4gICAgICBpZDogdHMuSWRlbnRpZmllciwgbmFtZXNwYWNlSWRlbnRpZmllcjogdHMuSWRlbnRpZmllcnxudWxsKTogSW1wb3J0fG51bGwge1xuICAgIGlmIChuYW1lc3BhY2VJZGVudGlmaWVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbmFtZXNwYWNlU3ltYm9sID0gdGhpcy5jaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obmFtZXNwYWNlSWRlbnRpZmllcik7XG4gICAgaWYgKCFuYW1lc3BhY2VTeW1ib2wpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9XG4gICAgICAgIG5hbWVzcGFjZVN5bWJvbC5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxID8gbmFtZXNwYWNlU3ltYm9sLmRlY2xhcmF0aW9uc1swXSA6IG51bGw7XG4gICAgaWYgKCFkZWNsYXJhdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzcGFjZURlY2xhcmF0aW9uID0gdHMuaXNOYW1lc3BhY2VJbXBvcnQoZGVjbGFyYXRpb24pID8gZGVjbGFyYXRpb24gOiBudWxsO1xuICAgIGlmICghbmFtZXNwYWNlRGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydERlY2xhcmF0aW9uID0gbmFtZXNwYWNlRGVjbGFyYXRpb24ucGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXRzLmlzU3RyaW5nTGl0ZXJhbChpbXBvcnREZWNsYXJhdGlvbi5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgICAvLyBTaG91bGQgbm90IGhhcHBlbiBhcyB0aGlzIHdvdWxkIGJlIGludmFsaWQgVHlwZXNTY3JpcHRcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBpbXBvcnREZWNsYXJhdGlvbi5tb2R1bGVTcGVjaWZpZXIudGV4dCxcbiAgICAgIG5hbWU6IGlkLnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgYHRzLlN5bWJvbGAgdG8gaXRzIGRlY2xhcmF0aW9uLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBgdmlhTW9kdWxlYCBhbG9uZyB0aGUgd2F5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldERlY2xhcmF0aW9uT2ZTeW1ib2woc3ltYm9sOiB0cy5TeW1ib2wsIG9yaWdpbmFsSWQ6IHRzLklkZW50aWZpZXJ8bnVsbCk6IERlY2xhcmF0aW9uXG4gICAgICB8bnVsbCB7XG4gICAgLy8gSWYgdGhlIHN5bWJvbCBwb2ludHMgdG8gYSBTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQsIHJlc29sdmUgaXQuXG4gICAgbGV0IHZhbHVlRGVjbGFyYXRpb246IHRzLkRlY2xhcmF0aW9ufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWVEZWNsYXJhdGlvbiA9IHN5bWJvbC52YWx1ZURlY2xhcmF0aW9uO1xuICAgIH0gZWxzZSBpZiAoc3ltYm9sLmRlY2xhcmF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHN5bWJvbC5kZWNsYXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsdWVEZWNsYXJhdGlvbiA9IHN5bWJvbC5kZWNsYXJhdGlvbnNbMF07XG4gICAgfVxuICAgIGlmICh2YWx1ZURlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQodmFsdWVEZWNsYXJhdGlvbikpIHtcbiAgICAgIGNvbnN0IHNob3J0aGFuZFN5bWJvbCA9IHRoaXMuY2hlY2tlci5nZXRTaG9ydGhhbmRBc3NpZ25tZW50VmFsdWVTeW1ib2wodmFsdWVEZWNsYXJhdGlvbik7XG4gICAgICBpZiAoc2hvcnRoYW5kU3ltYm9sID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXREZWNsYXJhdGlvbk9mU3ltYm9sKHNob3J0aGFuZFN5bWJvbCwgb3JpZ2luYWxJZCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZURlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdHMuaXNFeHBvcnRTcGVjaWZpZXIodmFsdWVEZWNsYXJhdGlvbikpIHtcbiAgICAgIGNvbnN0IHRhcmdldFN5bWJvbCA9IHRoaXMuY2hlY2tlci5nZXRFeHBvcnRTcGVjaWZpZXJMb2NhbFRhcmdldFN5bWJvbCh2YWx1ZURlY2xhcmF0aW9uKTtcbiAgICAgIGlmICh0YXJnZXRTeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldERlY2xhcmF0aW9uT2ZTeW1ib2wodGFyZ2V0U3ltYm9sLCBvcmlnaW5hbElkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRJbmZvID0gb3JpZ2luYWxJZCAmJiB0aGlzLmdldEltcG9ydE9mSWRlbnRpZmllcihvcmlnaW5hbElkKTtcbiAgICBjb25zdCB2aWFNb2R1bGUgPVxuICAgICAgICBpbXBvcnRJbmZvICE9PSBudWxsICYmIGltcG9ydEluZm8uZnJvbSAhPT0gbnVsbCAmJiAhaW1wb3J0SW5mby5mcm9tLnN0YXJ0c1dpdGgoJy4nKSA/XG4gICAgICAgIGltcG9ydEluZm8uZnJvbSA6XG4gICAgICAgIG51bGw7XG5cbiAgICAvLyBOb3csIHJlc29sdmUgdGhlIFN5bWJvbCB0byBpdHMgZGVjbGFyYXRpb24gYnkgZm9sbG93aW5nIGFueSBhbmQgYWxsIGFsaWFzZXMuXG4gICAgd2hpbGUgKHN5bWJvbC5mbGFncyAmIHRzLlN5bWJvbEZsYWdzLkFsaWFzKSB7XG4gICAgICBzeW1ib2wgPSB0aGlzLmNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbChzeW1ib2wpO1xuICAgIH1cblxuICAgIC8vIExvb2sgYXQgdGhlIHJlc29sdmVkIFN5bWJvbCdzIGRlY2xhcmF0aW9ucyBhbmQgcGljayBvbmUgb2YgdGhlbSB0byByZXR1cm4uIFZhbHVlIGRlY2xhcmF0aW9uc1xuICAgIC8vIGFyZSBnaXZlbiBwcmVjZWRlbmNlIG92ZXIgdHlwZSBkZWNsYXJhdGlvbnMuXG4gICAgaWYgKHN5bWJvbC52YWx1ZURlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IHN5bWJvbC52YWx1ZURlY2xhcmF0aW9uLFxuICAgICAgICBrbm93bjogbnVsbCxcbiAgICAgICAgdmlhTW9kdWxlLFxuICAgICAgICBpZGVudGl0eTogbnVsbCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChzeW1ib2wuZGVjbGFyYXRpb25zICE9PSB1bmRlZmluZWQgJiYgc3ltYm9sLmRlY2xhcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBzeW1ib2wuZGVjbGFyYXRpb25zWzBdLFxuICAgICAgICBrbm93bjogbnVsbCxcbiAgICAgICAgdmlhTW9kdWxlLFxuICAgICAgICBpZGVudGl0eTogbnVsbCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZmxlY3REZWNvcmF0b3Iobm9kZTogdHMuRGVjb3JhdG9yKTogRGVjb3JhdG9yfG51bGwge1xuICAgIC8vIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgZGVjb3JhdG9yIGV4cHJlc3Npb24gaW50byBhIHJlZmVyZW5jZSB0byBhIGNvbmNyZXRlIElkZW50aWZpZXIuIFRoZVxuICAgIC8vIGV4cHJlc3Npb24gbWF5IGNvbnRhaW4gYSBjYWxsIHRvIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgZGVjb3JhdG9yIGZ1bmN0aW9uLCBpbiB3aGljaFxuICAgIC8vIGNhc2Ugd2Ugd2FudCB0byByZXR1cm4gdGhlIGFyZ3VtZW50cy5cbiAgICBsZXQgZGVjb3JhdG9yRXhwcjogdHMuRXhwcmVzc2lvbiA9IG5vZGUuZXhwcmVzc2lvbjtcbiAgICBsZXQgYXJnczogdHMuRXhwcmVzc2lvbltdfG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGNhbGwgZXhwcmVzc2lvbnMuXG4gICAgaWYgKHRzLmlzQ2FsbEV4cHJlc3Npb24oZGVjb3JhdG9yRXhwcikpIHtcbiAgICAgIGFyZ3MgPSBBcnJheS5mcm9tKGRlY29yYXRvckV4cHIuYXJndW1lbnRzKTtcbiAgICAgIGRlY29yYXRvckV4cHIgPSBkZWNvcmF0b3JFeHByLmV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgLy8gVGhlIGZpbmFsIHJlc29sdmVkIGRlY29yYXRvciBzaG91bGQgYmUgYSBgdHMuSWRlbnRpZmllcmAgLSBpZiBpdCdzIG5vdCwgdGhlbiBzb21ldGhpbmcgaXNcbiAgICAvLyB3cm9uZyBhbmQgdGhlIGRlY29yYXRvciBjYW4ndCBiZSByZXNvbHZlZCBzdGF0aWNhbGx5LlxuICAgIGlmICghaXNEZWNvcmF0b3JJZGVudGlmaWVyKGRlY29yYXRvckV4cHIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvcmF0b3JJZGVudGlmaWVyID0gdHMuaXNJZGVudGlmaWVyKGRlY29yYXRvckV4cHIpID8gZGVjb3JhdG9yRXhwciA6IGRlY29yYXRvckV4cHIubmFtZTtcbiAgICBjb25zdCBpbXBvcnREZWNsID0gdGhpcy5nZXRJbXBvcnRPZklkZW50aWZpZXIoZGVjb3JhdG9ySWRlbnRpZmllcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogZGVjb3JhdG9ySWRlbnRpZmllci50ZXh0LFxuICAgICAgaWRlbnRpZmllcjogZGVjb3JhdG9yRXhwcixcbiAgICAgIGltcG9ydDogaW1wb3J0RGVjbCxcbiAgICAgIG5vZGUsXG4gICAgICBhcmdzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9yZWZsZWN0TWVtYmVyKG5vZGU6IHRzLkNsYXNzRWxlbWVudCk6IENsYXNzTWVtYmVyfG51bGwge1xuICAgIGxldCBraW5kOiBDbGFzc01lbWJlcktpbmR8bnVsbCA9IG51bGw7XG4gICAgbGV0IHZhbHVlOiB0cy5FeHByZXNzaW9ufG51bGwgPSBudWxsO1xuICAgIGxldCBuYW1lOiBzdHJpbmd8bnVsbCA9IG51bGw7XG4gICAgbGV0IG5hbWVOb2RlOiB0cy5JZGVudGlmaWVyfG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRzLmlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAga2luZCA9IENsYXNzTWVtYmVyS2luZC5Qcm9wZXJ0eTtcbiAgICAgIHZhbHVlID0gbm9kZS5pbml0aWFsaXplciB8fCBudWxsO1xuICAgIH0gZWxzZSBpZiAodHMuaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICBraW5kID0gQ2xhc3NNZW1iZXJLaW5kLkdldHRlcjtcbiAgICB9IGVsc2UgaWYgKHRzLmlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAga2luZCA9IENsYXNzTWVtYmVyS2luZC5TZXR0ZXI7XG4gICAgfSBlbHNlIGlmICh0cy5pc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICBraW5kID0gQ2xhc3NNZW1iZXJLaW5kLk1ldGhvZDtcbiAgICB9IGVsc2UgaWYgKHRzLmlzQ29uc3RydWN0b3JEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAga2luZCA9IENsYXNzTWVtYmVyS2luZC5Db25zdHJ1Y3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRzLmlzQ29uc3RydWN0b3JEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgbmFtZSA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgfSBlbHNlIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgbmFtZSA9IG5vZGUubmFtZS50ZXh0O1xuICAgICAgbmFtZU5vZGUgPSBub2RlLm5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29yYXRvcnMgPSB0aGlzLmdldERlY29yYXRvcnNPZkRlY2xhcmF0aW9uKG5vZGUpO1xuICAgIGNvbnN0IGlzU3RhdGljID0gbm9kZS5tb2RpZmllcnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBub2RlLm1vZGlmaWVycy5zb21lKG1vZCA9PiBtb2Qua2luZCA9PT0gdHMuU3ludGF4S2luZC5TdGF0aWNLZXl3b3JkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBub2RlLFxuICAgICAgaW1wbGVtZW50YXRpb246IG5vZGUsXG4gICAgICBraW5kLFxuICAgICAgdHlwZTogbm9kZS50eXBlIHx8IG51bGwsXG4gICAgICBuYW1lLFxuICAgICAgbmFtZU5vZGUsXG4gICAgICBkZWNvcmF0b3JzLFxuICAgICAgdmFsdWUsXG4gICAgICBpc1N0YXRpYyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZsZWN0TmFtZU9mRGVjbGFyYXRpb24oZGVjbDogdHMuRGVjbGFyYXRpb24pOiBzdHJpbmd8bnVsbCB7XG4gIGNvbnN0IGlkID0gcmVmbGVjdElkZW50aWZpZXJPZkRlY2xhcmF0aW9uKGRlY2wpO1xuICByZXR1cm4gaWQgJiYgaWQudGV4dCB8fCBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmbGVjdElkZW50aWZpZXJPZkRlY2xhcmF0aW9uKGRlY2w6IHRzLkRlY2xhcmF0aW9uKTogdHMuSWRlbnRpZmllcnxudWxsIHtcbiAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihkZWNsKSB8fCB0cy5pc0Z1bmN0aW9uRGVjbGFyYXRpb24oZGVjbCkpIHtcbiAgICByZXR1cm4gZGVjbC5uYW1lIHx8IG51bGw7XG4gIH0gZWxzZSBpZiAodHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2wpKSB7XG4gICAgaWYgKHRzLmlzSWRlbnRpZmllcihkZWNsLm5hbWUpKSB7XG4gICAgICByZXR1cm4gZGVjbC5uYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmxlY3RUeXBlRW50aXR5VG9EZWNsYXJhdGlvbihcbiAgICB0eXBlOiB0cy5FbnRpdHlOYW1lLCBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcik6IHtub2RlOiB0cy5EZWNsYXJhdGlvbiwgZnJvbTogc3RyaW5nfG51bGx9IHtcbiAgbGV0IHJlYWxTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24odHlwZSk7XG4gIGlmIChyZWFsU3ltYm9sID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIHR5cGUgZW50aXR5ICR7dHlwZS5nZXRUZXh0KCl9IHRvIHN5bWJvbGApO1xuICB9XG4gIHdoaWxlIChyZWFsU3ltYm9sLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuQWxpYXMpIHtcbiAgICByZWFsU3ltYm9sID0gY2hlY2tlci5nZXRBbGlhc2VkU3ltYm9sKHJlYWxTeW1ib2wpO1xuICB9XG5cbiAgbGV0IG5vZGU6IHRzLkRlY2xhcmF0aW9ufG51bGwgPSBudWxsO1xuICBpZiAocmVhbFN5bWJvbC52YWx1ZURlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBub2RlID0gcmVhbFN5bWJvbC52YWx1ZURlY2xhcmF0aW9uO1xuICB9IGVsc2UgaWYgKHJlYWxTeW1ib2wuZGVjbGFyYXRpb25zICE9PSB1bmRlZmluZWQgJiYgcmVhbFN5bWJvbC5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgbm9kZSA9IHJlYWxTeW1ib2wuZGVjbGFyYXRpb25zWzBdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgdHlwZSBlbnRpdHkgc3ltYm9sIHRvIGRlY2xhcmF0aW9uYCk7XG4gIH1cblxuICBpZiAodHMuaXNRdWFsaWZpZWROYW1lKHR5cGUpKSB7XG4gICAgaWYgKCF0cy5pc0lkZW50aWZpZXIodHlwZS5sZWZ0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGFuZGxlIHF1YWxpZmllZCBuYW1lIHdpdGggbm9uLWlkZW50aWZpZXIgbGhzYCk7XG4gICAgfVxuICAgIGNvbnN0IHN5bWJvbCA9IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbih0eXBlLmxlZnQpO1xuICAgIGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCB8fCBzeW1ib2wuZGVjbGFyYXRpb25zID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgc3ltYm9sLmRlY2xhcmF0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgcXVhbGlmaWVkIHR5cGUgZW50aXR5IGxocyB0byBzeW1ib2xgKTtcbiAgICB9XG4gICAgY29uc3QgZGVjbCA9IHN5bWJvbC5kZWNsYXJhdGlvbnNbMF07XG4gICAgaWYgKHRzLmlzTmFtZXNwYWNlSW1wb3J0KGRlY2wpKSB7XG4gICAgICBjb25zdCBjbGF1c2UgPSBkZWNsLnBhcmVudCE7XG4gICAgICBjb25zdCBpbXBvcnREZWNsID0gY2xhdXNlLnBhcmVudCE7XG4gICAgICBpZiAoIXRzLmlzU3RyaW5nTGl0ZXJhbChpbXBvcnREZWNsLm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgc3BlY2lmaWVyIGlzIG5vdCBhIHN0cmluZ2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtub2RlLCBmcm9tOiBpbXBvcnREZWNsLm1vZHVsZVNwZWNpZmllci50ZXh0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGltcG9ydCB0eXBlP2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge25vZGUsIGZyb206IG51bGx9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJUb01lbWJlcnNXaXRoRGVjb3JhdG9yKG1lbWJlcnM6IENsYXNzTWVtYmVyW10sIG5hbWU6IHN0cmluZywgbW9kdWxlPzogc3RyaW5nKTpcbiAgICB7bWVtYmVyOiBDbGFzc01lbWJlciwgZGVjb3JhdG9yczogRGVjb3JhdG9yW119W10ge1xuICByZXR1cm4gbWVtYmVycy5maWx0ZXIobWVtYmVyID0+ICFtZW1iZXIuaXNTdGF0aWMpXG4gICAgICAubWFwKG1lbWJlciA9PiB7XG4gICAgICAgIGlmIChtZW1iZXIuZGVjb3JhdG9ycyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IG1lbWJlci5kZWNvcmF0b3JzLmZpbHRlcihkZWMgPT4ge1xuICAgICAgICAgIGlmIChkZWMuaW1wb3J0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjLmltcG9ydC5uYW1lID09PSBuYW1lICYmIChtb2R1bGUgPT09IHVuZGVmaW5lZCB8fCBkZWMuaW1wb3J0LmZyb20gPT09IG1vZHVsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZWMubmFtZSA9PT0gbmFtZSAmJiBtb2R1bGUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChkZWNvcmF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHttZW1iZXIsIGRlY29yYXRvcnN9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMge21lbWJlcjogQ2xhc3NNZW1iZXIsIGRlY29yYXRvcnM6IERlY29yYXRvcltdfSA9PiB2YWx1ZSAhPT0gbnVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTWVtYmVyKFxuICAgIG1lbWJlcnM6IENsYXNzTWVtYmVyW10sIG5hbWU6IHN0cmluZywgaXNTdGF0aWM6IGJvb2xlYW4gPSBmYWxzZSk6IENsYXNzTWVtYmVyfG51bGwge1xuICByZXR1cm4gbWVtYmVycy5maW5kKG1lbWJlciA9PiBtZW1iZXIuaXNTdGF0aWMgPT09IGlzU3RhdGljICYmIG1lbWJlci5uYW1lID09PSBuYW1lKSB8fCBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmbGVjdE9iamVjdExpdGVyYWwobm9kZTogdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24pOiBNYXA8c3RyaW5nLCB0cy5FeHByZXNzaW9uPiB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCB0cy5FeHByZXNzaW9uPigpO1xuICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAodHMuaXNQcm9wZXJ0eUFzc2lnbm1lbnQocHJvcCkpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wLm5hbWUpO1xuICAgICAgaWYgKG5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbWFwLnNldChuYW1lLCBwcm9wLmluaXRpYWxpemVyKTtcbiAgICB9IGVsc2UgaWYgKHRzLmlzU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50KHByb3ApKSB7XG4gICAgICBtYXAuc2V0KHByb3AubmFtZS50ZXh0LCBwcm9wLm5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuZnVuY3Rpb24gY2FzdERlY2xhcmF0aW9uVG9DbGFzc09yRGllKGRlY2xhcmF0aW9uOiBDbGFzc0RlY2xhcmF0aW9uKTpcbiAgICBDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+IHtcbiAgaWYgKCF0cy5pc0NsYXNzRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUmVmbGVjdGluZyBvbiBhICR7dHMuU3ludGF4S2luZFtkZWNsYXJhdGlvbi5raW5kXX0gaW5zdGVhZCBvZiBhIENsYXNzRGVjbGFyYXRpb24uYCk7XG4gIH1cbiAgcmV0dXJuIGRlY2xhcmF0aW9uO1xufVxuXG5mdW5jdGlvbiBwYXJhbWV0ZXJOYW1lKG5hbWU6IHRzLkJpbmRpbmdOYW1lKTogc3RyaW5nfG51bGwge1xuICBpZiAodHMuaXNJZGVudGlmaWVyKG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUudGV4dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eU5hbWVUb1N0cmluZyhub2RlOiB0cy5Qcm9wZXJ0eU5hbWUpOiBzdHJpbmd8bnVsbCB7XG4gIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZSkgfHwgdHMuaXNTdHJpbmdMaXRlcmFsKG5vZGUpIHx8IHRzLmlzTnVtZXJpY0xpdGVyYWwobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS50ZXh0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbGVmdCBtb3N0IGlkZW50aWZpZXIgaW4gYSBxdWFsaWZpZWQgdHlwZSBjaGFpbi4gRS5nLiB0aGUgYGFgIG9mIGBhLmIuYy5Tb21lVHlwZWAuXG4gKiBAcGFyYW0gcXVhbGlmaWVkTmFtZSBUaGUgc3RhcnRpbmcgcHJvcGVydHkgYWNjZXNzIGV4cHJlc3Npb24gZnJvbSB3aGljaCB3ZSB3YW50IHRvIGNvbXB1dGVcbiAqIHRoZSBsZWZ0IG1vc3QgaWRlbnRpZmllci5cbiAqIEByZXR1cm5zIHRoZSBsZWZ0IG1vc3QgaWRlbnRpZmllciBpbiB0aGUgY2hhaW4gb3IgYG51bGxgIGlmIGl0IGlzIG5vdCBhbiBpZGVudGlmaWVyLlxuICovXG5mdW5jdGlvbiBnZXRRdWFsaWZpZWROYW1lUm9vdChxdWFsaWZpZWROYW1lOiB0cy5RdWFsaWZpZWROYW1lKTogdHMuSWRlbnRpZmllcnxudWxsIHtcbiAgd2hpbGUgKHRzLmlzUXVhbGlmaWVkTmFtZShxdWFsaWZpZWROYW1lLmxlZnQpKSB7XG4gICAgcXVhbGlmaWVkTmFtZSA9IHF1YWxpZmllZE5hbWUubGVmdDtcbiAgfVxuICByZXR1cm4gdHMuaXNJZGVudGlmaWVyKHF1YWxpZmllZE5hbWUubGVmdCkgPyBxdWFsaWZpZWROYW1lLmxlZnQgOiBudWxsO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxlZnQgbW9zdCBpZGVudGlmaWVyIGluIGEgcHJvcGVydHkgYWNjZXNzIGNoYWluLiBFLmcuIHRoZSBgYWAgb2YgYGEuYi5jLmRgLlxuICogQHBhcmFtIHByb3BlcnR5QWNjZXNzIFRoZSBzdGFydGluZyBwcm9wZXJ0eSBhY2Nlc3MgZXhwcmVzc2lvbiBmcm9tIHdoaWNoIHdlIHdhbnQgdG8gY29tcHV0ZVxuICogdGhlIGxlZnQgbW9zdCBpZGVudGlmaWVyLlxuICogQHJldHVybnMgdGhlIGxlZnQgbW9zdCBpZGVudGlmaWVyIGluIHRoZSBjaGFpbiBvciBgbnVsbGAgaWYgaXQgaXMgbm90IGFuIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIGdldEZhckxlZnRJZGVudGlmaWVyKHByb3BlcnR5QWNjZXNzOiB0cy5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOiB0cy5JZGVudGlmaWVyfG51bGwge1xuICB3aGlsZSAodHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ocHJvcGVydHlBY2Nlc3MuZXhwcmVzc2lvbikpIHtcbiAgICBwcm9wZXJ0eUFjY2VzcyA9IHByb3BlcnR5QWNjZXNzLmV4cHJlc3Npb247XG4gIH1cbiAgcmV0dXJuIHRzLmlzSWRlbnRpZmllcihwcm9wZXJ0eUFjY2Vzcy5leHByZXNzaW9uKSA/IHByb3BlcnR5QWNjZXNzLmV4cHJlc3Npb24gOiBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgSW1wb3J0RGVjbGFyYXRpb24gZm9yIHRoZSBnaXZlbiBgbm9kZWAgaWYgaXQgaXMgZWl0aGVyIGFuIGBJbXBvcnRTcGVjaWZpZXJgIG9yIGFcbiAqIGBOYW1lc3BhY2VJbXBvcnRgLiBJZiBub3QgcmV0dXJuIGBudWxsYC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0ltcG9ydERlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpOiB0cy5JbXBvcnREZWNsYXJhdGlvbnxudWxsIHtcbiAgcmV0dXJuIHRzLmlzSW1wb3J0U3BlY2lmaWVyKG5vZGUpID8gbm9kZS5wYXJlbnQhLnBhcmVudCEucGFyZW50ISA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzLmlzTmFtZXNwYWNlSW1wb3J0KG5vZGUpID8gbm9kZS5wYXJlbnQucGFyZW50IDogbnVsbDtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBuYW1lIGJ5IHdoaWNoIHRoZSBgZGVjbGAgd2FzIGV4cG9ydGVkLCBub3QgaW1wb3J0ZWQuXG4gKiBJZiBubyBzdWNoIGRlY2xhcmF0aW9uIGNhbiBiZSBmb3VuZCAoZS5nLiBpdCBpcyBhIG5hbWVzcGFjZSBpbXBvcnQpXG4gKiB0aGVuIGZhbGxiYWNrIHRvIHRoZSBgb3JpZ2luYWxJZGAuXG4gKi9cbmZ1bmN0aW9uIGdldEV4cG9ydGVkTmFtZShkZWNsOiB0cy5EZWNsYXJhdGlvbiwgb3JpZ2luYWxJZDogdHMuSWRlbnRpZmllcik6IHN0cmluZyB7XG4gIHJldHVybiB0cy5pc0ltcG9ydFNwZWNpZmllcihkZWNsKSA/XG4gICAgICAoZGVjbC5wcm9wZXJ0eU5hbWUgIT09IHVuZGVmaW5lZCA/IGRlY2wucHJvcGVydHlOYW1lIDogZGVjbC5uYW1lKS50ZXh0IDpcbiAgICAgIG9yaWdpbmFsSWQudGV4dDtcbn1cbiJdfQ==
|