@bitgo-beta/sdk-coin-trx 1.2.3-alpha.402 → 1.2.3-alpha.404
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/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +22 -0
- package/dist/src/lib/address.d.ts +11 -0
- package/dist/src/lib/address.d.ts.map +1 -0
- package/dist/src/lib/address.js +13 -0
- package/dist/src/lib/builder.d.ts +3 -0
- package/dist/src/lib/builder.d.ts.map +1 -0
- package/dist/src/lib/builder.js +10 -0
- package/dist/src/lib/constants.d.ts +3 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +6 -0
- package/dist/src/lib/contractCallBuilder.d.ts +62 -0
- package/dist/src/lib/contractCallBuilder.d.ts.map +1 -0
- package/dist/src/lib/contractCallBuilder.js +218 -0
- package/dist/src/lib/delegateResourceTxBuilder.d.ts +27 -0
- package/dist/src/lib/delegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegateResourceTxBuilder.js +98 -0
- package/dist/src/lib/enum.d.ts +58 -0
- package/dist/src/lib/enum.d.ts.map +1 -0
- package/dist/src/lib/enum.js +64 -0
- package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
- package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/freezeBalanceTxBuilder.js +211 -0
- package/dist/src/lib/iface.d.ts +321 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +12 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +53 -0
- package/dist/src/lib/keyPair.d.ts +43 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +134 -0
- package/dist/src/lib/resourceManagementTxBuilder.d.ts +72 -0
- package/dist/src/lib/resourceManagementTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/resourceManagementTxBuilder.js +150 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +23 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +42 -0
- package/dist/src/lib/transaction.d.ts +74 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +312 -0
- package/dist/src/lib/transactionBuilder.d.ts +110 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +304 -0
- package/dist/src/lib/undelegateResourceTxBuilder.d.ts +27 -0
- package/dist/src/lib/undelegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/undelegateResourceTxBuilder.js +98 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.js +204 -0
- package/dist/src/lib/utils.d.ts +225 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +824 -0
- package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
- package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
- package/dist/src/lib/withdrawBuilder.d.ts +49 -0
- package/dist/src/lib/withdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawBuilder.js +167 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
- package/dist/src/lib/wrappedBuilder.d.ts +110 -0
- package/dist/src/lib/wrappedBuilder.d.ts.map +1 -0
- package/dist/src/lib/wrappedBuilder.js +192 -0
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +15 -0
- package/dist/src/trx.d.ts +266 -0
- package/dist/src/trx.d.ts.map +1 -0
- package/dist/src/trx.js +788 -0
- package/dist/src/trxToken.d.ts +38 -0
- package/dist/src/trxToken.d.ts.map +1 -0
- package/dist/src/trxToken.js +91 -0
- package/dist/src/ttrx.d.ts +13 -0
- package/dist/src/ttrx.d.ts.map +1 -0
- package/dist/src/ttrx.js +14 -0
- package/dist/test/fixtures.d.ts +40 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +46 -0
- package/dist/test/resources.d.ts +586 -0
- package/dist/test/resources.d.ts.map +1 -0
- package/dist/test/resources.js +746 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +19 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +163 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +38 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.js +315 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.js +255 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.js +256 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +42 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.js +255 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.js +256 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.js +277 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.js +213 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.js +213 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.js +50 -0
- package/dist/test/unit/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.js +178 -0
- package/dist/test/unit/trx.d.ts +2 -0
- package/dist/test/unit/trx.d.ts.map +1 -0
- package/dist/test/unit/trx.js +532 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +141 -0
- package/dist/test/unit/verifyTransaction.d.ts +2 -0
- package/dist/test/unit/verifyTransaction.d.ts.map +1 -0
- package/dist/test/unit/verifyTransaction.js +378 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -7
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -1092
- package/resources/README.md +0 -31
- package/resources/protobuf/Contract.proto +0 -288
- package/resources/protobuf/Discover.proto +0 -44
- package/resources/protobuf/tron.d.ts +0 -12469
- package/resources/protobuf/tron.js +0 -37192
- package/resources/protobuf/tron.proto +0 -683
|
@@ -0,0 +1,312 @@
|
|
|
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
|
+
exports.Transaction = void 0;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
+
const tron_1 = require("../../resources/protobuf/tron");
|
|
10
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
11
|
+
const enum_1 = require("./enum");
|
|
12
|
+
const utils_1 = require("./utils");
|
|
13
|
+
/**
|
|
14
|
+
* Tron transaction model.
|
|
15
|
+
*/
|
|
16
|
+
class Transaction extends sdk_core_1.BaseTransaction {
|
|
17
|
+
/**
|
|
18
|
+
* Public constructor.
|
|
19
|
+
*
|
|
20
|
+
* @param coinConfig
|
|
21
|
+
* @param rawTransaction
|
|
22
|
+
*/
|
|
23
|
+
constructor(coinConfig, rawTransaction) {
|
|
24
|
+
super(coinConfig);
|
|
25
|
+
if (rawTransaction) {
|
|
26
|
+
if (!rawTransaction.txID) {
|
|
27
|
+
throw new sdk_core_1.ParseTransactionError('Transaction has no id');
|
|
28
|
+
}
|
|
29
|
+
this._id = rawTransaction.txID;
|
|
30
|
+
this._transaction = rawTransaction;
|
|
31
|
+
this._decodedRawDataHex = (0, utils_1.decodeTransaction)(rawTransaction.raw_data_hex);
|
|
32
|
+
// Destination depends on the contract type
|
|
33
|
+
this.recordRawDataFields(this._decodedRawDataHex);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse the transaction raw data and record the most important fields.
|
|
38
|
+
*
|
|
39
|
+
* @param rawData Object from a tron transaction
|
|
40
|
+
*/
|
|
41
|
+
recordRawDataFields(rawData) {
|
|
42
|
+
// Contract-agnostic fields
|
|
43
|
+
this._validFrom = rawData.timestamp;
|
|
44
|
+
this._validTo = rawData.expiration;
|
|
45
|
+
let output, input;
|
|
46
|
+
// Contract-specific fields
|
|
47
|
+
switch (rawData.contractType) {
|
|
48
|
+
case enum_1.ContractType.Transfer:
|
|
49
|
+
this._type = sdk_core_1.TransactionType.Send;
|
|
50
|
+
const value = new bignumber_js_1.default(rawData.contract[0].parameter.value.amount).toFixed(0);
|
|
51
|
+
output = {
|
|
52
|
+
address: rawData.contract[0].parameter.value.to_address,
|
|
53
|
+
value,
|
|
54
|
+
};
|
|
55
|
+
input = {
|
|
56
|
+
address: rawData.contract[0].parameter.value.owner_address,
|
|
57
|
+
value,
|
|
58
|
+
};
|
|
59
|
+
break;
|
|
60
|
+
case enum_1.ContractType.AccountPermissionUpdate:
|
|
61
|
+
this._type = sdk_core_1.TransactionType.WalletInitialization;
|
|
62
|
+
output = {
|
|
63
|
+
address: rawData.contract.owner_address,
|
|
64
|
+
value: '0',
|
|
65
|
+
};
|
|
66
|
+
input = {
|
|
67
|
+
address: rawData.contract.owner_address,
|
|
68
|
+
value: '0',
|
|
69
|
+
};
|
|
70
|
+
break;
|
|
71
|
+
case enum_1.ContractType.TriggerSmartContract:
|
|
72
|
+
this._type = sdk_core_1.TransactionType.ContractCall;
|
|
73
|
+
const contractCallValues = rawData.contract[0].parameter.value;
|
|
74
|
+
const contractAddress = contractCallValues.contract_address;
|
|
75
|
+
if (utils_1.tokenMainnetContractAddresses.includes(contractAddress) ||
|
|
76
|
+
utils_1.tokenTestnetContractAddresses.includes(contractAddress)) {
|
|
77
|
+
// this is then a token smart contract transaction and the data must be decoded
|
|
78
|
+
const types = ['address', 'uint256'];
|
|
79
|
+
const data = Buffer.from(contractCallValues.data, 'base64').toString('hex');
|
|
80
|
+
const decodedData = (0, utils_1.decodeDataParams)(types, data);
|
|
81
|
+
const recipient_address = (0, utils_1.getBase58AddressFromHex)(decodedData[0]);
|
|
82
|
+
const value = decodedData[1].toString();
|
|
83
|
+
output = {
|
|
84
|
+
address: recipient_address,
|
|
85
|
+
value,
|
|
86
|
+
};
|
|
87
|
+
input = {
|
|
88
|
+
address: contractCallValues.owner_address,
|
|
89
|
+
contractAddress,
|
|
90
|
+
data,
|
|
91
|
+
value,
|
|
92
|
+
};
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
output = {
|
|
96
|
+
address: contractCallValues.owner_address,
|
|
97
|
+
value: '0',
|
|
98
|
+
};
|
|
99
|
+
input = {
|
|
100
|
+
address: contractCallValues.owner_address,
|
|
101
|
+
contractAddress,
|
|
102
|
+
data: contractCallValues.data,
|
|
103
|
+
value: '0',
|
|
104
|
+
};
|
|
105
|
+
break;
|
|
106
|
+
case enum_1.ContractType.FreezeBalanceV2:
|
|
107
|
+
this._type = sdk_core_1.TransactionType.StakingActivate;
|
|
108
|
+
const freezeValue = rawData.contract[0].parameter.value;
|
|
109
|
+
output = {
|
|
110
|
+
address: freezeValue.owner_address,
|
|
111
|
+
value: freezeValue.frozen_balance.toString(),
|
|
112
|
+
};
|
|
113
|
+
input = {
|
|
114
|
+
address: freezeValue.owner_address,
|
|
115
|
+
value: freezeValue.frozen_balance.toString(),
|
|
116
|
+
};
|
|
117
|
+
break;
|
|
118
|
+
case enum_1.ContractType.VoteWitness:
|
|
119
|
+
this._type = sdk_core_1.TransactionType.StakingVote;
|
|
120
|
+
const voteValues = rawData.contract[0].parameter.value;
|
|
121
|
+
// Calculate total vote count
|
|
122
|
+
const totalVoteCount = voteValues.votes.reduce((sum, vote) => sum + vote.vote_count, 0);
|
|
123
|
+
output = {
|
|
124
|
+
address: voteValues.owner_address,
|
|
125
|
+
value: totalVoteCount.toString(),
|
|
126
|
+
};
|
|
127
|
+
input = {
|
|
128
|
+
address: voteValues.owner_address,
|
|
129
|
+
value: totalVoteCount.toString(),
|
|
130
|
+
};
|
|
131
|
+
break;
|
|
132
|
+
case enum_1.ContractType.UnfreezeBalanceV2:
|
|
133
|
+
this._type = sdk_core_1.TransactionType.StakingDeactivate;
|
|
134
|
+
const unfreezeValues = rawData.contract[0].parameter.value;
|
|
135
|
+
output = {
|
|
136
|
+
address: unfreezeValues.owner_address,
|
|
137
|
+
value: unfreezeValues.unfreeze_balance.toString(),
|
|
138
|
+
};
|
|
139
|
+
input = {
|
|
140
|
+
address: unfreezeValues.owner_address,
|
|
141
|
+
value: unfreezeValues.unfreeze_balance.toString(),
|
|
142
|
+
};
|
|
143
|
+
break;
|
|
144
|
+
case enum_1.ContractType.WithdrawExpireUnfreeze:
|
|
145
|
+
this._type = sdk_core_1.TransactionType.StakingWithdraw;
|
|
146
|
+
const withdrawValues = rawData.contract[0].parameter.value;
|
|
147
|
+
output = {
|
|
148
|
+
address: withdrawValues.owner_address,
|
|
149
|
+
value: '0', // no value field
|
|
150
|
+
};
|
|
151
|
+
input = {
|
|
152
|
+
address: withdrawValues.owner_address,
|
|
153
|
+
value: '0',
|
|
154
|
+
};
|
|
155
|
+
break;
|
|
156
|
+
case enum_1.ContractType.WithdrawBalance:
|
|
157
|
+
this._type = sdk_core_1.TransactionType.StakingClaim;
|
|
158
|
+
const withdrawBalanceValue = rawData.contract[0].parameter.value;
|
|
159
|
+
output = {
|
|
160
|
+
address: withdrawBalanceValue.owner_address,
|
|
161
|
+
value: '0', // no value field
|
|
162
|
+
};
|
|
163
|
+
input = {
|
|
164
|
+
address: withdrawBalanceValue.owner_address,
|
|
165
|
+
value: '0',
|
|
166
|
+
};
|
|
167
|
+
break;
|
|
168
|
+
case enum_1.ContractType.DelegateResourceContract:
|
|
169
|
+
this._type = sdk_core_1.TransactionType.DelegateResource;
|
|
170
|
+
const delegateValue = rawData.contract[0].parameter.value;
|
|
171
|
+
output = {
|
|
172
|
+
address: delegateValue.receiver_address,
|
|
173
|
+
value: delegateValue.balance.toString(),
|
|
174
|
+
};
|
|
175
|
+
input = {
|
|
176
|
+
address: delegateValue.owner_address,
|
|
177
|
+
value: delegateValue.balance.toString(),
|
|
178
|
+
};
|
|
179
|
+
break;
|
|
180
|
+
case enum_1.ContractType.UnDelegateResourceContract:
|
|
181
|
+
this._type = sdk_core_1.TransactionType.UnDelegateResource;
|
|
182
|
+
const undelegateValue = rawData.contract[0].parameter.value;
|
|
183
|
+
output = {
|
|
184
|
+
address: undelegateValue.receiver_address,
|
|
185
|
+
value: undelegateValue.balance.toString(),
|
|
186
|
+
};
|
|
187
|
+
input = {
|
|
188
|
+
address: undelegateValue.owner_address,
|
|
189
|
+
value: undelegateValue.balance.toString(),
|
|
190
|
+
};
|
|
191
|
+
break;
|
|
192
|
+
default:
|
|
193
|
+
throw new sdk_core_1.ParseTransactionError('Unsupported contract type');
|
|
194
|
+
}
|
|
195
|
+
this._inputs = [input];
|
|
196
|
+
this._outputs = [output];
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Recalculate and update the transaction id. This should be done after changing any transaction
|
|
200
|
+
* field since the the id is a hash of the transaction body.
|
|
201
|
+
*/
|
|
202
|
+
updateId() {
|
|
203
|
+
if (!this._transaction) {
|
|
204
|
+
throw new sdk_core_1.ParseTransactionError('Empty transaction');
|
|
205
|
+
}
|
|
206
|
+
const hexBuffer = Buffer.from(this._transaction.raw_data_hex, 'hex');
|
|
207
|
+
const newTxid = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
|
|
208
|
+
this._transaction.txID = newTxid;
|
|
209
|
+
this._id = newTxid;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Extend the expiration date by the given number of milliseconds.
|
|
213
|
+
*
|
|
214
|
+
* @param extensionMs The number of milliseconds to extend the expiration by
|
|
215
|
+
*/
|
|
216
|
+
extendExpiration(extensionMs) {
|
|
217
|
+
if (extensionMs < 0) {
|
|
218
|
+
throw new sdk_core_1.ExtendTransactionError('Invalid extension range. Must be positive a integer');
|
|
219
|
+
}
|
|
220
|
+
if (!this._transaction) {
|
|
221
|
+
throw new sdk_core_1.ExtendTransactionError('Empty transaction');
|
|
222
|
+
}
|
|
223
|
+
if (this._transaction.signature && this._transaction.signature.length > 0) {
|
|
224
|
+
throw new sdk_core_1.ExtendTransactionError('Cannot extend a signed transaction');
|
|
225
|
+
}
|
|
226
|
+
const rawDataHex = this._transaction.raw_data_hex;
|
|
227
|
+
const bytes = Buffer.from(rawDataHex, 'hex');
|
|
228
|
+
let raw;
|
|
229
|
+
try {
|
|
230
|
+
raw = tron_1.protocol.Transaction.raw.decode(bytes);
|
|
231
|
+
const newExpiration = new bignumber_js_1.default(raw.expiration).plus(extensionMs).toNumber();
|
|
232
|
+
raw.expiration = newExpiration;
|
|
233
|
+
const newRawDataHex = Buffer.from(tron_1.protocol.Transaction.raw.encode(raw).finish()).toString('hex');
|
|
234
|
+
// Set the internal variables to account for the new expiration date
|
|
235
|
+
this._transaction.raw_data_hex = newRawDataHex;
|
|
236
|
+
this._transaction.raw_data.expiration = newExpiration;
|
|
237
|
+
this._decodedRawDataHex = (0, utils_1.decodeTransaction)(newRawDataHex);
|
|
238
|
+
this.recordRawDataFields(this._decodedRawDataHex);
|
|
239
|
+
this.updateId();
|
|
240
|
+
}
|
|
241
|
+
catch (e) {
|
|
242
|
+
throw new sdk_core_1.ExtendTransactionError('There was an error decoding the initial raw_data_hex from the serialized tx.');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get the signatures associated with this transaction.
|
|
247
|
+
*/
|
|
248
|
+
get signature() {
|
|
249
|
+
if (this._transaction && this._transaction.signature) {
|
|
250
|
+
return this._transaction.signature;
|
|
251
|
+
}
|
|
252
|
+
return [];
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get the time in milliseconds this transaction becomes valid and can be broadcasted to the
|
|
256
|
+
* network.
|
|
257
|
+
*/
|
|
258
|
+
get validFrom() {
|
|
259
|
+
return this._validFrom;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Get the expiration time in milliseconds.
|
|
263
|
+
*/
|
|
264
|
+
get validTo() {
|
|
265
|
+
return this._validTo;
|
|
266
|
+
}
|
|
267
|
+
/** @inheritdoc */
|
|
268
|
+
get outputs() {
|
|
269
|
+
return this._outputs;
|
|
270
|
+
}
|
|
271
|
+
/** @inheritdoc */
|
|
272
|
+
get inputs() {
|
|
273
|
+
return this._inputs;
|
|
274
|
+
}
|
|
275
|
+
/** @inheritdoc */
|
|
276
|
+
canSign(key) {
|
|
277
|
+
// Tron transaction do not contain the owners account address so it is not possible to check the
|
|
278
|
+
// private key with any but the account main address. This is not enough to fail this check, so
|
|
279
|
+
// it is a no-op.
|
|
280
|
+
return true;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Sets this transaction
|
|
284
|
+
*
|
|
285
|
+
* @param {Transaction} tx transaction
|
|
286
|
+
*/
|
|
287
|
+
setTransactionReceipt(tx) {
|
|
288
|
+
this._transaction = tx;
|
|
289
|
+
this.updateId();
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Set the transaction type
|
|
293
|
+
*
|
|
294
|
+
* @param {TransactionType} transactionType The transaction type to be set
|
|
295
|
+
*/
|
|
296
|
+
setTransactionType(transactionType) {
|
|
297
|
+
this._type = transactionType;
|
|
298
|
+
}
|
|
299
|
+
/** @inheritdoc */
|
|
300
|
+
toJson() {
|
|
301
|
+
if (!this._transaction) {
|
|
302
|
+
throw new sdk_core_1.ParseTransactionError('Empty transaction');
|
|
303
|
+
}
|
|
304
|
+
return this._transaction;
|
|
305
|
+
}
|
|
306
|
+
/** @inheritdoc */
|
|
307
|
+
toBroadcastFormat() {
|
|
308
|
+
return JSON.stringify(this.toJson());
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
exports.Transaction = Transaction;
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQUFvQztBQUVwQyxnRUFBcUM7QUFDckMsd0RBQXlEO0FBQ3pELG1EQU04QjtBQUM5QixpQ0FBc0M7QUFDdEMsbUNBTWlCO0FBZWpCOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFVOUM7Ozs7O09BS0c7SUFDSCxZQUFZLFVBQWdDLEVBQUUsY0FBbUM7UUFDL0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBQSx5QkFBaUIsRUFBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFekUsMkNBQTJDO1lBQzNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUIsQ0FBQyxPQUFnQjtRQUMxQywyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVuQyxJQUFJLE1BQXFCLEVBQUUsS0FBb0IsQ0FBQztRQUNoRCwyQkFBMkI7UUFDM0IsUUFBUSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsS0FBSyxtQkFBWSxDQUFDLFFBQVE7Z0JBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksc0JBQVMsQ0FBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBc0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekcsTUFBTSxHQUFHO29CQUNQLE9BQU8sRUFBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBc0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVU7b0JBQzdFLEtBQUs7aUJBQ04sQ0FBQztnQkFDRixLQUFLLEdBQUc7b0JBQ04sT0FBTyxFQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYTtvQkFDaEYsS0FBSztpQkFDTixDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLG1CQUFZLENBQUMsdUJBQXVCO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsb0JBQW9CLENBQUM7Z0JBQ2xELE1BQU0sR0FBRztvQkFDUCxPQUFPLEVBQUcsT0FBTyxDQUFDLFFBQWdCLENBQUMsYUFBYTtvQkFDaEQsS0FBSyxFQUFFLEdBQUc7aUJBQ1gsQ0FBQztnQkFDRixLQUFLLEdBQUc7b0JBQ04sT0FBTyxFQUFHLE9BQU8sQ0FBQyxRQUFnQixDQUFDLGFBQWE7b0JBQ2hELEtBQUssRUFBRSxHQUFHO2lCQUNYLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssbUJBQVksQ0FBQyxvQkFBb0I7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxZQUFZLENBQUM7Z0JBQzFDLE1BQU0sa0JBQWtCLEdBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQTBCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDekYsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzVELElBQ0UscUNBQTZCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztvQkFDdkQscUNBQTZCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUN2RCxDQUFDO29CQUNELCtFQUErRTtvQkFDL0UsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ3JDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUUsTUFBTSxXQUFXLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2xELE1BQU0saUJBQWlCLEdBQUcsSUFBQSwrQkFBdUIsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4QyxNQUFNLEdBQUc7d0JBQ1AsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsS0FBSztxQkFDTixDQUFDO29CQUNGLEtBQUssR0FBRzt3QkFDTixPQUFPLEVBQUUsa0JBQWtCLENBQUMsYUFBYTt3QkFDekMsZUFBZTt3QkFDZixJQUFJO3dCQUNKLEtBQUs7cUJBQ04sQ0FBQztvQkFDRixNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsTUFBTSxHQUFHO29CQUNQLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxhQUFhO29CQUN6QyxLQUFLLEVBQUUsR0FBRztpQkFDWCxDQUFDO2dCQUNGLEtBQUssR0FBRztvQkFDTixPQUFPLEVBQUUsa0JBQWtCLENBQUMsYUFBYTtvQkFDekMsZUFBZTtvQkFDZixJQUFJLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtvQkFDN0IsS0FBSyxFQUFFLEdBQUc7aUJBQ1gsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxtQkFBWSxDQUFDLGVBQWU7Z0JBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxlQUFlLENBQUM7Z0JBQzdDLE1BQU0sV0FBVyxHQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUE2QixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JGLE1BQU0sR0FBRztvQkFDUCxPQUFPLEVBQUUsV0FBVyxDQUFDLGFBQWE7b0JBQ2xDLEtBQUssRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtpQkFDN0MsQ0FBQztnQkFDRixLQUFLLEdBQUc7b0JBQ04sT0FBTyxFQUFFLFdBQVcsQ0FBQyxhQUFhO29CQUNsQyxLQUFLLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7aUJBQzdDLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssbUJBQVksQ0FBQyxXQUFXO2dCQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsV0FBVyxDQUFDO2dCQUN6QyxNQUFNLFVBQVUsR0FBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBeUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUVoRiw2QkFBNkI7Z0JBQzdCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRXhGLE1BQU0sR0FBRztvQkFDUCxPQUFPLEVBQUUsVUFBVSxDQUFDLGFBQWE7b0JBQ2pDLEtBQUssRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFO2lCQUNqQyxDQUFDO2dCQUNGLEtBQUssR0FBRztvQkFDTixPQUFPLEVBQUUsVUFBVSxDQUFDLGFBQWE7b0JBQ2pDLEtBQUssRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFO2lCQUNqQyxDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLG1CQUFZLENBQUMsaUJBQWlCO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsaUJBQWlCLENBQUM7Z0JBQy9DLE1BQU0sY0FBYyxHQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUErQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQzFGLE1BQU0sR0FBRztvQkFDUCxPQUFPLEVBQUUsY0FBYyxDQUFDLGFBQWE7b0JBQ3JDLEtBQUssRUFBRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO2lCQUNsRCxDQUFDO2dCQUNGLEtBQUssR0FBRztvQkFDTixPQUFPLEVBQUUsY0FBYyxDQUFDLGFBQWE7b0JBQ3JDLEtBQUssRUFBRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO2lCQUNsRCxDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLG1CQUFZLENBQUMsc0JBQXNCO2dCQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsZUFBZSxDQUFDO2dCQUM3QyxNQUFNLGNBQWMsR0FBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBb0MsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUMvRixNQUFNLEdBQUc7b0JBQ1AsT0FBTyxFQUFFLGNBQWMsQ0FBQyxhQUFhO29CQUNyQyxLQUFLLEVBQUUsR0FBRyxFQUFFLGlCQUFpQjtpQkFDOUIsQ0FBQztnQkFDRixLQUFLLEdBQUc7b0JBQ04sT0FBTyxFQUFFLGNBQWMsQ0FBQyxhQUFhO29CQUNyQyxLQUFLLEVBQUUsR0FBRztpQkFDWCxDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLG1CQUFZLENBQUMsZUFBZTtnQkFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLFlBQVksQ0FBQztnQkFDMUMsTUFBTSxvQkFBb0IsR0FBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBNkIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUM5RixNQUFNLEdBQUc7b0JBQ1AsT0FBTyxFQUFFLG9CQUFvQixDQUFDLGFBQWE7b0JBQzNDLEtBQUssRUFBRSxHQUFHLEVBQUUsaUJBQWlCO2lCQUM5QixDQUFDO2dCQUNGLEtBQUssR0FBRztvQkFDTixPQUFPLEVBQUUsb0JBQW9CLENBQUMsYUFBYTtvQkFDM0MsS0FBSyxFQUFFLEdBQUc7aUJBQ1gsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxtQkFBWSxDQUFDLHdCQUF3QjtnQkFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUM5QyxNQUFNLGFBQWEsR0FBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBZ0MsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUMxRixNQUFNLEdBQUc7b0JBQ1AsT0FBTyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0I7b0JBQ3ZDLEtBQUssRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtpQkFDeEMsQ0FBQztnQkFDRixLQUFLLEdBQUc7b0JBQ04sT0FBTyxFQUFFLGFBQWEsQ0FBQyxhQUFhO29CQUNwQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7aUJBQ3hDLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssbUJBQVksQ0FBQywwQkFBMEI7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEQsTUFBTSxlQUFlLEdBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQWdDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDNUYsTUFBTSxHQUFHO29CQUNQLE9BQU8sRUFBRSxlQUFlLENBQUMsZ0JBQWdCO29CQUN6QyxLQUFLLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7aUJBQzFDLENBQUM7Z0JBQ0YsS0FBSyxHQUFHO29CQUNOLE9BQU8sRUFBRSxlQUFlLENBQUMsYUFBYTtvQkFDdEMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO2lCQUMxQyxDQUFDO2dCQUNGLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksZ0NBQXFCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssUUFBUTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckUsTUFBTSxPQUFPLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsV0FBbUI7UUFDbEMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLGlDQUFzQixDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLGlDQUFzQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFFLE1BQU0sSUFBSSxpQ0FBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsQ0FBQztRQUNSLElBQUksQ0FBQztZQUNILEdBQUcsR0FBRyxlQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakYsR0FBRyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7WUFDL0IsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakcsb0VBQW9FO1lBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQztZQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1lBQ3RELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFBLHlCQUFpQixFQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksaUNBQXNCLENBQUMsOEVBQThFLENBQUMsQ0FBQztRQUNuSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxTQUFTO1FBQ1gsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLGdHQUFnRztRQUNoRywrRkFBK0Y7UUFDL0YsaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxxQkFBcUIsQ0FBQyxFQUFzQjtRQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxlQUFnQztRQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztJQUMvQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBblVELGtDQW1VQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbic7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDb250cmFjdFR5cGUgfSBmcm9tICcuL2VudW0nO1xuaW1wb3J0IHtcbiAgZGVjb2RlVHJhbnNhY3Rpb24sXG4gIGRlY29kZURhdGFQYXJhbXMsXG4gIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4LFxuICB0b2tlbk1haW5uZXRDb250cmFjdEFkZHJlc3NlcyxcbiAgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ29udHJhY3RFbnRyeSxcbiAgRnJlZXplQmFsYW5jZVYyQ29udHJhY3QsXG4gIFJhd0RhdGEsXG4gIFRyYW5zYWN0aW9uUmVjZWlwdCxcbiAgVHJhbnNmZXJDb250cmFjdCxcbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG4gIFZvdGVXaXRuZXNzQ29udHJhY3QsXG4gIFVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QsXG4gIFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCxcbiAgUmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3QsXG4gIFdpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LFxufSBmcm9tICcuL2lmYWNlJztcblxuLyoqXG4gKiBUcm9uIHRyYW5zYWN0aW9uIG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICAvLyBUcm9uIHNwZWNpZmljIGZpZWxkc1xuICBwcm90ZWN0ZWQgX3ZhbGlkRnJvbTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3ZhbGlkVG86IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9pbnB1dHM6IENvbnRyYWN0RW50cnlbXTtcbiAgcHJvdGVjdGVkIF9vdXRwdXRzOiBDb250cmFjdEVudHJ5W107XG5cbiAgcHJpdmF0ZSBfZGVjb2RlZFJhd0RhdGFIZXg6IFJhd0RhdGE7XG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb25SZWNlaXB0O1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBjb2luQ29uZmlnXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4sIHJhd1RyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb25SZWNlaXB0KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgaWYgKHJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICBpZiAoIXJhd1RyYW5zYWN0aW9uLnR4SUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIGlkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pZCA9IHJhd1RyYW5zYWN0aW9uLnR4SUQ7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uO1xuICAgICAgdGhpcy5fZGVjb2RlZFJhd0RhdGFIZXggPSBkZWNvZGVUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgpO1xuXG4gICAgICAvLyBEZXN0aW5hdGlvbiBkZXBlbmRzIG9uIHRoZSBjb250cmFjdCB0eXBlXG4gICAgICB0aGlzLnJlY29yZFJhd0RhdGFGaWVsZHModGhpcy5fZGVjb2RlZFJhd0RhdGFIZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgdHJhbnNhY3Rpb24gcmF3IGRhdGEgYW5kIHJlY29yZCB0aGUgbW9zdCBpbXBvcnRhbnQgZmllbGRzLlxuICAgKlxuICAgKiBAcGFyYW0gcmF3RGF0YSBPYmplY3QgZnJvbSBhIHRyb24gdHJhbnNhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgcmVjb3JkUmF3RGF0YUZpZWxkcyhyYXdEYXRhOiBSYXdEYXRhKSB7XG4gICAgLy8gQ29udHJhY3QtYWdub3N0aWMgZmllbGRzXG4gICAgdGhpcy5fdmFsaWRGcm9tID0gcmF3RGF0YS50aW1lc3RhbXA7XG4gICAgdGhpcy5fdmFsaWRUbyA9IHJhd0RhdGEuZXhwaXJhdGlvbjtcblxuICAgIGxldCBvdXRwdXQ6IENvbnRyYWN0RW50cnksIGlucHV0OiBDb250cmFjdEVudHJ5O1xuICAgIC8vIENvbnRyYWN0LXNwZWNpZmljIGZpZWxkc1xuICAgIHN3aXRjaCAocmF3RGF0YS5jb250cmFjdFR5cGUpIHtcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlRyYW5zZmVyOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IEJpZ051bWJlcigocmF3RGF0YS5jb250cmFjdFswXSBhcyBUcmFuc2ZlckNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWUuYW1vdW50KS50b0ZpeGVkKDApO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVHJhbnNmZXJDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlLnRvX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyYW5zZmVyQ29udHJhY3QpLnBhcmFtZXRlci52YWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogKHJhd0RhdGEuY29udHJhY3QgYXMgYW55KS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IChyYXdEYXRhLmNvbnRyYWN0IGFzIGFueSkub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlRyaWdnZXJTbWFydENvbnRyYWN0OlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDtcbiAgICAgICAgY29uc3QgY29udHJhY3RDYWxsVmFsdWVzID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVHJpZ2dlclNtYXJ0Q29udHJhY3QpLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgY29uc3QgY29udHJhY3RBZGRyZXNzID0gY29udHJhY3RDYWxsVmFsdWVzLmNvbnRyYWN0X2FkZHJlc3M7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0b2tlbk1haW5uZXRDb250cmFjdEFkZHJlc3Nlcy5pbmNsdWRlcyhjb250cmFjdEFkZHJlc3MpIHx8XG4gICAgICAgICAgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMuaW5jbHVkZXMoY29udHJhY3RBZGRyZXNzKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIHRoZW4gYSB0b2tlbiBzbWFydCBjb250cmFjdCB0cmFuc2FjdGlvbiBhbmQgdGhlIGRhdGEgbXVzdCBiZSBkZWNvZGVkXG4gICAgICAgICAgY29uc3QgdHlwZXMgPSBbJ2FkZHJlc3MnLCAndWludDI1NiddO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuZnJvbShjb250cmFjdENhbGxWYWx1ZXMuZGF0YSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IGRlY29kZURhdGFQYXJhbXModHlwZXMsIGRhdGEpO1xuICAgICAgICAgIGNvbnN0IHJlY2lwaWVudF9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgoZGVjb2RlZERhdGFbMF0pO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGVjb2RlZERhdGFbMV0udG9TdHJpbmcoKTtcbiAgICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRfYWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgICBhZGRyZXNzOiBjb250cmFjdENhbGxWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICAgIGNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBjb250cmFjdENhbGxWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBjb250cmFjdENhbGxWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3MsXG4gICAgICAgICAgZGF0YTogY29udHJhY3RDYWxsVmFsdWVzLmRhdGEsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5GcmVlemVCYWxhbmNlVjI6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlO1xuICAgICAgICBjb25zdCBmcmVlemVWYWx1ZSA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIEZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBmcmVlemVWYWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBmcmVlemVWYWx1ZS5mcm96ZW5fYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBmcmVlemVWYWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBmcmVlemVWYWx1ZS5mcm96ZW5fYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlZvdGVXaXRuZXNzOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdWb3RlO1xuICAgICAgICBjb25zdCB2b3RlVmFsdWVzID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVm90ZVdpdG5lc3NDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCB2b3RlIGNvdW50XG4gICAgICAgIGNvbnN0IHRvdGFsVm90ZUNvdW50ID0gdm90ZVZhbHVlcy52b3Rlcy5yZWR1Y2UoKHN1bSwgdm90ZSkgPT4gc3VtICsgdm90ZS52b3RlX2NvdW50LCAwKTtcblxuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogdm90ZVZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB0b3RhbFZvdGVDb3VudC50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB2b3RlVmFsdWVzLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IHRvdGFsVm90ZUNvdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuVW5mcmVlemVCYWxhbmNlVjI6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU7XG4gICAgICAgIGNvbnN0IHVuZnJlZXplVmFsdWVzID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogdW5mcmVlemVWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogdW5mcmVlemVWYWx1ZXMudW5mcmVlemVfYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB1bmZyZWV6ZVZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB1bmZyZWV6ZVZhbHVlcy51bmZyZWV6ZV9iYWxhbmNlLnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZTpcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3VmFsdWVzID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd1ZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsIC8vIG5vIHZhbHVlIGZpZWxkXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3VmFsdWVzLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5XaXRoZHJhd0JhbGFuY2U6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltO1xuICAgICAgICBjb25zdCB3aXRoZHJhd0JhbGFuY2VWYWx1ZSA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFdpdGhkcmF3QmFsYW5jZUNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd0JhbGFuY2VWYWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsIC8vIG5vIHZhbHVlIGZpZWxkXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3QmFsYW5jZVZhbHVlLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Q6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuRGVsZWdhdGVSZXNvdXJjZTtcbiAgICAgICAgY29uc3QgZGVsZWdhdGVWYWx1ZSA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZVZhbHVlLnJlY2VpdmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IGRlbGVnYXRlVmFsdWUuYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZVZhbHVlLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IGRlbGVnYXRlVmFsdWUuYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0OlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlVuRGVsZWdhdGVSZXNvdXJjZTtcbiAgICAgICAgY29uc3QgdW5kZWxlZ2F0ZVZhbHVlID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgUmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3QpLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHVuZGVsZWdhdGVWYWx1ZS5yZWNlaXZlcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB1bmRlbGVnYXRlVmFsdWUuYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB1bmRlbGVnYXRlVmFsdWUub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogdW5kZWxlZ2F0ZVZhbHVlLmJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdVbnN1cHBvcnRlZCBjb250cmFjdCB0eXBlJyk7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0cyA9IFtpbnB1dF07XG4gICAgdGhpcy5fb3V0cHV0cyA9IFtvdXRwdXRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIHRyYW5zYWN0aW9uIGlkLiBUaGlzIHNob3VsZCBiZSBkb25lIGFmdGVyIGNoYW5naW5nIGFueSB0cmFuc2FjdGlvblxuICAgKiBmaWVsZCBzaW5jZSB0aGUgdGhlIGlkIGlzIGEgaGFzaCBvZiB0aGUgdHJhbnNhY3Rpb24gYm9keS5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5fdHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgbmV3VHhpZCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24udHhJRCA9IG5ld1R4aWQ7XG4gICAgdGhpcy5faWQgPSBuZXdUeGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZCB0aGUgZXhwaXJhdGlvbiBkYXRlIGJ5IHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gZXh0ZW5zaW9uTXMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZXh0ZW5kIHRoZSBleHBpcmF0aW9uIGJ5XG4gICAqL1xuICBleHRlbmRFeHBpcmF0aW9uKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZXh0ZW5zaW9uTXMgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBleHRlbnNpb24gcmFuZ2UuIE11c3QgYmUgcG9zaXRpdmUgYSBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZSAmJiB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0Nhbm5vdCBleHRlbmQgYSBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdEYXRhSGV4ID0gdGhpcy5fdHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4O1xuICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20ocmF3RGF0YUhleCwgJ2hleCcpO1xuICAgIGxldCByYXc7XG4gICAgdHJ5IHtcbiAgICAgIHJhdyA9IHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5kZWNvZGUoYnl0ZXMpO1xuICAgICAgY29uc3QgbmV3RXhwaXJhdGlvbiA9IG5ldyBCaWdOdW1iZXIocmF3LmV4cGlyYXRpb24pLnBsdXMoZXh0ZW5zaW9uTXMpLnRvTnVtYmVyKCk7XG4gICAgICByYXcuZXhwaXJhdGlvbiA9IG5ld0V4cGlyYXRpb247XG4gICAgICBjb25zdCBuZXdSYXdEYXRhSGV4ID0gQnVmZmVyLmZyb20ocHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmVuY29kZShyYXcpLmZpbmlzaCgpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAvLyBTZXQgdGhlIGludGVybmFsIHZhcmlhYmxlcyB0byBhY2NvdW50IGZvciB0aGUgbmV3IGV4cGlyYXRpb24gZGF0ZVxuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4ID0gbmV3UmF3RGF0YUhleDtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uLnJhd19kYXRhLmV4cGlyYXRpb24gPSBuZXdFeHBpcmF0aW9uO1xuICAgICAgdGhpcy5fZGVjb2RlZFJhd0RhdGFIZXggPSBkZWNvZGVUcmFuc2FjdGlvbihuZXdSYXdEYXRhSGV4KTtcbiAgICAgIHRoaXMucmVjb3JkUmF3RGF0YUZpZWxkcyh0aGlzLl9kZWNvZGVkUmF3RGF0YUhleCk7XG4gICAgICB0aGlzLnVwZGF0ZUlkKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgaW5pdGlhbCByYXdfZGF0YV9oZXggZnJvbSB0aGUgc2VyaWFsaXplZCB0eC4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzaWduYXR1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgZ2V0IHNpZ25hdHVyZSgpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uICYmIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRoaXMgdHJhbnNhY3Rpb24gYmVjb21lcyB2YWxpZCBhbmQgY2FuIGJlIGJyb2FkY2FzdGVkIHRvIHRoZVxuICAgKiBuZXR3b3JrLlxuICAgKi9cbiAgZ2V0IHZhbGlkRnJvbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92YWxpZEZyb207XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHBpcmF0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgZ2V0IHZhbGlkVG8oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRUbztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXQgb3V0cHV0cygpOiBDb250cmFjdEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCBpbnB1dHMoKTogQ29udHJhY3RFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgLy8gVHJvbiB0cmFuc2FjdGlvbiBkbyBub3QgY29udGFpbiB0aGUgb3duZXJzIGFjY291bnQgYWRkcmVzcyBzbyBpdCBpcyBub3QgcG9zc2libGUgdG8gY2hlY2sgdGhlXG4gICAgLy8gcHJpdmF0ZSBrZXkgd2l0aCBhbnkgYnV0IHRoZSBhY2NvdW50IG1haW4gYWRkcmVzcy4gVGhpcyBpcyBub3QgZW5vdWdoIHRvIGZhaWwgdGhpcyBjaGVjaywgc29cbiAgICAvLyBpdCBpcyBhIG5vLW9wLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0cmFuc2FjdGlvblxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25SZWNlaXB0KHR4OiBUcmFuc2FjdGlvblJlY2VpcHQpIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMudXBkYXRlSWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXRcbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFRyYW5zYWN0aW9uUmVjZWlwdCB7XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IGFueSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9Kc29uKCkpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { BaseKey, BaseTransactionBuilder } from '@bitgo-beta/sdk-core';
|
|
4
|
+
import { TransactionReceipt, Block } from './iface';
|
|
5
|
+
import { Address } from './address';
|
|
6
|
+
import { Transaction } from './transaction';
|
|
7
|
+
/**
|
|
8
|
+
* Tron transaction builder.
|
|
9
|
+
*/
|
|
10
|
+
export declare class TransactionBuilder extends BaseTransactionBuilder {
|
|
11
|
+
private _transaction;
|
|
12
|
+
protected _ownerAddress: string;
|
|
13
|
+
protected _refBlockBytes: string;
|
|
14
|
+
protected _refBlockHash: string;
|
|
15
|
+
protected _expiration: number;
|
|
16
|
+
protected _timestamp: number;
|
|
17
|
+
/**
|
|
18
|
+
* Public constructor.
|
|
19
|
+
*
|
|
20
|
+
* @param {CoinConfig} _coinConfig Configuration object
|
|
21
|
+
*/
|
|
22
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
23
|
+
/** @inheritdoc */
|
|
24
|
+
protected get transaction(): Transaction;
|
|
25
|
+
/** @inheritdoc */
|
|
26
|
+
protected set transaction(transaction: Transaction);
|
|
27
|
+
/**
|
|
28
|
+
* Set the source address for the transaction
|
|
29
|
+
*
|
|
30
|
+
* @param {Address} address The source address
|
|
31
|
+
* @returns the builder with the new parameter set
|
|
32
|
+
*/
|
|
33
|
+
source(address: Address): this;
|
|
34
|
+
/**
|
|
35
|
+
* Set the timestamp for the transaction
|
|
36
|
+
*
|
|
37
|
+
* @param {number} time the timestamp in milliseconds
|
|
38
|
+
* @returns the builder with the new parameter set
|
|
39
|
+
*/
|
|
40
|
+
timestamp(time: number): this;
|
|
41
|
+
/**
|
|
42
|
+
* Set the block values,
|
|
43
|
+
*
|
|
44
|
+
* @param {Block} block the object containing number and hash of the block
|
|
45
|
+
* @returns the builder with the new parameter set
|
|
46
|
+
*/
|
|
47
|
+
block(block: Block): this;
|
|
48
|
+
/**
|
|
49
|
+
* Set the expiration time for the transaction, set timestamp if it was not set previously
|
|
50
|
+
*
|
|
51
|
+
* @param {number} time the expiration time in milliseconds
|
|
52
|
+
* @returns the builder with the new parameter set
|
|
53
|
+
*/
|
|
54
|
+
expiration(time: number): this;
|
|
55
|
+
/**
|
|
56
|
+
* Parse transaction takes in raw JSON directly from the node.
|
|
57
|
+
*
|
|
58
|
+
* @param {TransactionReceipt} rawTransaction The Tron transaction in JSON format as returned by the Tron lib or a stringifyed version of such JSON.
|
|
59
|
+
* @returns {Transaction} Tron transaction
|
|
60
|
+
*/
|
|
61
|
+
protected fromImplementation(rawTransaction: TransactionReceipt | string): Transaction;
|
|
62
|
+
/** @inheritdoc */
|
|
63
|
+
protected signImplementation(key: BaseKey): Transaction;
|
|
64
|
+
protected applySignature(key: BaseKey): Transaction;
|
|
65
|
+
/** @inheritdoc */
|
|
66
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
67
|
+
initBuilder(tx: TransactionReceipt | string): void;
|
|
68
|
+
/**
|
|
69
|
+
* Extend the validity of this transaction by the given amount of time
|
|
70
|
+
*
|
|
71
|
+
* @param {number} extensionMs The number of milliseconds to extend the validTo time
|
|
72
|
+
* @returns {undefined}
|
|
73
|
+
*/
|
|
74
|
+
extendValidTo(extensionMs: number): void;
|
|
75
|
+
/** @inheritdoc */
|
|
76
|
+
validateValue(value: BigNumber): void;
|
|
77
|
+
/** @inheritdoc */
|
|
78
|
+
validateAddress(address: Address): void;
|
|
79
|
+
/**
|
|
80
|
+
* Helper method to validate the resource type
|
|
81
|
+
* @param resource The resource type to be validated
|
|
82
|
+
*/
|
|
83
|
+
validateResource(resource: string): void;
|
|
84
|
+
/** @inheritdoc */
|
|
85
|
+
validateKey(key: BaseKey): void;
|
|
86
|
+
/**
|
|
87
|
+
* Validate the contents of a raw transaction. The validation
|
|
88
|
+
* phase is to compare the raw-data-hex to the raw-data of the
|
|
89
|
+
* transaction.
|
|
90
|
+
*
|
|
91
|
+
* The contents to be validated are
|
|
92
|
+
* 1. The transaction id
|
|
93
|
+
* 2. The expiration date
|
|
94
|
+
* 3. The timestamp
|
|
95
|
+
* 4. The contract
|
|
96
|
+
*
|
|
97
|
+
* @param {TransactionReceipt | string} rawTransaction The raw transaction to be validated
|
|
98
|
+
*/
|
|
99
|
+
validateRawTransaction(rawTransaction: TransactionReceipt | string): void;
|
|
100
|
+
/** @inheritdoc */
|
|
101
|
+
validateTransaction(transaction: Transaction): void;
|
|
102
|
+
/**
|
|
103
|
+
* Validate the expiration time of the transaction
|
|
104
|
+
*
|
|
105
|
+
* @param {number} value The expiration time in milliseconds
|
|
106
|
+
* @throws {InvalidParameterValueError} If the expiration time is invalid
|
|
107
|
+
*/
|
|
108
|
+
validateExpirationTime(value: number): void;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAOvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IASzB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9B;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOvC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAa5C"}
|