@witnet/sdk 1.0.1 → 1.0.4
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/.env_witnet +6 -6
- package/LICENSE +21 -21
- package/README.md +103 -103
- package/dist/bin/helpers.d.ts +88 -0
- package/dist/bin/helpers.d.ts.map +1 -0
- package/dist/bin/helpers.js +866 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/lib/crypto/account.d.ts +18 -0
- package/dist/lib/crypto/account.d.ts.map +1 -0
- package/dist/lib/crypto/account.js +152 -0
- package/dist/lib/crypto/coinbase.d.ts +9 -0
- package/dist/lib/crypto/coinbase.d.ts.map +1 -0
- package/dist/lib/crypto/coinbase.js +39 -0
- package/dist/lib/crypto/index.d.ts +7 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +28 -0
- package/dist/lib/crypto/interfaces.d.ts +80 -0
- package/dist/lib/crypto/interfaces.d.ts.map +1 -0
- package/dist/lib/crypto/interfaces.js +3 -0
- package/dist/lib/crypto/payloads/DataRequestPayload.d.ts +47 -0
- package/dist/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
- package/dist/lib/crypto/payloads/DataRequestPayload.js +384 -0
- package/dist/lib/crypto/payloads/StakePayload.d.ts +27 -0
- package/dist/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
- package/dist/lib/crypto/payloads/StakePayload.js +184 -0
- package/dist/lib/crypto/payloads/UnstakePayload.d.ts +35 -0
- package/dist/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
- package/dist/lib/crypto/payloads/UnstakePayload.js +244 -0
- package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts +24 -0
- package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
- package/dist/lib/crypto/payloads/ValueTransferPayload.js +182 -0
- package/dist/lib/crypto/payloads.d.ts +54 -0
- package/dist/lib/crypto/payloads.d.ts.map +1 -0
- package/dist/lib/crypto/payloads.js +224 -0
- package/dist/lib/crypto/signer.d.ts +26 -0
- package/dist/lib/crypto/signer.d.ts.map +1 -0
- package/dist/lib/crypto/signer.js +299 -0
- package/dist/lib/crypto/transmitters/DataRequests.d.ts +14 -0
- package/dist/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters/DataRequests.js +62 -0
- package/dist/lib/crypto/transmitters/StakeDeposits.d.ts +11 -0
- package/dist/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters/StakeDeposits.js +48 -0
- package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts +17 -0
- package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters/StakeWithdrawals.js +115 -0
- package/dist/lib/crypto/transmitters/ValueTransfers.d.ts +10 -0
- package/dist/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters/ValueTransfers.js +47 -0
- package/dist/lib/crypto/transmitters.d.ts +46 -0
- package/dist/lib/crypto/transmitters.d.ts.map +1 -0
- package/dist/lib/crypto/transmitters.js +506 -0
- package/dist/lib/crypto/types.d.ts +127 -0
- package/dist/lib/crypto/types.d.ts.map +1 -0
- package/dist/lib/crypto/types.js +261 -0
- package/dist/lib/crypto/utils.d.ts +10 -0
- package/dist/lib/crypto/utils.d.ts.map +1 -0
- package/dist/lib/crypto/utils.js +97 -0
- package/dist/lib/crypto/wallet.d.ts +26 -0
- package/dist/lib/crypto/wallet.d.ts.map +1 -0
- package/dist/lib/crypto/wallet.js +327 -0
- package/dist/lib/helpers.d.ts +90 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +1031 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +21 -0
- package/dist/lib/radon/artifacts.d.ts +55 -0
- package/dist/lib/radon/artifacts.d.ts.map +1 -0
- package/dist/lib/radon/artifacts.js +347 -0
- package/dist/lib/radon/ccdr/eth.d.ts +100 -0
- package/dist/lib/radon/ccdr/eth.d.ts.map +1 -0
- package/dist/lib/radon/ccdr/eth.js +237 -0
- package/dist/lib/radon/ccdr/index.d.ts +34 -0
- package/dist/lib/radon/ccdr/index.d.ts.map +1 -0
- package/dist/lib/radon/ccdr/index.js +63 -0
- package/dist/lib/radon/ccdr/wit.d.ts +29 -0
- package/dist/lib/radon/ccdr/wit.d.ts.map +1 -0
- package/dist/lib/radon/ccdr/wit.js +60 -0
- package/dist/lib/radon/filters.d.ts +14 -0
- package/dist/lib/radon/filters.d.ts.map +1 -0
- package/dist/lib/radon/filters.js +47 -0
- package/dist/lib/radon/index.d.ts +36 -0
- package/dist/lib/radon/index.d.ts.map +1 -0
- package/dist/lib/radon/index.js +154 -0
- package/dist/lib/radon/reducers.d.ts +29 -0
- package/dist/lib/radon/reducers.d.ts.map +1 -0
- package/dist/lib/radon/reducers.js +101 -0
- package/dist/lib/radon/retrievals.d.ts +120 -0
- package/dist/lib/radon/retrievals.d.ts.map +1 -0
- package/dist/lib/radon/retrievals.js +358 -0
- package/dist/lib/radon/sources.d.ts +102 -0
- package/dist/lib/radon/sources.d.ts.map +1 -0
- package/dist/lib/radon/sources.js +294 -0
- package/dist/lib/radon/types.d.ts +521 -0
- package/dist/lib/radon/types.d.ts.map +1 -0
- package/dist/lib/radon/types.js +1066 -0
- package/dist/lib/radon/utils.d.ts +55 -0
- package/dist/lib/radon/utils.d.ts.map +1 -0
- package/dist/lib/radon/utils.js +181 -0
- package/dist/lib/rpc/farm.d.ts +66 -0
- package/dist/lib/rpc/farm.d.ts.map +1 -0
- package/dist/lib/rpc/farm.js +808 -0
- package/dist/lib/rpc/index.d.ts +3 -0
- package/dist/lib/rpc/index.d.ts.map +1 -0
- package/dist/lib/rpc/index.js +19 -0
- package/dist/lib/rpc/node.d.ts +38 -0
- package/dist/lib/rpc/node.d.ts.map +1 -0
- package/dist/lib/rpc/node.js +335 -0
- package/dist/lib/rpc/nodes.d.ts +40 -0
- package/dist/lib/rpc/nodes.d.ts.map +1 -0
- package/dist/lib/rpc/nodes.js +531 -0
- package/dist/lib/rpc/provider.d.ts +72 -0
- package/dist/lib/rpc/provider.d.ts.map +1 -0
- package/dist/lib/rpc/provider.js +402 -0
- package/dist/lib/rpc/reporter.d.ts +18 -0
- package/dist/lib/rpc/reporter.d.ts.map +1 -0
- package/dist/lib/rpc/reporter.js +99 -0
- package/dist/lib/rpc/types.d.ts +396 -0
- package/dist/lib/rpc/types.d.ts.map +1 -0
- package/dist/lib/rpc/types.js +81 -0
- package/dist/lib/rpc/wallet.d.ts +72 -0
- package/dist/lib/rpc/wallet.d.ts.map +1 -0
- package/dist/lib/rpc/wallet.js +41 -0
- package/dist/lib/types.d.ts +19 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +7 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +51 -0
- package/dist/package.json +1 -1
- package/dist/src/bin/helpers.js +2 -2
- package/dist/src/index.js +1 -1
- package/dist/src/lib/crypto/account.js +1 -1
- package/dist/src/lib/crypto/coinbase.js +1 -1
- package/dist/src/lib/crypto/index.js +1 -1
- package/dist/src/lib/crypto/interfaces.js +1 -1
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +2 -2
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +8 -8
- package/dist/src/lib/crypto/payloads/StakePayload.js +1 -1
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +1 -1
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +1 -1
- package/dist/src/lib/crypto/payloads.js +1 -1
- package/dist/src/lib/crypto/signer.js +1 -1
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +0 -1
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/DataRequests.js +1 -2
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +1 -1
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +1 -1
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +1 -1
- package/dist/src/lib/crypto/transmitters.js +1 -1
- package/dist/src/lib/crypto/types.js +1 -1
- package/dist/src/lib/crypto/utils.js +1 -1
- package/dist/src/lib/crypto/wallet.js +1 -1
- package/dist/src/lib/index.js +1 -1
- package/dist/src/lib/radon/ccdr/eth.js +1 -1
- package/dist/src/lib/radon/ccdr/index.js +1 -1
- package/dist/src/lib/radon/ccdr/wit.d.ts +11 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -1
- package/dist/src/lib/radon/ccdr/wit.js +17 -2
- package/dist/src/lib/radon/filters.js +1 -1
- package/dist/src/lib/radon/index.d.ts +1 -1
- package/dist/src/lib/radon/index.d.ts.map +1 -1
- package/dist/src/lib/radon/index.js +9 -3
- package/dist/src/lib/radon/reducers.js +1 -1
- package/dist/src/lib/radon/types.js +1 -1
- package/dist/src/lib/radon/utils.js +1 -1
- package/dist/src/lib/rpc/index.js +1 -1
- package/dist/src/lib/rpc/nodes.js +1 -1
- package/dist/src/lib/rpc/provider.d.ts +5 -3
- package/dist/src/lib/rpc/provider.d.ts.map +1 -1
- package/dist/src/lib/rpc/provider.js +14 -3
- package/dist/src/lib/rpc/reporter.d.ts +2 -3
- package/dist/src/lib/rpc/reporter.d.ts.map +1 -1
- package/dist/src/lib/rpc/reporter.js +1 -4
- package/dist/src/lib/rpc/types.d.ts +49 -24
- package/dist/src/lib/rpc/types.d.ts.map +1 -1
- package/dist/src/lib/rpc/types.js +3 -1
- package/dist/src/lib/types.d.ts +1 -1
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.js +1 -1
- package/dist/witnet/assets/index.js +1 -1
- package/dist/witnet/assets/modals/index.js +1 -1
- package/dist/witnet/assets/modals/web3/eth.js +1 -1
- package/dist/witnet/assets/modals/web3/ipfs.js +1 -1
- package/dist/witnet/assets/modals/web3/wit.js +4 -7
- package/dist/witnet/assets/requests.js +1 -1
- package/package.json +1 -1
- package/src/bin/cli/history.js +31 -31
- package/src/bin/cli/inspect.js +405 -359
- package/src/bin/cli/network.js +594 -592
- package/src/bin/cli/nodes.js +364 -364
- package/src/bin/cli/radon.js +815 -815
- package/src/bin/cli/wallet.js +1117 -1094
- package/src/bin/helpers.js +840 -840
- package/src/bin/postinstall.js +9 -9
- package/src/bin/toolkit.js +295 -295
- package/witnet/assets/_index.js +8 -8
- package/witnet/assets/_requests.js +25 -25
- package/witnet/assets/_sources.js +36 -36
- package/witnet/assets/_templates.js +36 -36
- package/witnet/assets/index.js +4 -4
- package/witnet/assets/modals/index.js +9 -9
- package/witnet/assets/modals/web3/eth.js +29 -29
- package/witnet/assets/modals/web3/ipfs.js +19 -19
- package/witnet/assets/modals/web3/wit.js +21 -23
- package/witnet/assets/requests.js +95 -95
|
@@ -933,4 +933,4 @@ class RadonString extends RadonAny {
|
|
|
933
933
|
}
|
|
934
934
|
}
|
|
935
935
|
exports.RadonString = RadonString;
|
|
936
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JhZG9uL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUEyQztBQUMzQywyREFBNEM7QUFHNUMsZ0RBQWlDO0FBSWpDLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN0Qiw2REFBYSxDQUFBO0lBQ2IsdURBQVUsQ0FBQTtBQUNkLENBQUMsRUFIVyxjQUFjLDhCQUFkLGNBQWMsUUFHekI7QUFFRCxJQUFZLGNBb0VYO0FBcEVELFdBQVksY0FBYztJQUN0QixrRUFBa0IsQ0FBQTtJQUNsQixrRUFBa0IsQ0FBQTtJQUNsQiw4REFBZ0IsQ0FBQTtJQUNoQixzRUFBb0IsQ0FBQTtJQUNwQiwwRUFBc0IsQ0FBQTtJQUN0QixzRUFBb0IsQ0FBQTtJQUNwQixzRUFBb0IsQ0FBQTtJQUNwQiwwRUFBc0IsQ0FBQTtJQUN0QixrRUFBa0IsQ0FBQTtJQUNsQix3RUFBcUIsQ0FBQTtJQUNyQiw0REFBZSxDQUFBO0lBQ2Ysa0VBQWtCLENBQUE7SUFDbEIsOERBQWdCLENBQUE7SUFDaEIsOERBQWdCLENBQUE7SUFDaEIsNEVBQXVCLENBQUE7SUFDdkIsc0VBQW9CLENBQUE7SUFDcEIsd0VBQXFCLENBQUE7SUFDckIsOERBQWdCLENBQUE7SUFDaEIsd0VBQXFCLENBQUE7SUFDckIsa0VBQWtCLENBQUE7SUFDbEIsZ0VBQWlCLENBQUE7SUFDakIsc0VBQW9CLENBQUE7SUFDcEIsd0VBQXFCLENBQUE7SUFDckIsb0VBQW1CLENBQUE7SUFDbkIsNEVBQXVCLENBQUE7SUFDdkIsZ0VBQWlCLENBQUE7SUFDakIsc0VBQW9CLENBQUE7SUFDcEIsa0VBQWtCLENBQUE7SUFDbEIsc0VBQW9CLENBQUE7SUFDcEIsa0VBQWtCLENBQUE7SUFDbEIsZ0VBQWlCLENBQUE7SUFDakIsZ0VBQWlCLENBQUE7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QUFpQjtRQUNsRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDbEUsQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsUUFBZ0IsSUFBSTtRQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQSxVQUF1QixDQUFBLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFDRDs7O09BR0c7SUFDSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ksV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztDQUNKO0FBMUhELGtDQTBIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuY29kZSBhcyBjYm9yRW5jb2RlIH0gZnJvbSBcImNib3JcIlxyXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gXCIuLi8uLi9iaW4vaGVscGVyc1wiXHJcblxyXG5pbXBvcnQgeyBPcGNvZGVzIGFzIFJhZG9uUmVkdWNlck9wY29kZXMgfSBmcm9tICcuL3JlZHVjZXJzJ1xyXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuLi91dGlscydcclxuXHJcbmV4cG9ydCB7IEhleFN0cmluZyBhcyBSYWRvbkJ5dGVjb2RlIH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuXHJcbmV4cG9ydCBlbnVtIFJhZG9uRW5jb2RpbmdzIHtcclxuICAgIEhleFN0cmluZyA9IDAsXHJcbiAgICBCYXNlNjQgPSAxLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSYWRvbk9wZXJhdG9ycyB7XHJcbiAgICBBcnJheUxlbmd0aCA9IDB4MTAsXHJcbiAgICBBcnJheUZpbHRlciA9IDB4MTEsXHJcbiAgICBBcnJheUpvaW4gPSAweDEyLFxyXG4gICAgQXJyYXlHZXRBcnJheSA9IDB4MTMsXHJcbiAgICBBcnJheUdldEJvb2xlYW4gPSAweDE0LFxyXG4gICAgQXJyYXlHZXRCeXRlcyA9IDB4MTUsXHJcbiAgICBBcnJheUdldEZsb2F0ID0gMHgxNixcclxuICAgIEFycmF5R2V0SW50ZWdlciA9IDB4MTcsXHJcbiAgICBBcnJheUdldE1hcCA9IDB4MTgsXHJcbiAgICBBcnJheUdldFN0cmluZyA9IDB4MTksXHJcbiAgICBBcnJheU1hcCA9IDB4MWEsXHJcbiAgICBBcnJheVJlZHVjZSA9IDB4MWIsXHJcbiAgICBBcnJheVNvcnQgPSAweDFkLFxyXG4gICAgQXJyYXlQaWNrID0gMHgxZSxcclxuICAgIEJvb2xlYW5TdHJpbmdpZnkgPSAweDIwLFxyXG4gICAgQm9vbGVhbk5lZ2F0ZSA9IDB4MjIsXHJcbiAgICBCeXRlc1N0cmluZ2lmeSA9IDB4MzAsXHJcbiAgICBCeXRlc0hhc2ggPSAweDMxLFxyXG4gICAgQnl0ZXNBc0ludGVnZXIgPSAweDMyLFxyXG4gICAgQnl0ZXNMZW5ndGggPSAweDM0LFxyXG4gICAgQnl0ZXNTbGljZSA9IDB4M2MsXHJcbiAgICBGbG9hdEFic29sdXRlID0gMHg1MCxcclxuICAgIEZsb2F0U3RyaW5naWZ5ID0gMHg1MSxcclxuICAgIEZsb2F0Q2VpbGluZyA9IDB4NTIsXHJcbiAgICBGbG9hdEdyZWF0ZXJUaGFuID0gMHg1MyxcclxuICAgIEZsb2F0Rmxvb3IgPSAweDU0LFxyXG4gICAgRmxvYXRMZXNzVGhhbiA9IDB4NTUsXHJcbiAgICBGbG9hdE1vZHVsZSA9IDB4NTYsXHJcbiAgICBGbG9hdE11bHRpcGx5ID0gMHg1NyxcclxuICAgIEZsb2F0TmVnYXRlID0gMHg1OCxcclxuICAgIEZsb2F0UG93ZXIgPSAweDU5LFxyXG4gICAgRmxvYXRSb3VuZCA9IDB4NWIsXHJcbiAgICBGbG9hdFRydW5jYXRlID0gMHg1ZCxcclxuICAgIEludGVnZXJBYnNvbHV0ZSA9IDB4NDAsXHJcbiAgICBJbnRlZ2VyVG9GbG9hdCA9IDB4NDEsXHJcbiAgICBJbnRlZ2VyU3RyaW5naWZ5ID0gMHg0MixcclxuICAgIEludGVnZXJHcmVhdGVyVGhhbiA9IDB4NDMsXHJcbiAgICBJbnRlZ2VyTGVzc1RoYW4gPSAweDQ0LFxyXG4gICAgSW50ZWdlck1vZHVsbyA9IDB4NDYsXHJcbiAgICBJbnRlZ2VyTXVsdGlwbHkgPSAweDQ3LFxyXG4gICAgSW50ZWdlck5lZ2F0ZSA9IDB4NDgsXHJcbiAgICBJbnRlZ2VyUG93ZXIgPSAweDQ5LFxyXG4gICAgSW50ZWdlclRvQnl0ZXMgPSAweDRhLFxyXG4gICAgTWFwU3RyaW5naWZ5ID0gMHg2MCxcclxuICAgIE1hcEdldEFycmF5ID0gMHg2MSxcclxuICAgIE1hcEdldEJvb2xlYW4gPSAweDYyLFxyXG4gICAgTWFwR2V0RmxvYXQgPSAweDY0LFxyXG4gICAgTWFwR2V0SW50ZWdlciA9IDB4NjUsXHJcbiAgICBNYXBHZXRNYXAgPSAweDY2LFxyXG4gICAgTWFwR2V0U3RyaW5nID0gMHg2NyxcclxuICAgIE1hcEtleXMgPSAweDY4LFxyXG4gICAgTWFwVmFsdWVzID0gMHg2OSxcclxuICAgIE1hcEFsdGVyID0gMHg2YixcclxuICAgIE1hcFBpY2sgPSAweDZlLCAgIFxyXG4gICAgU3RyaW5nQXNCb29sZWFuID0gMHg3MCxcclxuICAgIFN0cmluZ0FzQnl0ZXMgPSAweDcxLFxyXG4gICAgU3RyaW5nQXNGbG9hdCA9IDB4NzIsXHJcbiAgICBTdHJpbmdMZW5ndGggPSAweDc0LFxyXG4gICAgU3RyaW5nTWF0Y2ggPSAweDc1LFxyXG4gICAgU3RyaW5nUGFyc2VKU09OQXJyYXkgPSAweDc2LFxyXG4gICAgU3RyaW5nUGFyc2VKU09OTWFwID0gMHg3NyxcclxuICAgIFN0cmluZ1BhcnNlWE1MTWFwID0gMHg3OCxcclxuICAgIFN0cmluZ1RvTG93ZXJDYXNlID0gMHg3OSxcclxuICAgIFN0cmluZ1RvVXBwc2VyQ2FzZSA9IDB4N2EsXHJcbiAgICBTdHJpbmdQYXJzZVJlcGxhY2UgPSAweDdiLFxyXG4gICAgU3RyaW5nUGFyc2VTbGljZSA9IDB4N2MsXHJcbiAgICBTdHJpbmdQYXJzZVNwbGl0ID0gMHg3ZCxcclxufVxyXG5cclxuYWJzdHJhY3QgY2xhc3MgUmFkb25DbGFzcyB7XHJcbiAgICByZWFkb25seSBwcmV2PzogUmFkb25PcGVyYXRvcjtcclxuICAgIGNvbnN0cnVjdG9yKHByZXY/OiBSYWRvbk9wZXJhdG9yKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2ID0gcHJldlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmFkb25PcGVyYXRvciBleHRlbmRzIFJhZG9uQ2xhc3Mge1xyXG4gICAgcmVhZG9ubHkgb3Bjb2RlOiBSYWRvbk9wZXJhdG9yc1xyXG4gICAgcmVhZG9ubHkgcGFyYW1zPzogYW55W11cclxuICAgIGNvbnN0cnVjdG9yKG9wY29kZTogUmFkb25PcGVyYXRvcnMsIHBhcmFtcz86IGFueVtdLCBvcHM/OiBSYWRvbk9wZXJhdG9yKSB7XHJcbiAgICAgICAgc3VwZXIob3BzKVxyXG4gICAgICAgIHRoaXMub3Bjb2RlID0gb3Bjb2RlXHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXMgfHwgW11cclxuICAgIH1cclxuICAgIHB1YmxpYyBhcmdzQ291bnQoKTogbnVtYmVyIHsgXHJcbiAgICAgICAgbGV0IG1heENvdW50OiBudW1iZXIgPSAwXHJcbiAgICAgICAgdGhpcy5wYXJhbXM/LmZvckVhY2gocGFyYW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBoZWxwZXJzLmdldFdpbGRjYXJkc0NvdW50RnJvbVN0cmluZyhwYXJhbSlcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IG1heENvdW50KSBtYXhDb3VudCA9IGNvdW50XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJiBwYXJhbSBpbnN0YW5jZW9mIFJhZG9uU2NyaXB0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHBhcmFtLmFyZ3NDb3VudCgpXHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiBtYXhDb3VudCkgbWF4Q291bnQgPSBjb3VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIG1heENvdW50LFxyXG4gICAgICAgICAgICB0aGlzLnByZXY/LmFyZ3NDb3VudCgpIHx8IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGlzZWN0KGxldmVsID0gMCk6IFtudW1iZXIsIHN0cmluZywgc3RyaW5nXVtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzPy5wcmV2Py5kaXNlY3QobGV2ZWwpIHx8IFtdXHJcbiAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBSYWRvbk9wZXJhdG9yc1t0aGlzLm9wY29kZV1cclxuICAgICAgICBjb25zdCBpbnB1dFR5cGUgPSBgUmFkb24ke29wZXJhdG9yLnNwbGl0KC8oPz1bQS1aXSkvKVswXX1gXHJcbiAgICAgICAgbGV0IHJhZG9uQ2FsbCA9IG9wZXJhdG9yLnNwbGl0KC8oPz1bQS1aXSkvKS5zbGljZSgxKS5qb2luKCcnKVxyXG4gICAgICAgIHJhZG9uQ2FsbCA9IHJhZG9uQ2FsbC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHJhZG9uQ2FsbC5zbGljZSgxKVxyXG4gICAgICAgIGxldCBhcmdzID0gXCJcIlxyXG4gICAgICAgIGxldCBzY3JpcHRcclxuICAgICAgICBpZiAodGhpcy5wYXJhbXMgJiYgdGhpcy5wYXJhbXNbMF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tYXAocGFyYW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSAhPT0gJ29iamVjdCcgfHwgIShwYXJhbSBpbnN0YW5jZW9mIFJhZG9uU2NyaXB0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgKz0gKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycgPyAgYFwiJHtwYXJhbX1cImAgOiBwYXJhbS50b1N0cmluZygpKSArIFwiLCBcIlxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSBwYXJhbVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZiAoc2NyaXB0KSBhcmdzICs9IFwiUmFkb25PcGVyYXRvciB7XCJcclxuICAgICAgICAgICAgZWxzZSBhcmdzID0gYXJncy5zbGljZSgwLCAtMilcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjcmlwdCkge1xyXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRUeXBlID0gYCR7KHNjcmlwdCBhcyBSYWRvblNjcmlwdCkub3V0cHV0VHlwZT8uY29uc3RydWN0b3IubmFtZSB8fCBcIlJhZG9uQW55XCJ9YFxyXG4gICAgICAgICAgICByYWRvbkNhbGwgKz0gYCgke2FyZ3N9YFxyXG4gICAgICAgICAgICByZXN1bHQucHVzaChbbGV2ZWwsIGlucHV0VHlwZSwgcmFkb25DYWxsXSlcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uKHNjcmlwdCBhcyBSYWRvblNjcmlwdCkuZGlzZWN0KGxldmVsICsgMSkpXHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtsZXZlbCwgb3V0cHV0VHlwZSwgXCJ9KVwiXSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByYWRvbkNhbGwgKz0gYCgke2FyZ3N9KWBcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2xldmVsLCBpbnB1dFR5cGUsIHJhZG9uQ2FsbF0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICAgIHB1YmxpYyBlbmNvZGUoKTogYW55W10geyBcclxuICAgICAgICBsZXQgZW5jb2RlZFxyXG4gICAgICAgIGlmICh0aGlzPy5wYXJhbXMgJiYgdGhpcy5wYXJhbXNbMF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5wYXJhbXMubWFwKHBhcmFtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgUmFkb25BbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtLnByZXY/LmVuY29kZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFJhZG9uT3BlcmF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtLmVuY29kZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFJhZG9uU2NyaXB0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbS5lbmNvZGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGVuY29kZWQgPSBbdGhpcy5vcGNvZGUsIC4uLmFyZ3NdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZW5jb2RlZCA9IHRoaXMub3Bjb2RlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnByZXYpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsuLi50aGlzLnByZXYuZW5jb2RlKCksIGVuY29kZWRdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtlbmNvZGVkXVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyByZXBsYWNlV2lsZGNhcmRzKGFyZ3M6IHN0cmluZ1tdKTogUmFkb25PcGVyYXRvciB7XHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgdGhpcy5hcmdzQ291bnQoKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFdmFsRXJyb3IoYEluc3VmZmljZW50IGFyZ3Mgd2VyZSBwcm92aWRlZCAoJHthcmdzLmxlbmd0aH0gPCAke3RoaXMuYXJnc0NvdW50KCl9KWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUmFkb25PcGVyYXRvcihcclxuICAgICAgICAgICAgdGhpcy5vcGNvZGUsIFxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcz8ubWFwKHBhcmFtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMucmVwbGFjZVdpbGRjYXJkcyhwYXJhbSwgYXJncylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJiBwYXJhbSBpbnN0YW5jZW9mIFJhZG9uU2NyaXB0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtLnJlcGxhY2VXaWxkY2FyZHMoLi4uYXJncylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLCBcclxuICAgICAgICAgICAgdGhpcz8ucHJldj8ucmVwbGFjZVdpbGRjYXJkcyhhcmdzKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuICAgIHB1YmxpYyBzcGxpY2VXaWxkY2FyZChhcmdJbmRleDogbnVtYmVyLCBhcmdWYWx1ZTogc3RyaW5nKTogUmFkb25PcGVyYXRvciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSYWRvbk9wZXJhdG9yKFxyXG4gICAgICAgICAgICB0aGlzLm9wY29kZSxcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXM/Lm1hcChwYXJhbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXJzLnNwbGljZVdpbGRjYXJkKHBhcmFtLCBhcmdJbmRleCwgYXJnVmFsdWUsIHRoaXMuYXJnc0NvdW50KCkpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcgJiYgcGFyYW0gaW5zdGFuY2VvZiBSYWRvblNjcmlwdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbS5zcGxpY2VXaWxkY2FyZChhcmdJbmRleCwgYXJnVmFsdWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdGhpcz8ucHJldj8uc3BsaWNlV2lsZGNhcmQoYXJnSW5kZXgsIGFyZ1ZhbHVlKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuICAgIHB1YmxpYyB0b1N0cmluZyhsZWZ0ID0gXCJcIiwgaW5kZW50ID0gNCwgbGV2ZWwgPSAwKTogc3RyaW5nIHsgXHJcbiAgICAgICAgY29uc3QgbGYgPSBsZWZ0ICE9PSBcIlwiID8gXCJcXG5cIiA6IFwiXCJcclxuICAgICAgICBsZXQgc3RyID0gdGhpcz8ucHJldj8udG9TdHJpbmcobGVmdCwgaW5kZW50LCBsZXZlbCkgfHwgXCJcIlxyXG4gICAgICAgIGxldCBtZXRob2ROYW1lID0gUmFkb25PcGVyYXRvcnNbdGhpcy5vcGNvZGVdLnNwbGl0KC8oPz1bQS1aXSkvKS5zbGljZSgxKS5qb2luKCcnKVxyXG4gICAgICAgIG1ldGhvZE5hbWUgPSBtZXRob2ROYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgbWV0aG9kTmFtZS5zbGljZSgxKVxyXG4gICAgICAgIHN0ciArPSBgJHtsZWZ0fSR7XCIgXCIucmVwZWF0KGluZGVudCAqIGxldmVsKX0uJHttZXRob2ROYW1lfShgXHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1zICYmIHRoaXMucGFyYW1zWzBdICE9PSB1bmRlZmluZWQpIHsgXHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZvckVhY2gocGFyYW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gYFwiJHtwYXJhbX1cIiwgYFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnICYmIHBhcmFtIGluc3RhbmNlb2YgUmFkb25TY3JpcHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gYCR7cGFyYW0udG9TdHJpbmcobGVmdCwgaW5kZW50LCBsZXZlbCArIDEpfSR7bGVmdH0ke1wiIFwiLnJlcGVhdChpbmRlbnQgKiBsZXZlbCl9LCBgXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBwYXJhbS50b1N0cmluZygpICsgXCIsIFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCAtMilcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RyICs9IGApJHtsZn1gXHJcbiAgICAgICAgcmV0dXJuIHN0clxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmFkb25TY3JpcHQge1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcz86IFJhZG9uT3BlcmF0b3I7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRUeXBlPzogUmFkb25Bbnk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0VHlwZT86IFJhZG9uQW55O1xyXG4gICAgY29uc3RydWN0b3IgKG91dHB1dDogUmFkb25BbnkpIHtcclxuICAgICAgICB0aGlzLm9wcyA9IG91dHB1dD8ucHJldjtcclxuICAgICAgICBjb25zdCByYWRvblR5cGVzID0ge1xyXG4gICAgICAgICAgICBcIkFycmF5XCI6IFJhZG9uQXJyYXksXHJcbiAgICAgICAgICAgIFwiQm9vbGVhblwiOiBSYWRvbkJvb2xlYW4sXHJcbiAgICAgICAgICAgIFwiQnl0ZXNcIjogUmFkb25CeXRlcyxcclxuICAgICAgICAgICAgXCJGbG9hdFwiOiBSYWRvbkZsb2F0LFxyXG4gICAgICAgICAgICBcIkludGVnZXJcIjogUmFkb25JbnRlZ2VyLFxyXG4gICAgICAgICAgICBcIk1hcFwiOiBSYWRvbk1hcCxcclxuICAgICAgICAgICAgXCJTdHJpbmdcIjogUmFkb25TdHJpbmcsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbnB1dCA9IG91dHB1dD8ucHJldlxyXG4gICAgICAgIHdoaWxlIChpbnB1dD8ucHJldikgaW5wdXQgPSBpbnB1dD8ucHJldlxyXG4gICAgICAgIGNvbnN0IGlucHV0VHlwZSA9IE9iamVjdC5lbnRyaWVzKHJhZG9uVHlwZXMpLmZpbmQoKFtwcmVmaXgsIF9dKSA9PiBpbnB1dCAmJiBSYWRvbk9wZXJhdG9yc1tpbnB1dC5vcGNvZGVdLnN0YXJ0c1dpdGgocHJlZml4KSlcclxuICAgICAgICBpZiAoaW5wdXRUeXBlICYmIGlucHV0VHlwZVsxXSkgdGhpcy5pbnB1dFR5cGUgPSBuZXcgaW5wdXRUeXBlWzFdKClcclxuICAgICAgICBjb25zdCBvdXRwdXRUeXBlID0gT2JqZWN0LnZhbHVlcyhyYWRvblR5cGVzKS5maW5kKG91dHB1dFR5cGUgPT4gb3V0cHV0IGluc3RhbmNlb2Ygb3V0cHV0VHlwZSk7XHJcbiAgICAgICAgaWYgKG91dHB1dFR5cGUpIHRoaXMub3V0cHV0VHlwZSA9IG5ldyBvdXRwdXRUeXBlKClcclxuICAgIH1cclxuICAgIHB1YmxpYyBhcmdzQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHM/LmFyZ3NDb3VudCgpIHx8IDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGlzZWN0KGxldmVsID0gMCk6IFtudW1iZXIsIHN0cmluZywgc3RyaW5nXVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHM/LmRpc2VjdChsZXZlbCkgfHwgW1tsZXZlbCwgXCJSYWRvbkFueVwiLCBcIlwiXV1cclxuICAgIH1cclxuICAgIHB1YmxpYyBlbmNvZGUoKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wcz8uZW5jb2RlKCkgfHwgW107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVwbGFjZVdpbGRjYXJkcyguLi5hcmdzOiBzdHJpbmdbXSk6IFJhZG9uQW55IHtcclxuICAgICAgICBjb25zdCBPdXRwdXRUeXBlID0gW1xyXG4gICAgICAgICAgICBSYWRvbkFycmF5LFxyXG4gICAgICAgICAgICBSYWRvbkJvb2xlYW4sXHJcbiAgICAgICAgICAgIFJhZG9uQnl0ZXMsXHJcbiAgICAgICAgICAgIFJhZG9uRmxvYXQsXHJcbiAgICAgICAgICAgIFJhZG9uSW50ZWdlcixcclxuICAgICAgICAgICAgUmFkb25NYXAsXHJcbiAgICAgICAgICAgIFJhZG9uU3RyaW5nLFxyXG4gICAgICAgIF0uZmluZChPdXRwdXRUeXBlID0+IHRoaXMub3V0cHV0VHlwZSBpbnN0YW5jZW9mIE91dHB1dFR5cGUpO1xyXG4gICAgICAgIGlmIChPdXRwdXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3V0cHV0VHlwZSh0aGlzLm9wcz8ucmVwbGFjZVdpbGRjYXJkcyhhcmdzKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBFdmFsRXJyb3IoYENhbm5vdCByZXBsYWNlIHdpbGRjYXJkcyBvbiBlbXB0eSBzY3JpcHRgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzcGxpY2VXaWxkY2FyZChhcmdJbmRleDogbnVtYmVyLCBhcmdWYWx1ZTogc3RyaW5nKTogUmFkb25Bbnkge1xyXG4gICAgICAgIGNvbnN0IE91dHB1dFR5cGUgPSBbXHJcbiAgICAgICAgICAgIFJhZG9uQXJyYXksXHJcbiAgICAgICAgICAgIFJhZG9uQm9vbGVhbixcclxuICAgICAgICAgICAgUmFkb25CeXRlcyxcclxuICAgICAgICAgICAgUmFkb25GbG9hdCxcclxuICAgICAgICAgICAgUmFkb25JbnRlZ2VyLFxyXG4gICAgICAgICAgICBSYWRvbk1hcCxcclxuICAgICAgICAgICAgUmFkb25TdHJpbmcsXHJcbiAgICAgICAgXS5maW5kKE91dHB1dFR5cGUgPT4gdGhpcy5vdXRwdXRUeXBlIGluc3RhbmNlb2YgT3V0cHV0VHlwZSk7XHJcbiAgICAgICAgaWYgKE91dHB1dFR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdXRwdXRUeXBlKHRoaXMub3BzPy5zcGxpY2VXaWxkY2FyZChhcmdJbmRleCwgYXJnVmFsdWUpKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IEV2YWxFcnJvcihgQ2Fubm90IHNwbGljZSB3aWxkY2FyZHMgb24gZW1wdHkgc2NyaXB0YClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9CeXRlY29kZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBVdGlscy50b0hleFN0cmluZyhPYmplY3QudmFsdWVzKFVpbnQ4QXJyYXkuZnJvbShjYm9yRW5jb2RlKHRoaXMuZW5jb2RlKCkpKSksIHRydWUpXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgdG9TdHJpbmcobGVmdCA9IFwiXCIsIGluZGVudCA9IDAsIGxldmVsID0gMCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgbGYgPSBsZWZ0ICE9PSBcIlwiID8gXCJcXG5cIiA6IFwiXCJcclxuICAgICAgICByZXR1cm4gYFJhZG9uT3BlcmF0b3IoJHt0aGlzLmlucHV0VHlwZT8uY29uc3RydWN0b3IubmFtZSB8fCBcIlwifSkke2xmfSR7dGhpcy5vcHM/LnRvU3RyaW5nKGxlZnQsIGluZGVudCwgbGV2ZWwgKyAxKX1gXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSYWRvbkFueSBleHRlbmRzIFJhZG9uQ2xhc3Mge1xyXG4gICAgcHJvdGVjdGVkIF9wdXNoT3BlcmF0b3I8T3V0cHV0VHlwZSBleHRlbmRzIFJhZG9uQW55PihcclxuICAgICAgICBvdXRwdXRUeXBlOiB7IG5ldyhvcHM/OiBSYWRvbk9wZXJhdG9yKTogT3V0cHV0VHlwZTsgfSwgXHJcbiAgICAgICAgcGFyYW1zOiBhbnlbXSxcclxuICAgICk6IE91dHB1dFR5cGUge1xyXG4gICAgICAgIGxldCBuYW1lXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IChlcnIgYXMgRXJyb3IpXHJcbiAgICAgICAgICAgIG5hbWUgPSByZXN1bHQuc3RhY2s/LnNwbGl0KCcgYXQgJylbMl1cclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzBdXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgICAgICAgLm1hcChwYXJ0ID0+IGhlbHBlcnMudG9VcHBlckNhbWVsQ2FzZShwYXJ0KSlcclxuICAgICAgICAgICAgICAgIC5qb2luKCcnKVxyXG4gICAgICAgICAgICAgICAgLnNwbGl0KC8oPz1bQS1aXSkvKS5zbGljZSgxKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oJycpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wY29kZSA9IFJhZG9uT3BlcmF0b3JzW25hbWUgYXMga2V5b2YgdHlwZW9mIFJhZG9uT3BlcmF0b3JzXVxyXG4gICAgICAgIGlmICghb3Bjb2RlKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBGYXRhbDogdW5rbm93biBSYWRvbiBPcGVyYXRvciBvcGNvZGUgJyR7bmFtZX0nYClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG91dHB1dFR5cGUobmV3IFJhZG9uT3BlcmF0b3IoXHJcbiAgICAgICAgICAgICAgICBvcGNvZGUsIFxyXG4gICAgICAgICAgICAgICAgWy4uLnBhcmFtc10sIFxyXG4gICAgICAgICAgICAgICAgdGhpcz8ucHJldlxyXG4gICAgICAgICAgICApKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSYWRvbkFycmF5PEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55PiB7XHJcbiAgICBpdGVtc1R5cGU6IEl0ZW1zVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhZG9uQXJyYXk8SXRlbXNUeXBlIGV4dGVuZHMgUmFkb25BbnkgPSBSYWRvbkFueT4gZXh0ZW5kcyBSYWRvbkFueSB7XHJcbiAgICAvKipcclxuICAgICAqIERpc2NhcmQgdGhlIGl0ZW1zIGluIHRoZSBpbnB1dCBhcnJheSB0aGF0IG1ha2UgdGhlIGdpdmVuIGBpbm5lclNjcmlwdGAgdG8gcmV0dXJuIGEgYGZhbHNlYCB2YWx1ZS4gXHJcbiAgICAgKiBAcGFyYW0gc2NyaXB0IEZpbHRlcmluZyBzY3JpcHQgdWx0aW1hdGVseSByZXR1cm5pbmcgYSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXHJcbiAgICAgKiBNdXN0IGFjY2VwdCBhcyBpbnB1dCB0aGUgc2FtZSBkYXRhIHR5cGVzIGFzIHRoZSBvbmVzIG9mIHRoZSBpdGVtcyBiZWluZyBpdGVyYXRlZC4gXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkFycmF5YCBvYmplY3QgY29udGFpbmluZyBvbmx5IHRoZSBpdGVtcyB0aGF0IG1ha2UgdGhlIGBpbm5lclNjcmlwdGAgdG8gcmV0dXJuIGEgYHRydWVgIHZhbHVlLiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbHRlcihpbm5lclNjcmlwdDogUmFkb25Cb29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCEoaW5uZXJTY3JpcHQgaW5zdGFuY2VvZiBSYWRvbkJvb2xlYW4pKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFdmFsRXJyb3IoYElubmVyIHNjcmlwdCBtdXN0IGZldGNoIGEgUmFkb25Cb29sZWFuIHZhbHVlYClcclxuICAgICAgICB9IFxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBbbmV3IFJhZG9uU2NyaXB0KGlubmVyU2NyaXB0KV0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBgaW5kZXhgIGFzIGEgYFJhZG9uQXJyYXlgIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBpbmRleCBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFycmF5PFN1Ykl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55ID0gUmFkb25Bbnk+KGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8U3ViSXRlbXNUeXBlPiwgW2luZGV4XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCb29sZWFuKGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQm9vbGVhbiwgW2luZGV4XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25CeXRlc2Agb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIGluZGV4IFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Qnl0ZXMoaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25CeXRlcywgW2luZGV4XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25GbG9hdGAgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIGluZGV4IFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RmxvYXQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW2luZGV4XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25JbnRlZ2VyYCBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRJbnRlZ2VyKGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uSW50ZWdlciwgW2luZGV4XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25NYXBgIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBpbmRleCBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE1hcChpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbk1hcCwgW2luZGV4XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25TdHJpbmdgIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBpbmRleCBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFN0cmluZyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW2luZGV4XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSm9pbiBhbGwgaXRlbXMgb2YgdGhlIGFycmF5IGludG8gYSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gVGhlIGFycmF5IG11c3QgYmUgaG9tb2dlbmVvdXMsIFxyXG4gICAgICogYWxsIGl0ZW1zIGJlaW5nIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG91dHB1dFR5cGVgLCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBBcnJheSdzIGl0ZW1zVHlwZSBvdGhlcndpc2UuXHJcbiAgICAgKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciB0byBiZSB1c2VkIHdoZW4gam9pbmluZyBzdHJpbmdzLiBXaGVuIGpvaW5pbmcgUmFkb25NYXBzLCBpdCBjYW4gYmUgdXNlZCB0byBzZXR0bGUgYmFzZSBzY2hlbWEgb24gcmVzdWx0aW5nIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBvdXRwdXRUeXBlIFJhZG9uIHR5cGUgb2YgdGhlIG91dHB1dCB2YWx1ZS4gXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBqb2luPE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueSA9IFJhZG9uQW55PihzZXBhcmF0b3IgPSBcIlwiLCBvdXRwdXRUeXBlPzogeyBuZXcoKTogSXRlbXNUeXBlOyB9KSB7XHJcbiAgICAgICAgaWYgKG91dHB1dFR5cGUpIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5PE91dHB1dFR5cGU+LCBbc2VwYXJhdG9yXSlcclxuICAgICAgICBlbHNlIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5PEl0ZW1zVHlwZT4sIFtzZXBhcmF0b3JdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGl0ZW1zLiBcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWFwIGFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgd2l0aCB0aGUgZ2l2ZW4gYGlubmVyU2NyaXB0YC4gXHJcbiAgICAgKiBAcGFyYW0gaW5uZXJTY3JpcHQgTWFwcGluZyBzY3JpcHQgcmV0dXJuaW5nIHNvbWUgYFJhZG9uQW55YCBvYmplY3QuXHJcbiAgICAgKiBNdXN0IGFjY2VwdCBhcyBpbnB1dCB0aGUgc2FtZSBkYXRhIHR5cGUgYXMgdGhlIG9uZSBvZiB0aGUgaXRlbXMgYmVpbmcgaXRlcmF0ZWQuIFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1hcHBlZCB2YWx1ZXMuIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFwKGlubmVyU2NyaXB0OiBSYWRvbk9wZXJhdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5LCBbaW5uZXJTY3JpcHRdKVxyXG4gICAgfVxyXG4gICAgLy8gcHVibGljIG1hcDxPdXRwdXRJdGVtc1R5cGUgZXh0ZW5kcyBSYWRvbkFueT4oaW5uZXJTY3JpcHQ6IFJhZG9uT3BlcmF0b3I8T3V0cHV0SXRlbXNUeXBlPikge1xyXG4gICAgLy8gICAgIC8vIHRvZG86IGNoZWNrIHNjcmlwdCdzIGlucHV0IHR5cGUgbWF0Y2hlcyBhcnJheSdzIGl0ZW1zIHR5cGUsIGlmIGFueSA/P1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxPdXRwdXRJdGVtc1R5cGU+LCBbaW5uZXJTY3JpcHRdKVxyXG4gICAgLy8gfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWR1Y2UgYWxsIGl0ZW1zIGluIHRoZSBhcnJheSBpbnRvIGEgc2luZ2xlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHJlZHVjdG9yIFRoZSByZWR1Y3RvciBtZXRob2QgdG8gYmUgYXBwbGllZC4gQWxsIGFycmF5IGl0ZW1zIG11c3QgYmUgXHJcbiAgICAgKiBjb252ZXJ0YWJsZSBpbnRvIGZsb2F0IHZhbHVlcy5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZHVjZShyZWR1Y3RvcjogUmFkb25SZWR1Y2VyT3Bjb2Rlcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW3JlZHVjdG9yXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT3JkZXIgdGhlIGFycmF5IGl0ZW1zIGJhc2VkIGVpdGhlciBvbiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgZ2l2ZW4gYGlubmVyU2NyaXB0YCB0byBldmVyeSBpdGVtLCBvciBvbiB0aGUgXHJcbiAgICAgKiBhY3R1YWwgaXRlbSB2YWx1ZXMgKGFzIGxvbmcgYXMgdGhlc2UgYXJlIGVpdGhlciBpbnRlZ2VycyBvciBzdHJpbmdzKS5cclxuICAgICAqIEZhaWxzIGlmIGFwcGxpZWQgb24gbm9uLWhvbWVnZW5vdXMgYXJyYXlzIChpLmUuIG5vdCBhbGwgaXRlbXMgc2hhcmluZyB0aGUgc2FtZSBgUmFkb25BbnlgKS4gXHJcbiAgICAgKiBAcGFyYW0gaW5uZXJTY3JpcHQgKE9wdGlvbmFsKSBTb3J0aW5nIHNjcmlwdCByZXR1cm5pbmcgZWl0aGVyIGEgYFJhZG9uSW50ZWdlcmAgb3IgYSBgUmFkb25TdHJpbmdgIG9iamVjdC5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQXJyYXlgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgLy8gVE9ET1xyXG4gICAgLy8gcHVibGljIHNvcnQoaW5uZXJTY3JpcHQ/OiBSYWRvbk9wZXJhdG9yPFJhZG9uU3RyaW5nIHwgUmFkb25JbnRlZ2VyPikge1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBbaW5uZXJTY3JpcHRdKVxyXG4gICAgLy8gfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlIGEgc2VsZWN0aW9uIG9mIGl0ZW1zIGZyb20gdGhlIGlucHV0IGFycmF5LlxyXG4gICAgICogQHBhcmFtIGluZGV4ZXMgSW5kZXhlcyBvZiB0aGUgaW5wdXQgaXRlbXMgdG8gdGFrZSBpbnRvIHRoZSBvdXRwdXQgYXJyYXkuIFxyXG4gICAgICogQHJldHVybiBBIGBSYWRvbkFycmF5YCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwaWNrKC4uLmluZGV4ZXM6IG51bWJlcltdKSB7XHJcbiAgICAgICAgaWYgKEFycmF5KGluZGV4ZXMpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFdmFsRXJyb3IoYFxceDFiWzE7MzNtUmFkb25BcnJheTo6cGljazogYSBub24tZW1wdHkgYXJyYXkgb2YgbnVtYmVycyBtdXN0IGJlIHByb3ZpZGVkXFx4MWJbMG1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8SXRlbXNUeXBlPiwgWy4uLmluZGV4ZXNdKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmFkb25Cb29sZWFuIGV4dGVuZHMgUmFkb25Bbnkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXZlcnNlIHZhbHVlLlxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZWdhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJvb2xlYW4sIFtdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYXN0IHZhbHVlIGludG8gYSBzdHJpbmcuIFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0cmluZ2lmeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhZG9uQnl0ZXMgZXh0ZW5kcyBSYWRvbkFueSB7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRW5jb2RpbmdzID0gUmFkb25FbmNvZGluZ3M7XHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYnVmZmVyIGludG8gKGJpZy1lbmRpYW4pIGludGVnZXIuXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJ5dGVzYCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc0ludGVnZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSB0aGUgU0hBMi0yNTYgaGFzaCBmdW5jdGlvbi5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQnl0ZXNgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhc2goKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJ5dGVzLCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ291bnQgdGhlIG51bWJlciBvZiBieXRlcy4gXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uSW50ZWdlciwgW10pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBzbGljZSBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgYnVmZmVyLiBcclxuICAgICAqIEEgYHN0YXJ0SW5kZXhgIG9mIDAgcmVmZXJzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IGJ1ZmZlci4gSWYgbm8gYGVuZEluZGV4YCBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSBhc3N1bWVkIFxyXG4gICAgICogdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyLiBOZWdhdGl2ZSB2YWx1ZXMgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIuXHJcbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBQb3NpdGlvbiB3aXRoaW4gaW5wdXQgYnVmZmVyIHdoZXJlIHRoZSBvdXRwdXQgYnVmZmVyIHdpbGwgc3RhcnQuXHJcbiAgICAgKiBAcGFyYW0gZW5kSW5kZXggUG9zaXRpb24gd2l0aGluIGlucHV0IGJ1ZmZlciB3aGVyZSB0aGUgb3V0cHV0IGJ1ZmZlciB3aWxsIGVuZFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25CeXRlc2Agb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2xpY2Uoc3RhcnRJbmRleDogbnVtYmVyID0gMCwgZW5kSW5kZXg/OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQnl0ZXMsIFtzdGFydEluZGV4LCBlbmRJbmRleF0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgdGhlIGlucHV0IGJ1ZmZlciBpbnRvIGEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIGVuY29kaW5nIEVudW0gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBlbmNvZGluZyBzY2hlbWEgb24gdGhlIG91dHB1dCBzdHJpbmcsIHN0YW5kaW5nOlxyXG4gICAgICogICAwIC0+IEhleCBzdHJpbmcgKGRlZmF1bHQsIGlmIG5vbmUgd2FzIHNwZWNpZmllZClcclxuICAgICAqICAgMSAtPiBCYXNlNjQgc3RyaW5nXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvblN0cmluZ2Agb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RyaW5naWZ5KGVuY29kaW5nID0gUmFkb25FbmNvZGluZ3MuSGV4U3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW2VuY29kaW5nXSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhZG9uRmxvYXQgZXh0ZW5kcyBSYWRvbkFueSB7XHJcbiAgICAvKipcclxuICAgICAqIENvbXB1dGUgdGhlIGFic29sdXRlIHZhbHVlLlxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzb2x1dGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkZsb2F0LCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ29tcHV0ZSB0aGUgbG93ZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBmbG9hdCB2YWx1ZS5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNlaWxpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkZsb2F0LCBbXSlcclxuXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENvbXB1dGUgdGhlIGdyZWF0ZXN0IGludGVnZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBmbG9hdCB2YWx1ZS5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmxvb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGZsb2F0IHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gYGlucHV0YC4gXHJcbiAgICAgKiBAcGFyYW0gaW5wdXRcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JlYXRlclRoYW4oaW5wdXQ6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbaW5wdXRdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGZsb2F0IHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gYGlucHV0YC5cclxuICAgICAqIEBwYXJhbSBpbnB1dCBcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbGVzc1RoYW4oaW5wdXQ6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbaW5wdXRdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wdXRlIHRoZSBmbG9hdCByZW1haW5kZXIgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIGJ5IHRoZSBnaXZlbiBgaW50ZWdlcmAuXHJcbiAgICAgKiBAcGFyYW0gaW50ZWdlciBcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vZHVsbyhpbnRlZ2VyOiBudW1iZXIgfCBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtpbnRlZ2VyXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgdGhlIGZsb2F0IHZhbHVlIGJ5IHRoZSBnaXZlbiBgZmFjdG9yYC5cclxuICAgICAqIEBwYXJhbSBmYWN0b3IgXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbXVsdGlwbHkoZmFjdG9yOiBudW1iZXIgfCBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtmYWN0b3JdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgdGhlIGZsb2F0IHZhbHVlLiBcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5lZ2F0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wdXRlIHRoZSBmbG9hdCB2YWx1ZSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGdpdmVuIGBleHBvbmVudGBcclxuICAgICAqIEBwYXJhbSBleHBvbmVudFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcG93ZXIoZXhwb25lbnQ6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW2V4cG9uZW50XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUm91bmQgdG8gdGhlIGNsb3Nlc3QgaW50ZWdlciB2YWx1ZS5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcm91bmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJpbmdpZnkgdGhlIGZsb2F0IHZhbHVlLlxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0cmluZ2lmeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGFrZSB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSBmbG9hdCB2YWx1ZS4gXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRydW5jYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhZG9uSW50ZWdlciBleHRlbmRzIFJhZG9uQW55IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29tcHV0ZSB0aGUgYWJzb2x1dGUgdmFsdWUuXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFic29sdXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoZSBpbnRlZ2VyIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gYGlucHV0YC4gXHJcbiAgICAgKiBAcGFyYW0gaW5wdXRcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JlYXRlclRoYW4oaW5wdXQ6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbaW5wdXRdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGludGVnZXIgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBnaXZlbiBgaW5wdXRgLiBcclxuICAgICAqIEBwYXJhbSBpbnB1dFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsZXNzVGhhbihpbnB1dDogbnVtYmVyIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJvb2xlYW4sIFtpbnB1dF0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENvbXB1dGUgdGhlIHJlbWFpbmRlciBvZiBkaXZpZGluZyB0aGUgdmFsdWUgYnkgdGhlIGdpdmVuIGBpbnRlZ2VyYC5cclxuICAgICAqIEBwYXJhbSBpbnRlZ2VyIFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW9kdWxvKGludGVnZXI6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbaW50ZWdlcl0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHRoZSB2YWx1ZSBieSB0aGUgZ2l2ZW4gYGludGVnZXJgLlxyXG4gICAgICogQHBhcmFtIGludGVnZXIgXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC4gXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtdWx0aXBseShpbnRlZ2VyOiBudW1iZXIgfCBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uSW50ZWdlciwgW2ludGVnZXJdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgdGhlIGludGVnZXIgdmFsdWUuIFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmVnYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ29tcHV0ZSB0aGUgdmFsdWUgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiBnaXZlbiBgZXhwb25lbnRgXHJcbiAgICAgKiBAcGFyYW0gZXhwb25lbnRcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcG93ZXIoZXhwb25lbnQ6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbZXhwb25lbnRdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJpbmdpZnkgdGhlIHZhbHVlLlxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0cmluZ2lmeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2FzdCBpbnRvIGEgYmlnLWVuZGlhbiBieXRlcyBidWZmZXIuXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJ5dGVzYCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b0J5dGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25CeXRlcywgW10pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhc3QgaW50byBhIGZsb2F0IHZhbHVlLlxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdG9GbG9hdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtdKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmFkb25NYXAgZXh0ZW5kcyBSYWRvbkFueSB7XHJcbiAgICAvKipcclxuICAgICAqIEFsdGVyIHRoZSB2YWx1ZSBvZiB0aGUgaXRlbShzKSBpZGVudGlmaWVkIGJ5IGBrZXlzYCwgYXBwbHlpbmcgdGhlIGdpdmVuIGBpbm5lclNjcmlwdGAgdG8gZWFjaCBvbmUgb2YgdGhlbS5cclxuICAgICAqIEBwYXJhbSBrZXkgXHJcbiAgICAgKiBAcGFyYW0gaW5uZXJTY3JpcHQgXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgc2FtZSBSYWRvbk1hcCB1cG9uIHdoaWNoIHRoaXMgb3BlcmF0b3IgaXMgZXhlY3V0ZWQsIHdpdGggdGhlIHNwZWNpZmllZCBpdGVtKHMpIGFsdGVyZWRcclxuICAgICAqIGJ5IHRoZSBnaXZlbiBgaW5uZXJTY3JpcHRgLlxyXG4gICAgICovXHJcbiAgICAvLyBUT0RPXHJcbiAgICAvLyBwdWJsaWMgYWx0ZXI8QWx0ZXJlZE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueT4oaW5uZXJTY3JpcHQ6IFJhZG9uT3BlcmF0b3I8QWx0ZXJlZE91dHB1dFR5cGU+LCAuLi5rZXlzOiBzdHJpbmdbXSkge1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25NYXAsIFtpbm5lclNjcmlwdCwgLi4ua2V5c10pXHJcbiAgICAvLyB9XHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIHRoZSBhcnJheSB3aXRoaW4gdGhlIHNwZWNpZmllZCBga2V5YCBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBrZXkgXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkFycmF5YCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcnJheTxJdGVtc1R5cGUgZXh0ZW5kcyBSYWRvbkFueSA9IFJhZG9uQW55PihrZXk6IHN0cmluZywgX2l0ZW1zVHlwZT86IHsgbmV3KCk6IEl0ZW1zVHlwZTsgfSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBba2V5XSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmV0Y2ggdGhlIGJvb2xlYW4gd2l0aGluIHRoZSBzcGVjaWZpZWQgYGtleWAgZmllbGQuIFxyXG4gICAgICogQHBhcmFtIGtleSBcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJvb2xlYW4oa2V5OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQm9vbGVhbiwgW2tleV0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIHRoZSBmbG9hdCB2YWx1ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCBga2V5YCBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBrZXkgXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRGbG9hdChrZXk6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW2tleV0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIHRoZSBpbnRlZ2VyIHZhbHVlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBrZXlgIGZpZWxkLiBcclxuICAgICAqIEBwYXJhbSBrZXkgXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEludGVnZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uSW50ZWdlciwgW2tleV0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIHRoZSBtYXAgb2JqZWN0IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBrZXlgIGZpZWxkLiBcclxuICAgICAqIEBwYXJhbSBrZXkgXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbk1hcGAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TWFwKGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbk1hcCwgW2tleV0pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIHRoZSBzdHJpbmcgd2l0aGluIHRoZSBzcGVjaWZpZWQgYGtleWAgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFN0cmluZyhrZXk6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25TdHJpbmcsIFtrZXldKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRyYWN0IGtleSBuYW1lcyBvZiB0aGUgbWFwIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5ncy5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQXJyYXlgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGtleXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5PFJhZG9uU3RyaW5nPiwgW10pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRha2UgYSBzZWxlY3Rpb24gb2YgaXRlbXMgZnJvbSB0aGUgaW5wdXQgbWFwLiBGYWlscyBpZiB1bmV4aXN0ZW50IGl0ZW1zIGFyZSByZWZlcnJlZC5cclxuICAgICAqIEBwYXJhbSBrZXlzIEtleSBzdHJpbmcgb2YgdGhlIGlucHV0IGl0ZW1zIHRvIHRha2UgaW50byB0aGUgb3V0cHV0IG1hcC4gXHJcbiAgICAgKiBAcmV0dXJuIEEgYFJhZG9uTWFwYCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwaWNrKC4uLmtleXM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgaWYgKEFycmF5KGtleXMpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFdmFsRXJyb3IoYFxceDFiWzE7MzNtUmFkb25NYXA6OnBpY2s6IGEgbm9uLWVtcHR5IGFycmF5IG9mIGtleSBzdHJpbmdzIG11c3QgYmUgcHJvdmlkZWRcXHgxYlswbWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25NYXAsIFsuLi5rZXlzXSlcclxuXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEV4dHJhY3QgdGhlIG1hcCB2YWx1ZXMgaW50byBhbiBhcnJheS5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQXJyYXlgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXksIFtdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHJpbmdpZnkgaW5wdXQgYFJhZG9uTWFwYCBvYmplY3QgaW50byBhIEpTT04gc3RyaW5nLlxyXG4gICAgICogQHJldHVybiBBIGBSYWRvblN0cmluZ2Agb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RyaW5naWZ5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25TdHJpbmcsIFtdKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmFkb25TdHJpbmcgZXh0ZW5kcyBSYWRvbkFueSB7XHJcbiAgICAvKipcclxuICAgICAqIENhc3QgaW50byBhIGJvb2xlYW4gdmFsdWUuXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJvb2xlYW5gIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzQm9vbGVhbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQm9vbGVhbiwgW10pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgdGhlIGlucHV0IHN0cmluZyBpbnRvIGEgYnl0ZXMgYnVmZmVyLlxyXG4gICAgICogQHBhcmFtIGVuY29kaW5nIEVudW0gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBlbmNvZGluZyBzY2hlbWEgb24gdGhlIGlucHV0IHN0cmluZywgc3RhbmRpbmc6XHJcbiAgICAgKiAgIDAgLT4gSGV4IHN0cmluZyAoZGVmYXVsdCwgaWYgbm9uZSB3YXMgc3BlY2lmaWVkKVxyXG4gICAgICogICAxIC0+IEJhc2U2NCBzdHJpbmdcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQnl0ZXNgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzQnl0ZXMoZW5jb2RpbmcgPSBSYWRvbkVuY29kaW5ncy5IZXhTdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQnl0ZXMsIFtlbmNvZGluZ10pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhc3QgaW50byBhIGZsb2F0IG51bWJlci5cclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzRmxvYXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkZsb2F0LCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ291bnQgdGhlIG51bWJlciBvZiBjaGFycy4gXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uSW50ZWdlciwgW10pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2UgdGhlIHN0cmluZyBieSBhIHZhbHVlIG9mIHR5cGUgYG91dHB1dFR5cGVgLCBkZXRlcm1pbmVkIG9uIHdoZXRoZXIgdGhlIHN0cmluZyB2YWx1ZSBtYXRjaGVzIFxyXG4gICAgICogYW55IG9mIHRoZSBrZXlzIHdpdGhpbiB0aGUgcHJvdmlkZWQgYG1hdGNoaW5nTWFwYCwgb3Igc2V0IHRvIGEgYGRlZmF1bHRWYWx1ZWAgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXHJcbiAgICAgKiBAcGFyYW0gb3V0cHV0VHlwZSBSYWRvbiB0eXBlIG9mIHRoZSBvdXRwdXQgdmFsdWUuIFxyXG4gICAgICogQHBhcmFtIG1hdGNoaW5nTWFwIE1hcCBkZXRlcm1pbmluZyB0aGUgb3V0cHV0IHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgc3RyaW5nIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBWYWx1ZSByZXR1cm5lZCBpZiBubyBtYXRjaCBpcyBmb3VuZC4gXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1hdGNoPE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueSA9IFJhZG9uU3RyaW5nPihcclxuICAgICAgICBvdXRwdXRUeXBlOiB7IG5ldyhwcmV2PzogUmFkb25PcGVyYXRvcik6IE91dHB1dFR5cGU7IH0sIFxyXG4gICAgICAgIG1hdGNoaW5nTWFwOiBNYXA8c3RyaW5nLCBhbnk+LCBcclxuICAgICAgICBkZWZhdWx0VmFsdWU6IGFueVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihvdXRwdXRUeXBlLCBbbWF0Y2hpbmdNYXAsIGRlZmF1bHRWYWx1ZV0pXHJcbiAgICAgICAgLy8gdGhpcy5fYnl0ZWNvZGUgPSBbIFxyXG4gICAgICAgIC8vICAgICAweDc1LCAgXHJcbiAgICAgICAgLy8gICAgIG1hdGNoaW5nTWFwLFxyXG4gICAgICAgIC8vICAgICBkZWZhdWx0VmFsdWVcclxuICAgICAgICAvLyBdXHJcbiAgICAgICAgLy8gdGhpcy5fbWV0aG9kID0gXCJtYXRjaFwiXHJcbiAgICAgICAgLy8gdGhpcy5fcGFyYW1zID0gYHsgJHtPYmplY3QuZW50cmllcyhtYXRjaGluZ01hcCkubWFwKChlbnRyeTogW3N0cmluZywgYW55XSkgPT4gYFxcXCIke2VudHJ5WzBdfVxcXCI6ICR7ZW50cnlbMV19LCBgKX19LCAke2RlZmF1bHRWYWx1ZX1gXHJcbiAgICAgICAgLy8gbGV0IGtleXM6IHN0cmluZyA9IFwiXCJcclxuICAgICAgICAvLyBPYmplY3Qua2V5cyhtYXRjaGluZ01hcCkubWFwKChrZXk6IHN0cmluZykgPT4ga2V5cyArPSBrZXkgKyBcIjtcIilcclxuICAgICAgICAvLyByZXR1cm4gbmV3IG91dHB1dFR5cGUodGhpcywga2V5cylcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2UgaW5wdXQgc3RyaW5nIGFzIGFuIGFycmF5IG9mIEpTT04gaXRlbXMuIFxyXG4gICAgICogQHBhcmFtIGpzb25QYXRocyAob3B0aW9uYWwpIEFycmF5IG9mIEpTT04gcGF0aHMgd2l0aGluIGlucHV0IGBSYWRvblN0cmluZ2AgZnJvbSB3aGVyZSB0byBmZXRjaCBpdGVtcyB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIG91dHB1dCBgUmFkb25BcnJheWAuIFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcGFyc2VKU09OQXJyYXkoLi4uanNvblBhdGhzOiBzdHJpbmdbXSk6IFJhZG9uQXJyYXk8UmFkb25Bbnk+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5PFJhZG9uQW55PiwgWy4uLmpzb25QYXRoc10pXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlIHN0cmluZyBhcyBhIEpTT04tZW5jb2RlZCBtYXAuIFxyXG4gICAgICogQHBhcmFtIGpzb25QYXRoIChvcHRpb25hbCkgSlNPTiBwYXRoIHdpdGhpbiBpbnB1dCBgUmFkb25TdHJpbmdgIGZyb20gd2hlcmUgdG8gZXh0cmFjdCB0aGUgb3V0cHV0IGBSYWRvbk1hcGAuIFxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25NYXBgIG9iamVjdC4gXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwYXJzZUpTT05NYXAoanNvblBhdGg/OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uTWFwLCBbanNvblBhdGhdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZSBzdHJpbmcgYXMgYW4gWE1MLWVuY29kZWQgbWFwLiBcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uTWFwYCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwYXJzZVhNTE1hcCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uTWFwLCBbXSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZSB3aXRoIGdpdmVuIGByZXBsYWNlbWVudGAgc3RyaW5nLCBhbGwgcGFydHMgb2YgdGhlIGlucHV0IHN0cmluZyB0aGF0IG1hdGNoIHdpdGggZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uLiBcclxuICAgICAqIEBwYXJhbSByZWdleCBSZWd1bGFyIGV4cHJlc3Npb24gdG8gYmUgbWF0Y2hlZC5cclxuICAgICAqIEBwYXJhbSByZXBsYWNlbWVudCBUZXh0IHRoYXQgd2lsbCByZXBsYWNlIGFsbCBvY2N1cmVuY2VzLiBcclxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXBsYWNlKHJlZ2V4OiBzdHJpbmcgPSBcIlwiLCByZXBsYWNlbWVudDogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25TdHJpbmcsIFtyZWdleCwgcmVwbGFjZW1lbnRdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgc2xpY2UgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0IHN0cmluZy4gXHJcbiAgICAgKiBBIGBzdGFydEluZGV4YCBvZiAwIHJlZmVycyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBzdHJpbmcuIElmIG5vIGBlbmRJbmRleGAgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgYXNzdW1lZCBcclxuICAgICAqIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IHN0cmluZy4gTmVnYXRpdmUgdmFsdWVzIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgaW5wdXQgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0YXJ0SW5kZXggUG9zaXRpb24gd2l0aGluIGlucHV0IHN0cmluZyB3aGVyZSB0aGUgb3V0cHV0IHN0cmluZyB3aWxsIHN0YXJ0LlxyXG4gICAgICogQHBhcmFtIGVuZEluZGV4IFBvc2l0aW9uIHdpdGhpbiBpbnB1dCBzdHJpbmcgd2hlcmUgdGhlIG91dHB1dCBzdHJpbmcgd2lsbCBlbmQuXHJcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvblN0cmluZ2Agb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2xpY2Uoc3RhcnRJbmRleDogbnVtYmVyID0gMCwgZW5kSW5kZXg/OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbc3RhcnRJbmRleCwgZW5kSW5kZXhdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGVzIGlucHV0IHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN1YnN0cmluZ3MsIFxyXG4gICAgICogQHBhcmFtIHJlZ2V4IFRoZSBzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHVzZSBmb3Igc3BsaXR0aW5nLlxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3BsaXQocmVnZXg6IHN0cmluZyA9IFwiXFxyXCIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8UmFkb25TdHJpbmc+LCBbcmVnZXhdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb3dlciBjYXNlIGFsbCBjaGFyYWN0ZXJzLlxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvTG93ZXJjYXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25TdHJpbmcsIFtdKVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcHBlciBjYXNlIGFsbCBjaGFyYWN0ZXJzLlxyXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvVXBwZXJDYXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25TdHJpbmcsIFtdKVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
936
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JhZG9uL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUEyQztBQUMzQywyREFBNEM7QUFHNUMsZ0RBQWlDO0FBSWpDLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN0Qiw2REFBYSxDQUFBO0lBQ2IsdURBQVUsQ0FBQTtBQUNkLENBQUMsRUFIVyxjQUFjLDhCQUFkLGNBQWMsUUFHekI7QUFFRCxJQUFZLGNBb0VYO0FBcEVELFdBQVksY0FBYztJQUN0QixrRUFBa0IsQ0FBQTtJQUNsQixrRUFBa0IsQ0FBQTtJQUNsQiw4REFBZ0IsQ0FBQTtJQUNoQixzRUFBb0IsQ0FBQTtJQUNwQiwwRUFBc0IsQ0FBQTtJQUN0QixzRUFBb0IsQ0FBQTtJQUNwQixzRUFBb0IsQ0FBQTtJQUNwQiwwRUFBc0IsQ0FBQTtJQUN0QixrRUFBa0IsQ0FBQTtJQUNsQix3RUFBcUIsQ0FBQTtJQUNyQiw0REFBZSxDQUFBO0lBQ2Ysa0VBQWtCLENBQUE7SUFDbEIsOERBQWdCLENBQUE7SUFDaEIsOERBQWdCLENBQUE7SUFDaEIsNEVBQXVCLENBQUE7SUFDdkIsc0VBQW9CLENBQUE7SUFDcEIsd0VBQXFCLENBQUE7SUFDckIsOERBQWdCLENBQUE7SUFDaEIsd0VBQXFCLENBQUE7SUFDckIsa0VBQWtCLENBQUE7SUFDbEIsZ0VBQWlCLENBQUE7SUFDakIsc0VBQW9CLENBQUE7SUFDcEIsd0VBQXFCLENBQUE7SUFDckIsb0VBQW1CLENBQUE7SUFDbkIsNEVBQXVCLENBQUE7SUFDdkIsZ0VBQWlCLENBQUE7SUFDakIsc0VBQW9CLENBQUE7SUFDcEIsa0VBQWtCLENBQUE7SUFDbEIsc0VBQW9CLENBQUE7SUFDcEIsa0VBQWtCLENBQUE7SUFDbEIsZ0VBQWlCLENBQUE7SUFDakIsZ0VBQWlCLENBQUE7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QUFpQjtRQUNsRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDbEUsQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsUUFBZ0IsSUFBSTtRQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQSxVQUF1QixDQUFBLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFDRDs7O09BR0c7SUFDSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ksV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztDQUNKO0FBMUhELGtDQTBIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuY29kZSBhcyBjYm9yRW5jb2RlIH0gZnJvbSBcImNib3JcIlxuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tIFwiLi4vLi4vYmluL2hlbHBlcnNcIlxuXG5pbXBvcnQgeyBPcGNvZGVzIGFzIFJhZG9uUmVkdWNlck9wY29kZXMgfSBmcm9tICcuL3JlZHVjZXJzJ1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi4vdXRpbHMnXG5cbmV4cG9ydCB7IEhleFN0cmluZyBhcyBSYWRvbkJ5dGVjb2RlIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuZXhwb3J0IGVudW0gUmFkb25FbmNvZGluZ3Mge1xuICAgIEhleFN0cmluZyA9IDAsXG4gICAgQmFzZTY0ID0gMSxcbn1cblxuZXhwb3J0IGVudW0gUmFkb25PcGVyYXRvcnMge1xuICAgIEFycmF5TGVuZ3RoID0gMHgxMCxcbiAgICBBcnJheUZpbHRlciA9IDB4MTEsXG4gICAgQXJyYXlKb2luID0gMHgxMixcbiAgICBBcnJheUdldEFycmF5ID0gMHgxMyxcbiAgICBBcnJheUdldEJvb2xlYW4gPSAweDE0LFxuICAgIEFycmF5R2V0Qnl0ZXMgPSAweDE1LFxuICAgIEFycmF5R2V0RmxvYXQgPSAweDE2LFxuICAgIEFycmF5R2V0SW50ZWdlciA9IDB4MTcsXG4gICAgQXJyYXlHZXRNYXAgPSAweDE4LFxuICAgIEFycmF5R2V0U3RyaW5nID0gMHgxOSxcbiAgICBBcnJheU1hcCA9IDB4MWEsXG4gICAgQXJyYXlSZWR1Y2UgPSAweDFiLFxuICAgIEFycmF5U29ydCA9IDB4MWQsXG4gICAgQXJyYXlQaWNrID0gMHgxZSxcbiAgICBCb29sZWFuU3RyaW5naWZ5ID0gMHgyMCxcbiAgICBCb29sZWFuTmVnYXRlID0gMHgyMixcbiAgICBCeXRlc1N0cmluZ2lmeSA9IDB4MzAsXG4gICAgQnl0ZXNIYXNoID0gMHgzMSxcbiAgICBCeXRlc0FzSW50ZWdlciA9IDB4MzIsXG4gICAgQnl0ZXNMZW5ndGggPSAweDM0LFxuICAgIEJ5dGVzU2xpY2UgPSAweDNjLFxuICAgIEZsb2F0QWJzb2x1dGUgPSAweDUwLFxuICAgIEZsb2F0U3RyaW5naWZ5ID0gMHg1MSxcbiAgICBGbG9hdENlaWxpbmcgPSAweDUyLFxuICAgIEZsb2F0R3JlYXRlclRoYW4gPSAweDUzLFxuICAgIEZsb2F0Rmxvb3IgPSAweDU0LFxuICAgIEZsb2F0TGVzc1RoYW4gPSAweDU1LFxuICAgIEZsb2F0TW9kdWxlID0gMHg1NixcbiAgICBGbG9hdE11bHRpcGx5ID0gMHg1NyxcbiAgICBGbG9hdE5lZ2F0ZSA9IDB4NTgsXG4gICAgRmxvYXRQb3dlciA9IDB4NTksXG4gICAgRmxvYXRSb3VuZCA9IDB4NWIsXG4gICAgRmxvYXRUcnVuY2F0ZSA9IDB4NWQsXG4gICAgSW50ZWdlckFic29sdXRlID0gMHg0MCxcbiAgICBJbnRlZ2VyVG9GbG9hdCA9IDB4NDEsXG4gICAgSW50ZWdlclN0cmluZ2lmeSA9IDB4NDIsXG4gICAgSW50ZWdlckdyZWF0ZXJUaGFuID0gMHg0MyxcbiAgICBJbnRlZ2VyTGVzc1RoYW4gPSAweDQ0LFxuICAgIEludGVnZXJNb2R1bG8gPSAweDQ2LFxuICAgIEludGVnZXJNdWx0aXBseSA9IDB4NDcsXG4gICAgSW50ZWdlck5lZ2F0ZSA9IDB4NDgsXG4gICAgSW50ZWdlclBvd2VyID0gMHg0OSxcbiAgICBJbnRlZ2VyVG9CeXRlcyA9IDB4NGEsXG4gICAgTWFwU3RyaW5naWZ5ID0gMHg2MCxcbiAgICBNYXBHZXRBcnJheSA9IDB4NjEsXG4gICAgTWFwR2V0Qm9vbGVhbiA9IDB4NjIsXG4gICAgTWFwR2V0RmxvYXQgPSAweDY0LFxuICAgIE1hcEdldEludGVnZXIgPSAweDY1LFxuICAgIE1hcEdldE1hcCA9IDB4NjYsXG4gICAgTWFwR2V0U3RyaW5nID0gMHg2NyxcbiAgICBNYXBLZXlzID0gMHg2OCxcbiAgICBNYXBWYWx1ZXMgPSAweDY5LFxuICAgIE1hcEFsdGVyID0gMHg2YixcbiAgICBNYXBQaWNrID0gMHg2ZSwgICBcbiAgICBTdHJpbmdBc0Jvb2xlYW4gPSAweDcwLFxuICAgIFN0cmluZ0FzQnl0ZXMgPSAweDcxLFxuICAgIFN0cmluZ0FzRmxvYXQgPSAweDcyLFxuICAgIFN0cmluZ0xlbmd0aCA9IDB4NzQsXG4gICAgU3RyaW5nTWF0Y2ggPSAweDc1LFxuICAgIFN0cmluZ1BhcnNlSlNPTkFycmF5ID0gMHg3NixcbiAgICBTdHJpbmdQYXJzZUpTT05NYXAgPSAweDc3LFxuICAgIFN0cmluZ1BhcnNlWE1MTWFwID0gMHg3OCxcbiAgICBTdHJpbmdUb0xvd2VyQ2FzZSA9IDB4NzksXG4gICAgU3RyaW5nVG9VcHBzZXJDYXNlID0gMHg3YSxcbiAgICBTdHJpbmdQYXJzZVJlcGxhY2UgPSAweDdiLFxuICAgIFN0cmluZ1BhcnNlU2xpY2UgPSAweDdjLFxuICAgIFN0cmluZ1BhcnNlU3BsaXQgPSAweDdkLFxufVxuXG5hYnN0cmFjdCBjbGFzcyBSYWRvbkNsYXNzIHtcbiAgICByZWFkb25seSBwcmV2PzogUmFkb25PcGVyYXRvcjtcbiAgICBjb25zdHJ1Y3RvcihwcmV2PzogUmFkb25PcGVyYXRvcikge1xuICAgICAgICB0aGlzLnByZXYgPSBwcmV2XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25PcGVyYXRvciBleHRlbmRzIFJhZG9uQ2xhc3Mge1xuICAgIHJlYWRvbmx5IG9wY29kZTogUmFkb25PcGVyYXRvcnNcbiAgICByZWFkb25seSBwYXJhbXM/OiBhbnlbXVxuICAgIGNvbnN0cnVjdG9yKG9wY29kZTogUmFkb25PcGVyYXRvcnMsIHBhcmFtcz86IGFueVtdLCBvcHM/OiBSYWRvbk9wZXJhdG9yKSB7XG4gICAgICAgIHN1cGVyKG9wcylcbiAgICAgICAgdGhpcy5vcGNvZGUgPSBvcGNvZGVcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXMgfHwgW11cbiAgICB9XG4gICAgcHVibGljIGFyZ3NDb3VudCgpOiBudW1iZXIgeyBcbiAgICAgICAgbGV0IG1heENvdW50OiBudW1iZXIgPSAwXG4gICAgICAgIHRoaXMucGFyYW1zPy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBoZWxwZXJzLmdldFdpbGRjYXJkc0NvdW50RnJvbVN0cmluZyhwYXJhbSlcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiBtYXhDb3VudCkgbWF4Q291bnQgPSBjb3VudFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnICYmIHBhcmFtIGluc3RhbmNlb2YgUmFkb25TY3JpcHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHBhcmFtLmFyZ3NDb3VudCgpXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gbWF4Q291bnQpIG1heENvdW50ID0gY291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAgICAgbWF4Q291bnQsXG4gICAgICAgICAgICB0aGlzLnByZXY/LmFyZ3NDb3VudCgpIHx8IDBcbiAgICAgICAgKVxuICAgIH1cbiAgICBwdWJsaWMgZGlzZWN0KGxldmVsID0gMCk6IFtudW1iZXIsIHN0cmluZywgc3RyaW5nXVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcz8ucHJldj8uZGlzZWN0KGxldmVsKSB8fCBbXVxuICAgICAgICBjb25zdCBvcGVyYXRvciA9IFJhZG9uT3BlcmF0b3JzW3RoaXMub3Bjb2RlXVxuICAgICAgICBjb25zdCBpbnB1dFR5cGUgPSBgUmFkb24ke29wZXJhdG9yLnNwbGl0KC8oPz1bQS1aXSkvKVswXX1gXG4gICAgICAgIGxldCByYWRvbkNhbGwgPSBvcGVyYXRvci5zcGxpdCgvKD89W0EtWl0pLykuc2xpY2UoMSkuam9pbignJylcbiAgICAgICAgcmFkb25DYWxsID0gcmFkb25DYWxsLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcmFkb25DYWxsLnNsaWNlKDEpXG4gICAgICAgIGxldCBhcmdzID0gXCJcIlxuICAgICAgICBsZXQgc2NyaXB0XG4gICAgICAgIGlmICh0aGlzLnBhcmFtcyAmJiB0aGlzLnBhcmFtc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tYXAocGFyYW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gIT09ICdvYmplY3QnIHx8ICEocGFyYW0gaW5zdGFuY2VvZiBSYWRvblNjcmlwdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyArPSAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJyA/ICBgXCIke3BhcmFtfVwiYCA6IHBhcmFtLnRvU3RyaW5nKCkpICsgXCIsIFwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gcGFyYW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYgKHNjcmlwdCkgYXJncyArPSBcIlJhZG9uT3BlcmF0b3Ige1wiXG4gICAgICAgICAgICBlbHNlIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIC0yKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JpcHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dFR5cGUgPSBgJHsoc2NyaXB0IGFzIFJhZG9uU2NyaXB0KS5vdXRwdXRUeXBlPy5jb25zdHJ1Y3Rvci5uYW1lIHx8IFwiUmFkb25BbnlcIn1gXG4gICAgICAgICAgICByYWRvbkNhbGwgKz0gYCgke2FyZ3N9YFxuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2xldmVsLCBpbnB1dFR5cGUsIHJhZG9uQ2FsbF0pXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oc2NyaXB0IGFzIFJhZG9uU2NyaXB0KS5kaXNlY3QobGV2ZWwgKyAxKSlcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtsZXZlbCwgb3V0cHV0VHlwZSwgXCJ9KVwiXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhZG9uQ2FsbCArPSBgKCR7YXJnc30pYFxuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2xldmVsLCBpbnB1dFR5cGUsIHJhZG9uQ2FsbF0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgICBwdWJsaWMgZW5jb2RlKCk6IGFueVtdIHsgXG4gICAgICAgIGxldCBlbmNvZGVkXG4gICAgICAgIGlmICh0aGlzPy5wYXJhbXMgJiYgdGhpcy5wYXJhbXNbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucGFyYW1zLm1hcChwYXJhbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgUmFkb25BbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbS5wcmV2Py5lbmNvZGUoKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgUmFkb25PcGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtLmVuY29kZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBSYWRvblNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtLmVuY29kZSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZW5jb2RlZCA9IFt0aGlzLm9wY29kZSwgLi4uYXJnc11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVuY29kZWQgPSB0aGlzLm9wY29kZVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4udGhpcy5wcmV2LmVuY29kZSgpLCBlbmNvZGVkXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtlbmNvZGVkXVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyByZXBsYWNlV2lsZGNhcmRzKGFyZ3M6IHN0cmluZ1tdKTogUmFkb25PcGVyYXRvciB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IHRoaXMuYXJnc0NvdW50KCkpIHtcbiAgICAgICAgICAgIHRocm93IEV2YWxFcnJvcihgSW5zdWZmaWNlbnQgYXJncyB3ZXJlIHByb3ZpZGVkICgke2FyZ3MubGVuZ3RofSA8ICR7dGhpcy5hcmdzQ291bnQoKX0pYClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJhZG9uT3BlcmF0b3IoXG4gICAgICAgICAgICB0aGlzLm9wY29kZSwgXG4gICAgICAgICAgICB0aGlzLnBhcmFtcz8ubWFwKHBhcmFtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVycy5yZXBsYWNlV2lsZGNhcmRzKHBhcmFtLCBhcmdzKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJiBwYXJhbSBpbnN0YW5jZW9mIFJhZG9uU2NyaXB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbS5yZXBsYWNlV2lsZGNhcmRzKC4uLmFyZ3MpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksIFxuICAgICAgICAgICAgdGhpcz8ucHJldj8ucmVwbGFjZVdpbGRjYXJkcyhhcmdzKVxuICAgICAgICApXG4gICAgfVxuICAgIHB1YmxpYyBzcGxpY2VXaWxkY2FyZChhcmdJbmRleDogbnVtYmVyLCBhcmdWYWx1ZTogc3RyaW5nKTogUmFkb25PcGVyYXRvciB7XG4gICAgICAgIHJldHVybiBuZXcgUmFkb25PcGVyYXRvcihcbiAgICAgICAgICAgIHRoaXMub3Bjb2RlLFxuICAgICAgICAgICAgdGhpcy5wYXJhbXM/Lm1hcChwYXJhbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMuc3BsaWNlV2lsZGNhcmQocGFyYW0sIGFyZ0luZGV4LCBhcmdWYWx1ZSwgdGhpcy5hcmdzQ291bnQoKSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcgJiYgcGFyYW0gaW5zdGFuY2VvZiBSYWRvblNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW0uc3BsaWNlV2lsZGNhcmQoYXJnSW5kZXgsIGFyZ1ZhbHVlKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcz8ucHJldj8uc3BsaWNlV2lsZGNhcmQoYXJnSW5kZXgsIGFyZ1ZhbHVlKVxuICAgICAgICApXG4gICAgfVxuICAgIHB1YmxpYyB0b1N0cmluZyhsZWZ0ID0gXCJcIiwgaW5kZW50ID0gNCwgbGV2ZWwgPSAwKTogc3RyaW5nIHsgXG4gICAgICAgIGNvbnN0IGxmID0gbGVmdCAhPT0gXCJcIiA/IFwiXFxuXCIgOiBcIlwiXG4gICAgICAgIGxldCBzdHIgPSB0aGlzPy5wcmV2Py50b1N0cmluZyhsZWZ0LCBpbmRlbnQsIGxldmVsKSB8fCBcIlwiXG4gICAgICAgIGxldCBtZXRob2ROYW1lID0gUmFkb25PcGVyYXRvcnNbdGhpcy5vcGNvZGVdLnNwbGl0KC8oPz1bQS1aXSkvKS5zbGljZSgxKS5qb2luKCcnKVxuICAgICAgICBtZXRob2ROYW1lID0gbWV0aG9kTmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc2xpY2UoMSlcbiAgICAgICAgc3RyICs9IGAke2xlZnR9JHtcIiBcIi5yZXBlYXQoaW5kZW50ICogbGV2ZWwpfS4ke21ldGhvZE5hbWV9KGBcbiAgICAgICAgaWYgKHRoaXMucGFyYW1zICYmIHRoaXMucGFyYW1zWzBdICE9PSB1bmRlZmluZWQpIHsgXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gYFwiJHtwYXJhbX1cIiwgYFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJiBwYXJhbSBpbnN0YW5jZW9mIFJhZG9uU2NyaXB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBgJHtwYXJhbS50b1N0cmluZyhsZWZ0LCBpbmRlbnQsIGxldmVsICsgMSl9JHtsZWZ0fSR7XCIgXCIucmVwZWF0KGluZGVudCAqIGxldmVsKX0sIGBcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gcGFyYW0udG9TdHJpbmcoKSArIFwiLCBcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgLTIpXG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGApJHtsZn1gXG4gICAgICAgIHJldHVybiBzdHJcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRvblNjcmlwdCB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcz86IFJhZG9uT3BlcmF0b3I7XG4gICAgcHVibGljIHJlYWRvbmx5IGlucHV0VHlwZT86IFJhZG9uQW55O1xuICAgIHB1YmxpYyByZWFkb25seSBvdXRwdXRUeXBlPzogUmFkb25Bbnk7XG4gICAgY29uc3RydWN0b3IgKG91dHB1dDogUmFkb25BbnkpIHtcbiAgICAgICAgdGhpcy5vcHMgPSBvdXRwdXQ/LnByZXY7XG4gICAgICAgIGNvbnN0IHJhZG9uVHlwZXMgPSB7XG4gICAgICAgICAgICBcIkFycmF5XCI6IFJhZG9uQXJyYXksXG4gICAgICAgICAgICBcIkJvb2xlYW5cIjogUmFkb25Cb29sZWFuLFxuICAgICAgICAgICAgXCJCeXRlc1wiOiBSYWRvbkJ5dGVzLFxuICAgICAgICAgICAgXCJGbG9hdFwiOiBSYWRvbkZsb2F0LFxuICAgICAgICAgICAgXCJJbnRlZ2VyXCI6IFJhZG9uSW50ZWdlcixcbiAgICAgICAgICAgIFwiTWFwXCI6IFJhZG9uTWFwLFxuICAgICAgICAgICAgXCJTdHJpbmdcIjogUmFkb25TdHJpbmcsXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlucHV0ID0gb3V0cHV0Py5wcmV2XG4gICAgICAgIHdoaWxlIChpbnB1dD8ucHJldikgaW5wdXQgPSBpbnB1dD8ucHJldlxuICAgICAgICBjb25zdCBpbnB1dFR5cGUgPSBPYmplY3QuZW50cmllcyhyYWRvblR5cGVzKS5maW5kKChbcHJlZml4LCBfXSkgPT4gaW5wdXQgJiYgUmFkb25PcGVyYXRvcnNbaW5wdXQub3Bjb2RlXS5zdGFydHNXaXRoKHByZWZpeCkpXG4gICAgICAgIGlmIChpbnB1dFR5cGUgJiYgaW5wdXRUeXBlWzFdKSB0aGlzLmlucHV0VHlwZSA9IG5ldyBpbnB1dFR5cGVbMV0oKVxuICAgICAgICBjb25zdCBvdXRwdXRUeXBlID0gT2JqZWN0LnZhbHVlcyhyYWRvblR5cGVzKS5maW5kKG91dHB1dFR5cGUgPT4gb3V0cHV0IGluc3RhbmNlb2Ygb3V0cHV0VHlwZSk7XG4gICAgICAgIGlmIChvdXRwdXRUeXBlKSB0aGlzLm91dHB1dFR5cGUgPSBuZXcgb3V0cHV0VHlwZSgpXG4gICAgfVxuICAgIHB1YmxpYyBhcmdzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BzPy5hcmdzQ291bnQoKSB8fCAwO1xuICAgIH1cbiAgICBwdWJsaWMgZGlzZWN0KGxldmVsID0gMCk6IFtudW1iZXIsIHN0cmluZywgc3RyaW5nXVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BzPy5kaXNlY3QobGV2ZWwpIHx8IFtbbGV2ZWwsIFwiUmFkb25BbnlcIiwgXCJcIl1dXG4gICAgfVxuICAgIHB1YmxpYyBlbmNvZGUoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHM/LmVuY29kZSgpIHx8IFtdO1xuICAgIH1cbiAgICBwdWJsaWMgcmVwbGFjZVdpbGRjYXJkcyguLi5hcmdzOiBzdHJpbmdbXSk6IFJhZG9uQW55IHtcbiAgICAgICAgY29uc3QgT3V0cHV0VHlwZSA9IFtcbiAgICAgICAgICAgIFJhZG9uQXJyYXksXG4gICAgICAgICAgICBSYWRvbkJvb2xlYW4sXG4gICAgICAgICAgICBSYWRvbkJ5dGVzLFxuICAgICAgICAgICAgUmFkb25GbG9hdCxcbiAgICAgICAgICAgIFJhZG9uSW50ZWdlcixcbiAgICAgICAgICAgIFJhZG9uTWFwLFxuICAgICAgICAgICAgUmFkb25TdHJpbmcsXG4gICAgICAgIF0uZmluZChPdXRwdXRUeXBlID0+IHRoaXMub3V0cHV0VHlwZSBpbnN0YW5jZW9mIE91dHB1dFR5cGUpO1xuICAgICAgICBpZiAoT3V0cHV0VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdXRwdXRUeXBlKHRoaXMub3BzPy5yZXBsYWNlV2lsZGNhcmRzKGFyZ3MpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXZhbEVycm9yKGBDYW5ub3QgcmVwbGFjZSB3aWxkY2FyZHMgb24gZW1wdHkgc2NyaXB0YClcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgc3BsaWNlV2lsZGNhcmQoYXJnSW5kZXg6IG51bWJlciwgYXJnVmFsdWU6IHN0cmluZyk6IFJhZG9uQW55IHtcbiAgICAgICAgY29uc3QgT3V0cHV0VHlwZSA9IFtcbiAgICAgICAgICAgIFJhZG9uQXJyYXksXG4gICAgICAgICAgICBSYWRvbkJvb2xlYW4sXG4gICAgICAgICAgICBSYWRvbkJ5dGVzLFxuICAgICAgICAgICAgUmFkb25GbG9hdCxcbiAgICAgICAgICAgIFJhZG9uSW50ZWdlcixcbiAgICAgICAgICAgIFJhZG9uTWFwLFxuICAgICAgICAgICAgUmFkb25TdHJpbmcsXG4gICAgICAgIF0uZmluZChPdXRwdXRUeXBlID0+IHRoaXMub3V0cHV0VHlwZSBpbnN0YW5jZW9mIE91dHB1dFR5cGUpO1xuICAgICAgICBpZiAoT3V0cHV0VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdXRwdXRUeXBlKHRoaXMub3BzPy5zcGxpY2VXaWxkY2FyZChhcmdJbmRleCwgYXJnVmFsdWUpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXZhbEVycm9yKGBDYW5ub3Qgc3BsaWNlIHdpbGRjYXJkcyBvbiBlbXB0eSBzY3JpcHRgKVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyB0b0J5dGVjb2RlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBVdGlscy50b0hleFN0cmluZyhPYmplY3QudmFsdWVzKFVpbnQ4QXJyYXkuZnJvbShjYm9yRW5jb2RlKHRoaXMuZW5jb2RlKCkpKSksIHRydWUpXG4gICAgfVxuICAgIHB1YmxpYyB0b1N0cmluZyhsZWZ0ID0gXCJcIiwgaW5kZW50ID0gMCwgbGV2ZWwgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbGYgPSBsZWZ0ICE9PSBcIlwiID8gXCJcXG5cIiA6IFwiXCJcbiAgICAgICAgcmV0dXJuIGBSYWRvbk9wZXJhdG9yKCR7dGhpcy5pbnB1dFR5cGU/LmNvbnN0cnVjdG9yLm5hbWUgfHwgXCJcIn0pJHtsZn0ke3RoaXMub3BzPy50b1N0cmluZyhsZWZ0LCBpbmRlbnQsIGxldmVsICsgMSl9YFxuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJhZG9uQW55IGV4dGVuZHMgUmFkb25DbGFzcyB7XG4gICAgcHJvdGVjdGVkIF9wdXNoT3BlcmF0b3I8T3V0cHV0VHlwZSBleHRlbmRzIFJhZG9uQW55PihcbiAgICAgICAgb3V0cHV0VHlwZTogeyBuZXcob3BzPzogUmFkb25PcGVyYXRvcik6IE91dHB1dFR5cGU7IH0sIFxuICAgICAgICBwYXJhbXM6IGFueVtdLFxuICAgICk6IE91dHB1dFR5cGUge1xuICAgICAgICBsZXQgbmFtZVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKGVyciBhcyBFcnJvcilcbiAgICAgICAgICAgIG5hbWUgPSByZXN1bHQuc3RhY2s/LnNwbGl0KCcgYXQgJylbMl1cbiAgICAgICAgICAgICAgICAuc3BsaXQoJyAnKVswXVxuICAgICAgICAgICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgICAgICAgICAgLm1hcChwYXJ0ID0+IGhlbHBlcnMudG9VcHBlckNhbWVsQ2FzZShwYXJ0KSlcbiAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgICAuc3BsaXQoLyg/PVtBLVpdKS8pLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3Bjb2RlID0gUmFkb25PcGVyYXRvcnNbbmFtZSBhcyBrZXlvZiB0eXBlb2YgUmFkb25PcGVyYXRvcnNdXG4gICAgICAgIGlmICghb3Bjb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgRmF0YWw6IHVua25vd24gUmFkb24gT3BlcmF0b3Igb3Bjb2RlICcke25hbWV9J2ApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IG91dHB1dFR5cGUobmV3IFJhZG9uT3BlcmF0b3IoXG4gICAgICAgICAgICAgICAgb3Bjb2RlLCBcbiAgICAgICAgICAgICAgICBbLi4ucGFyYW1zXSwgXG4gICAgICAgICAgICAgICAgdGhpcz8ucHJldlxuICAgICAgICAgICAgKSlcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYWRvbkFycmF5PEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55PiB7XG4gICAgaXRlbXNUeXBlOiBJdGVtc1R5cGU7XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRvbkFycmF5PEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55ID0gUmFkb25Bbnk+IGV4dGVuZHMgUmFkb25Bbnkge1xuICAgIC8qKlxuICAgICAqIERpc2NhcmQgdGhlIGl0ZW1zIGluIHRoZSBpbnB1dCBhcnJheSB0aGF0IG1ha2UgdGhlIGdpdmVuIGBpbm5lclNjcmlwdGAgdG8gcmV0dXJuIGEgYGZhbHNlYCB2YWx1ZS4gXG4gICAgICogQHBhcmFtIHNjcmlwdCBGaWx0ZXJpbmcgc2NyaXB0IHVsdGltYXRlbHkgcmV0dXJuaW5nIGEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxuICAgICAqIE11c3QgYWNjZXB0IGFzIGlucHV0IHRoZSBzYW1lIGRhdGEgdHlwZXMgYXMgdGhlIG9uZXMgb2YgdGhlIGl0ZW1zIGJlaW5nIGl0ZXJhdGVkLiBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkFycmF5YCBvYmplY3QgY29udGFpbmluZyBvbmx5IHRoZSBpdGVtcyB0aGF0IG1ha2UgdGhlIGBpbm5lclNjcmlwdGAgdG8gcmV0dXJuIGEgYHRydWVgIHZhbHVlLiBcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyKGlubmVyU2NyaXB0OiBSYWRvbkJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCEoaW5uZXJTY3JpcHQgaW5zdGFuY2VvZiBSYWRvbkJvb2xlYW4pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXZhbEVycm9yKGBJbm5lciBzY3JpcHQgbXVzdCBmZXRjaCBhIFJhZG9uQm9vbGVhbiB2YWx1ZWApXG4gICAgICAgIH0gXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBbbmV3IFJhZG9uU2NyaXB0KGlubmVyU2NyaXB0KV0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBgaW5kZXhgIGFzIGEgYFJhZG9uQXJyYXlgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gaW5kZXggXG4gICAgICovXG4gICAgcHVibGljIGdldEFycmF5PFN1Ykl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55ID0gUmFkb25Bbnk+KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5PFN1Ykl0ZW1zVHlwZT4sIFtpbmRleF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBgaW5kZXhgIGFzIGEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Qm9vbGVhbihpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbaW5kZXhdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gYGluZGV4YCBhcyBhIGBSYWRvbkJ5dGVzYCBvYmplY3QuXG4gICAgICogQHBhcmFtIGluZGV4IFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCeXRlcyhpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25CeXRlcywgW2luZGV4XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmxvYXQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtpbmRleF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBgaW5kZXhgIGFzIGEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW50ZWdlcihpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbaW5kZXhdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gYGluZGV4YCBhcyBhIGBSYWRvbk1hcGAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TWFwKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbk1hcCwgW2luZGV4XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGBpbmRleGAgYXMgYSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gaW5kZXggXG4gICAgICovXG4gICAgcHVibGljIGdldFN0cmluZyhpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25TdHJpbmcsIFtpbmRleF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEpvaW4gYWxsIGl0ZW1zIG9mIHRoZSBhcnJheSBpbnRvIGEgdmFsdWUgb2YgdGhlIGdpdmVuIHR5cGUuIFRoZSBhcnJheSBtdXN0IGJlIGhvbW9nZW5lb3VzLCBcbiAgICAgKiBhbGwgaXRlbXMgYmVpbmcgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3V0cHV0VHlwZWAsIGlmIHNwZWNpZmllZCwgb3IgdGhlIEFycmF5J3MgaXRlbXNUeXBlIG90aGVyd2lzZS5cbiAgICAgKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciB0byBiZSB1c2VkIHdoZW4gam9pbmluZyBzdHJpbmdzLiBXaGVuIGpvaW5pbmcgUmFkb25NYXBzLCBpdCBjYW4gYmUgdXNlZCB0byBzZXR0bGUgYmFzZSBzY2hlbWEgb24gcmVzdWx0aW5nIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gb3V0cHV0VHlwZSBSYWRvbiB0eXBlIG9mIHRoZSBvdXRwdXQgdmFsdWUuIFxuICAgICAqL1xuICAgIHB1YmxpYyBqb2luPE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueSA9IFJhZG9uQW55PihzZXBhcmF0b3IgPSBcIlwiLCBvdXRwdXRUeXBlPzogeyBuZXcoKTogSXRlbXNUeXBlOyB9KSB7XG4gICAgICAgIGlmIChvdXRwdXRUeXBlKSB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxPdXRwdXRUeXBlPiwgW3NlcGFyYXRvcl0pXG4gICAgICAgIGVsc2UgdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8SXRlbXNUeXBlPiwgW3NlcGFyYXRvcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgaXRlbXMuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFwIGFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgd2l0aCB0aGUgZ2l2ZW4gYGlubmVyU2NyaXB0YC4gXG4gICAgICogQHBhcmFtIGlubmVyU2NyaXB0IE1hcHBpbmcgc2NyaXB0IHJldHVybmluZyBzb21lIGBSYWRvbkFueWAgb2JqZWN0LlxuICAgICAqIE11c3QgYWNjZXB0IGFzIGlucHV0IHRoZSBzYW1lIGRhdGEgdHlwZSBhcyB0aGUgb25lIG9mIHRoZSBpdGVtcyBiZWluZyBpdGVyYXRlZC4gXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1hcHBlZCB2YWx1ZXMuIFxuICAgICAqL1xuICAgIHB1YmxpYyBtYXAoaW5uZXJTY3JpcHQ6IFJhZG9uT3BlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkFycmF5LCBbaW5uZXJTY3JpcHRdKVxuICAgIH1cbiAgICAvLyBwdWJsaWMgbWFwPE91dHB1dEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55Pihpbm5lclNjcmlwdDogUmFkb25PcGVyYXRvcjxPdXRwdXRJdGVtc1R5cGU+KSB7XG4gICAgLy8gICAgIC8vIHRvZG86IGNoZWNrIHNjcmlwdCdzIGlucHV0IHR5cGUgbWF0Y2hlcyBhcnJheSdzIGl0ZW1zIHR5cGUsIGlmIGFueSA/P1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8T3V0cHV0SXRlbXNUeXBlPiwgW2lubmVyU2NyaXB0XSlcbiAgICAvLyB9XG4gICAgLyoqXG4gICAgICogUmVkdWNlIGFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgaW50byBhIHNpbmdsZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gcmVkdWN0b3IgVGhlIHJlZHVjdG9yIG1ldGhvZCB0byBiZSBhcHBsaWVkLiBBbGwgYXJyYXkgaXRlbXMgbXVzdCBiZSBcbiAgICAgKiBjb252ZXJ0YWJsZSBpbnRvIGZsb2F0IHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHJlZHVjZShyZWR1Y3RvcjogUmFkb25SZWR1Y2VyT3Bjb2Rlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtyZWR1Y3Rvcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9yZGVyIHRoZSBhcnJheSBpdGVtcyBiYXNlZCBlaXRoZXIgb24gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGdpdmVuIGBpbm5lclNjcmlwdGAgdG8gZXZlcnkgaXRlbSwgb3Igb24gdGhlIFxuICAgICAqIGFjdHVhbCBpdGVtIHZhbHVlcyAoYXMgbG9uZyBhcyB0aGVzZSBhcmUgZWl0aGVyIGludGVnZXJzIG9yIHN0cmluZ3MpLlxuICAgICAqIEZhaWxzIGlmIGFwcGxpZWQgb24gbm9uLWhvbWVnZW5vdXMgYXJyYXlzIChpLmUuIG5vdCBhbGwgaXRlbXMgc2hhcmluZyB0aGUgc2FtZSBgUmFkb25BbnlgKS4gXG4gICAgICogQHBhcmFtIGlubmVyU2NyaXB0IChPcHRpb25hbCkgU29ydGluZyBzY3JpcHQgcmV0dXJuaW5nIGVpdGhlciBhIGBSYWRvbkludGVnZXJgIG9yIGEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0LlxuICAgICAqL1xuICAgIC8vIFRPRE9cbiAgICAvLyBwdWJsaWMgc29ydChpbm5lclNjcmlwdD86IFJhZG9uT3BlcmF0b3I8UmFkb25TdHJpbmcgfCBSYWRvbkludGVnZXI+KSB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBbaW5uZXJTY3JpcHRdKVxuICAgIC8vIH1cbiAgICAvKipcbiAgICAgKiBUYWtlIGEgc2VsZWN0aW9uIG9mIGl0ZW1zIGZyb20gdGhlIGlucHV0IGFycmF5LlxuICAgICAqIEBwYXJhbSBpbmRleGVzIEluZGV4ZXMgb2YgdGhlIGlucHV0IGl0ZW1zIHRvIHRha2UgaW50byB0aGUgb3V0cHV0IGFycmF5LiBcbiAgICAgKiBAcmV0dXJuIEEgYFJhZG9uQXJyYXlgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGljayguLi5pbmRleGVzOiBudW1iZXJbXSkge1xuICAgICAgICBpZiAoQXJyYXkoaW5kZXhlcykubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFdmFsRXJyb3IoYFxceDFiWzE7MzNtUmFkb25BcnJheTo6cGljazogYSBub24tZW1wdHkgYXJyYXkgb2YgbnVtYmVycyBtdXN0IGJlIHByb3ZpZGVkXFx4MWJbMG1gKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBbLi4uaW5kZXhlc10pXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25Cb29sZWFuIGV4dGVuZHMgUmFkb25Bbnkge1xuICAgIC8qKlxuICAgICAqIFJldmVyc2UgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIG5lZ2F0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJvb2xlYW4sIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYXN0IHZhbHVlIGludG8gYSBzdHJpbmcuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0cmluZ2lmeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW10pXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25CeXRlcyBleHRlbmRzIFJhZG9uQW55IHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgRW5jb2RpbmdzID0gUmFkb25FbmNvZGluZ3M7XG4gICAgLyoqXG4gICAgICogQ29udmVydCBidWZmZXIgaW50byAoYmlnLWVuZGlhbikgaW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJ5dGVzYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzSW50ZWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHBseSB0aGUgU0hBMi0yNTYgaGFzaCBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJ5dGVzYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25CeXRlcywgW10pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHNsaWNlIGV4dHJhY3RlZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIuIFxuICAgICAqIEEgYHN0YXJ0SW5kZXhgIG9mIDAgcmVmZXJzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IGJ1ZmZlci4gSWYgbm8gYGVuZEluZGV4YCBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSBhc3N1bWVkIFxuICAgICAqIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlci4gTmVnYXRpdmUgdmFsdWVzIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyLlxuICAgICAqIEBwYXJhbSBzdGFydEluZGV4IFBvc2l0aW9uIHdpdGhpbiBpbnB1dCBidWZmZXIgd2hlcmUgdGhlIG91dHB1dCBidWZmZXIgd2lsbCBzdGFydC5cbiAgICAgKiBAcGFyYW0gZW5kSW5kZXggUG9zaXRpb24gd2l0aGluIGlucHV0IGJ1ZmZlciB3aGVyZSB0aGUgb3V0cHV0IGJ1ZmZlciB3aWxsIGVuZFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQnl0ZXNgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2xpY2Uoc3RhcnRJbmRleDogbnVtYmVyID0gMCwgZW5kSW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJ5dGVzLCBbc3RhcnRJbmRleCwgZW5kSW5kZXhdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRoZSBpbnB1dCBidWZmZXIgaW50byBhIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gZW5jb2RpbmcgRW51bSBpbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIGVuY29kaW5nIHNjaGVtYSBvbiB0aGUgb3V0cHV0IHN0cmluZywgc3RhbmRpbmc6XG4gICAgICogICAwIC0+IEhleCBzdHJpbmcgKGRlZmF1bHQsIGlmIG5vbmUgd2FzIHNwZWNpZmllZClcbiAgICAgKiAgIDEgLT4gQmFzZTY0IHN0cmluZ1xuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0cmluZ2lmeShlbmNvZGluZyA9IFJhZG9uRW5jb2RpbmdzLkhleFN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbZW5jb2RpbmddKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhZG9uRmxvYXQgZXh0ZW5kcyBSYWRvbkFueSB7XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgYWJzb2x1dGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnNvbHV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkZsb2F0LCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgbG93ZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBmbG9hdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC4gXG4gICAgICovXG4gICAgcHVibGljIGNlaWxpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW10pXG5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgZ3JlYXRlc3QgaW50ZWdlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGZsb2F0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBmbG9vcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGZsb2F0IHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gYGlucHV0YC4gXG4gICAgICogQHBhcmFtIGlucHV0XG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdyZWF0ZXJUaGFuKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJvb2xlYW4sIFtpbnB1dF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB0aGUgZmxvYXQgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBnaXZlbiBgaW5wdXRgLlxuICAgICAqIEBwYXJhbSBpbnB1dCBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkJvb2xlYW5gIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGVzc1RoYW4oaW5wdXQ6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQm9vbGVhbiwgW2lucHV0XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgZmxvYXQgcmVtYWluZGVyIG9mIGRpdmlkaW5nIHRoZSB2YWx1ZSBieSB0aGUgZ2l2ZW4gYGludGVnZXJgLlxuICAgICAqIEBwYXJhbSBpbnRlZ2VyIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW9kdWxvKGludGVnZXI6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtpbnRlZ2VyXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogTXVsdGlwbHkgdGhlIGZsb2F0IHZhbHVlIGJ5IHRoZSBnaXZlbiBgZmFjdG9yYC5cbiAgICAgKiBAcGFyYW0gZmFjdG9yIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC4gXG4gICAgICovXG4gICAgcHVibGljIG11bHRpcGx5KGZhY3RvcjogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW2ZhY3Rvcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSB0aGUgZmxvYXQgdmFsdWUuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uRmxvYXRgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmVnYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBmbG9hdCB2YWx1ZSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGdpdmVuIGBleHBvbmVudGBcbiAgICAgKiBAcGFyYW0gZXhwb25lbnRcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHBvd2VyKGV4cG9uZW50OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkZsb2F0LCBbZXhwb25lbnRdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSb3VuZCB0byB0aGUgY2xvc2VzdCBpbnRlZ2VyIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyByb3VuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHJpbmdpZnkgdGhlIGZsb2F0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0cmluZ2lmeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW10pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRha2UgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgZmxvYXQgdmFsdWUuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB0cnVuY2F0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtdKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhZG9uSW50ZWdlciBleHRlbmRzIFJhZG9uQW55IHtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzb2x1dGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoZSBpbnRlZ2VyIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gYGlucHV0YC4gXG4gICAgICogQHBhcmFtIGlucHV0XG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdyZWF0ZXJUaGFuKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkJvb2xlYW4sIFtpbnB1dF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB0aGUgaW50ZWdlciB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIGBpbnB1dGAuIFxuICAgICAqIEBwYXJhbSBpbnB1dFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZXNzVGhhbihpbnB1dDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbaW5wdXRdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSByZW1haW5kZXIgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIGJ5IHRoZSBnaXZlbiBgaW50ZWdlcmAuXG4gICAgICogQHBhcmFtIGludGVnZXIgXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBtb2R1bG8oaW50ZWdlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbaW50ZWdlcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHRoZSB2YWx1ZSBieSB0aGUgZ2l2ZW4gYGludGVnZXJgLlxuICAgICAqIEBwYXJhbSBpbnRlZ2VyIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LiBcbiAgICAgKi9cbiAgICBwdWJsaWMgbXVsdGlwbHkoaW50ZWdlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbaW50ZWdlcl0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSB0aGUgaW50ZWdlciB2YWx1ZS4gXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBuZWdhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSB0aGUgdmFsdWUgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiBnaXZlbiBgZXhwb25lbnRgXG4gICAgICogQHBhcmFtIGV4cG9uZW50XG4gICAgICogQHJldHVybnMgQSBgUmFkb25JbnRlZ2VyYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHBvd2VyKGV4cG9uZW50OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbkludGVnZXIsIFtleHBvbmVudF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0cmluZ2lmeSB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RyaW5naWZ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FzdCBpbnRvIGEgYmlnLWVuZGlhbiBieXRlcyBidWZmZXIuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25CeXRlc2Agb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB0b0J5dGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQnl0ZXMsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYXN0IGludG8gYSBmbG9hdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvRmxvYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW10pXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25NYXAgZXh0ZW5kcyBSYWRvbkFueSB7XG4gICAgLyoqXG4gICAgICogQWx0ZXIgdGhlIHZhbHVlIG9mIHRoZSBpdGVtKHMpIGlkZW50aWZpZWQgYnkgYGtleXNgLCBhcHBseWluZyB0aGUgZ2l2ZW4gYGlubmVyU2NyaXB0YCB0byBlYWNoIG9uZSBvZiB0aGVtLlxuICAgICAqIEBwYXJhbSBrZXkgXG4gICAgICogQHBhcmFtIGlubmVyU2NyaXB0IFxuICAgICAqIEByZXR1cm5zIFRoZSBzYW1lIFJhZG9uTWFwIHVwb24gd2hpY2ggdGhpcyBvcGVyYXRvciBpcyBleGVjdXRlZCwgd2l0aCB0aGUgc3BlY2lmaWVkIGl0ZW0ocykgYWx0ZXJlZFxuICAgICAqIGJ5IHRoZSBnaXZlbiBgaW5uZXJTY3JpcHRgLlxuICAgICAqL1xuICAgIC8vIFRPRE9cbiAgICAvLyBwdWJsaWMgYWx0ZXI8QWx0ZXJlZE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueT4oaW5uZXJTY3JpcHQ6IFJhZG9uT3BlcmF0b3I8QWx0ZXJlZE91dHB1dFR5cGU+LCAuLi5rZXlzOiBzdHJpbmdbXSkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uTWFwLCBbaW5uZXJTY3JpcHQsIC4uLmtleXNdKVxuICAgIC8vIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCB0aGUgYXJyYXkgd2l0aGluIHRoZSBzcGVjaWZpZWQgYGtleWAgZmllbGQuXG4gICAgICogQHBhcmFtIGtleSBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkFycmF5YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldEFycmF5PEl0ZW1zVHlwZSBleHRlbmRzIFJhZG9uQW55ID0gUmFkb25Bbnk+KGtleTogc3RyaW5nLCBfaXRlbXNUeXBlPzogeyBuZXcoKTogSXRlbXNUeXBlOyB9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25BcnJheTxJdGVtc1R5cGU+LCBba2V5XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIGJvb2xlYW4gd2l0aGluIHRoZSBzcGVjaWZpZWQgYGtleWAgZmllbGQuIFxuICAgICAqIEBwYXJhbSBrZXkgXG4gICAgICogQHJldHVybnMgQSBgUmFkb25Cb29sZWFuYCBvYmplY3QuIFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCb29sZWFuKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBba2V5XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIGZsb2F0IHZhbHVlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBrZXlgIGZpZWxkLlxuICAgICAqIEBwYXJhbSBrZXkgXG4gICAgICogQHJldHVybnMgQSBgUmFkb25GbG9hdGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGbG9hdChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uRmxvYXQsIFtrZXldKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCB0aGUgaW50ZWdlciB2YWx1ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCBga2V5YCBmaWVsZC4gXG4gICAgICogQHBhcmFtIGtleSBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkludGVnZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW50ZWdlcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uSW50ZWdlciwgW2tleV0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoIHRoZSBtYXAgb2JqZWN0IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBrZXlgIGZpZWxkLiBcbiAgICAgKiBAcGFyYW0ga2V5IFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uTWFwYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldE1hcChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uTWFwLCBba2V5XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmV0Y2ggdGhlIHN0cmluZyB3aXRoaW4gdGhlIHNwZWNpZmllZCBga2V5YCBmaWVsZC5cbiAgICAgKiBAcGFyYW0ga2V5IFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGdldFN0cmluZyhrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBba2V5XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXh0cmFjdCBrZXkgbmFtZXMgb2YgdGhlIG1hcCBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBrZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8UmFkb25TdHJpbmc+LCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGFrZSBhIHNlbGVjdGlvbiBvZiBpdGVtcyBmcm9tIHRoZSBpbnB1dCBtYXAuIEZhaWxzIGlmIHVuZXhpc3RlbnQgaXRlbXMgYXJlIHJlZmVycmVkLlxuICAgICAqIEBwYXJhbSBrZXlzIEtleSBzdHJpbmcgb2YgdGhlIGlucHV0IGl0ZW1zIHRvIHRha2UgaW50byB0aGUgb3V0cHV0IG1hcC4gXG4gICAgICogQHJldHVybiBBIGBSYWRvbk1hcGAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBwaWNrKC4uLmtleXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmIChBcnJheShrZXlzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV2YWxFcnJvcihgXFx4MWJbMTszM21SYWRvbk1hcDo6cGljazogYSBub24tZW1wdHkgYXJyYXkgb2Yga2V5IHN0cmluZ3MgbXVzdCBiZSBwcm92aWRlZFxceDFiWzBtYClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uTWFwLCBbLi4ua2V5c10pXG5cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXh0cmFjdCB0aGUgbWFwIHZhbHVlcyBpbnRvIGFuIGFycmF5LlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQXJyYXlgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXksIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHJpbmdpZnkgaW5wdXQgYFJhZG9uTWFwYCBvYmplY3QgaW50byBhIEpTT04gc3RyaW5nLlxuICAgICAqIEByZXR1cm4gQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RyaW5naWZ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRvblN0cmluZyBleHRlbmRzIFJhZG9uQW55IHtcbiAgICAvKipcbiAgICAgKiBDYXN0IGludG8gYSBib29sZWFuIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQm9vbGVhbmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhc0Jvb2xlYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25Cb29sZWFuLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0aGUgaW5wdXQgc3RyaW5nIGludG8gYSBieXRlcyBidWZmZXIuXG4gICAgICogQHBhcmFtIGVuY29kaW5nIEVudW0gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBlbmNvZGluZyBzY2hlbWEgb24gdGhlIGlucHV0IHN0cmluZywgc3RhbmRpbmc6XG4gICAgICogICAwIC0+IEhleCBzdHJpbmcgKGRlZmF1bHQsIGlmIG5vbmUgd2FzIHNwZWNpZmllZClcbiAgICAgKiAgIDEgLT4gQmFzZTY0IHN0cmluZ1xuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uQnl0ZXNgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXNCeXRlcyhlbmNvZGluZyA9IFJhZG9uRW5jb2RpbmdzLkhleFN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQnl0ZXMsIFtlbmNvZGluZ10pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhc3QgaW50byBhIGZsb2F0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkZsb2F0YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFzRmxvYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25GbG9hdCwgW10pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hhcnMuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uSW50ZWdlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25JbnRlZ2VyLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVwbGFjZSB0aGUgc3RyaW5nIGJ5IGEgdmFsdWUgb2YgdHlwZSBgb3V0cHV0VHlwZWAsIGRldGVybWluZWQgb24gd2hldGhlciB0aGUgc3RyaW5nIHZhbHVlIG1hdGNoZXMgXG4gICAgICogYW55IG9mIHRoZSBrZXlzIHdpdGhpbiB0aGUgcHJvdmlkZWQgYG1hdGNoaW5nTWFwYCwgb3Igc2V0IHRvIGEgYGRlZmF1bHRWYWx1ZWAgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG4gICAgICogQHBhcmFtIG91dHB1dFR5cGUgUmFkb24gdHlwZSBvZiB0aGUgb3V0cHV0IHZhbHVlLiBcbiAgICAgKiBAcGFyYW0gbWF0Y2hpbmdNYXAgTWFwIGRldGVybWluaW5nIHRoZSBvdXRwdXQgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBzdHJpbmcgdmFsdWUuXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBWYWx1ZSByZXR1cm5lZCBpZiBubyBtYXRjaCBpcyBmb3VuZC4gXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHVibGljIG1hdGNoPE91dHB1dFR5cGUgZXh0ZW5kcyBSYWRvbkFueSA9IFJhZG9uU3RyaW5nPihcbiAgICAgICAgb3V0cHV0VHlwZTogeyBuZXcocHJldj86IFJhZG9uT3BlcmF0b3IpOiBPdXRwdXRUeXBlOyB9LCBcbiAgICAgICAgbWF0Y2hpbmdNYXA6IE1hcDxzdHJpbmcsIGFueT4sIFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGFueVxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKG91dHB1dFR5cGUsIFttYXRjaGluZ01hcCwgZGVmYXVsdFZhbHVlXSlcbiAgICAgICAgLy8gdGhpcy5fYnl0ZWNvZGUgPSBbIFxuICAgICAgICAvLyAgICAgMHg3NSwgIFxuICAgICAgICAvLyAgICAgbWF0Y2hpbmdNYXAsXG4gICAgICAgIC8vICAgICBkZWZhdWx0VmFsdWVcbiAgICAgICAgLy8gXVxuICAgICAgICAvLyB0aGlzLl9tZXRob2QgPSBcIm1hdGNoXCJcbiAgICAgICAgLy8gdGhpcy5fcGFyYW1zID0gYHsgJHtPYmplY3QuZW50cmllcyhtYXRjaGluZ01hcCkubWFwKChlbnRyeTogW3N0cmluZywgYW55XSkgPT4gYFxcXCIke2VudHJ5WzBdfVxcXCI6ICR7ZW50cnlbMV19LCBgKX19LCAke2RlZmF1bHRWYWx1ZX1gXG4gICAgICAgIC8vIGxldCBrZXlzOiBzdHJpbmcgPSBcIlwiXG4gICAgICAgIC8vIE9iamVjdC5rZXlzKG1hdGNoaW5nTWFwKS5tYXAoKGtleTogc3RyaW5nKSA9PiBrZXlzICs9IGtleSArIFwiO1wiKVxuICAgICAgICAvLyByZXR1cm4gbmV3IG91dHB1dFR5cGUodGhpcywga2V5cylcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgaW5wdXQgc3RyaW5nIGFzIGFuIGFycmF5IG9mIEpTT04gaXRlbXMuIFxuICAgICAqIEBwYXJhbSBqc29uUGF0aHMgKG9wdGlvbmFsKSBBcnJheSBvZiBKU09OIHBhdGhzIHdpdGhpbiBpbnB1dCBgUmFkb25TdHJpbmdgIGZyb20gd2hlcmUgdG8gZmV0Y2ggaXRlbXMgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQgYFJhZG9uQXJyYXlgLiBcbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvbkFycmF5YCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHBhcnNlSlNPTkFycmF5KC4uLmpzb25QYXRoczogc3RyaW5nW10pOiBSYWRvbkFycmF5PFJhZG9uQW55PiB7IFxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8UmFkb25Bbnk+LCBbLi4uanNvblBhdGhzXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2Ugc3RyaW5nIGFzIGEgSlNPTi1lbmNvZGVkIG1hcC4gXG4gICAgICogQHBhcmFtIGpzb25QYXRoIChvcHRpb25hbCkgSlNPTiBwYXRoIHdpdGhpbiBpbnB1dCBgUmFkb25TdHJpbmdgIGZyb20gd2hlcmUgdG8gZXh0cmFjdCB0aGUgb3V0cHV0IGBSYWRvbk1hcGAuIFxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uTWFwYCBvYmplY3QuIFxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJzZUpTT05NYXAoanNvblBhdGg/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvbk1hcCwgW2pzb25QYXRoXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2Ugc3RyaW5nIGFzIGFuIFhNTC1lbmNvZGVkIG1hcC4gXG4gICAgICogQHJldHVybnMgQSBgUmFkb25NYXBgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFyc2VYTUxNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoT3BlcmF0b3IoUmFkb25NYXAsIFtdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlIHdpdGggZ2l2ZW4gYHJlcGxhY2VtZW50YCBzdHJpbmcsIGFsbCBwYXJ0cyBvZiB0aGUgaW5wdXQgc3RyaW5nIHRoYXQgbWF0Y2ggd2l0aCBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24uIFxuICAgICAqIEBwYXJhbSByZWdleCBSZWd1bGFyIGV4cHJlc3Npb24gdG8gYmUgbWF0Y2hlZC5cbiAgICAgKiBAcGFyYW0gcmVwbGFjZW1lbnQgVGV4dCB0aGF0IHdpbGwgcmVwbGFjZSBhbGwgb2NjdXJlbmNlcy4gXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwbGFjZShyZWdleDogc3RyaW5nID0gXCJcIiwgcmVwbGFjZW1lbnQ6IHN0cmluZyA9IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW3JlZ2V4LCByZXBsYWNlbWVudF0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzbGljZSBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiBcbiAgICAgKiBBIGBzdGFydEluZGV4YCBvZiAwIHJlZmVycyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBzdHJpbmcuIElmIG5vIGBlbmRJbmRleGAgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgYXNzdW1lZCBcbiAgICAgKiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcuIE5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmluZy5cbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBQb3NpdGlvbiB3aXRoaW4gaW5wdXQgc3RyaW5nIHdoZXJlIHRoZSBvdXRwdXQgc3RyaW5nIHdpbGwgc3RhcnQuXG4gICAgICogQHBhcmFtIGVuZEluZGV4IFBvc2l0aW9uIHdpdGhpbiBpbnB1dCBzdHJpbmcgd2hlcmUgdGhlIG91dHB1dCBzdHJpbmcgd2lsbCBlbmQuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25TdHJpbmdgIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2xpY2Uoc3RhcnRJbmRleDogbnVtYmVyID0gMCwgZW5kSW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW3N0YXJ0SW5kZXgsIGVuZEluZGV4XSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGl2aWRlcyBpbnB1dCBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdWJzdHJpbmdzLCBcbiAgICAgKiBAcGFyYW0gcmVnZXggVGhlIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlIGZvciBzcGxpdHRpbmcuXG4gICAgICogQHJldHVybnMgQSBgUmFkb25BcnJheWAgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzcGxpdChyZWdleDogc3RyaW5nID0gXCJcXHJcIikge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uQXJyYXk8UmFkb25TdHJpbmc+LCBbcmVnZXhdKVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb3dlciBjYXNlIGFsbCBjaGFyYWN0ZXJzLlxuICAgICAqIEByZXR1cm5zIEEgYFJhZG9uU3RyaW5nYCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvTG93ZXJjYXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaE9wZXJhdG9yKFJhZG9uU3RyaW5nLCBbXSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBwZXIgY2FzZSBhbGwgY2hhcmFjdGVycy5cbiAgICAgKiBAcmV0dXJucyBBIGBSYWRvblN0cmluZ2Agb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB0b1VwcGVyQ2FzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2hPcGVyYXRvcihSYWRvblN0cmluZywgW10pXG4gICAgfVxufVxuIl19
|
|
@@ -150,4 +150,4 @@ function parseScriptOperator(script, opcode, args) {
|
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JhZG9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRCQSw0Q0FhQztBQUdELGdEQThCQztBQUVELDhDQWdCQztBQVdELDhDQXFDQztBQTVJRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7QUFDMUIsK0JBQTJDO0FBRTNDLCtDQUE4RDtBQUU5RCxtQ0FBaUY7QUFFakYsbUNBVWdCO0FBRWhCLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBSSw4QkFBOEIsQ0FBQTtBQUVyRyw2Q0FBcUQ7QUFBNUMsNEdBQUEsaUJBQWlCLE9BQUE7QUFFMUI7Ozs7R0FJRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFFBQWE7SUFDNUMsSUFBSSxNQUFNLENBQUE7SUFDVixJQUFJLElBQUEscUJBQVcsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sR0FBRyxJQUFBLHVCQUFhLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEMsQ0FBQztTQUFNLElBQUksUUFBUSxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7U0FBTSxJQUFJLFFBQVEsWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEdBQUcsUUFBUSxDQUFBO0lBQ25CLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLFNBQVMsQ0FBQyw0Q0FBNEMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBQSxhQUFVLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFDaEMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDM0IsQ0FBQztBQUdELFNBQWdCLGtCQUFrQixDQUNo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QUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssUUFBUSxDQUFDO1lBQUMsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssT0FBTztnQkFDbEQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNyQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekQsZ0JBQWdCO1lBQ2hCLDhFQUE4RTtZQUU5RTtnQkFDRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCdkb3RlbnYnKS5jb25maWcoKVxyXG5pbXBvcnQgeyBkZWNvZGUgYXMgY2JvckRlY29kZSB9IGZyb20gJ2Nib3InXHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCBpc0hleFN0cmluZyB9IGZyb20gXCIuLi8uLi9iaW4vaGVscGVyc1wiXHJcblxyXG5pbXBvcnQgeyBSYWRvblJlcXVlc3QsIFJhZG9uTW9kYWwsIFJhZG9uVGVtcGxhdGUsIFJhZG9uUmV0cmlldmFsIH0gZnJvbSBcIi4vaW5kZXhcIlxyXG5cclxuaW1wb3J0IHtcclxuICBSYWRvbkFueSxcclxuICBSYWRvbkFycmF5LFxyXG4gIFJhZG9uQm9vbGVhbixcclxuICBSYWRvbkJ5dGVzLFxyXG4gIFJhZG9uRmxvYXQsXHJcbiAgUmFkb25JbnRlZ2VyLFxyXG4gIFJhZG9uTWFwLFxyXG4gIFJhZG9uU3RyaW5nLFxyXG4gIFJhZG9uT3BlcmF0b3JzLFxyXG59IGZyb20gXCIuL3R5cGVzXCJcclxuXHJcbmNvbnN0IFdJVE5FVF9BU1NFVFNfUEFUSCA9IHByb2Nlc3MuZW52LldJVE5FVF9TREtfUkFET05fQVNTRVRTX1BBVEggfHwgXCIuLi8uLi8uLi8uLi8uLi93aXRuZXQvYXNzZXRzXCJcclxuXHJcbmV4cG9ydCB7IGV4ZWNSYWRvbkJ5dGVjb2RlIH0gZnJvbSBcIi4uLy4uL2Jpbi9oZWxwZXJzXCJcclxuXHJcbi8qKlxyXG4gKiBEZWNvZGVzIGEgUmFkb24gc2NyaXB0IG91dCBmcm9tIGEgUHJvdG9idWYtc2VyaWFsaXplZCBieXRlY29kZS5cclxuICogQHBhcmFtIGhleFN0cmluZyBSYWRvbiBzY3JpcHQgYnl0ZWNvZGUuXHJcbiAqIEByZXR1cm5zIFJhZG9uIHNjcmlwdCBvYmplY3QgKGkuZS4gY2hhaW4gb2YgUmFkb24gb3BlcmF0b3JzIHdpdGggYSBkZXRlcm1pbmlzdGljIG91dHB1dCBSYWRvbiB0eXBlKS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJhZG9uU2NyaXB0KGJ5dGVjb2RlOiBhbnkpOiBSYWRvbkFueSB7XHJcbiAgbGV0IGJ1ZmZlclxyXG4gIGlmIChpc0hleFN0cmluZyhieXRlY29kZSkpIHtcclxuICAgIGJ1ZmZlciA9IGZyb21IZXhTdHJpbmcoYnl0ZWNvZGUpXHJcbiAgfSBlbHNlIGlmIChieXRlY29kZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcclxuICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJ5dGVjb2RlKVxyXG4gIH0gZWxzZSBpZiAoYnl0ZWNvZGUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcclxuICAgIGJ1ZmZlciA9IGJ5dGVjb2RlXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIFJhZG9uU2NyaXB0IGJ5dGVjb2RlIGZvcm1hdDogJHtieXRlY29kZX1gKVxyXG4gIH1cclxuICBjb25zdCBhcnJheSA9IGNib3JEZWNvZGUoYnVmZmVyKVxyXG4gIHJldHVybiBwYXJzZVNjcmlwdChhcnJheSlcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuUmFkb25Bc3NldHM8VCBleHRlbmRzIFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUgfCBSYWRvbk1vZGFsIHwgUmFkb25SZXRyaWV2YWw+KFxyXG4gIHRyZWU6IGFueSxcclxuICB0eXBlPzogeyBuZXcoc3BlY3M6IGFueSk6IFQ7IH0sXHJcbiAgaGVhZGVycz86IHN0cmluZ1tdXHJcbik6IEFycmF5PHsga2V5OiBzdHJpbmcsIGFydGlmYWN0OiBhbnkgfT4ge1xyXG4gIGlmICghaGVhZGVycykgaGVhZGVycyA9IFtdXHJcbiAgY29uc3QgZW50cmllczogQXJyYXk8eyBrZXk6IHN0cmluZywgYXJ0aWZhY3Q6IGFueSB9PiA9IFtdXHJcbiAgZm9yIChjb25zdCBrZXkgaW4gdHJlZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICAodHlwZSAmJiB0cmVlW2tleV0gaW5zdGFuY2VvZiB0eXBlKVxyXG4gICAgICB8fCAoIXR5cGUgJiYgKFxyXG4gICAgICAgICAgdHJlZVtrZXldIGluc3RhbmNlb2YgUmFkb25SZXF1ZXN0XHJcbiAgICAgICAgICB8fCB0cmVlW2tleV0gaW5zdGFuY2VvZiBSYWRvblRlbXBsYXRlXHJcbiAgICAgICAgICB8fCB0cmVlW2tleV0gaW5zdGFuY2VvZiBSYWRvbk1vZGFsXHJcbiAgICAgICAgICB8fCB0cmVlW2tleV0gaW5zdGFuY2VvZiBSYWRvblJldHJpZXZhbFxyXG4gICAgICApKVxyXG4gICAgKSB7XHJcbiAgICAgIGVudHJpZXMucHVzaCh7XHJcbiAgICAgICAga2V5LFxyXG4gICAgICAgIGFydGlmYWN0OiB0cmVlW2tleV0sXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0cmVlW2tleV0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgZW50cmllcy5wdXNoKC4uLmZsYXR0ZW5SYWRvbkFzc2V0cyhcclxuICAgICAgICB0cmVlW2tleV0sXHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBbLi4uaGVhZGVycywga2V5XVxyXG4gICAgICApKVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gZW50cmllc1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVSYWRvbkFzc2V0PFQgZXh0ZW5kcyBSYWRvblJlcXVlc3QgfCBSYWRvblRlbXBsYXRlIHwgUmFkb25Nb2RhbCB8IFJhZG9uUmV0cmlldmFsPihzcGVjczoge1xyXG4gIGFydGlmYWN0OiBzdHJpbmcsXHJcbiAgYXNzZXRzPzogYW55LFxyXG4gIHR5cGU/OiB7IG5ldyAoc3BlY3M6IGFueSk6IFQ7IH0sXHJcbn0pOiBUIHtcclxuICBjb25zdCBzdHVmZiA9IChcclxuICAgIHNwZWNzPy5hc3NldHMgXHJcbiAgICAgID8gZmxhdHRlblJhZG9uQXNzZXRzKHNwZWNzLmFzc2V0cywgc3BlY3M/LnR5cGUpIFxyXG4gICAgICA6IGxvYWRNb2R1bGVBc3NldHMoeyBmbGF0dGVuZWQ6IHRydWUsIHR5cGU6IHNwZWNzPy50eXBlIH0pXHJcbiAgKTtcclxuICBjb25zdCBmb3VuZCA9IHN0dWZmLmZpbmQoKGVudHJ5OiB7IGtleTogc3RyaW5nLCBhcnRpZmFjdDogYW55IH0pID0+IGVudHJ5LmtleSA9PT0gc3BlY3MuYXJ0aWZhY3QpXHJcbiAgaWYgKGZvdW5kKSB7XHJcbiAgICByZXR1cm4gZm91bmRbMF0uYXJ0aWZhY3RcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgRXJyb3IoYFJhZG9uIGFzc2V0IFwiJHtzcGVjcy5hcnRpZmFjdH1cIiBub3QgYXZhaWxhYmxlLmApXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU2VhcmNoIFdpdG5ldCBSYWRvbiBhc3NldHMgZGVjbGFyZWQgb3IgaW1wb3J0ZWQgd2l0aGluIGN1cnJlbnQgcmVwb3NpdG9yeSwgXHJcbiAqIHdob3NlIG5hbWVzIGNvbXBsaWVzIHdpdGggdGhlIHByb3ZpZGVkIGBwYXR0ZXJuYCBhbmQgYGZpbHRlckZuYC4gXHJcbiAqIElmIG5vIGBmaWx0ZXJGbmAgaXMgc3BlY2lmaWVkLCBzZWFyY2ggd2lsbCBpbmNsdWRlIGFzc2V0cyB3aG9zZSBuYW1lcyBcclxuICogYXJlIHN1ZmZpeGVkIGJ5IGdpdmVuIGBwYXR0ZXJuYCAoY2FzZSBpbnNlbnNpdGl2ZSkuXHJcbiAqIEBwYXJhbSBvcHRpb25zIFNlYXJjaCBvcHRpb25zXHJcbiAqIEBwYXJhbSBmaWx0ZXJGbiBGaWx0ZXJpbmcgZnVuY3Rpb24uXHJcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIFJhZG9uIGFzc2V0cyBvZiB0aGUgc3BlY2lmaWVkIGtpbmQgY29tcGx5aW5nIHdpdGggdGhlIHNlYXJjaCBwYXR0ZXJuLiBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hSYWRvbkFzc2V0czxUIGV4dGVuZHMgUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSB8IFJhZG9uTW9kYWwgfCBSYWRvblJldHJpZXZhbD4oXHJcbiAgb3B0aW9uczoge1xyXG4gICAgLyoqXHJcbiAgICAgKiBPYmplY3QgY29udGFpbmluZyBzdHJ1Y3R1cmVkIGhlcmlhcmNoeSBvZiBSYWRvbiBhc3NldHMuIElmIG5vdCBwcm92aWRlZCwgUmFkb24gYXNzZXRzIGRlY2xhcmVkIHdpdGhpbiBwcm9qZWN0J3MgZW52aXJvbm1lbnQuXHJcbiAgICAgKi9cclxuICAgIGFzc2V0cz86IGFueSxcclxuICAgIC8qKlxyXG4gICAgICogTGltaXRzIG51bWJlciBvZiByZXR1cm5lZCBSYWRvbiBhc3NldHMuXHJcbiAgICAgKi9cclxuICAgIGxpbWl0PzogbnVtYmVyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBPZmZzZXRzIHJldHVybmVkIGFycmF5IG9mIFJhZG9uIGFzc2V0cy5cclxuICAgICAqL1xyXG4gICAgb2Zmc2V0PzogbnVtYmVyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBOYW1lIHBhdHRlcm4gc2VhcmNoZWQgZm9yLlxyXG4gICAgICovXHJcbiAgICBwYXR0ZXJuOiBzdHJpbmcsXHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZmljIHR5cGUgb2YgUmFkb24gYXNzZXQgdG8gc2VhcmNoIGZvcjogYFJhZG9uUmVxdWVzdGAsIGBSYWRvblJlcXVlc3RgLCBgUmFkb25SZXRyaWV2YWxgIG9yIGBSYWRvbkNDRFJgLlxyXG4gICAgICovXHJcbiAgICB0eXBlPzogeyBuZXcgKHNwZWNzOiBhbnkpOiBUOyB9LFxyXG4gIH0sXHJcbiAgZmlsdGVyRm4/OiAoa2V5OiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykgPT4gYm9vbGVhbixcclxuKTogQXJyYXk8W2tleTogc3RyaW5nLCBhcnRpZmFjdDogVF0+IHtcclxuICBjb25zdCBkZWZhdWx0RmlsdGVyID0gKGtleTogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpID0+IGtleS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHBhdHRlcm4udG9Mb3dlckNhc2UoKSlcclxuICBjb25zdCBzdHVmZiA9IChcclxuICAgIG9wdGlvbnM/LmFzc2V0c1xyXG4gICAgICA/IGZsYXR0ZW5SYWRvbkFzc2V0cyhvcHRpb25zLmFzc2V0cywgb3B0aW9ucz8udHlwZSlcclxuICAgICAgOiBsb2FkTW9kdWxlQXNzZXRzKHsgZmxhdHRlbmVkOiB0cnVlLCB0eXBlOiBvcHRpb25zPy50eXBlIH0pXHJcbiAgKTtcclxuICByZXR1cm4gKFxyXG4gICAgc3R1ZmZcclxuICAgICAgLmZpbHRlcigoZW50cnk6IHsga2V5OiBzdHJpbmcsIGFydGlmYWN0OiBhbnkgfSkgPT4gKGZpbHRlckZuIHx8IGRlZmF1bHRGaWx0ZXIpKGVudHJ5LmtleSwgb3B0aW9ucy5wYXR0ZXJuIHx8IFwiXCIpKVxyXG4gICAgICAuc2xpY2Uob3B0aW9ucz8ub2Zmc2V0IHx8IDAsIG9wdGlvbnM/LmxpbWl0KVxyXG4gICAgICAubWFwKChlbnRyeTogeyBrZXk6IHN0cmluZywgYXJ0aWZhY3Q6IGFueSB8IFQgfSkgPT4gW2VudHJ5LmtleSwgZW50cnkuYXJ0aWZhY3RdKVxyXG4gICk7XHJcbn1cclxuXHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAtLS0gSU5URVJOQUwgTUVUSE9EUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuZnVuY3Rpb24gbG9hZE1vZHVsZUFzc2V0czxUIGV4dGVuZHMgUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSB8IFJhZG9uTW9kYWwgfCBSYWRvblJldHJpZXZhbD4oXHJcbiAgb3B0aW9uczoge1xyXG4gICAgLy8gbGVnYWN5PzogYm9vbGVhbixcclxuICAgIGZsYXR0ZW5lZD86IGJvb2xlYW4sXHJcbiAgICB0eXBlPzogeyBuZXcoc3BlY3M6IGFueSk6IFQ7IH0sXHJcbiAgfSxcclxuKTogYW55IHtcclxuICAvLyBjb25zdCBzdHVmZiA9IG9wdGlvbnM/LmxlZ2FjeSA/IHJlcXVpcmUoYCR7V0lUTkVUX0FTU0VUU19QQVRIfWApLmxlZ2FjeSA6IHtcclxuICAvLyAgIHJlcXVlc3RzOiByZXF1aXJlKGAke1dJVE5FVF9BU1NFVFNfUEFUSH0vcmVxdWVzdHNgKSxcclxuICAvLyAgIHRlbXBsYXRlczogcmVxdWlyZShgJHtXSVRORVRfQVNTRVRTX1BBVEh9L3RlbXBsYXRlc2ApLFxyXG4gIC8vICAgcmV0cmlldmFsczogcmVxdWlyZShgJHtXSVRORVRfQVNTRVRTX1BBVEh9L3JldHJpZXZhbHNgKSxcclxuICAvLyB9O1xyXG4gIGNvbnN0IHN0dWZmID0gcmVxdWlyZShgJHtXSVRORVRfQVNTRVRTX1BBVEh9YClcclxuICByZXR1cm4gb3B0aW9ucz8uZmxhdHRlbmVkID8gZmxhdHRlblJhZG9uQXNzZXRzKHN0dWZmLCBvcHRpb25zPy50eXBlKSA6IHN0dWZmXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlU2NyaXB0KGFycmF5OiBhbnksIHNjcmlwdD86IGFueSk6IGFueSB7XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XHJcbiAgICBhcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xyXG4gICAgICAgIHNjcmlwdCA9IHBhcnNlU2NyaXB0T3BlcmF0b3Ioc2NyaXB0LCBpdGVtWzBdLCAuLi5pdGVtLnNsaWNlKDEpKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNjcmlwdCA9IHBhcnNlU2NyaXB0T3BlcmF0b3Ioc2NyaXB0LCBpdGVtKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHNjcmlwdFxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gcGFyc2VTY3JpcHRPcGVyYXRvcihzY3JpcHQsIGFycmF5KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VTY3JpcHRPcGVyYXRvcihzY3JpcHQ6IGFueSwgb3Bjb2RlOiBhbnksIGFyZ3M/OiBhbnkpOiBhbnkge1xyXG4gIGlmICghc2NyaXB0KSB7XHJcbiAgICBjb25zdCBmb3VuZCA9IE9iamVjdC5lbnRyaWVzKHtcclxuICAgICAgXCIxMFwiOiBSYWRvbkFycmF5LFxyXG4gICAgICBcIjIwXCI6IFJhZG9uQm9vbGVhbixcclxuICAgICAgXCIzMFwiOiBSYWRvbkJ5dGVzLFxyXG4gICAgICBcIjQwXCI6IFJhZG9uSW50ZWdlcixcclxuICAgICAgXCI1MFwiOiBSYWRvbkZsb2F0LFxyXG4gICAgICBcIjYwXCI6IFJhZG9uTWFwLFxyXG4gICAgICBcIjcwXCI6IFJhZG9uU3RyaW5nLFxyXG4gICAgfSkuZmluZChlbnRyeSA9PiBlbnRyeVswXSA9PT0gKHBhcnNlSW50KG9wY29kZSkgJiAweGYwKS50b1N0cmluZygxNikpXHJcbiAgICBpZiAoZm91bmQpIHtcclxuICAgICAgc2NyaXB0ID0gbmV3IGZvdW5kWzFdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYHVua25vd24gUmFkb24gb3BlcmF0b3I6ICR7b3Bjb2RlfWApXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcGNvZGUpIHtcclxuICAgIGxldCBvcGVyYXRvciA9IFJhZG9uT3BlcmF0b3JzW29wY29kZV0uc3BsaXQoLyg/PVtBLVpdKS8pLnNsaWNlKDEpLmpvaW4oXCJcIilcclxuICAgIG9wZXJhdG9yID0gb3BlcmF0b3IuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBvcGVyYXRvci5zbGljZSgxKVxyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlIFwiZmlsdGVyXCI6IGNhc2UgXCJtYXBcIjogY2FzZSBcInNvcnRcIjogY2FzZSBcImFsdGVyXCI6XHJcbiAgICAgICAgY29uc3QgaW5uZXJTY3JpcHQgPSBwYXJzZVNjcmlwdChhcmdzKVxyXG4gICAgICAgIHJldHVybiBzY3JpcHRbb3BlcmF0b3JdKGlubmVyU2NyaXB0LCAuLi5hcmdzLnNsaWNlKDEpKTtcclxuXHJcbiAgICAgIC8vIGNhc2UgXCJhbHRlclwiOlxyXG4gICAgICAvLyAgIHJldHVybiBzY3JpcHRbb3BlcmF0b3JdKGFyZ3NbMF0sIHBhcnNlU2NyaXB0KGFyZ3NbMV0sIC4uLmFyZ3Muc2xpY2UoMikpKTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHNjcmlwdFtvcGVyYXRvcl0oYXJncylcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JhZG9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRCQSw0Q0FhQztBQUdELGdEQThCQztBQUVELDhDQWdCQztBQVdELDhDQXFDQztBQTVJRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7QUFDMUIsK0JBQTJDO0FBRTNDLCtDQUE4RDtBQUU5RCxtQ0FBaUY7QUFFakYsbUNBVWdCO0FBRWhCLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBSSw4QkFBOEIsQ0FBQTtBQUVyRyw2Q0FBcUQ7QUFBNUMsNEdBQUEsaUJBQWlCLE9BQUE7QUFFMUI7Ozs7R0FJRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFFBQWE7SUFDNUMsSUFBSSxNQUFNLENBQUE7SUFDVixJQUFJLElBQUEscUJBQVcsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sR0FBRyxJQUFBLHVCQUFhLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEMsQ0FBQztTQUFNLElBQUksUUFBUSxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7U0FBTSxJQUFJLFFBQVEsWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEdBQUcsUUFBUSxDQUFBO0lBQ25CLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLFNBQVMsQ0FBQyw0Q0FBNEMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBQSxhQUFVLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFDaEMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDM0IsQ0FBQztBQUdELFNBQWdCLGtCQUFrQixDQUNo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QUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssUUFBUSxDQUFDO1lBQUMsS0FBSyxLQUFLLENBQUM7WUFBQyxLQUFLLE1BQU0sQ0FBQztZQUFDLEtBQUssT0FBTztnQkFDbEQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNyQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekQsZ0JBQWdCO1lBQ2hCLDhFQUE4RTtZQUU5RTtnQkFDRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCdkb3RlbnYnKS5jb25maWcoKVxuaW1wb3J0IHsgZGVjb2RlIGFzIGNib3JEZWNvZGUgfSBmcm9tICdjYm9yJ1xuXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCBpc0hleFN0cmluZyB9IGZyb20gXCIuLi8uLi9iaW4vaGVscGVyc1wiXG5cbmltcG9ydCB7IFJhZG9uUmVxdWVzdCwgUmFkb25Nb2RhbCwgUmFkb25UZW1wbGF0ZSwgUmFkb25SZXRyaWV2YWwgfSBmcm9tIFwiLi9pbmRleFwiXG5cbmltcG9ydCB7XG4gIFJhZG9uQW55LFxuICBSYWRvbkFycmF5LFxuICBSYWRvbkJvb2xlYW4sXG4gIFJhZG9uQnl0ZXMsXG4gIFJhZG9uRmxvYXQsXG4gIFJhZG9uSW50ZWdlcixcbiAgUmFkb25NYXAsXG4gIFJhZG9uU3RyaW5nLFxuICBSYWRvbk9wZXJhdG9ycyxcbn0gZnJvbSBcIi4vdHlwZXNcIlxuXG5jb25zdCBXSVRORVRfQVNTRVRTX1BBVEggPSBwcm9jZXNzLmVudi5XSVRORVRfU0RLX1JBRE9OX0FTU0VUU19QQVRIIHx8IFwiLi4vLi4vLi4vLi4vLi4vd2l0bmV0L2Fzc2V0c1wiXG5cbmV4cG9ydCB7IGV4ZWNSYWRvbkJ5dGVjb2RlIH0gZnJvbSBcIi4uLy4uL2Jpbi9oZWxwZXJzXCJcblxuLyoqXG4gKiBEZWNvZGVzIGEgUmFkb24gc2NyaXB0IG91dCBmcm9tIGEgUHJvdG9idWYtc2VyaWFsaXplZCBieXRlY29kZS5cbiAqIEBwYXJhbSBoZXhTdHJpbmcgUmFkb24gc2NyaXB0IGJ5dGVjb2RlLlxuICogQHJldHVybnMgUmFkb24gc2NyaXB0IG9iamVjdCAoaS5lLiBjaGFpbiBvZiBSYWRvbiBvcGVyYXRvcnMgd2l0aCBhIGRldGVybWluaXN0aWMgb3V0cHV0IFJhZG9uIHR5cGUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSYWRvblNjcmlwdChieXRlY29kZTogYW55KTogUmFkb25Bbnkge1xuICBsZXQgYnVmZmVyXG4gIGlmIChpc0hleFN0cmluZyhieXRlY29kZSkpIHtcbiAgICBidWZmZXIgPSBmcm9tSGV4U3RyaW5nKGJ5dGVjb2RlKVxuICB9IGVsc2UgaWYgKGJ5dGVjb2RlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJ5dGVjb2RlKVxuICB9IGVsc2UgaWYgKGJ5dGVjb2RlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgYnVmZmVyID0gYnl0ZWNvZGVcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCBSYWRvblNjcmlwdCBieXRlY29kZSBmb3JtYXQ6ICR7Ynl0ZWNvZGV9YClcbiAgfVxuICBjb25zdCBhcnJheSA9IGNib3JEZWNvZGUoYnVmZmVyKVxuICByZXR1cm4gcGFyc2VTY3JpcHQoYXJyYXkpXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5SYWRvbkFzc2V0czxUIGV4dGVuZHMgUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSB8IFJhZG9uTW9kYWwgfCBSYWRvblJldHJpZXZhbD4oXG4gIHRyZWU6IGFueSxcbiAgdHlwZT86IHsgbmV3KHNwZWNzOiBhbnkpOiBUOyB9LFxuICBoZWFkZXJzPzogc3RyaW5nW11cbik6IEFycmF5PHsga2V5OiBzdHJpbmcsIGFydGlmYWN0OiBhbnkgfT4ge1xuICBpZiAoIWhlYWRlcnMpIGhlYWRlcnMgPSBbXVxuICBjb25zdCBlbnRyaWVzOiBBcnJheTx7IGtleTogc3RyaW5nLCBhcnRpZmFjdDogYW55IH0+ID0gW11cbiAgZm9yIChjb25zdCBrZXkgaW4gdHJlZSkge1xuICAgIGlmIChcbiAgICAgICh0eXBlICYmIHRyZWVba2V5XSBpbnN0YW5jZW9mIHR5cGUpXG4gICAgICB8fCAoIXR5cGUgJiYgKFxuICAgICAgICAgIHRyZWVba2V5XSBpbnN0YW5jZW9mIFJhZG9uUmVxdWVzdFxuICAgICAgICAgIHx8IHRyZWVba2V5XSBpbnN0YW5jZW9mIFJhZG9uVGVtcGxhdGVcbiAgICAgICAgICB8fCB0cmVlW2tleV0gaW5zdGFuY2VvZiBSYWRvbk1vZGFsXG4gICAgICAgICAgfHwgdHJlZVtrZXldIGluc3RhbmNlb2YgUmFkb25SZXRyaWV2YWxcbiAgICAgICkpXG4gICAgKSB7XG4gICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICBrZXksXG4gICAgICAgIGFydGlmYWN0OiB0cmVlW2tleV0sXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRyZWVba2V5XSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZW50cmllcy5wdXNoKC4uLmZsYXR0ZW5SYWRvbkFzc2V0cyhcbiAgICAgICAgdHJlZVtrZXldLFxuICAgICAgICB0eXBlLFxuICAgICAgICBbLi4uaGVhZGVycywga2V5XVxuICAgICAgKSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudHJpZXNcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlUmFkb25Bc3NldDxUIGV4dGVuZHMgUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSB8IFJhZG9uTW9kYWwgfCBSYWRvblJldHJpZXZhbD4oc3BlY3M6IHtcbiAgYXJ0aWZhY3Q6IHN0cmluZyxcbiAgYXNzZXRzPzogYW55LFxuICB0eXBlPzogeyBuZXcgKHNwZWNzOiBhbnkpOiBUOyB9LFxufSk6IFQge1xuICBjb25zdCBzdHVmZiA9IChcbiAgICBzcGVjcz8uYXNzZXRzIFxuICAgICAgPyBmbGF0dGVuUmFkb25Bc3NldHMoc3BlY3MuYXNzZXRzLCBzcGVjcz8udHlwZSkgXG4gICAgICA6IGxvYWRNb2R1bGVBc3NldHMoeyBmbGF0dGVuZWQ6IHRydWUsIHR5cGU6IHNwZWNzPy50eXBlIH0pXG4gICk7XG4gIGNvbnN0IGZvdW5kID0gc3R1ZmYuZmluZCgoZW50cnk6IHsga2V5OiBzdHJpbmcsIGFydGlmYWN0OiBhbnkgfSkgPT4gZW50cnkua2V5ID09PSBzcGVjcy5hcnRpZmFjdClcbiAgaWYgKGZvdW5kKSB7XG4gICAgcmV0dXJuIGZvdW5kWzBdLmFydGlmYWN0XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoYFJhZG9uIGFzc2V0IFwiJHtzcGVjcy5hcnRpZmFjdH1cIiBub3QgYXZhaWxhYmxlLmApXG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2ggV2l0bmV0IFJhZG9uIGFzc2V0cyBkZWNsYXJlZCBvciBpbXBvcnRlZCB3aXRoaW4gY3VycmVudCByZXBvc2l0b3J5LCBcbiAqIHdob3NlIG5hbWVzIGNvbXBsaWVzIHdpdGggdGhlIHByb3ZpZGVkIGBwYXR0ZXJuYCBhbmQgYGZpbHRlckZuYC4gXG4gKiBJZiBubyBgZmlsdGVyRm5gIGlzIHNwZWNpZmllZCwgc2VhcmNoIHdpbGwgaW5jbHVkZSBhc3NldHMgd2hvc2UgbmFtZXMgXG4gKiBhcmUgc3VmZml4ZWQgYnkgZ2l2ZW4gYHBhdHRlcm5gIChjYXNlIGluc2Vuc2l0aXZlKS5cbiAqIEBwYXJhbSBvcHRpb25zIFNlYXJjaCBvcHRpb25zXG4gKiBAcGFyYW0gZmlsdGVyRm4gRmlsdGVyaW5nIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgUmFkb24gYXNzZXRzIG9mIHRoZSBzcGVjaWZpZWQga2luZCBjb21wbHlpbmcgd2l0aCB0aGUgc2VhcmNoIHBhdHRlcm4uIFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoUmFkb25Bc3NldHM8VCBleHRlbmRzIFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUgfCBSYWRvbk1vZGFsIHwgUmFkb25SZXRyaWV2YWw+KFxuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogT2JqZWN0IGNvbnRhaW5pbmcgc3RydWN0dXJlZCBoZXJpYXJjaHkgb2YgUmFkb24gYXNzZXRzLiBJZiBub3QgcHJvdmlkZWQsIFJhZG9uIGFzc2V0cyBkZWNsYXJlZCB3aXRoaW4gcHJvamVjdCdzIGVudmlyb25tZW50LlxuICAgICAqL1xuICAgIGFzc2V0cz86IGFueSxcbiAgICAvKipcbiAgICAgKiBMaW1pdHMgbnVtYmVyIG9mIHJldHVybmVkIFJhZG9uIGFzc2V0cy5cbiAgICAgKi9cbiAgICBsaW1pdD86IG51bWJlcixcbiAgICAvKipcbiAgICAgKiBPZmZzZXRzIHJldHVybmVkIGFycmF5IG9mIFJhZG9uIGFzc2V0cy5cbiAgICAgKi9cbiAgICBvZmZzZXQ/OiBudW1iZXIsXG4gICAgLyoqXG4gICAgICogTmFtZSBwYXR0ZXJuIHNlYXJjaGVkIGZvci5cbiAgICAgKi9cbiAgICBwYXR0ZXJuOiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWMgdHlwZSBvZiBSYWRvbiBhc3NldCB0byBzZWFyY2ggZm9yOiBgUmFkb25SZXF1ZXN0YCwgYFJhZG9uUmVxdWVzdGAsIGBSYWRvblJldHJpZXZhbGAgb3IgYFJhZG9uQ0NEUmAuXG4gICAgICovXG4gICAgdHlwZT86IHsgbmV3IChzcGVjczogYW55KTogVDsgfSxcbiAgfSxcbiAgZmlsdGVyRm4/OiAoa2V5OiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykgPT4gYm9vbGVhbixcbik6IEFycmF5PFtrZXk6IHN0cmluZywgYXJ0aWZhY3Q6IFRdPiB7XG4gIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSAoa2V5OiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykgPT4ga2V5LnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgocGF0dGVybi50b0xvd2VyQ2FzZSgpKVxuICBjb25zdCBzdHVmZiA9IChcbiAgICBvcHRpb25zPy5hc3NldHNcbiAgICAgID8gZmxhdHRlblJhZG9uQXNzZXRzKG9wdGlvbnMuYXNzZXRzLCBvcHRpb25zPy50eXBlKVxuICAgICAgOiBsb2FkTW9kdWxlQXNzZXRzKHsgZmxhdHRlbmVkOiB0cnVlLCB0eXBlOiBvcHRpb25zPy50eXBlIH0pXG4gICk7XG4gIHJldHVybiAoXG4gICAgc3R1ZmZcbiAgICAgIC5maWx0ZXIoKGVudHJ5OiB7IGtleTogc3RyaW5nLCBhcnRpZmFjdDogYW55IH0pID0+IChmaWx0ZXJGbiB8fCBkZWZhdWx0RmlsdGVyKShlbnRyeS5rZXksIG9wdGlvbnMucGF0dGVybiB8fCBcIlwiKSlcbiAgICAgIC5zbGljZShvcHRpb25zPy5vZmZzZXQgfHwgMCwgb3B0aW9ucz8ubGltaXQpXG4gICAgICAubWFwKChlbnRyeTogeyBrZXk6IHN0cmluZywgYXJ0aWZhY3Q6IGFueSB8IFQgfSkgPT4gW2VudHJ5LmtleSwgZW50cnkuYXJ0aWZhY3RdKVxuICApO1xufVxuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAtLS0gSU5URVJOQUwgTUVUSE9EUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBsb2FkTW9kdWxlQXNzZXRzPFQgZXh0ZW5kcyBSYWRvblJlcXVlc3QgfCBSYWRvblRlbXBsYXRlIHwgUmFkb25Nb2RhbCB8IFJhZG9uUmV0cmlldmFsPihcbiAgb3B0aW9uczoge1xuICAgIC8vIGxlZ2FjeT86IGJvb2xlYW4sXG4gICAgZmxhdHRlbmVkPzogYm9vbGVhbixcbiAgICB0eXBlPzogeyBuZXcoc3BlY3M6IGFueSk6IFQ7IH0sXG4gIH0sXG4pOiBhbnkge1xuICAvLyBjb25zdCBzdHVmZiA9IG9wdGlvbnM/LmxlZ2FjeSA/IHJlcXVpcmUoYCR7V0lUTkVUX0FTU0VUU19QQVRIfWApLmxlZ2FjeSA6IHtcbiAgLy8gICByZXF1ZXN0czogcmVxdWlyZShgJHtXSVRORVRfQVNTRVRTX1BBVEh9L3JlcXVlc3RzYCksXG4gIC8vICAgdGVtcGxhdGVzOiByZXF1aXJlKGAke1dJVE5FVF9BU1NFVFNfUEFUSH0vdGVtcGxhdGVzYCksXG4gIC8vICAgcmV0cmlldmFsczogcmVxdWlyZShgJHtXSVRORVRfQVNTRVRTX1BBVEh9L3JldHJpZXZhbHNgKSxcbiAgLy8gfTtcbiAgY29uc3Qgc3R1ZmYgPSByZXF1aXJlKGAke1dJVE5FVF9BU1NFVFNfUEFUSH1gKVxuICByZXR1cm4gb3B0aW9ucz8uZmxhdHRlbmVkID8gZmxhdHRlblJhZG9uQXNzZXRzKHN0dWZmLCBvcHRpb25zPy50eXBlKSA6IHN0dWZmXG59XG5cbmZ1bmN0aW9uIHBhcnNlU2NyaXB0KGFycmF5OiBhbnksIHNjcmlwdD86IGFueSk6IGFueSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgIGFycmF5LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICBzY3JpcHQgPSBwYXJzZVNjcmlwdE9wZXJhdG9yKHNjcmlwdCwgaXRlbVswXSwgLi4uaXRlbS5zbGljZSgxKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjcmlwdCA9IHBhcnNlU2NyaXB0T3BlcmF0b3Ioc2NyaXB0LCBpdGVtKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHNjcmlwdFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZVNjcmlwdE9wZXJhdG9yKHNjcmlwdCwgYXJyYXkpXG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTY3JpcHRPcGVyYXRvcihzY3JpcHQ6IGFueSwgb3Bjb2RlOiBhbnksIGFyZ3M/OiBhbnkpOiBhbnkge1xuICBpZiAoIXNjcmlwdCkge1xuICAgIGNvbnN0IGZvdW5kID0gT2JqZWN0LmVudHJpZXMoe1xuICAgICAgXCIxMFwiOiBSYWRvbkFycmF5LFxuICAgICAgXCIyMFwiOiBSYWRvbkJvb2xlYW4sXG4gICAgICBcIjMwXCI6IFJhZG9uQnl0ZXMsXG4gICAgICBcIjQwXCI6IFJhZG9uSW50ZWdlcixcbiAgICAgIFwiNTBcIjogUmFkb25GbG9hdCxcbiAgICAgIFwiNjBcIjogUmFkb25NYXAsXG4gICAgICBcIjcwXCI6IFJhZG9uU3RyaW5nLFxuICAgIH0pLmZpbmQoZW50cnkgPT4gZW50cnlbMF0gPT09IChwYXJzZUludChvcGNvZGUpICYgMHhmMCkudG9TdHJpbmcoMTYpKVxuICAgIGlmIChmb3VuZCkge1xuICAgICAgc2NyaXB0ID0gbmV3IGZvdW5kWzFdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcihgdW5rbm93biBSYWRvbiBvcGVyYXRvcjogJHtvcGNvZGV9YClcbiAgICB9XG4gIH1cbiAgaWYgKG9wY29kZSkge1xuICAgIGxldCBvcGVyYXRvciA9IFJhZG9uT3BlcmF0b3JzW29wY29kZV0uc3BsaXQoLyg/PVtBLVpdKS8pLnNsaWNlKDEpLmpvaW4oXCJcIilcbiAgICBvcGVyYXRvciA9IG9wZXJhdG9yLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgb3BlcmF0b3Iuc2xpY2UoMSlcbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICBjYXNlIFwiZmlsdGVyXCI6IGNhc2UgXCJtYXBcIjogY2FzZSBcInNvcnRcIjogY2FzZSBcImFsdGVyXCI6XG4gICAgICAgIGNvbnN0IGlubmVyU2NyaXB0ID0gcGFyc2VTY3JpcHQoYXJncylcbiAgICAgICAgcmV0dXJuIHNjcmlwdFtvcGVyYXRvcl0oaW5uZXJTY3JpcHQsIC4uLmFyZ3Muc2xpY2UoMSkpO1xuXG4gICAgICAvLyBjYXNlIFwiYWx0ZXJcIjpcbiAgICAgIC8vICAgcmV0dXJuIHNjcmlwdFtvcGVyYXRvcl0oYXJnc1swXSwgcGFyc2VTY3JpcHQoYXJnc1sxXSwgLi4uYXJncy5zbGljZSgyKSkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc2NyaXB0W29wZXJhdG9yXShhcmdzKVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -16,4 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./nodes"), exports);
|
|
18
18
|
__exportStar(require("./provider"), exports);
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQXVCO0FBQ3ZCLDZDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL25vZGVzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVyXCJcbiJdfQ==
|
|
@@ -290,4 +290,4 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
|
|
|
290
290
|
}
|
|
291
291
|
}
|
|
292
292
|
exports.JsonRpcNodeFarm = JsonRpcNodeFarm;
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9ub2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBd0M7QUFDeEMsZ0RBQWlDO0FBRWpDLDJDQUt3QjtBQUV4Qix5Q0FBb0Y7QUFFcEYsbUNBUWdCO0FBMEJoQixTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQzdCLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdEMsT0FBTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFFRCxNQUFhLGVBQWdCLFNBQVEsMEJBQWU7SUFDaEQsWUFBWSxHQUFZO1FBQ3BCLEtBQUssQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSx3QkFBd0IsQ0FBQyxDQUFBO1FBQy9FLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxLQUFLLENBQUMsMkVBQTJFLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFDakcsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBSSxNQUFjLEVBQUUsTUFBWTtRQUM3RCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUU7YUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUF5QyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENB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OUIsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7WUFDdEMsQ0FBQztpQkFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixNQUFNLFNBQVMsR0FBRyw0QkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUN2RixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFDaEYsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDbEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQVUsZUFBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQVUsZUFBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFVLGVBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7Q0FDSjtBQWhSRCwwQ0FnUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0IGFzIGF4aW9zIH0gZnJvbSBcImF4aW9zXCJcclxuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4uL3V0aWxzXCJcclxuXHJcbmltcG9ydCB7XHJcbiAgICBQdWJsaWNLZXksIFxyXG4gICAgUHVibGljS2V5SGFzaCwgXHJcbiAgICBQdWJsaWNLZXlIYXNoU3RyaW5nLCBcclxuICAgIFJlY292ZXJhYmxlU2lnbmF0dXJlIFxyXG59IGZyb20gXCIuLi9jcnlwdG8vdHlwZXNcIlxyXG5cclxuaW1wb3J0IHsgSUpzb25ScGNQcm92aWRlciwgSnNvblJwY1Byb3ZpZGVyLCBKc29uUnBjUHJvdmlkZXJFcnJvciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgQmFsYW5jZTIsIFxyXG4gICAgTWV0aG9kcywgXHJcbiAgICBOb2RlU3RhdHMsIFxyXG4gICAgUGVlckFkZHIsIFxyXG4gICAgU3Rha2VBdXRob3JpemF0aW9uLCBcclxuICAgIFN0YWtlRW50cnksXHJcbiAgICBTeW5jU3RhdHVzLFxyXG59IGZyb20gXCIuL3R5cGVzXCJcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgRXBvY2gsIFxyXG4gICAgSGV4U3RyaW5nLCBcclxuICAgIE5vbmNlXHJcbn0gZnJvbSBcIi4uL3R5cGVzXCJcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUpzb25ScGNOb2RlRmFybSBleHRlbmRzIElKc29uUnBjUHJvdmlkZXIge1xyXG4gICAgYWRkcmVzc2VzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgUHVibGljS2V5SGFzaFN0cmluZz4+XHJcbiAgICBiYWxhbmNlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMl0+PlxyXG4gICAgbWFzdGVyS2V5cygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBzdHJpbmddPj5cclxuICAgIHB1YmxpY0tleXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgUHVibGljS2V5XT4+XHJcbiAgICBzeW5jU3RhdHVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgU3luY1N0YXR1cz4+XHJcblxyXG4gICAgcGVlcnModmFsaWRhdG9yPzogUHVibGljS2V5SGFzaFN0cmluZyk6IFByb21pc2U8QXJyYXk8UGVlckFkZHI+PjtcclxuICAgIHN0YXRzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgTm9kZVN0YXRzPj47XHJcbiAgICB3aXRoZHJhd2VycygpOiBQcm9taXNlPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBbQmlnSW50LCBOb25jZSwgbnVtYmVyXT4+O1xyXG5cclxuICAgIGFkZFBlZXJzKHBlZXJzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XHJcbiAgICBhdXRob3JpemVTdGFrZXMod2l0aGRyYXdlcjogUHVibGljS2V5SGFzaFN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEhleFN0cmluZ10+PjtcclxuICAgIGNsZWFyUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XHJcbiAgICBpbml0aWFsaXplUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XHJcbiAgICByZXdpbmQoZXBvY2g6IEVwb2NoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUHJpdmF0ZVVSTCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgWywgaG9zdCwgXSA9IHV0aWxzLnBhcnNlVVJMKHVybClcclxuICAgIHJldHVybiB1dGlscy5pcElzUHJpdmF0ZU9yTG9jYWxob3N0KGhvc3Quc3BsaXQoJzonKVswXSlcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25ScGNOb2RlRmFybSBleHRlbmRzIEpzb25ScGNQcm92aWRlciBpbXBsZW1lbnRzIElKc29uUnBjTm9kZUZhcm0ge1xyXG4gICAgY29uc3RydWN0b3IodXJsPzogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIodXJsIHx8IHByb2Nlc3MuZW52LldJVE5FVF9UT09MS0lUX0ZBUk1fTk9ERVMgfHwgXCJodHRwOi8vMTI3LjAuMC4xOjIxMzM5XCIpXHJcbiAgICAgICAgdGhpcy5lbmRwb2ludHMuZm9yRWFjaCh1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWlzUHJpdmF0ZVVSTCh1cmwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgV2l0bmV0Lkpzb25ScGNOb2RlRmFybTogb25seSBsb2NhbCBob3N0IG9yIHByaXZhdGUgSVBzIGNhbiBiZSBwcm92aWRlZDogJHt1cmx9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJhdGNoQXBpUGtoTWV0aG9kPFQ+KG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBUXT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRyZXNzZXMoKVxyXG4gICAgICAgICAgICAudGhlbihhc3luYyAoYWRkcmVzc2VzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IHN0cmluZz4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmVudHJpZXMoYWRkcmVzc2VzKS5tYXAoYXN5bmMgKFt1cmwsIHBraF0pID0+IFtcclxuICAgICAgICAgICAgICAgICAgICB1cmwsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGtoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwa2ggaW5zdGFuY2VvZiBFcnJvciA/IHVuZGVmaW5lZCA6IGF3YWl0IHRoaXMuY2FsbEFwaU1ldGhvZDxUPih1cmwsIG1ldGhvZCwgeyBwa2gsIC4uLnBhcmFtcyB9KVxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oZW50cmllcyA9PiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5tYXAoKFt1cmwsIFtwa2gsIHZhbHVlXV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZSBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IEVycm9yKCh2YWx1ZSBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgW3BraCwgdmFsdWUgfHwgXCJcIl1dXHJcbiAgICAgICAgICAgIH0pKSlcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgYmF0Y2hBcGlQa2hNZXRob2ROb1BraDxUPihtZXRob2Q6IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTxhbnk+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgVF0+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkcmVzc2VzKClcclxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKGFkZHJlc3NlczogUmVjb3JkPHN0cmluZywgRXJyb3IgfCBzdHJpbmc+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKGFkZHJlc3NlcykubWFwKGFzeW5jIChbdXJsLCBwa2hdKSA9PiBbXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBraCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGtoIGluc3RhbmNlb2YgRXJyb3IgPyB1bmRlZmluZWQgOiBhd2FpdCB0aGlzLmNhbGxBcGlNZXRob2Q8VD4odXJsLCBtZXRob2QsIHBhcmFtcylcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKGVudHJpZXMgPT4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMubWFwKChbdXJsLCBbcGtoLCB2YWx1ZV1dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBFcnJvcigodmFsdWUgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLnN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHZhbHVlIHx8IFwiXCJdXSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KSkpXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJhdGNoQXBpTWV0aG9kPFQ+KG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBBcnJheTxhbnk+IHwgYW55ICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgVD4+IHtcclxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuZW5kcG9pbnRzLm1hcChhc3luYyAodXJsKSA9PiBcclxuICAgICAgICAgICAgYXhpb3NcclxuICAgICAgICAgICAgICAgIC5wb3N0KFxyXG4gICAgICAgICAgICAgICAgICAgIHVybCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICsgbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLl9oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICkudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBuZXcgSnNvblJwY1Byb3ZpZGVyRXJyb3IobWV0aG9kLCBwYXJhbXMsIHJlc3BvbnNlPy5lcnJvciB8fCByZXNwb25zZT8uZGF0YT8uZXJyb3IpXVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCByZXNwb25zZT8uZGF0YT8ucmVzdWx0IGFzIFRdXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXhjZXB0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihleGNlcHRpb24/Lm1lc3NhZ2UgfHwgZXhjZXB0aW9uPy5lcnJvciB8fCBleGNlcHRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yLnN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIGVycm9yXVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKHZhbHVlcyA9PiBPYmplY3QuZnJvbUVudHJpZXModmFsdWVzKSlcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgY2FsbEFwaU1ldGhvZDxUPih1cmw6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IEFycmF5PGFueT4gfCBhbnkgKTogUHJvbWlzZTxFcnJvciB8IGFueT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGF4aW9zXHJcbiAgICAgICAgICAgICAgICAucG9zdChcclxuICAgICAgICAgICAgICAgICAgICB1cmwsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAganNvbnJwYzogJzIuMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiArIG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5faGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBKc29uUnBjUHJvdmlkZXJFcnJvcihtZXRob2QsIHBhcmFtcywgcmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yPy5zdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U/LmRhdGE/LnJlc3VsdCBhcyBUXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXhjZXB0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihleGNlcHRpb24/Lm1lc3NhZ2UgfHwgZXhjZXB0aW9uPy5lcnJvciB8fCBleGNlcHRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yPy5zdGFja1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIGFkZHJlc3NlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFB1YmxpY0tleUhhc2hTdHJpbmc+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8UHVibGljS2V5SGFzaFN0cmluZz4oTWV0aG9kcy5HZXRQa2gpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGJhbGFuY2VzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEJhbGFuY2UyXT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaEFwaVBraE1ldGhvZDxCYWxhbmNlMj4oTWV0aG9kcy5HZXRCYWxhbmNlMilcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbWFzdGVyS2V5cygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBzdHJpbmddPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpUGtoTWV0aG9kTm9Qa2g8c3RyaW5nPihNZXRob2RzLk1hc3RlcktleUV4cG9ydClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgcHVibGljS2V5cygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBQdWJsaWNLZXldPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpUGtoTWV0aG9kTm9Qa2g8VWludDhBcnJheT4oTWV0aG9kcy5HZXRQdWJsaWNLZXkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgRXJyb3IgfCBVaW50OEFycmF5XT4pID0+IE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpLm1hcCgoW3VybCwgW3BraCwgcmF3XV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmF3ICYmIHJhdyBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmF3IGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdyA9IG5ldyBFcnJvcigocmF3IGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmF3LnN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHJhd11dXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHJhdyA/IFB1YmxpY0tleS5mcm9tVWludDhBcnJheShyYXcpIDogdW5kZWZpbmVkXV1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBwZWVycygpOiBQcm9taXNlPEFycmF5PFBlZXJBZGRyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEFycmF5PFBlZXJBZGRyPj4oTWV0aG9kcy5QZWVycylcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIFBlZXJBZGRyW10+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGVlcnM6IFBlZXJBZGRyW10gPSBbXVxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhyZXN1bHRzKS5mb3JFYWNoKChtb3JlUGVlcnM6IEVycm9yIHwgUGVlckFkZHJbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKG1vcmVQZWVycyBpbnN0YW5jZW9mIEVycm9yKSkgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZVBlZXJzLmZvckVhY2gocGVlciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBlZXJzLmluY2x1ZGVzKHBlZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcnMucHVzaChwZWVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVlcnNcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc3RhdHMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBOb2RlU3RhdHM+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8Tm9kZVN0YXRzPihNZXRob2RzLk5vZGVTdGF0cylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc3luY1N0YXR1cygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPFN5bmNTdGF0dXM+KE1ldGhvZHMuU3luY1N0YXR1cylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgd2l0aGRyYXdlcnMobGltaXQ/OiBudW1iZXIsIG9mZnNldD86IG51bWJlcik6IFByb21pc2U8UmVjb3JkPFB1YmxpY0tleUhhc2hTdHJpbmcsIFtiaWdpbnQsIE5vbmNlLCBudW1iZXJdPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZHJlc3NlcygpXHJcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIChhZGRyZXNzZXM6IFJlY29yZDxzdHJpbmcsIEVycm9yIHwgc3RyaW5nPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3QuZW50cmllcyhhZGRyZXNzZXMpLm1hcChhc3luYyAoW3VybCwgdmFsaWRhdG9yXSkgPT4gW1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCwgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yIGluc3RhbmNlb2YgRXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGF3YWl0IHRoaXMuY2FsbEFwaU1ldGhvZDxBcnJheTxTdGFrZUVudHJ5Pj4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kcy5RdWVyeVN0YWtlcywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogeyB2YWxpZGF0b3IgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsIG9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luY2U6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihlbnRyaWVzID0+IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLm1hcCgoW3VybCwgc3Rha2VzXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YWtlcyAmJiBzdGFrZXMgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoc3Rha2VzIGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VzID0gbmV3IEVycm9yKChzdGFrZXMgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0YWtlcy5zdGFja1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgXVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgc3Rha2VzXVxyXG4gICAgICAgICAgICB9KSkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IEFycmF5PFN0YWtlRW50cnk+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhID4gYiA/IGEgOiBiO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2l0aGRyYXdlcnM6IFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBbYmlnaW50LCBOb25jZSwgbnVtYmVyXT4gPSB7fVxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhyZXN1bHRzKS5mb3JFYWNoKG1vcmVFbnRyaWVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9yZUVudHJpZXMgJiYgIShtb3JlRW50cmllcyBpbnN0YW5jZW9mIEVycm9yKSkgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdWzBdICs9IGVudHJ5LnZhbHVlLmNvaW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3ZXJzW2VudHJ5LmtleS53aXRoZHJhd2VyXVsxXSA9IG1heChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudmFsdWUubm9uY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3ZXJzW2VudHJ5LmtleS53aXRoZHJhd2VyXVsxXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdWzJdICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3ZXJzW2VudHJ5LmtleS53aXRoZHJhd2VyXSA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudmFsdWUuY29pbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlLm5vbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMod2l0aGRyYXdlcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKFssIFthLCwgXV0sIFssIFtiLCxdXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhIDwgYikgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBhZGRQZWVycyhwZWVyczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgQm9vbGVhbj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaEFwaU1ldGhvZDxCb29sZWFuPihNZXRob2RzLkFkZFBlZXJzLCBwZWVycylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplU3Rha2VzKHdpdGhkcmF3ZXI6IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBIZXhTdHJpbmddPj4ge1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih3aXRoZHJhd2VyKS50b0J5dGVzMzIoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpUGtoTWV0aG9kTm9Qa2g8U3Rha2VBdXRob3JpemF0aW9uPihNZXRob2RzLkF1dGhvcml6ZVN0YWtlLCB3aXRoZHJhd2VyKVxyXG4gICAgICAgICAgICAudGhlbigocmVjb3JkczogUmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEVycm9yIHwgU3Rha2VBdXRob3JpemF0aW9uXT4pID0+IE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlY29yZHMpLm1hcCgoW3VybCwgW3BraCwgYXV0aG9yaXphdGlvbl1dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml6YXRpb24gJiYgYXV0aG9yaXphdGlvbiBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYXV0aG9yaXphdGlvbiBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uID0gbmV3IEVycm9yKChhdXRob3JpemF0aW9uIGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXV0aG9yaXphdGlvbi5zdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBbcGtoLCBhdXRob3JpemF0aW9uXV1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF1dGhvcml6YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gUmVjb3ZlcmFibGVTaWduYXR1cmUuZnJvbUtleWVkU2lnbmF0dXJlKGF1dGhvcml6YXRpb24uc2lnbmF0dXJlLCBtc2cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhjb2RlID0gc2lnbmF0dXJlLnB1YktleS5oYXNoKCkudG9IZXhTdHJpbmcoKSArIHNpZ25hdHVyZS50b0hleFN0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBbcGtoLCBhdXRoY29kZV1dXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHVuZGVmaW5lZF1dXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY2xlYXJQZWVycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEJvb2xlYW4+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8Qm9vbGVhbj4oTWV0aG9kcy5DbGVhclBlZXJzKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBpbml0aWFsaXplUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEJvb2xlYW4+KE1ldGhvZHMuSW5pdGlhbGl6ZVBlZXJzKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyByZXdpbmQoZXBvY2g6IEVwb2NoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEJvb2xlYW4+KE1ldGhvZHMuUmV3aW5kLCBbZXBvY2gsIF0pXHJcbiAgICB9XHJcbn1cclxuIl19
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9ub2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBd0M7QUFDeEMsZ0RBQWlDO0FBRWpDLDJDQUt3QjtBQUV4Qix5Q0FBb0Y7QUFFcEYsbUNBUWdCO0FBMEJoQixTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQzdCLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdEMsT0FBTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFFRCxNQUFhLGVBQWdCLFNBQVEsMEJBQWU7SUFDaEQsWUFBWSxHQUFZO1FBQ3BCLEtBQUssQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSx3QkFBd0IsQ0FBQyxDQUFBO1FBQy9FLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxLQUFLLENBQUMsMkVBQTJFLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFDakcsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBSSxNQUFjLEVBQUUsTUFBWTtRQUM3RCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUU7YUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUF5QyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENB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OUIsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7WUFDdEMsQ0FBQztpQkFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixNQUFNLFNBQVMsR0FBRyw0QkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUN2RixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFDaEYsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDbEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQVUsZUFBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQVUsZUFBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFVLGVBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7Q0FDSjtBQWhSRCwwQ0FnUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0IGFzIGF4aW9zIH0gZnJvbSBcImF4aW9zXCJcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuLi91dGlsc1wiXG5cbmltcG9ydCB7XG4gICAgUHVibGljS2V5LCBcbiAgICBQdWJsaWNLZXlIYXNoLCBcbiAgICBQdWJsaWNLZXlIYXNoU3RyaW5nLCBcbiAgICBSZWNvdmVyYWJsZVNpZ25hdHVyZSBcbn0gZnJvbSBcIi4uL2NyeXB0by90eXBlc1wiXG5cbmltcG9ydCB7IElKc29uUnBjUHJvdmlkZXIsIEpzb25ScGNQcm92aWRlciwgSnNvblJwY1Byb3ZpZGVyRXJyb3IgfSBmcm9tIFwiLi9wcm92aWRlclwiXG5cbmltcG9ydCB7IFxuICAgIEJhbGFuY2UyLCBcbiAgICBNZXRob2RzLCBcbiAgICBOb2RlU3RhdHMsIFxuICAgIFBlZXJBZGRyLCBcbiAgICBTdGFrZUF1dGhvcml6YXRpb24sIFxuICAgIFN0YWtlRW50cnksXG4gICAgU3luY1N0YXR1cyxcbn0gZnJvbSBcIi4vdHlwZXNcIlxuXG5pbXBvcnQgeyBcbiAgICBFcG9jaCwgXG4gICAgSGV4U3RyaW5nLCBcbiAgICBOb25jZVxufSBmcm9tIFwiLi4vdHlwZXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIElKc29uUnBjTm9kZUZhcm0gZXh0ZW5kcyBJSnNvblJwY1Byb3ZpZGVyIHtcbiAgICBhZGRyZXNzZXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQdWJsaWNLZXlIYXNoU3RyaW5nPj5cbiAgICBiYWxhbmNlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMl0+PlxuICAgIG1hc3RlcktleXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgc3RyaW5nXT4+XG4gICAgcHVibGljS2V5cygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBQdWJsaWNLZXldPj5cbiAgICBzeW5jU3RhdHVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgU3luY1N0YXR1cz4+XG5cbiAgICBwZWVycyh2YWxpZGF0b3I/OiBQdWJsaWNLZXlIYXNoU3RyaW5nKTogUHJvbWlzZTxBcnJheTxQZWVyQWRkcj4+O1xuICAgIHN0YXRzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgTm9kZVN0YXRzPj47XG4gICAgd2l0aGRyYXdlcnMoKTogUHJvbWlzZTxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgW0JpZ0ludCwgTm9uY2UsIG51bWJlcl0+PjtcblxuICAgIGFkZFBlZXJzKHBlZXJzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XG4gICAgYXV0aG9yaXplU3Rha2VzKHdpdGhkcmF3ZXI6IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBIZXhTdHJpbmddPj47XG4gICAgY2xlYXJQZWVycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEJvb2xlYW4+PjtcbiAgICBpbml0aWFsaXplUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XG4gICAgcmV3aW5kKGVwb2NoOiBFcG9jaCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgQm9vbGVhbj4+O1xufVxuXG5mdW5jdGlvbiBpc1ByaXZhdGVVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBbLCBob3N0LCBdID0gdXRpbHMucGFyc2VVUkwodXJsKVxuICAgIHJldHVybiB1dGlscy5pcElzUHJpdmF0ZU9yTG9jYWxob3N0KGhvc3Quc3BsaXQoJzonKVswXSlcbn1cblxuZXhwb3J0IGNsYXNzIEpzb25ScGNOb2RlRmFybSBleHRlbmRzIEpzb25ScGNQcm92aWRlciBpbXBsZW1lbnRzIElKc29uUnBjTm9kZUZhcm0ge1xuICAgIGNvbnN0cnVjdG9yKHVybD86IHN0cmluZykge1xuICAgICAgICBzdXBlcih1cmwgfHwgcHJvY2Vzcy5lbnYuV0lUTkVUX1RPT0xLSVRfRkFSTV9OT0RFUyB8fCBcImh0dHA6Ly8xMjcuMC4wLjE6MjEzMzlcIilcbiAgICAgICAgdGhpcy5lbmRwb2ludHMuZm9yRWFjaCh1cmwgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc1ByaXZhdGVVUkwodXJsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBXaXRuZXQuSnNvblJwY05vZGVGYXJtOiBvbmx5IGxvY2FsIGhvc3Qgb3IgcHJpdmF0ZSBJUHMgY2FuIGJlIHByb3ZpZGVkOiAke3VybH1gKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBiYXRjaEFwaVBraE1ldGhvZDxUPihtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogYW55KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgVF0+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZHJlc3NlcygpXG4gICAgICAgICAgICAudGhlbihhc3luYyAoYWRkcmVzc2VzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKGFkZHJlc3NlcykubWFwKGFzeW5jIChbdXJsLCBwa2hdKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIHVybCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgcGtoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGtoIGluc3RhbmNlb2YgRXJyb3IgPyB1bmRlZmluZWQgOiBhd2FpdCB0aGlzLmNhbGxBcGlNZXRob2Q8VD4odXJsLCBtZXRob2QsIHsgcGtoLCAuLi5wYXJhbXMgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZW50cmllcyA9PiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5tYXAoKFt1cmwsIFtwa2gsIHZhbHVlXV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlIGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IEVycm9yKCh2YWx1ZSBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLnN0YWNrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHZhbHVlIHx8IFwiXCJdXVxuICAgICAgICAgICAgfSkpKVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBiYXRjaEFwaVBraE1ldGhvZE5vUGtoPFQ+KG1ldGhvZDogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PGFueT4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBUXT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkcmVzc2VzKClcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIChhZGRyZXNzZXM6IFJlY29yZDxzdHJpbmcsIEVycm9yIHwgc3RyaW5nPikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmVudHJpZXMoYWRkcmVzc2VzKS5tYXAoYXN5bmMgKFt1cmwsIHBraF0pID0+IFtcbiAgICAgICAgICAgICAgICAgICAgdXJsLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBwa2gsXG4gICAgICAgICAgICAgICAgICAgICAgICBwa2ggaW5zdGFuY2VvZiBFcnJvciA/IHVuZGVmaW5lZCA6IGF3YWl0IHRoaXMuY2FsbEFwaU1ldGhvZDxUPih1cmwsIG1ldGhvZCwgcGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihlbnRyaWVzID0+IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLm1hcCgoW3VybCwgW3BraCwgdmFsdWVdXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRXJyb3IoKHZhbHVlIGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuc3RhY2tcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgW3BraCwgdmFsdWUgfHwgXCJcIl1dICAgICAgICAgICAgXG4gICAgICAgICAgICB9KSkpXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJhdGNoQXBpTWV0aG9kPFQ+KG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBBcnJheTxhbnk+IHwgYW55ICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgVD4+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLmVuZHBvaW50cy5tYXAoYXN5bmMgKHVybCkgPT4gXG4gICAgICAgICAgICBheGlvc1xuICAgICAgICAgICAgICAgIC5wb3N0KFxuICAgICAgICAgICAgICAgICAgICB1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICsgbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5faGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIG5ldyBKc29uUnBjUHJvdmlkZXJFcnJvcihtZXRob2QsIHBhcmFtcywgcmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcildXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgcmVzcG9uc2U/LmRhdGE/LnJlc3VsdCBhcyBUXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGV4Y2VwdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGV4Y2VwdGlvbj8ubWVzc2FnZSB8fCBleGNlcHRpb24/LmVycm9yIHx8IGV4Y2VwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yLnN0YWNrXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBlcnJvcl1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbih2YWx1ZXMgPT4gT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlcykpXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNhbGxBcGlNZXRob2Q8VD4odXJsOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBBcnJheTxhbnk+IHwgYW55ICk6IFByb21pc2U8RXJyb3IgfCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGF4aW9zXG4gICAgICAgICAgICAgICAgLnBvc3QoXG4gICAgICAgICAgICAgICAgICAgIHVybCwge1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogKyBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLl9oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBKc29uUnBjUHJvdmlkZXJFcnJvcihtZXRob2QsIHBhcmFtcywgcmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlcnJvcj8uc3RhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlPy5kYXRhPy5yZXN1bHQgYXMgVFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGV4Y2VwdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGV4Y2VwdGlvbj8ubWVzc2FnZSB8fCBleGNlcHRpb24/LmVycm9yIHx8IGV4Y2VwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yPy5zdGFja1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfVxuICAgIFxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBcbiAgICBwdWJsaWMgYXN5bmMgYWRkcmVzc2VzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgUHVibGljS2V5SGFzaFN0cmluZz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8UHVibGljS2V5SGFzaFN0cmluZz4oTWV0aG9kcy5HZXRQa2gpXG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJhbGFuY2VzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEJhbGFuY2UyXT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlQa2hNZXRob2Q8QmFsYW5jZTI+KE1ldGhvZHMuR2V0QmFsYW5jZTIpXG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG1hc3RlcktleXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgc3RyaW5nXT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlQa2hNZXRob2ROb1BraDxzdHJpbmc+KE1ldGhvZHMuTWFzdGVyS2V5RXhwb3J0KVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwdWJsaWNLZXlzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIFB1YmxpY0tleV0+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpUGtoTWV0aG9kTm9Qa2g8VWludDhBcnJheT4oTWV0aG9kcy5HZXRQdWJsaWNLZXkpXG4gICAgICAgICAgICAudGhlbigocmVzdWx0czogUmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEVycm9yIHwgVWludDhBcnJheV0+KSA9PiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykubWFwKChbdXJsLCBbcGtoLCByYXddXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmF3ICYmIHJhdyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJhdyBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3ID0gbmV3IEVycm9yKChyYXcgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmF3LnN0YWNrXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgW3BraCwgcmF3XV1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBbcGtoLCByYXcgPyBQdWJsaWNLZXkuZnJvbVVpbnQ4QXJyYXkocmF3KSA6IHVuZGVmaW5lZF1dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSlcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcGVlcnMoKTogUHJvbWlzZTxBcnJheTxQZWVyQWRkcj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8QXJyYXk8UGVlckFkZHI+PihNZXRob2RzLlBlZXJzKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIFBlZXJBZGRyW10+KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHBlZXJzOiBQZWVyQWRkcltdID0gW11cbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHJlc3VsdHMpLmZvckVhY2goKG1vcmVQZWVyczogRXJyb3IgfCBQZWVyQWRkcltdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKG1vcmVQZWVycyBpbnN0YW5jZW9mIEVycm9yKSkgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVQZWVycy5mb3JFYWNoKHBlZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVlcnMuaW5jbHVkZXMocGVlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcnMucHVzaChwZWVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybiBwZWVyc1xuICAgICAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhdHMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBOb2RlU3RhdHM+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPE5vZGVTdGF0cz4oTWV0aG9kcy5Ob2RlU3RhdHMpXG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN5bmNTdGF0dXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8U3luY1N0YXR1cz4oTWV0aG9kcy5TeW5jU3RhdHVzKVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB3aXRoZHJhd2VycyhsaW1pdD86IG51bWJlciwgb2Zmc2V0PzogbnVtYmVyKTogUHJvbWlzZTxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgW2JpZ2ludCwgTm9uY2UsIG51bWJlcl0+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZHJlc3NlcygpXG4gICAgICAgICAgICAudGhlbihhc3luYyAoYWRkcmVzc2VzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKGFkZHJlc3NlcykubWFwKGFzeW5jIChbdXJsLCB2YWxpZGF0b3JdKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIHVybCwgXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvciBpbnN0YW5jZW9mIEVycm9yIFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWQgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGF3YWl0IHRoaXMuY2FsbEFwaU1ldGhvZDxBcnJheTxTdGFrZUVudHJ5Pj4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRob2RzLlF1ZXJ5U3Rha2VzLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHsgdmFsaWRhdG9yIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmNlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGVudHJpZXMgPT4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMubWFwKChbdXJsLCBzdGFrZXNdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YWtlcyAmJiBzdGFrZXMgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YWtlcyBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFrZXMgPSBuZXcgRXJyb3IoKHN0YWtlcyBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0YWtlcy5zdGFja1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBdXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgc3Rha2VzXVxuICAgICAgICAgICAgfSkpKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIEVycm9yIHwgQXJyYXk8U3Rha2VFbnRyeT4+KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhID4gYiA/IGEgOiBiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpdGhkcmF3ZXJzOiBSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgW2JpZ2ludCwgTm9uY2UsIG51bWJlcl0+ID0ge31cbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHJlc3VsdHMpLmZvckVhY2gobW9yZUVudHJpZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9yZUVudHJpZXMgJiYgIShtb3JlRW50cmllcyBpbnN0YW5jZW9mIEVycm9yKSkgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVFbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoZHJhd2Vyc1tlbnRyeS5rZXkud2l0aGRyYXdlcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdWzBdICs9IGVudHJ5LnZhbHVlLmNvaW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoZHJhd2Vyc1tlbnRyeS5rZXkud2l0aGRyYXdlcl1bMV0gPSBtYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZS5ub25jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3ZXJzW2VudHJ5LmtleS53aXRoZHJhd2VyXVsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoZHJhd2Vyc1tlbnRyeS5rZXkud2l0aGRyYXdlcl1bMl0gKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoZHJhd2Vyc1tlbnRyeS5rZXkud2l0aGRyYXdlcl0gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZS5jb2lucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHdpdGhkcmF3ZXJzKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoWywgW2EsLCBdXSwgWywgW2IsLF1dKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgYXN5bmMgYWRkUGVlcnMocGVlcnM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEJvb2xlYW4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEJvb2xlYW4+KE1ldGhvZHMuQWRkUGVlcnMsIHBlZXJzKVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhdXRob3JpemVTdGFrZXMod2l0aGRyYXdlcjogUHVibGljS2V5SGFzaFN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEhleFN0cmluZ10+PiB7XG4gICAgICAgIGNvbnN0IG1zZyA9IFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih3aXRoZHJhd2VyKS50b0J5dGVzMzIoKVxuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaEFwaVBraE1ldGhvZE5vUGtoPFN0YWtlQXV0aG9yaXphdGlvbj4oTWV0aG9kcy5BdXRob3JpemVTdGFrZSwgd2l0aGRyYXdlcilcbiAgICAgICAgICAgIC50aGVuKChyZWNvcmRzOiBSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgRXJyb3IgfCBTdGFrZUF1dGhvcml6YXRpb25dPikgPT4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlY29yZHMpLm1hcCgoW3VybCwgW3BraCwgYXV0aG9yaXphdGlvbl1dKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpemF0aW9uICYmIGF1dGhvcml6YXRpb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhdXRob3JpemF0aW9uIGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uID0gbmV3IEVycm9yKChhdXRob3JpemF0aW9uIGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGF1dGhvcml6YXRpb24uc3RhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBbcGtoLCBhdXRob3JpemF0aW9uXV1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBSZWNvdmVyYWJsZVNpZ25hdHVyZS5mcm9tS2V5ZWRTaWduYXR1cmUoYXV0aG9yaXphdGlvbi5zaWduYXR1cmUsIG1zZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhjb2RlID0gc2lnbmF0dXJlLnB1YktleS5oYXNoKCkudG9IZXhTdHJpbmcoKSArIHNpZ25hdHVyZS50b0hleFN0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgW3BraCwgYXV0aGNvZGVdXVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHVuZGVmaW5lZF1dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSlcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xlYXJQZWVycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEJvb2xlYW4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEJvb2xlYW4+KE1ldGhvZHMuQ2xlYXJQZWVycylcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZVBlZXJzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgQm9vbGVhbj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8Qm9vbGVhbj4oTWV0aG9kcy5Jbml0aWFsaXplUGVlcnMpXG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJld2luZChlcG9jaDogRXBvY2gpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEJvb2xlYW4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEJvb2xlYW4+KE1ldGhvZHMuUmV3aW5kLCBbZXBvY2gsIF0pXG4gICAgfVxufVxuIl19
|