@bitgo-beta/sdk-coin-vet 1.0.1-beta.606 → 1.0.1-beta.608
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/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +3 -2
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +3 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/validatorRegistrationTransaction.js +14 -6
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +7 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +18 -1
- package/dist/test/resources/vet.d.ts +3 -1
- package/dist/test/resources/vet.d.ts.map +1 -1
- package/dist/test/resources/vet.js +6 -4
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +37 -1
- package/dist/test/unit/stakingFlowE2E.js +71 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
|
@@ -46,7 +46,11 @@ describe('VET Staking Flow - End-to-End Test', function () {
|
|
|
46
46
|
const factory = new lib_1.TransactionBuilderFactory(coinConfig);
|
|
47
47
|
// Test data
|
|
48
48
|
const stakingContractAddress = testData.STAKING_CONTRACT_ADDRESS;
|
|
49
|
+
const builtInStakerContractAddress = testData.BUILT_IN_STAKER_CONTRACT_ADDRESS;
|
|
49
50
|
const amountToStake = '1000000000000000000'; // 1 VET in wei
|
|
51
|
+
const amountToStakeForValidatorRegistration = '25000000000000000000000000'; // 25M VET in wei
|
|
52
|
+
const stakingPeriod = 60480;
|
|
53
|
+
const validatorAddress = '0x9a7afcacc88c106f3bbd6b213cd0821d9224d945';
|
|
50
54
|
const levelId = testData.STAKING_LEVEL_ID;
|
|
51
55
|
const senderAddress = '0x9378c12BD7502A11F770a5C1F223c959B2805dA9';
|
|
52
56
|
const feePayerAddress = '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083';
|
|
@@ -117,6 +121,72 @@ describe('VET Staking Flow - End-to-End Test', function () {
|
|
|
117
121
|
jsonOutput.should.have.property('amountToStake', amountToStake);
|
|
118
122
|
jsonOutput.should.have.property('levelId', levelId);
|
|
119
123
|
});
|
|
124
|
+
it('should build, sign, and serialize a complete validator registration transaction with fee delegation', async function () {
|
|
125
|
+
// Step 1: Build the staking transaction
|
|
126
|
+
const validatorRegistrationBuilder = factory.getValidatorRegistrationBuilder();
|
|
127
|
+
validatorRegistrationBuilder
|
|
128
|
+
.stakingContractAddress(builtInStakerContractAddress)
|
|
129
|
+
.stakingPeriod(60480)
|
|
130
|
+
.validator(validatorAddress)
|
|
131
|
+
.amountToStake(amountToStakeForValidatorRegistration)
|
|
132
|
+
.sender(senderAddress)
|
|
133
|
+
.chainTag(0x27) // Testnet chain tag
|
|
134
|
+
.blockRef('0x014ead140e77bbc1')
|
|
135
|
+
.expiration(64)
|
|
136
|
+
.gas(100000)
|
|
137
|
+
.gasPriceCoef(128)
|
|
138
|
+
.nonce('12345');
|
|
139
|
+
validatorRegistrationBuilder.addFeePayerAddress(feePayerAddress);
|
|
140
|
+
const unsignedTx = await validatorRegistrationBuilder.build();
|
|
141
|
+
should_1.default.exist(unsignedTx);
|
|
142
|
+
unsignedTx.should.be.instanceof(lib_1.ValidatorRegistrationTransaction);
|
|
143
|
+
const validatorRegistrationTx = unsignedTx;
|
|
144
|
+
// Verify transaction structure
|
|
145
|
+
validatorRegistrationTx.type.should.equal(sdk_core_1.TransactionType.StakingLock);
|
|
146
|
+
validatorRegistrationTx.stakingContractAddress.should.equal(builtInStakerContractAddress);
|
|
147
|
+
validatorRegistrationTx.stakingPeriod.should.equal(stakingPeriod);
|
|
148
|
+
validatorRegistrationTx.validator.should.equal(validatorAddress);
|
|
149
|
+
validatorRegistrationTx.amountToStake.should.equal(amountToStakeForValidatorRegistration);
|
|
150
|
+
should_1.default.exist(validatorRegistrationTx.rawTransaction);
|
|
151
|
+
should_1.default.exist(validatorRegistrationTx.rawTransaction.body);
|
|
152
|
+
// This is the critical test - ensure reserved.features = 1
|
|
153
|
+
should_1.default.exist(validatorRegistrationTx.rawTransaction.body.reserved);
|
|
154
|
+
validatorRegistrationTx.rawTransaction.body.reserved.should.have.property('features', 1);
|
|
155
|
+
// Step 3: Add sender signature
|
|
156
|
+
validatorRegistrationTx.addSenderSignature(mockSenderSignature);
|
|
157
|
+
should_1.default.exist(validatorRegistrationTx.senderSignature);
|
|
158
|
+
Buffer.from(validatorRegistrationTx.senderSignature).should.eql(mockSenderSignature);
|
|
159
|
+
// Step 4: Add fee payer signature
|
|
160
|
+
validatorRegistrationTx.addFeePayerSignature(mockFeePayerSignature);
|
|
161
|
+
should_1.default.exist(validatorRegistrationTx.feePayerSignature);
|
|
162
|
+
Buffer.from(validatorRegistrationTx.feePayerSignature).should.eql(mockFeePayerSignature);
|
|
163
|
+
// Step 5: Generate transaction ID
|
|
164
|
+
// This should NOT throw "not signed transaction: id unavailable" error anymore
|
|
165
|
+
const transactionId = validatorRegistrationTx.id;
|
|
166
|
+
should_1.default.exist(transactionId);
|
|
167
|
+
transactionId.should.not.equal('UNAVAILABLE');
|
|
168
|
+
// Step 6: Serialize the fully signed transaction
|
|
169
|
+
const serializedTx = validatorRegistrationTx.toBroadcastFormat();
|
|
170
|
+
should_1.default.exist(serializedTx);
|
|
171
|
+
serializedTx.should.be.type('string');
|
|
172
|
+
serializedTx.should.startWith('0x');
|
|
173
|
+
// Step 7: Verify transaction can be deserialized
|
|
174
|
+
const deserializedBuilder = factory.from(serializedTx);
|
|
175
|
+
const deserializedTx = deserializedBuilder.transaction;
|
|
176
|
+
deserializedTx.should.be.instanceof(lib_1.ValidatorRegistrationTransaction);
|
|
177
|
+
deserializedTx.stakingContractAddress.should.equal(builtInStakerContractAddress);
|
|
178
|
+
deserializedTx.stakingPeriod.should.equal(stakingPeriod);
|
|
179
|
+
deserializedTx.validator.should.equal(validatorAddress);
|
|
180
|
+
deserializedTx.amountToStake.should.equal(amountToStakeForValidatorRegistration);
|
|
181
|
+
// Step 8: Verify toJson output
|
|
182
|
+
const jsonOutput = validatorRegistrationTx.toJson();
|
|
183
|
+
should_1.default.exist(jsonOutput);
|
|
184
|
+
jsonOutput.should.have.property('id', transactionId);
|
|
185
|
+
jsonOutput.should.have.property('stakingContractAddress', builtInStakerContractAddress);
|
|
186
|
+
jsonOutput.should.have.property('stakingPeriod', stakingPeriod);
|
|
187
|
+
jsonOutput.should.have.property('validatorAddress', validatorAddress);
|
|
188
|
+
jsonOutput.should.have.property('amountToStake', amountToStakeForValidatorRegistration);
|
|
189
|
+
});
|
|
120
190
|
it('should handle signature combination in the correct order', async function () {
|
|
121
191
|
// This test specifically validates the signature combination flow that was failing
|
|
122
192
|
const stakingBuilder = factory.getStakingActivateBuilder();
|
|
@@ -219,4 +289,4 @@ describe('VET Staking Flow - End-to-End Test', function () {
|
|
|
219
289
|
});
|
|
220
290
|
});
|
|
221
291
|
});
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0Zsb3dFMkUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ0Zsb3dFMkUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCx1Q0FBa0Y7QUFDbEYsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsWUFBWTtJQUNaLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLENBQUMsZUFBZTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7SUFDMUMsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7SUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFFckUsc0ZBQXNGO0lBQ3RGLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZFLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtRQUM1QyxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsS0FBSztZQUM5Rix3Q0FBd0M7WUFDeEMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFFM0QsY0FBYztpQkFDWCxzQkFBc0IsQ0FBQyxzQkFB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LENBQUM7cUJBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUM7cUJBQ2hCLE1BQU0sQ0FBQyxhQUFhLENBQUM7cUJBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUM7cUJBQ2QsUUFBUSxDQUFDLG9CQUFvQixDQUFDO3FCQUM5QixVQUFVLENBQUMsRUFBRSxDQUFDO3FCQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7cUJBQ1gsWUFBWSxDQUFDLEdBQUcsQ0FBQztxQkFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUVsQixjQUFjLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRW5ELDREQUE0RDtnQkFDNUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBMkIsQ0FBQztnQkFDbkUsRUFBVSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUVsQywwREFBMEQ7Z0JBQzFELE1BQU8sRUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBRXhDLDZDQUE2QztnQkFDN0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsU0FBUyxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvdmV0JztcblxuZGVzY3JpYmUoJ1ZFVCBTdGFraW5nIEZsb3cgLSBFbmQtdG8tRW5kIFRlc3QnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3R2ZXQnKTtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuXG4gIC8vIFRlc3QgZGF0YVxuICBjb25zdCBzdGFraW5nQ29udHJhY3RBZGRyZXNzID0gdGVzdERhdGEuU1RBS0lOR19DT05UUkFDVF9BRERSRVNTO1xuICBjb25zdCBhbW91bnRUb1N0YWtlID0gJzEwMDAwMDAwMDAwMDAwMDAwMDAnOyAvLyAxIFZFVCBpbiB3ZWlcbiAgY29uc3QgbGV2ZWxJZCA9IHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQ7XG4gIGNvbnN0IHNlbmRlckFkZHJlc3MgPSAnMHg5Mzc4YzEyQkQ3NTAyQTExRjc3MGE1QzFGMjIzYzk1OUIyODA1ZEE5JztcbiAgY29uc3QgZmVlUGF5ZXJBZGRyZXNzID0gJzB4ZGM5ZmVmMGI4NGEwY2NmM2YxYmQ0Yjg0ZTQxNzQzZTNlMDUxYTA4Myc7XG5cbiAgLy8gTW9jayBzaWduYXR1cmVzIGZvciB0ZXN0aW5nICh0aGVzZSB3b3VsZCBjb21lIGZyb20gYWN0dWFsIHNpZ25pbmcgaW4gcmVhbCBzY2VuYXJpbylcbiAgY29uc3QgbW9ja1NlbmRlclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNlbmRlclNpZywgJ2hleCcpO1xuICBjb25zdCBtb2NrRmVlUGF5ZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5mZWVQYXllclNpZywgJ2hleCcpO1xuXG4gIGRlc2NyaWJlKCdDb21wbGV0ZSBTdGFraW5nIFRyYW5zYWN0aW9uIEZsb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCwgc2lnbiwgYW5kIHNlcmlhbGl6ZSBhIGNvbXBsZXRlIHN0YWtpbmcgdHJhbnNhY3Rpb24gd2l0aCBmZWUgZGVsZWdhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFN0ZXAgMTogQnVpbGQgdGhlIHN0YWtpbmcgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyXG4gICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgIC5sZXZlbElkKGxldmVsSWQpXG4gICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLmNoYWluVGFnKDB4MjcpIC8vIFRlc3RuZXQgY2hhaW4gdGFnXG4gICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgY29uc3QgdW5zaWduZWRUeCA9IGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXhpc3QodW5zaWduZWRUeCk7XG4gICAgICB1bnNpZ25lZFR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb24pO1xuXG4gICAgICBjb25zdCBzdGFraW5nVHggPSB1bnNpZ25lZFR4IGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmVcbiAgICAgIHN0YWtpbmdUeC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKTtcbiAgICAgIHN0YWtpbmdUeC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHN0YWtpbmdUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICAgIHN0YWtpbmdUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbik7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkpO1xuXG4gICAgICAvLyBUaGlzIGlzIHRoZSBjcml0aWNhbCB0ZXN0IC0gZW5zdXJlIHJlc2VydmVkLmZlYXR1cmVzID0gMSBmb3IgQ29udHJhY3RDYWxsIHR5cGVcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24uYm9keS5yZXNlcnZlZCk7XG4gICAgICBzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24uYm9keS5yZXNlcnZlZCEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlYXR1cmVzJywgMSk7XG5cbiAgICAgIC8vIFN0ZXAgMzogQWRkIHNlbmRlciBzaWduYXR1cmVcbiAgICAgIHN0YWtpbmdUeC5hZGRTZW5kZXJTaWduYXR1cmUobW9ja1NlbmRlclNpZ25hdHVyZSk7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnNlbmRlclNpZ25hdHVyZSk7XG4gICAgICBCdWZmZXIuZnJvbShzdGFraW5nVHguc2VuZGVyU2lnbmF0dXJlISkuc2hvdWxkLmVxbChtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gU3RlcCA0OiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZVxuICAgICAgc3Rha2luZ1R4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LmZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtpbmdUeC5mZWVQYXllclNpZ25hdHVyZSEpLnNob3VsZC5lcWwobW9ja0ZlZVBheWVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gU3RlcCA1OiBHZW5lcmF0ZSB0cmFuc2FjdGlvbiBJRFxuXG4gICAgICAvLyBUaGlzIHNob3VsZCBOT1QgdGhyb3cgXCJub3Qgc2lnbmVkIHRyYW5zYWN0aW9uOiBpZCB1bmF2YWlsYWJsZVwiIGVycm9yIGFueW1vcmVcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBzdGFraW5nVHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QodHJhbnNhY3Rpb25JZCk7XG4gICAgICB0cmFuc2FjdGlvbklkLnNob3VsZC5ub3QuZXF1YWwoJ1VOQVZBSUxBQkxFJyk7XG5cbiAgICAgIC8vIFN0ZXAgNjogU2VyaWFsaXplIHRoZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHN0YWtpbmdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlcmlhbGl6ZWRUeCk7XG4gICAgICBzZXJpYWxpemVkVHguc2hvdWxkLmJlLnR5cGUoJ3N0cmluZycpO1xuICAgICAgc2VyaWFsaXplZFR4LnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG5cbiAgICAgIC8vIFN0ZXAgNzogVmVyaWZ5IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFR4ID0gZGVzZXJpYWxpemVkQnVpbGRlci50cmFuc2FjdGlvbiBhcyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uO1xuXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5zaG91bGQuYmUuaW5zdGFuY2VvZihTdGFrZUNsYXVzZVRyYW5zYWN0aW9uKTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgICAgZGVzZXJpYWxpemVkVHguYW1vdW50VG9TdGFrZS5zaG91bGQuZXF1YWwoYW1vdW50VG9TdGFrZSk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcblxuICAgICAgLy8gU3RlcCA4OiBWZXJpZnkgdG9Kc29uIG91dHB1dFxuICAgICAgY29uc3QganNvbk91dHB1dCA9IHN0YWtpbmdUeC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdChqc29uT3V0cHV0KTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2lkJywgdHJhbnNhY3Rpb25JZCk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzdGFraW5nQ29udHJhY3RBZGRyZXNzJywgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAvLyBKU09OIG91dHB1dCBrZWVwcyBkZWNpbWFsIGZvcm1hdCBmb3IgYW1vdW50c1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYW1vdW50VG9TdGFrZScsIGFtb3VudFRvU3Rha2UpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbGV2ZWxJZCcsIGxldmVsSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2lnbmF0dXJlIGNvbWJpbmF0aW9uIGluIHRoZSBjb3JyZWN0IG9yZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IHNwZWNpZmljYWxseSB2YWxpZGF0ZXMgdGhlIHNpZ25hdHVyZSBjb21iaW5hdGlvbiBmbG93IHRoYXQgd2FzIGZhaWxpbmdcbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyXG4gICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgIC5sZXZlbElkKGxldmVsSWQpXG4gICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLmNoYWluVGFnKDB4MjcpXG4gICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKSkgYXMgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVGVzdCAxOiBPbmx5IHNlbmRlciBzaWduYXR1cmUgLSBzaG91bGQgZ2VuZXJhdGUgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZFNlbmRlclNpZ25hdHVyZShtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gVGVzdCAyOiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZSAtIHNob3VsZCBnZW5lcmF0ZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBJRCB3aXRoIGJvdGggc2lnbmF0dXJlc1xuICAgICAgY29uc3QgZnVsbFNpZ25lZElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QoZnVsbFNpZ25lZElkKTtcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBUaGUgSUQgc2hvdWxkIGJlIGNvbnNpc3RlbnRcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQuYmUudHlwZSgnc3RyaW5nJyk7XG4gICAgICBmdWxsU2lnbmVkSWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigxMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHNldCB0cmFuc2FjdGlvbiB0eXBlIGZvciBmZWUgZGVsZWdhdGlvbiB2YWxpZGF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IGVuc3VyZXMgb3VyIGZpeCBmb3IgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCBpcyB3b3JraW5nXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcigpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBDb250cmFjdENhbGxcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuXG4gICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgZW5hYmxlZCB2aWEgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxXG4gICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICByYXdUeEJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBUaGlzIHByb3ZlcyB0aGF0IENvbnRyYWN0Q2FsbCB0cmFuc2FjdGlvbnMgbm93IGdldCBmZWUgZGVsZWdhdGlvbiBzdXBwb3J0XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBwcmUtYnVpbHQgc2lnbmVkIHRyYW5zYWN0aW9uIGZyb20gdGVzdCBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCB1c2luZyB0aGUgYWN0dWFsIHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIG91ciB0ZXN0IGRhdGFcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5TVEFLSU5HX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCBJRCB3aXRob3V0IHRocm93aW5nIGVycm9yc1xuICAgICAgY29uc3QgdHhJZCA9IHR4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SWQpO1xuICAgICAgdHhJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBWZXJpZnkgYWxsIHN0YWtpbmcgcHJvcGVydGllcyBhcmUgcHJlc2VydmVkXG4gICAgICAvLyBOb3RlOiBUaGUgdGVzdCBkYXRhIHVzZXMgYSBkaWZmZXJlbnQgY29udHJhY3QgYWRkcmVzcyBpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICAgIC8vIFRoZSBhY3R1YWwgY29udHJhY3QgYWRkcmVzcyBmcm9tIHRoZSBwYXJzZWQgdHJhbnNhY3Rpb24gaXMgMHgxODU2YzUzM2FjMmQ5NDM0MGFhYTg1NDRkMzVhNWMxZDRhMjFkZWU3XG4gICAgICB0eC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnMHgxODU2YzUzM2FjMmQ5NDM0MGFhYTg1NDRkMzVhNWMxZDRhMjFkZWU3Jyk7XG4gICAgICB0eC5sZXZlbElkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TVEFLSU5HX0xFVkVMX0lEKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZlZSBEZWxlZ2F0aW9uIEZsYWcgVGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgZmVlIGRlbGVnYXRpb24gZm9yIGFsbCBzdGFraW5nLXJlbGF0ZWQgdHJhbnNhY3Rpb24gdHlwZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0VHlwZXMgPSBbXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCwgbmFtZTogJ1N0YWtpbmcnIH0sXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2ssIG5hbWU6ICdFeGl0IERlbGVnYXRpb24nIH0sXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdywgbmFtZTogJ0J1cm4gTkZUJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW0sIG5hbWU6ICdDbGFpbSBSZXdhcmRzJyB9LFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCB0ZXN0Q2FzZSBvZiB0ZXN0VHlwZXMpIHtcbiAgICAgICAgY29uc3Qgc3Rha2luZ0J1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgICAgLmNoYWluVGFnKDB4MjcpXG4gICAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgICAvLyBNYW51YWxseSBzZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gdGVzdCBkaWZmZXJlbnQgdHlwZXNcbiAgICAgICAgY29uc3QgdHggPSAoYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKSkgYXMgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbjtcbiAgICAgICAgKHR4IGFzIGFueSkuX3R5cGUgPSB0ZXN0Q2FzZS50eXBlO1xuXG4gICAgICAgIC8vIFJlYnVpbGQgdGhlIHJhdyB0cmFuc2FjdGlvbiB0byB0ZXN0IGZlZSBkZWxlZ2F0aW9uIGZsYWdcbiAgICAgICAgYXdhaXQgKHR4IGFzIGFueSkuYnVpbGRSYXdUcmFuc2FjdGlvbigpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBmZWUgZGVsZWdhdGlvbiBpcyBzZXQgZm9yIGFsbCB0eXBlc1xuICAgICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgICBzaG91bGQuZXhpc3QocmF3VHhCb2R5LnJlc2VydmVkKTtcbiAgICAgICAgcmF3VHhCb2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0Zsb3dFMkUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ0Zsb3dFMkUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCx1Q0FBb0g7QUFDcEgsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsWUFBWTtJQUNaLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLE1BQU0sNEJBQTRCLEdBQUcsUUFBUSxDQUFDLGdDQUFnQyxDQUFDO0lBQy9FLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLENBQUMsZUFBZTtJQUM1RCxNQUFNLHFDQUFxQyxHQUFHLDRCQUE0QixDQUFDLENBQUMsaUJBQWlCO0lBQzdGLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM1QixNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQyxNQUFNLGFBQWEsR0FBRyw0Q0FBNEMsQ0FBQztJQUNuRSxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUVyRSxzRkFBc0Y7SUFDdEYsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENB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QywwREFBMEQ7Z0JBQzFELE1BQU8sRUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBRXhDLDZDQUE2QztnQkFDN0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsU0FBUyxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uLCBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5cbmRlc2NyaWJlKCdWRVQgU3Rha2luZyBGbG93IC0gRW5kLXRvLUVuZCBUZXN0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dmV0Jyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcblxuICAvLyBUZXN0IGRhdGFcbiAgY29uc3Qgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IHRlc3REYXRhLlNUQUtJTkdfQ09OVFJBQ1RfQUREUkVTUztcbiAgY29uc3QgYnVpbHRJblN0YWtlckNvbnRyYWN0QWRkcmVzcyA9IHRlc3REYXRhLkJVSUxUX0lOX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTO1xuICBjb25zdCBhbW91bnRUb1N0YWtlID0gJzEwMDAwMDAwMDAwMDAwMDAwMDAnOyAvLyAxIFZFVCBpbiB3ZWlcbiAgY29uc3QgYW1vdW50VG9TdGFrZUZvclZhbGlkYXRvclJlZ2lzdHJhdGlvbiA9ICcyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7IC8vIDI1TSBWRVQgaW4gd2VpXG4gIGNvbnN0IHN0YWtpbmdQZXJpb2QgPSA2MDQ4MDtcbiAgY29uc3QgdmFsaWRhdG9yQWRkcmVzcyA9ICcweDlhN2FmY2FjYzg4YzEwNmYzYmJkNmIyMTNjZDA4MjFkOTIyNGQ5NDUnO1xuICBjb25zdCBsZXZlbElkID0gdGVzdERhdGEuU1RBS0lOR19MRVZFTF9JRDtcbiAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9ICcweDkzNzhjMTJCRDc1MDJBMTFGNzcwYTVDMUYyMjNjOTU5QjI4MDVkQTknO1xuICBjb25zdCBmZWVQYXllckFkZHJlc3MgPSAnMHhkYzlmZWYwYjg0YTBjY2YzZjFiZDRiODRlNDE3NDNlM2UwNTFhMDgzJztcblxuICAvLyBNb2NrIHNpZ25hdHVyZXMgZm9yIHRlc3RpbmcgKHRoZXNlIHdvdWxkIGNvbWUgZnJvbSBhY3R1YWwgc2lnbmluZyBpbiByZWFsIHNjZW5hcmlvKVxuICBjb25zdCBtb2NrU2VuZGVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyU2lnLCAnaGV4Jyk7XG4gIGNvbnN0IG1vY2tGZWVQYXllclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlc3REYXRhLmZlZVBheWVyU2lnLCAnaGV4Jyk7XG5cbiAgZGVzY3JpYmUoJ0NvbXBsZXRlIFN0YWtpbmcgVHJhbnNhY3Rpb24gRmxvdycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkLCBzaWduLCBhbmQgc2VyaWFsaXplIGEgY29tcGxldGUgc3Rha2luZyB0cmFuc2FjdGlvbiB3aXRoIGZlZSBkZWxlZ2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU3RlcCAxOiBCdWlsZCB0aGUgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgICAgY29uc3Qgc3Rha2luZ0J1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNykgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh1bnNpZ25lZFR4KTtcbiAgICAgIHVuc2lnbmVkVHguc2hvdWxkLmJlLmluc3RhbmNlb2YoU3Rha2VDbGF1c2VUcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHN0YWtpbmdUeCA9IHVuc2lnbmVkVHggYXMgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVmVyaWZ5IHRyYW5zYWN0aW9uIHN0cnVjdHVyZVxuICAgICAgc3Rha2luZ1R4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgICAgc3Rha2luZ1R4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgICAgc3Rha2luZ1R4LmFtb3VudFRvU3Rha2Uuc2hvdWxkLmVxdWFsKGFtb3VudFRvU3Rha2UpO1xuICAgICAgc3Rha2luZ1R4LmxldmVsSWQuc2hvdWxkLmVxdWFsKGxldmVsSWQpO1xuXG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24uYm9keSk7XG5cbiAgICAgIC8vIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHRlc3QgLSBlbnN1cmUgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxIGZvciBDb250cmFjdENhbGwgdHlwZVxuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbi5ib2R5LnJlc2VydmVkKTtcbiAgICAgIHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbi5ib2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcblxuICAgICAgLy8gU3RlcCAzOiBBZGQgc2VuZGVyIHNpZ25hdHVyZVxuICAgICAgc3Rha2luZ1R4LmFkZFNlbmRlclNpZ25hdHVyZShtb2NrU2VuZGVyU2lnbmF0dXJlKTtcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHguc2VuZGVyU2lnbmF0dXJlKTtcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtpbmdUeC5zZW5kZXJTaWduYXR1cmUhKS5zaG91bGQuZXFsKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTdGVwIDQ6IEFkZCBmZWUgcGF5ZXIgc2lnbmF0dXJlXG4gICAgICBzdGFraW5nVHguYWRkRmVlUGF5ZXJTaWduYXR1cmUobW9ja0ZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHguZmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgICAgQnVmZmVyLmZyb20oc3Rha2luZ1R4LmZlZVBheWVyU2lnbmF0dXJlISkuc2hvdWxkLmVxbChtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTdGVwIDU6IEdlbmVyYXRlIHRyYW5zYWN0aW9uIElEXG5cbiAgICAgIC8vIFRoaXMgc2hvdWxkIE5PVCB0aHJvdyBcIm5vdCBzaWduZWQgdHJhbnNhY3Rpb246IGlkIHVuYXZhaWxhYmxlXCIgZXJyb3IgYW55bW9yZVxuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IHN0YWtpbmdUeC5pZDtcbiAgICAgIHNob3VsZC5leGlzdCh0cmFuc2FjdGlvbklkKTtcbiAgICAgIHRyYW5zYWN0aW9uSWQuc2hvdWxkLm5vdC5lcXVhbCgnVU5BVkFJTEFCTEUnKTtcblxuICAgICAgLy8gU3RlcCA2OiBTZXJpYWxpemUgdGhlIGZ1bGx5IHNpZ25lZCB0cmFuc2FjdGlvblxuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gc3Rha2luZ1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXhpc3Qoc2VyaWFsaXplZFR4KTtcbiAgICAgIHNlcmlhbGl6ZWRUeC5zaG91bGQuYmUudHlwZSgnc3RyaW5nJyk7XG4gICAgICBzZXJpYWxpemVkVHguc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcblxuICAgICAgLy8gU3RlcCA3OiBWZXJpZnkgdHJhbnNhY3Rpb24gY2FuIGJlIGRlc2VyaWFsaXplZFxuICAgICAgY29uc3QgZGVzZXJpYWxpemVkQnVpbGRlciA9IGZhY3RvcnkuZnJvbShzZXJpYWxpemVkVHgpO1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkVHggPSBkZXNlcmlhbGl6ZWRCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIGRlc2VyaWFsaXplZFR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb24pO1xuICAgICAgZGVzZXJpYWxpemVkVHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LmxldmVsSWQuc2hvdWxkLmVxdWFsKGxldmVsSWQpO1xuXG4gICAgICAvLyBTdGVwIDg6IFZlcmlmeSB0b0pzb24gb3V0cHV0XG4gICAgICBjb25zdCBqc29uT3V0cHV0ID0gc3Rha2luZ1R4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb25PdXRwdXQpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCB0cmFuc2FjdGlvbklkKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdDb250cmFjdEFkZHJlc3MnLCBzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIC8vIEpTT04gb3V0cHV0IGtlZXBzIGRlY2ltYWwgZm9ybWF0IGZvciBhbW91bnRzXG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhbW91bnRUb1N0YWtlJywgYW1vdW50VG9TdGFrZSk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdsZXZlbElkJywgbGV2ZWxJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkLCBzaWduLCBhbmQgc2VyaWFsaXplIGEgY29tcGxldGUgdmFsaWRhdG9yIHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiB3aXRoIGZlZSBkZWxlZ2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU3RlcCAxOiBCdWlsZCB0aGUgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgdmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlciA9IGZhY3RvcnkuZ2V0VmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlcigpO1xuXG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyXG4gICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKGJ1aWx0SW5TdGFrZXJDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5zdGFraW5nUGVyaW9kKDYwNDgwKVxuICAgICAgICAudmFsaWRhdG9yKHZhbGlkYXRvckFkZHJlc3MpXG4gICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2VGb3JWYWxpZGF0b3JSZWdpc3RyYXRpb24pXG4gICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLmNoYWluVGFnKDB4MjcpIC8vIFRlc3RuZXQgY2hhaW4gdGFnXG4gICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgdmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHVuc2lnbmVkVHgpO1xuICAgICAgdW5zaWduZWRUeC5zaG91bGQuYmUuaW5zdGFuY2VvZihWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4ID0gdW5zaWduZWRUeCBhcyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVmVyaWZ5IHRyYW5zYWN0aW9uIHN0cnVjdHVyZVxuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrKTtcbiAgICAgIHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKGJ1aWx0SW5TdGFrZXJDb250cmFjdEFkZHJlc3MpO1xuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHguc3Rha2luZ1BlcmlvZC5zaG91bGQuZXF1YWwoc3Rha2luZ1BlcmlvZCk7XG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC52YWxpZGF0b3Iuc2hvdWxkLmVxdWFsKHZhbGlkYXRvckFkZHJlc3MpO1xuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHguYW1vdW50VG9TdGFrZS5zaG91bGQuZXF1YWwoYW1vdW50VG9TdGFrZUZvclZhbGlkYXRvclJlZ2lzdHJhdGlvbik7XG5cbiAgICAgIHNob3VsZC5leGlzdCh2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC5yYXdUcmFuc2FjdGlvbik7XG4gICAgICBzaG91bGQuZXhpc3QodmFsaWRhdG9yUmVnaXN0cmF0aW9uVHgucmF3VHJhbnNhY3Rpb24uYm9keSk7XG5cbiAgICAgIC8vIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHRlc3QgLSBlbnN1cmUgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxXG4gICAgICBzaG91bGQuZXhpc3QodmFsaWRhdG9yUmVnaXN0cmF0aW9uVHgucmF3VHJhbnNhY3Rpb24uYm9keS5yZXNlcnZlZCk7XG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC5yYXdUcmFuc2FjdGlvbi5ib2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcblxuICAgICAgLy8gU3RlcCAzOiBBZGQgc2VuZGVyIHNpZ25hdHVyZVxuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHguYWRkU2VuZGVyU2lnbmF0dXJlKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LnNlbmRlclNpZ25hdHVyZSk7XG4gICAgICBCdWZmZXIuZnJvbSh2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC5zZW5kZXJTaWduYXR1cmUhKS5zaG91bGQuZXFsKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTdGVwIDQ6IEFkZCBmZWUgcGF5ZXIgc2lnbmF0dXJlXG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC5hZGRGZWVQYXllclNpZ25hdHVyZShtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LmZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICAgIEJ1ZmZlci5mcm9tKHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LmZlZVBheWVyU2lnbmF0dXJlISkuc2hvdWxkLmVxbChtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTdGVwIDU6IEdlbmVyYXRlIHRyYW5zYWN0aW9uIElEXG5cbiAgICAgIC8vIFRoaXMgc2hvdWxkIE5PVCB0aHJvdyBcIm5vdCBzaWduZWQgdHJhbnNhY3Rpb246IGlkIHVuYXZhaWxhYmxlXCIgZXJyb3IgYW55bW9yZVxuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KHRyYW5zYWN0aW9uSWQpO1xuICAgICAgdHJhbnNhY3Rpb25JZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBTdGVwIDY6IFNlcmlhbGl6ZSB0aGUgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzZXJpYWxpemVkVHggPSB2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlcmlhbGl6ZWRUeCk7XG4gICAgICBzZXJpYWxpemVkVHguc2hvdWxkLmJlLnR5cGUoJ3N0cmluZycpO1xuICAgICAgc2VyaWFsaXplZFR4LnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG5cbiAgICAgIC8vIFN0ZXAgNzogVmVyaWZ5IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFR4ID0gZGVzZXJpYWxpemVkQnVpbGRlci50cmFuc2FjdGlvbiBhcyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbjtcblxuICAgICAgZGVzZXJpYWxpemVkVHguc2hvdWxkLmJlLmluc3RhbmNlb2YoVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24pO1xuICAgICAgZGVzZXJpYWxpemVkVHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoYnVpbHRJblN0YWtlckNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5zdGFraW5nUGVyaW9kLnNob3VsZC5lcXVhbChzdGFraW5nUGVyaW9kKTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LnZhbGlkYXRvci5zaG91bGQuZXF1YWwodmFsaWRhdG9yQWRkcmVzcyk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlRm9yVmFsaWRhdG9yUmVnaXN0cmF0aW9uKTtcblxuICAgICAgLy8gU3RlcCA4OiBWZXJpZnkgdG9Kc29uIG91dHB1dFxuICAgICAgY29uc3QganNvbk91dHB1dCA9IHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb25PdXRwdXQpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCB0cmFuc2FjdGlvbklkKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdDb250cmFjdEFkZHJlc3MnLCBidWlsdEluU3Rha2VyQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdQZXJpb2QnLCBzdGFraW5nUGVyaW9kKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3ZhbGlkYXRvckFkZHJlc3MnLCB2YWxpZGF0b3JBZGRyZXNzKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Ftb3VudFRvU3Rha2UnLCBhbW91bnRUb1N0YWtlRm9yVmFsaWRhdG9yUmVnaXN0cmF0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHNpZ25hdHVyZSBjb21iaW5hdGlvbiBpbiB0aGUgY29ycmVjdCBvcmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoaXMgdGVzdCBzcGVjaWZpY2FsbHkgdmFsaWRhdGVzIHRoZSBzaWduYXR1cmUgY29tYmluYXRpb24gZmxvdyB0aGF0IHdhcyBmYWlsaW5nXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcigpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFRlc3QgMTogT25seSBzZW5kZXIgc2lnbmF0dXJlIC0gc2hvdWxkIGdlbmVyYXRlIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICB0eC5hZGRTZW5kZXJTaWduYXR1cmUobW9ja1NlbmRlclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFRlc3QgMjogQWRkIGZlZSBwYXllciBzaWduYXR1cmUgLSBzaG91bGQgZ2VuZXJhdGUgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICB0eC5hZGRGZWVQYXllclNpZ25hdHVyZShtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTaG91bGQgYmUgYWJsZSB0byBnZXQgdHJhbnNhY3Rpb24gSUQgd2l0aCBib3RoIHNpZ25hdHVyZXNcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRJZCA9IHR4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KGZ1bGxTaWduZWRJZCk7XG4gICAgICBmdWxsU2lnbmVkSWQuc2hvdWxkLm5vdC5lcXVhbCgnVU5BVkFJTEFCTEUnKTtcblxuICAgICAgLy8gVGhlIElEIHNob3VsZCBiZSBjb25zaXN0ZW50XG4gICAgICBmdWxsU2lnbmVkSWQuc2hvdWxkLmJlLnR5cGUoJ3N0cmluZycpO1xuICAgICAgZnVsbFNpZ25lZElkLmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oMTApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9wZXJseSBzZXQgdHJhbnNhY3Rpb24gdHlwZSBmb3IgZmVlIGRlbGVnYXRpb24gdmFsaWRhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoaXMgdGVzdCBlbnN1cmVzIG91ciBmaXggZm9yIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwgaXMgd29ya2luZ1xuICAgICAgY29uc3Qgc3Rha2luZ0J1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNylcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBzdGFraW5nQnVpbGRlci5idWlsZCgpKSBhcyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIHR5cGUgaXMgQ29udHJhY3RDYWxsXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKTtcblxuICAgICAgLy8gVmVyaWZ5IGZlZSBkZWxlZ2F0aW9uIGlzIGVuYWJsZWQgdmlhIHJlc2VydmVkLmZlYXR1cmVzID0gMVxuICAgICAgY29uc3QgcmF3VHhCb2R5ID0gdHgucmF3VHJhbnNhY3Rpb24uYm9keTtcbiAgICAgIHNob3VsZC5leGlzdChyYXdUeEJvZHkucmVzZXJ2ZWQpO1xuICAgICAgcmF3VHhCb2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcblxuICAgICAgLy8gVGhpcyBwcm92ZXMgdGhhdCBDb250cmFjdENhbGwgdHJhbnNhY3Rpb25zIG5vdyBnZXQgZmVlIGRlbGVnYXRpb24gc3VwcG9ydFxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggcHJlLWJ1aWx0IHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIHRlc3QgZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRlc3QgdXNpbmcgdGhlIGFjdHVhbCBzaWduZWQgdHJhbnNhY3Rpb24gZnJvbSBvdXIgdGVzdCBkYXRhXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuU1RBS0lOR19UUkFOU0FDVElPTik7XG4gICAgICBjb25zdCB0eCA9IHR4QnVpbGRlci50cmFuc2FjdGlvbiBhcyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBTaG91bGQgYmUgYWJsZSB0byBnZXQgSUQgd2l0aG91dCB0aHJvd2luZyBlcnJvcnNcbiAgICAgIGNvbnN0IHR4SWQgPSB0eC5pZDtcbiAgICAgIHNob3VsZC5leGlzdCh0eElkKTtcbiAgICAgIHR4SWQuc2hvdWxkLm5vdC5lcXVhbCgnVU5BVkFJTEFCTEUnKTtcblxuICAgICAgLy8gVmVyaWZ5IGFsbCBzdGFraW5nIHByb3BlcnRpZXMgYXJlIHByZXNlcnZlZFxuICAgICAgLy8gTm90ZTogVGhlIHRlc3QgZGF0YSB1c2VzIGEgZGlmZmVyZW50IGNvbnRyYWN0IGFkZHJlc3MgaW4gdGhlIHRyYW5zYWN0aW9uXG4gICAgICAvLyBUaGUgYWN0dWFsIGNvbnRyYWN0IGFkZHJlc3MgZnJvbSB0aGUgcGFyc2VkIHRyYW5zYWN0aW9uIGlzIDB4MTg1NmM1MzNhYzJkOTQzNDBhYWE4NTQ0ZDM1YTVjMWQ0YTIxZGVlN1xuICAgICAgdHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4MTg1NmM1MzNhYzJkOTQzNDBhYWE4NTQ0ZDM1YTVjMWQ0YTIxZGVlNycpO1xuICAgICAgdHgubGV2ZWxJZC5zaG91bGQuZXF1YWwodGVzdERhdGEuU1RBS0lOR19MRVZFTF9JRCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGZWUgRGVsZWdhdGlvbiBGbGFnIFRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IGZlZSBkZWxlZ2F0aW9uIGZvciBhbGwgc3Rha2luZy1yZWxhdGVkIHRyYW5zYWN0aW9uIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdFR5cGVzID0gW1xuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwsIG5hbWU6ICdTdGFraW5nJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrLCBuYW1lOiAnRXhpdCBEZWxlZ2F0aW9uJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcsIG5hbWU6ICdCdXJuIE5GVCcgfSxcbiAgICAgICAgeyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltLCBuYW1lOiAnQ2xhaW0gUmV3YXJkcycgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgdGVzdENhc2Ugb2YgdGVzdFR5cGVzKSB7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG4gICAgICAgIHN0YWtpbmdCdWlsZGVyXG4gICAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAgIC5sZXZlbElkKGxldmVsSWQpXG4gICAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgc2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIHRlc3QgZGlmZmVyZW50IHR5cGVzXG4gICAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG4gICAgICAgICh0eCBhcyBhbnkpLl90eXBlID0gdGVzdENhc2UudHlwZTtcblxuICAgICAgICAvLyBSZWJ1aWxkIHRoZSByYXcgdHJhbnNhY3Rpb24gdG8gdGVzdCBmZWUgZGVsZWdhdGlvbiBmbGFnXG4gICAgICAgIGF3YWl0ICh0eCBhcyBhbnkpLmJ1aWxkUmF3VHJhbnNhY3Rpb24oKTtcblxuICAgICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgc2V0IGZvciBhbGwgdHlwZXNcbiAgICAgICAgY29uc3QgcmF3VHhCb2R5ID0gdHgucmF3VHJhbnNhY3Rpb24uYm9keTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICAgIHJhd1R4Qm9keS5yZXNlcnZlZCEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlYXR1cmVzJywgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|