@bitgo/sdk-core 36.44.0 → 37.1.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/account-lib/baseCoin/enum.d.ts +22 -15
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/enum.js +30 -16
- package/dist/src/api/types.d.ts +12 -0
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/api/types.js +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts +1 -0
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.js +4 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +11 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/bitgoBase.d.ts +3 -1
- package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
- package/dist/src/bitgo/bitgoBase.js +1 -1
- package/dist/src/bitgo/environments.d.ts +1 -0
- package/dist/src/bitgo/environments.d.ts.map +1 -1
- package/dist/src/bitgo/environments.js +9 -1
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts +12 -1
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/decryptKeychain.js +34 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts +7 -1
- 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 +19 -2
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +74 -8
- package/dist/src/bitgo/trading/iTradingAccount.d.ts +13 -1
- package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
- package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
- package/dist/src/bitgo/trading/network/network.d.ts +1 -1
- package/dist/src/bitgo/trading/network/network.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/network.js +3 -5
- package/dist/src/bitgo/trading/network/types.d.ts +1 -1
- package/dist/src/bitgo/trading/network/types.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/types.js +1 -1
- package/dist/src/bitgo/trading/tradingAccount.d.ts +15 -1
- package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
- package/dist/src/bitgo/trading/tradingAccount.js +55 -7
- package/dist/src/bitgo/tss/common.d.ts +2 -1
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +10 -1
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts +37 -0
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.js +95 -0
- package/dist/src/bitgo/utils/mpcUtils.d.ts +2 -1
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +8 -1
- package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/addressVerification.js +10 -3
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +38 -4
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +66 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +95 -17
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +26 -2
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +10 -7
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +39 -11
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +14 -21
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +170 -104
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +9 -6
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +96 -38
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +34 -2
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +184 -6
- package/dist/src/bitgo/utils/txRequest.d.ts.map +1 -1
- package/dist/src/bitgo/utils/txRequest.js +6 -4
- package/dist/src/bitgo/wallet/BuildParams.d.ts +20 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +12 -2
- package/dist/src/bitgo/wallet/iWallet.d.ts +60 -2
- 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/iWallets.d.ts +20 -19
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +16 -8
- package/dist/src/bitgo/wallet/wallet.d.ts +84 -3
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +347 -14
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +49 -23
- package/dist/src/coins/ofc.d.ts +15 -1
- package/dist/src/coins/ofc.d.ts.map +1 -1
- package/dist/src/coins/ofc.js +8 -1
- package/dist/src/coins/ofcToken.d.ts +14 -4
- package/dist/src/coins/ofcToken.d.ts.map +1 -1
- package/dist/src/coins/ofcToken.js +17 -4
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -2
- package/dist/test/unit/bitgo/trading/tradingAccount.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/tradingAccount.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/tradingAccount.js +192 -0
- package/dist/test/unit/bitgo/utils/tss/addressVerification.js +119 -1
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +305 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +354 -1
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +442 -0
- package/dist/test/unit/bitgo/utils/txRequest.js +75 -1
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +185 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts +3 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.js +441 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +43 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.js +45 -1
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +5 -2
- package/dist/test/unit/coins/ofc.d.ts +2 -0
- package/dist/test/unit/coins/ofc.d.ts.map +1 -0
- package/dist/test/unit/coins/ofc.js +124 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -10,6 +10,7 @@ describe('txRequest utils', () => {
|
|
|
10
10
|
baseCoin: { getMPCAlgorithm: () => 'ecdsa' },
|
|
11
11
|
type: () => 'hot',
|
|
12
12
|
multisigType: () => 'tss',
|
|
13
|
+
multisigTypeVersion: () => undefined,
|
|
13
14
|
},
|
|
14
15
|
requestedApiVersion: 'lite',
|
|
15
16
|
expectedApiVersion: '',
|
|
@@ -20,6 +21,7 @@ describe('txRequest utils', () => {
|
|
|
20
21
|
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
21
22
|
type: () => 'cold',
|
|
22
23
|
multisigType: () => 'tss',
|
|
24
|
+
multisigTypeVersion: () => undefined,
|
|
23
25
|
},
|
|
24
26
|
requestedApiVersion: 'lite',
|
|
25
27
|
expectedApiVersion: '',
|
|
@@ -30,17 +32,41 @@ describe('txRequest utils', () => {
|
|
|
30
32
|
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
31
33
|
type: () => 'hot',
|
|
32
34
|
multisigType: () => 'tss',
|
|
35
|
+
multisigTypeVersion: () => undefined,
|
|
33
36
|
},
|
|
34
37
|
requestedApiVersion: undefined,
|
|
35
38
|
expectedApiVersion: 'lite',
|
|
36
39
|
expectedErrorMessage: '',
|
|
37
40
|
},
|
|
41
|
+
{
|
|
42
|
+
wallet: {
|
|
43
|
+
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
44
|
+
type: () => 'hot',
|
|
45
|
+
multisigType: () => 'tss',
|
|
46
|
+
multisigTypeVersion: () => 'MPCv2',
|
|
47
|
+
},
|
|
48
|
+
requestedApiVersion: 'lite',
|
|
49
|
+
expectedApiVersion: '',
|
|
50
|
+
expectedErrorMessage: 'For EdDSA MPCv2 tss wallets, parameter `apiVersion` must be `full`.',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
wallet: {
|
|
54
|
+
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
55
|
+
type: () => 'hot',
|
|
56
|
+
multisigType: () => 'tss',
|
|
57
|
+
multisigTypeVersion: () => 'MPCv2',
|
|
58
|
+
},
|
|
59
|
+
requestedApiVersion: undefined,
|
|
60
|
+
expectedApiVersion: 'full',
|
|
61
|
+
expectedErrorMessage: '',
|
|
62
|
+
},
|
|
38
63
|
...['hot', 'cold', 'custodial', 'backing'].map((walletType) => {
|
|
39
64
|
return {
|
|
40
65
|
wallet: {
|
|
41
66
|
baseCoin: { getMPCAlgorithm: () => 'ecdsa' },
|
|
42
67
|
type: () => walletType,
|
|
43
68
|
multisigType: () => 'tss',
|
|
69
|
+
multisigTypeVersion: () => undefined,
|
|
44
70
|
},
|
|
45
71
|
requestedApiVersion: 'full',
|
|
46
72
|
expectedApiVersion: 'full',
|
|
@@ -54,6 +80,7 @@ describe('txRequest utils', () => {
|
|
|
54
80
|
baseCoin: { getMPCAlgorithm: () => 'ecdsa' },
|
|
55
81
|
type: () => walletType,
|
|
56
82
|
multisigType: () => 'tss',
|
|
83
|
+
multisigTypeVersion: () => undefined,
|
|
57
84
|
},
|
|
58
85
|
requestedApiVersion: undefined,
|
|
59
86
|
expectedApiVersion: 'full',
|
|
@@ -67,6 +94,7 @@ describe('txRequest utils', () => {
|
|
|
67
94
|
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
68
95
|
type: () => walletType,
|
|
69
96
|
multisigType: () => 'tss',
|
|
97
|
+
multisigTypeVersion: () => undefined,
|
|
70
98
|
},
|
|
71
99
|
requestedApiVersion: 'full',
|
|
72
100
|
expectedApiVersion: 'full',
|
|
@@ -80,6 +108,7 @@ describe('txRequest utils', () => {
|
|
|
80
108
|
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
81
109
|
type: () => walletType,
|
|
82
110
|
multisigType: () => 'tss',
|
|
111
|
+
multisigTypeVersion: () => undefined,
|
|
83
112
|
},
|
|
84
113
|
requestedApiVersion: undefined,
|
|
85
114
|
expectedApiVersion: 'full',
|
|
@@ -87,6 +116,51 @@ describe('txRequest utils', () => {
|
|
|
87
116
|
shouldThrow: false,
|
|
88
117
|
};
|
|
89
118
|
}),
|
|
119
|
+
// EdDSA MPCv2: all wallet types + 'full' explicitly → returns 'full'
|
|
120
|
+
...['hot', 'cold', 'custodial', 'backing'].map((walletType) => {
|
|
121
|
+
return {
|
|
122
|
+
wallet: {
|
|
123
|
+
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
124
|
+
type: () => walletType,
|
|
125
|
+
multisigType: () => 'tss',
|
|
126
|
+
multisigTypeVersion: () => 'MPCv2',
|
|
127
|
+
},
|
|
128
|
+
requestedApiVersion: 'full',
|
|
129
|
+
expectedApiVersion: 'full',
|
|
130
|
+
expectedErrorMessage: '',
|
|
131
|
+
shouldThrow: false,
|
|
132
|
+
};
|
|
133
|
+
}),
|
|
134
|
+
// EdDSA MPCv2: non-hot wallet types + undefined → defaults to 'full'
|
|
135
|
+
...['cold', 'custodial', 'backing'].map((walletType) => {
|
|
136
|
+
return {
|
|
137
|
+
wallet: {
|
|
138
|
+
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
139
|
+
type: () => walletType,
|
|
140
|
+
multisigType: () => 'tss',
|
|
141
|
+
multisigTypeVersion: () => 'MPCv2',
|
|
142
|
+
},
|
|
143
|
+
requestedApiVersion: undefined,
|
|
144
|
+
expectedApiVersion: 'full',
|
|
145
|
+
expectedErrorMessage: '',
|
|
146
|
+
shouldThrow: false,
|
|
147
|
+
};
|
|
148
|
+
}),
|
|
149
|
+
// EdDSA MPCv2: non-hot wallet types + 'lite' → throws EdDSA MPCv2 error
|
|
150
|
+
...['cold', 'custodial', 'backing'].map((walletType) => {
|
|
151
|
+
return {
|
|
152
|
+
wallet: {
|
|
153
|
+
baseCoin: { getMPCAlgorithm: () => 'eddsa' },
|
|
154
|
+
type: () => walletType,
|
|
155
|
+
multisigType: () => 'tss',
|
|
156
|
+
multisigTypeVersion: () => 'MPCv2',
|
|
157
|
+
},
|
|
158
|
+
requestedApiVersion: 'lite',
|
|
159
|
+
expectedApiVersion: '',
|
|
160
|
+
expectedErrorMessage: 'For EdDSA MPCv2 tss wallets, parameter `apiVersion` must be `full`.',
|
|
161
|
+
shouldThrow: true,
|
|
162
|
+
};
|
|
163
|
+
}),
|
|
90
164
|
];
|
|
91
165
|
testCases.forEach((testCase) => {
|
|
92
166
|
if (testCase.expectedErrorMessage) {
|
|
@@ -102,4 +176,4 @@ describe('txRequest utils', () => {
|
|
|
102
176
|
});
|
|
103
177
|
});
|
|
104
178
|
});
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3R4UmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUVoQixxRUFBK0U7QUFFL0UsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixRQUFRLENBQUMsd0JBQXdCLEVBQUU7UUFDakMsTUFBTSxTQUFTLEdBQUc7WUFDaEI7Z0JBQ0UsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUU7b0JBQzVDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO29CQUNqQixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztpQkFDUjtnQkFDbkIsbUJBQW1CLEVBQUUsTUFBTTtnQkFDM0Isa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsb0JBQW9CLEVBQUUsK0RBQStEO2FBQ3RGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUU7b0JBQzVDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNO29CQUNsQixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztpQkFDUjtnQkFDbkIsbUJBQW1CLEVBQUUsTUFBTTtnQkFDM0Isa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsb0JBQW9CLEVBQUUsa0ZBQWtGO2FBQ3pHO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUU7b0JBQzVDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO29CQUNqQixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztpQkFDUjtnQkFDbkIsbUJBQW1CLEVB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QUcsRUFBRSxDQUNKLElBQUEsa0NBQXNCLEVBQ3BCLFFBQVEsQ0FBQyxNQUFNLEVBQ2YsUUFBUSxDQUFDLG1CQUE2QyxDQUN2RCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sRUFBRSxDQUFDLGlCQUFpQixRQUFRLENBQUMsa0JBQWtCLCtCQUM3QyxRQUFRLENBQUMsbUJBQ1gsb0JBQW9CLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBQzVHLElBQUEsa0NBQXNCLEVBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsbUJBQTZDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUMxRyxRQUFRLENBQUMsa0JBQWtCLENBQzVCLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgQXBpVmVyc2lvbiwgSVdhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRUeFJlcXVlc3RBcGlWZXJzaW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3R4UmVxdWVzdCc7XG5cbmRlc2NyaWJlKCd0eFJlcXVlc3QgdXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdnZXRUeFJlcXVlc3RBcGlWZXJzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRlc3RDYXNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWNkc2EnIH0sXG4gICAgICAgICAgdHlwZTogKCkgPT4gJ2hvdCcsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgfSBhcyBhbnkgYXMgSVdhbGxldCxcbiAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICcnLFxuICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJ0ZvciBFQ0RTQSB0c3Mgd2FsbGV0cywgcGFyYW1ldGVyIGBhcGlWZXJzaW9uYCBtdXN0IGJlIGBmdWxsYC4nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWRkc2EnIH0sXG4gICAgICAgICAgdHlwZTogKCkgPT4gJ2NvbGQnLFxuICAgICAgICAgIG11bHRpc2lnVHlwZTogKCkgPT4gJ3RzcycsXG4gICAgICAgIH0gYXMgYW55IGFzIElXYWxsZXQsXG4gICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgZXhwZWN0ZWRBcGlWZXJzaW9uOiAnJyxcbiAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICdGb3Igbm9uIHNlbGYtY3VzdG9kaWFsIChob3QpIHRzcyB3YWxsZXRzLCBwYXJhbWV0ZXIgYGFwaVZlcnNpb25gIG11c3QgYmUgYGZ1bGxgLicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAnaG90JyxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICByZXF1ZXN0ZWRBcGlWZXJzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJycsXG4gICAgICB9LFxuICAgICAgLi4uWydob3QnLCAnY29sZCcsICdjdXN0b2RpYWwnLCAnYmFja2luZyddLm1hcCgod2FsbGV0VHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdhbGxldDoge1xuICAgICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWNkc2EnIH0sXG4gICAgICAgICAgICB0eXBlOiAoKSA9PiB3YWxsZXRUeXBlLFxuICAgICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJycsXG4gICAgICAgICAgc2hvdWxkVGhyb3c6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICAuLi5bJ2hvdCcsICdjb2xkJywgJ2N1c3RvZGlhbCcsICdiYWNraW5nJ10ubWFwKCh3YWxsZXRUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlY2RzYScgfSxcbiAgICAgICAgICAgIHR5cGU6ICgpID0+IHdhbGxldFR5cGUsXG4gICAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICAgIH0gYXMgYW55IGFzIElXYWxsZXQsXG4gICAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlOiAnJyxcbiAgICAgICAgICBzaG91bGRUaHJvdzogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIC4uLlsnaG90JywgJ2NvbGQnLCAnY3VzdG9kaWFsJywgJ2JhY2tpbmcnXS5tYXAoKHdhbGxldFR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICAgIGJhc2VDb2luOiB7IGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VkZHNhJyB9LFxuICAgICAgICAgICAgdHlwZTogKCkgPT4gd2FsbGV0VHlwZSxcbiAgICAgICAgICAgIG11bHRpc2lnVHlwZTogKCkgPT4gJ3RzcycsXG4gICAgICAgICAgfSBhcyBhbnkgYXMgSVdhbGxldCxcbiAgICAgICAgICByZXF1ZXN0ZWRBcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgZXhwZWN0ZWRBcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICcnLFxuICAgICAgICAgIHNob3VsZFRocm93OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgLi4uWydjb2xkJywgJ2N1c3RvZGlhbCcsICdiYWNraW5nJ10ubWFwKCh3YWxsZXRUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICAgIHR5cGU6ICgpID0+IHdhbGxldFR5cGUsXG4gICAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICAgIH0gYXMgYW55IGFzIElXYWxsZXQsXG4gICAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlOiAnJyxcbiAgICAgICAgICBzaG91bGRUaHJvdzogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHRlc3RDYXNlKSA9PiB7XG4gICAgICBpZiAodGVzdENhc2UuZXhwZWN0ZWRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgaXQoYHNob3VsZCB0aHJvdyBhbiBlcnJvciBpZiByZXF1ZXN0ZWQgYXBpVmVyc2lvbiBpcyAke1xuICAgICAgICAgIHRlc3RDYXNlLnJlcXVlc3RlZEFwaVZlcnNpb25cbiAgICAgICAgfSBmb3Igd2FsbGV0IHR5cGUgJHt0ZXN0Q2FzZS53YWxsZXQudHlwZSgpfSBmb3IgYSAke3Rlc3RDYXNlLndhbGxldC5iYXNlQ29pbi5nZXRNUENBbGdvcml0aG0oKX0gd2FsbGV0YCwgKCkgPT4ge1xuICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgZ2V0VHhSZXF1ZXN0QXBpVmVyc2lvbihcbiAgICAgICAgICAgICAgdGVzdENhc2Uud2FsbGV0LFxuICAgICAgICAgICAgICB0ZXN0Q2FzZS5yZXF1ZXN0ZWRBcGlWZXJzaW9uIGFzIEFwaVZlcnNpb24gfCB1bmRlZmluZWRcbiAgICAgICAgICAgICkpLnNob3VsZC50aHJvdyh0ZXN0Q2FzZS5leHBlY3RlZEVycm9yTWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXQoYHNob3VsZCByZXR1cm4gJHt0ZXN0Q2FzZS5leHBlY3RlZEFwaVZlcnNpb259IGlmIHJlcXVlc3RlZCBhcGlWZXJzaW9uIGlzICR7XG4gICAgICAgICAgdGVzdENhc2UucmVxdWVzdGVkQXBpVmVyc2lvblxuICAgICAgICB9IGZvciB3YWxsZXQgdHlwZSAke3Rlc3RDYXNlLndhbGxldC50eXBlKCl9IGZvciBhICR7dGVzdENhc2Uud2FsbGV0LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpfSB3YWxsZXRgLCAoKSA9PiB7XG4gICAgICAgICAgZ2V0VHhSZXF1ZXN0QXBpVmVyc2lvbih0ZXN0Q2FzZS53YWxsZXQsIHRlc3RDYXNlLnJlcXVlc3RlZEFwaVZlcnNpb24gYXMgQXBpVmVyc2lvbiB8IHVuZGVmaW5lZCkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICAgdGVzdENhc2UuZXhwZWN0ZWRBcGlWZXJzaW9uXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3R4UmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUVoQixxRUFBK0U7QUFFL0UsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixRQUFRLENBQUMsd0JBQXdCLEVBQUU7UUFDakMsTUFBTSxTQUFTLEdBQUc7WUFDaEI7Z0JBQ0UsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUU7b0JBQzVDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO29CQUNqQixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztvQkFDekIsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztpQkFDbkI7Z0JBQ25CLG1CQUFtQixFQUFFLE1BQU07Z0JBQzNCLGtCQUFrQixFQUFFLEVBQUU7Z0JBQ3RCLG9CQUFvQixFQUFFLCtEQUErRDthQUN0RjtZQUNEO2dCQUNFLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFO29CQUM1QyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTTtvQkFDbEIsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7b0JBQ3pCLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVM7aUJBQ25CO2dCQUNuQixtQkFBbUIsRUFBRSxNQUFNO2dCQUMzQixrQkFBa0IsRUFBRSxFQUFFO2dCQUN0QixvQkFBb0IsRUFBRSxrRkFBa0Y7YUFDekc7WUFDRDtnQkFDRSxNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRTtvQkFDNUMsSUFBSSxFQUFF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aVZlcnNpb24sIElXYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0VHhSZXF1ZXN0QXBpVmVyc2lvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90eFJlcXVlc3QnO1xuXG5kZXNjcmliZSgndHhSZXF1ZXN0IHV0aWxzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2V0VHhSZXF1ZXN0QXBpVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbXG4gICAgICB7XG4gICAgICAgIHdhbGxldDoge1xuICAgICAgICAgIGJhc2VDb2luOiB7IGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VjZHNhJyB9LFxuICAgICAgICAgIHR5cGU6ICgpID0+ICdob3QnLFxuICAgICAgICAgIG11bHRpc2lnVHlwZTogKCkgPT4gJ3RzcycsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICByZXF1ZXN0ZWRBcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJycsXG4gICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlOiAnRm9yIEVDRFNBIHRzcyB3YWxsZXRzLCBwYXJhbWV0ZXIgYGFwaVZlcnNpb25gIG11c3QgYmUgYGZ1bGxgLicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAnY29sZCcsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICAgIH0gYXMgYW55IGFzIElXYWxsZXQsXG4gICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgZXhwZWN0ZWRBcGlWZXJzaW9uOiAnJyxcbiAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICdGb3Igbm9uIHNlbGYtY3VzdG9kaWFsIChob3QpIHRzcyB3YWxsZXRzLCBwYXJhbWV0ZXIgYGFwaVZlcnNpb25gIG11c3QgYmUgYGZ1bGxgLicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAnaG90JyxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICAgfSBhcyBhbnkgYXMgSVdhbGxldCxcbiAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICcnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWRkc2EnIH0sXG4gICAgICAgICAgdHlwZTogKCkgPT4gJ2hvdCcsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAoKSA9PiAnTVBDdjInLFxuICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICByZXF1ZXN0ZWRBcGlWZXJzaW9uOiAnbGl0ZScgYXMgQXBpVmVyc2lvbixcbiAgICAgICAgZXhwZWN0ZWRBcGlWZXJzaW9uOiAnJyxcbiAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICdGb3IgRWREU0EgTVBDdjIgdHNzIHdhbGxldHMsIHBhcmFtZXRlciBgYXBpVmVyc2lvbmAgbXVzdCBiZSBgZnVsbGAuJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHdhbGxldDoge1xuICAgICAgICAgIGJhc2VDb2luOiB7IGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VkZHNhJyB9LFxuICAgICAgICAgIHR5cGU6ICgpID0+ICdob3QnLFxuICAgICAgICAgIG11bHRpc2lnVHlwZTogKCkgPT4gJ3RzcycsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gJ01QQ3YyJyxcbiAgICAgICAgfSBhcyBhbnkgYXMgSVdhbGxldCxcbiAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICcnLFxuICAgICAgfSxcbiAgICAgIC4uLlsnaG90JywgJ2NvbGQnLCAnY3VzdG9kaWFsJywgJ2JhY2tpbmcnXS5tYXAoKHdhbGxldFR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICAgIGJhc2VDb2luOiB7IGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VjZHNhJyB9LFxuICAgICAgICAgICAgdHlwZTogKCkgPT4gd2FsbGV0VHlwZSxcbiAgICAgICAgICAgIG11bHRpc2lnVHlwZTogKCkgPT4gJ3RzcycsXG4gICAgICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICAgICAgfSBhcyBhbnkgYXMgSVdhbGxldCxcbiAgICAgICAgICByZXF1ZXN0ZWRBcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgZXhwZWN0ZWRBcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICcnLFxuICAgICAgICAgIHNob3VsZFRocm93OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgLi4uWydob3QnLCAnY29sZCcsICdjdXN0b2RpYWwnLCAnYmFja2luZyddLm1hcCgod2FsbGV0VHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdhbGxldDoge1xuICAgICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWNkc2EnIH0sXG4gICAgICAgICAgICB0eXBlOiAoKSA9PiB3YWxsZXRUeXBlLFxuICAgICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJycsXG4gICAgICAgICAgc2hvdWxkVGhyb3c6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICAuLi5bJ2hvdCcsICdjb2xkJywgJ2N1c3RvZGlhbCcsICdiYWNraW5nJ10ubWFwKCh3YWxsZXRUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICAgIHR5cGU6ICgpID0+IHdhbGxldFR5cGUsXG4gICAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgICAgIH0gYXMgYW55IGFzIElXYWxsZXQsXG4gICAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlOiAnJyxcbiAgICAgICAgICBzaG91bGRUaHJvdzogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIC4uLlsnY29sZCcsICdjdXN0b2RpYWwnLCAnYmFja2luZyddLm1hcCgod2FsbGV0VHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdhbGxldDoge1xuICAgICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWRkc2EnIH0sXG4gICAgICAgICAgICB0eXBlOiAoKSA9PiB3YWxsZXRUeXBlLFxuICAgICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJycsXG4gICAgICAgICAgc2hvdWxkVGhyb3c6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICAvLyBFZERTQSBNUEN2MjogYWxsIHdhbGxldCB0eXBlcyArICdmdWxsJyBleHBsaWNpdGx5IOKGkiByZXR1cm5zICdmdWxsJ1xuICAgICAgLi4uWydob3QnLCAnY29sZCcsICdjdXN0b2RpYWwnLCAnYmFja2luZyddLm1hcCgod2FsbGV0VHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdhbGxldDoge1xuICAgICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWRkc2EnIH0sXG4gICAgICAgICAgICB0eXBlOiAoKSA9PiB3YWxsZXRUeXBlLFxuICAgICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246ICgpID0+ICdNUEN2MicsXG4gICAgICAgICAgfSBhcyBhbnkgYXMgSVdhbGxldCxcbiAgICAgICAgICByZXF1ZXN0ZWRBcGlWZXJzaW9uOiAnZnVsbCcgYXMgQXBpVmVyc2lvbixcbiAgICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJycsXG4gICAgICAgICAgc2hvdWxkVGhyb3c6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICAvLyBFZERTQSBNUEN2Mjogbm9uLWhvdCB3YWxsZXQgdHlwZXMgKyB1bmRlZmluZWQg4oaSIGRlZmF1bHRzIHRvICdmdWxsJ1xuICAgICAgLi4uWydjb2xkJywgJ2N1c3RvZGlhbCcsICdiYWNraW5nJ10ubWFwKCh3YWxsZXRUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICAgIHR5cGU6ICgpID0+IHdhbGxldFR5cGUsXG4gICAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gJ01QQ3YyJyxcbiAgICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJycsXG4gICAgICAgICAgc2hvdWxkVGhyb3c6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICAvLyBFZERTQSBNUEN2Mjogbm9uLWhvdCB3YWxsZXQgdHlwZXMgKyAnbGl0ZScg4oaSIHRocm93cyBFZERTQSBNUEN2MiBlcnJvclxuICAgICAgLi4uWydjb2xkJywgJ2N1c3RvZGlhbCcsICdiYWNraW5nJ10ubWFwKCh3YWxsZXRUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICAgIHR5cGU6ICgpID0+IHdhbGxldFR5cGUsXG4gICAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gJ01QQ3YyJyxcbiAgICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246ICdsaXRlJyBhcyBBcGlWZXJzaW9uLFxuICAgICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJycsXG4gICAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICdGb3IgRWREU0EgTVBDdjIgdHNzIHdhbGxldHMsIHBhcmFtZXRlciBgYXBpVmVyc2lvbmAgbXVzdCBiZSBgZnVsbGAuJyxcbiAgICAgICAgICBzaG91bGRUaHJvdzogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgodGVzdENhc2UpID0+IHtcbiAgICAgIGlmICh0ZXN0Q2FzZS5leHBlY3RlZEVycm9yTWVzc2FnZSkge1xuICAgICAgICBpdChgc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHJlcXVlc3RlZCBhcGlWZXJzaW9uIGlzICR7XG4gICAgICAgICAgdGVzdENhc2UucmVxdWVzdGVkQXBpVmVyc2lvblxuICAgICAgICB9IGZvciB3YWxsZXQgdHlwZSAke3Rlc3RDYXNlLndhbGxldC50eXBlKCl9IGZvciBhICR7dGVzdENhc2Uud2FsbGV0LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpfSB3YWxsZXRgLCAoKSA9PiB7XG4gICAgICAgICAgKCgpID0+XG4gICAgICAgICAgICBnZXRUeFJlcXVlc3RBcGlWZXJzaW9uKFxuICAgICAgICAgICAgICB0ZXN0Q2FzZS53YWxsZXQsXG4gICAgICAgICAgICAgIHRlc3RDYXNlLnJlcXVlc3RlZEFwaVZlcnNpb24gYXMgQXBpVmVyc2lvbiB8IHVuZGVmaW5lZFxuICAgICAgICAgICAgKSkuc2hvdWxkLnRocm93KHRlc3RDYXNlLmV4cGVjdGVkRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdChgc2hvdWxkIHJldHVybiAke3Rlc3RDYXNlLmV4cGVjdGVkQXBpVmVyc2lvbn0gaWYgcmVxdWVzdGVkIGFwaVZlcnNpb24gaXMgJHtcbiAgICAgICAgICB0ZXN0Q2FzZS5yZXF1ZXN0ZWRBcGlWZXJzaW9uXG4gICAgICAgIH0gZm9yIHdhbGxldCB0eXBlICR7dGVzdENhc2Uud2FsbGV0LnR5cGUoKX0gZm9yIGEgJHt0ZXN0Q2FzZS53YWxsZXQuYmFzZUNvaW4uZ2V0TVBDQWxnb3JpdGhtKCl9IHdhbGxldGAsICgpID0+IHtcbiAgICAgICAgICBnZXRUeFJlcXVlc3RBcGlWZXJzaW9uKHRlc3RDYXNlLndhbGxldCwgdGVzdENhc2UucmVxdWVzdGVkQXBpVmVyc2lvbiBhcyBBcGlWZXJzaW9uIHwgdW5kZWZpbmVkKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgICB0ZXN0Q2FzZS5leHBlY3RlZEFwaVZlcnNpb25cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ofcWalletSignTransaction.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/ofcWalletSignTransaction.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/**
|
|
7
|
+
* @prettier
|
|
8
|
+
*/
|
|
9
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
10
|
+
require("should");
|
|
11
|
+
const src_1 = require("../../../../src");
|
|
12
|
+
const coins_1 = require("../../../../src/coins");
|
|
13
|
+
const TEST_TOKEN_CONFIG = {
|
|
14
|
+
coin: 'ofcusdt',
|
|
15
|
+
decimalPlaces: 6,
|
|
16
|
+
name: 'OFCUSDT',
|
|
17
|
+
type: 'ofcusdt',
|
|
18
|
+
backingCoin: 'usdt',
|
|
19
|
+
isFiat: false,
|
|
20
|
+
};
|
|
21
|
+
describe('Wallet - OFC', function () {
|
|
22
|
+
let wallet;
|
|
23
|
+
let mockBitGo;
|
|
24
|
+
let ofcToken;
|
|
25
|
+
let signMessageStub;
|
|
26
|
+
const signatureBytes = Buffer.from('aabbccdd', 'hex');
|
|
27
|
+
const payload = '{"amount":"100","from":"alice","to":"bob"}';
|
|
28
|
+
const prv = 'test-prv';
|
|
29
|
+
// bg-<32 hex chars> is valid for OfcToken without needing to resolve the backing coin
|
|
30
|
+
const recipients = [{ address: 'bg-aabbccddeeff00112233445566778899', amount: '100' }];
|
|
31
|
+
const userPub = 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC51xERxh8vDMjc3PiGpQ3VeQcHBiGxbsrRXbCKQZZxBtDMrmBRzxRMkBJGsC9bsYb5tggVF3jGfEE';
|
|
32
|
+
const walletData = {
|
|
33
|
+
id: 'test-wallet-id',
|
|
34
|
+
coin: 'ofcusdt',
|
|
35
|
+
keys: ['user-key', 'backup-key', 'bitgo-key'],
|
|
36
|
+
type: 'trading',
|
|
37
|
+
multisigType: 'onchain',
|
|
38
|
+
enterprise: 'ent-id',
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Creates a fluent request mock that handles .query().send().result() and .send().result()
|
|
42
|
+
* chains, resolving with the provided value.
|
|
43
|
+
*/
|
|
44
|
+
function makeRequestChain(resolved) {
|
|
45
|
+
const chain = {};
|
|
46
|
+
chain.query = sinon_1.default.stub().returns(chain);
|
|
47
|
+
chain.send = sinon_1.default.stub().returns(chain);
|
|
48
|
+
chain.result = sinon_1.default.stub().resolves(resolved);
|
|
49
|
+
return chain;
|
|
50
|
+
}
|
|
51
|
+
beforeEach(function () {
|
|
52
|
+
signMessageStub = sinon_1.default.stub(src_1.BaseCoin.prototype, 'signMessage');
|
|
53
|
+
signMessageStub.withArgs({ prv }, payload).resolves(signatureBytes);
|
|
54
|
+
sinon_1.default.stub(src_1.BaseCoin.prototype, 'keychains').returns({
|
|
55
|
+
getKeysForSigning: sinon_1.default.stub().resolves([{ id: walletData.keys[0], pub: userPub }]),
|
|
56
|
+
});
|
|
57
|
+
mockBitGo = {
|
|
58
|
+
url: sinon_1.default.stub().returns('https://test.bitgo.com/'),
|
|
59
|
+
post: sinon_1.default.stub(),
|
|
60
|
+
setRequestTracer: sinon_1.default.stub(),
|
|
61
|
+
};
|
|
62
|
+
ofcToken = new coins_1.OfcToken(mockBitGo, TEST_TOKEN_CONFIG);
|
|
63
|
+
mockBitGo.coin = sinon_1.default.stub().returns(ofcToken);
|
|
64
|
+
wallet = new src_1.Wallet(mockBitGo, ofcToken, walletData);
|
|
65
|
+
});
|
|
66
|
+
afterEach(function () {
|
|
67
|
+
sinon_1.default.restore();
|
|
68
|
+
});
|
|
69
|
+
describe('with userKeySigningRequired: true (local signing via user key)', function () {
|
|
70
|
+
const buildUrl = () => ofcToken.url('/wallet/' + walletData.id + '/tx/build');
|
|
71
|
+
const signUrl = () => ofcToken.url('/wallet/' + walletData.id + '/tx/sign');
|
|
72
|
+
const sendUrl = () => ofcToken.url('/wallet/' + walletData.id + '/tx/send');
|
|
73
|
+
describe('signTransaction', function () {
|
|
74
|
+
it('should call baseCoin.signMessage with the prv and payload', async function () {
|
|
75
|
+
const result = await wallet.signTransaction({ txPrebuild: { payload }, prv });
|
|
76
|
+
signMessageStub.calledOnceWith({ prv }, payload).should.be.true();
|
|
77
|
+
mockBitGo.post.called.should.be.false();
|
|
78
|
+
result.should.deepEqual({ halfSigned: { payload, signature: signatureBytes.toString('hex') } });
|
|
79
|
+
});
|
|
80
|
+
describe('with walletPassphrase and keychain', function () {
|
|
81
|
+
const walletPassphrase = 'test-passphrase';
|
|
82
|
+
const encryptedPrv = 'encrypted-prv-blob';
|
|
83
|
+
beforeEach(function () {
|
|
84
|
+
// compiled wallet.js: getUserPrv (sync) → decryptKeychainPrivateKey → bitgo.decrypt
|
|
85
|
+
// TypeScript source: getUserPrvAsync → decryptKeychainPrivateKeyAsync → bitgo.decryptAsync
|
|
86
|
+
mockBitGo.decrypt = sinon_1.default.stub().returns(prv);
|
|
87
|
+
mockBitGo.decryptAsync = sinon_1.default.stub().resolves(prv);
|
|
88
|
+
});
|
|
89
|
+
it('should decrypt the keychain with the passphrase and sign via baseCoin.signMessage', async function () {
|
|
90
|
+
const result = await wallet.signTransaction({
|
|
91
|
+
txPrebuild: { payload },
|
|
92
|
+
walletPassphrase,
|
|
93
|
+
keychain: { pub: userPub, encryptedPrv },
|
|
94
|
+
});
|
|
95
|
+
const decryptCalled = mockBitGo.decrypt.calledWith({ input: encryptedPrv, password: walletPassphrase }) ||
|
|
96
|
+
mockBitGo.decryptAsync.calledWith({ input: encryptedPrv, password: walletPassphrase });
|
|
97
|
+
decryptCalled.should.be.true();
|
|
98
|
+
signMessageStub.calledOnceWith({ prv }, payload).should.be.true();
|
|
99
|
+
mockBitGo.post.called.should.be.false();
|
|
100
|
+
result.should.deepEqual({ halfSigned: { payload, signature: signatureBytes.toString('hex') } });
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('prebuildAndSignTransaction', function () {
|
|
105
|
+
beforeEach(function () {
|
|
106
|
+
mockBitGo.post.withArgs(buildUrl()).returns(makeRequestChain({ payload }));
|
|
107
|
+
});
|
|
108
|
+
it('should call the prebuild API then sign locally with the prv', async function () {
|
|
109
|
+
const result = await wallet.prebuildAndSignTransaction({ prv });
|
|
110
|
+
mockBitGo.post.calledWith(buildUrl()).should.be.true();
|
|
111
|
+
mockBitGo.post.calledWith(signUrl()).should.be.false();
|
|
112
|
+
signMessageStub.calledOnceWith({ prv }, payload).should.be.true();
|
|
113
|
+
result.should.deepEqual({ halfSigned: { payload, signature: signatureBytes.toString('hex') } });
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
describe('sendMany', function () {
|
|
117
|
+
beforeEach(function () {
|
|
118
|
+
mockBitGo.post.withArgs(buildUrl()).returns(makeRequestChain({ payload }));
|
|
119
|
+
mockBitGo.post.withArgs(sendUrl()).returns(makeRequestChain({ txid: 'test-txid', status: 'signed' }));
|
|
120
|
+
});
|
|
121
|
+
it('should prebuild, sign locally, and submit to the send endpoint', async function () {
|
|
122
|
+
const result = await wallet.sendMany({ recipients, prv });
|
|
123
|
+
mockBitGo.post.calledWith(buildUrl()).should.be.true();
|
|
124
|
+
signMessageStub.calledOnceWith({ prv }, payload).should.be.true();
|
|
125
|
+
mockBitGo.post.calledWith(sendUrl()).should.be.true();
|
|
126
|
+
result.should.deepEqual({ txid: 'test-txid', status: 'signed' });
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe('with userKeySigningRequired: false (remote signing via BitGo key)', function () {
|
|
131
|
+
const signUrl = () => ofcToken.url('/wallet/' + walletData.id + '/tx/sign');
|
|
132
|
+
const buildUrl = () => ofcToken.url('/wallet/' + walletData.id + '/tx/build');
|
|
133
|
+
const sendUrl = () => ofcToken.url('/wallet/' + walletData.id + '/tx/send');
|
|
134
|
+
const hexSignature = 'deadbeef';
|
|
135
|
+
let remoteWallet;
|
|
136
|
+
beforeEach(function () {
|
|
137
|
+
remoteWallet = new src_1.Wallet(mockBitGo, ofcToken, { ...walletData, userKeySigningRequired: false });
|
|
138
|
+
// compiled wallet.js calls getUserPrv (sync) for all coins; stub to return undefined
|
|
139
|
+
// so the remote signing path reaches baseCoin.signTransaction with prv: undefined
|
|
140
|
+
remoteWallet.getUserPrv = sinon_1.default.stub().returns(undefined);
|
|
141
|
+
mockBitGo.post.withArgs(signUrl()).returns(makeRequestChain({ signature: hexSignature }));
|
|
142
|
+
});
|
|
143
|
+
it('should sign locally when userKeySigningRequired is true and prv is provided', async function () {
|
|
144
|
+
const strictWallet = new src_1.Wallet(mockBitGo, ofcToken, { ...walletData, userKeySigningRequired: true });
|
|
145
|
+
const result = await strictWallet.signTransaction({ txPrebuild: { payload }, prv });
|
|
146
|
+
signMessageStub.calledOnceWith({ prv }, payload).should.be.true();
|
|
147
|
+
mockBitGo.post.calledWith(signUrl()).should.be.false();
|
|
148
|
+
result.should.deepEqual({ halfSigned: { payload, signature: signatureBytes.toString('hex') } });
|
|
149
|
+
});
|
|
150
|
+
describe('signTransaction', function () {
|
|
151
|
+
it('should POST to the sign endpoint and return the halfSigned result', async function () {
|
|
152
|
+
const result = await remoteWallet.signTransaction({ txPrebuild: { payload } });
|
|
153
|
+
mockBitGo.post.calledWith(signUrl()).should.be.true();
|
|
154
|
+
signMessageStub.called.should.be.false();
|
|
155
|
+
result.should.deepEqual({ halfSigned: { payload, signature: hexSignature } });
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('prebuildAndSignTransaction', function () {
|
|
159
|
+
beforeEach(function () {
|
|
160
|
+
mockBitGo.post.withArgs(buildUrl()).returns(makeRequestChain({ payload }));
|
|
161
|
+
});
|
|
162
|
+
it('should prebuild and remotely sign the transaction', async function () {
|
|
163
|
+
const result = await remoteWallet.prebuildAndSignTransaction({});
|
|
164
|
+
mockBitGo.post.calledWith(buildUrl()).should.be.true();
|
|
165
|
+
mockBitGo.post.calledWith(signUrl()).should.be.true();
|
|
166
|
+
signMessageStub.called.should.be.false();
|
|
167
|
+
result.should.deepEqual({ halfSigned: { payload, signature: hexSignature } });
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('sendMany', function () {
|
|
171
|
+
beforeEach(function () {
|
|
172
|
+
mockBitGo.post.withArgs(buildUrl()).returns(makeRequestChain({ payload }));
|
|
173
|
+
mockBitGo.post.withArgs(sendUrl()).returns(makeRequestChain({ txid: 'test-txid', status: 'signed' }));
|
|
174
|
+
});
|
|
175
|
+
it('should prebuild, remotely sign, and send the transaction', async function () {
|
|
176
|
+
const result = await remoteWallet.sendMany({ recipients });
|
|
177
|
+
mockBitGo.post.calledWith(buildUrl()).should.be.true();
|
|
178
|
+
mockBitGo.post.calledWith(signUrl()).should.be.true();
|
|
179
|
+
signMessageStub.called.should.be.false();
|
|
180
|
+
result.should.deepEqual({ txid: 'test-txid', status: 'signed' });
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZjV2FsbGV0U2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC9vZmNXYWxsZXRTaWduVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7R0FFRztBQUNILGtEQUEwQjtBQUMxQixrQkFBZ0I7QUFDaEIseUNBQW1EO0FBQ25ELGlEQUFpRDtBQUVqRCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLElBQUksRUFBRSxTQUFTO0lBQ2YsYUFBYSxFQUFFLENBQUM7SUFDaEIsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsU0FBUztJQUNmLFdBQVcsRUFBRSxNQUFNO0lBQ25CLE1BQU0sRUFBRSxLQUFLO0NBQ2QsQ0FBQztBQUVGLFFBQVEsQ0FBQyxjQUFjLEVBQUU7SUFDdkIsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxTQUFjLENBQUM7SUFDbkIsSUFBSSxRQUFrQixDQUFDO0lBQ3ZCLElBQUksZUFBZ0MsQ0FBQztJQUNyQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyw0Q0FBNEMsQ0FBQztJQUM3RCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUM7SUFDdkIsc0ZBQXNGO0lBQ3RGLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkYsTUFBTSxPQUFPLEdBQ1gsaUhBQWlILENBQUM7SUFFcEgsTUFBTSxVQUFVLEdBQUc7UUFDakIsRUFBRSxFQUFFLGdCQUFnQjtRQUNwQixJQUFJLEVBQUUsU0FBUztRQUNmLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1FBQzdDLElBQUksRUFBRSxTQUFTO1FBQ2YsWUFBWSxFQUFFLFNBQVM7UUFDdkIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztJQUVGOzs7T0FHRztJQUNILFNBQVMsZ0JBQWdCLENBQUMsUUFBaUI7UUFDekMsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxLQUFLLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxLQUFLLENBQUMsSUFBSSxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsS0FBSyxDQUFDLE1BQU0sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFVBQVUsQ0FBQztRQUNULGVBQWUsR0FBRyxlQUFLLENBQUMsSUFBSSxDQUFDLGNBQVEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRSxlQUFLLENBQUMsSUFBSSxDQUFDLGNBQVEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGlCQUFpQixFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzlFLENBQUMsQ0FBQztRQUNWLFNBQVMsR0FBRztZQUNWLEdBQUcsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO1lBQ3BELElBQUksRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUNGLFFBQVEsR0FBRyxJQUFJLGdCQUFRLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsU0FBUyxDQUFDLElBQUksR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sR0FBRyxJQUFJLFlBQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsZUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdFQUFnRSxFQUFFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDOUUsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUM1RSxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBRTVFLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSztnQkFDbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFFckYsZUFBZSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLENBQUMsQ0FBQyxDQUFDO1lBRUgsUUFBUSxDQUFDLG9DQUFvQyxFQUFFO2dCQUM3QyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO2dCQUMzQyxNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQztnQkFFMUMsVUFBVSxDQUFDO29CQUNULG9GQUFvRjtvQkFDcEYsbUdBQW1HO29CQUNuRyxTQUFTLENBQUMsT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEQsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEtBQUs7b0JBQzNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQzt3QkFDMUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFTO3dCQUM5QixnQkFBZ0I7d0JBQ2hCLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFTO3FCQUNoRCxDQUFDLENBQUM7b0JBRUgsTUFBTSxhQUFhLEdBQ2pCLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDakYsU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7b0JBQ3pGLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUMvQixlQUFlLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbEUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2xHLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRTtZQUNyQyxVQUFVLENBQUM7Z0JBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0UsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztnQkFDckUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsMEJBQTBCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUVoRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdkQsZUFBZSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ25CLFVBQVUsQ0FBQztnQkFDVCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0UsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEcsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSztnQkFDeEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBRTFELFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkQsZUFBZSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtRUFBbUUsRUFBRTtRQUM1RSxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDOUUsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUM1RSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUM7UUFDaEMsSUFBSSxZQUFvQixDQUFDO1FBRXpCLFVBQVUsQ0FBQztZQUNULFlBQVksR0FBRyxJQUFJLFlBQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNqRyxxRkFBcUY7WUFDckYsa0ZBQWtGO1lBQ2pGLFlBQW9CLENBQUMsVUFBVSxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZFQUE2RSxFQUFFLEtBQUs7WUFDckYsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUUzRixlQUFlLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEtBQUs7Z0JBQzNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBUyxFQUFFLENBQUMsQ0FBQztnQkFFdEYsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0RCxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRTtZQUNyQyxVQUFVLENBQUM7Z0JBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0UsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsS0FBSztnQkFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRWpFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkQsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0RCxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDbkIsVUFBVSxDQUFDO2dCQUNULFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLO2dCQUNsRSxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUUzRCxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgV2FsbGV0LCBCYXNlQ29pbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBPZmNUb2tlbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9jb2lucyc7XG5cbmNvbnN0IFRFU1RfVE9LRU5fQ09ORklHID0ge1xuICBjb2luOiAnb2ZjdXNkdCcsXG4gIGRlY2ltYWxQbGFjZXM6IDYsXG4gIG5hbWU6ICdPRkNVU0RUJyxcbiAgdHlwZTogJ29mY3VzZHQnLFxuICBiYWNraW5nQ29pbjogJ3VzZHQnLFxuICBpc0ZpYXQ6IGZhbHNlLFxufTtcblxuZGVzY3JpYmUoJ1dhbGxldCAtIE9GQycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHdhbGxldDogV2FsbGV0O1xuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBvZmNUb2tlbjogT2ZjVG9rZW47XG4gIGxldCBzaWduTWVzc2FnZVN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgY29uc3Qgc2lnbmF0dXJlQnl0ZXMgPSBCdWZmZXIuZnJvbSgnYWFiYmNjZGQnLCAnaGV4Jyk7XG4gIGNvbnN0IHBheWxvYWQgPSAne1wiYW1vdW50XCI6XCIxMDBcIixcImZyb21cIjpcImFsaWNlXCIsXCJ0b1wiOlwiYm9iXCJ9JztcbiAgY29uc3QgcHJ2ID0gJ3Rlc3QtcHJ2JztcbiAgLy8gYmctPDMyIGhleCBjaGFycz4gaXMgdmFsaWQgZm9yIE9mY1Rva2VuIHdpdGhvdXQgbmVlZGluZyB0byByZXNvbHZlIHRoZSBiYWNraW5nIGNvaW5cbiAgY29uc3QgcmVjaXBpZW50cyA9IFt7IGFkZHJlc3M6ICdiZy1hYWJiY2NkZGVlZmYwMDExMjIzMzQ0NTU2Njc3ODg5OScsIGFtb3VudDogJzEwMCcgfV07XG4gIGNvbnN0IHVzZXJQdWIgPVxuICAgICd4cHViNjYxTXlNd0FxUmJjRnRYZ1M1c1lKQUJxcUc5WUxtQzUxeEVSeGg4dkRNamMzUGlHcFEzVmVRY0hCaUd4YnNyUlhiQ0tRWlp4QnRETXJtQlJ6eFJNa0JKR3NDOWJzWWI1dGdnVkYzakdmRUUnO1xuXG4gIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgaWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgY29pbjogJ29mY3VzZHQnLFxuICAgIGtleXM6IFsndXNlci1rZXknLCAnYmFja3VwLWtleScsICdiaXRnby1rZXknXSxcbiAgICB0eXBlOiAndHJhZGluZycsXG4gICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgZW50ZXJwcmlzZTogJ2VudC1pZCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmbHVlbnQgcmVxdWVzdCBtb2NrIHRoYXQgaGFuZGxlcyAucXVlcnkoKS5zZW5kKCkucmVzdWx0KCkgYW5kIC5zZW5kKCkucmVzdWx0KClcbiAgICogY2hhaW5zLCByZXNvbHZpbmcgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBtYWtlUmVxdWVzdENoYWluKHJlc29sdmVkOiB1bmtub3duKTogYW55IHtcbiAgICBjb25zdCBjaGFpbjogYW55ID0ge307XG4gICAgY2hhaW4ucXVlcnkgPSBzaW5vbi5zdHViKCkucmV0dXJucyhjaGFpbik7XG4gICAgY2hhaW4uc2VuZCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGNoYWluKTtcbiAgICBjaGFpbi5yZXN1bHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMocmVzb2x2ZWQpO1xuICAgIHJldHVybiBjaGFpbjtcbiAgfVxuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpZ25NZXNzYWdlU3R1YiA9IHNpbm9uLnN0dWIoQmFzZUNvaW4ucHJvdG90eXBlLCAnc2lnbk1lc3NhZ2UnKTtcbiAgICBzaWduTWVzc2FnZVN0dWIud2l0aEFyZ3MoeyBwcnYgfSwgcGF5bG9hZCkucmVzb2x2ZXMoc2lnbmF0dXJlQnl0ZXMpO1xuICAgIHNpbm9uLnN0dWIoQmFzZUNvaW4ucHJvdG90eXBlLCAna2V5Y2hhaW5zJykucmV0dXJucyh7XG4gICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFt7IGlkOiB3YWxsZXREYXRhLmtleXNbMF0sIHB1YjogdXNlclB1YiB9XSksXG4gICAgfSBhcyBhbnkpO1xuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHVybDogc2lub24uc3R1YigpLnJldHVybnMoJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20vJyksXG4gICAgICBwb3N0OiBzaW5vbi5zdHViKCksXG4gICAgICBzZXRSZXF1ZXN0VHJhY2VyOiBzaW5vbi5zdHViKCksXG4gICAgfTtcbiAgICBvZmNUb2tlbiA9IG5ldyBPZmNUb2tlbihtb2NrQml0R28sIFRFU1RfVE9LRU5fQ09ORklHKTtcbiAgICBtb2NrQml0R28uY29pbiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG9mY1Rva2VuKTtcbiAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgb2ZjVG9rZW4sIHdhbGxldERhdGEpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggdXNlcktleVNpZ25pbmdSZXF1aXJlZDogdHJ1ZSAobG9jYWwgc2lnbmluZyB2aWEgdXNlciBrZXkpJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ1aWxkVXJsID0gKCkgPT4gb2ZjVG9rZW4udXJsKCcvd2FsbGV0LycgKyB3YWxsZXREYXRhLmlkICsgJy90eC9idWlsZCcpO1xuICAgIGNvbnN0IHNpZ25VcmwgPSAoKSA9PiBvZmNUb2tlbi51cmwoJy93YWxsZXQvJyArIHdhbGxldERhdGEuaWQgKyAnL3R4L3NpZ24nKTtcbiAgICBjb25zdCBzZW5kVXJsID0gKCkgPT4gb2ZjVG9rZW4udXJsKCcvd2FsbGV0LycgKyB3YWxsZXREYXRhLmlkICsgJy90eC9zZW5kJyk7XG5cbiAgICBkZXNjcmliZSgnc2lnblRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIGJhc2VDb2luLnNpZ25NZXNzYWdlIHdpdGggdGhlIHBydiBhbmQgcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgcGF5bG9hZCB9IGFzIGFueSwgcHJ2IH0pO1xuXG4gICAgICAgIHNpZ25NZXNzYWdlU3R1Yi5jYWxsZWRPbmNlV2l0aCh7IHBydiB9LCBwYXlsb2FkKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgaGFsZlNpZ25lZDogeyBwYXlsb2FkLCBzaWduYXR1cmU6IHNpZ25hdHVyZUJ5dGVzLnRvU3RyaW5nKCdoZXgnKSB9IH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aXRoIHdhbGxldFBhc3NwaHJhc2UgYW5kIGtleWNoYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3QtcGFzc3BocmFzZSc7XG4gICAgICAgIGNvbnN0IGVuY3J5cHRlZFBydiA9ICdlbmNyeXB0ZWQtcHJ2LWJsb2InO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIGNvbXBpbGVkIHdhbGxldC5qczogZ2V0VXNlclBydiAoc3luYykg4oaSIGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkg4oaSIGJpdGdvLmRlY3J5cHRcbiAgICAgICAgICAvLyBUeXBlU2NyaXB0IHNvdXJjZTogIGdldFVzZXJQcnZBc3luYyAgICAgICAg4oaSIGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXlBc3luYyDihpIgYml0Z28uZGVjcnlwdEFzeW5jXG4gICAgICAgICAgbW9ja0JpdEdvLmRlY3J5cHQgPSBzaW5vbi5zdHViKCkucmV0dXJucyhwcnYpO1xuICAgICAgICAgIG1vY2tCaXRHby5kZWNyeXB0QXN5bmMgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMocHJ2KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBkZWNyeXB0IHRoZSBrZXljaGFpbiB3aXRoIHRoZSBwYXNzcGhyYXNlIGFuZCBzaWduIHZpYSBiYXNlQ29pbi5zaWduTWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgcGF5bG9hZCB9IGFzIGFueSxcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgICBrZXljaGFpbjogeyBwdWI6IHVzZXJQdWIsIGVuY3J5cHRlZFBydiB9IGFzIGFueSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGRlY3J5cHRDYWxsZWQgPVxuICAgICAgICAgICAgbW9ja0JpdEdvLmRlY3J5cHQuY2FsbGVkV2l0aCh7IGlucHV0OiBlbmNyeXB0ZWRQcnYsIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlIH0pIHx8XG4gICAgICAgICAgICBtb2NrQml0R28uZGVjcnlwdEFzeW5jLmNhbGxlZFdpdGgoeyBpbnB1dDogZW5jcnlwdGVkUHJ2LCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICBkZWNyeXB0Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgc2lnbk1lc3NhZ2VTdHViLmNhbGxlZE9uY2VXaXRoKHsgcHJ2IH0sIHBheWxvYWQpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgaGFsZlNpZ25lZDogeyBwYXlsb2FkLCBzaWduYXR1cmU6IHNpZ25hdHVyZUJ5dGVzLnRvU3RyaW5nKCdoZXgnKSB9IH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tCaXRHby5wb3N0LndpdGhBcmdzKGJ1aWxkVXJsKCkpLnJldHVybnMobWFrZVJlcXVlc3RDaGFpbih7IHBheWxvYWQgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCB0aGUgcHJlYnVpbGQgQVBJIHRoZW4gc2lnbiBsb2NhbGx5IHdpdGggdGhlIHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHsgcHJ2IH0pO1xuXG4gICAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZFdpdGgoYnVpbGRVcmwoKSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkV2l0aChzaWduVXJsKCkpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICBzaWduTWVzc2FnZVN0dWIuY2FsbGVkT25jZVdpdGgoeyBwcnYgfSwgcGF5bG9hZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyBoYWxmU2lnbmVkOiB7IHBheWxvYWQsIHNpZ25hdHVyZTogc2lnbmF0dXJlQnl0ZXMudG9TdHJpbmcoJ2hleCcpIH0gfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZW5kTWFueScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NrQml0R28ucG9zdC53aXRoQXJncyhidWlsZFVybCgpKS5yZXR1cm5zKG1ha2VSZXF1ZXN0Q2hhaW4oeyBwYXlsb2FkIH0pKTtcbiAgICAgICAgbW9ja0JpdEdvLnBvc3Qud2l0aEFyZ3Moc2VuZFVybCgpKS5yZXR1cm5zKG1ha2VSZXF1ZXN0Q2hhaW4oeyB0eGlkOiAndGVzdC10eGlkJywgc3RhdHVzOiAnc2lnbmVkJyB9KSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwcmVidWlsZCwgc2lnbiBsb2NhbGx5LCBhbmQgc3VibWl0IHRvIHRoZSBzZW5kIGVuZHBvaW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuc2VuZE1hbnkoeyByZWNpcGllbnRzLCBwcnYgfSk7XG5cbiAgICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkV2l0aChidWlsZFVybCgpKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzaWduTWVzc2FnZVN0dWIuY2FsbGVkT25jZVdpdGgoeyBwcnYgfSwgcGF5bG9hZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkV2l0aChzZW5kVXJsKCkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgdHhpZDogJ3Rlc3QtdHhpZCcsIHN0YXR1czogJ3NpZ25lZCcgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggdXNlcktleVNpZ25pbmdSZXF1aXJlZDogZmFsc2UgKHJlbW90ZSBzaWduaW5nIHZpYSBCaXRHbyBrZXkpJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNpZ25VcmwgPSAoKSA9PiBvZmNUb2tlbi51cmwoJy93YWxsZXQvJyArIHdhbGxldERhdGEuaWQgKyAnL3R4L3NpZ24nKTtcbiAgICBjb25zdCBidWlsZFVybCA9ICgpID0+IG9mY1Rva2VuLnVybCgnL3dhbGxldC8nICsgd2FsbGV0RGF0YS5pZCArICcvdHgvYnVpbGQnKTtcbiAgICBjb25zdCBzZW5kVXJsID0gKCkgPT4gb2ZjVG9rZW4udXJsKCcvd2FsbGV0LycgKyB3YWxsZXREYXRhLmlkICsgJy90eC9zZW5kJyk7XG4gICAgY29uc3QgaGV4U2lnbmF0dXJlID0gJ2RlYWRiZWVmJztcbiAgICBsZXQgcmVtb3RlV2FsbGV0OiBXYWxsZXQ7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW90ZVdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBvZmNUb2tlbiwgeyAuLi53YWxsZXREYXRhLCB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICAgIC8vIGNvbXBpbGVkIHdhbGxldC5qcyBjYWxscyBnZXRVc2VyUHJ2IChzeW5jKSBmb3IgYWxsIGNvaW5zOyBzdHViIHRvIHJldHVybiB1bmRlZmluZWRcbiAgICAgIC8vIHNvIHRoZSByZW1vdGUgc2lnbmluZyBwYXRoIHJlYWNoZXMgYmFzZUNvaW4uc2lnblRyYW5zYWN0aW9uIHdpdGggcHJ2OiB1bmRlZmluZWRcbiAgICAgIChyZW1vdGVXYWxsZXQgYXMgYW55KS5nZXRVc2VyUHJ2ID0gc2lub24uc3R1YigpLnJldHVybnModW5kZWZpbmVkKTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LndpdGhBcmdzKHNpZ25VcmwoKSkucmV0dXJucyhtYWtlUmVxdWVzdENoYWluKHsgc2lnbmF0dXJlOiBoZXhTaWduYXR1cmUgfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIGxvY2FsbHkgd2hlbiB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkIGlzIHRydWUgYW5kIHBydiBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHN0cmljdFdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBvZmNUb2tlbiwgeyAuLi53YWxsZXREYXRhLCB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaWN0V2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgcGF5bG9hZCB9IGFzIGFueSwgcHJ2IH0pO1xuXG4gICAgICBzaWduTWVzc2FnZVN0dWIuY2FsbGVkT25jZVdpdGgoeyBwcnYgfSwgcGF5bG9hZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZFdpdGgoc2lnblVybCgpKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgaGFsZlNpZ25lZDogeyBwYXlsb2FkLCBzaWduYXR1cmU6IHNpZ25hdHVyZUJ5dGVzLnRvU3RyaW5nKCdoZXgnKSB9IH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgUE9TVCB0byB0aGUgc2lnbiBlbmRwb2ludCBhbmQgcmV0dXJuIHRoZSBoYWxmU2lnbmVkIHJlc3VsdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVtb3RlV2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgcGF5bG9hZCB9IGFzIGFueSB9KTtcblxuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWRXaXRoKHNpZ25VcmwoKSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2lnbk1lc3NhZ2VTdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyBoYWxmU2lnbmVkOiB7IHBheWxvYWQsIHNpZ25hdHVyZTogaGV4U2lnbmF0dXJlIH0gfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NrQml0R28ucG9zdC53aXRoQXJncyhidWlsZFVybCgpKS5yZXR1cm5zKG1ha2VSZXF1ZXN0Q2hhaW4oeyBwYXlsb2FkIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHByZWJ1aWxkIGFuZCByZW1vdGVseSBzaWduIHRoZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVtb3RlV2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHt9KTtcblxuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWRXaXRoKGJ1aWxkVXJsKCkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZFdpdGgoc2lnblVybCgpKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzaWduTWVzc2FnZVN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7IGhhbGZTaWduZWQ6IHsgcGF5bG9hZCwgc2lnbmF0dXJlOiBoZXhTaWduYXR1cmUgfSB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NlbmRNYW55JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tCaXRHby5wb3N0LndpdGhBcmdzKGJ1aWxkVXJsKCkpLnJldHVybnMobWFrZVJlcXVlc3RDaGFpbih7IHBheWxvYWQgfSkpO1xuICAgICAgICBtb2NrQml0R28ucG9zdC53aXRoQXJncyhzZW5kVXJsKCkpLnJldHVybnMobWFrZVJlcXVlc3RDaGFpbih7IHR4aWQ6ICd0ZXN0LXR4aWQnLCBzdGF0dXM6ICdzaWduZWQnIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHByZWJ1aWxkLCByZW1vdGVseSBzaWduLCBhbmQgc2VuZCB0aGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlbW90ZVdhbGxldC5zZW5kTWFueSh7IHJlY2lwaWVudHMgfSk7XG5cbiAgICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkV2l0aChidWlsZFVybCgpKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWRXaXRoKHNpZ25VcmwoKSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2lnbk1lc3NhZ2VTdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyB0eGlkOiAndGVzdC10eGlkJywgc3RhdHVzOiAnc2lnbmVkJyB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceManagement.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/resourceManagement.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,CAAC;AAChB,OAAO,cAAc,CAAC"}
|