@bitgo-beta/abstract-cosmos 1.0.1-beta.6 → 1.0.1-beta.600
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/.eslintignore +1 -1
- package/CHANGELOG.md +786 -0
- package/dist/resources/MsgCompiled.d.ts +1212 -0
- package/dist/resources/MsgCompiled.js +2761 -0
- package/dist/src/cosmosCoin.d.ts +93 -6
- package/dist/src/cosmosCoin.d.ts.map +1 -1
- package/dist/src/cosmosCoin.js +380 -119
- package/dist/src/index.js +6 -2
- package/dist/src/lib/ContractCallBuilder.d.ts +13 -0
- package/dist/src/lib/ContractCallBuilder.d.ts.map +1 -0
- package/dist/src/lib/ContractCallBuilder.js +61 -0
- package/dist/src/lib/StakingActivateBuilder.d.ts +13 -0
- package/dist/src/lib/StakingActivateBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingActivateBuilder.js +61 -0
- package/dist/src/lib/StakingDeactivateBuilder.d.ts +13 -0
- package/dist/src/lib/StakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingDeactivateBuilder.js +61 -0
- package/dist/src/lib/StakingRedelegateBuilder.d.ts +13 -0
- package/dist/src/lib/StakingRedelegateBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingRedelegateBuilder.js +61 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts +13 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.js +61 -0
- package/dist/src/lib/constants.d.ts +4 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +6 -2
- package/dist/src/lib/iface.d.ts +45 -4
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +18 -1
- package/dist/src/lib/index.d.ts +7 -1
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +43 -5
- package/dist/src/lib/keyPair.js +6 -7
- package/dist/src/lib/transaction.d.ts +13 -2
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +159 -73
- package/dist/src/lib/transactionBuilder.d.ts +31 -6
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +99 -4
- package/dist/src/lib/transferBuilder.d.ts +13 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +61 -0
- package/dist/src/lib/utils.d.ts +199 -12
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +498 -33
- package/dist/tsconfig.tsbuildinfo +1 -10814
- package/package.json +13 -10
- package/resources/MsgCompiled.d.ts +1212 -0
- package/resources/MsgCompiled.js +2761 -0
package/dist/src/lib/index.js
CHANGED
|
@@ -1,25 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
8
12
|
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
9
35
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
37
|
};
|
|
12
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.CosmosConstants = exports.
|
|
14
|
-
const CosmosConstants = require("./constants");
|
|
39
|
+
exports.CosmosConstants = exports.CosmosUtils = exports.StakingRedelegateBuilder = exports.CosmosTransferBuilder = exports.CosmosTransactionBuilder = exports.CosmosTransaction = exports.CosmosKeyPair = exports.ContractCallBuilder = exports.StakingWithdrawRewardsBuilder = exports.StakingDeactivateBuilder = exports.StakingActivateBuilder = void 0;
|
|
40
|
+
const CosmosConstants = __importStar(require("./constants"));
|
|
15
41
|
exports.CosmosConstants = CosmosConstants;
|
|
16
42
|
__exportStar(require("./iface"), exports);
|
|
43
|
+
var StakingActivateBuilder_1 = require("./StakingActivateBuilder");
|
|
44
|
+
Object.defineProperty(exports, "StakingActivateBuilder", { enumerable: true, get: function () { return StakingActivateBuilder_1.StakingActivateBuilder; } });
|
|
45
|
+
var StakingDeactivateBuilder_1 = require("./StakingDeactivateBuilder");
|
|
46
|
+
Object.defineProperty(exports, "StakingDeactivateBuilder", { enumerable: true, get: function () { return StakingDeactivateBuilder_1.StakingDeactivateBuilder; } });
|
|
47
|
+
var StakingWithdrawRewardsBuilder_1 = require("./StakingWithdrawRewardsBuilder");
|
|
48
|
+
Object.defineProperty(exports, "StakingWithdrawRewardsBuilder", { enumerable: true, get: function () { return StakingWithdrawRewardsBuilder_1.StakingWithdrawRewardsBuilder; } });
|
|
49
|
+
var ContractCallBuilder_1 = require("./ContractCallBuilder");
|
|
50
|
+
Object.defineProperty(exports, "ContractCallBuilder", { enumerable: true, get: function () { return ContractCallBuilder_1.ContractCallBuilder; } });
|
|
17
51
|
var keyPair_1 = require("./keyPair");
|
|
18
52
|
Object.defineProperty(exports, "CosmosKeyPair", { enumerable: true, get: function () { return keyPair_1.CosmosKeyPair; } });
|
|
19
53
|
var transaction_1 = require("./transaction");
|
|
20
54
|
Object.defineProperty(exports, "CosmosTransaction", { enumerable: true, get: function () { return transaction_1.CosmosTransaction; } });
|
|
21
55
|
var transactionBuilder_1 = require("./transactionBuilder");
|
|
22
56
|
Object.defineProperty(exports, "CosmosTransactionBuilder", { enumerable: true, get: function () { return transactionBuilder_1.CosmosTransactionBuilder; } });
|
|
57
|
+
var transferBuilder_1 = require("./transferBuilder");
|
|
58
|
+
Object.defineProperty(exports, "CosmosTransferBuilder", { enumerable: true, get: function () { return transferBuilder_1.CosmosTransferBuilder; } });
|
|
59
|
+
var StakingRedelegateBuilder_1 = require("./StakingRedelegateBuilder");
|
|
60
|
+
Object.defineProperty(exports, "StakingRedelegateBuilder", { enumerable: true, get: function () { return StakingRedelegateBuilder_1.StakingRedelegateBuilder; } });
|
|
23
61
|
var utils_1 = require("./utils");
|
|
24
|
-
Object.defineProperty(exports, "
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
Object.defineProperty(exports, "CosmosUtils", { enumerable: true, get: function () { return utils_1.CosmosUtils; } });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZEQUErQztBQWF0QywwQ0FBZTtBQVp4QiwwQ0FBd0I7QUFFeEIsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLHVFQUFzRTtBQUE3RCxvSUFBQSx3QkFBd0IsT0FBQTtBQUNqQyxpRkFBZ0Y7QUFBdkUsOElBQUEsNkJBQTZCLE9BQUE7QUFDdEMsNkRBQTREO0FBQW5ELDBIQUFBLG1CQUFtQixPQUFBO0FBQzVCLHFDQUEwQztBQUFqQyx3R0FBQSxhQUFhLE9BQUE7QUFDdEIsNkNBQWtEO0FBQXpDLGdIQUFBLGlCQUFpQixPQUFBO0FBQzFCLDJEQUFnRTtBQUF2RCw4SEFBQSx3QkFBd0IsT0FBQTtBQUNqQyxxREFBMEQ7QUFBakQsd0hBQUEscUJBQXFCLE9BQUE7QUFDOUIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLGlDQUFzQztBQUE3QixvR0FBQSxXQUFXLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBDb3Ntb3NDb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCB7IFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIgfSBmcm9tICcuL1N0YWtpbmdBY3RpdmF0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyIH0gZnJvbSAnLi9TdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ1dpdGhkcmF3UmV3YXJkc0J1aWxkZXIgfSBmcm9tICcuL1N0YWtpbmdXaXRoZHJhd1Jld2FyZHNCdWlsZGVyJztcbmV4cG9ydCB7IENvbnRyYWN0Q2FsbEJ1aWxkZXIgfSBmcm9tICcuL0NvbnRyYWN0Q2FsbEJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5leHBvcnQgeyBDb3Ntb3NUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgQ29zbW9zVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ1JlZGVsZWdhdGVCdWlsZGVyIH0gZnJvbSAnLi9TdGFraW5nUmVkZWxlZ2F0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zVXRpbHMgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IENvc21vc0NvbnN0YW50cyB9O1xuIl19
|
package/dist/src/lib/keyPair.js
CHANGED
|
@@ -17,16 +17,16 @@ class CosmosKeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
|
|
|
17
17
|
constructor(source) {
|
|
18
18
|
super(source);
|
|
19
19
|
if (!source) {
|
|
20
|
-
const seed = crypto_1.randomBytes(constants_1.DEFAULT_SEED_SIZE_BYTES);
|
|
20
|
+
const seed = (0, crypto_1.randomBytes)(constants_1.DEFAULT_SEED_SIZE_BYTES);
|
|
21
21
|
this.hdNode = utxo_lib_1.bip32.fromSeed(seed);
|
|
22
22
|
}
|
|
23
|
-
else if (sdk_core_1.isSeed(source)) {
|
|
23
|
+
else if ((0, sdk_core_1.isSeed)(source)) {
|
|
24
24
|
this.hdNode = utxo_lib_1.bip32.fromSeed(source.seed);
|
|
25
25
|
}
|
|
26
|
-
else if (sdk_core_1.isPrivateKey(source)) {
|
|
26
|
+
else if ((0, sdk_core_1.isPrivateKey)(source)) {
|
|
27
27
|
this.recordKeysFromPrivateKey(source.prv);
|
|
28
28
|
}
|
|
29
|
-
else if (sdk_core_1.isPublicKey(source)) {
|
|
29
|
+
else if ((0, sdk_core_1.isPublicKey)(source)) {
|
|
30
30
|
this.recordKeysFromPublicKey(source.pub);
|
|
31
31
|
}
|
|
32
32
|
else {
|
|
@@ -41,12 +41,11 @@ class CosmosKeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
|
|
|
41
41
|
* @returns { DefaultKeys } The keys in the protocol default key format
|
|
42
42
|
*/
|
|
43
43
|
getKeys() {
|
|
44
|
-
var _a;
|
|
45
44
|
return {
|
|
46
45
|
pub: this.getPublicKey({ compressed: true }).toString('hex'),
|
|
47
|
-
prv:
|
|
46
|
+
prv: this.getPrivateKey()?.toString('hex'),
|
|
48
47
|
};
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
exports.CosmosKeyPair = CosmosKeyPair;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFPOEI7QUFDOUIsbURBQTZDO0FBQzdDLG1DQUFxQztBQUVyQywyQ0FBc0Q7QUFFdEQ7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxtQ0FBd0I7SUFDekQ7Ozs7T0FJRztJQUNILFlBQVksTUFBdUI7UUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBVyxFQUFDLG1DQUF1QixDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxJQUFBLGlCQUFNLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQU0sSUFBSSxJQUFBLHVCQUFZLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxJQUFJLElBQUEsc0JBQVcsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsbUNBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzVELEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBcENELHNDQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlZmF1bHRLZXlzLFxuICBpc1ByaXZhdGVLZXksXG4gIGlzUHVibGljS2V5LFxuICBpc1NlZWQsXG4gIEtleVBhaXJPcHRpb25zLFxuICBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBERUZBVUxUX1NFRURfU0laRV9CWVRFUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBDb3Ntb3Mga2V5cyBhbmQgYWRkcmVzcyBtYW5hZ2VtZW50LlxuICovXG5leHBvcnQgY2xhc3MgQ29zbW9zS2V5UGFpciBleHRlbmRzIFNlY3AyNTZrMUV4dGVuZGVkS2V5UGFpciB7XG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuIEJ5IGRlZmF1bHQsIGNyZWF0ZXMgYSBrZXkgcGFpciB3aXRoIGEgcmFuZG9tIG1hc3RlciBzZWVkLlxuICAgKiBAcGFyYW0geyBLZXlQYWlyT3B0aW9ucyB9IHNvdXJjZSBFaXRoZXIgYSBtYXN0ZXIgc2VlZCwgYSBwcml2YXRlIGtleSAoZXh0ZW5kZWQgb3IgcmF3KSwgb3IgYSBwdWJsaWMga2V5XG4gICAqICAgICAoZXh0ZW5kZWQsIGNvbXByZXNzZWQsIG9yIHVuY29tcHJlc3NlZClcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgc3VwZXIoc291cmNlKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTKTtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1NlZWQoc291cmNlKSkge1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzb3VyY2Uuc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1ByaXZhdGVLZXkoc291cmNlKSkge1xuICAgICAgdGhpcy5yZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkoc291cmNlLnBydik7XG4gICAgfSBlbHNlIGlmIChpc1B1YmxpY0tleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHVibGljS2V5KHNvdXJjZS5wdWIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhkTm9kZSkge1xuICAgICAgdGhpcy5rZXlQYWlyID0gU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLnRvS2V5UGFpcih0aGlzLmhkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvc21vcyBkZWZhdWx0IGtleXMgZm9ybWF0OiByYXcgcHJpdmF0ZSBhbmQgY29tcHJlc3NlZCBwdWJsaWMga2V5XG4gICAqIEByZXR1cm5zIHsgRGVmYXVsdEtleXMgfSBUaGUga2V5cyBpbiB0aGUgcHJvdG9jb2wgZGVmYXVsdCBrZXkgZm9ybWF0XG4gICAqL1xuICBnZXRLZXlzKCk6IERlZmF1bHRLZXlzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiB0aGlzLmdldFB1YmxpY0tleSh7IGNvbXByZXNzZWQ6IHRydWUgfSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHJ2OiB0aGlzLmdldFByaXZhdGVLZXkoKT8udG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { BaseKey, BaseTransaction, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
2
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
4
3
|
import { CosmosLikeTransaction, TransactionExplanation, TxData } from './iface';
|
|
4
|
+
import { CosmosUtils } from './utils';
|
|
5
5
|
export declare class CosmosTransaction extends BaseTransaction {
|
|
6
6
|
protected _cosmosLikeTransaction: CosmosLikeTransaction;
|
|
7
7
|
protected _accountNumber: number;
|
|
8
8
|
protected _chainId: string;
|
|
9
|
-
|
|
9
|
+
protected _utils: CosmosUtils;
|
|
10
|
+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils);
|
|
10
11
|
get cosmosLikeTransaction(): CosmosLikeTransaction;
|
|
11
12
|
set cosmosLikeTransaction(cosmosLikeTransaction: Readonly<CosmosLikeTransaction>);
|
|
12
13
|
get chainId(): string;
|
|
@@ -48,6 +49,16 @@ export declare class CosmosTransaction extends BaseTransaction {
|
|
|
48
49
|
* @returns {TransactionExplanation}
|
|
49
50
|
*/
|
|
50
51
|
explainTransactionInternal(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
|
|
52
|
+
/**
|
|
53
|
+
* Load the input and output data on this transaction using the transaction json
|
|
54
|
+
* if there are outputs. For transactions without outputs (e.g. wallet initializations),
|
|
55
|
+
* this function will not do anything
|
|
56
|
+
*/
|
|
51
57
|
loadInputsAndOutputs(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Sets this transaction payload
|
|
60
|
+
* @param rawTransaction raw transaction in base64 encoded string
|
|
61
|
+
*/
|
|
62
|
+
enrichTransactionDetailsFromRawTransaction(rawTransaction: string): void;
|
|
52
63
|
}
|
|
53
64
|
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAKf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK7D,OAAO,EACL,qBAAqB,EAKrB,sBAAsB,EACtB,MAAM,EAEP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,SAAS,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;IACxD,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE3B,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;gBAElB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW;IAKjE,IAAI,qBAAqB,IAAI,qBAAqB,CAEjD;IAED,IAAI,qBAAqB,CAAC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EAE/E;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAE1B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,MAAM,EAEtC;IAED,mBAAmB;IACnB,IAAI,EAAE,IAAI,MAAM,CAOf;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAoBhB;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAkB5C;;;OAGG;IACH,IAAI,eAAe,CAAC,eAAe,EAAE,eAAe,EAEnD;IAED;;;OAGG;IACH,SAAS,IAAI,MAAM;IAanB,mBAAmB;IACnB,IAAI,eAAe,IAAI,MAAM,CAI5B;IAED;;;;;;OAMG;IACH,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;IAyF3G;;;;OAIG;IACH,oBAAoB,IAAI,IAAI;IA2F5B;;;OAGG;IACH,0CAA0C,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;CAiBzE"}
|
|
@@ -6,10 +6,10 @@ const encoding_1 = require("@cosmjs/encoding");
|
|
|
6
6
|
const proto_signing_1 = require("@cosmjs/proto-signing");
|
|
7
7
|
const tx_1 = require("cosmjs-types/cosmos/tx/v1beta1/tx");
|
|
8
8
|
const constants_1 = require("./constants");
|
|
9
|
-
const utils_1 = require("./utils");
|
|
10
9
|
class CosmosTransaction extends sdk_core_1.BaseTransaction {
|
|
11
|
-
constructor(_coinConfig) {
|
|
10
|
+
constructor(_coinConfig, utils) {
|
|
12
11
|
super(_coinConfig);
|
|
12
|
+
this._utils = utils;
|
|
13
13
|
}
|
|
14
14
|
get cosmosLikeTransaction() {
|
|
15
15
|
return this._cosmosLikeTransaction;
|
|
@@ -31,11 +31,10 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
|
|
|
31
31
|
}
|
|
32
32
|
/** @inheritDoc **/
|
|
33
33
|
get id() {
|
|
34
|
-
var _a;
|
|
35
34
|
if (this._id) {
|
|
36
35
|
return this._id;
|
|
37
36
|
}
|
|
38
|
-
else if (
|
|
37
|
+
else if (this._cosmosLikeTransaction?.hash !== undefined) {
|
|
39
38
|
return this._cosmosLikeTransaction.hash;
|
|
40
39
|
}
|
|
41
40
|
return constants_1.UNAVAILABLE_TEXT;
|
|
@@ -108,17 +107,16 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
|
|
|
108
107
|
* @returns {string} serialized base64 encoded transaction
|
|
109
108
|
*/
|
|
110
109
|
serialize() {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return encoding_1.toBase64(tx_1.TxRaw.encode(signedRawTx).finish());
|
|
110
|
+
const txRaw = this._utils.createTxRawFromCosmosLikeTransaction(this.cosmosLikeTransaction);
|
|
111
|
+
if (this.cosmosLikeTransaction?.publicKey !== undefined && this._signatures.length > 0) {
|
|
112
|
+
const signedRawTx = this._utils.createSignedTxRaw(this.cosmosLikeTransaction.publicKey, this._signatures[0], txRaw);
|
|
113
|
+
return (0, encoding_1.toBase64)(tx_1.TxRaw.encode(signedRawTx).finish());
|
|
116
114
|
}
|
|
117
|
-
return encoding_1.toBase64(tx_1.TxRaw.encode(txRaw).finish());
|
|
115
|
+
return (0, encoding_1.toBase64)(tx_1.TxRaw.encode(txRaw).finish());
|
|
118
116
|
}
|
|
119
117
|
/** @inheritdoc **/
|
|
120
118
|
get signablePayload() {
|
|
121
|
-
return Buffer.from(proto_signing_1.makeSignBytes(
|
|
119
|
+
return Buffer.from((0, proto_signing_1.makeSignBytes)(this._utils.createSignDoc(this.cosmosLikeTransaction, this._accountNumber, this._chainId)));
|
|
122
120
|
}
|
|
123
121
|
/**
|
|
124
122
|
* Returns a complete explanation for a transfer transaction
|
|
@@ -129,51 +127,77 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
|
|
|
129
127
|
*/
|
|
130
128
|
explainTransactionInternal(json, explanationResult) {
|
|
131
129
|
let outputs;
|
|
132
|
-
let message;
|
|
133
130
|
let outputAmount;
|
|
134
131
|
switch (json.type) {
|
|
135
132
|
case sdk_core_1.TransactionType.Send:
|
|
136
133
|
explanationResult.type = sdk_core_1.TransactionType.Send;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
134
|
+
outputAmount = BigInt(0);
|
|
135
|
+
outputs = json.sendMessages.map((message) => {
|
|
136
|
+
const sendMessage = message.value;
|
|
137
|
+
outputAmount = outputAmount + BigInt(sendMessage.amount[0].amount);
|
|
138
|
+
return {
|
|
139
|
+
address: sendMessage.toAddress,
|
|
140
|
+
amount: sendMessage.amount[0].amount,
|
|
141
|
+
};
|
|
142
|
+
});
|
|
145
143
|
break;
|
|
146
144
|
case sdk_core_1.TransactionType.StakingActivate:
|
|
147
145
|
explanationResult.type = sdk_core_1.TransactionType.StakingActivate;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
146
|
+
outputAmount = BigInt(0);
|
|
147
|
+
outputs = json.sendMessages.map((message) => {
|
|
148
|
+
const delegateMessage = message.value;
|
|
149
|
+
outputAmount = outputAmount + BigInt(delegateMessage.amount.amount);
|
|
150
|
+
return {
|
|
151
|
+
address: delegateMessage.validatorAddress,
|
|
152
|
+
amount: delegateMessage.amount.amount,
|
|
153
|
+
};
|
|
154
|
+
});
|
|
156
155
|
break;
|
|
157
156
|
case sdk_core_1.TransactionType.StakingDeactivate:
|
|
158
157
|
explanationResult.type = sdk_core_1.TransactionType.StakingDeactivate;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
158
|
+
outputAmount = BigInt(0);
|
|
159
|
+
outputs = json.sendMessages.map((message) => {
|
|
160
|
+
const delegateMessage = message.value;
|
|
161
|
+
outputAmount = outputAmount + BigInt(delegateMessage.amount.amount);
|
|
162
|
+
return {
|
|
163
|
+
address: delegateMessage.validatorAddress,
|
|
164
|
+
amount: delegateMessage.amount.amount,
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
167
|
break;
|
|
168
168
|
case sdk_core_1.TransactionType.StakingWithdraw:
|
|
169
169
|
explanationResult.type = sdk_core_1.TransactionType.StakingWithdraw;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
{
|
|
173
|
-
address:
|
|
170
|
+
outputs = json.sendMessages.map((message) => {
|
|
171
|
+
const withdrawMessage = message.value;
|
|
172
|
+
return {
|
|
173
|
+
address: withdrawMessage.validatorAddress,
|
|
174
174
|
amount: constants_1.UNAVAILABLE_TEXT,
|
|
175
|
-
}
|
|
176
|
-
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
break;
|
|
178
|
+
case sdk_core_1.TransactionType.ContractCall:
|
|
179
|
+
explanationResult.type = sdk_core_1.TransactionType.ContractCall;
|
|
180
|
+
outputAmount = BigInt(0);
|
|
181
|
+
outputs = json.sendMessages.map((message) => {
|
|
182
|
+
const executeContractMessage = message.value;
|
|
183
|
+
outputAmount = outputAmount + BigInt(executeContractMessage.funds?.[0]?.amount ?? '0');
|
|
184
|
+
return {
|
|
185
|
+
address: executeContractMessage.contract,
|
|
186
|
+
amount: executeContractMessage.funds?.[0]?.amount ?? '0',
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
break;
|
|
190
|
+
case sdk_core_1.TransactionType.StakingRedelegate:
|
|
191
|
+
explanationResult.type = sdk_core_1.TransactionType.StakingRedelegate;
|
|
192
|
+
outputAmount = BigInt(0);
|
|
193
|
+
outputs = json.sendMessages.map((message) => {
|
|
194
|
+
const redelegateMessage = message.value;
|
|
195
|
+
outputAmount = outputAmount + BigInt(redelegateMessage.amount.amount);
|
|
196
|
+
return {
|
|
197
|
+
address: redelegateMessage.validatorDstAddress,
|
|
198
|
+
amount: redelegateMessage.amount.amount,
|
|
199
|
+
};
|
|
200
|
+
});
|
|
177
201
|
break;
|
|
178
202
|
default:
|
|
179
203
|
throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
|
|
@@ -185,10 +209,15 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
|
|
|
185
209
|
}
|
|
186
210
|
return {
|
|
187
211
|
...explanationResult,
|
|
188
|
-
outputAmount,
|
|
212
|
+
outputAmount: outputAmount?.toString(),
|
|
189
213
|
outputs,
|
|
190
214
|
};
|
|
191
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Load the input and output data on this transaction using the transaction json
|
|
218
|
+
* if there are outputs. For transactions without outputs (e.g. wallet initializations),
|
|
219
|
+
* this function will not do anything
|
|
220
|
+
*/
|
|
192
221
|
loadInputsAndOutputs() {
|
|
193
222
|
if (this.type === undefined || !this.cosmosLikeTransaction) {
|
|
194
223
|
throw new sdk_core_1.InvalidTransactionError('Transaction type or cosmosLikeTransaction is not set');
|
|
@@ -197,43 +226,79 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
|
|
|
197
226
|
const inputs = [];
|
|
198
227
|
switch (this.type) {
|
|
199
228
|
case sdk_core_1.TransactionType.Send:
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
229
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
230
|
+
const sendMessage = message.value;
|
|
231
|
+
inputs.push({
|
|
232
|
+
address: sendMessage.fromAddress,
|
|
233
|
+
value: sendMessage.amount[0].amount,
|
|
234
|
+
coin: this._coinConfig.name,
|
|
235
|
+
});
|
|
236
|
+
outputs.push({
|
|
237
|
+
address: sendMessage.toAddress,
|
|
238
|
+
value: sendMessage.amount[0].amount,
|
|
239
|
+
coin: this._coinConfig.name,
|
|
240
|
+
});
|
|
210
241
|
});
|
|
211
242
|
break;
|
|
212
243
|
case sdk_core_1.TransactionType.StakingActivate:
|
|
213
244
|
case sdk_core_1.TransactionType.StakingDeactivate:
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
245
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
246
|
+
const delegateMessage = message.value;
|
|
247
|
+
inputs.push({
|
|
248
|
+
address: delegateMessage.delegatorAddress,
|
|
249
|
+
value: delegateMessage.amount.amount,
|
|
250
|
+
coin: this._coinConfig.name,
|
|
251
|
+
});
|
|
252
|
+
outputs.push({
|
|
253
|
+
address: delegateMessage.validatorAddress,
|
|
254
|
+
value: delegateMessage.amount.amount,
|
|
255
|
+
coin: this._coinConfig.name,
|
|
256
|
+
});
|
|
224
257
|
});
|
|
225
258
|
break;
|
|
226
259
|
case sdk_core_1.TransactionType.StakingWithdraw:
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
260
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
261
|
+
const withdrawMessage = message.value;
|
|
262
|
+
inputs.push({
|
|
263
|
+
address: withdrawMessage.delegatorAddress,
|
|
264
|
+
value: constants_1.UNAVAILABLE_TEXT,
|
|
265
|
+
coin: this._coinConfig.name,
|
|
266
|
+
});
|
|
267
|
+
outputs.push({
|
|
268
|
+
address: withdrawMessage.validatorAddress,
|
|
269
|
+
value: constants_1.UNAVAILABLE_TEXT,
|
|
270
|
+
coin: this._coinConfig.name,
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
break;
|
|
274
|
+
case sdk_core_1.TransactionType.ContractCall:
|
|
275
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
276
|
+
const executeContractMessage = message.value;
|
|
277
|
+
inputs.push({
|
|
278
|
+
address: executeContractMessage.sender,
|
|
279
|
+
value: executeContractMessage.funds?.[0]?.amount ?? '0',
|
|
280
|
+
coin: this._coinConfig.name,
|
|
281
|
+
});
|
|
282
|
+
outputs.push({
|
|
283
|
+
address: executeContractMessage.contract,
|
|
284
|
+
value: executeContractMessage.funds?.[0]?.amount ?? '0',
|
|
285
|
+
coin: this._coinConfig.name,
|
|
286
|
+
});
|
|
232
287
|
});
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
288
|
+
break;
|
|
289
|
+
case sdk_core_1.TransactionType.StakingRedelegate:
|
|
290
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
291
|
+
const redelegateMessage = message.value;
|
|
292
|
+
inputs.push({
|
|
293
|
+
address: redelegateMessage.delegatorAddress,
|
|
294
|
+
value: redelegateMessage.amount.amount,
|
|
295
|
+
coin: this._coinConfig.name,
|
|
296
|
+
});
|
|
297
|
+
outputs.push({
|
|
298
|
+
address: redelegateMessage.validatorDstAddress,
|
|
299
|
+
value: redelegateMessage.amount.amount,
|
|
300
|
+
coin: this._coinConfig.name,
|
|
301
|
+
});
|
|
237
302
|
});
|
|
238
303
|
break;
|
|
239
304
|
default:
|
|
@@ -242,6 +307,27 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
|
|
|
242
307
|
this._inputs = inputs;
|
|
243
308
|
this._outputs = outputs;
|
|
244
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* Sets this transaction payload
|
|
312
|
+
* @param rawTransaction raw transaction in base64 encoded string
|
|
313
|
+
*/
|
|
314
|
+
enrichTransactionDetailsFromRawTransaction(rawTransaction) {
|
|
315
|
+
if (this._utils.isValidHexString(rawTransaction)) {
|
|
316
|
+
this.cosmosLikeTransaction = this._utils.deserializeTransaction((0, encoding_1.toBase64)((0, encoding_1.fromHex)(rawTransaction)));
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
this.cosmosLikeTransaction = this._utils.deserializeTransaction(rawTransaction);
|
|
320
|
+
}
|
|
321
|
+
if (this.cosmosLikeTransaction.signature) {
|
|
322
|
+
this.addSignature(Buffer.from(this.cosmosLikeTransaction.signature).toString('hex'));
|
|
323
|
+
}
|
|
324
|
+
const typeUrl = this.cosmosLikeTransaction.sendMessages[0].typeUrl;
|
|
325
|
+
const transactionType = this._utils.getTransactionTypeFromTypeUrl(typeUrl);
|
|
326
|
+
if (transactionType === undefined) {
|
|
327
|
+
throw new Error('Transaction type is not supported ' + typeUrl);
|
|
328
|
+
}
|
|
329
|
+
this.transactionType = transactionType;
|
|
330
|
+
}
|
|
245
331
|
}
|
|
246
332
|
exports.CosmosTransaction = CosmosTransaction;
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQVE4QjtBQUU5QiwrQ0FBNEM7QUFDNUMseURBQXNEO0FBQ3RELDBEQUEwRDtBQUUxRCwyQ0FBK0M7QUFVL0MsbUNBQTRCO0FBRTVCLE1BQWEsaUJBQWtCLFNBQVEsMEJBQWU7SUFLcEQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLHFCQUFxQixDQUFDLHFCQUFzRDtRQUM5RSxJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsT0FBZTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxhQUFxQjtRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztJQUN0QyxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLElBQUksRUFBRTs7UUFDSixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDakI7YUFBTSxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsc0JBQXNCLDBDQUFFLElBQUksTUFBSyxTQUFTLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO1NBQ3pDO1FBQ0Qs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QUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFqUUQsOENBaVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgdG9CYXNlNjQgfSBmcm9tICdAY29zbWpzL2VuY29kaW5nJztcbmltcG9ydCB7IG1ha2VTaWduQnl0ZXMgfSBmcm9tICdAY29zbWpzL3Byb3RvLXNpZ25pbmcnO1xuaW1wb3J0IHsgVHhSYXcgfSBmcm9tICdjb3NtanMtdHlwZXMvY29zbW9zL3R4L3YxYmV0YTEvdHgnO1xuXG5pbXBvcnQgeyBVTkFWQUlMQUJMRV9URVhUIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICBDb3Ntb3NMaWtlVHJhbnNhY3Rpb24sXG4gIERlbGVnYXRlT3JVbmRlbGVnZXRlTWVzc2FnZSxcbiAgU2VuZE1lc3NhZ2UsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFR4RGF0YSxcbiAgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZSxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDb3Ntb3NUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfY29zbW9zTGlrZVRyYW5zYWN0aW9uOiBDb3Ntb3NMaWtlVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfYWNjb3VudE51bWJlcjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2NoYWluSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgY29zbW9zTGlrZVRyYW5zYWN0aW9uKCk6IENvc21vc0xpa2VUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldCBjb3Ntb3NMaWtlVHJhbnNhY3Rpb24oY29zbW9zTGlrZVRyYW5zYWN0aW9uOiBSZWFkb25seTxDb3Ntb3NMaWtlVHJhbnNhY3Rpb24+KSB7XG4gICAgdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uID0gY29zbW9zTGlrZVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgZ2V0IGNoYWluSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhaW5JZDtcbiAgfVxuXG4gIHNldCBjaGFpbklkKGNoYWluSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NoYWluSWQgPSBjaGFpbklkO1xuICB9XG5cbiAgZ2V0IGFjY291bnROdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWNjb3VudE51bWJlcjtcbiAgfVxuXG4gIHNldCBhY2NvdW50TnVtYmVyKGFjY291bnROdW1iZXI6IG51bWJlcikge1xuICAgIHRoaXMuX2FjY291bnROdW1iZXIgPSBhY2NvdW50TnVtYmVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5faWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbj8uaGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uLmhhc2g7XG4gICAgfVxuICAgIHJldHVybiBVTkFWQUlMQUJMRV9URVhUO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgdHggPSB0aGlzLl9jb3Ntb3NMaWtlVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIHNlcXVlbmNlOiB0eC5zZXF1ZW5jZSxcbiAgICAgIHNlbmRNZXNzYWdlczogdHguc2VuZE1lc3NhZ2VzLFxuICAgICAgZ2FzQnVkZ2V0OiB0eC5nYXNCdWRnZXQsXG4gICAgICBwdWJsaWNLZXk6IHR4LnB1YmxpY0tleSxcbiAgICAgIHNpZ25hdHVyZTogdHguc2lnbmF0dXJlLFxuICAgICAgYWNjb3VudE51bWJlcjogdGhpcy5fYWNjb3VudE51bWJlcixcbiAgICAgIGNoYWluSWQ6IHRoaXMuX2NoYWluSWQsXG4gICAgICBoYXNoOiB0eC5oYXNoLFxuICAgICAgbWVtbzogdHgubWVtbyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpZ25hdHVyZSB0byB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBpbiBoZXggZm9ybWF0XG4gICAqL1xuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW107XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcblxuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbkludGVybmFsKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICBzZXQgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgSlNPTiBzdHJpbmdcbiAgICogQHJldHVybnMge3N0cmluZ30gc2VyaWFsaXplZCBiYXNlNjQgZW5jb2RlZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHhSYXcgPSB1dGlscy5jcmVhdGVUeFJhd0Zyb21Db3Ntb3NMaWtlVHJhbnNhY3Rpb24odGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbj8ucHVibGljS2V5ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzaWduZWRSYXdUeCA9IHV0aWxzLmNyZWF0ZVNpZ25lZFR4UmF3KHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnB1YmxpY0tleSwgdGhpcy5fc2lnbmF0dXJlc1swXSwgdHhSYXcpO1xuICAgICAgcmV0dXJuIHRvQmFzZTY0KFR4UmF3LmVuY29kZShzaWduZWRSYXdUeCkuZmluaXNoKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdG9CYXNlNjQoVHhSYXcuZW5jb2RlKHR4UmF3KS5maW5pc2goKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKiovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICBtYWtlU2lnbkJ5dGVzKHV0aWxzLmNyZWF0ZVNpZ25Eb2ModGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24sIHRoaXMuX2FjY291bnROdW1iZXIsIHRoaXMuX2NoYWluSWQpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsZXRlIGV4cGxhbmF0aW9uIGZvciBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG9uZSBtZXNzYWdlIHBlciB0cmFuc2Zlci5cbiAgICogQHBhcmFtIHtUeERhdGF9IGpzb24gVGhlIHRyYW5zYWN0aW9uIGRhdGEgaW4ganNvbiBmb3JtYXRcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufSBleHBsYW5hdGlvblJlc3VsdCBUaGUgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24gdG8gYmUgY29tcGxldGVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufVxuICAgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uSW50ZXJuYWwoanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGxldCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGxldCBvdXRwdXRBbW91bnQ7XG4gICAgc3dpdGNoIChqc29uLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIGV4cGxhbmF0aW9uUmVzdWx0LnR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICAgICAgbWVzc2FnZSA9IGpzb24uc2VuZE1lc3NhZ2VzWzBdLnZhbHVlIGFzIFNlbmRNZXNzYWdlO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBtZXNzYWdlLmFtb3VudFswXS5hbW91bnQ7XG4gICAgICAgIG91dHB1dHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogbWVzc2FnZS50b0FkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU7XG4gICAgICAgIG1lc3NhZ2UgPSBqc29uLnNlbmRNZXNzYWdlc1swXS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgIG91dHB1dEFtb3VudCA9IG1lc3NhZ2UuYW1vdW50LmFtb3VudDtcbiAgICAgICAgb3V0cHV0cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBtZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICBtZXNzYWdlID0ganNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUgYXMgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBtZXNzYWdlLmFtb3VudC5hbW91bnQ7XG4gICAgICAgIG91dHB1dHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogbWVzc2FnZS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIGV4cGxhbmF0aW9uUmVzdWx0LnR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICAgICAgICBtZXNzYWdlID0ganNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUgYXMgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZTtcbiAgICAgICAgb3V0cHV0cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBtZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBpZiAoanNvbi5tZW1vKSB7XG4gICAgICBvdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgICBvdXRwdXQubWVtbyA9IGpzb24ubWVtbztcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRzLFxuICAgIH07XG4gIH1cblxuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50eXBlID09PSB1bmRlZmluZWQgfHwgIXRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgb3IgY29zbW9zTGlrZVRyYW5zYWN0aW9uIGlzIG5vdCBzZXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzOiBFbnRyeVtdID0gW107XG4gICAgY29uc3QgaW5wdXRzOiBFbnRyeVtdID0gW107XG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUgYXMgU2VuZE1lc3NhZ2U7XG4gICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBtZXNzYWdlLmZyb21BZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBtZXNzYWdlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBtZXNzYWdlLnRvQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogbWVzc2FnZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlTWVzc2FnZSA9IHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlc1swXS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZU1lc3NhZ2UuZGVsZWdhdG9yQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZU1lc3NhZ2UudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3TWVzc2FnZSA9IHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlc1swXS52YWx1ZSBhcyBXaXRoZHJhd0RlbGVnYXRvclJld2FyZHNNZXNzYWdlO1xuICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogd2l0aGRyYXdNZXNzYWdlLmRlbGVnYXRvckFkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd01lc3NhZ2UudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogVU5BVkFJTEFCTEVfVEVYVCxcbiAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgICB0aGlzLl9vdXRwdXRzID0gb3V0cHV0cztcbiAgfVxufVxuIl19
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQVE4QjtBQUU5QiwrQ0FBcUQ7QUFDckQseURBQXNEO0FBQ3RELDBEQUEwRDtBQUMxRCwyQ0FBK0M7QUFhL0MsTUFBYSxpQkFBa0IsU0FBUSwwQkFBZTtJQU9wRCxZQUFZLFdBQWlDLEVBQUUsS0FBa0I7UUFDL0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxxQkFBc0Q7UUFDOUUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsYUFBcUI7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFJLEVBQUU7UUFDSixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNsQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNELE9BQU8sSUFBSSxD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O1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFqV0QsOENBaVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgZnJvbUhleCwgdG9CYXNlNjQgfSBmcm9tICdAY29zbWpzL2VuY29kaW5nJztcbmltcG9ydCB7IG1ha2VTaWduQnl0ZXMgfSBmcm9tICdAY29zbWpzL3Byb3RvLXNpZ25pbmcnO1xuaW1wb3J0IHsgVHhSYXcgfSBmcm9tICdjb3NtanMtdHlwZXMvY29zbW9zL3R4L3YxYmV0YTEvdHgnO1xuaW1wb3J0IHsgVU5BVkFJTEFCTEVfVEVYVCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIENvc21vc0xpa2VUcmFuc2FjdGlvbixcbiAgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlLFxuICBFeGVjdXRlQ29udHJhY3RNZXNzYWdlLFxuICBSZWRlbGVnYXRlTWVzc2FnZSxcbiAgU2VuZE1lc3NhZ2UsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFR4RGF0YSxcbiAgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZSxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBDb3Ntb3NVdGlscyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQ29zbW9zVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX2Nvc21vc0xpa2VUcmFuc2FjdGlvbjogQ29zbW9zTGlrZVRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX2FjY291bnROdW1iZXI6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9jaGFpbklkOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF91dGlsczogQ29zbW9zVXRpbHM7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+LCB1dGlsczogQ29zbW9zVXRpbHMpIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdXRpbHMgPSB1dGlscztcbiAgfVxuXG4gIGdldCBjb3Ntb3NMaWtlVHJhbnNhY3Rpb24oKTogQ29zbW9zTGlrZVRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0IGNvc21vc0xpa2VUcmFuc2FjdGlvbihjb3Ntb3NMaWtlVHJhbnNhY3Rpb246IFJlYWRvbmx5PENvc21vc0xpa2VUcmFuc2FjdGlvbj4pIHtcbiAgICB0aGlzLl9jb3Ntb3NMaWtlVHJhbnNhY3Rpb24gPSBjb3Ntb3NMaWtlVHJhbnNhY3Rpb247XG4gIH1cblxuICBnZXQgY2hhaW5JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFpbklkO1xuICB9XG5cbiAgc2V0IGNoYWluSWQoY2hhaW5JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fY2hhaW5JZCA9IGNoYWluSWQ7XG4gIH1cblxuICBnZXQgYWNjb3VudE51bWJlcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY2NvdW50TnVtYmVyO1xuICB9XG5cbiAgc2V0IGFjY291bnROdW1iZXIoYWNjb3VudE51bWJlcjogbnVtYmVyKSB7XG4gICAgdGhpcy5fYWNjb3VudE51bWJlciA9IGFjY291bnROdW1iZXI7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9pZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uPy5oYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uaGFzaDtcbiAgICB9XG4gICAgcmV0dXJuIFVOQVZBSUxBQkxFX1RFWFQ7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCB0eCA9IHRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbjtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgc2VxdWVuY2U6IHR4LnNlcXVlbmNlLFxuICAgICAgc2VuZE1lc3NhZ2VzOiB0eC5zZW5kTWVzc2FnZXMsXG4gICAgICBnYXNCdWRnZXQ6IHR4Lmdhc0J1ZGdldCxcbiAgICAgIHB1YmxpY0tleTogdHgucHVibGljS2V5LFxuICAgICAgc2lnbmF0dXJlOiB0eC5zaWduYXR1cmUsXG4gICAgICBhY2NvdW50TnVtYmVyOiB0aGlzLl9hY2NvdW50TnVtYmVyLFxuICAgICAgY2hhaW5JZDogdGhpcy5fY2hhaW5JZCxcbiAgICAgIGhhc2g6IHR4Lmhhc2gsXG4gICAgICBtZW1vOiB0eC5tZW1vLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2lnbmF0dXJlIHRvIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIGluIGhleCBmb3JtYXRcbiAgICovXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZykge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbXTtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtdO1xuXG4gICAgY29uc3QgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6ICcwJyxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBmZWU6IHsgZmVlOiB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uSW50ZXJuYWwocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldCB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gdG8gYSBKU09OIHN0cmluZ1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzZXJpYWxpemVkIGJhc2U2NCBlbmNvZGVkIHRyYW5zYWN0aW9uXG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eFJhdyA9IHRoaXMuX3V0aWxzLmNyZWF0ZVR4UmF3RnJvbUNvc21vc0xpa2VUcmFuc2FjdGlvbih0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbik7XG4gICAgaWYgKHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uPy5wdWJsaWNLZXkgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9zaWduYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNpZ25lZFJhd1R4ID0gdGhpcy5fdXRpbHMuY3JlYXRlU2lnbmVkVHhSYXcoXG4gICAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlc1swXSxcbiAgICAgICAgdHhSYXdcbiAgICAgICk7XG4gICAgICByZXR1cm4gdG9CYXNlNjQoVHhSYXcuZW5jb2RlKHNpZ25lZFJhd1R4KS5maW5pc2goKSk7XG4gICAgfVxuICAgIHJldHVybiB0b0Jhc2U2NChUeFJhdy5lbmNvZGUodHhSYXcpLmZpbmlzaCgpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqKi9cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAgIG1ha2VTaWduQnl0ZXModGhpcy5fdXRpbHMuY3JlYXRlU2lnbkRvYyh0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbiwgdGhpcy5fYWNjb3VudE51bWJlciwgdGhpcy5fY2hhaW5JZCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tcGxldGUgZXhwbGFuYXRpb24gZm9yIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb25cbiAgICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgb25lIG1lc3NhZ2UgcGVyIHRyYW5zZmVyLlxuICAgKiBAcGFyYW0ge1R4RGF0YX0ganNvbiBUaGUgdHJhbnNhY3Rpb24gZGF0YSBpbiBqc29uIGZvcm1hdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhbmF0aW9uUmVzdWx0IFRoZSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiB0byBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259XG4gICAqL1xuICBleHBsYWluVHJhbnNhY3Rpb25JbnRlcm5hbChqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgbGV0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgbGV0IG91dHB1dEFtb3VudDtcbiAgICBzd2l0Y2ggKGpzb24udHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBCaWdJbnQoMCk7XG4gICAgICAgIG91dHB1dHMgPSBqc29uLnNlbmRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBzZW5kTWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgU2VuZE1lc3NhZ2U7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50ICsgQmlnSW50KHNlbmRNZXNzYWdlLmFtb3VudFswXS5hbW91bnQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRyZXNzOiBzZW5kTWVzc2FnZS50b0FkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHNlbmRNZXNzYWdlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gQmlnSW50KDApO1xuICAgICAgICBvdXRwdXRzID0ganNvbi5zZW5kTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVsZWdhdGVNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50ICsgQmlnSW50KGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogZGVsZWdhdGVNZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBCaWdJbnQoMCk7XG4gICAgICAgIG91dHB1dHMgPSBqc29uLnNlbmRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBkZWxlZ2F0ZU1lc3NhZ2UgPSBtZXNzYWdlLnZhbHVlIGFzIERlbGVnYXRlT3JVbmRlbGVnZXRlTWVzc2FnZTtcbiAgICAgICAgICBvdXRwdXRBbW91bnQgPSBvdXRwdXRBbW91bnQgKyBCaWdJbnQoZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZU1lc3NhZ2UudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3OlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdztcbiAgICAgICAgb3V0cHV0cyA9IGpzb24uc2VuZE1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdpdGhkcmF3TWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogd2l0aGRyYXdNZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gQmlnSW50KDApO1xuICAgICAgICBvdXRwdXRzID0ganNvbi5zZW5kTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgRXhlY3V0ZUNvbnRyYWN0TWVzc2FnZTtcbiAgICAgICAgICBvdXRwdXRBbW91bnQgPSBvdXRwdXRBbW91bnQgKyBCaWdJbnQoZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5mdW5kcz8uWzBdPy5hbW91bnQgPz8gJzAnKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5jb250cmFjdCxcbiAgICAgICAgICAgIGFtb3VudDogZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5mdW5kcz8uWzBdPy5hbW91bnQgPz8gJzAnLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdSZWRlbGVnYXRlOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdSZWRlbGVnYXRlO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBCaWdJbnQoMCk7XG4gICAgICAgIG91dHB1dHMgPSBqc29uLnNlbmRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZWRlbGVnYXRlTWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgUmVkZWxlZ2F0ZU1lc3NhZ2U7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50ICsgQmlnSW50KHJlZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWRlbGVnYXRlTWVzc2FnZS52YWxpZGF0b3JEc3RBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiByZWRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIGlmIChqc29uLm1lbW8pIHtcbiAgICAgIG91dHB1dHMuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICAgIG91dHB1dC5tZW1vID0ganNvbi5tZW1vO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50Py50b1N0cmluZygpLFxuICAgICAgb3V0cHV0cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uIHVzaW5nIHRoZSB0cmFuc2FjdGlvbiBqc29uXG4gICAqIGlmIHRoZXJlIGFyZSBvdXRwdXRzLiBGb3IgdHJhbnNhY3Rpb25zIHdpdGhvdXQgb3V0cHV0cyAoZS5nLiB3YWxsZXQgaW5pdGlhbGl6YXRpb25zKSxcbiAgICogdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBkbyBhbnl0aGluZ1xuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG9yIGNvc21vc0xpa2VUcmFuc2FjdGlvbiBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0czogRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0czogRW50cnlbXSA9IFtdO1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlbmRNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBTZW5kTWVzc2FnZTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBzZW5kTWVzc2FnZS5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBzZW5kTWVzc2FnZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBzZW5kTWVzc2FnZS50b0FkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogc2VuZE1lc3NhZ2UuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVsZWdhdGVNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgICAgaW5wdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogZGVsZWdhdGVNZXNzYWdlLmRlbGVnYXRvckFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGRlbGVnYXRlTWVzc2FnZS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2l0aGRyYXdNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBXaXRoZHJhd0RlbGVnYXRvclJld2FyZHNNZXNzYWdlO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3TWVzc2FnZS5kZWxlZ2F0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3TWVzc2FnZS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDpcbiAgICAgICAgdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uc2VuZE1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBleGVjdXRlQ29udHJhY3RNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBFeGVjdXRlQ29udHJhY3RNZXNzYWdlO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGV4ZWN1dGVDb250cmFjdE1lc3NhZ2Uuc2VuZGVyLFxuICAgICAgICAgICAgdmFsdWU6IGV4ZWN1dGVDb250cmFjdE1lc3NhZ2UuZnVuZHM/LlswXT8uYW1vdW50ID8/ICcwJyxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5jb250cmFjdCxcbiAgICAgICAgICAgIHZhbHVlOiBleGVjdXRlQ29udHJhY3RNZXNzYWdlLmZ1bmRzPy5bMF0/LmFtb3VudCA/PyAnMCcsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdSZWRlbGVnYXRlOlxuICAgICAgICB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZGVsZWdhdGVNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBSZWRlbGVnYXRlTWVzc2FnZTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWRlbGVnYXRlTWVzc2FnZS5kZWxlZ2F0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHJlZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlZGVsZWdhdGVNZXNzYWdlLnZhbGlkYXRvckRzdEFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogcmVkZWxlZ2F0ZU1lc3NhZ2UuYW1vdW50LmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvbiByYXcgdHJhbnNhY3Rpb24gaW4gYmFzZTY0IGVuY29kZWQgc3RyaW5nXG4gICAqL1xuICBlbnJpY2hUcmFuc2FjdGlvbkRldGFpbHNGcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91dGlscy5pc1ZhbGlkSGV4U3RyaW5nKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24gPSB0aGlzLl91dGlscy5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRvQmFzZTY0KGZyb21IZXgocmF3VHJhbnNhY3Rpb24pKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uID0gdGhpcy5fdXRpbHMuZGVzZXJpYWxpemVUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zaWduYXR1cmUpIHtcbiAgICAgIHRoaXMuYWRkU2lnbmF0dXJlKEJ1ZmZlci5mcm9tKHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNpZ25hdHVyZSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9XG4gICAgY29uc3QgdHlwZVVybCA9IHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlc1swXS50eXBlVXJsO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uVHlwZSA9IHRoaXMuX3V0aWxzLmdldFRyYW5zYWN0aW9uVHlwZUZyb21UeXBlVXJsKHR5cGVVcmwpO1xuXG4gICAgaWYgKHRyYW5zYWN0aW9uVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgaXMgbm90IHN1cHBvcnRlZCAnICsgdHlwZVVybCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25UeXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG59XG4iXX0=
|