@super-protocol/sdk-js 0.16.0-beta.2 → 1.0.0-beta.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/build/TIIGenerator.d.ts +3 -3
- package/build/connectors/BaseConnector.d.ts +7 -8
- package/build/connectors/BaseConnector.js +2 -4
- package/build/connectors/BlockchainConnector.d.ts +6 -8
- package/build/connectors/BlockchainConnector.js +97 -102
- package/build/connectors/BlockchainEventsListener.d.ts +2 -2
- package/build/connectors/BlockchainEventsListener.js +36 -11
- package/build/connectors/index.d.ts +2 -0
- package/build/connectors/index.js +11 -0
- package/build/constants.d.ts +2 -2
- package/build/constants.js +3 -3
- package/build/contracts/abi.d.ts +9769 -0
- package/build/contracts/abi.js +6 -0
- package/build/crypto/Crypto.js +4 -4
- package/build/crypto/nodejs/AES.d.ts +1 -1
- package/build/crypto/nodejs/AES.js +11 -13
- package/build/crypto/nodejs/ARIA.d.ts +1 -1
- package/build/crypto/nodejs/ARIA.js +11 -13
- package/build/models/EtlModel.d.ts +1 -1
- package/build/models/EtlModel.js +2 -4
- package/build/models/Offer.d.ts +5 -15
- package/build/models/Offer.js +60 -105
- package/build/models/Order.d.ts +15 -25
- package/build/models/Order.js +92 -173
- package/build/models/Provider.d.ts +9 -13
- package/build/models/Provider.js +16 -43
- package/build/models/TCB.d.ts +6 -8
- package/build/models/TCB.js +22 -34
- package/build/models/TeeOffer.d.ts +9 -22
- package/build/models/TeeOffer.js +97 -169
- package/build/models/index.d.ts +5 -0
- package/build/models/index.js +17 -0
- package/build/providers/storage/StorjStorageProvider.js +3 -3
- package/build/staticModels/ActiveOffers.d.ts +3 -12
- package/build/staticModels/ActiveOffers.js +11 -29
- package/build/staticModels/ActiveOrders.d.ts +4 -6
- package/build/staticModels/ActiveOrders.js +19 -21
- package/build/staticModels/Consensus.d.ts +3 -5
- package/build/staticModels/Consensus.js +57 -87
- package/build/staticModels/Deposits.d.ts +8 -9
- package/build/staticModels/Deposits.js +42 -60
- package/build/staticModels/Marks.d.ts +4 -4
- package/build/staticModels/Marks.js +8 -12
- package/build/staticModels/Offers.d.ts +14 -14
- package/build/staticModels/Offers.js +81 -88
- package/build/staticModels/Orders.d.ts +30 -35
- package/build/staticModels/Orders.js +98 -144
- package/build/staticModels/ProviderRegistry.d.ts +6 -12
- package/build/staticModels/ProviderRegistry.js +45 -75
- package/build/staticModels/Superpro.d.ts +4 -4
- package/build/staticModels/Superpro.js +7 -25
- package/build/staticModels/SuperproToken.d.ts +7 -7
- package/build/staticModels/SuperproToken.js +34 -38
- package/build/staticModels/TeeOffers.d.ts +19 -21
- package/build/staticModels/TeeOffers.js +119 -126
- package/build/store.d.ts +2 -2
- package/build/tee/QuoteValidator.d.ts +2 -1
- package/build/tee/QuoteValidator.js +7 -6
- package/build/types/Consensus.d.ts +6 -57
- package/build/types/Consensus.js +2 -38
- package/build/types/DepositInfo.d.ts +0 -5
- package/build/types/DepositInfo.js +1 -8
- package/build/types/HardwareInfo.d.ts +0 -12
- package/build/types/HardwareInfo.js +1 -9
- package/build/types/Offer.d.ts +1 -25
- package/build/types/Offer.js +2 -25
- package/build/types/OptionInfo.d.ts +0 -5
- package/build/types/OptionInfo.js +1 -8
- package/build/types/Order.d.ts +8 -84
- package/build/types/Order.js +2 -42
- package/build/types/Origins.d.ts +0 -6
- package/build/types/Origins.js +1 -9
- package/build/types/Provider.d.ts +0 -19
- package/build/types/Provider.js +1 -19
- package/build/types/SlotInfo.d.ts +0 -5
- package/build/types/SlotInfo.js +1 -8
- package/build/types/SlotUsage.d.ts +0 -6
- package/build/types/SlotUsage.js +2 -9
- package/build/types/TeeOfferInfo.d.ts +0 -20
- package/build/types/TeeOfferInfo.js +1 -13
- package/build/types/TeeOfferOption.d.ts +0 -14
- package/build/types/TeeOfferOption.js +1 -10
- package/build/types/TeeOfferSlot.d.ts +0 -14
- package/build/types/TeeOfferSlot.js +1 -10
- package/build/types/ValueOfferSlot.d.ts +0 -19
- package/build/types/ValueOfferSlot.js +1 -12
- package/build/types/Web3.d.ts +25 -13
- package/build/types/blockchainConnector/StorageAccess.d.ts +2 -2
- package/build/types/index.d.ts +21 -0
- package/build/types/index.js +38 -0
- package/build/utils/Monitoring.js +5 -2
- package/build/utils/NonceTracker.d.ts +2 -2
- package/build/utils/NonceTracker.js +9 -11
- package/build/utils/TxManager.d.ts +6 -12
- package/build/utils/TxManager.js +16 -25
- package/build/{utils.d.ts → utils/helper.d.ts} +12 -17
- package/build/utils/helper.js +159 -0
- package/build/utils/helpers/tryWithInterval.js +11 -12
- package/package.json +9 -6
- package/readme.md +7 -8
- package/build/contracts/app.json +0 -12758
- package/build/staticModels/BaseStaticModel.d.ts +0 -4
- package/build/staticModels/BaseStaticModel.js +0 -20
- package/build/utils.js +0 -196
package/build/models/TeeOffer.js
CHANGED
|
@@ -21,38 +21,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
21
21
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
22
|
};
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const utils_1 = require("../utils");
|
|
27
|
-
const TeeOfferInfo_1 = require("../types/TeeOfferInfo");
|
|
28
|
-
const Origins_1 = require("../types/Origins");
|
|
29
|
-
const Superpro_1 = __importDefault(require("../staticModels/Superpro"));
|
|
30
|
-
const BlockchainConnector_1 = __importDefault(require("../connectors/BlockchainConnector"));
|
|
24
|
+
const helper_1 = require("../utils/helper");
|
|
25
|
+
const connectors_1 = require("../connectors");
|
|
31
26
|
const TxManager_1 = __importDefault(require("../utils/TxManager"));
|
|
32
|
-
const
|
|
33
|
-
const TeeOfferOption_1 = require("../types/TeeOfferOption");
|
|
34
|
-
const TeeOfferSlot_1 = require("../types/TeeOfferSlot");
|
|
35
|
-
const OptionInfo_1 = require("../types/OptionInfo");
|
|
36
|
-
const SlotUsage_1 = require("../types/SlotUsage");
|
|
37
|
-
const utils_2 = require("ethers/lib/utils");
|
|
38
|
-
const SlotInfo_1 = require("../types/SlotInfo");
|
|
27
|
+
const utils_1 = require("ethers/lib/utils");
|
|
39
28
|
const TeeOffers_1 = __importDefault(require("../staticModels/TeeOffers"));
|
|
40
|
-
const
|
|
29
|
+
const models_1 = require("../models");
|
|
41
30
|
class TeeOffer {
|
|
42
31
|
constructor(offerId) {
|
|
43
32
|
this.id = offerId;
|
|
44
33
|
if (!TeeOffer.contract) {
|
|
45
|
-
TeeOffer.contract =
|
|
34
|
+
TeeOffer.contract = connectors_1.BlockchainConnector.getInstance().getContract();
|
|
46
35
|
}
|
|
47
|
-
this.logger = logger_1.default.child({ className: 'TeeOffer' });
|
|
48
36
|
}
|
|
49
37
|
/**
|
|
50
38
|
* Function for fetching offer status from the blockchain
|
|
51
39
|
*/
|
|
52
40
|
isEnabled() {
|
|
53
|
-
return
|
|
54
|
-
return TeeOffer.contract.methods.isOfferEnabled(this.id).call();
|
|
55
|
-
});
|
|
41
|
+
return TeeOffer.contract.methods.isOfferEnabled(this.id).call();
|
|
56
42
|
}
|
|
57
43
|
/**
|
|
58
44
|
* Function for fetching offer hold deposit
|
|
@@ -69,9 +55,7 @@ class TeeOffer {
|
|
|
69
55
|
* @returns this TEE offer slots count
|
|
70
56
|
*/
|
|
71
57
|
getSlotsCount() {
|
|
72
|
-
return
|
|
73
|
-
return yield TeeOffer.contract.methods.getTeeOfferSlotsCount().call();
|
|
74
|
-
});
|
|
58
|
+
return TeeOffer.contract.methods.getTeeOfferSlotsCount(this.id).call();
|
|
75
59
|
}
|
|
76
60
|
/**
|
|
77
61
|
* @returns True if offer is cancelable.
|
|
@@ -82,23 +66,13 @@ class TeeOffer {
|
|
|
82
66
|
return this.isCancelable;
|
|
83
67
|
});
|
|
84
68
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Checks if contract has been initialized, if not - initialize contract
|
|
87
|
-
*/
|
|
88
|
-
checkInitTeeOffer(transactionOptions) {
|
|
89
|
-
if (transactionOptions === null || transactionOptions === void 0 ? void 0 : transactionOptions.web3) {
|
|
90
|
-
return new transactionOptions.web3.eth.Contract(app_json_1.default.abi, Superpro_1.default.address);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
69
|
/**
|
|
94
70
|
* Function for fetching TEE offer info from blockchain
|
|
95
71
|
*/
|
|
96
72
|
getInfo() {
|
|
97
73
|
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
.call();
|
|
101
|
-
this.offerInfo = (0, utils_1.tupleToObject)(teeOfferInfoParams, TeeOfferInfo_1.TeeOfferInfoStructure);
|
|
74
|
+
const { info } = yield TeeOffer.contract.methods.getTeeOffer(this.id).call();
|
|
75
|
+
this.offerInfo = info;
|
|
102
76
|
this.offerInfo.hardwareInfo = yield TeeOffers_1.default.unpackHardwareInfo(this.offerInfo.hardwareInfo);
|
|
103
77
|
return this.offerInfo;
|
|
104
78
|
});
|
|
@@ -108,9 +82,10 @@ class TeeOffer {
|
|
|
108
82
|
*/
|
|
109
83
|
getHardwareInfo() {
|
|
110
84
|
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
85
|
+
const hardwareInfo = yield TeeOffer.contract.methods
|
|
86
|
+
.getTeeOfferHardwareInfo(this.id)
|
|
87
|
+
.call();
|
|
88
|
+
return TeeOffers_1.default.unpackHardwareInfo(hardwareInfo);
|
|
114
89
|
});
|
|
115
90
|
}
|
|
116
91
|
/**
|
|
@@ -118,23 +93,18 @@ class TeeOffer {
|
|
|
118
93
|
* @param optionId - Slot ID
|
|
119
94
|
*/
|
|
120
95
|
getOptionById(optionId) {
|
|
121
|
-
return
|
|
122
|
-
const teeOfferOption = yield TeeOffer.contract.methods.getOptionById(optionId).call();
|
|
123
|
-
return (0, utils_1.tupleToObject)(teeOfferOption, TeeOfferOption_1.TeeOfferOptionStructure);
|
|
124
|
-
});
|
|
96
|
+
return TeeOffer.contract.methods.getOptionById(optionId).call();
|
|
125
97
|
}
|
|
126
98
|
getOptions(begin = 0, end = 999999) {
|
|
127
99
|
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
-
const optionsCount =
|
|
129
|
-
.getTeeOfferOptionsCount(this.id)
|
|
130
|
-
.call());
|
|
100
|
+
const optionsCount = Number(yield TeeOffer.contract.methods.getTeeOfferOptionsCount(this.id).call());
|
|
131
101
|
if (optionsCount === 0) {
|
|
132
102
|
return [];
|
|
133
103
|
}
|
|
134
104
|
const teeOfferOption = yield TeeOffer.contract.methods
|
|
135
105
|
.getTeeOfferOptions(this.id, begin, end)
|
|
136
106
|
.call();
|
|
137
|
-
return
|
|
107
|
+
return teeOfferOption;
|
|
138
108
|
});
|
|
139
109
|
}
|
|
140
110
|
/**
|
|
@@ -142,9 +112,7 @@ class TeeOffer {
|
|
|
142
112
|
* @param optionId - Option ID
|
|
143
113
|
*/
|
|
144
114
|
isOptionExists(optionId) {
|
|
145
|
-
return
|
|
146
|
-
return yield TeeOffer.contract.methods.isTeeOfferSlotExists(this.id, optionId).call();
|
|
147
|
-
});
|
|
115
|
+
return TeeOffer.contract.methods.isTeeOfferSlotExists(this.id, optionId).call();
|
|
148
116
|
}
|
|
149
117
|
/**
|
|
150
118
|
* Function for add option usage to the tee offer
|
|
@@ -155,12 +123,10 @@ class TeeOffer {
|
|
|
155
123
|
*/
|
|
156
124
|
addOption(info, usage, externalId = 'default', transactionOptions) {
|
|
157
125
|
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
-
const contract =
|
|
159
|
-
(0,
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
const formattedExternalId = (0, utils_2.formatBytes32String)(externalId);
|
|
163
|
-
yield TxManager_1.default.execute(contract.methods.addOption, [this.id, formattedExternalId, newInfoTuple, newUsageTuple], transactionOptions);
|
|
126
|
+
const contract = connectors_1.BlockchainConnector.getInstance().getContract();
|
|
127
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
128
|
+
const formattedExternalId = (0, utils_1.formatBytes32String)(externalId);
|
|
129
|
+
yield TxManager_1.default.execute(contract.methods.addOption(this.id, formattedExternalId, info, usage), transactionOptions);
|
|
164
130
|
});
|
|
165
131
|
}
|
|
166
132
|
/**
|
|
@@ -172,11 +138,8 @@ class TeeOffer {
|
|
|
172
138
|
*/
|
|
173
139
|
updateOption(optionId, newInfo, newUsage, transactionOptions) {
|
|
174
140
|
return __awaiter(this, void 0, void 0, function* () {
|
|
175
|
-
|
|
176
|
-
(
|
|
177
|
-
const newInfoTuple = (0, utils_1.objectToTuple)(newInfo, OptionInfo_1.OptionInfoStructure);
|
|
178
|
-
const newUsageTuple = (0, utils_1.objectToTuple)(newUsage, SlotUsage_1.SlotUsageStructure);
|
|
179
|
-
yield TxManager_1.default.execute(contract.methods.updateOption, [this.id, optionId, newInfoTuple, newUsageTuple], transactionOptions);
|
|
141
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
142
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.updateOption(this.id, optionId, newInfo, newUsage), transactionOptions);
|
|
180
143
|
});
|
|
181
144
|
}
|
|
182
145
|
/**
|
|
@@ -186,23 +149,21 @@ class TeeOffer {
|
|
|
186
149
|
*/
|
|
187
150
|
deleteOption(optionId, transactionOptions) {
|
|
188
151
|
return __awaiter(this, void 0, void 0, function* () {
|
|
189
|
-
|
|
190
|
-
(
|
|
191
|
-
yield TxManager_1.default.execute(contract.methods.deleteOption, [this.id, optionId], transactionOptions);
|
|
152
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
153
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.deleteOption(this.id, optionId), transactionOptions);
|
|
192
154
|
});
|
|
193
155
|
}
|
|
194
156
|
initializeTcb(transactionOptions) {
|
|
195
157
|
return __awaiter(this, void 0, void 0, function* () {
|
|
196
|
-
|
|
197
|
-
(
|
|
198
|
-
yield TxManager_1.default.execute(contract.methods.initializeTcb, [this.id], transactionOptions);
|
|
158
|
+
(0, helper_1.checkIfActionAccountInitialized)();
|
|
159
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.initializeTcb(this.id), transactionOptions);
|
|
199
160
|
});
|
|
200
161
|
}
|
|
201
162
|
initializeTcbAndAssignBlocks(transactionOptions) {
|
|
202
163
|
return __awaiter(this, void 0, void 0, function* () {
|
|
203
164
|
yield this.initializeTcb(transactionOptions);
|
|
204
|
-
const tcbId = yield this.getInitializedTcbId();
|
|
205
|
-
const tcb = new
|
|
165
|
+
const tcbId = BigInt(yield this.getInitializedTcbId());
|
|
166
|
+
const tcb = new models_1.TCB(tcbId);
|
|
206
167
|
yield tcb.assignLastBlocksToCheck(transactionOptions);
|
|
207
168
|
yield tcb.assignSuspiciousBlocksToCheck(transactionOptions);
|
|
208
169
|
return tcb;
|
|
@@ -216,12 +177,12 @@ class TeeOffer {
|
|
|
216
177
|
*/
|
|
217
178
|
getListsForVerification(transactionOptions) {
|
|
218
179
|
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
-
(0,
|
|
180
|
+
(0, helper_1.checkIfActionAccountInitialized)();
|
|
220
181
|
const tcb = yield this.initializeTcbAndAssignBlocks(transactionOptions);
|
|
221
182
|
const { blocksIds } = yield tcb.getCheckingBlocksMarks();
|
|
222
183
|
const tcbsForVerification = [];
|
|
223
184
|
for (let blockIndex = 0; blockIndex < blocksIds.length; blockIndex++) {
|
|
224
|
-
const tcb = new
|
|
185
|
+
const tcb = new models_1.TCB(blocksIds[blockIndex]);
|
|
225
186
|
const tcbInfo = yield tcb.get();
|
|
226
187
|
tcbsForVerification.push({
|
|
227
188
|
tcbId: blocksIds[blockIndex].toString(),
|
|
@@ -230,11 +191,11 @@ class TeeOffer {
|
|
|
230
191
|
benchmark: tcbInfo.publicData.benchmark,
|
|
231
192
|
quote: tcbInfo.quote,
|
|
232
193
|
marks: tcbInfo.utilData.checkingBlockMarks,
|
|
233
|
-
checkingBlocks: tcbInfo.utilData.checkingBlocks,
|
|
194
|
+
checkingBlocks: tcbInfo.utilData.checkingBlocks.map((x) => x.toString()),
|
|
234
195
|
});
|
|
235
196
|
}
|
|
236
197
|
return {
|
|
237
|
-
tcbId: tcb.tcbId,
|
|
198
|
+
tcbId: tcb.tcbId.toString(),
|
|
238
199
|
tcbsForVerification,
|
|
239
200
|
};
|
|
240
201
|
});
|
|
@@ -244,9 +205,7 @@ class TeeOffer {
|
|
|
244
205
|
* @param slotId - Slot ID
|
|
245
206
|
*/
|
|
246
207
|
isSlotExists(slotId) {
|
|
247
|
-
return
|
|
248
|
-
return yield TeeOffer.contract.methods.isTeeOfferSlotExists(this.id, slotId).call();
|
|
249
|
-
});
|
|
208
|
+
return TeeOffer.contract.methods.isTeeOfferSlotExists(this.id, slotId).call();
|
|
250
209
|
}
|
|
251
210
|
/**
|
|
252
211
|
* Function for fetching tee offer slot by id
|
|
@@ -254,9 +213,10 @@ class TeeOffer {
|
|
|
254
213
|
*/
|
|
255
214
|
getSlotById(slotId) {
|
|
256
215
|
return __awaiter(this, void 0, void 0, function* () {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
216
|
+
const slot = yield TeeOffer.contract.methods
|
|
217
|
+
.getTeeOfferSlotById(this.id, slotId)
|
|
218
|
+
.call();
|
|
219
|
+
slot.info = (0, helper_1.unpackSlotInfo)(slot.info, yield TeeOffers_1.default.getDenominator());
|
|
260
220
|
return slot;
|
|
261
221
|
});
|
|
262
222
|
}
|
|
@@ -268,16 +228,15 @@ class TeeOffer {
|
|
|
268
228
|
*/
|
|
269
229
|
getSlots(begin = 0, end = 999999) {
|
|
270
230
|
return __awaiter(this, void 0, void 0, function* () {
|
|
271
|
-
const teeOfferSlotsCount =
|
|
272
|
-
.getTeeOfferSlotsCount(this.id)
|
|
273
|
-
.call());
|
|
231
|
+
const teeOfferSlotsCount = Number(yield TeeOffer.contract.methods.getTeeOfferSlotsCount(this.id).call());
|
|
274
232
|
if (teeOfferSlotsCount === 0) {
|
|
275
233
|
return [];
|
|
276
234
|
}
|
|
277
|
-
|
|
278
|
-
|
|
235
|
+
const slots = yield TeeOffer.contract.methods
|
|
236
|
+
.getTeeOfferSlots(this.id, begin, end)
|
|
237
|
+
.call();
|
|
279
238
|
for (const slot of slots) {
|
|
280
|
-
slot.info = (0,
|
|
239
|
+
slot.info = (0, helper_1.unpackSlotInfo)(slot.info, yield TeeOffers_1.default.getDenominator());
|
|
281
240
|
}
|
|
282
241
|
return slots;
|
|
283
242
|
});
|
|
@@ -290,13 +249,10 @@ class TeeOffer {
|
|
|
290
249
|
*/
|
|
291
250
|
addSlot(info, usage, externalId = 'default', transactionOptions) {
|
|
292
251
|
return __awaiter(this, void 0, void 0, function* () {
|
|
293
|
-
|
|
294
|
-
(0,
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
const usageTuple = (0, utils_1.objectToTuple)(usage, SlotUsage_1.SlotUsageStructure);
|
|
298
|
-
const formattedExternalId = (0, utils_2.formatBytes32String)(externalId);
|
|
299
|
-
yield TxManager_1.default.execute(contract.methods.addTeeOfferSlot, [this.id, formattedExternalId, infoTuple, usageTuple], transactionOptions);
|
|
252
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
253
|
+
info = (0, helper_1.packSlotInfo)(info, yield TeeOffers_1.default.getDenominator());
|
|
254
|
+
const formattedExternalId = (0, utils_1.formatBytes32String)(externalId);
|
|
255
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.addTeeOfferSlot(this.id, formattedExternalId, info, usage), transactionOptions);
|
|
300
256
|
});
|
|
301
257
|
}
|
|
302
258
|
/**
|
|
@@ -308,12 +264,9 @@ class TeeOffer {
|
|
|
308
264
|
*/
|
|
309
265
|
updateSlot(slotId, newInfo, newUsage, transactionOptions) {
|
|
310
266
|
return __awaiter(this, void 0, void 0, function* () {
|
|
311
|
-
|
|
312
|
-
(0,
|
|
313
|
-
|
|
314
|
-
const newInfoTuple = (0, utils_1.objectToTuple)(newInfo, SlotInfo_1.SlotInfoStructure);
|
|
315
|
-
const newUsageTuple = (0, utils_1.objectToTuple)(newUsage, SlotUsage_1.SlotUsageStructure);
|
|
316
|
-
yield TxManager_1.default.execute(contract.methods.updateTeeOfferSlot, [this.id, slotId, newInfoTuple, newUsageTuple], transactionOptions);
|
|
267
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
268
|
+
newInfo = (0, helper_1.packSlotInfo)(newInfo, yield TeeOffers_1.default.getDenominator());
|
|
269
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.updateTeeOfferSlot(this.id, slotId, newInfo, newUsage), transactionOptions);
|
|
317
270
|
});
|
|
318
271
|
}
|
|
319
272
|
/**
|
|
@@ -323,9 +276,8 @@ class TeeOffer {
|
|
|
323
276
|
*/
|
|
324
277
|
deleteSlot(slotId, transactionOptions) {
|
|
325
278
|
return __awaiter(this, void 0, void 0, function* () {
|
|
326
|
-
|
|
327
|
-
(
|
|
328
|
-
yield TxManager_1.default.execute(contract.methods.deleteTeeOfferSlot, [this.id, slotId], transactionOptions);
|
|
279
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
280
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.deleteTeeOfferSlot(this.id, slotId), transactionOptions);
|
|
329
281
|
});
|
|
330
282
|
}
|
|
331
283
|
/**
|
|
@@ -333,22 +285,18 @@ class TeeOffer {
|
|
|
333
285
|
* @returns {Promise<string>} - Actual TCB ID
|
|
334
286
|
*/
|
|
335
287
|
getActualTcbId() {
|
|
336
|
-
return
|
|
337
|
-
return TeeOffer.contract.methods.getActualTcbId(this.id).call();
|
|
338
|
-
});
|
|
288
|
+
return TeeOffer.contract.methods.getActualTcbId(this.id).call();
|
|
339
289
|
}
|
|
340
290
|
/**
|
|
341
291
|
* Function return last inited TCB of TEE offer
|
|
342
292
|
* @param teeOfferId - id of TEE offer
|
|
343
293
|
* */
|
|
344
294
|
getInitializedTcbId() {
|
|
345
|
-
return
|
|
346
|
-
return TeeOffer.contract.methods.getInitializedTcbId(this.id).call();
|
|
347
|
-
});
|
|
295
|
+
return TeeOffer.contract.methods.getInitializedTcbId(this.id).call();
|
|
348
296
|
}
|
|
349
297
|
isTcbCreationAvailable() {
|
|
350
298
|
return __awaiter(this, void 0, void 0, function* () {
|
|
351
|
-
const
|
|
299
|
+
const { offerNotBlocked, newEpochStarted, halfEpochPassed, benchmarkVerified } = yield TeeOffer.contract.methods.isTcbCreationAvailable(this.id).call();
|
|
352
300
|
return offerNotBlocked && newEpochStarted && halfEpochPassed && benchmarkVerified;
|
|
353
301
|
});
|
|
354
302
|
}
|
|
@@ -373,9 +321,7 @@ class TeeOffer {
|
|
|
373
321
|
});
|
|
374
322
|
}
|
|
375
323
|
isTeeOfferVerifying() {
|
|
376
|
-
return
|
|
377
|
-
return yield TeeOffer.contract.methods.isTeeOfferVerifying(this.id).call();
|
|
378
|
-
});
|
|
324
|
+
return TeeOffer.contract.methods.isTeeOfferVerifying(this.id).call();
|
|
379
325
|
}
|
|
380
326
|
/**
|
|
381
327
|
* Function for fetching TLB provider from blockchain
|
|
@@ -402,12 +348,10 @@ class TeeOffer {
|
|
|
402
348
|
*/
|
|
403
349
|
getOrigins() {
|
|
404
350
|
return __awaiter(this, void 0, void 0, function* () {
|
|
405
|
-
|
|
406
|
-
// Converts blockchain array into object
|
|
407
|
-
origins = (0, utils_1.tupleToObject)(origins, Origins_1.OriginsStructure);
|
|
351
|
+
const origins = yield TeeOffer.contract.methods.getOfferOrigins(this.id).call();
|
|
408
352
|
// Convert blockchain time seconds to js time milliseconds
|
|
409
|
-
origins.createdDate =
|
|
410
|
-
origins.modifiedDate =
|
|
353
|
+
origins.createdDate = origins.createdDate * 1000;
|
|
354
|
+
origins.modifiedDate = origins.modifiedDate * 1000;
|
|
411
355
|
return (this.origins = origins);
|
|
412
356
|
});
|
|
413
357
|
}
|
|
@@ -418,9 +362,8 @@ class TeeOffer {
|
|
|
418
362
|
*/
|
|
419
363
|
addTlb(tlb, transactionOptions) {
|
|
420
364
|
return __awaiter(this, void 0, void 0, function* () {
|
|
421
|
-
|
|
422
|
-
(
|
|
423
|
-
yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferTlb, [this.id, tlb], transactionOptions);
|
|
365
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
366
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferTlb(this.id, tlb), transactionOptions);
|
|
424
367
|
if (this.offerInfo)
|
|
425
368
|
this.offerInfo.tlb = tlb;
|
|
426
369
|
});
|
|
@@ -432,9 +375,8 @@ class TeeOffer {
|
|
|
432
375
|
*/
|
|
433
376
|
setName(name, transactionOptions) {
|
|
434
377
|
return __awaiter(this, void 0, void 0, function* () {
|
|
435
|
-
|
|
436
|
-
(
|
|
437
|
-
yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferName, [this.id, name], transactionOptions);
|
|
378
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
379
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferName(this.id, name), transactionOptions);
|
|
438
380
|
if (this.offerInfo)
|
|
439
381
|
this.offerInfo.name = name;
|
|
440
382
|
});
|
|
@@ -446,10 +388,8 @@ class TeeOffer {
|
|
|
446
388
|
*/
|
|
447
389
|
setInfo(newInfo, transactionOptions) {
|
|
448
390
|
return __awaiter(this, void 0, void 0, function* () {
|
|
449
|
-
|
|
450
|
-
(
|
|
451
|
-
const newInfoTuple = (0, utils_1.objectToTuple)(newInfo, TeeOfferInfo_1.TeeOfferInfoStructure);
|
|
452
|
-
yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferInfo, [this.id, newInfoTuple], transactionOptions);
|
|
391
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
392
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferInfo(this.id, newInfo), transactionOptions);
|
|
453
393
|
if (this.offerInfo)
|
|
454
394
|
this.offerInfo = newInfo;
|
|
455
395
|
});
|
|
@@ -461,11 +401,9 @@ class TeeOffer {
|
|
|
461
401
|
*/
|
|
462
402
|
setHardwareInfo(newHardwareInfo, transactionOptions) {
|
|
463
403
|
return __awaiter(this, void 0, void 0, function* () {
|
|
464
|
-
|
|
465
|
-
(0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
404
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
466
405
|
newHardwareInfo = yield TeeOffers_1.default.packHardwareInfo(newHardwareInfo);
|
|
467
|
-
|
|
468
|
-
yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferHardwareInfo, [this.id, newHardwareInfoTuple], transactionOptions);
|
|
406
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferHardwareInfo(this.id, newHardwareInfo), transactionOptions);
|
|
469
407
|
});
|
|
470
408
|
}
|
|
471
409
|
/**
|
|
@@ -475,9 +413,8 @@ class TeeOffer {
|
|
|
475
413
|
*/
|
|
476
414
|
setDescription(description, transactionOptions) {
|
|
477
415
|
return __awaiter(this, void 0, void 0, function* () {
|
|
478
|
-
|
|
479
|
-
(
|
|
480
|
-
yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferDescription, [this.id, description], transactionOptions);
|
|
416
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
417
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferDescription(this.id, description), transactionOptions);
|
|
481
418
|
if (this.offerInfo)
|
|
482
419
|
this.offerInfo.description = description;
|
|
483
420
|
});
|
|
@@ -489,9 +426,8 @@ class TeeOffer {
|
|
|
489
426
|
*/
|
|
490
427
|
setKeys(argsPublicKey, transactionOptions) {
|
|
491
428
|
return __awaiter(this, void 0, void 0, function* () {
|
|
492
|
-
|
|
493
|
-
(
|
|
494
|
-
yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferPublicKey, [this.id, argsPublicKey], transactionOptions);
|
|
429
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
430
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferPublicKey(this.id, argsPublicKey), transactionOptions);
|
|
495
431
|
if (this.offerInfo) {
|
|
496
432
|
this.offerInfo.argsPublicKey = argsPublicKey;
|
|
497
433
|
}
|
|
@@ -503,9 +439,8 @@ class TeeOffer {
|
|
|
503
439
|
*/
|
|
504
440
|
disable(transactionOptions) {
|
|
505
441
|
return __awaiter(this, void 0, void 0, function* () {
|
|
506
|
-
|
|
507
|
-
(
|
|
508
|
-
yield TxManager_1.default.execute(TeeOffer.contract.methods.disableOffer, [this.id], transactionOptions);
|
|
442
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
443
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.disableOffer(this.id), transactionOptions);
|
|
509
444
|
});
|
|
510
445
|
}
|
|
511
446
|
/**
|
|
@@ -514,137 +449,130 @@ class TeeOffer {
|
|
|
514
449
|
*/
|
|
515
450
|
enable(transactionOptions) {
|
|
516
451
|
return __awaiter(this, void 0, void 0, function* () {
|
|
517
|
-
|
|
518
|
-
(
|
|
519
|
-
yield TxManager_1.default.execute(TeeOffer.contract.methods.enableOffer, [this.id], transactionOptions);
|
|
452
|
+
(0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
|
|
453
|
+
yield TxManager_1.default.execute(TeeOffer.contract.methods.enableOffer(this.id), transactionOptions);
|
|
520
454
|
});
|
|
521
455
|
}
|
|
522
456
|
}
|
|
523
457
|
__decorate([
|
|
524
|
-
(0,
|
|
458
|
+
(0, helper_1.incrementMethodCall)(),
|
|
525
459
|
__metadata("design:type", Function),
|
|
526
460
|
__metadata("design:paramtypes", []),
|
|
527
461
|
__metadata("design:returntype", Promise)
|
|
528
462
|
], TeeOffer.prototype, "isEnabled", null);
|
|
529
463
|
__decorate([
|
|
530
|
-
(0,
|
|
464
|
+
(0, helper_1.incrementMethodCall)(),
|
|
531
465
|
__metadata("design:type", Function),
|
|
532
|
-
__metadata("design:paramtypes", [
|
|
466
|
+
__metadata("design:paramtypes", [typeof BigInt === "function" ? BigInt : Object, Number, Array, Array]),
|
|
533
467
|
__metadata("design:returntype", Promise)
|
|
534
468
|
], TeeOffer.prototype, "getMinDeposit", null);
|
|
535
469
|
__decorate([
|
|
536
|
-
(0,
|
|
470
|
+
(0, helper_1.incrementMethodCall)(),
|
|
537
471
|
__metadata("design:type", Function),
|
|
538
472
|
__metadata("design:paramtypes", []),
|
|
539
473
|
__metadata("design:returntype", Promise)
|
|
540
474
|
], TeeOffer.prototype, "isOfferCancelable", null);
|
|
541
475
|
__decorate([
|
|
542
|
-
(0,
|
|
543
|
-
__metadata("design:type", Function),
|
|
544
|
-
__metadata("design:paramtypes", [Object]),
|
|
545
|
-
__metadata("design:returntype", void 0)
|
|
546
|
-
], TeeOffer.prototype, "checkInitTeeOffer", null);
|
|
547
|
-
__decorate([
|
|
548
|
-
(0, utils_1.incrementMethodCall)(),
|
|
476
|
+
(0, helper_1.incrementMethodCall)(),
|
|
549
477
|
__metadata("design:type", Function),
|
|
550
478
|
__metadata("design:paramtypes", []),
|
|
551
479
|
__metadata("design:returntype", Promise)
|
|
552
480
|
], TeeOffer.prototype, "getInfo", null);
|
|
553
481
|
__decorate([
|
|
554
|
-
(0,
|
|
482
|
+
(0, helper_1.incrementMethodCall)(),
|
|
555
483
|
__metadata("design:type", Function),
|
|
556
484
|
__metadata("design:paramtypes", []),
|
|
557
485
|
__metadata("design:returntype", Promise)
|
|
558
486
|
], TeeOffer.prototype, "getHardwareInfo", null);
|
|
559
487
|
__decorate([
|
|
560
|
-
(0,
|
|
488
|
+
(0, helper_1.incrementMethodCall)(),
|
|
561
489
|
__metadata("design:type", Function),
|
|
562
490
|
__metadata("design:paramtypes", [Object, Object, Object, Object]),
|
|
563
491
|
__metadata("design:returntype", Promise)
|
|
564
492
|
], TeeOffer.prototype, "addOption", null);
|
|
565
493
|
__decorate([
|
|
566
|
-
(0,
|
|
494
|
+
(0, helper_1.incrementMethodCall)(),
|
|
567
495
|
__metadata("design:type", Function),
|
|
568
496
|
__metadata("design:paramtypes", [String, Object, Object, Object]),
|
|
569
497
|
__metadata("design:returntype", Promise)
|
|
570
498
|
], TeeOffer.prototype, "updateOption", null);
|
|
571
499
|
__decorate([
|
|
572
|
-
(0,
|
|
500
|
+
(0, helper_1.incrementMethodCall)(),
|
|
573
501
|
__metadata("design:type", Function),
|
|
574
502
|
__metadata("design:paramtypes", [String, Object]),
|
|
575
503
|
__metadata("design:returntype", Promise)
|
|
576
504
|
], TeeOffer.prototype, "deleteOption", null);
|
|
577
505
|
__decorate([
|
|
578
|
-
(0,
|
|
506
|
+
(0, helper_1.incrementMethodCall)(),
|
|
579
507
|
__metadata("design:type", Function),
|
|
580
508
|
__metadata("design:paramtypes", [Object]),
|
|
581
509
|
__metadata("design:returntype", Promise)
|
|
582
510
|
], TeeOffer.prototype, "initializeTcb", null);
|
|
583
511
|
__decorate([
|
|
584
|
-
(0,
|
|
512
|
+
(0, helper_1.incrementMethodCall)(),
|
|
585
513
|
__metadata("design:type", Function),
|
|
586
514
|
__metadata("design:paramtypes", [Object]),
|
|
587
515
|
__metadata("design:returntype", Promise)
|
|
588
516
|
], TeeOffer.prototype, "initializeTcbAndAssignBlocks", null);
|
|
589
517
|
__decorate([
|
|
590
|
-
(0,
|
|
518
|
+
(0, helper_1.incrementMethodCall)(),
|
|
591
519
|
__metadata("design:type", Function),
|
|
592
520
|
__metadata("design:paramtypes", [Object]),
|
|
593
521
|
__metadata("design:returntype", Promise)
|
|
594
522
|
], TeeOffer.prototype, "getListsForVerification", null);
|
|
595
523
|
__decorate([
|
|
596
|
-
(0,
|
|
524
|
+
(0, helper_1.incrementMethodCall)(),
|
|
597
525
|
__metadata("design:type", Function),
|
|
598
526
|
__metadata("design:paramtypes", [Object, Object, Object, Object]),
|
|
599
527
|
__metadata("design:returntype", Promise)
|
|
600
528
|
], TeeOffer.prototype, "addSlot", null);
|
|
601
529
|
__decorate([
|
|
602
|
-
(0,
|
|
530
|
+
(0, helper_1.incrementMethodCall)(),
|
|
603
531
|
__metadata("design:type", Function),
|
|
604
532
|
__metadata("design:paramtypes", [String, Object, Object, Object]),
|
|
605
533
|
__metadata("design:returntype", Promise)
|
|
606
534
|
], TeeOffer.prototype, "updateSlot", null);
|
|
607
535
|
__decorate([
|
|
608
|
-
(0,
|
|
536
|
+
(0, helper_1.incrementMethodCall)(),
|
|
609
537
|
__metadata("design:type", Function),
|
|
610
538
|
__metadata("design:paramtypes", [String, Object]),
|
|
611
539
|
__metadata("design:returntype", Promise)
|
|
612
540
|
], TeeOffer.prototype, "deleteSlot", null);
|
|
613
541
|
__decorate([
|
|
614
|
-
(0,
|
|
542
|
+
(0, helper_1.incrementMethodCall)(),
|
|
615
543
|
__metadata("design:type", Function),
|
|
616
544
|
__metadata("design:paramtypes", []),
|
|
617
545
|
__metadata("design:returntype", Promise)
|
|
618
546
|
], TeeOffer.prototype, "getProviderAuthority", null);
|
|
619
547
|
__decorate([
|
|
620
|
-
(0,
|
|
548
|
+
(0, helper_1.incrementMethodCall)(),
|
|
621
549
|
__metadata("design:type", Function),
|
|
622
550
|
__metadata("design:paramtypes", []),
|
|
623
551
|
__metadata("design:returntype", Promise)
|
|
624
552
|
], TeeOffer.prototype, "getOfferType", null);
|
|
625
553
|
__decorate([
|
|
626
|
-
(0,
|
|
554
|
+
(0, helper_1.incrementMethodCall)(),
|
|
627
555
|
__metadata("design:type", Function),
|
|
628
556
|
__metadata("design:paramtypes", []),
|
|
629
557
|
__metadata("design:returntype", Promise)
|
|
630
558
|
], TeeOffer.prototype, "isTeeOfferVerifying", null);
|
|
631
559
|
__decorate([
|
|
632
|
-
(0,
|
|
560
|
+
(0, helper_1.incrementMethodCall)(),
|
|
633
561
|
__metadata("design:type", Function),
|
|
634
562
|
__metadata("design:paramtypes", []),
|
|
635
563
|
__metadata("design:returntype", Promise)
|
|
636
564
|
], TeeOffer.prototype, "getTlb", null);
|
|
637
565
|
__decorate([
|
|
638
|
-
(0,
|
|
566
|
+
(0, helper_1.incrementMethodCall)(),
|
|
639
567
|
__metadata("design:type", Function),
|
|
640
568
|
__metadata("design:paramtypes", []),
|
|
641
569
|
__metadata("design:returntype", Promise)
|
|
642
570
|
], TeeOffer.prototype, "getOrigins", null);
|
|
643
571
|
__decorate([
|
|
644
|
-
(0,
|
|
572
|
+
(0, helper_1.incrementMethodCall)(),
|
|
645
573
|
__metadata("design:type", Function),
|
|
646
574
|
__metadata("design:paramtypes", [String, Object]),
|
|
647
575
|
__metadata("design:returntype", Promise)
|
|
648
576
|
], TeeOffer.prototype, "addTlb", null);
|
|
649
577
|
exports.default = TeeOffer;
|
|
650
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVlT2ZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL1RlZU9mZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsdURBQW1DO0FBRW5DLHFFQUE0QztBQUM1QyxvQ0FRa0I7QUFDbEIsd0RBQTRFO0FBRzVFLDhDQUE2RDtBQUM3RCx3RUFBZ0Q7QUFDaEQsNEZBQW9FO0FBQ3BFLG1FQUEyQztBQUMzQyx3REFBNEU7QUFDNUUsNERBQWtGO0FBQ2xGLHdEQUE0RTtBQUM1RSxvREFBc0U7QUFDdEUsa0RBQW1FO0FBQ25FLDRDQUF1RDtBQUN2RCxnREFBZ0U7QUFDaEUsMEVBQWtEO0FBQ2xELHdEQUFnQztBQUdoQyxNQUFNLFFBQVE7SUF1QlYsWUFBWSxPQUFlO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ3BCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsNkJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkU7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBRVUsU0FBUzs7WUFDbEIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BFLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBRVUsYUFBYSxDQUN0QixNQUFjLEVBQ2QsU0FBaUIsRUFDakIsVUFBb0IsRUFDcEIsWUFBc0I7O1lBRXRCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87aUJBQzVDLGtCQUFrQixDQUFD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
|
|
578
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVlT2ZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL1RlZU9mZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsNENBS3lCO0FBRXpCLDhDQUFvRDtBQUNwRCxtRUFBMkM7QUFTM0MsNENBQXVEO0FBQ3ZELDBFQUFrRDtBQUNsRCxzQ0FBZ0M7QUFHaEMsTUFBTSxRQUFRO0lBc0JWLFlBQVksT0FBZTtRQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNwQixRQUFRLENBQUMsUUFBUSxHQUFHLGdDQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3ZFO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBRUksU0FBUztRQUNaLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7O09BRUc7SUFFVSxhQUFhLENBQ3RCLE1BQWMsRUFDZCxTQUFpQixFQUNqQixVQUFvQixFQUNwQixZQUFzQjs7WUFFdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTztpQkFDNUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUM7aUJBQ3hFLElBQUksRUFBRSxDQUFDO1lBRVosT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzNCLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNoQixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJ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
|