1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const client_common_1 = require("@neo-one/client-common");
|
4 | const errors_1 = require("../errors");
|
5 | const utils_1 = require("../utils");
|
6 | const TransactionBase_1 = require("./TransactionBase");
|
7 | const TransactionType_1 = require("./TransactionType");
|
8 | class MinerTransaction extends TransactionBase_1.TransactionBase(client_common_1.TransactionBaseModel) {
|
9 | constructor({ version, attributes, inputs, outputs, scripts, hash, nonce }) {
|
10 | super({
|
11 | version,
|
12 | type: TransactionType_1.TransactionType.Miner,
|
13 | attributes,
|
14 | inputs,
|
15 | outputs,
|
16 | scripts,
|
17 | hash,
|
18 | });
|
19 | this.sizeExclusive = utils_1.utils.lazy(() => client_common_1.IOHelper.sizeOfUInt8 + client_common_1.IOHelper.sizeOfUInt32LE);
|
20 | this.nonce = nonce;
|
21 | if (this.version !== 0) {
|
22 | throw new client_common_1.InvalidFormatError(`Expected version to be 0. Received: ${this.version}`);
|
23 | }
|
24 | }
|
25 | static deserializeWireBase(options) {
|
26 | const { reader } = options;
|
27 | const { type, version } = super.deserializeTransactionBaseStartWireBase(options);
|
28 | if (type !== TransactionType_1.TransactionType.Miner) {
|
29 | throw new client_common_1.InvalidFormatError(`Expected transaction type ${TransactionType_1.TransactionType.Miner}. Received: ${type}`);
|
30 | }
|
31 | const nonce = reader.readUInt32LE();
|
32 | const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options);
|
33 | return new this({
|
34 | version,
|
35 | attributes,
|
36 | inputs,
|
37 | outputs,
|
38 | scripts,
|
39 | nonce,
|
40 | });
|
41 | }
|
42 | clone({ scripts = this.scripts, attributes = this.attributes, inputs = this.inputs, outputs = this.outputs, }) {
|
43 | return new this.constructor({
|
44 | version: this.version,
|
45 | attributes,
|
46 | inputs,
|
47 | outputs,
|
48 | scripts,
|
49 | nonce: this.nonce,
|
50 | });
|
51 | }
|
52 | serializeExclusiveBase(writer) {
|
53 | writer.writeUInt32LE(this.nonce);
|
54 | }
|
55 | async serializeJSON(context) {
|
56 | const transactionBaseJSON = await super.serializeTransactionBaseJSON(context);
|
57 | return Object.assign({}, transactionBaseJSON, { type: 'MinerTransaction', nonce: this.nonce });
|
58 | }
|
59 | async getNetworkFee(_context) {
|
60 | return utils_1.utils.ZERO;
|
61 | }
|
62 | async verify(options) {
|
63 | const [results] = await Promise.all([super.verify(options), this.verifyInternal(options)]);
|
64 | return results;
|
65 | }
|
66 | async verifyInternal(options) {
|
67 | const { getOutput, utilityToken } = options;
|
68 | const results = await this.getTransactionResults({ getOutput });
|
69 | const resultsIssue = Object.entries(results).filter(([_, value]) => value.lt(utils_1.utils.ZERO));
|
70 | if (resultsIssue.some(([assetHex, _]) => !client_common_1.common.uInt256Equal(client_common_1.common.hexToUInt256(assetHex), utilityToken.hash))) {
|
71 | throw new errors_1.VerifyError('Invalid miner result');
|
72 | }
|
73 | }
|
74 | }
|
75 | exports.MinerTransaction = MinerTransaction;
|
76 |
|
77 | //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1pbmVyVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwREFPZ0M7QUFHaEMsc0NBQXdDO0FBRXhDLG9DQUFpQztBQU1qQyx1REFBOEc7QUFDOUcsdURBQW9EO0FBTXBELE1BQWEsZ0JBQWlCLFNBQVEsaUNBQWUsQ0FLbkQsb0NBQTJCLENBQUM7SUEwQjVCLFlBQW1CLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUF1QjtRQUNwRyxLQUFLLENBQUM7WUFDSixPQUFPO1lBQ1AsSUFBSSxFQUFFLGlDQUFlLENBQUMsS0FBSztZQUMzQixVQUFVO1lBQ1YsTUFBTTtZQUNOLE9BQU87WUFDUCxPQUFPO1lBQ1AsSUFBSTtTQUNMLENBQUMsQ0FBQztRQVhjLGtCQUFhLEdBQWlCLGFBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQVEsQ0FBQyxXQUFXLEdBQUcsd0JBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQWFoSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxrQ0FBa0IsQ0FBQyx1Q0FBdUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDckY7SUFDSCxDQUFDO0lBekNNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFtQztRQUNuRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpGLElBQUksSUFBSSxLQUFLLGlDQUFlLENBQUMsS0FBSyxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxrQ0FBa0IsQ0FBQyw2QkFBNkIsaUNBQWUsQ0FBQyxLQUFLLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN2RztRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRHLE9BQU8sSUFBSSxJQUFJLENBQUM7WUFDZCxPQUFPO1lBQ1AsVUFBVTtZQUNWLE1BQU07WUFDTixPQUFPO1lBQ1AsT0FBTztZQUNQLEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO0lBdUJNLEtBQUssQ0FBQyxFQUNYLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUN0QixVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFDNUIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQU12QjtRQUVDLE9BQU8sSUFBSyxJQUFJLENBQUMsV0FBbUIsQ0FBQztZQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsVUFBVTtZQUNWLE1BQU07WUFDTixPQUFPO1lBQ1AsT0FBTztZQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sc0JBQXNCLENBQUMsTUFBb0I7UUFDaEQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBNkI7UUFDdEQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RSx5QkFDSyxtQkFBbUIsSUFDdEIsSUFBSSxFQUFFLGtCQUFrQixFQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFDakI7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFvQjtRQUM3QyxPQUFPLGFBQUssQ0FBQyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBaUM7UUFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBaUM7UUFDNUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFHMUYsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsc0JBQU0sQ0FBQyxZQUFZLENBQUMsc0JBQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDaEgsTUFBTSxJQUFJLG9CQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7Q0FDRjtBQTFHRCw0Q0EwR0MiLCJmaWxlIjoibmVvLW9uZS1ub2RlLWNvcmUvc3JjL3RyYW5zYWN0aW9uL01pbmVyVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCaW5hcnlXcml0ZXIsXG4gIGNvbW1vbixcbiAgSW52YWxpZEZvcm1hdEVycm9yLFxuICBJT0hlbHBlcixcbiAgTWluZXJUcmFuc2FjdGlvbkpTT04sXG4gIFRyYW5zYWN0aW9uQmFzZU1vZGVsLFxufSBmcm9tICdAbmVvLW9uZS9jbGllbnQtY29tbW9uJztcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSAnQG5lby1vbmUvdXRpbHMnO1xuaW1wb3J0IHsgQk4gfSBmcm9tICdibi5qcyc7XG5pbXBvcnQgeyBWZXJpZnlFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZVdpcmVCYXNlT3B0aW9ucywgU2VyaWFsaXplSlNPTkNvbnRleHQgfSBmcm9tICcuLi9TZXJpYWxpemFibGUnO1xuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBWZXJpZnlTY3JpcHRSZXN1bHQgfSBmcm9tICcuLi92bSc7XG5pbXBvcnQgeyBXaXRuZXNzIH0gZnJvbSAnLi4vV2l0bmVzcyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tICcuL2F0dHJpYnV0ZSc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vSW5wdXQnO1xuaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSAnLi9PdXRwdXQnO1xuaW1wb3J0IHsgRmVlQ29udGV4dCwgVHJhbnNhY3Rpb25CYXNlLCBUcmFuc2FjdGlvbkJhc2VBZGQsIFRyYW5zYWN0aW9uVmVyaWZ5T3B0aW9ucyB9IGZyb20gJy4vVHJhbnNhY3Rpb25CYXNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vVHJhbnNhY3Rpb25UeXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBNaW5lclRyYW5zYWN0aW9uQWRkIGV4dGVuZHMgVHJhbnNhY3Rpb25CYXNlQWRkIHtcbiAgcmVhZG9ubHkgbm9uY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE1pbmVyVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbkJhc2U8XG4gIFRyYW5zYWN0aW9uVHlwZS5NaW5lcixcbiAgTWluZXJUcmFuc2FjdGlvbkpTT04sXG4gIENvbnN0cnVjdG9yPFRyYW5zYWN0aW9uQmFzZU1vZGVsPFRyYW5zYWN0aW9uVHlwZS5NaW5lciwgQXR0cmlidXRlLCBJbnB1dCwgT3V0cHV0LCBXaXRuZXNzPj5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuPihUcmFuc2FjdGlvbkJhc2VNb2RlbCBhcyBhbnkpIHtcbiAgcHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZVdpcmVCYXNlKG9wdGlvbnM6IERlc2VyaWFsaXplV2lyZUJhc2VPcHRpb25zKTogTWluZXJUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgeyByZWFkZXIgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyB0eXBlLCB2ZXJzaW9uIH0gPSBzdXBlci5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uQmFzZVN0YXJ0V2lyZUJhc2Uob3B0aW9ucyk7XG5cbiAgICBpZiAodHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLk1pbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEZvcm1hdEVycm9yKGBFeHBlY3RlZCB0cmFuc2FjdGlvbiB0eXBlICR7VHJhbnNhY3Rpb25UeXBlLk1pbmVyfS4gUmVjZWl2ZWQ6ICR7dHlwZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBub25jZSA9IHJlYWRlci5yZWFkVUludDMyTEUoKTtcblxuICAgIGNvbnN0IHsgYXR0cmlidXRlcywgaW5wdXRzLCBvdXRwdXRzLCBzY3JpcHRzIH0gPSBzdXBlci5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uQmFzZUVuZFdpcmVCYXNlKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHZlcnNpb24sXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgaW5wdXRzLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIHNjcmlwdHMsXG4gICAgICBub25jZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBub25jZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2l6ZUV4Y2x1c2l2ZTogKCkgPT4gbnVtYmVyID0gdXRpbHMubGF6eSgoKSA9PiBJT0hlbHBlci5zaXplT2ZVSW50OCArIElPSGVscGVyLnNpemVPZlVJbnQzMkxFKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoeyB2ZXJzaW9uLCBhdHRyaWJ1dGVzLCBpbnB1dHMsIG91dHB1dHMsIHNjcmlwdHMsIGhhc2gsIG5vbmNlIH06IE1pbmVyVHJhbnNhY3Rpb25BZGQpIHtcbiAgICBzdXBlcih7XG4gICAgICB2ZXJzaW9uLFxuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLk1pbmVyLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG91dHB1dHMsXG4gICAgICBzY3JpcHRzLFxuICAgICAgaGFzaCxcbiAgICB9KTtcblxuICAgIHRoaXMubm9uY2UgPSBub25jZTtcblxuICAgIGlmICh0aGlzLnZlcnNpb24gIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRm9ybWF0RXJyb3IoYEV4cGVjdGVkIHZlcnNpb24gdG8gYmUgMC4gUmVjZWl2ZWQ6ICR7dGhpcy52ZXJzaW9ufWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9uZSh7XG4gICAgc2NyaXB0cyA9IHRoaXMuc2NyaXB0cyxcbiAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzLFxuICAgIGlucHV0cyA9IHRoaXMuaW5wdXRzLFxuICAgIG91dHB1dHMgPSB0aGlzLm91dHB1dHMsXG4gIH06IHtcbiAgICByZWFkb25seSBzY3JpcHRzPzogcmVhZG9ubHkgV2l0bmVzc1tdO1xuICAgIHJlYWRvbmx5IGF0dHJpYnV0ZXM/OiByZWFkb25seSBBdHRyaWJ1dGVbXTtcbiAgICByZWFkb25seSBpbnB1dHM/OiByZWFkb25seSBJbnB1dFtdO1xuICAgIHJlYWRvbmx5IG91dHB1dHM/OiByZWFkb25seSBPdXRwdXRbXTtcbiAgfSk6IHRoaXMge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgICByZXR1cm4gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkoe1xuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG91dHB1dHMsXG4gICAgICBzY3JpcHRzLFxuICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplRXhjbHVzaXZlQmFzZSh3cml0ZXI6IEJpbmFyeVdyaXRlcik6IHZvaWQge1xuICAgIHdyaXRlci53cml0ZVVJbnQzMkxFKHRoaXMubm9uY2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNlcmlhbGl6ZUpTT04oY29udGV4dDogU2VyaWFsaXplSlNPTkNvbnRleHQpOiBQcm9taXNlPE1pbmVyVHJhbnNhY3Rpb25KU09OPiB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25CYXNlSlNPTiA9IGF3YWl0IHN1cGVyLnNlcmlhbGl6ZVRyYW5zYWN0aW9uQmFzZUpTT04oY29udGV4dCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udHJhbnNhY3Rpb25CYXNlSlNPTixcbiAgICAgIHR5cGU6ICdNaW5lclRyYW5zYWN0aW9uJyxcbiAgICAgIG5vbmNlOiB0aGlzLm5vbmNlLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TmV0d29ya0ZlZShfY29udGV4dDogRmVlQ29udGV4dCk6IFByb21pc2U8Qk4+IHtcbiAgICByZXR1cm4gdXRpbHMuWkVSTztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkob3B0aW9uczogVHJhbnNhY3Rpb25WZXJpZnlPcHRpb25zKTogUHJvbWlzZTxyZWFkb25seSBWZXJpZnlTY3JpcHRSZXN1bHRbXT4ge1xuICAgIGNvbnN0IFtyZXN1bHRzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtzdXBlci52ZXJpZnkob3B0aW9ucyksIHRoaXMudmVyaWZ5SW50ZXJuYWwob3B0aW9ucyldKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlJbnRlcm5hbChvcHRpb25zOiBUcmFuc2FjdGlvblZlcmlmeU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGdldE91dHB1dCwgdXRpbGl0eVRva2VuIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uUmVzdWx0cyh7IGdldE91dHB1dCB9KTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkXG4gICAgY29uc3QgcmVzdWx0c0lzc3VlID0gT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZS5sdCh1dGlscy5aRVJPKSk7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkXG4gICAgaWYgKHJlc3VsdHNJc3N1ZS5zb21lKChbYXNzZXRIZXgsIF9dKSA9PiAhY29tbW9uLnVJbnQyNTZFcXVhbChjb21tb24uaGV4VG9VSW50MjU2KGFzc2V0SGV4KSwgdXRpbGl0eVRva2VuLmhhc2gpKSkge1xuICAgICAgdGhyb3cgbmV3IFZlcmlmeUVycm9yKCdJbnZhbGlkIG1pbmVyIHJlc3VsdCcpO1xuICAgIH1cbiAgfVxufVxuIl19
|