PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-ada/dist/test/unit
Просмотр файла: StakingDeactivateBuilder.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const should_1 = __importDefault(require("should"));
const sdk_core_1 = require("@bitgo/sdk-core");
const testData = __importStar(require("../resources"));
const src_1 = require("../../src");
const statics_1 = require("@bitgo/statics");
describe('ADA Staking Deactivate Transaction Builder', async () => {
const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tada'));
it('start and build an unsigned staking deactivate tx', async () => {
const keyPairStake = new src_1.KeyPair({ prv: testData.privateKeys.prvKey2 });
const txBuilder = factory.getStakingDeactivateBuilder();
txBuilder.input({
transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
transaction_index: 1,
});
const totalInput = '4000000';
txBuilder.changeAddress('addr1q8rm9z7w4yx5gz652kn2q238efvms6t0qelur9nlglun8eu4tr5knj4fu4adelzqhxg8adu5xca4jra0gtllfrpcawyq9psz23', totalInput);
txBuilder.stakingCredential(keyPairStake.getKeys().pub);
txBuilder.ttl(800000000);
const tx = (await txBuilder.build());
should_1.default.equal(tx.type, sdk_core_1.TransactionType.StakingDeactivate);
const txData = tx.toJson();
const fee = tx.getFee;
txData.certs.length.should.equal(1);
txData.certs[0].type.should.equal(2);
txData.outputs.length.should.equal(1);
txData.outputs[0].amount.should.equal((Number(totalInput) + 2000000 - Number(fee)).toString());
fee.should.equal('167129');
tx.toBroadcastFormat().should.equal(testData.rawTx.unsignedStakingDeactiveTx);
should_1.default.equal(tx.id, testData.rawTx.unsignedStakingDeactiveTxHash);
});
it('build a staingDEactivate from rawTx', async () => {
const txBuilder = factory.from(testData.rawTx.unsignedStakingDeactiveTx);
const builtTx = (await txBuilder.build());
should_1.default.equal(builtTx.type, sdk_core_1.TransactionType.StakingDeactivate);
should_1.default.equal(builtTx.id, testData.rawTx.unsignedStakingDeactiveTxHash);
const txData = builtTx.toJson();
const fee = builtTx.getFee;
txData.certs.length.should.equal(1);
txData.certs[0].type.should.equal(2);
txData.outputs.length.should.equal(1);
const totalInput = '4000000';
txData.outputs[0].amount.should.equal((Number(totalInput) + 2000000 - Number(fee)).toString());
fee.should.equal('167129');
});
// xit('should submit a staking deactivate transaction', async () => {
// const keyPair = new KeyPair({ prv: testData.privateKeys.prvKey9 });
// const keyPairStaking = new KeyPair({ prv: testData.privateKeys.prvKey10 });
// const senderAddress = Utils.default.createBaseAddressWithStakeAndPaymentKey(
// keyPairStaking,
// keyPair,
// AddressFormat.testnet
// );
// const axiosConfig = {
// headers: {
// 'Content-Type': 'application/cbor',
// },
// timeout: 10000,
// };
//
// const txBuilder = factory.getStakingDeactivateBuilder();
// const utxoData = await axios.get('https://testnet.koios.rest/api/v0/address_info?_address=' + senderAddress);
// const senderBalance = utxoData.data[0].balance;
// txBuilder.changeAddress(senderAddress, senderBalance);
// const utxoSet = utxoData.data[0].utxo_set;
// for (const utxo of utxoSet) {
// txBuilder.input({ transaction_id: utxo.tx_hash, transaction_index: utxo.tx_index });
// }
//
// txBuilder.ttl(800000000);
// txBuilder.stakingCredential(keyPairStaking.getKeys().pub);
// txBuilder.sign({ key: keyPair.getKeys().prv });
// txBuilder.sign({ key: keyPairStaking.getKeys().prv });
//
// const tx = await txBuilder.build();
// const serializedTx = tx.toBroadcastFormat();
// const bytes = Uint8Array.from(Buffer.from(serializedTx, 'hex'));
//
// try {
// const res = await axios.post('https://testnet.koios.rest/api/v0/submittx', bytes, axiosConfig);
// console.log(res);
// } catch (err) {
// console.log(err);
// }
// });
it('should submit a staking transaction using signature interface', async () => {
const keyPairPayment = new src_1.KeyPair({ prv: testData.privateKeys.prvKey9 });
const keyPairStake = new src_1.KeyPair({ prv: testData.privateKeys.prvKey10 });
const senderAddress = src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPairStake, keyPairPayment, sdk_core_1.AddressFormat.testnet);
const txBuilder = factory.getStakingDeactivateBuilder();
const senderBalance = '22122071';
txBuilder.changeAddress(senderAddress, senderBalance);
txBuilder.stakingCredential(keyPairStake.getKeys().pub);
txBuilder.input({
transaction_id: '0a4f80d83ba9ce1f83306a79252909241308d7eff317d04c9ea018966d687fe3',
transaction_index: 0,
});
txBuilder.ttl(900000000);
const unsignedTx = await txBuilder.build();
const signableHex = unsignedTx.signablePayload.toString('hex');
const serializedTx = unsignedTx.toBroadcastFormat();
txBuilder.sign({ key: keyPairPayment.getKeys().prv });
txBuilder.sign({ key: keyPairStake.getKeys().prv });
const signedTransaction = await txBuilder.build();
const serializedTransaction = signedTransaction.toBroadcastFormat();
const txBuilder2 = factory.from(serializedTx);
const tx = await txBuilder2.build();
tx.type.should.equal(sdk_core_1.TransactionType.StakingDeactivate);
const signableHex2 = tx.signablePayload.toString('hex');
signableHex.should.equal(signableHex2);
const signaturePayment = keyPairPayment.signMessage(signableHex2);
const signatureStake = keyPairStake.signMessage(signableHex2);
txBuilder2.addSignature({ pub: keyPairPayment.getKeys().pub }, Buffer.from(signaturePayment));
txBuilder2.addSignature({ pub: keyPairStake.getKeys().pub }, Buffer.from(signatureStake));
const signedTransaction2 = await txBuilder2.build();
signedTransaction.id.should.equal(tx.id);
const serializedTransaction2 = signedTransaction2.toBroadcastFormat();
serializedTransaction2.should.equal(serializedTransaction);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L1N0YWtpbmdEZWFjdGl2YXRlQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBaUU7QUFDakUsdURBQXlDO0FBQ3pDLG1DQUFzRTtBQUN0RSw0Q0FBdUM7QUFHdkMsUUFBUSxDQUFDLDRDQUE0QyxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWpFLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRSxNQUFNLFlBQVksR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDeEQsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNkLGNBQWMsRUFBRSxrRUFBa0U7WUFDbEYsaUJBQWlCLEVBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDN0IsU0FBUyxDQUFDLGFBQWEsQ0FDckIseUdBQXlHLEVBQ3pHLFVBQVUsQ0FDWCxDQUFDO1FBQ0YsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RCxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7UUFD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QUFnQixHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEUsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5RixVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwRCxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RFLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBVdGlscyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbic7XG5cbmRlc2NyaWJlKCdBREEgU3Rha2luZyBEZWFjdGl2YXRlIFRyYW5zYWN0aW9uIEJ1aWxkZXInLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhZGEnKSk7XG5cbiAgaXQoJ3N0YXJ0IGFuZCBidWlsZCBhbiB1bnNpZ25lZCBzdGFraW5nIGRlYWN0aXZhdGUgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qga2V5UGFpclN0YWtlID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnByaXZhdGVLZXlzLnBydktleTIgfSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAnNDAwMDAwMCc7XG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3MoXG4gICAgICAnYWRkcjFxOHJtOXo3dzR5eDVnejY1MmtuMnEyMzhlZnZtczZ0MHFlbHVyOW5sZ2x1bjhldTR0cjVrbmo0ZnU0YWRlbHpxaHhnOGFkdTV4Y2E0anJhMGd0bGxmcnBjYXd5cTlwc3oyMycsXG4gICAgICB0b3RhbElucHV0XG4gICAgKTtcbiAgICB0eEJ1aWxkZXIuc3Rha2luZ0NyZWRlbnRpYWwoa2V5UGFpclN0YWtlLmdldEtleXMoKS5wdWIpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZSk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgY29uc3QgZmVlID0gdHguZ2V0RmVlO1xuICAgIHR4RGF0YS5jZXJ0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4RGF0YS5jZXJ0c1swXS50eXBlLnNob3VsZC5lcXVhbCgyKTtcblxuICAgIHR4RGF0YS5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHhEYXRhLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRvdGFsSW5wdXQpICsgMjAwMDAwMCAtIE51bWJlcihmZWUpKS50b1N0cmluZygpKTtcbiAgICBmZWUuc2hvdWxkLmVxdWFsKCcxNjcxMjknKTtcbiAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFN0YWtpbmdEZWFjdGl2ZVR4KTtcbiAgICBzaG91bGQuZXF1YWwodHguaWQsIHRlc3REYXRhLnJhd1R4LnVuc2lnbmVkU3Rha2luZ0RlYWN0aXZlVHhIYXNoKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkIGEgc3RhaW5nREVhY3RpdmF0ZSBmcm9tIHJhd1R4JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFN0YWtpbmdEZWFjdGl2ZVR4KTtcbiAgICBjb25zdCBidWlsdFR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBzaG91bGQuZXF1YWwoYnVpbHRUeC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUpO1xuICAgIHNob3VsZC5lcXVhbChidWlsdFR4LmlkLCB0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFN0YWtpbmdEZWFjdGl2ZVR4SGFzaCk7XG4gICAgY29uc3QgdHhEYXRhID0gYnVpbHRUeC50b0pzb24oKTtcbiAgICBjb25zdCBmZWUgPSBidWlsdFR4LmdldEZlZTtcbiAgICB0eERhdGEuY2VydHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eERhdGEuY2VydHNbMF0udHlwZS5zaG91bGQuZXF1YWwoMik7XG5cbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAnNDAwMDAwMCc7XG4gICAgdHhEYXRhLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRvdGFsSW5wdXQpICsgMjAwMDAwMCAtIE51bWJlcihmZWUpKS50b1N0cmluZygpKTtcbiAgICBmZWUuc2hvdWxkLmVxdWFsKCcxNjcxMjknKTtcbiAgfSk7XG5cbiAgLy8geGl0KCdzaG91bGQgc3VibWl0IGEgc3Rha2luZyBkZWFjdGl2YXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAvLyAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEucHJpdmF0ZUtleXMucHJ2S2V5OSB9KTtcbiAgLy8gICBjb25zdCBrZXlQYWlyU3Rha2luZyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcml2YXRlS2V5cy5wcnZLZXkxMCB9KTtcbiAgLy8gICBjb25zdCBzZW5kZXJBZGRyZXNzID0gVXRpbHMuZGVmYXVsdC5jcmVhdGVCYXNlQWRkcmVzc1dpdGhTdGFrZUFuZFBheW1lbnRLZXkoXG4gIC8vICAgICBrZXlQYWlyU3Rha2luZyxcbiAgLy8gICAgIGtleVBhaXIsXG4gIC8vICAgICBBZGRyZXNzRm9ybWF0LnRlc3RuZXRcbiAgLy8gICApO1xuICAvLyAgIGNvbnN0IGF4aW9zQ29uZmlnID0ge1xuICAvLyAgICAgaGVhZGVyczoge1xuICAvLyAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2Nib3InLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAvLyAgIH07XG4gIC8vXG4gIC8vICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgLy8gICBjb25zdCB1dHhvRGF0YSA9IGF3YWl0IGF4aW9zLmdldCgnaHR0cHM6Ly90ZXN0bmV0LmtvaW9zLnJlc3QvYXBpL3YwL2FkZHJlc3NfaW5mbz9fYWRkcmVzcz0nICsgc2VuZGVyQWRkcmVzcyk7XG4gIC8vICAgY29uc3Qgc2VuZGVyQmFsYW5jZSA9IHV0eG9EYXRhLmRhdGFbMF0uYmFsYW5jZTtcbiAgLy8gICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCBzZW5kZXJCYWxhbmNlKTtcbiAgLy8gICBjb25zdCB1dHhvU2V0ID0gdXR4b0RhdGEuZGF0YVswXS51dHhvX3NldDtcbiAgLy8gICBmb3IgKGNvbnN0IHV0eG8gb2YgdXR4b1NldCkge1xuICAvLyAgICAgdHhCdWlsZGVyLmlucHV0KHsgdHJhbnNhY3Rpb25faWQ6IHV0eG8udHhfaGFzaCwgdHJhbnNhY3Rpb25faW5kZXg6IHV0eG8udHhfaW5kZXggfSk7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgLy8gICB0eEJ1aWxkZXIuc3Rha2luZ0NyZWRlbnRpYWwoa2V5UGFpclN0YWtpbmcuZ2V0S2V5cygpLnB1Yik7XG4gIC8vICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGtleVBhaXIuZ2V0S2V5cygpLnBydiB9KTtcbiAgLy8gICB0eEJ1aWxkZXIuc2lnbih7IGtleToga2V5UGFpclN0YWtpbmcuZ2V0S2V5cygpLnBydiB9KTtcbiAgLy9cbiAgLy8gICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAvLyAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gIC8vICAgY29uc3QgYnl0ZXMgPSBVaW50OEFycmF5LmZyb20oQnVmZmVyLmZyb20oc2VyaWFsaXplZFR4LCAnaGV4JykpO1xuICAvL1xuICAvLyAgIHRyeSB7XG4gIC8vICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5wb3N0KCdodHRwczovL3Rlc3RuZXQua29pb3MucmVzdC9hcGkvdjAvc3VibWl0dHgnLCBieXRlcywgYXhpb3NDb25maWcpO1xuICAvLyAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgLy8gICB9IGNhdGNoIChlcnIpIHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKGVycik7XG4gIC8vICAgfVxuICAvLyB9KTtcblxuICBpdCgnc2hvdWxkIHN1Ym1pdCBhIHN0YWtpbmcgdHJhbnNhY3Rpb24gdXNpbmcgc2lnbmF0dXJlIGludGVyZmFjZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBrZXlQYWlyUGF5bWVudCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcml2YXRlS2V5cy5wcnZLZXk5IH0pO1xuICAgIGNvbnN0IGtleVBhaXJTdGFrZSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcml2YXRlS2V5cy5wcnZLZXkxMCB9KTtcbiAgICBjb25zdCBzZW5kZXJBZGRyZXNzID0gVXRpbHMuZGVmYXVsdC5jcmVhdGVCYXNlQWRkcmVzc1dpdGhTdGFrZUFuZFBheW1lbnRLZXkoXG4gICAgICBrZXlQYWlyU3Rha2UsXG4gICAgICBrZXlQYWlyUGF5bWVudCxcbiAgICAgIEFkZHJlc3NGb3JtYXQudGVzdG5ldFxuICAgICk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICBjb25zdCBzZW5kZXJCYWxhbmNlID0gJzIyMTIyMDcxJztcbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCBzZW5kZXJCYWxhbmNlKTtcbiAgICB0eEJ1aWxkZXIuc3Rha2luZ0NyZWRlbnRpYWwoa2V5UGFpclN0YWtlLmdldEtleXMoKS5wdWIpO1xuXG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMGE0ZjgwZDgzYmE5Y2UxZjgzMzA2YTc5MjUyOTA5MjQxMzA4ZDdlZmYzMTdkMDRjOWVhMDE4OTY2ZDY4N2ZlMycsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMCxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci50dGwoOTAwMDAwMDAwKTtcblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBzaWduYWJsZUhleCA9IHVuc2lnbmVkVHguc2lnbmFibGVQYXlsb2FkLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHggPSB1bnNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGtleVBhaXJQYXltZW50LmdldEtleXMoKS5wcnYgfSk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGtleVBhaXJTdGFrZS5nZXRLZXlzKCkucHJ2IH0pO1xuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gc2lnbmVkVHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgIGNvbnN0IHR4QnVpbGRlcjIgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZFR4KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUpO1xuICAgIGNvbnN0IHNpZ25hYmxlSGV4MiA9IHR4LnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4Jyk7XG4gICAgc2lnbmFibGVIZXguc2hvdWxkLmVxdWFsKHNpZ25hYmxlSGV4Mik7XG4gICAgY29uc3Qgc2lnbmF0dXJlUGF5bWVudCA9IGtleVBhaXJQYXltZW50LnNpZ25NZXNzYWdlKHNpZ25hYmxlSGV4Mik7XG4gICAgY29uc3Qgc2lnbmF0dXJlU3Rha2UgPSBrZXlQYWlyU3Rha2Uuc2lnbk1lc3NhZ2Uoc2lnbmFibGVIZXgyKTtcbiAgICB0eEJ1aWxkZXIyLmFkZFNpZ25hdHVyZSh7IHB1Yjoga2V5UGFpclBheW1lbnQuZ2V0S2V5cygpLnB1YiB9LCBCdWZmZXIuZnJvbShzaWduYXR1cmVQYXltZW50KSk7XG4gICAgdHhCdWlsZGVyMi5hZGRTaWduYXR1cmUoeyBwdWI6IGtleVBhaXJTdGFrZS5nZXRLZXlzKCkucHViIH0sIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZVN0YWtlKSk7XG4gICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24yID0gYXdhaXQgdHhCdWlsZGVyMi5idWlsZCgpO1xuICAgIHNpZ25lZFRyYW5zYWN0aW9uLmlkLnNob3VsZC5lcXVhbCh0eC5pZCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uMiA9IHNpZ25lZFRyYW5zYWN0aW9uMi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjIuc2hvdWxkLmVxdWFsKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gIH0pO1xufSk7XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!