@bitgo/sdk-core 38.13.0 → 38.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/api/types.d.ts +6 -0
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/api/types.js +8 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +17 -7
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/defi/defiVault.d.ts +42 -8
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +76 -10
- package/dist/src/bitgo/defi/iDefiVault.d.ts +22 -2
- package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/iDefiVault.js +1 -1
- package/dist/src/bitgo/environments.js +3 -3
- package/dist/src/bitgo/internal/keycard.d.ts +2 -1
- package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
- package/dist/src/bitgo/internal/keycard.js +6 -3
- package/dist/src/bitgo/keychain/iKeychains.d.ts +6 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +24 -10
- package/dist/src/bitgo/safe/iSafe.d.ts +5 -2
- package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/iSafe.js +1 -1
- package/dist/src/bitgo/safe/safe.d.ts +14 -7
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +105 -29
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +13 -5
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
- package/dist/src/bitgo/staking/stakingWallet.d.ts +2 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +14 -1
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +4 -1
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +50 -0
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +112 -0
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +15 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +4 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +18 -6
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +9 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +24 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +88 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +494 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/index.js +2 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +20 -2
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +8 -5
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +33 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +260 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/index.js +2 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +15 -2
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +13 -2
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.js +13 -1
- package/dist/src/bitgo/wallet/BuildParams.d.ts +8 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +6 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts +7 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +25 -2
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.js +72 -18
- package/dist/src/bitgo/wallet/wallet.d.ts +12 -4
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +82 -17
- package/dist/src/bitgo/wallet/wallets.d.ts +6 -0
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +35 -36
- package/dist/test/unit/bitgo/defi/defiVault.js +264 -1
- package/dist/test/unit/bitgo/keychain/keychains.js +43 -1
- package/dist/test/unit/bitgo/safe/safe.js +53 -22
- package/dist/test/unit/bitgo/tss/common.d.ts +2 -0
- package/dist/test/unit/bitgo/tss/common.d.ts.map +1 -0
- package/dist/test/unit/bitgo/tss/common.js +77 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.js +181 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +70 -1
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +173 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +33 -1
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +10 -10
- package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts +9 -0
- package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/safeShareWallet.js +303 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +51 -40
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
|
@@ -33,6 +33,7 @@ class StakingWallet {
|
|
|
33
33
|
* @return StakingRequest
|
|
34
34
|
*/
|
|
35
35
|
async stake(options) {
|
|
36
|
+
validatePox5StakeOptions(options);
|
|
36
37
|
return await this.createStakingRequest(options, 'STAKE');
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
@@ -362,7 +363,19 @@ class StakingWallet {
|
|
|
362
363
|
}
|
|
363
364
|
}
|
|
364
365
|
exports.StakingWallet = StakingWallet;
|
|
366
|
+
function validatePox5StakeOptions(options) {
|
|
367
|
+
if (options.subType !== 'pox5-bond') {
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const pox5Options = options;
|
|
371
|
+
if (!Number.isInteger(pox5Options.bondIndex) || pox5Options.bondIndex < 0) {
|
|
372
|
+
throw new Error('bondIndex is required for pox5-bond staking');
|
|
373
|
+
}
|
|
374
|
+
if (typeof pox5Options.signerManager !== 'string' || pox5Options.signerManager.length === 0) {
|
|
375
|
+
throw new Error('signerManager is required for pox5-bond staking');
|
|
376
|
+
}
|
|
377
|
+
}
|
|
365
378
|
function isStakingTxRequestPrebuildResult(tx) {
|
|
366
379
|
return tx.txRequestId !== undefined;
|
|
367
380
|
}
|
|
368
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1dhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zdGFraW5nL3N0YWtpbmdXYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0dBRUc7QUFDSCw0Q0FBNEM7QUFDNUMsNkRBQXFDO0FBNEJyQyxvQ0FBOEQ7QUFDOUQsb0RBQTRCO0FBQzVCLGdFQUF1RTtBQUN2RSxrREFBMEI7QUFDMUIsbURBQW9EO0FBRXBELE1BQWEsYUFBYTtJQVF4QixZQUFZLE1BQWUsRUFBRSxRQUFpQjtRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUNULE9BQWtIO1FBRWxILE9BQU8sTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUEyQztRQUN2RCxPQUFPLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUNuQixPQUF5RjtRQUV6RixPQUFPLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUE0QjtRQUM3QyxPQUFPLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBd0I7UUFDakQsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUEwQjtRQUMxQyxPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBd0I7UUFDOUMsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQixDQUFDLGdCQUF3QjtRQUN2RCxNQUFNLGNBQWMsR0FBbUIsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RixNQUFNLFdBQVcsR0FBeUIsY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQzFFLENBQUMsV0FBK0IsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQ3BFLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBeUIsY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQzlFLENBQUMsV0FBK0IsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQ2xFLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckIsa0JBQWtCLEVBQ2hCLGNBQWMsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDcEcsWUFBWSxFQUFFLFdBQVc7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQStCO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxxRUFBcUU7WUFDckUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxPQUFPO2dCQUNMLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7aUJBQ3JDO2FBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sS0FBSyxDQUFDLHVCQUF1QixXQUFXLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFckQsT0FBTztnQkFDTCxXQUFXLEVBQUUsV0FBVztnQkFDeEIsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7YUFDbEUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUErQjtRQUN6RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7WUFDN0MsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxXQUErQjtRQUNyRCxPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssS0FBSyxJQUFJLFdBQVcsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEtBQUsscUJBQXFCLENBQ2xILENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssS0FBSyxDQUFDO0lBQ3BELENBQUM7SUFFTyxZQUFZLENBQUMsV0FBK0I7UUFDbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxLQUFLLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUNSLFdBQStCLEVBQy9CLDBCQUE0RDtRQUU1RCxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFhLEVBQUUsQ0FBQztRQUNsQyxNQUFNLGVBQWUsR0FDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssS0FBSztZQUMxQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxLQUFLLHFCQUFxQixDQUFDO1FBQ2pHLE1BQU0sTUFBTSxHQUFHLGVBQWU7WUFDNUIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLFdBQVcsQ0FBQztZQUN4RSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUVoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDbkUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsT0FBTztZQUNMLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxXQUFXO1lBQ25ELE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQyxlQUFlLENBQUM7Z0JBQ25DLFVBQVUsRUFBRSwwQkFBMEIsQ0FBQyxNQUFNO2dCQUM3QyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsZ0JBQWdCO2dCQUM5QyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUN0QixDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBMkM7UUFDcEQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSztpQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7aUJBQzVGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7aUJBQzlCLE1BQU0sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8saUJBQWlCLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsV0FBK0IsRUFDL0IsV0FBK0I7UUFFL0IsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQWdDLEVBQUUsRUFBRTtZQUNqRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxXQUErQjtRQUN6RSxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQzVFLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLEdBQUcsV0FBVztZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDOUIsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FDaEIsV0FBK0IsRUFDL0IsV0FBK0I7UUFFL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLCtEQUErRDtRQUMvRCw2RUFBNkU7UUFDN0UsK0NBQStDO1FBQy9DLCtDQUErQztRQUMvQyxNQUFNLGdCQUFnQixHQUNwQixDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSwyQkFBMkI7WUFDdEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsS0FBSyxDQUFDO1FBQ1IsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0UsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsa0JBQXNDO1FBQ3BFLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSzthQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2FBQ2hGLEtBQUssQ0FBQyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2xDLE1BQU0sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FDaEMsT0FZbUIsRUFDbkIsSUFBWTtRQUVaLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSzthQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2FBQzVELElBQUksQ0FBQztZQUNKLEdBQUcsT0FBTztZQUNWLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQzthQUNELE1BQU0sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixPQUFPLG1CQUFtQixJQUFJLENBQUMsSUFBSSxZQUFZLElBQUksQ0FBQyxRQUFRLFdBQVcsQ0FBQztJQUMxRSxDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUEwQjtRQUNyRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLElBQUksWUFBWSxJQUFJLENBQUMsUUFBUSxjQUFjLENBQUM7SUFDN0UsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGdCQUF3QjtRQUNoRCxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsa0JBQXNDO1FBQ2xFLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hILENBQUM7SUFFTyxLQUFLLENBQUMsOEJBQThCO1FBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSztxQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7cUJBQzNDLE9BQU8sRUFBRTtxQkFDVCxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxvQkFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3hCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsS0FBSyxPQUFPLENBQUM7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLFdBQStCO1FBQy9ELElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSwyREFBMkQsQ0FBQyxDQUFDO1FBQzdHLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxLQUFLLENBQUMsK0JBQStCLENBQzNDLFdBQStCLEVBQy9CLDBCQUE0RDtRQUU1RCxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRywwQkFBMEIsQ0FBQztRQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFBLGVBQUssRUFBQyxrQ0FBa0MsV0FBVyxDQUFDLGdCQUFnQiw0QkFBNEIsQ0FBQyxDQUFDO1FBRWxHLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxJQUFBLGVBQUssRUFBQywrQ0FBK0MsV0FBVyxDQUFDLGdCQUFnQix1QkFBdUIsQ0FBQyxDQUFDO1lBQzFHLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztRQUVwQyxJQUFJLFdBQVcsRUFBRSxVQUFVLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FDOUIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUN4RixDQUFDO1lBQ0YsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FDbEMsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FDdkcsQ0FBQztZQUNGLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsY0FBYyxDQUFDLElBQUksQ0FBQyw0REFBNEQsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0YsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUN2QixjQUFjLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUM3RixTQUFTO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxXQUFXLEdBQUcsSUFBQSw2Q0FBMEIsRUFBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztnQkFFakYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDN0IsY0FBYyxDQUFDLElBQUksQ0FDakIsYUFBYSxPQUFPLCtCQUErQixhQUFhLENBQUMsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUM1RyxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDNUIsY0FBYyxDQUFDLElBQUksQ0FDakIsYUFBYSxPQUFPLDhCQUE4QixhQUFhLENBQUMsU0FBUyxJQUFJLGFBQWEsVUFDeEYsaUJBQWlCLENBQUMsU0FBUyxJQUFJLGFBQ2pDLEVBQUUsQ0FDSCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksV0FBVyxFQUFFLElBQUksSUFBSyxvQkFBNEIsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pGLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLDZCQUE2QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUNwRixvQkFBNEIsQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FDTCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksV0FBVyxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUUsb0JBQTRCLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdHLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLGlDQUFpQyxXQUFXLENBQUMsUUFBUSxVQUFXLG9CQUE0QixDQUFDLFFBQVEsRUFBRSxDQUN4RyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQ0UsV0FBVyxFQUFFLElBQUk7WUFDaEIsb0JBQTRCLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFDaEQsNkJBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQU0sb0JBQTRCLENBQUMsSUFBSSxFQUN4RSxDQUFDO1lBQ0QsY0FBYyxDQUFDLElBQUksQ0FDakIseUNBQXlDLFdBQVcsQ0FBQyxJQUFJLFlBQWEsb0JBQTRCLENBQUMsSUFBSSxHQUFHLENBQzNHLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUEsaUJBQU8sRUFBRSxvQkFBNEIsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pGLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLDJDQUEyQyxJQUFJLENBQUMsU0FBUyxDQUN2RCxXQUFXLENBQUMsZUFBZSxDQUM1QixVQUFVLElBQUksQ0FBQyxTQUFTLENBQUUsb0JBQTRCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FDM0UsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLHlEQUF5RCxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUcsSUFBQSxlQUFLLEVBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLElBQUEsZUFBSyxFQUNILDBEQUEwRCxXQUFXLENBQUMsZ0JBQWdCLGlDQUFpQyxDQUN4SCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQTdjRCxzQ0E2Y0M7QUFFRCxTQUFTLGdDQUFnQyxDQUN2QyxFQUE4QztJQUU5QyxPQUFRLEVBQWdELENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQztBQUNyRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQ29pbkZhbWlseSB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcblxuaW1wb3J0IHtcbiAgRGVsZWdhdGlvbk9wdGlvbnMsXG4gIERlbGVnYXRpb25SZXN1bHRzLFxuICBJU3Rha2luZ1dhbGxldCxcbiAgU3Rha2VPcHRpb25zLFxuICBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdCxcbiAgU3Rha2luZ1JlcXVlc3QsXG4gIFN0YWtpbmdTaWduZWRUcmFuc2FjdGlvbixcbiAgU3Rha2luZ1NpZ25PcHRpb25zLFxuICBTdGFraW5nVHJhbnNhY3Rpb24sXG4gIFN3aXRjaFZhbGlkYXRvck9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uc1JlYWR5VG9TaWduLFxuICBVbnN0YWtlT3B0aW9ucyxcbiAgRXRoVW5zdGFrZU9wdGlvbnMsXG4gIENsYWltUmV3YXJkc09wdGlvbnMsXG4gIFN0YWtpbmdUeFJlcXVlc3RQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0LFxuICBUcm9uU3Rha2VPcHRpb25zLFxuICBUYW9TdGFrZU9wdGlvbnMsXG4gIFRhb1N3aXRjaFZhbGlkYXRvck9wdGlvbnMsXG4gIFBvbHl4U3dpdGNoVmFsaWRhdG9yT3B0aW9ucyxcbiAgVmV0U3Rha2VPcHRpb25zLFxuICBTdG9yeVN0YWtlT3B0aW9ucyxcbiAgWGRjU3Rha2VPcHRpb25zLFxufSBmcm9tICcuL2lTdGFraW5nV2FsbGV0JztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBJV2FsbGV0LCBQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0IH0gZnJvbSAnLi4vd2FsbGV0JztcbmltcG9ydCB7IElUc3NVdGlscywgUmVxdWVzdFRyYWNlciwgVHNzVXRpbHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyB0cmFuc2FjdGlvblJlY2lwaWVudHNNYXRjaCB9IGZyb20gJy4uL3V0aWxzL3RyYW5zYWN0aW9uVXRpbHMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2FjY291bnQtbGliJztcblxuZXhwb3J0IGNsYXNzIFN0YWtpbmdXYWxsZXQgaW1wbGVtZW50cyBJU3Rha2luZ1dhbGxldCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJpdmF0ZSB0b2tlblBhcmVudFdhbGxldD86IElXYWxsZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNFdGhUc3M6IGJvb2xlYW47XG5cbiAgcHVibGljIHdhbGxldDogSVdhbGxldDtcbiAgcHVibGljIHRzc1V0aWw6IElUc3NVdGlscztcblxuICBjb25zdHJ1Y3Rvcih3YWxsZXQ6IElXYWxsZXQsIGlzRXRoVHNzOiBib29sZWFuKSB7XG4gICAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG4gICAgdGhpcy5iaXRnbyA9IHdhbGxldC5iaXRnbztcbiAgICB0aGlzLnRzc1V0aWwgPSBuZXcgVHNzVXRpbHModGhpcy5iaXRnbywgdGhpcy53YWxsZXQuYmFzZUNvaW4sIHRoaXMud2FsbGV0KTtcbiAgICB0aGlzLmlzRXRoVHNzID0gaXNFdGhUc3M7XG4gIH1cblxuICBnZXQgd2FsbGV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53YWxsZXQuaWQoKTtcbiAgfVxuXG4gIGdldCBjb2luKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMud2FsbGV0LmJhc2VDb2luLnRva2VuQ29uZmlnID8gdGhpcy53YWxsZXQuYmFzZUNvaW4udG9rZW5Db25maWcudHlwZSA6IHRoaXMud2FsbGV0LmNvaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFrZSBjb2luc1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHN0YWtlIG9wdGlvbnNcbiAgICogQHJldHVybiBTdGFraW5nUmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgc3Rha2UoXG4gICAgb3B0aW9uczogU3Rha2VPcHRpb25zIHwgVHJvblN0YWtlT3B0aW9ucyB8IFRhb1N0YWtlT3B0aW9ucyB8IFZldFN0YWtlT3B0aW9ucyB8IFN0b3J5U3Rha2VPcHRpb25zIHwgWGRjU3Rha2VPcHRpb25zXG4gICk6IFByb21pc2U8U3Rha2luZ1JlcXVlc3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVTdGFraW5nUmVxdWVzdChvcHRpb25zLCAnU1RBS0UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN0YWtlIGNvaW5zXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gdW5zdGFrZSBvcHRpb25zXG4gICAqIEByZXR1cm4gU3Rha2luZ1JlcXVlc3RcbiAgICovXG4gIGFzeW5jIHVuc3Rha2Uob3B0aW9uczogVW5zdGFrZU9wdGlvbnMgfCBFdGhVbnN0YWtlT3B0aW9ucyk6IFByb21pc2U8U3Rha2luZ1JlcXVlc3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVTdGFraW5nUmVxdWVzdChvcHRpb25zLCAnVU5TVEFLRScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBhIHJlcXVlc3QgdG8gc3dpdGNoIHRoZSB2YWxpZGF0b3IgdXNlZCBmb3IgYSBzcGVjaWZpYyBkZWxlZ2F0aW9uXG4gICAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgZGVsZWdhdGlvbiB3aXRoIHRoZSBuZXcgdmFsaWRhdG9yIGFkZHJlc3MgYW5kIG1hcmsgdGhlIG9sZCBkZWxlZ2F0aW9uIGFzIGluYWN0aXZlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3dpdGNoIHZhbGlkYXRvciBvcHRpb25zXG4gICAqIEByZXR1cm4gU3Rha2luZ1JlcXVlc3RcbiAgICovXG4gIGFzeW5jIHN3aXRjaFZhbGlkYXRvcihcbiAgICBvcHRpb25zOiBTd2l0Y2hWYWxpZGF0b3JPcHRpb25zIHwgVGFvU3dpdGNoVmFsaWRhdG9yT3B0aW9ucyB8IFBvbHl4U3dpdGNoVmFsaWRhdG9yT3B0aW9uc1xuICApOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlU3Rha2luZ1JlcXVlc3Qob3B0aW9ucywgJ1NXSVRDSF9WQUxJREFUT1InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXQgYSByZXF1ZXN0IHRvIGNsYWltIHJld2FyZHMgZm9yIGEgc3BlY2lmaWMgZGVsZWdhdGlvblxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIGNsYWltIHJld2FyZHMgb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBjbGFpbVJld2FyZHMob3B0aW9uczogQ2xhaW1SZXdhcmRzT3B0aW9ucyk6IFByb21pc2U8U3Rha2luZ1JlcXVlc3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVTdGFraW5nUmVxdWVzdChvcHRpb25zLCAnQ0xBSU1fUkVXQVJEUycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBzdGFraW5nIHJlcXVlc3RcbiAgICogQHBhcmFtIHN0YWtpbmdSZXF1ZXN0SWQgLSBpZCBvZiB0aGUgc3Rha2luZyByZXF1ZXN0IHRvIGNhbmNlbFxuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBjYW5jZWxTdGFraW5nUmVxdWVzdChzdGFraW5nUmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZGVsKHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdSZXF1ZXN0VXJsKHN0YWtpbmdSZXF1ZXN0SWQpKSkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZGVsZWdhdGlvbnMgZm9yIGEgc3BlY2lmaWMgd2FsbGV0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gdW5zdGFrZSBvcHRpb25zXG4gICAqIEByZXR1cm4gU3Rha2luZ1JlcXVlc3RcbiAgICovXG4gIGFzeW5jIGRlbGVnYXRpb25zKG9wdGlvbnM6IERlbGVnYXRpb25PcHRpb25zKTogUHJvbWlzZTxEZWxlZ2F0aW9uUmVzdWx0cz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERlbGVnYXRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHN0YWtpbmcgcmVxdWVzdCBieSBJRFxuICAgKiBAcGFyYW0gc3Rha2luZ1JlcXVlc3RJZCAtIGlkIG9mIHRoZSBzdGFraW5nIHJlcXVlc3QgdG8gcmV0cmlldmVcbiAgICogQHJldHVybiBTdGFraW5nUmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgZ2V0U3Rha2luZ1JlcXVlc3Qoc3Rha2luZ1JlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxTdGFraW5nUmVxdWVzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwodGhpcy5zdGFraW5nUmVxdWVzdFVybChzdGFraW5nUmVxdWVzdElkKSkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0cmFuc2FjdGlvbnMgcmVhZHkgdG8gc2lnblxuICAgKiBAcGFyYW0gc3Rha2luZ1JlcXVlc3RJZFxuICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uc1JlYWR5VG9TaWduXG4gICAqL1xuICBhc3luYyBnZXRUcmFuc2FjdGlvbnNSZWFkeVRvU2lnbihzdGFraW5nUmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uc1JlYWR5VG9TaWduPiB7XG4gICAgY29uc3Qgc3Rha2luZ1JlcXVlc3Q6IFN0YWtpbmdSZXF1ZXN0ID0gYXdhaXQgdGhpcy5nZXRTdGFraW5nUmVxdWVzdChzdGFraW5nUmVxdWVzdElkKTtcbiAgICBjb25zdCByZWFkeVRvU2lnbjogU3Rha2luZ1RyYW5zYWN0aW9uW10gPSBzdGFraW5nUmVxdWVzdC50cmFuc2FjdGlvbnMuZmlsdGVyKFxuICAgICAgKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLnN0YXR1cyA9PT0gYFJFQURZYFxuICAgICk7XG4gICAgY29uc3QgbmV3VHJhbnNhY3Rpb25zOiBTdGFraW5nVHJhbnNhY3Rpb25bXSA9IHN0YWtpbmdSZXF1ZXN0LnRyYW5zYWN0aW9ucy5maWx0ZXIoXG4gICAgICAodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbikgPT4gdHJhbnNhY3Rpb24uc3RhdHVzID09PSBgTkVXYFxuICAgICk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIGFsbFNpZ25pbmdDb21wbGV0ZTpcbiAgICAgICAgc3Rha2luZ1JlcXVlc3QudHJhbnNhY3Rpb25zLmxlbmd0aCA+IDAgJiYgbmV3VHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCAmJiByZWFkeVRvU2lnbi5sZW5ndGggPT09IDAsXG4gICAgICB0cmFuc2FjdGlvbnM6IHJlYWR5VG9TaWduLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzdGFraW5nIHRyYW5zYWN0aW9uXG4gICAqIElmIFRTUyBkZWxldGUgc2lnbmF0dXJlIHNoYXJlcywgZWxzZSBleHBhbmQgYnVpbGQgcGFyYW1zIGFuZCB0aGVuIGJ1aWxkXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiAtIHN0YWtpbmcgdHJhbnNhY3Rpb24gdG8gYnVpbGRcbiAgICovXG4gIGFzeW5jIGJ1aWxkKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pOiBQcm9taXNlPFN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgaWYgKCh0aGlzLndhbGxldC5tdWx0aXNpZ1R5cGUoKSA9PT0gJ3RzcycgJiYgdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgIT09ICdldGgnKSB8fCB0aGlzLmlzRXRoVHNzKSB7XG4gICAgICBpZiAoIXRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHhSZXF1ZXN0SWQgaXMgcmVxdWlyZWQgdG8gc2lnbiBhbmQgc2VuZCcpO1xuICAgICAgfVxuICAgICAgLy8gZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXMgYmVmb3JlIHNpZ25pbmcgZm9yIHRyYW5zYWN0aW9uIHJlcXVlc3QgQVBJXG4gICAgICBhd2FpdCB0aGlzLnRzc1V0aWwuZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRoaXMud2FsbGV0SWQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uLnR4UmVxdWVzdElkLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmV4cGFuZEJ1aWxkUGFyYW1zKHRyYW5zYWN0aW9uKTtcbiAgICAgIGlmICghdHJhbnNhY3Rpb24uYnVpbGRQYXJhbXMpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYFN0YWtpbmcgdHJhbnNhY3Rpb24gJHt0cmFuc2FjdGlvbi5pZH0gYnVpbGQgcGFyYW1zIG5vdCBleHBhbmRlZGApO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgdGhpcy5leHRyYWN0V2FsbGV0KHRyYW5zYWN0aW9uKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLFxuICAgICAgICByZXN1bHQ6IGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLmJ1aWxkUGFyYW1zKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleHRyYWN0V2FsbGV0KHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc0J0Y1VuZGVsZWdhdGUodHJhbnNhY3Rpb24pXG4gICAgICA/IGF3YWl0IHRoaXMuZ2V0RGVzY3JpcHRvcldhbGxldCh0cmFuc2FjdGlvbilcbiAgICAgIDogYXdhaXQgdGhpcy5nZXRXYWxsZXRGb3JCdWlsZGluZ0FuZFNpZ25pbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNCdGNVbmRlbGVnYXRlKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdidGMnICYmIHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVHlwZS50b0xvd2VyQ2FzZSgpID09PSAndW5kZWxlZ2F0ZV93aXRoZHJhdydcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0eCgpIHtcbiAgICByZXR1cm4gdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdzdHgnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyeFN0YWtpbmcodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbikge1xuICAgIHJldHVybiB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ3RyeCc7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB0aGUgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnbk9wdGlvbnNcbiAgICogQHBhcmFtIHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBzaWduKFxuICAgIHNpZ25PcHRpb25zOiBTdGFraW5nU2lnbk9wdGlvbnMsXG4gICAgc3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb246IFN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0XG4gICk6IFByb21pc2U8U3Rha2luZ1NpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIGNvbnN0IGlzQnRjVW5kZWxlZ2F0ZSA9XG4gICAgICB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ2J0YycgJiZcbiAgICAgIHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVHlwZS50b0xvd2VyQ2FzZSgpID09PSAndW5kZWxlZ2F0ZV93aXRoZHJhdyc7XG4gICAgY29uc3Qgd2FsbGV0ID0gaXNCdGNVbmRlbGVnYXRlXG4gICAgICA/IGF3YWl0IHRoaXMuZ2V0RGVzY3JpcHRvcldhbGxldChzdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbilcbiAgICAgIDogYXdhaXQgdGhpcy5nZXRXYWxsZXRGb3JCdWlsZGluZ0FuZFNpZ25pbmcoKTtcblxuICAgIGNvbnN0IGtleWNoYWluID0gYXdhaXQgd2FsbGV0LmJhc2VDb2luLmtleWNoYWlucygpLmdldEtleXNGb3JTaWduaW5nKHtcbiAgICAgIHdhbGxldDogdGhpcy53YWxsZXQsXG4gICAgICByZXFJZDogcmVxSWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zYWN0aW9uOiBzdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbixcbiAgICAgIHNpZ25lZDogYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uLnJlc3VsdCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogc2lnbk9wdGlvbnMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAga2V5Y2hhaW46IGtleWNoYWluWzBdLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHRoZSBzaWduZWQgc3Rha2luZyB0cmFuc2FjdGlvbiBpZiByZXF1aXJlZC4gU2VuZCBjYWxsIGlzIG5vdCByZXF1aXJlZCBpZiBhcGkgdmVyc2lvbiBpcyBmdWxsXG4gICAqIGFuZCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgc3Rha2luZyB0cmFuc2FjdGlvbiBmcm9tIHRoZSBpbmNvbWluZyBvYmplY3QuXG4gICAqIEBwYXJhbSBzaWduZWRUcmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgc2VuZChzaWduZWRUcmFuc2FjdGlvbjogU3Rha2luZ1NpZ25lZFRyYW5zYWN0aW9uKTogUHJvbWlzZTxTdGFraW5nVHJhbnNhY3Rpb24+IHtcbiAgICBpZiAodGhpcy5pc1NlbmRDYWxsUmVxdWlyZWQoKSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgICAgLnBvc3QodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMuc3Rha2luZ1RyYW5zYWN0aW9uVVJMKHNpZ25lZFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKSkpXG4gICAgICAgIC5zZW5kKHNpZ25lZFRyYW5zYWN0aW9uLnNpZ25lZClcbiAgICAgICAgLnJlc3VsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb24udHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQERlcHJlY2F0ZWQgdXNlIGJ1aWxkQW5kU2lnblxuICAgKiBCdWlsZCwgc2lnbiBhbmQgc2VuZCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIEBwYXJhbSBzaWduT3B0aW9uc1xuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIGJ1aWxkU2lnbkFuZFNlbmQoXG4gICAgc2lnbk9wdGlvbnM6IFN0YWtpbmdTaWduT3B0aW9ucyxcbiAgICB0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uXG4gICk6IFByb21pc2U8U3Rha2luZ1RyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRBbmRTaWduKHNpZ25PcHRpb25zLCB0cmFuc2FjdGlvbikudGhlbigocmVzdWx0OiBTdGFraW5nU2lnbmVkVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnNlbmQocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcHJlYnVpbHQgc3Rha2luZyB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogZm9yIHRyYW5zYWN0aW9ucyB3aXRoIHR4IHJlcXVlc3QgaWQgKFRTUyB0cmFuc2FjdGlvbnMpLCB3ZSBuZWVkIHRvIGRlbGV0ZSBzaWduYXR1cmUgc2hhcmVzIGJlZm9yZSBjcmVhdGluZyBwcmVidWlsZCB0cmFuc2FjdGlvblxuICAgKiB3ZSBvbmx5IG5lZWQgdG8gZ2V0IHRyYW5zYWN0aW9uIGJ1aWxkIHBhcmFtcyBpZiB0aGV5IGV4aXN0IHRvIHByZSBidWlsZFxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIHByZWJ1aWxkU2VsZk1hbmFnZWRTdGFraW5nVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IFByb21pc2U8UHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGlmICh0cmFuc2FjdGlvbi50eFJlcXVlc3RJZCkge1xuICAgICAgYXdhaXQgdGhpcy50c3NVdGlsLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0cmFuc2FjdGlvbi50eFJlcXVlc3RJZCk7XG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0gKGF3YWl0IHRoaXMuZXhwYW5kQnVpbGRQYXJhbXModHJhbnNhY3Rpb24pKS5idWlsZFBhcmFtcztcbiAgICBjb25zdCBmb3JtYXR0ZWRQYXJhbXMgPSB7XG4gICAgICAuLi5idWlsZFBhcmFtcyxcbiAgICAgIGNvaW46IHRoaXMuY29pbixcbiAgICAgIHdhbGxldElkOiB0aGlzLndhbGxldElkLFxuICAgICAgd2FsbGV0VHlwZTogdGhpcy53YWxsZXQudHlwZSgpLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5nZXRXYWxsZXRGb3JCdWlsZGluZ0FuZFNpZ25pbmcoKSkucHJlYnVpbGRUcmFuc2FjdGlvbihmb3JtYXR0ZWRQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCBzaWduIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogQHBhcmFtIHNpZ25PcHRpb25zXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgYnVpbGRBbmRTaWduKFxuICAgIHNpZ25PcHRpb25zOiBTdGFraW5nU2lnbk9wdGlvbnMsXG4gICAgdHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvblxuICApOiBQcm9taXNlPFN0YWtpbmdTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGJ1aWx0VHggPSBhd2FpdCB0aGlzLmJ1aWxkKHRyYW5zYWN0aW9uKTtcbiAgICAvLyBkZWZhdWx0IHRvIHZlcmlmeWluZyBhIHRyYW5zYWN0aW9uIHVubGVzcyBleHBsaWNpdGx5IHNraXBwZWRcbiAgICAvLyBza2lwcGluZyB0aGUgdmVyaWZpY2F0aW9uIGZvciBidGMgdW5kZWxlZ2F0ZSBiZWNhdXNlIGl0IGlzIGp1c3Qgc2luZ2xlIHNpZ1xuICAgIC8vIFRPRE86IFNDLTMxODMgKGFkZCB0cnggc3Rha2luZyB2ZXJpZmljYXRpb24pXG4gICAgLy8gVE9ETzogU0MtMzUwOCAoYWRkIFNUWCBzdGFraW5nIHZlcmlmaWNhdGlvbilcbiAgICBjb25zdCBza2lwVmVyaWZpY2F0aW9uID1cbiAgICAgIChzaWduT3B0aW9ucy50cmFuc2FjdGlvblZlcmlmaWNhdGlvbk9wdGlvbnM/LnNraXBUcmFuc2FjdGlvblZlcmlmaWNhdGlvbiB8fFxuICAgICAgICB0aGlzLmlzQnRjVW5kZWxlZ2F0ZSh0cmFuc2FjdGlvbikgfHxcbiAgICAgICAgdGhpcy5pc1RyeFN0YWtpbmcodHJhbnNhY3Rpb24pIHx8XG4gICAgICAgIHRoaXMuaXNTdHgoKSkgPz9cbiAgICAgIGZhbHNlO1xuICAgIGlmICghaXNTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRSZXN1bHQoYnVpbHRUeC5yZXN1bHQpICYmICFza2lwVmVyaWZpY2F0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQnVpbHRTdGFraW5nVHJhbnNhY3Rpb24oYnVpbHRUeC50cmFuc2FjdGlvbiwgYnVpbHRUeCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ24oc2lnbk9wdGlvbnMsIGJ1aWx0VHgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleHBhbmRCdWlsZFBhcmFtcyhzdGFraW5nVHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IFByb21pc2U8U3Rha2luZ1RyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMuc3Rha2luZ1RyYW5zYWN0aW9uVVJMKHN0YWtpbmdUcmFuc2FjdGlvbikpKVxuICAgICAgLnF1ZXJ5KHsgZXhwYW5kQnVpbGRQYXJhbXM6IHRydWUgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlU3Rha2luZ1JlcXVlc3QoXG4gICAgb3B0aW9uczpcbiAgICAgIHwgU3Rha2VPcHRpb25zXG4gICAgICB8IFVuc3Rha2VPcHRpb25zXG4gICAgICB8IEV0aFVuc3Rha2VPcHRpb25zXG4gICAgICB8IFN3aXRjaFZhbGlkYXRvck9wdGlvbnNcbiAgICAgIHwgQ2xhaW1SZXdhcmRzT3B0aW9uc1xuICAgICAgfCBUcm9uU3Rha2VPcHRpb25zXG4gICAgICB8IFRhb1N0YWtlT3B0aW9uc1xuICAgICAgfCBUYW9Td2l0Y2hWYWxpZGF0b3JPcHRpb25zXG4gICAgICB8IFBvbHl4U3dpdGNoVmFsaWRhdG9yT3B0aW9uc1xuICAgICAgfCBWZXRTdGFrZU9wdGlvbnNcbiAgICAgIHwgU3RvcnlTdGFrZU9wdGlvbnNcbiAgICAgIHwgWGRjU3Rha2VPcHRpb25zLFxuICAgIHR5cGU6IHN0cmluZ1xuICApOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdSZXF1ZXN0c1VSTCgpKSlcbiAgICAgIC5zZW5kKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdSZXF1ZXN0c1VSTCgpIHtcbiAgICByZXR1cm4gYC9hcGkvc3Rha2luZy92MS8ke3RoaXMuY29pbn0vd2FsbGV0cy8ke3RoaXMud2FsbGV0SWR9L3JlcXVlc3RzYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGVsZWdhdGlvbnMob3B0aW9uczogRGVsZWdhdGlvbk9wdGlvbnMpOiBQcm9taXNlPERlbGVnYXRpb25SZXN1bHRzPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdEZWxlZ2F0aW9uc1VSTCgpKSkucXVlcnkob3B0aW9ucykucmVzdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdEZWxlZ2F0aW9uc1VSTCgpIHtcbiAgICByZXR1cm4gYC9hcGkvc3Rha2luZy92MS8ke3RoaXMuY29pbn0vd2FsbGV0cy8ke3RoaXMud2FsbGV0SWR9L2RlbGVnYXRpb25zYDtcbiAgfVxuXG4gIHByaXZhdGUgc3Rha2luZ1JlcXVlc3RVcmwoc3Rha2luZ1JlcXVlc3RJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zdGFraW5nUmVxdWVzdHNVUkwoKX0vJHtzdGFraW5nUmVxdWVzdElkfWA7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdUcmFuc2FjdGlvblVSTChzdGFraW5nVHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc3Rha2luZ1JlcXVlc3RVcmwoc3Rha2luZ1RyYW5zYWN0aW9uLnN0YWtpbmdSZXF1ZXN0SWQpfS90cmFuc2FjdGlvbnMvJHtzdGFraW5nVHJhbnNhY3Rpb24uaWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0V2FsbGV0Rm9yQnVpbGRpbmdBbmRTaWduaW5nKCk6IFByb21pc2U8SVdhbGxldD4ge1xuICAgIGlmICh0aGlzLndhbGxldC5iYXNlQ29pbi50b2tlbkNvbmZpZykge1xuICAgICAgaWYgKCF0aGlzLnRva2VuUGFyZW50V2FsbGV0KSB7XG4gICAgICAgIHRoaXMudG9rZW5QYXJlbnRXYWxsZXQgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAgICAgLmNvaW4odGhpcy53YWxsZXQuYmFzZUNvaW4udG9rZW5Db25maWcuY29pbilcbiAgICAgICAgICAud2FsbGV0cygpXG4gICAgICAgICAgLmdldCh7IGlkOiB0aGlzLndhbGxldC5pZCgpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5QYXJlbnRXYWxsZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy53YWxsZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIEFQSSBjYWxsIGlzIG9ubHkgcmVxdWlyZWQgZm9yIFRTUyBUeFJlcXVlc3QgYXBpIHZlcnNpb24gbGl0ZSBvciBtdWx0aS1zaWcgdHJhbnNhY3Rpb25zLlxuICAgKiBGb3IgRnVsbCBhcGkgdmVyc2lvbiwgc2lnbiB0cmFuc2FjdGlvbiBtb3ZlcyB0aGUgdHJhbnNhY3Rpb24gdG8gZGVsaXZlcmVkIHN0YXRlLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHNlbmQgQVBJIGNhbGwgdG8gc3Rha2luZyBzZXJ2aWNlIGlzIHJlcXVpcmVkIGVsc2UgZmFsc2VcbiAgICovXG4gIHByaXZhdGUgaXNTZW5kQ2FsbFJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gQ29pbkZhbWlseS5FVEgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0V0aFRzcztcbiAgICB9IGVsc2UgaWYgKHRoaXMud2FsbGV0Lm11bHRpc2lnVHlwZSgpID09PSAndHNzJykge1xuICAgICAgcmV0dXJuIHRoaXMud2FsbGV0LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpICE9PSAnZWNkc2EnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldERlc2NyaXB0b3JXYWxsZXQodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IFByb21pc2U8SVdhbGxldD4ge1xuICAgIGFzc2VydCh0cmFuc2FjdGlvbi5idWlsZFBhcmFtcz8uc2VuZGVyV2FsbGV0SWQsICdzZW5kZXJXYWxsZXRJZCBpcyByZXF1aXJlZCBmb3IgYnRjIHVuZGVsZWdhdGUgdHJhbnNhY3Rpb24nKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy53YWxsZXQuYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB0cmFuc2FjdGlvbi5idWlsZFBhcmFtcy5zZW5kZXJXYWxsZXRJZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVCdWlsdFN0YWtpbmdUcmFuc2FjdGlvbihcbiAgICB0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uLFxuICAgIHByZWJ1aWx0U3Rha2luZ1RyYW5zYWN0aW9uOiBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdFxuICApIHtcbiAgICBjb25zdCB7IGJ1aWxkUGFyYW1zIH0gPSB0cmFuc2FjdGlvbjtcbiAgICBjb25zdCB7IHJlc3VsdCB9ID0gcHJlYnVpbHRTdGFraW5nVHJhbnNhY3Rpb247XG4gICAgY29uc3QgY29pbiA9IHRoaXMud2FsbGV0LmJhc2VDb2luO1xuICAgIGRlYnVnKGBWYWxpZGF0aW5nIHN0YWtpbmcgdHJhbnNhY3Rpb24gJHt0cmFuc2FjdGlvbi5zdGFraW5nUmVxdWVzdElkfSB3aXRoIHByZWJ1aWx0IHRyYW5zYWN0aW9uYCk7XG5cbiAgICBpZiAoISgndHhIZXgnIGluIHJlc3VsdCkgfHwgIXJlc3VsdC50eEhleCkge1xuICAgICAgZGVidWcoYFNraXBwaW5nIHZhbGlkYXRpb24gZm9yIHN0YWtpbmcgdHJhbnNhY3Rpb24gJHt0cmFuc2FjdGlvbi5zdGFraW5nUmVxdWVzdElkfSAtIHR4SGV4IGlzIHVuZGVmaW5lZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgY29pbi5leHBsYWluVHJhbnNhY3Rpb24ocmVzdWx0LCB0aGlzLndhbGxldCk7XG4gICAgY29uc3QgbWlzbWF0Y2hFcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/LnJlY2lwaWVudHMgJiYgYnVpbGRQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB1c2VyUmVjaXBpZW50TWFwID0gbmV3IE1hcChcbiAgICAgICAgYnVpbGRQYXJhbXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gW3JlY2lwaWVudC5hZGRyZXNzLnRvTG93ZXJDYXNlKCksIHJlY2lwaWVudF0pXG4gICAgICApO1xuICAgICAgY29uc3QgcGxhdGZvcm1SZWNpcGllbnRNYXAgPSBuZXcgTWFwKFxuICAgICAgICAoZXhwbGFpbmVkVHJhbnNhY3Rpb24/Lm91dHB1dHMgPz8gW10pLm1hcCgocmVjaXBpZW50KSA9PiBbcmVjaXBpZW50LmFkZHJlc3MudG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50XSlcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IFthZGRyZXNzXSBvZiBwbGF0Zm9ybVJlY2lwaWVudE1hcCkge1xuICAgICAgICBpZiAoIXVzZXJSZWNpcGllbnRNYXAuaGFzKGFkZHJlc3MpKSB7XG4gICAgICAgICAgbWlzbWF0Y2hFcnJvcnMucHVzaChgVW5leHBlY3RlZCByZWNpcGllbnQgYWRkcmVzcyBmb3VuZCBpbiBidWlsdCB0cmFuc2FjdGlvbjogJHthZGRyZXNzfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2FkZHJlc3MsIHVzZXJSZWNpcGllbnRdIG9mIHVzZXJSZWNpcGllbnRNYXApIHtcbiAgICAgICAgY29uc3QgcGxhdGZvcm1SZWNpcGllbnQgPSBwbGF0Zm9ybVJlY2lwaWVudE1hcC5nZXQoYWRkcmVzcyk7XG4gICAgICAgIGlmICghcGxhdGZvcm1SZWNpcGllbnQpIHtcbiAgICAgICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKGBFeHBlY3RlZCByZWNpcGllbnQgYWRkcmVzcyBub3QgZm91bmQgaW4gYnVpbHQgdHJhbnNhY3Rpb246ICR7YWRkcmVzc31gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gdHJhbnNhY3Rpb25SZWNpcGllbnRzTWF0Y2godXNlclJlY2lwaWVudCwgcGxhdGZvcm1SZWNpcGllbnQpO1xuXG4gICAgICAgIGlmICghbWF0Y2hSZXN1bHQuYW1vdW50TWF0Y2gpIHtcbiAgICAgICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKFxuICAgICAgICAgICAgYFJlY2lwaWVudCAke2FkZHJlc3N9IGFtb3VudCBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICR7dXNlclJlY2lwaWVudC5hbW91bnR9LCBHb3Q6ICR7cGxhdGZvcm1SZWNpcGllbnQuYW1vdW50fWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hSZXN1bHQudG9rZW5NYXRjaCkge1xuICAgICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgICAgICBgUmVjaXBpZW50ICR7YWRkcmVzc30gdG9rZW4gbWlzbWF0Y2guIEV4cGVjdGVkOiAke3VzZXJSZWNpcGllbnQudG9rZW5OYW1lID8/ICduYXRpdmUgY29pbid9LCBHb3Q6ICR7XG4gICAgICAgICAgICAgIHBsYXRmb3JtUmVjaXBpZW50LnRva2VuTmFtZSA/PyAnbmF0aXZlIGNvaW4nXG4gICAgICAgICAgICB9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/Lm1lbW8gJiYgKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkubWVtbyAhPT0gYnVpbGRQYXJhbXMubWVtbykge1xuICAgICAgbWlzbWF0Y2hFcnJvcnMucHVzaChcbiAgICAgICAgYE1lbW8gbWlzbWF0Y2guIEV4cGVjdGVkOiAnJHtKU09OLnN0cmluZ2lmeShidWlsZFBhcmFtcy5tZW1vKX0nLCBHb3Q6ICcke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIChleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLm1lbW9cbiAgICAgICAgKX0nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/Lmdhc0xpbWl0ICYmIFN0cmluZygoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS5nYXNMaW1pdCkgIT09IFN0cmluZyhidWlsZFBhcmFtcy5nYXNMaW1pdCkpIHtcbiAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgIGBHYXMgTGltaXQgbWlzbWF0Y2guIEV4cGVjdGVkOiAke2J1aWxkUGFyYW1zLmdhc0xpbWl0fSwgR290OiAkeyhleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLmdhc0xpbWl0fWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXM/LnR5cGUgJiZcbiAgICAgIChleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLnR5cGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgVHJhbnNhY3Rpb25UeXBlW2J1aWxkUGFyYW1zLnR5cGVdICE9PSAoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS50eXBlXG4gICAgKSB7XG4gICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKFxuICAgICAgICBgVHJhbnNhY3Rpb24gdHlwZSBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICcke2J1aWxkUGFyYW1zLnR5cGV9JywgR290OiAnJHsoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS50eXBlfSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChidWlsZFBhcmFtcz8uc29sSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAoIWlzRXF1YWwoKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkuc29sSW5zdHJ1Y3Rpb25zLCBidWlsZFBhcmFtcy5zb2xJbnN0cnVjdGlvbnMpKSB7XG4gICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgICAgYFNvbGFuYSBpbnN0cnVjdGlvbnMgbWlzbWF0Y2guIEV4cGVjdGVkOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYnVpbGRQYXJhbXMuc29sSW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgKX0sIEdvdDogJHtKU09OLnN0cmluZ2lmeSgoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS5zb2xJbnN0cnVjdGlvbnMpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzbWF0Y2hFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFN0YWtpbmcgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQgYmVmb3JlIHNpZ25pbmc6ICR7bWlzbWF0Y2hFcnJvcnMuam9pbignOyAnKX1gO1xuICAgICAgZGVidWcoZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmICghYnVpbGRQYXJhbXMpIHtcbiAgICAgIGRlYnVnKFxuICAgICAgICBgQ2Fubm90IHBlcmZvcm0gZGVlcCB2YWxpZGF0aW9uIGZvciBzdGFraW5nIHRyYW5zYWN0aW9uICR7dHJhbnNhY3Rpb24uc3Rha2luZ1JlcXVlc3RJZH0gd2l0aG91dCBzcGVjaWZpZWQgYnVpbGQgcGFyYW1zYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRSZXN1bHQoXG4gIHR4OiBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdFsncmVzdWx0J11cbik6IHR4IGlzIFN0YWtpbmdUeFJlcXVlc3RQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0IHtcbiAgcmV0dXJuICh0eCBhcyBTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdCkudHhSZXF1ZXN0SWQgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
381
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1dhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zdGFraW5nL3N0YWtpbmdXYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0dBRUc7QUFDSCw0Q0FBNEM7QUFDNUMsNkRBQXFDO0FBNkJyQyxvQ0FBOEQ7QUFDOUQsb0RBQTRCO0FBQzVCLGdFQUF1RTtBQUN2RSxrREFBMEI7QUFDMUIsbURBQW9EO0FBRXBELE1BQWEsYUFBYTtJQVF4QixZQUFZLE1BQWUsRUFBRSxRQUFpQjtRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUNULE9BT21CO1FBRW5CLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sTUFBTSxJQUFJLENBQUMsb0JBQW9CLENB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QztBQUVELFNBQVMsZ0NBQWdDLENBQ3ZDLEVBQThDO0lBRTlDLE9BQVEsRUFBZ0QsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQ3JGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBDb2luRmFtaWx5IH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuXG5pbXBvcnQge1xuICBEZWxlZ2F0aW9uT3B0aW9ucyxcbiAgRGVsZWdhdGlvblJlc3VsdHMsXG4gIElTdGFraW5nV2FsbGV0LFxuICBTdGFrZU9wdGlvbnMsXG4gIFN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0LFxuICBTdGFraW5nUmVxdWVzdCxcbiAgU3Rha2luZ1NpZ25lZFRyYW5zYWN0aW9uLFxuICBTdGFraW5nU2lnbk9wdGlvbnMsXG4gIFN0YWtpbmdUcmFuc2FjdGlvbixcbiAgU3dpdGNoVmFsaWRhdG9yT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25zUmVhZHlUb1NpZ24sXG4gIFVuc3Rha2VPcHRpb25zLFxuICBFdGhVbnN0YWtlT3B0aW9ucyxcbiAgQ2xhaW1SZXdhcmRzT3B0aW9ucyxcbiAgU3Rha2luZ1R4UmVxdWVzdFByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHQsXG4gIFRyb25TdGFrZU9wdGlvbnMsXG4gIFRhb1N0YWtlT3B0aW9ucyxcbiAgVGFvU3dpdGNoVmFsaWRhdG9yT3B0aW9ucyxcbiAgUG9seXhTd2l0Y2hWYWxpZGF0b3JPcHRpb25zLFxuICBWZXRTdGFrZU9wdGlvbnMsXG4gIFN0b3J5U3Rha2VPcHRpb25zLFxuICBYZGNTdGFrZU9wdGlvbnMsXG4gIFBveDVTdGFrZU9wdGlvbnMsXG59IGZyb20gJy4vaVN0YWtpbmdXYWxsZXQnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IElXYWxsZXQsIFByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgSVRzc1V0aWxzLCBSZXF1ZXN0VHJhY2VyLCBUc3NVdGlscyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHRyYW5zYWN0aW9uUmVjaXBpZW50c01hdGNoIH0gZnJvbSAnLi4vdXRpbHMvdHJhbnNhY3Rpb25VdGlscyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWInO1xuXG5leHBvcnQgY2xhc3MgU3Rha2luZ1dhbGxldCBpbXBsZW1lbnRzIElTdGFraW5nV2FsbGV0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuICBwcml2YXRlIHRva2VuUGFyZW50V2FsbGV0PzogSVdhbGxldDtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0V0aFRzczogYm9vbGVhbjtcblxuICBwdWJsaWMgd2FsbGV0OiBJV2FsbGV0O1xuICBwdWJsaWMgdHNzVXRpbDogSVRzc1V0aWxzO1xuXG4gIGNvbnN0cnVjdG9yKHdhbGxldDogSVdhbGxldCwgaXNFdGhUc3M6IGJvb2xlYW4pIHtcbiAgICB0aGlzLndhbGxldCA9IHdhbGxldDtcbiAgICB0aGlzLmJpdGdvID0gd2FsbGV0LmJpdGdvO1xuICAgIHRoaXMudHNzVXRpbCA9IG5ldyBUc3NVdGlscyh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5iYXNlQ29pbiwgdGhpcy53YWxsZXQpO1xuICAgIHRoaXMuaXNFdGhUc3MgPSBpc0V0aFRzcztcbiAgfVxuXG4gIGdldCB3YWxsZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndhbGxldC5pZCgpO1xuICB9XG5cbiAgZ2V0IGNvaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53YWxsZXQuYmFzZUNvaW4udG9rZW5Db25maWcgPyB0aGlzLndhbGxldC5iYXNlQ29pbi50b2tlbkNvbmZpZy50eXBlIDogdGhpcy53YWxsZXQuY29pbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWtlIGNvaW5zXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3Rha2Ugb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBzdGFrZShcbiAgICBvcHRpb25zOlxuICAgICAgfCBTdGFrZU9wdGlvbnNcbiAgICAgIHwgUG94NVN0YWtlT3B0aW9uc1xuICAgICAgfCBUcm9uU3Rha2VPcHRpb25zXG4gICAgICB8IFRhb1N0YWtlT3B0aW9uc1xuICAgICAgfCBWZXRTdGFrZU9wdGlvbnNcbiAgICAgIHwgU3RvcnlTdGFrZU9wdGlvbnNcbiAgICAgIHwgWGRjU3Rha2VPcHRpb25zXG4gICk6IFByb21pc2U8U3Rha2luZ1JlcXVlc3Q+IHtcbiAgICB2YWxpZGF0ZVBveDVTdGFrZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlU3Rha2luZ1JlcXVlc3Qob3B0aW9ucywgJ1NUQUtFJyk7XG4gIH1cblxuICAvKipcbiAgICogVW5zdGFrZSBjb2luc1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHVuc3Rha2Ugb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyB1bnN0YWtlKG9wdGlvbnM6IFVuc3Rha2VPcHRpb25zIHwgRXRoVW5zdGFrZU9wdGlvbnMpOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlU3Rha2luZ1JlcXVlc3Qob3B0aW9ucywgJ1VOU1RBS0UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXQgYSByZXF1ZXN0IHRvIHN3aXRjaCB0aGUgdmFsaWRhdG9yIHVzZWQgZm9yIGEgc3BlY2lmaWMgZGVsZWdhdGlvblxuICAgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGRlbGVnYXRpb24gd2l0aCB0aGUgbmV3IHZhbGlkYXRvciBhZGRyZXNzIGFuZCBtYXJrIHRoZSBvbGQgZGVsZWdhdGlvbiBhcyBpbmFjdGl2ZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHN3aXRjaCB2YWxpZGF0b3Igb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBzd2l0Y2hWYWxpZGF0b3IoXG4gICAgb3B0aW9uczogU3dpdGNoVmFsaWRhdG9yT3B0aW9ucyB8IFRhb1N3aXRjaFZhbGlkYXRvck9wdGlvbnMgfCBQb2x5eFN3aXRjaFZhbGlkYXRvck9wdGlvbnNcbiAgKTogUHJvbWlzZTxTdGFraW5nUmVxdWVzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZVN0YWtpbmdSZXF1ZXN0KG9wdGlvbnMsICdTV0lUQ0hfVkFMSURBVE9SJyk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0IGEgcmVxdWVzdCB0byBjbGFpbSByZXdhcmRzIGZvciBhIHNwZWNpZmljIGRlbGVnYXRpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBjbGFpbSByZXdhcmRzIG9wdGlvbnNcbiAgICogQHJldHVybiBTdGFraW5nUmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgY2xhaW1SZXdhcmRzKG9wdGlvbnM6IENsYWltUmV3YXJkc09wdGlvbnMpOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlU3Rha2luZ1JlcXVlc3Qob3B0aW9ucywgJ0NMQUlNX1JFV0FSRFMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgc3Rha2luZyByZXF1ZXN0XG4gICAqIEBwYXJhbSBzdGFraW5nUmVxdWVzdElkIC0gaWQgb2YgdGhlIHN0YWtpbmcgcmVxdWVzdCB0byBjYW5jZWxcbiAgICogQHJldHVybiBTdGFraW5nUmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgY2FuY2VsU3Rha2luZ1JlcXVlc3Qoc3Rha2luZ1JlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxTdGFraW5nUmVxdWVzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvLmRlbCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwodGhpcy5zdGFraW5nUmVxdWVzdFVybChzdGFraW5nUmVxdWVzdElkKSkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGRlbGVnYXRpb25zIGZvciBhIHNwZWNpZmljIHdhbGxldFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHVuc3Rha2Ugb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBkZWxlZ2F0aW9ucyhvcHRpb25zOiBEZWxlZ2F0aW9uT3B0aW9ucyk6IFByb21pc2U8RGVsZWdhdGlvblJlc3VsdHM+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXREZWxlZ2F0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzdGFraW5nIHJlcXVlc3QgYnkgSURcbiAgICogQHBhcmFtIHN0YWtpbmdSZXF1ZXN0SWQgLSBpZCBvZiB0aGUgc3Rha2luZyByZXF1ZXN0IHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm4gU3Rha2luZ1JlcXVlc3RcbiAgICovXG4gIGFzeW5jIGdldFN0YWtpbmdSZXF1ZXN0KHN0YWtpbmdSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8U3Rha2luZ1JlcXVlc3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMuc3Rha2luZ1JlcXVlc3RVcmwoc3Rha2luZ1JlcXVlc3RJZCkpKS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdHJhbnNhY3Rpb25zIHJlYWR5IHRvIHNpZ25cbiAgICogQHBhcmFtIHN0YWtpbmdSZXF1ZXN0SWRcbiAgICogQHJldHVybiBUcmFuc2FjdGlvbnNSZWFkeVRvU2lnblxuICAgKi9cbiAgYXN5bmMgZ2V0VHJhbnNhY3Rpb25zUmVhZHlUb1NpZ24oc3Rha2luZ1JlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbnNSZWFkeVRvU2lnbj4ge1xuICAgIGNvbnN0IHN0YWtpbmdSZXF1ZXN0OiBTdGFraW5nUmVxdWVzdCA9IGF3YWl0IHRoaXMuZ2V0U3Rha2luZ1JlcXVlc3Qoc3Rha2luZ1JlcXVlc3RJZCk7XG4gICAgY29uc3QgcmVhZHlUb1NpZ246IFN0YWtpbmdUcmFuc2FjdGlvbltdID0gc3Rha2luZ1JlcXVlc3QudHJhbnNhY3Rpb25zLmZpbHRlcihcbiAgICAgICh0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uKSA9PiB0cmFuc2FjdGlvbi5zdGF0dXMgPT09IGBSRUFEWWBcbiAgICApO1xuICAgIGNvbnN0IG5ld1RyYW5zYWN0aW9uczogU3Rha2luZ1RyYW5zYWN0aW9uW10gPSBzdGFraW5nUmVxdWVzdC50cmFuc2FjdGlvbnMuZmlsdGVyKFxuICAgICAgKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLnN0YXR1cyA9PT0gYE5FV2BcbiAgICApO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICBhbGxTaWduaW5nQ29tcGxldGU6XG4gICAgICAgIHN0YWtpbmdSZXF1ZXN0LnRyYW5zYWN0aW9ucy5sZW5ndGggPiAwICYmIG5ld1RyYW5zYWN0aW9ucy5sZW5ndGggPT09IDAgJiYgcmVhZHlUb1NpZ24ubGVuZ3RoID09PSAwLFxuICAgICAgdHJhbnNhY3Rpb25zOiByZWFkeVRvU2lnbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgKiBJZiBUU1MgZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXMsIGVsc2UgZXhwYW5kIGJ1aWxkIHBhcmFtcyBhbmQgdGhlbiBidWlsZFxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb24gLSBzdGFraW5nIHRyYW5zYWN0aW9uIHRvIGJ1aWxkXG4gICAqL1xuICBhc3luYyBidWlsZCh0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uKTogUHJvbWlzZTxTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGlmICgodGhpcy53YWxsZXQubXVsdGlzaWdUeXBlKCkgPT09ICd0c3MnICYmIHRoaXMud2FsbGV0LmJhc2VDb2luLmdldEZhbWlseSgpICE9PSAnZXRoJykgfHwgdGhpcy5pc0V0aFRzcykge1xuICAgICAgaWYgKCF0cmFuc2FjdGlvbi50eFJlcXVlc3RJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4UmVxdWVzdElkIGlzIHJlcXVpcmVkIHRvIHNpZ24gYW5kIHNlbmQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGRlbGV0ZSBzaWduYXR1cmUgc2hhcmVzIGJlZm9yZSBzaWduaW5nIGZvciB0cmFuc2FjdGlvbiByZXF1ZXN0IEFQSVxuICAgICAgYXdhaXQgdGhpcy50c3NVdGlsLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0cmFuc2FjdGlvbi50eFJlcXVlc3RJZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb24sXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHdhbGxldElkOiB0aGlzLndhbGxldElkLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiB0cmFuc2FjdGlvbi50eFJlcXVlc3RJZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5leHBhbmRCdWlsZFBhcmFtcyh0cmFuc2FjdGlvbik7XG4gICAgICBpZiAoIXRyYW5zYWN0aW9uLmJ1aWxkUGFyYW1zKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBTdGFraW5nIHRyYW5zYWN0aW9uICR7dHJhbnNhY3Rpb24uaWR9IGJ1aWxkIHBhcmFtcyBub3QgZXhwYW5kZWRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdhbGxldCA9IGF3YWl0IHRoaXMuZXh0cmFjdFdhbGxldCh0cmFuc2FjdGlvbik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbixcbiAgICAgICAgcmVzdWx0OiBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbi5idWlsZFBhcmFtcyksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXh0cmFjdFdhbGxldCh0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNCdGNVbmRlbGVnYXRlKHRyYW5zYWN0aW9uKVxuICAgICAgPyBhd2FpdCB0aGlzLmdldERlc2NyaXB0b3JXYWxsZXQodHJhbnNhY3Rpb24pXG4gICAgICA6IGF3YWl0IHRoaXMuZ2V0V2FsbGV0Rm9yQnVpbGRpbmdBbmRTaWduaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGlzQnRjVW5kZWxlZ2F0ZSh0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMud2FsbGV0LmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnYnRjJyAmJiB0cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ3VuZGVsZWdhdGVfd2l0aGRyYXcnXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTdHgoKSB7XG4gICAgcmV0dXJuIHRoaXMud2FsbGV0LmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnc3R4JztcbiAgfVxuXG4gIHByaXZhdGUgaXNUcnhTdGFraW5nKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICd0cngnO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gdGhlIHN0YWtpbmcgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHNpZ25PcHRpb25zXG4gICAqIEBwYXJhbSBzdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgc2lnbihcbiAgICBzaWduT3B0aW9uczogU3Rha2luZ1NpZ25PcHRpb25zLFxuICAgIHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uOiBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdFxuICApOiBQcm9taXNlPFN0YWtpbmdTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICBjb25zdCBpc0J0Y1VuZGVsZWdhdGUgPVxuICAgICAgdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdidGMnICYmXG4gICAgICBzdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ3VuZGVsZWdhdGVfd2l0aGRyYXcnO1xuICAgIGNvbnN0IHdhbGxldCA9IGlzQnRjVW5kZWxlZ2F0ZVxuICAgICAgPyBhd2FpdCB0aGlzLmdldERlc2NyaXB0b3JXYWxsZXQoc3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb24udHJhbnNhY3Rpb24pXG4gICAgICA6IGF3YWl0IHRoaXMuZ2V0V2FsbGV0Rm9yQnVpbGRpbmdBbmRTaWduaW5nKCk7XG5cbiAgICBjb25zdCBrZXljaGFpbiA9IGF3YWl0IHdhbGxldC5iYXNlQ29pbi5rZXljaGFpbnMoKS5nZXRLZXlzRm9yU2lnbmluZyh7XG4gICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgcmVxSWQ6IHJlcUlkLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2FjdGlvbjogc3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb24udHJhbnNhY3Rpb24sXG4gICAgICBzaWduZWQ6IGF3YWl0IHdhbGxldC5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiBzdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvbi5yZXN1bHQsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHNpZ25PcHRpb25zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGtleWNoYWluOiBrZXljaGFpblswXSxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2VuZCB0aGUgc2lnbmVkIHN0YWtpbmcgdHJhbnNhY3Rpb24gaWYgcmVxdWlyZWQuIFNlbmQgY2FsbCBpcyBub3QgcmVxdWlyZWQgaWYgYXBpIHZlcnNpb24gaXMgZnVsbFxuICAgKiBhbmQgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHN0YWtpbmcgdHJhbnNhY3Rpb24gZnJvbSB0aGUgaW5jb21pbmcgb2JqZWN0LlxuICAgKiBAcGFyYW0gc2lnbmVkVHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIHNlbmQoc2lnbmVkVHJhbnNhY3Rpb246IFN0YWtpbmdTaWduZWRUcmFuc2FjdGlvbik6IFByb21pc2U8U3Rha2luZ1RyYW5zYWN0aW9uPiB7XG4gICAgaWYgKHRoaXMuaXNTZW5kQ2FsbFJlcXVpcmVkKCkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAgIC5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdUcmFuc2FjdGlvblVSTChzaWduZWRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbikpKVxuICAgICAgICAuc2VuZChzaWduZWRUcmFuc2FjdGlvbi5zaWduZWQpXG4gICAgICAgIC5yZXN1bHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25lZFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBEZXByZWNhdGVkIHVzZSBidWlsZEFuZFNpZ25cbiAgICogQnVpbGQsIHNpZ24gYW5kIHNlbmQgdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBAcGFyYW0gc2lnbk9wdGlvbnNcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBidWlsZFNpZ25BbmRTZW5kKFxuICAgIHNpZ25PcHRpb25zOiBTdGFraW5nU2lnbk9wdGlvbnMsXG4gICAgdHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvblxuICApOiBQcm9taXNlPFN0YWtpbmdUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkQW5kU2lnbihzaWduT3B0aW9ucywgdHJhbnNhY3Rpb24pLnRoZW4oKHJlc3VsdDogU3Rha2luZ1NpZ25lZFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5zZW5kKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHByZWJ1aWx0IHN0YWtpbmcgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIGZvciB0cmFuc2FjdGlvbnMgd2l0aCB0eCByZXF1ZXN0IGlkIChUU1MgdHJhbnNhY3Rpb25zKSwgd2UgbmVlZCB0byBkZWxldGUgc2lnbmF0dXJlIHNoYXJlcyBiZWZvcmUgY3JlYXRpbmcgcHJlYnVpbGQgdHJhbnNhY3Rpb25cbiAgICogd2Ugb25seSBuZWVkIHRvIGdldCB0cmFuc2FjdGlvbiBidWlsZCBwYXJhbXMgaWYgdGhleSBleGlzdCB0byBwcmUgYnVpbGRcbiAgICpcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBwcmVidWlsZFNlbGZNYW5hZ2VkU3Rha2luZ1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pOiBQcm9taXNlPFByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICBpZiAodHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQpIHtcbiAgICAgIGF3YWl0IHRoaXMudHNzVXRpbC5kZWxldGVTaWduYXR1cmVTaGFyZXModHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQpO1xuICAgIH1cbiAgICBjb25zdCBidWlsZFBhcmFtcyA9IChhd2FpdCB0aGlzLmV4cGFuZEJ1aWxkUGFyYW1zKHRyYW5zYWN0aW9uKSkuYnVpbGRQYXJhbXM7XG4gICAgY29uc3QgZm9ybWF0dGVkUGFyYW1zID0ge1xuICAgICAgLi4uYnVpbGRQYXJhbXMsXG4gICAgICBjb2luOiB0aGlzLmNvaW4sXG4gICAgICB3YWxsZXRJZDogdGhpcy53YWxsZXRJZCxcbiAgICAgIHdhbGxldFR5cGU6IHRoaXMud2FsbGV0LnR5cGUoKSxcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfTtcbiAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuZ2V0V2FsbGV0Rm9yQnVpbGRpbmdBbmRTaWduaW5nKCkpLnByZWJ1aWxkVHJhbnNhY3Rpb24oZm9ybWF0dGVkUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgc2lnbiB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIEBwYXJhbSBzaWduT3B0aW9uc1xuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIGJ1aWxkQW5kU2lnbihcbiAgICBzaWduT3B0aW9uczogU3Rha2luZ1NpZ25PcHRpb25zLFxuICAgIHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb25cbiAgKTogUHJvbWlzZTxTdGFraW5nU2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBidWlsdFR4ID0gYXdhaXQgdGhpcy5idWlsZCh0cmFuc2FjdGlvbik7XG4gICAgLy8gZGVmYXVsdCB0byB2ZXJpZnlpbmcgYSB0cmFuc2FjdGlvbiB1bmxlc3MgZXhwbGljaXRseSBza2lwcGVkXG4gICAgLy8gc2tpcHBpbmcgdGhlIHZlcmlmaWNhdGlvbiBmb3IgYnRjIHVuZGVsZWdhdGUgYmVjYXVzZSBpdCBpcyBqdXN0IHNpbmdsZSBzaWdcbiAgICAvLyBUT0RPOiBTQy0zMTgzIChhZGQgdHJ4IHN0YWtpbmcgdmVyaWZpY2F0aW9uKVxuICAgIC8vIFRPRE86IFNDLTM1MDggKGFkZCBTVFggc3Rha2luZyB2ZXJpZmljYXRpb24pXG4gICAgY29uc3Qgc2tpcFZlcmlmaWNhdGlvbiA9XG4gICAgICAoc2lnbk9wdGlvbnMudHJhbnNhY3Rpb25WZXJpZmljYXRpb25PcHRpb25zPy5za2lwVHJhbnNhY3Rpb25WZXJpZmljYXRpb24gfHxcbiAgICAgICAgdGhpcy5pc0J0Y1VuZGVsZWdhdGUodHJhbnNhY3Rpb24pIHx8XG4gICAgICAgIHRoaXMuaXNUcnhTdGFraW5nKHRyYW5zYWN0aW9uKSB8fFxuICAgICAgICB0aGlzLmlzU3R4KCkpID8/XG4gICAgICBmYWxzZTtcbiAgICBpZiAoIWlzU3Rha2luZ1R4UmVxdWVzdFByZWJ1aWxkUmVzdWx0KGJ1aWx0VHgucmVzdWx0KSAmJiAhc2tpcFZlcmlmaWNhdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZUJ1aWx0U3Rha2luZ1RyYW5zYWN0aW9uKGJ1aWx0VHgudHJhbnNhY3Rpb24sIGJ1aWx0VHgpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zaWduKHNpZ25PcHRpb25zLCBidWlsdFR4KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhwYW5kQnVpbGRQYXJhbXMoc3Rha2luZ1RyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pOiBQcm9taXNlPFN0YWtpbmdUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAuZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdUcmFuc2FjdGlvblVSTChzdGFraW5nVHJhbnNhY3Rpb24pKSlcbiAgICAgIC5xdWVyeSh7IGV4cGFuZEJ1aWxkUGFyYW1zOiB0cnVlIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVN0YWtpbmdSZXF1ZXN0KFxuICAgIG9wdGlvbnM6XG4gICAgICB8IFN0YWtlT3B0aW9uc1xuICAgICAgfCBVbnN0YWtlT3B0aW9uc1xuICAgICAgfCBFdGhVbnN0YWtlT3B0aW9uc1xuICAgICAgfCBTd2l0Y2hWYWxpZGF0b3JPcHRpb25zXG4gICAgICB8IENsYWltUmV3YXJkc09wdGlvbnNcbiAgICAgIHwgUG94NVN0YWtlT3B0aW9uc1xuICAgICAgfCBUcm9uU3Rha2VPcHRpb25zXG4gICAgICB8IFRhb1N0YWtlT3B0aW9uc1xuICAgICAgfCBUYW9Td2l0Y2hWYWxpZGF0b3JPcHRpb25zXG4gICAgICB8IFBvbHl4U3dpdGNoVmFsaWRhdG9yT3B0aW9uc1xuICAgICAgfCBWZXRTdGFrZU9wdGlvbnNcbiAgICAgIHwgU3RvcnlTdGFrZU9wdGlvbnNcbiAgICAgIHwgWGRjU3Rha2VPcHRpb25zLFxuICAgIHR5cGU6IHN0cmluZ1xuICApOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdSZXF1ZXN0c1VSTCgpKSlcbiAgICAgIC5zZW5kKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdSZXF1ZXN0c1VSTCgpIHtcbiAgICByZXR1cm4gYC9hcGkvc3Rha2luZy92MS8ke3RoaXMuY29pbn0vd2FsbGV0cy8ke3RoaXMud2FsbGV0SWR9L3JlcXVlc3RzYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGVsZWdhdGlvbnMob3B0aW9uczogRGVsZWdhdGlvbk9wdGlvbnMpOiBQcm9taXNlPERlbGVnYXRpb25SZXN1bHRzPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdEZWxlZ2F0aW9uc1VSTCgpKSkucXVlcnkob3B0aW9ucykucmVzdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdEZWxlZ2F0aW9uc1VSTCgpIHtcbiAgICByZXR1cm4gYC9hcGkvc3Rha2luZy92MS8ke3RoaXMuY29pbn0vd2FsbGV0cy8ke3RoaXMud2FsbGV0SWR9L2RlbGVnYXRpb25zYDtcbiAgfVxuXG4gIHByaXZhdGUgc3Rha2luZ1JlcXVlc3RVcmwoc3Rha2luZ1JlcXVlc3RJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zdGFraW5nUmVxdWVzdHNVUkwoKX0vJHtzdGFraW5nUmVxdWVzdElkfWA7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdUcmFuc2FjdGlvblVSTChzdGFraW5nVHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc3Rha2luZ1JlcXVlc3RVcmwoc3Rha2luZ1RyYW5zYWN0aW9uLnN0YWtpbmdSZXF1ZXN0SWQpfS90cmFuc2FjdGlvbnMvJHtzdGFraW5nVHJhbnNhY3Rpb24uaWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0V2FsbGV0Rm9yQnVpbGRpbmdBbmRTaWduaW5nKCk6IFByb21pc2U8SVdhbGxldD4ge1xuICAgIGlmICh0aGlzLndhbGxldC5iYXNlQ29pbi50b2tlbkNvbmZpZykge1xuICAgICAgaWYgKCF0aGlzLnRva2VuUGFyZW50V2FsbGV0KSB7XG4gICAgICAgIHRoaXMudG9rZW5QYXJlbnRXYWxsZXQgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAgICAgLmNvaW4odGhpcy53YWxsZXQuYmFzZUNvaW4udG9rZW5Db25maWcuY29pbilcbiAgICAgICAgICAud2FsbGV0cygpXG4gICAgICAgICAgLmdldCh7IGlkOiB0aGlzLndhbGxldC5pZCgpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5QYXJlbnRXYWxsZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy53YWxsZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIEFQSSBjYWxsIGlzIG9ubHkgcmVxdWlyZWQgZm9yIFRTUyBUeFJlcXVlc3QgYXBpIHZlcnNpb24gbGl0ZSBvciBtdWx0aS1zaWcgdHJhbnNhY3Rpb25zLlxuICAgKiBGb3IgRnVsbCBhcGkgdmVyc2lvbiwgc2lnbiB0cmFuc2FjdGlvbiBtb3ZlcyB0aGUgdHJhbnNhY3Rpb24gdG8gZGVsaXZlcmVkIHN0YXRlLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHNlbmQgQVBJIGNhbGwgdG8gc3Rha2luZyBzZXJ2aWNlIGlzIHJlcXVpcmVkIGVsc2UgZmFsc2VcbiAgICovXG4gIHByaXZhdGUgaXNTZW5kQ2FsbFJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gQ29pbkZhbWlseS5FVEgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0V0aFRzcztcbiAgICB9IGVsc2UgaWYgKHRoaXMud2FsbGV0Lm11bHRpc2lnVHlwZSgpID09PSAndHNzJykge1xuICAgICAgcmV0dXJuIHRoaXMud2FsbGV0LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpICE9PSAnZWNkc2EnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldERlc2NyaXB0b3JXYWxsZXQodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IFByb21pc2U8SVdhbGxldD4ge1xuICAgIGFzc2VydCh0cmFuc2FjdGlvbi5idWlsZFBhcmFtcz8uc2VuZGVyV2FsbGV0SWQsICdzZW5kZXJXYWxsZXRJZCBpcyByZXF1aXJlZCBmb3IgYnRjIHVuZGVsZWdhdGUgdHJhbnNhY3Rpb24nKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy53YWxsZXQuYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB0cmFuc2FjdGlvbi5idWlsZFBhcmFtcy5zZW5kZXJXYWxsZXRJZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVCdWlsdFN0YWtpbmdUcmFuc2FjdGlvbihcbiAgICB0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uLFxuICAgIHByZWJ1aWx0U3Rha2luZ1RyYW5zYWN0aW9uOiBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdFxuICApIHtcbiAgICBjb25zdCB7IGJ1aWxkUGFyYW1zIH0gPSB0cmFuc2FjdGlvbjtcbiAgICBjb25zdCB7IHJlc3VsdCB9ID0gcHJlYnVpbHRTdGFraW5nVHJhbnNhY3Rpb247XG4gICAgY29uc3QgY29pbiA9IHRoaXMud2FsbGV0LmJhc2VDb2luO1xuICAgIGRlYnVnKGBWYWxpZGF0aW5nIHN0YWtpbmcgdHJhbnNhY3Rpb24gJHt0cmFuc2FjdGlvbi5zdGFraW5nUmVxdWVzdElkfSB3aXRoIHByZWJ1aWx0IHRyYW5zYWN0aW9uYCk7XG5cbiAgICBpZiAoISgndHhIZXgnIGluIHJlc3VsdCkgfHwgIXJlc3VsdC50eEhleCkge1xuICAgICAgZGVidWcoYFNraXBwaW5nIHZhbGlkYXRpb24gZm9yIHN0YWtpbmcgdHJhbnNhY3Rpb24gJHt0cmFuc2FjdGlvbi5zdGFraW5nUmVxdWVzdElkfSAtIHR4SGV4IGlzIHVuZGVmaW5lZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgY29pbi5leHBsYWluVHJhbnNhY3Rpb24ocmVzdWx0LCB0aGlzLndhbGxldCk7XG4gICAgY29uc3QgbWlzbWF0Y2hFcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/LnJlY2lwaWVudHMgJiYgYnVpbGRQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB1c2VyUmVjaXBpZW50TWFwID0gbmV3IE1hcChcbiAgICAgICAgYnVpbGRQYXJhbXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gW3JlY2lwaWVudC5hZGRyZXNzLnRvTG93ZXJDYXNlKCksIHJlY2lwaWVudF0pXG4gICAgICApO1xuICAgICAgY29uc3QgcGxhdGZvcm1SZWNpcGllbnRNYXAgPSBuZXcgTWFwKFxuICAgICAgICAoZXhwbGFpbmVkVHJhbnNhY3Rpb24/Lm91dHB1dHMgPz8gW10pLm1hcCgocmVjaXBpZW50KSA9PiBbcmVjaXBpZW50LmFkZHJlc3MudG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50XSlcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IFthZGRyZXNzXSBvZiBwbGF0Zm9ybVJlY2lwaWVudE1hcCkge1xuICAgICAgICBpZiAoIXVzZXJSZWNpcGllbnRNYXAuaGFzKGFkZHJlc3MpKSB7XG4gICAgICAgICAgbWlzbWF0Y2hFcnJvcnMucHVzaChgVW5leHBlY3RlZCByZWNpcGllbnQgYWRkcmVzcyBmb3VuZCBpbiBidWlsdCB0cmFuc2FjdGlvbjogJHthZGRyZXNzfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2FkZHJlc3MsIHVzZXJSZWNpcGllbnRdIG9mIHVzZXJSZWNpcGllbnRNYXApIHtcbiAgICAgICAgY29uc3QgcGxhdGZvcm1SZWNpcGllbnQgPSBwbGF0Zm9ybVJlY2lwaWVudE1hcC5nZXQoYWRkcmVzcyk7XG4gICAgICAgIGlmICghcGxhdGZvcm1SZWNpcGllbnQpIHtcbiAgICAgICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKGBFeHBlY3RlZCByZWNpcGllbnQgYWRkcmVzcyBub3QgZm91bmQgaW4gYnVpbHQgdHJhbnNhY3Rpb246ICR7YWRkcmVzc31gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gdHJhbnNhY3Rpb25SZWNpcGllbnRzTWF0Y2godXNlclJlY2lwaWVudCwgcGxhdGZvcm1SZWNpcGllbnQpO1xuXG4gICAgICAgIGlmICghbWF0Y2hSZXN1bHQuYW1vdW50TWF0Y2gpIHtcbiAgICAgICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKFxuICAgICAgICAgICAgYFJlY2lwaWVudCAke2FkZHJlc3N9IGFtb3VudCBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICR7dXNlclJlY2lwaWVudC5hbW91bnR9LCBHb3Q6ICR7cGxhdGZvcm1SZWNpcGllbnQuYW1vdW50fWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hSZXN1bHQudG9rZW5NYXRjaCkge1xuICAgICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgICAgICBgUmVjaXBpZW50ICR7YWRkcmVzc30gdG9rZW4gbWlzbWF0Y2guIEV4cGVjdGVkOiAke3VzZXJSZWNpcGllbnQudG9rZW5OYW1lID8/ICduYXRpdmUgY29pbid9LCBHb3Q6ICR7XG4gICAgICAgICAgICAgIHBsYXRmb3JtUmVjaXBpZW50LnRva2VuTmFtZSA/PyAnbmF0aXZlIGNvaW4nXG4gICAgICAgICAgICB9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/Lm1lbW8gJiYgKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkubWVtbyAhPT0gYnVpbGRQYXJhbXMubWVtbykge1xuICAgICAgbWlzbWF0Y2hFcnJvcnMucHVzaChcbiAgICAgICAgYE1lbW8gbWlzbWF0Y2guIEV4cGVjdGVkOiAnJHtKU09OLnN0cmluZ2lmeShidWlsZFBhcmFtcy5tZW1vKX0nLCBHb3Q6ICcke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIChleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLm1lbW9cbiAgICAgICAgKX0nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/Lmdhc0xpbWl0ICYmIFN0cmluZygoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS5nYXNMaW1pdCkgIT09IFN0cmluZyhidWlsZFBhcmFtcy5nYXNMaW1pdCkpIHtcbiAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgIGBHYXMgTGltaXQgbWlzbWF0Y2guIEV4cGVjdGVkOiAke2J1aWxkUGFyYW1zLmdhc0xpbWl0fSwgR290OiAkeyhleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLmdhc0xpbWl0fWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXM/LnR5cGUgJiZcbiAgICAgIChleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLnR5cGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgVHJhbnNhY3Rpb25UeXBlW2J1aWxkUGFyYW1zLnR5cGVdICE9PSAoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS50eXBlXG4gICAgKSB7XG4gICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKFxuICAgICAgICBgVHJhbnNhY3Rpb24gdHlwZSBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICcke2J1aWxkUGFyYW1zLnR5cGV9JywgR290OiAnJHsoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS50eXBlfSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChidWlsZFBhcmFtcz8uc29sSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAoIWlzRXF1YWwoKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkuc29sSW5zdHJ1Y3Rpb25zLCBidWlsZFBhcmFtcy5zb2xJbnN0cnVjdGlvbnMpKSB7XG4gICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgICAgYFNvbGFuYSBpbnN0cnVjdGlvbnMgbWlzbWF0Y2guIEV4cGVjdGVkOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYnVpbGRQYXJhbXMuc29sSW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgKX0sIEdvdDogJHtKU09OLnN0cmluZ2lmeSgoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS5zb2xJbnN0cnVjdGlvbnMpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzbWF0Y2hFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFN0YWtpbmcgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQgYmVmb3JlIHNpZ25pbmc6ICR7bWlzbWF0Y2hFcnJvcnMuam9pbignOyAnKX1gO1xuICAgICAgZGVidWcoZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmICghYnVpbGRQYXJhbXMpIHtcbiAgICAgIGRlYnVnKFxuICAgICAgICBgQ2Fubm90IHBlcmZvcm0gZGVlcCB2YWxpZGF0aW9uIGZvciBzdGFraW5nIHRyYW5zYWN0aW9uICR7dHJhbnNhY3Rpb24uc3Rha2luZ1JlcXVlc3RJZH0gd2l0aG91dCBzcGVjaWZpZWQgYnVpbGQgcGFyYW1zYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQb3g1U3Rha2VPcHRpb25zKG9wdGlvbnM6IFN0YWtlT3B0aW9ucyB8IFBveDVTdGFrZU9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKG9wdGlvbnMuc3ViVHlwZSAhPT0gJ3BveDUtYm9uZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb3g1T3B0aW9ucyA9IG9wdGlvbnMgYXMgUGFydGlhbDxQb3g1U3Rha2VPcHRpb25zPjtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBveDVPcHRpb25zLmJvbmRJbmRleCkgfHwgKHBveDVPcHRpb25zLmJvbmRJbmRleCBhcyBudW1iZXIpIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYm9uZEluZGV4IGlzIHJlcXVpcmVkIGZvciBwb3g1LWJvbmQgc3Rha2luZycpO1xuICB9XG4gIGlmICh0eXBlb2YgcG94NU9wdGlvbnMuc2lnbmVyTWFuYWdlciAhPT0gJ3N0cmluZycgfHwgcG94NU9wdGlvbnMuc2lnbmVyTWFuYWdlci5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lck1hbmFnZXIgaXMgcmVxdWlyZWQgZm9yIHBveDUtYm9uZCBzdGFraW5nJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRSZXN1bHQoXG4gIHR4OiBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdFsncmVzdWx0J11cbik6IHR4IGlzIFN0YWtpbmdUeFJlcXVlc3RQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0IHtcbiAgcmV0dXJuICh0eCBhcyBTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdCkudHhSZXF1ZXN0SWQgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/tss/common.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,WAAW,EACX,SAAS,EAET,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAE3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAI3C,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,oBAAoB,EAAE,EACvC,eAAe,EAAE,kBAAkB,EACnC,SAAS,EAAE,iBAAiB,GAC3B,oBAAoB,CActB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,SAAS,CAAC,CAcpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,oBAAoB,EACpC,WAAW,EAAE,WAAW,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,GAAE,OAAO,GAAG,OAAiB,EACzC,OAAO,GAAE,MAAM,GAAG,MAAe,EACjC,gBAAgB,CAAC,EAAE,MAAM,EACzB,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,oBAAoB,CAAC,CA2B/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,oBAAoB,EAAE,EACvC,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,MAAM,EAC1B,WAAW,CAAC,EAAE,MAAM,EACpB,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,EACzC,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/tss/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -118,6 +118,9 @@ async function sendSignatureShareV2(bitgo, walletId, txRequestId, signatureShare
|
|
|
118
118
|
else if (multisigTypeVersion === 'MPCv2' && mpcAlgorithm === 'eddsa') {
|
|
119
119
|
type = 'eddsaMpcV2';
|
|
120
120
|
}
|
|
121
|
+
else if (multisigTypeVersion === 'MPCv2' && mpcAlgorithm === 'redpallas') {
|
|
122
|
+
type = 'redpallasMpcV2';
|
|
123
|
+
}
|
|
121
124
|
else if (multisigTypeVersion === undefined && mpcAlgorithm === 'eddsa') {
|
|
122
125
|
type = 'eddsaMpcV1';
|
|
123
126
|
}
|
|
@@ -241,4 +244,4 @@ async function getTxRequestChallenge(bitgo, walletId, txRequestId, index, reques
|
|
|
241
244
|
bitgo.setRequestTracer(reqTracer);
|
|
242
245
|
return await bitgo.post(bitgo.url(urlPath, 2)).send({ paillierModulus }).result();
|
|
243
246
|
}
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3Rzcy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFzQkEsd0RBa0JDO0FBV0Qsb0NBbUJDO0FBZ0JELGdEQXNDQztBQWlCRCxvREFrREM7QUFZRCxzQ0FZQztBQWFELDREQWlCQztBQU1ELGtFQXdDQztBQWFELHNEQXNCQztBQXRVRCxvREFBNEI7QUFPNUIsb0NBVWtCO0FBR2xCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRW5ELFNBQWdCLHNCQUFzQixDQUNwQyxlQUF1QyxFQUN2QyxlQUFtQyxFQUNuQyxTQUE0QjtJQUU1QixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDaEQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLDBCQUFrQixDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQzVFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztRQUNwRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFBLGdCQUFNLEVBQUMsVUFBVSxFQUFFLGlCQUFpQixTQUFTLGtCQUFrQixDQUFDLENBQUM7SUFDakUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FDaEMsS0FBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsS0FBc0I7SUFFdEIsTUFB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LENBQUMsRUFBRTtZQUNqQixRQUFRLEdBQUcsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLE1BQU07UUFDUixLQUFLLG1CQUFXLENBQUMsT0FBTztZQUN0QixRQUFRLEdBQUcsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUNoQyxNQUFNO0lBQ1YsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLFVBQVUsR0FBRyxRQUFRLEdBQUcsY0FBYyxHQUFHLFdBQVcsR0FBRyxRQUFRLEdBQUcsWUFBWSxDQUFDO0lBQy9GLE1BQU0sU0FBUyxHQUFHLEtBQUssSUFBSSxJQUFJLHFCQUFhLEVBQUUsQ0FBQztJQUMvQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsT0FBTyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgb3BlbnBncCBmcm9tICdvcGVucGdwJztcblxuaW1wb3J0IHsgTVBDdjJTaWduaW5nU3RhdGUgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTVBDQWxnb3JpdGhtIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHtcbiAgUmVxdWVzdFR5cGUsXG4gIFR4UmVxdWVzdCxcbiAgdmVyaWZ5UHJpbWFyeVVzZXJXcmFwcGVyLFxuICBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgU2lnbmF0dXJlU2hhcmVUeXBlLFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBFeGNoYW5nZUNvbW1pdG1lbnRSZXNwb25zZSxcbiAgUmVxdWVzdFRyYWNlcixcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgSVJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi8uLi9hcGknO1xuXG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2JpdGdvOnRzczpjb21tb24nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJpdGdvU2lnbmF0dXJlU2hhcmUoXG4gIHNpZ25hdHVyZVNoYXJlczogU2lnbmF0dXJlU2hhcmVSZWNvcmRbXSxcbiAgc2lnbmVyU2hhcmVUeXBlOiBTaWduYXR1cmVTaGFyZVR5cGUsXG4gIHNoYXJlVHlwZTogTVBDdjJTaWduaW5nU3RhdGVcbik6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgY29uc3QgYml0Z29TaGFyZSA9IHNpZ25hdHVyZVNoYXJlcy5maW5kKChzaGFyZSkgPT4ge1xuICAgIGlmIChzaGFyZS5mcm9tICE9PSBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08gfHwgc2hhcmUudG8gIT09IHNpZ25lclNoYXJlVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShzaGFyZS5zaGFyZSkudHlwZSA9PT0gc2hhcmVUeXBlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIGFzc2VydChiaXRnb1NoYXJlLCBgTWlzc2luZyBCaXRHbyAke3NoYXJlVHlwZX0gc2lnbmF0dXJlIHNoYXJlYCk7XG4gIHJldHVybiBiaXRnb1NoYXJlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGxhdGVzdCBUeCBSZXF1ZXN0IGJ5IGlkXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IGlkXG4gKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHRoZSByZXF1ZXN0IHRyYWNlciByZXF1ZXN0IGlkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHhSZXF1ZXN0KFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyXG4pOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gIGNvbnN0IHR4UmVxdWVzdFJlcyA9IGF3YWl0IGJpdGdvXG4gICAgLmdldChiaXRnby51cmwoJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgLnF1ZXJ5KHsgdHhSZXF1ZXN0SWRzOiB0eFJlcXVlc3RJZCwgbGF0ZXN0OiAndHJ1ZScgfSlcbiAgICAucmV0cnkoMylcbiAgICAucmVzdWx0KCk7XG5cbiAgaWYgKHR4UmVxdWVzdFJlcy50eFJlcXVlc3RzLmxlbmd0aCA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBUeFJlcXVlc3Qgd2l0aCBpZCAke3R4UmVxdWVzdElkfWApO1xuICB9XG5cbiAgcmV0dXJuIHR4UmVxdWVzdFJlcy50eFJlcXVlc3RzWzBdO1xufVxuXG4vKipcbiAqIFNlbmRzIGEgU2lnbmF0dXJlIFNoYXJlXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1NpZ25hdHVyZVNoYXJlUmVjb3JkfSBzaWduYXR1cmVTaGFyZSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKiBAcGFyYW0gcmVxdWVzdFR5cGUgLSBUaGUgdHlwZSBvZiByZXF1ZXN0IGJlaW5nIHN1Ym1pdHRlZCAoZWl0aGVyIHR4IG9yIG1lc3NhZ2UgZm9yIHNpZ25pbmcpXG4gKiBAcGFyYW0gc2lnbmVyU2hhcmVcbiAqIEBwYXJhbSBtcGNBbGdvcml0aG1cbiAqIEBwYXJhbSBhcGlNb2RlXG4gKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHRoZSByZXF1ZXN0IHRyYWNlciByZXF1ZXN0IGlkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaWduYXR1cmVTaGFyZShcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gIHNpZ25lclNoYXJlPzogc3RyaW5nLFxuICBtcGNBbGdvcml0aG06ICdlZGRzYScgfCAnZWNkc2EnID0gJ2VkZHNhJyxcbiAgYXBpTW9kZTogJ2Z1bGwnIHwgJ2xpdGUnID0gJ2xpdGUnLFxuICB1c2VyUHVibGljR3BnS2V5Pzogc3RyaW5nLFxuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyXG4pOiBQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkPiB7XG4gIGxldCBhZGRlbmR1bSA9ICcnO1xuICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSBSZXF1ZXN0VHlwZS50eDpcbiAgICAgIGlmIChtcGNBbGdvcml0aG0gPT09ICdlY2RzYScgfHwgYXBpTW9kZSA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgIGFkZGVuZHVtID0gJy90cmFuc2FjdGlvbnMvMCc7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlcXVlc3RUeXBlLm1lc3NhZ2U6XG4gICAgICBpZiAobXBjQWxnb3JpdGhtID09PSAnZWNkc2EnIHx8IGFwaU1vZGUgPT09ICdmdWxsJykge1xuICAgICAgICBhZGRlbmR1bSA9ICcvbWVzc2FnZXMvMCc7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICBjb25zdCB1cmxQYXRoID0gJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eHJlcXVlc3RzLycgKyB0eFJlcXVlc3RJZCArIGFkZGVuZHVtICsgJy9zaWduYXR1cmVzaGFyZXMnO1xuICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gIC8vIFRPRE8oV0NOLTU0MSk6IGFkZCBvcHRpb25hbCBhdHRlc3RhdGlvbiBwYXNzLXRocm91Z2ggZm9yIE1QQyAvc2lnbmF0dXJlc2hhcmVzLCBmaXJzdCByb3VuZFxuICAvLyBvbmx5IChkZWZlcnJlZCB1bnRpbCBtdWx0aXNpZyBhdHRlc3RhdGlvbiwgV0NOLTUzOSwgaXMgdmVyaWZpZWQgZW5kLXRvLWVuZCBvbiBzdGFnaW5nKS5cbiAgcmV0dXJuIGJpdGdvXG4gICAgLnBvc3QoYml0Z28udXJsKHVybFBhdGgsIDIpKVxuICAgIC5zZW5kKHtcbiAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgc2lnbmVyU2hhcmUsXG4gICAgICB1c2VyUHVibGljR3BnS2V5LFxuICAgIH0pXG4gICAgLnJlc3VsdCgpO1xufVxuXG4vKipcbiAqIFNlbmRzIGEgU2lnbmF0dXJlIFNoYXJlIHVzaW5nIHRoZSBzaWduIHR4UmVxdWVzdCByb3V0ZVxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZCAgKlxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHNpZ25hdHVyZVNoYXJlc1xuICogQHBhcmFtIHJlcXVlc3RUeXBlIC0gVGhlIHR5cGUgb2YgcmVxdWVzdCBiZWluZyBzdWJtaXR0ZWQgKGVpdGhlciB0eCBvciBtZXNzYWdlIGZvciBzaWduaW5nKVxuICogQHBhcmFtIHNpZ25lclNoYXJlXG4gKiBAcGFyYW0gbXBjQWxnb3JpdGhtXG4gKiBAcGFyYW0gbXVsdGlzaWdUeXBlVmVyc2lvblxuICogQHBhcmFtIHNpZ25lckdwZ1B1YmxpY0tleVxuICogQHBhcmFtIHJlcUlkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaWduYXR1cmVTaGFyZVYyKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaWduYXR1cmVTaGFyZXM6IFNpZ25hdHVyZVNoYXJlUmVjb3JkW10sXG4gIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgbXBjQWxnb3JpdGhtOiBNUENBbGdvcml0aG0sXG4gIHNpZ25lckdwZ1B1YmxpY0tleTogc3RyaW5nLFxuICBzaWduZXJTaGFyZT86IHN0cmluZyxcbiAgbXVsdGlzaWdUeXBlVmVyc2lvbj86ICdNUEN2MicgfCB1bmRlZmluZWQsXG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gIGNvbnN0IGFkZGVuZHVtID0gcmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLnR4ID8gJy90cmFuc2FjdGlvbnMvMCcgOiAnL21lc3NhZ2VzLzAnO1xuICBjb25zdCB1cmxQYXRoID0gJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eHJlcXVlc3RzLycgKyB0eFJlcXVlc3RJZCArIGFkZGVuZHVtICsgJy9zaWduJztcbiAgbGV0IHR5cGUgPSAnJztcbiAgaWYgKG11bHRpc2lnVHlwZVZlcnNpb24gPT09ICdNUEN2MicgJiYgbXBjQWxnb3JpdGhtID09PSAnZWNkc2EnKSB7XG4gICAgdHlwZSA9ICdlY2RzYU1wY1YyJztcbiAgfSBlbHNlIGlmIChtdWx0aXNpZ1R5cGVWZXJzaW9uID09PSAnTVBDdjInICYmIG1wY0FsZ29yaXRobSA9PT0gJ2VkZHNhJykge1xuICAgIHR5cGUgPSAnZWRkc2FNcGNWMic7XG4gIH0gZWxzZSBpZiAobXVsdGlzaWdUeXBlVmVyc2lvbiA9PT0gdW5kZWZpbmVkICYmIG1wY0FsZ29yaXRobSA9PT0gJ2VkZHNhJykge1xuICAgIHR5cGUgPSAnZWRkc2FNcGNWMSc7XG4gIH1cbiAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgdHlwZSxcbiAgICBzaWduYXR1cmVTaGFyZXMsXG4gICAgc2lnbmVyU2hhcmUsXG4gICAgc2lnbmVyR3BnUHVibGljS2V5LFxuICB9O1xuICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG5cbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSAzO1xuXG4gIHdoaWxlIChhdHRlbXB0cyA8IG1heEF0dGVtcHRzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBiaXRnby5wb3N0KGJpdGdvLnVybCh1cmxQYXRoLCAyKSkuc2VuZChyZXF1ZXN0Qm9keSkucmVzdWx0KCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyPy5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICBjb25zdCBzbGVlcFRpbWUgPSAxMDAwICogKGF0dGVtcHRzICsgMSk7XG4gICAgICAgIGRlYnVnKGBNUEMgU2lnbmluZyByYXRlIGxpbWl0IGVycm9yIC0gcmV0cnlpbmcgaW4gJHtzbGVlcFRpbWUgLyAxMDAwfSBzZWNvbmRzYCk7XG4gICAgICAgIC8vIHNsZWVwIGZvciBhIGJpdCBiZWZvcmUgcmV0cnlpbmdcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgc2xlZXBUaW1lKSk7XG4gICAgICAgIGF0dGVtcHRzKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhd2FpdCBiaXRnby5wb3N0KGJpdGdvLnVybCh1cmxQYXRoLCAyKSkuc2VuZChyZXF1ZXN0Qm9keSkucmVzdWx0KCk7XG59XG5cbi8qKlxuICogU2VuZHMgYSBUcmFuc2FjdGlvbiBSZXF1ZXN0IGZvciBicm9hZGNhc3Qgb25jZSBzaWduaW5nIGlzIGNvbXBsZXRlXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0gcmVxdWVzdFR5cGUgLSBUaGUgdHlwZSBvZiByZXF1ZXN0IGJlaW5nIHN1Ym1pdHRlZCAoZWl0aGVyIHR4IG9yIG1lc3NhZ2UgZm9yIHNpZ25pbmcpXG4gKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHJlcXVlc3QgdHJhY2VyIHJlcXVlc3QgaWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkPn0gLSBhIFNpZ25hdHVyZSBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFR4UmVxdWVzdChcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlLFxuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyXG4pOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICBjb25zdCBhZGRlbmR1bSA9IHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS50eCA/ICcvdHJhbnNhY3Rpb25zLzAnIDogJy9tZXNzYWdlcy8wJztcbiAgY29uc3QgdXJsUGF0aCA9ICcvd2FsbGV0LycgKyB3YWxsZXRJZCArICcvdHhyZXF1ZXN0cy8nICsgdHhSZXF1ZXN0SWQgKyBhZGRlbmR1bSArICcvc2VuZCc7XG4gIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gIGJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgcmV0dXJuIGJpdGdvLnBvc3QoYml0Z28udXJsKHVybFBhdGgsIDIpKS5zZW5kKCkucmVzdWx0KCk7XG59XG5cbi8qKlxuICogU2VuZHMgdGhlIGNsaWVudCBjb21taXRtZW50IGFuZCBlbmNyeXB0ZWQgc2lnbmVyIHNoYXJlIHRvIHRoZSBzZXJ2ZXIsIGdldHRpbmcgYmFjayB0aGUgc2VydmVyIGNvbW1pdG1lbnRcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZFxuICogQHBhcmFtIHtzdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHtDb21taXRtZW50U2hhcmVSZWNvcmR9IGNvbW1pdG1lbnRTaGFyZSAtIHRoZSBjbGllbnQgY29tbWl0bWVudCBzaGFyZVxuICogQHBhcmFtIHtFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZH0gZW5jcnlwdGVkU2lnbmVyU2hhcmUgLSB0aGUgY2xpZW50IGVuY3J5cHRlZCBzaWduZXIgc2hhcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXBpTW9kZV0gLSB0aGUgdHhSZXF1ZXN0IGFwaSBtb2RlIChmdWxsIG9yIGxpdGUpIC0gZGVmYXVsdHMgdG8gbGl0ZVxuICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSB0aGUgcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBJZFxuICogQHJldHVybnMge1Byb21pc2U8RXhjaGFuZ2VDb21taXRtZW50UmVzcG9uc2U+fSAtIHRoZSBzZXJ2ZXIgY29tbWl0bWVudCBzaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhjaGFuZ2VFZGRzYUNvbW1pdG1lbnRzKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBjb21taXRtZW50U2hhcmU6IENvbW1pdG1lbnRTaGFyZVJlY29yZCxcbiAgZW5jcnlwdGVkU2lnbmVyU2hhcmU6IEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBhcGlNb2RlOiAnZnVsbCcgfCAnbGl0ZScgPSAnbGl0ZScsXG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbik6IFByb21pc2U8RXhjaGFuZ2VDb21taXRtZW50UmVzcG9uc2U+IHtcbiAgbGV0IGFkZGVuZHVtID0gJyc7XG4gIGlmIChhcGlNb2RlID09PSAnZnVsbCcpIHtcbiAgICBhZGRlbmR1bSA9ICcvdHJhbnNhY3Rpb25zLzAnO1xuICB9XG4gIGNvbnN0IHVybFBhdGggPSAnL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4cmVxdWVzdHMvJyArIHR4UmVxdWVzdElkICsgYWRkZW5kdW0gKyAnL2NvbW1pdCc7XG4gIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gIGJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgcmV0dXJuIGF3YWl0IGJpdGdvLnBvc3QoYml0Z28udXJsKHVybFBhdGgsIDIpKS5zZW5kKHsgY29tbWl0bWVudFNoYXJlLCBlbmNyeXB0ZWRTaWduZXJTaGFyZSB9KS5yZXN1bHQoKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGEgVFNTIHdhbGxldCBzaWduYXR1cmUgd2FzIHByb2R1Y2VkIHdpdGggdGhlIGV4cGVjdGVkIGtleSBhbmQgdGhhdCB0aGUgc2lnbmVkIGRhdGEgY29udGFpbnMgdGhlXG4gKiBleHBlY3RlZCBjb21tb24ga2V5Y2hhaW4gYXMgd2VsbCBhcyB0aGUgZXhwZWN0ZWQgdXNlciBhbmQgYmFja3VwIGtleSBpZHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbW1vblZlcmlmeVdhbGxldFNpZ25hdHVyZShwYXJhbXM6IHtcbiAgd2FsbGV0U2lnbmF0dXJlOiBvcGVucGdwLktleTtcbiAgYml0Z29QdWI6IG9wZW5wZ3AuS2V5O1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xuICB1c2VyS2V5SWQ6IHN0cmluZztcbiAgYmFja3VwS2V5SWQ6IHN0cmluZztcbn0pOiBQcm9taXNlPHsgdmFsdWU6IEFycmF5QnVmZmVyIH1bXT4ge1xuICBjb25zdCB7IHdhbGxldFNpZ25hdHVyZSwgYml0Z29QdWIsIGNvbW1vbktleWNoYWluLCB1c2VyS2V5SWQsIGJhY2t1cEtleUlkIH0gPSBwYXJhbXM7XG5cbiAgLy8gQnkgZW5zdXJpbmcgdGhhdCB0aGUgZmluZ2VycHJpbnRzIG9mIHRoZSB3YWxsZXRTaWduYXR1cmUgYW5kIHRoZSBiaXRnb1B1YiBhcmUgZGlmZmVyZW50IGFuZCB0aGF0IGFueSBvZiB0aGUgcmVzdWx0c1xuICAvLyBmcm9tIGNhbGxpbmcgdmVyaWZ5UHJpbWFyeVVzZXIgaXMgdmFsaWQgd2Uga25vdyB0aGF0IHRoZSBzaWduYXR1cmUgd2FzIGFjdHVhbGx5IHByb2R1Y2VkIGJ5IHRoZSBwcml2YXRlIGtleVxuICAvLyBiZWxvbmdpbmcgdG8gdGhlIGJpdGdvUHViLlxuICBpZiAod2FsbGV0U2lnbmF0dXJlLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpID09PSBiaXRnb1B1Yi5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBIU00gR1BHIHNpZ25hdHVyZScpO1xuICB9XG5cbiAgY29uc3QgdmVyaWZpY2F0aW9uUmVzdWx0ID0gYXdhaXQgdmVyaWZ5UHJpbWFyeVVzZXJXcmFwcGVyKHdhbGxldFNpZ25hdHVyZSwgYml0Z29QdWIsIGZhbHNlKTtcbiAgY29uc3QgaXNWYWxpZCA9IHZlcmlmaWNhdGlvblJlc3VsdC5zb21lKChyZXN1bHQpID0+IHJlc3VsdC52YWxpZCk7XG4gIGlmICghaXNWYWxpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBIU00gR1BHIHNpZ25hdHVyZScpO1xuICB9XG4gIGNvbnN0IHByaW1hcnlVc2VyID0gYXdhaXQgd2FsbGV0U2lnbmF0dXJlLmdldFByaW1hcnlVc2VyKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlIHRoZSByYXdOb3RhdGlvbnMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHRoZSB0eXBlIGJ1dCBpdCBhY3R1YWxseSBleGlzdHNcbiAgY29uc3QgcmF3Tm90YXRpb25zOiB7IHZhbHVlOiBVaW50OEFycmF5IH1bXSA9IHByaW1hcnlVc2VyLnVzZXIub3RoZXJDZXJ0aWZpY2F0aW9uc1swXS5yYXdOb3RhdGlvbnM7XG5cbiAgYXNzZXJ0KHJhd05vdGF0aW9ucy5sZW5ndGggPT09IDUsICdpbnZhbGlkIHdhbGxldCBzaWduYXR1cmVzJyk7XG5cbiAgYXNzZXJ0KFxuICAgIGNvbW1vbktleWNoYWluID09PSBCdWZmZXIuZnJvbShyYXdOb3RhdGlvbnNbMF0udmFsdWUpLnRvU3RyaW5nKCksXG4gICAgJ3dhbGxldCBzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2ggY29tbW9uIGtleWNoYWluJ1xuICApO1xuICBhc3NlcnQodXNlcktleUlkID09PSBCdWZmZXIuZnJvbShyYXdOb3RhdGlvbnNbMV0udmFsdWUpLnRvU3RyaW5nKCksIGB3YWxsZXQgc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoIHVzZXIga2V5IGlkYCk7XG4gIGFzc2VydChcbiAgICBiYWNrdXBLZXlJZCA9PT0gQnVmZmVyLmZyb20ocmF3Tm90YXRpb25zWzJdLnZhbHVlKS50b1N0cmluZygpLFxuICAgICd3YWxsZXQgc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoIGJhY2t1cCBrZXkgaWQnXG4gICk7XG5cbiAgcmV0dXJuIHJhd05vdGF0aW9ucztcbn1cblxuLyoqXG4gKiBHZXRzIGNoYWxsZW5nZSBmb3IgYSB0eCByZXF1ZXN0IGZyb20gQml0R29cbiAqIHN1cHBvcnRzIE1lc3NhZ2UgYW5kIHJlZ3VsYXIgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBiaXRnb1xuICogQHBhcmFtIHdhbGxldElkXG4gKiBAcGFyYW0gdHhSZXF1ZXN0SWRcbiAqIEBwYXJhbSBpbmRleFxuICogQHBhcmFtIHJlcXVlc3RUeXBlXG4gKiBAcGFyYW0gcGFpbGxpZXJNb2R1bHVzXG4gKiBAcGFyYW0gcmVxSWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFR4UmVxdWVzdENoYWxsZW5nZShcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgaW5kZXg6IHN0cmluZyxcbiAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlLFxuICBwYWlsbGllck1vZHVsdXM6IHN0cmluZyxcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlclxuKTogUHJvbWlzZTxUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZT4ge1xuICBsZXQgYWRkZW5kdW0gPSAnJztcbiAgc3dpdGNoIChyZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgUmVxdWVzdFR5cGUudHg6XG4gICAgICBhZGRlbmR1bSA9ICcvdHJhbnNhY3Rpb25zLycgKyBpbmRleDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVxdWVzdFR5cGUubWVzc2FnZTpcbiAgICAgIGFkZGVuZHVtID0gJy9tZXNzYWdlcy8nICsgaW5kZXg7XG4gICAgICBicmVhaztcbiAgfVxuICBjb25zdCB1cmxQYXRoID0gJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eHJlcXVlc3RzLycgKyB0eFJlcXVlc3RJZCArIGFkZGVuZHVtICsgJy9jaGFsbGVuZ2UnO1xuICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gIHJldHVybiBhd2FpdCBiaXRnby5wb3N0KGJpdGdvLnVybCh1cmxQYXRoLCAyKSkuc2VuZCh7IHBhaWxsaWVyTW9kdWx1cyB9KS5yZXN1bHQoKTtcbn1cbiJdfQ==
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3Rzcy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFzQkEsd0RBa0JDO0FBV0Qsb0NBbUJDO0FBZ0JELGdEQXNDQztBQWlCRCxvREFvREM7QUFZRCxzQ0FZQztBQWFELDREQWlCQztBQU1ELGtFQXdDQztBQWFELHNEQXNCQztBQXhVRCxvREFBNEI7QUFPNUIsb0NBVWtCO0FBR2xCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRW5ELFNBQWdCLHNCQUFzQixDQUNwQyxlQUF1QyxFQUN2QyxlQUFtQyxFQUNuQyxTQUE0QjtJQUU1QixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDaEQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLDBCQUFrQixDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQzVFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztRQUNwRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFBLGdCQUFNLEVBQUMsVUFBVSxFQUFFLGlCQUFpQixTQUFTLGtCQUFrQixDQUFDLENBQUM7SUFDakUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FDaEMsS0FBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsS0FBc0I7SUFFdEIsTUFB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QUN4QixlQUF1QixFQUN2QixLQUFzQjtJQUV0QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDbEIsUUFBUSxXQUFXLEVBQUUsQ0FBQztRQUNwQixLQUFLLG1CQUFXLENBQUMsRUFBRTtZQUNqQixRQUFRLEdBQUcsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLE1BQU07UUFDUixLQUFLLG1CQUFXLENBQUMsT0FBTztZQUN0QixRQUFRLEdBQUcsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUNoQyxNQUFNO0lBQ1YsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLFVBQVUsR0FBRyxRQUFRLEdBQUcsY0FBYyxHQUFHLFdBQVcsR0FBRyxRQUFRLEdBQUcsWUFBWSxDQUFDO0lBQy9GLE1BQU0sU0FBUyxHQUFHLEtBQUssSUFBSSxJQUFJLHFCQUFhLEVBQUUsQ0FBQztJQUMvQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsT0FBTyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgb3BlbnBncCBmcm9tICdvcGVucGdwJztcblxuaW1wb3J0IHsgTVBDdjJTaWduaW5nU3RhdGUgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTVBDQWxnb3JpdGhtIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHtcbiAgUmVxdWVzdFR5cGUsXG4gIFR4UmVxdWVzdCxcbiAgdmVyaWZ5UHJpbWFyeVVzZXJXcmFwcGVyLFxuICBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgU2lnbmF0dXJlU2hhcmVUeXBlLFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBFeGNoYW5nZUNvbW1pdG1lbnRSZXNwb25zZSxcbiAgUmVxdWVzdFRyYWNlcixcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgSVJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi8uLi9hcGknO1xuXG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2JpdGdvOnRzczpjb21tb24nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJpdGdvU2lnbmF0dXJlU2hhcmUoXG4gIHNpZ25hdHVyZVNoYXJlczogU2lnbmF0dXJlU2hhcmVSZWNvcmRbXSxcbiAgc2lnbmVyU2hhcmVUeXBlOiBTaWduYXR1cmVTaGFyZVR5cGUsXG4gIHNoYXJlVHlwZTogTVBDdjJTaWduaW5nU3RhdGVcbik6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgY29uc3QgYml0Z29TaGFyZSA9IHNpZ25hdHVyZVNoYXJlcy5maW5kKChzaGFyZSkgPT4ge1xuICAgIGlmIChzaGFyZS5mcm9tICE9PSBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08gfHwgc2hhcmUudG8gIT09IHNpZ25lclNoYXJlVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShzaGFyZS5zaGFyZSkudHlwZSA9PT0gc2hhcmVUeXBlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIGFzc2VydChiaXRnb1NoYXJlLCBgTWlzc2luZyBCaXRHbyAke3NoYXJlVHlwZX0gc2lnbmF0dXJlIHNoYXJlYCk7XG4gIHJldHVybiBiaXRnb1NoYXJlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGxhdGVzdCBUeCBSZXF1ZXN0IGJ5IGlkXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IGlkXG4gKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHRoZSByZXF1ZXN0IHRyYWNlciByZXF1ZXN0IGlkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHhSZXF1ZXN0KFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyXG4pOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gIGNvbnN0IHR4UmVxdWVzdFJlcyA9IGF3YWl0IGJpdGdvXG4gICAgLmdldChiaXRnby51cmwoJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgLnF1ZXJ5KHsgdHhSZXF1ZXN0SWRzOiB0eFJlcXVlc3RJZCwgbGF0ZXN0OiAndHJ1ZScgfSlcbiAgICAucmV0cnkoMylcbiAgICAucmVzdWx0KCk7XG5cbiAgaWYgKHR4UmVxdWVzdFJlcy50eFJlcXVlc3RzLmxlbmd0aCA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBUeFJlcXVlc3Qgd2l0aCBpZCAke3R4UmVxdWVzdElkfWApO1xuICB9XG5cbiAgcmV0dXJuIHR4UmVxdWVzdFJlcy50eFJlcXVlc3RzWzBdO1xufVxuXG4vKipcbiAqIFNlbmRzIGEgU2lnbmF0dXJlIFNoYXJlXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1NpZ25hdHVyZVNoYXJlUmVjb3JkfSBzaWduYXR1cmVTaGFyZSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKiBAcGFyYW0gcmVxdWVzdFR5cGUgLSBUaGUgdHlwZSBvZiByZXF1ZXN0IGJlaW5nIHN1Ym1pdHRlZCAoZWl0aGVyIHR4IG9yIG1lc3NhZ2UgZm9yIHNpZ25pbmcpXG4gKiBAcGFyYW0gc2lnbmVyU2hhcmVcbiAqIEBwYXJhbSBtcGNBbGdvcml0aG1cbiAqIEBwYXJhbSBhcGlNb2RlXG4gKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHRoZSByZXF1ZXN0IHRyYWNlciByZXF1ZXN0IGlkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaWduYXR1cmVTaGFyZShcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gIHNpZ25lclNoYXJlPzogc3RyaW5nLFxuICBtcGNBbGdvcml0aG06ICdlZGRzYScgfCAnZWNkc2EnID0gJ2VkZHNhJyxcbiAgYXBpTW9kZTogJ2Z1bGwnIHwgJ2xpdGUnID0gJ2xpdGUnLFxuICB1c2VyUHVibGljR3BnS2V5Pzogc3RyaW5nLFxuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyXG4pOiBQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkPiB7XG4gIGxldCBhZGRlbmR1bSA9ICcnO1xuICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSBSZXF1ZXN0VHlwZS50eDpcbiAgICAgIGlmIChtcGNBbGdvcml0aG0gPT09ICdlY2RzYScgfHwgYXBpTW9kZSA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgIGFkZGVuZHVtID0gJy90cmFuc2FjdGlvbnMvMCc7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlcXVlc3RUeXBlLm1lc3NhZ2U6XG4gICAgICBpZiAobXBjQWxnb3JpdGhtID09PSAnZWNkc2EnIHx8IGFwaU1vZGUgPT09ICdmdWxsJykge1xuICAgICAgICBhZGRlbmR1bSA9ICcvbWVzc2FnZXMvMCc7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICBjb25zdCB1cmxQYXRoID0gJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eHJlcXVlc3RzLycgKyB0eFJlcXVlc3RJZCArIGFkZGVuZHVtICsgJy9zaWduYXR1cmVzaGFyZXMnO1xuICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gIC8vIFRPRE8oV0NOLTU0MSk6IGFkZCBvcHRpb25hbCBhdHRlc3RhdGlvbiBwYXNzLXRocm91Z2ggZm9yIE1QQyAvc2lnbmF0dXJlc2hhcmVzLCBmaXJzdCByb3VuZFxuICAvLyBvbmx5IChkZWZlcnJlZCB1bnRpbCBtdWx0aXNpZyBhdHRlc3RhdGlvbiwgV0NOLTUzOSwgaXMgdmVyaWZpZWQgZW5kLXRvLWVuZCBvbiBzdGFnaW5nKS5cbiAgcmV0dXJuIGJpdGdvXG4gICAgLnBvc3QoYml0Z28udXJsKHVybFBhdGgsIDIpKVxuICAgIC5zZW5kKHtcbiAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgc2lnbmVyU2hhcmUsXG4gICAgICB1c2VyUHVibGljR3BnS2V5LFxuICAgIH0pXG4gICAgLnJlc3VsdCgpO1xufVxuXG4vKipcbiAqIFNlbmRzIGEgU2lnbmF0dXJlIFNoYXJlIHVzaW5nIHRoZSBzaWduIHR4UmVxdWVzdCByb3V0ZVxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZCAgKlxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHNpZ25hdHVyZVNoYXJlc1xuICogQHBhcmFtIHJlcXVlc3RUeXBlIC0gVGhlIHR5cGUgb2YgcmVxdWVzdCBiZWluZyBzdWJtaXR0ZWQgKGVpdGhlciB0eCBvciBtZXNzYWdlIGZvciBzaWduaW5nKVxuICogQHBhcmFtIHNpZ25lclNoYXJlXG4gKiBAcGFyYW0gbXBjQWxnb3JpdGhtXG4gKiBAcGFyYW0gbXVsdGlzaWdUeXBlVmVyc2lvblxuICogQHBhcmFtIHNpZ25lckdwZ1B1YmxpY0tleVxuICogQHBhcmFtIHJlcUlkXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaWduYXR1cmVTaGFyZVYyKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaWduYXR1cmVTaGFyZXM6IFNpZ25hdHVyZVNoYXJlUmVjb3JkW10sXG4gIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgbXBjQWxnb3JpdGhtOiBNUENBbGdvcml0aG0sXG4gIHNpZ25lckdwZ1B1YmxpY0tleTogc3RyaW5nLFxuICBzaWduZXJTaGFyZT86IHN0cmluZyxcbiAgbXVsdGlzaWdUeXBlVmVyc2lvbj86ICdNUEN2MicgfCB1bmRlZmluZWQsXG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gIGNvbnN0IGFkZGVuZHVtID0gcmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLnR4ID8gJy90cmFuc2FjdGlvbnMvMCcgOiAnL21lc3NhZ2VzLzAnO1xuICBjb25zdCB1cmxQYXRoID0gJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eHJlcXVlc3RzLycgKyB0eFJlcXVlc3RJZCArIGFkZGVuZHVtICsgJy9zaWduJztcbiAgbGV0IHR5cGUgPSAnJztcbiAgaWYgKG11bHRpc2lnVHlwZVZlcnNpb24gPT09ICdNUEN2MicgJiYgbXBjQWxnb3JpdGhtID09PSAnZWNkc2EnKSB7XG4gICAgdHlwZSA9ICdlY2RzYU1wY1YyJztcbiAgfSBlbHNlIGlmIChtdWx0aXNpZ1R5cGVWZXJzaW9uID09PSAnTVBDdjInICYmIG1wY0FsZ29yaXRobSA9PT0gJ2VkZHNhJykge1xuICAgIHR5cGUgPSAnZWRkc2FNcGNWMic7XG4gIH0gZWxzZSBpZiAobXVsdGlzaWdUeXBlVmVyc2lvbiA9PT0gJ01QQ3YyJyAmJiBtcGNBbGdvcml0aG0gPT09ICdyZWRwYWxsYXMnKSB7XG4gICAgdHlwZSA9ICdyZWRwYWxsYXNNcGNWMic7XG4gIH0gZWxzZSBpZiAobXVsdGlzaWdUeXBlVmVyc2lvbiA9PT0gdW5kZWZpbmVkICYmIG1wY0FsZ29yaXRobSA9PT0gJ2VkZHNhJykge1xuICAgIHR5cGUgPSAnZWRkc2FNcGNWMSc7XG4gIH1cbiAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgdHlwZSxcbiAgICBzaWduYXR1cmVTaGFyZXMsXG4gICAgc2lnbmVyU2hhcmUsXG4gICAgc2lnbmVyR3BnUHVibGljS2V5LFxuICB9O1xuICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG5cbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSAzO1xuXG4gIHdoaWxlIChhdHRlbXB0cyA8IG1heEF0dGVtcHRzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBiaXRnby5wb3N0KGJpdGdvLnVybCh1cmxQYXRoLCAyKSkuc2VuZChyZXF1ZXN0Qm9keSkucmVzdWx0KCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyPy5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICBjb25zdCBzbGVlcFRpbWUgPSAxMDAwICogKGF0dGVtcHRzICsgMSk7XG4gICAgICAgIGRlYnVnKGBNUEMgU2lnbmluZyByYXRlIGxpbWl0IGVycm9yIC0gcmV0cnlpbmcgaW4gJHtzbGVlcFRpbWUgLyAxMDAwfSBzZWNvbmRzYCk7XG4gICAgICAgIC8vIHNsZWVwIGZvciBhIGJpdCBiZWZvcmUgcmV0cnlpbmdcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgc2xlZXBUaW1lKSk7XG4gICAgICAgIGF0dGVtcHRzKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhd2FpdCBiaXRnby5wb3N0KGJpdGdvLnVybCh1cmxQYXRoLCAyKSkuc2VuZChyZXF1ZXN0Qm9keSkucmVzdWx0KCk7XG59XG5cbi8qKlxuICogU2VuZHMgYSBUcmFuc2FjdGlvbiBSZXF1ZXN0IGZvciBicm9hZGNhc3Qgb25jZSBzaWduaW5nIGlzIGNvbXBsZXRlXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0gcmVxdWVzdFR5cGUgLSBUaGUgdHlwZSBvZiByZXF1ZXN0IGJlaW5nIHN1Ym1pdHRlZCAoZWl0aGVyIHR4IG9yIG1lc3NhZ2UgZm9yIHNpZ25pbmcpXG4gKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHJlcXVlc3QgdHJhY2VyIHJlcXVlc3QgaWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkPn0gLSBhIFNpZ25hdHVyZSBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFR4UmVxdWVzdChcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlLFxuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyXG4pOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICBjb25zdCBhZGRlbmR1bSA9IHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS50eCA/ICcvdHJhbnNhY3Rpb25zLzAnIDogJy9tZXNzYWdlcy8wJztcbiAgY29uc3QgdXJsUGF0aCA9ICcvd2FsbGV0LycgKyB3YWxsZXRJZCArICcvdHhyZXF1ZXN0cy8nICsgdHhSZXF1ZXN0SWQgKyBhZGRlbmR1bSArICcvc2VuZCc7XG4gIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gIGJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgcmV0dXJuIGJpdGdvLnBvc3QoYml0Z28udXJsKHVybFBhdGgsIDIpKS5zZW5kKCkucmVzdWx0KCk7XG59XG5cbi8qKlxuICogU2VuZHMgdGhlIGNsaWVudCBjb21taXRtZW50IGFuZCBlbmNyeXB0ZWQgc2lnbmVyIHNoYXJlIHRvIHRoZSBzZXJ2ZXIsIGdldHRpbmcgYmFjayB0aGUgc2VydmVyIGNvbW1pdG1lbnRcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZFxuICogQHBhcmFtIHtzdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHtDb21taXRtZW50U2hhcmVSZWNvcmR9IGNvbW1pdG1lbnRTaGFyZSAtIHRoZSBjbGllbnQgY29tbWl0bWVudCBzaGFyZVxuICogQHBhcmFtIHtFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZH0gZW5jcnlwdGVkU2lnbmVyU2hhcmUgLSB0aGUgY2xpZW50IGVuY3J5cHRlZCBzaWduZXIgc2hhcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXBpTW9kZV0gLSB0aGUgdHhSZXF1ZXN0IGFwaSBtb2RlIChmdWxsIG9yIGxpdGUpIC0gZGVmYXVsdHMgdG8gbGl0ZVxuICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSB0aGUgcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBJZFxuICogQHJldHVybnMge1Byb21pc2U8RXhjaGFuZ2VDb21taXRtZW50UmVzcG9uc2U+fSAtIHRoZSBzZXJ2ZXIgY29tbWl0bWVudCBzaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhjaGFuZ2VFZGRzYUNvbW1pdG1lbnRzKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBjb21taXRtZW50U2hhcmU6IENvbW1pdG1lbnRTaGFyZVJlY29yZCxcbiAgZW5jcnlwdGVkU2lnbmVyU2hhcmU6IEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBhcGlNb2RlOiAnZnVsbCcgfCAnbGl0ZScgPSAnbGl0ZScsXG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbik6IFByb21pc2U8RXhjaGFuZ2VDb21taXRtZW50UmVzcG9uc2U+IHtcbiAgbGV0IGFkZGVuZHVtID0gJyc7XG4gIGlmIChhcGlNb2RlID09PSAnZnVsbCcpIHtcbiAgICBhZGRlbmR1bSA9ICcvdHJhbnNhY3Rpb25zLzAnO1xuICB9XG4gIGNvbnN0IHVybFBhdGggPSAnL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4cmVxdWVzdHMvJyArIHR4UmVxdWVzdElkICsgYWRkZW5kdW0gKyAnL2NvbW1pdCc7XG4gIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gIGJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgcmV0dXJuIGF3YWl0IGJpdGdvLnBvc3QoYml0Z28udXJsKHVybFBhdGgsIDIpKS5zZW5kKHsgY29tbWl0bWVudFNoYXJlLCBlbmNyeXB0ZWRTaWduZXJTaGFyZSB9KS5yZXN1bHQoKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGEgVFNTIHdhbGxldCBzaWduYXR1cmUgd2FzIHByb2R1Y2VkIHdpdGggdGhlIGV4cGVjdGVkIGtleSBhbmQgdGhhdCB0aGUgc2lnbmVkIGRhdGEgY29udGFpbnMgdGhlXG4gKiBleHBlY3RlZCBjb21tb24ga2V5Y2hhaW4gYXMgd2VsbCBhcyB0aGUgZXhwZWN0ZWQgdXNlciBhbmQgYmFja3VwIGtleSBpZHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbW1vblZlcmlmeVdhbGxldFNpZ25hdHVyZShwYXJhbXM6IHtcbiAgd2FsbGV0U2lnbmF0dXJlOiBvcGVucGdwLktleTtcbiAgYml0Z29QdWI6IG9wZW5wZ3AuS2V5O1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xuICB1c2VyS2V5SWQ6IHN0cmluZztcbiAgYmFja3VwS2V5SWQ6IHN0cmluZztcbn0pOiBQcm9taXNlPHsgdmFsdWU6IEFycmF5QnVmZmVyIH1bXT4ge1xuICBjb25zdCB7IHdhbGxldFNpZ25hdHVyZSwgYml0Z29QdWIsIGNvbW1vbktleWNoYWluLCB1c2VyS2V5SWQsIGJhY2t1cEtleUlkIH0gPSBwYXJhbXM7XG5cbiAgLy8gQnkgZW5zdXJpbmcgdGhhdCB0aGUgZmluZ2VycHJpbnRzIG9mIHRoZSB3YWxsZXRTaWduYXR1cmUgYW5kIHRoZSBiaXRnb1B1YiBhcmUgZGlmZmVyZW50IGFuZCB0aGF0IGFueSBvZiB0aGUgcmVzdWx0c1xuICAvLyBmcm9tIGNhbGxpbmcgdmVyaWZ5UHJpbWFyeVVzZXIgaXMgdmFsaWQgd2Uga25vdyB0aGF0IHRoZSBzaWduYXR1cmUgd2FzIGFjdHVhbGx5IHByb2R1Y2VkIGJ5IHRoZSBwcml2YXRlIGtleVxuICAvLyBiZWxvbmdpbmcgdG8gdGhlIGJpdGdvUHViLlxuICBpZiAod2FsbGV0U2lnbmF0dXJlLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpID09PSBiaXRnb1B1Yi5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBIU00gR1BHIHNpZ25hdHVyZScpO1xuICB9XG5cbiAgY29uc3QgdmVyaWZpY2F0aW9uUmVzdWx0ID0gYXdhaXQgdmVyaWZ5UHJpbWFyeVVzZXJXcmFwcGVyKHdhbGxldFNpZ25hdHVyZSwgYml0Z29QdWIsIGZhbHNlKTtcbiAgY29uc3QgaXNWYWxpZCA9IHZlcmlmaWNhdGlvblJlc3VsdC5zb21lKChyZXN1bHQpID0+IHJlc3VsdC52YWxpZCk7XG4gIGlmICghaXNWYWxpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBIU00gR1BHIHNpZ25hdHVyZScpO1xuICB9XG4gIGNvbnN0IHByaW1hcnlVc2VyID0gYXdhaXQgd2FsbGV0U2lnbmF0dXJlLmdldFByaW1hcnlVc2VyKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlIHRoZSByYXdOb3RhdGlvbnMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHRoZSB0eXBlIGJ1dCBpdCBhY3R1YWxseSBleGlzdHNcbiAgY29uc3QgcmF3Tm90YXRpb25zOiB7IHZhbHVlOiBVaW50OEFycmF5IH1bXSA9IHByaW1hcnlVc2VyLnVzZXIub3RoZXJDZXJ0aWZpY2F0aW9uc1swXS5yYXdOb3RhdGlvbnM7XG5cbiAgYXNzZXJ0KHJhd05vdGF0aW9ucy5sZW5ndGggPT09IDUsICdpbnZhbGlkIHdhbGxldCBzaWduYXR1cmVzJyk7XG5cbiAgYXNzZXJ0KFxuICAgIGNvbW1vbktleWNoYWluID09PSBCdWZmZXIuZnJvbShyYXdOb3RhdGlvbnNbMF0udmFsdWUpLnRvU3RyaW5nKCksXG4gICAgJ3dhbGxldCBzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2ggY29tbW9uIGtleWNoYWluJ1xuICApO1xuICBhc3NlcnQodXNlcktleUlkID09PSBCdWZmZXIuZnJvbShyYXdOb3RhdGlvbnNbMV0udmFsdWUpLnRvU3RyaW5nKCksIGB3YWxsZXQgc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoIHVzZXIga2V5IGlkYCk7XG4gIGFzc2VydChcbiAgICBiYWNrdXBLZXlJZCA9PT0gQnVmZmVyLmZyb20ocmF3Tm90YXRpb25zWzJdLnZhbHVlKS50b1N0cmluZygpLFxuICAgICd3YWxsZXQgc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoIGJhY2t1cCBrZXkgaWQnXG4gICk7XG5cbiAgcmV0dXJuIHJhd05vdGF0aW9ucztcbn1cblxuLyoqXG4gKiBHZXRzIGNoYWxsZW5nZSBmb3IgYSB0eCByZXF1ZXN0IGZyb20gQml0R29cbiAqIHN1cHBvcnRzIE1lc3NhZ2UgYW5kIHJlZ3VsYXIgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBiaXRnb1xuICogQHBhcmFtIHdhbGxldElkXG4gKiBAcGFyYW0gdHhSZXF1ZXN0SWRcbiAqIEBwYXJhbSBpbmRleFxuICogQHBhcmFtIHJlcXVlc3RUeXBlXG4gKiBAcGFyYW0gcGFpbGxpZXJNb2R1bHVzXG4gKiBAcGFyYW0gcmVxSWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFR4UmVxdWVzdENoYWxsZW5nZShcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgaW5kZXg6IHN0cmluZyxcbiAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlLFxuICBwYWlsbGllck1vZHVsdXM6IHN0cmluZyxcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlclxuKTogUHJvbWlzZTxUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZT4ge1xuICBsZXQgYWRkZW5kdW0gPSAnJztcbiAgc3dpdGNoIChyZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgUmVxdWVzdFR5cGUudHg6XG4gICAgICBhZGRlbmR1bSA9ICcvdHJhbnNhY3Rpb25zLycgKyBpbmRleDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVxdWVzdFR5cGUubWVzc2FnZTpcbiAgICAgIGFkZGVuZHVtID0gJy9tZXNzYWdlcy8nICsgaW5kZXg7XG4gICAgICBicmVhaztcbiAgfVxuICBjb25zdCB1cmxQYXRoID0gJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eHJlcXVlc3RzLycgKyB0eFJlcXVlc3RJZCArIGFkZGVuZHVtICsgJy9jaGFsbGVuZ2UnO1xuICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gIHJldHVybiBhd2FpdCBiaXRnby5wb3N0KGJpdGdvLnVybCh1cmxQYXRoLCAyKSkuc2VuZCh7IHBhaWxsaWVyTW9kdWx1cyB9KS5yZXN1bHQoKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as openpgp from 'openpgp';
|
|
2
|
+
import { RedPallasMPSTypes } from '@bitgo/sdk-lib-mpc';
|
|
3
|
+
import { RedpallasMPCv2SignatureShareRound1Output, RedpallasMPCv2SignatureShareRound2Output, RedpallasMPCv2SignatureShareRound3Output } from '@bitgo/public-types';
|
|
4
|
+
import { SignatureShareRecord } from '../../utils/tss/baseTypes';
|
|
5
|
+
import { MPCv2PartiesEnum } from '../../utils/tss/ecdsa/typesMPCv2';
|
|
6
|
+
type SignerPartyId = MPCv2PartiesEnum.USER | MPCv2PartiesEnum.BACKUP;
|
|
7
|
+
/**
|
|
8
|
+
* RedPallas MPS DSG signature-share helpers.
|
|
9
|
+
*
|
|
10
|
+
* Groundwork for a future custodial/cold (SMC/OVC) DSG signing flow - not yet wired up to any
|
|
11
|
+
* caller in this SDK. Mirrors `../eddsa/eddsaMPCv2.ts` (same 3-round shape, same PGP-signed-
|
|
12
|
+
* message envelope), but kept as an independent copy - built on `RedPallasMPSComms` - so
|
|
13
|
+
* RedPallas MPS never depends on the EdDSA MPS module, and vice versa.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Builds the round-1 signature share record.
|
|
17
|
+
*
|
|
18
|
+
* PGP-signs the WASM round-0 broadcast message with the signer's ephemeral key and
|
|
19
|
+
* wraps it into a SignatureShareRecord ready for `sendSignatureShareV2`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getSignatureShareRoundOne(userMsg1: RedPallasMPSTypes.DeserializedMessage, userGpgPrivKey: openpgp.PrivateKey, partyId?: SignerPartyId, otherSignerPartyId?: MPCv2PartiesEnum): Promise<SignatureShareRecord>;
|
|
22
|
+
/**
|
|
23
|
+
* Verifies the peer's round-1 PGP signature and returns the raw deserialized
|
|
24
|
+
* message ready for `RedPallasDSG.handleIncomingMessages`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function verifyPeerMessageRoundOne(parsedRound1Output: RedpallasMPCv2SignatureShareRound1Output, peerGpgKey: openpgp.Key, peerPartyId?: MPCv2PartiesEnum): Promise<RedPallasMPSTypes.DeserializedMessage>;
|
|
27
|
+
/**
|
|
28
|
+
* Builds the round-2 signature share record.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getSignatureShareRoundTwo(userMsg2: RedPallasMPSTypes.DeserializedMessage, userGpgPrivKey: openpgp.PrivateKey, partyId?: SignerPartyId, otherSignerPartyId?: MPCv2PartiesEnum): Promise<SignatureShareRecord>;
|
|
31
|
+
/**
|
|
32
|
+
* Verifies the peer's round-2 PGP signature and returns the raw deserialized
|
|
33
|
+
* message ready for `RedPallasDSG.handleIncomingMessages`.
|
|
34
|
+
*/
|
|
35
|
+
export declare function verifyPeerMessageRoundTwo(parsedRound2Output: RedpallasMPCv2SignatureShareRound2Output, peerGpgKey: openpgp.Key, peerPartyId?: MPCv2PartiesEnum): Promise<RedPallasMPSTypes.DeserializedMessage>;
|
|
36
|
+
/**
|
|
37
|
+
* Verifies the peer's round-3 PGP signature and returns the raw deserialized
|
|
38
|
+
* message ready for `RedPallasDSG.handleIncomingMessages`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function verifyPeerMessageRoundThree(parsedRound3Output: RedpallasMPCv2SignatureShareRound3Output, peerGpgKey: openpgp.Key, peerPartyId?: MPCv2PartiesEnum): Promise<RedPallasMPSTypes.DeserializedMessage>;
|
|
41
|
+
/**
|
|
42
|
+
* Builds the round-3 signature share record (final signer message).
|
|
43
|
+
*
|
|
44
|
+
* There is no corresponding `verifyBitGoMessageRoundThree` because Wallet Platform
|
|
45
|
+
* finalises the signing server-side after receiving round 3; the client obtains the
|
|
46
|
+
* signed transaction via `sendTxRequest`.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getSignatureShareRoundThree(userMsg3: RedPallasMPSTypes.DeserializedMessage, userGpgPrivKey: openpgp.PrivateKey, partyId?: SignerPartyId, otherSignerPartyId?: MPCv2PartiesEnum): Promise<SignatureShareRecord>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=redpallasMPCv2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redpallasMPCv2.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/redpallas/redpallasMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAqB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAEL,wCAAwC,EAExC,wCAAwC,EAExC,wCAAwC,EACzC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAsB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,KAAK,aAAa,GAAG,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC;AAarE;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,iBAAiB,CAAC,mBAAmB,EAC/C,cAAc,EAAE,OAAO,CAAC,UAAU,EAClC,OAAO,GAAE,aAAqC,EAC9C,kBAAkB,GAAE,gBAAyC,GAC5D,OAAO,CAAC,oBAAoB,CAAC,CAW/B;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,kBAAkB,EAAE,wCAAwC,EAC5D,UAAU,EAAE,OAAO,CAAC,GAAG,EACvB,WAAW,GAAE,gBAAyC,GACrD,OAAO,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAMhD;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,iBAAiB,CAAC,mBAAmB,EAC/C,cAAc,EAAE,OAAO,CAAC,UAAU,EAClC,OAAO,GAAE,aAAqC,EAC9C,kBAAkB,GAAE,gBAAyC,GAC5D,OAAO,CAAC,oBAAoB,CAAC,CAW/B;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,kBAAkB,EAAE,wCAAwC,EAC5D,UAAU,EAAE,OAAO,CAAC,GAAG,EACvB,WAAW,GAAE,gBAAyC,GACrD,OAAO,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAMhD;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,kBAAkB,EAAE,wCAAwC,EAC5D,UAAU,EAAE,OAAO,CAAC,GAAG,EACvB,WAAW,GAAE,gBAAyC,GACrD,OAAO,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAGhD;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,iBAAiB,CAAC,mBAAmB,EAC/C,cAAc,EAAE,OAAO,CAAC,UAAU,EAClC,OAAO,GAAE,aAAqC,EAC9C,kBAAkB,GAAE,gBAAyC,GAC5D,OAAO,CAAC,oBAAoB,CAAC,CAW/B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSignatureShareRoundOne = getSignatureShareRoundOne;
|
|
4
|
+
exports.verifyPeerMessageRoundOne = verifyPeerMessageRoundOne;
|
|
5
|
+
exports.getSignatureShareRoundTwo = getSignatureShareRoundTwo;
|
|
6
|
+
exports.verifyPeerMessageRoundTwo = verifyPeerMessageRoundTwo;
|
|
7
|
+
exports.verifyPeerMessageRoundThree = verifyPeerMessageRoundThree;
|
|
8
|
+
exports.getSignatureShareRoundThree = getSignatureShareRoundThree;
|
|
9
|
+
const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
|
|
10
|
+
const baseTypes_1 = require("../../utils/tss/baseTypes");
|
|
11
|
+
const typesMPCv2_1 = require("../../utils/tss/ecdsa/typesMPCv2");
|
|
12
|
+
function partyIdToSignatureShareType(partyId) {
|
|
13
|
+
switch (partyId) {
|
|
14
|
+
case typesMPCv2_1.MPCv2PartiesEnum.USER:
|
|
15
|
+
return baseTypes_1.SignatureShareType.USER;
|
|
16
|
+
case typesMPCv2_1.MPCv2PartiesEnum.BACKUP:
|
|
17
|
+
return baseTypes_1.SignatureShareType.BACKUP;
|
|
18
|
+
case typesMPCv2_1.MPCv2PartiesEnum.BITGO:
|
|
19
|
+
return baseTypes_1.SignatureShareType.BITGO;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* RedPallas MPS DSG signature-share helpers.
|
|
24
|
+
*
|
|
25
|
+
* Groundwork for a future custodial/cold (SMC/OVC) DSG signing flow - not yet wired up to any
|
|
26
|
+
* caller in this SDK. Mirrors `../eddsa/eddsaMPCv2.ts` (same 3-round shape, same PGP-signed-
|
|
27
|
+
* message envelope), but kept as an independent copy - built on `RedPallasMPSComms` - so
|
|
28
|
+
* RedPallas MPS never depends on the EdDSA MPS module, and vice versa.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Builds the round-1 signature share record.
|
|
32
|
+
*
|
|
33
|
+
* PGP-signs the WASM round-0 broadcast message with the signer's ephemeral key and
|
|
34
|
+
* wraps it into a SignatureShareRecord ready for `sendSignatureShareV2`.
|
|
35
|
+
*/
|
|
36
|
+
async function getSignatureShareRoundOne(userMsg1, userGpgPrivKey, partyId = typesMPCv2_1.MPCv2PartiesEnum.USER, otherSignerPartyId = typesMPCv2_1.MPCv2PartiesEnum.BITGO) {
|
|
37
|
+
const signedMsg1 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(userMsg1.payload), userGpgPrivKey);
|
|
38
|
+
const share = {
|
|
39
|
+
type: 'round1Input',
|
|
40
|
+
data: { msg1: signedMsg1 },
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
from: partyIdToSignatureShareType(partyId),
|
|
44
|
+
to: partyIdToSignatureShareType(otherSignerPartyId),
|
|
45
|
+
share: JSON.stringify(share),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Verifies the peer's round-1 PGP signature and returns the raw deserialized
|
|
50
|
+
* message ready for `RedPallasDSG.handleIncomingMessages`.
|
|
51
|
+
*/
|
|
52
|
+
async function verifyPeerMessageRoundOne(parsedRound1Output, peerGpgKey, peerPartyId = typesMPCv2_1.MPCv2PartiesEnum.BITGO) {
|
|
53
|
+
const rawBytes = await sdk_lib_mpc_1.RedPallasMPSComms.verifyMpsMessage(parsedRound1Output.data.msg1, peerGpgKey);
|
|
54
|
+
return {
|
|
55
|
+
from: peerPartyId,
|
|
56
|
+
payload: new Uint8Array(rawBytes),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Builds the round-2 signature share record.
|
|
61
|
+
*/
|
|
62
|
+
async function getSignatureShareRoundTwo(userMsg2, userGpgPrivKey, partyId = typesMPCv2_1.MPCv2PartiesEnum.USER, otherSignerPartyId = typesMPCv2_1.MPCv2PartiesEnum.BITGO) {
|
|
63
|
+
const signedMsg2 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(userMsg2.payload), userGpgPrivKey);
|
|
64
|
+
const share = {
|
|
65
|
+
type: 'round2Input',
|
|
66
|
+
data: { msg2: signedMsg2 },
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
from: partyIdToSignatureShareType(partyId),
|
|
70
|
+
to: partyIdToSignatureShareType(otherSignerPartyId),
|
|
71
|
+
share: JSON.stringify(share),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Verifies the peer's round-2 PGP signature and returns the raw deserialized
|
|
76
|
+
* message ready for `RedPallasDSG.handleIncomingMessages`.
|
|
77
|
+
*/
|
|
78
|
+
async function verifyPeerMessageRoundTwo(parsedRound2Output, peerGpgKey, peerPartyId = typesMPCv2_1.MPCv2PartiesEnum.BITGO) {
|
|
79
|
+
const rawBytes = await sdk_lib_mpc_1.RedPallasMPSComms.verifyMpsMessage(parsedRound2Output.data.msg2, peerGpgKey);
|
|
80
|
+
return {
|
|
81
|
+
from: peerPartyId,
|
|
82
|
+
payload: new Uint8Array(rawBytes),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Verifies the peer's round-3 PGP signature and returns the raw deserialized
|
|
87
|
+
* message ready for `RedPallasDSG.handleIncomingMessages`.
|
|
88
|
+
*/
|
|
89
|
+
async function verifyPeerMessageRoundThree(parsedRound3Output, peerGpgKey, peerPartyId = typesMPCv2_1.MPCv2PartiesEnum.BITGO) {
|
|
90
|
+
const rawBytes = await sdk_lib_mpc_1.RedPallasMPSComms.verifyMpsMessage(parsedRound3Output.data.msg3, peerGpgKey);
|
|
91
|
+
return { from: peerPartyId, payload: new Uint8Array(rawBytes) };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Builds the round-3 signature share record (final signer message).
|
|
95
|
+
*
|
|
96
|
+
* There is no corresponding `verifyBitGoMessageRoundThree` because Wallet Platform
|
|
97
|
+
* finalises the signing server-side after receiving round 3; the client obtains the
|
|
98
|
+
* signed transaction via `sendTxRequest`.
|
|
99
|
+
*/
|
|
100
|
+
async function getSignatureShareRoundThree(userMsg3, userGpgPrivKey, partyId = typesMPCv2_1.MPCv2PartiesEnum.USER, otherSignerPartyId = typesMPCv2_1.MPCv2PartiesEnum.BITGO) {
|
|
101
|
+
const signedMsg3 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(userMsg3.payload), userGpgPrivKey);
|
|
102
|
+
const share = {
|
|
103
|
+
type: 'round3Input',
|
|
104
|
+
data: { msg3: signedMsg3 },
|
|
105
|
+
};
|
|
106
|
+
return {
|
|
107
|
+
from: partyIdToSignatureShareType(partyId),
|
|
108
|
+
to: partyIdToSignatureShareType(otherSignerPartyId),
|
|
109
|
+
share: JSON.stringify(share),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkcGFsbGFzTVBDdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL3JlZHBhbGxhcy9yZWRwYWxsYXNNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXlDQSw4REFnQkM7QUFNRCw4REFVQztBQUtELDhEQWdCQztBQU1ELDhEQVVDO0FBTUQsa0VBT0M7QUFTRCxrRUFnQkM7QUFuSkQsb0RBQTBFO0FBUzFFLHlEQUFxRjtBQUNyRixpRUFBb0U7QUFJcEUsU0FBUywyQkFBMkIsQ0FBQyxPQUF5QjtJQUM1RCxRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssNkJBQWdCLENBQUMsSUFBSTtZQUN4QixPQUFPLDhCQUFrQixDQUFDLElBQUksQ0FBQztRQUNqQyxLQUFLLDZCQUFnQixDQUFDLE1BQU07WUFDMUIsT0FBTyw4QkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFDbkMsS0FBSyw2QkFBZ0IsQ0FBQyxLQUFLO1lBQ3pCLE9BQU8sOEJBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUVIOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLHlCQUF5QixDQUM3QyxRQUErQyxFQUMvQyxjQUFrQyxFQUNsQyxVQUF5Qiw2QkFBZ0IsQ0FBQyxJQUFJLEVBQzlDLHFCQUF1Qyw2QkFBZ0IsQ0FBQyxLQUFLO0lBRTdELE1BQU0sVUFBVSxHQUFHLE1BQU0sK0JBQWlCLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0csTUFBTSxLQUFLLEdBQTRDO1FBQ3JELElBQUksRUFBRSxhQUFhO1FBQ25CLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7S0FDM0IsQ0FBQztJQUNGLE9BQU87UUFDTCxJQUFJLEVBQUUsMkJBQTJCLENBQUMsT0FB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RUFBRSxFQUFFLDJCQUEyQixDQUFDLGtCQUFrQixDQUFDO1FBQ25ELEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztLQUM3QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgeyBSZWRQYWxsYXNNUFNDb21tcywgUmVkUGFsbGFzTVBTVHlwZXMgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHtcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMUlucHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxT3V0cHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM091dHB1dCxcbn0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBTaWduYXR1cmVTaGFyZVJlY29yZCwgU2lnbmF0dXJlU2hhcmVUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHNzL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHNzL2VjZHNhL3R5cGVzTVBDdjInO1xuXG50eXBlIFNpZ25lclBhcnR5SWQgPSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIgfCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUDtcblxuZnVuY3Rpb24gcGFydHlJZFRvU2lnbmF0dXJlU2hhcmVUeXBlKHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0pOiBTaWduYXR1cmVTaGFyZVR5cGUge1xuICBzd2l0Y2ggKHBhcnR5SWQpIHtcbiAgICBjYXNlIE1QQ3YyUGFydGllc0VudW0uVVNFUjpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUjtcbiAgICBjYXNlIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVA7XG4gICAgY2FzZSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTztcbiAgfVxufVxuXG4vKipcbiAqIFJlZFBhbGxhcyBNUFMgRFNHIHNpZ25hdHVyZS1zaGFyZSBoZWxwZXJzLlxuICpcbiAqIEdyb3VuZHdvcmsgZm9yIGEgZnV0dXJlIGN1c3RvZGlhbC9jb2xkIChTTUMvT1ZDKSBEU0cgc2lnbmluZyBmbG93IC0gbm90IHlldCB3aXJlZCB1cCB0byBhbnlcbiAqIGNhbGxlciBpbiB0aGlzIFNESy4gTWlycm9ycyBgLi4vZWRkc2EvZWRkc2FNUEN2Mi50c2AgKHNhbWUgMy1yb3VuZCBzaGFwZSwgc2FtZSBQR1Atc2lnbmVkLVxuICogbWVzc2FnZSBlbnZlbG9wZSksIGJ1dCBrZXB0IGFzIGFuIGluZGVwZW5kZW50IGNvcHkgLSBidWlsdCBvbiBgUmVkUGFsbGFzTVBTQ29tbXNgIC0gc29cbiAqIFJlZFBhbGxhcyBNUFMgbmV2ZXIgZGVwZW5kcyBvbiB0aGUgRWREU0EgTVBTIG1vZHVsZSwgYW5kIHZpY2UgdmVyc2EuXG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHJvdW5kLTEgc2lnbmF0dXJlIHNoYXJlIHJlY29yZC5cbiAqXG4gKiBQR1Atc2lnbnMgdGhlIFdBU00gcm91bmQtMCBicm9hZGNhc3QgbWVzc2FnZSB3aXRoIHRoZSBzaWduZXIncyBlcGhlbWVyYWwga2V5IGFuZFxuICogd3JhcHMgaXQgaW50byBhIFNpZ25hdHVyZVNoYXJlUmVjb3JkIHJlYWR5IGZvciBgc2VuZFNpZ25hdHVyZVNoYXJlVjJgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZShcbiAgdXNlck1zZzE6IFJlZFBhbGxhc01QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2UsXG4gIHVzZXJHcGdQcml2S2V5OiBvcGVucGdwLlByaXZhdGVLZXksXG4gIHBhcnR5SWQ6IFNpZ25lclBhcnR5SWQgPSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gIG90aGVyU2lnbmVyUGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bSA9IE1QQ3YyUGFydGllc0VudW0uQklUR09cbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+IHtcbiAgY29uc3Qgc2lnbmVkTXNnMSA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKHVzZXJNc2cxLnBheWxvYWQpLCB1c2VyR3BnUHJpdktleSk7XG4gIGNvbnN0IHNoYXJlOiBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQgPSB7XG4gICAgdHlwZTogJ3JvdW5kMUlucHV0JyxcbiAgICBkYXRhOiB7IG1zZzE6IHNpZ25lZE1zZzEgfSxcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBmcm9tOiBwYXJ0eUlkVG9TaWduYXR1cmVTaGFyZVR5cGUocGFydHlJZCksXG4gICAgdG86IHBhcnR5SWRUb1NpZ25hdHVyZVNoYXJlVHlwZShvdGhlclNpZ25lclBhcnR5SWQpLFxuICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeShzaGFyZSksXG4gIH07XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhlIHBlZXIncyByb3VuZC0xIFBHUCBzaWduYXR1cmUgYW5kIHJldHVybnMgdGhlIHJhdyBkZXNlcmlhbGl6ZWRcbiAqIG1lc3NhZ2UgcmVhZHkgZm9yIGBSZWRQYWxsYXNEU0cuaGFuZGxlSW5jb21pbmdNZXNzYWdlc2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lKFxuICBwYXJzZWRSb3VuZDFPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIHBlZXJHcGdLZXk6IG9wZW5wZ3AuS2V5LFxuICBwZWVyUGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bSA9IE1QQ3YyUGFydGllc0VudW0uQklUR09cbik6IFByb21pc2U8UmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZT4ge1xuICBjb25zdCByYXdCeXRlcyA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGFyc2VkUm91bmQxT3V0cHV0LmRhdGEubXNnMSwgcGVlckdwZ0tleSk7XG4gIHJldHVybiB7XG4gICAgZnJvbTogcGVlclBhcnR5SWQsXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkocmF3Qnl0ZXMpLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcm91bmQtMiBzaWduYXR1cmUgc2hhcmUgcmVjb3JkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byhcbiAgdXNlck1zZzI6IFJlZFBhbGxhc01QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2UsXG4gIHVzZXJHcGdQcml2S2V5OiBvcGVucGdwLlByaXZhdGVLZXksXG4gIHBhcnR5SWQ6IFNpZ25lclBhcnR5SWQgPSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gIG90aGVyU2lnbmVyUGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bSA9IE1QQ3YyUGFydGllc0VudW0uQklUR09cbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+IHtcbiAgY29uc3Qgc2lnbmVkTXNnMiA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKHVzZXJNc2cyLnBheWxvYWQpLCB1c2VyR3BnUHJpdktleSk7XG4gIGNvbnN0IHNoYXJlOiBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQgPSB7XG4gICAgdHlwZTogJ3JvdW5kMklucHV0JyxcbiAgICBkYXRhOiB7IG1zZzI6IHNpZ25lZE1zZzIgfSxcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBmcm9tOiBwYXJ0eUlkVG9TaWduYXR1cmVTaGFyZVR5cGUocGFydHlJZCksXG4gICAgdG86IHBhcnR5SWRUb1NpZ25hdHVyZVNoYXJlVHlwZShvdGhlclNpZ25lclBhcnR5SWQpLFxuICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeShzaGFyZSksXG4gIH07XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhlIHBlZXIncyByb3VuZC0yIFBHUCBzaWduYXR1cmUgYW5kIHJldHVybnMgdGhlIHJhdyBkZXNlcmlhbGl6ZWRcbiAqIG1lc3NhZ2UgcmVhZHkgZm9yIGBSZWRQYWxsYXNEU0cuaGFuZGxlSW5jb21pbmdNZXNzYWdlc2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvKFxuICBwYXJzZWRSb3VuZDJPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQsXG4gIHBlZXJHcGdLZXk6IG9wZW5wZ3AuS2V5LFxuICBwZWVyUGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bSA9IE1QQ3YyUGFydGllc0VudW0uQklUR09cbik6IFByb21pc2U8UmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZT4ge1xuICBjb25zdCByYXdCeXRlcyA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGFyc2VkUm91bmQyT3V0cHV0LmRhdGEubXNnMiwgcGVlckdwZ0tleSk7XG4gIHJldHVybiB7XG4gICAgZnJvbTogcGVlclBhcnR5SWQsXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkocmF3Qnl0ZXMpLFxuICB9O1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoZSBwZWVyJ3Mgcm91bmQtMyBQR1Agc2lnbmF0dXJlIGFuZCByZXR1cm5zIHRoZSByYXcgZGVzZXJpYWxpemVkXG4gKiBtZXNzYWdlIHJlYWR5IGZvciBgUmVkUGFsbGFzRFNHLmhhbmRsZUluY29taW5nTWVzc2FnZXNgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFRocmVlKFxuICBwYXJzZWRSb3VuZDNPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNPdXRwdXQsXG4gIHBlZXJHcGdLZXk6IG9wZW5wZ3AuS2V5LFxuICBwZWVyUGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bSA9IE1QQ3YyUGFydGllc0VudW0uQklUR09cbik6IFByb21pc2U8UmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZT4ge1xuICBjb25zdCByYXdCeXRlcyA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGFyc2VkUm91bmQzT3V0cHV0LmRhdGEubXNnMywgcGVlckdwZ0tleSk7XG4gIHJldHVybiB7IGZyb206IHBlZXJQYXJ0eUlkLCBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyYXdCeXRlcykgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHJvdW5kLTMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZCAoZmluYWwgc2lnbmVyIG1lc3NhZ2UpLlxuICpcbiAqIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgYHZlcmlmeUJpdEdvTWVzc2FnZVJvdW5kVGhyZWVgIGJlY2F1c2UgV2FsbGV0IFBsYXRmb3JtXG4gKiBmaW5hbGlzZXMgdGhlIHNpZ25pbmcgc2VydmVyLXNpZGUgYWZ0ZXIgcmVjZWl2aW5nIHJvdW5kIDM7IHRoZSBjbGllbnQgb2J0YWlucyB0aGVcbiAqIHNpZ25lZCB0cmFuc2FjdGlvbiB2aWEgYHNlbmRUeFJlcXVlc3RgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlKFxuICB1c2VyTXNnMzogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSxcbiAgdXNlckdwZ1ByaXZLZXk6IG9wZW5wZ3AuUHJpdmF0ZUtleSxcbiAgcGFydHlJZDogU2lnbmVyUGFydHlJZCA9IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgb3RoZXJTaWduZXJQYXJ0eUlkOiBNUEN2MlBhcnRpZXNFbnVtID0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD4ge1xuICBjb25zdCBzaWduZWRNc2czID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20odXNlck1zZzMucGF5bG9hZCksIHVzZXJHcGdQcml2S2V5KTtcbiAgY29uc3Qgc2hhcmU6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCA9IHtcbiAgICB0eXBlOiAncm91bmQzSW5wdXQnLFxuICAgIGRhdGE6IHsgbXNnMzogc2lnbmVkTXNnMyB9LFxuICB9O1xuICByZXR1cm4ge1xuICAgIGZyb206IHBhcnR5SWRUb1NpZ25hdHVyZVNoYXJlVHlwZShwYXJ0eUlkKSxcbiAgICB0bzogcGFydHlJZFRvU2lnbmF0dXJlU2hhcmVUeXBlKG90aGVyU2lnbmVyUGFydHlJZCksXG4gICAgc2hhcmU6IEpTT04uc3RyaW5naWZ5KHNoYXJlKSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mpcUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/mpcUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwC,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAsB,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE/F,OAAO,EAEL,eAAe,EACf,oCAAoC,EACpC,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAElB,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;cAKjC,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;cAiBjG,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACvC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;IAsCpB;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,YAAY,CAAC,EAAE,yBAAyB,CAAC;KAC1C,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE7B;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,oCAAoC,GAAG,eAAe;
|
|
1
|
+
{"version":3,"file":"mpcUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/mpcUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwC,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAsB,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE/F,OAAO,EAEL,eAAe,EACf,oCAAoC,EACpC,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAElB,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;cAKjC,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;cAiBjG,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACvC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;IAsCpB;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,YAAY,CAAC,EAAE,yBAAyB,CAAC;KAC1C,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE7B;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,oCAAoC,GAAG,eAAe;IAyRlG,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,4BAA4B,GAAG,MAAM,GAAG,SAAS;CAY/F"}
|