@c4tplatform/caminojs
Version:
Camino Platform JS Library
157 lines • 25.1 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GeneralProposal = exports.GeneralVoteOption = void 0;
const buffer_1 = require("buffer/");
const constants_1 = require("../constants");
const serialization_1 = require("../../../utils/serialization");
const bintools_1 = __importDefault(require("../../../utils/bintools"));
const utf8 = "utf8";
const serialization = serialization_1.Serialization.getInstance();
const bintools = bintools_1.default.getInstance();
class GeneralVoteOption extends serialization_1.Serializable {
serialize(encoding = "hex") {
super.serialize();
return {
option: serialization.encoder(this.option, encoding, "Buffer", "hex")
};
}
deserialize(fields, encoding = "hex") {
super.deserialize(fields, encoding);
this.option = serialization.decoder(fields["option"], encoding, "Buffer", "Buffer", 256 //max size
);
return this;
}
fromBuffer(bytes, offset = 0) {
let optionLen = bintools
.copyFrom(bytes, offset, offset + 4)
.readUInt32BE(0);
offset += 4;
this.option = bintools.copyFrom(bytes, offset, offset + optionLen);
offset += optionLen;
return offset;
}
toBuffer() {
let barr = [buffer_1.Buffer.alloc(4), this.option];
let bsize = 4 + this.option.length;
barr[0].writeUInt32BE(this.option.length, 0);
return buffer_1.Buffer.concat(barr, bsize);
}
getSize() {
return this.option.length + 4;
}
getOption() {
return this.option;
}
constructor(option) {
super();
this._typeName = "GeneralVoteOption";
this._typeID = undefined;
this.option = buffer_1.Buffer.alloc(0);
if (option)
this.option = option;
}
}
exports.GeneralVoteOption = GeneralVoteOption;
class GeneralProposal {
addGeneralOption(option) {
const generalVoteOption = new GeneralVoteOption(buffer_1.Buffer.from(option));
this.options.push(generalVoteOption);
if (this.options) {
this.numOptions.writeUInt32BE(this.options.length, 0);
}
return this.options.length - 1;
}
serialize(encoding = "hex") {
let fields = {
start: serialization.encoder(this.start, encoding, "Buffer", "number"),
end: serialization.encoder(this.end, encoding, "Buffer", "number"),
options: this.options.map((opt) => opt.serialize(encoding)),
totalVotedThresholdNominator: serialization.encoder(this.totalVotedThresholdNominator, encoding, "Buffer", "number"),
mostVotedThresholdNominator: serialization.encoder(this.mostVotedThresholdNominator, encoding, "Buffer", "number"),
allowEarlyFinish: this.allowEarlyFinish
};
return fields;
}
deserialize(fields, encoding = "hex") {
this.numOptions.writeUInt32BE(this.options.length, 0);
this.options = fields["options"].map((opt) => new GeneralVoteOption().deserialize(opt, encoding));
this.start = serialization.decoder(fields["start"], encoding, "number", "Buffer");
this.end = serialization.decoder(fields["end"], encoding, "number", "Buffer");
this.totalVotedThresholdNominator = serialization.decoder(fields["totalVotedThresholdNominator"], encoding, "number", "Buffer");
this.mostVotedThresholdNominator = serialization.decoder(fields["mostVotedThresholdNominator"], encoding, "number", "Buffer");
this.allowEarlyFinish = fields["allowEarlyFinish"];
return this;
}
fromBuffer(bytes, offset = 0) {
this.numOptions = bintools.copyFrom(bytes, offset, offset + 4);
offset += 4;
const optionCount = this.numOptions.readUInt32BE(0);
this.options = [];
for (let i = 0; i < optionCount; i++) {
const option = new GeneralVoteOption();
offset = option.fromBuffer(bytes, offset);
this.options.push(option);
}
this.start = bintools.copyFrom(bytes, offset, offset + 8);
offset += 8;
this.end = bintools.copyFrom(bytes, offset, offset + 8);
offset += 8;
this.totalVotedThresholdNominator = bintools.copyFrom(bytes, offset, offset + 8);
offset += 8;
this.mostVotedThresholdNominator = bintools.copyFrom(bytes, offset, offset + 8);
offset += 8;
this.allowEarlyFinish =
bintools.copyFrom(bytes, offset, offset + 1).readUInt8(0) === 1;
offset += 1;
return offset;
}
toBuffer() {
let barr = [this.numOptions];
let bsize = this.numOptions.length;
this.options.forEach((opt) => {
let optBuffer = opt.toBuffer();
barr.push(optBuffer);
bsize += optBuffer.length;
});
barr.push(this.start, this.end, this.totalVotedThresholdNominator, this.mostVotedThresholdNominator, buffer_1.Buffer.from([this.allowEarlyFinish ? 1 : 0]));
bsize +=
this.start.length +
this.end.length +
this.totalVotedThresholdNominator.length +
this.mostVotedThresholdNominator.length +
1;
return buffer_1.Buffer.concat(barr, bsize);
}
constructor(start, end, totalVotedThresholdNominator, mostVotedThresholdNominator, allowEarlyFinish) {
this._typeID = constants_1.PlatformVMConstants.GENERALPROPOSAL_TYPE_ID;
// The order is important, must be followed in functions
this.numOptions = buffer_1.Buffer.alloc(4); //1.
this.start = buffer_1.Buffer.alloc(8); //3.
this.end = buffer_1.Buffer.alloc(8); //4.
this.totalVotedThresholdNominator = buffer_1.Buffer.alloc(8); //5.
this.mostVotedThresholdNominator = buffer_1.Buffer.alloc(8); //6.
const startTime = buffer_1.Buffer.alloc(8); // Buffer to hold the start time, 8 bytes
startTime.writeUInt32BE(start, 4);
const endTime = buffer_1.Buffer.alloc(8); // Buffer to hold the end time, 8 bytes
endTime.writeUInt32BE(end, 4);
this.options = [];
this.start = startTime;
this.end = endTime;
this.totalVotedThresholdNominator = buffer_1.Buffer.alloc(8);
this.totalVotedThresholdNominator.writeUIntBE(totalVotedThresholdNominator, 0, 8);
this.mostVotedThresholdNominator = buffer_1.Buffer.alloc(8);
this.mostVotedThresholdNominator.writeUIntBE(mostVotedThresholdNominator, 0, 8);
this.allowEarlyFinish = allowEarlyFinish;
}
getTypeID() {
return this._typeID;
}
getAllowEarlyFinish() {
return this.allowEarlyFinish;
}
}
exports.GeneralProposal = GeneralProposal;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbHByb3Bvc2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaXMvcGxhdGZvcm12bS9hZGRwcm9wb3NhbHR4L2dlbmVyYWxwcm9wb3NhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvQ0FBZ0M7QUFDaEMsNENBQWtEO0FBQ2xELGdFQUtxQztBQUNyQyx1RUFBOEM7QUFDOUMsTUFBTSxJQUFJLEdBQW1CLE1BQU0sQ0FBQTtBQUVuQyxNQUFNLGFBQWEsR0FBRyw2QkFBYSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQ2pELE1BQU0sUUFBUSxHQUFhLGtCQUFRLENBQUMsV0FBVyxFQUFFLENBQUE7QUFFakQsTUFBYSxpQkFBa0IsU0FBUSw0QkFBWTtJQU1qRCxTQUFTLENBQUMsV0FBK0IsS0FBSztRQUM1QyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDakIsT0FBTztZQUNMLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUM7U0FDdEUsQ0FBQTtJQUNILENBQUM7SUFDRCxXQUFXLENBQUMsTUFBYyxFQUFFLFdBQStCLEtBQUs7UUFDOUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hCLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLEdBQUcsQ0FBQyxVQUFVO1NBQ2YsQ0FBQTtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsQ0FBQztRQUMxQyxJQUFJLFNBQVMsR0FBVyxRQUFRO2FBQzdCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxD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MkIsR0FBRyxlQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLENBQzFDLDJCQUEyQixFQUMzQixDQUFDLEVBQ0QsQ0FBQyxDQUNGLENBQUE7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUE7SUFDMUMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtJQUM5QixDQUFDO0NBQ0Y7QUFuTEQsMENBbUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcImJ1ZmZlci9cIlxuaW1wb3J0IHsgUGxhdGZvcm1WTUNvbnN0YW50cyB9IGZyb20gXCIuLi9jb25zdGFudHNcIlxuaW1wb3J0IHtcbiAgU2VyaWFsaXphYmxlLFxuICBTZXJpYWxpemF0aW9uLFxuICBTZXJpYWxpemVkRW5jb2RpbmcsXG4gIFNlcmlhbGl6ZWRUeXBlXG59IGZyb20gXCIuLi8uLi8uLi91dGlscy9zZXJpYWxpemF0aW9uXCJcbmltcG9ydCBCaW5Ub29scyBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvYmludG9vbHNcIlxuY29uc3QgdXRmODogU2VyaWFsaXplZFR5cGUgPSBcInV0ZjhcIlxuXG5jb25zdCBzZXJpYWxpemF0aW9uID0gU2VyaWFsaXphdGlvbi5nZXRJbnN0YW5jZSgpXG5jb25zdCBiaW50b29sczogQmluVG9vbHMgPSBCaW5Ub29scy5nZXRJbnN0YW5jZSgpXG5cbmV4cG9ydCBjbGFzcyBHZW5lcmFsVm90ZU9wdGlvbiBleHRlbmRzIFNlcmlhbGl6YWJsZSB7XG4gIHByb3RlY3RlZCBfdHlwZU5hbWUgPSBcIkdlbmVyYWxWb3RlT3B0aW9uXCJcbiAgcHJvdGVjdGVkIF90eXBlSUQgPSB1bmRlZmluZWRcblxuICBwcm90ZWN0ZWQgb3B0aW9uOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoMClcblxuICBzZXJpYWxpemUoZW5jb2Rpbmc6IFNlcmlhbGl6ZWRFbmNvZGluZyA9IFwiaGV4XCIpOiBvYmplY3Qge1xuICAgIHN1cGVyLnNlcmlhbGl6ZSgpXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbjogc2VyaWFsaXphdGlvbi5lbmNvZGVyKHRoaXMub3B0aW9uLCBlbmNvZGluZywgXCJCdWZmZXJcIiwgXCJoZXhcIilcbiAgICB9XG4gIH1cbiAgZGVzZXJpYWxpemUoZmllbGRzOiBvYmplY3QsIGVuY29kaW5nOiBTZXJpYWxpemVkRW5jb2RpbmcgPSBcImhleFwiKTogdGhpcyB7XG4gICAgc3VwZXIuZGVzZXJpYWxpemUoZmllbGRzLCBlbmNvZGluZylcbiAgICB0aGlzLm9wdGlvbiA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihcbiAgICAgIGZpZWxkc1tcIm9wdGlvblwiXSxcbiAgICAgIGVuY29kaW5nLFxuICAgICAgXCJCdWZmZXJcIixcbiAgICAgIFwiQnVmZmVyXCIsXG4gICAgICAyNTYgLy9tYXggc2l6ZVxuICAgIClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBmcm9tQnVmZmVyKGJ5dGVzOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyID0gMCk6IG51bWJlciB7XG4gICAgbGV0IG9wdGlvbkxlbjogbnVtYmVyID0gYmludG9vbHNcbiAgICAgIC5jb3B5RnJvbShieXRlcywgb2Zmc2V0LCBvZmZzZXQgKyA0KVxuICAgICAgLnJlYWRVSW50MzJCRSgwKVxuICAgIG9mZnNldCArPSA0XG4gICAgdGhpcy5vcHRpb24gPSBiaW50b29scy5jb3B5RnJvbShieXRlcywgb2Zmc2V0LCBvZmZzZXQgKyBvcHRpb25MZW4pXG4gICAgb2Zmc2V0ICs9IG9wdGlvbkxlblxuICAgIHJldHVybiBvZmZzZXRcbiAgfVxuICB0b0J1ZmZlcigpOiBCdWZmZXIge1xuICAgIGxldCBiYXJyID0gW0J1ZmZlci5hbGxvYyg0KSwgdGhpcy5vcHRpb25dXG4gICAgbGV0IGJzaXplID0gNCArIHRoaXMub3B0aW9uLmxlbmd0aFxuICAgIGJhcnJbMF0ud3JpdGVVSW50MzJCRSh0aGlzLm9wdGlvbi5sZW5ndGgsIDApXG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYmFyciwgYnNpemUpXG4gIH1cblxuICBnZXRTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uLmxlbmd0aCArIDRcbiAgfVxuXG4gIGdldE9wdGlvbigpOiBCdWZmZXIge1xuICAgIHJldHVybiB0aGlzLm9wdGlvblxuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbj86IEJ1ZmZlcikge1xuICAgIHN1cGVyKClcbiAgICBpZiAob3B0aW9uKSB0aGlzLm9wdGlvbiA9IG9wdGlvblxuICB9XG59XG5leHBvcnQgY2xhc3MgR2VuZXJhbFByb3Bvc2FsIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZUlEID0gUGxhdGZvcm1WTUNvbnN0YW50cy5HRU5FUkFMUFJPUE9TQUxfVFlQRV9JRFxuXG4gIC8vIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQsIG11c3QgYmUgZm9sbG93ZWQgaW4gZnVuY3Rpb25zXG4gIHByb3RlY3RlZCBudW1PcHRpb25zOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoNCkgLy8xLlxuICBwcm90ZWN0ZWQgb3B0aW9uczogR2VuZXJhbFZvdGVPcHRpb25bXSAvLzIuXG5cbiAgcHJvdGVjdGVkIHN0YXJ0OiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoOCkgLy8zLlxuICBwcm90ZWN0ZWQgZW5kOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoOCkgLy80LlxuXG4gIHByb3RlY3RlZCB0b3RhbFZvdGVkVGhyZXNob2xkTm9taW5hdG9yOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoOCkgLy81LlxuICBwcm90ZWN0ZWQgbW9zdFZvdGVkVGhyZXNob2xkTm9taW5hdG9yOiBCdWZmZXIgPSBCdWZmZXIuYWxsb2MoOCkgLy82LlxuICBwcm90ZWN0ZWQgYWxsb3dFYXJseUZpbmlzaDogYm9vbGVhbiAvLyA3LlxuXG4gIGFkZEdlbmVyYWxPcHRpb24ob3B0aW9uOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGdlbmVyYWxWb3RlT3B0aW9uID0gbmV3IEdlbmVyYWxWb3RlT3B0aW9uKEJ1ZmZlci5mcm9tKG9wdGlvbikpXG4gICAgdGhpcy5vcHRpb25zLnB1c2goZ2VuZXJhbFZvdGVPcHRpb24pXG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgdGhpcy5udW1PcHRpb25zLndyaXRlVUludDMyQkUodGhpcy5vcHRpb25zLmxlbmd0aCwgMClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGggLSAxXG4gIH1cblxuICBzZXJpYWxpemUoZW5jb2Rpbmc6IFNlcmlhbGl6ZWRFbmNvZGluZyA9IFwiaGV4XCIpOiBvYmplY3Qge1xuICAgIGxldCBmaWVsZHMgPSB7XG4gICAgICBzdGFydDogc2VyaWFsaXphdGlvbi5lbmNvZGVyKHRoaXMuc3RhcnQsIGVuY29kaW5nLCBcIkJ1ZmZlclwiLCBcIm51bWJlclwiKSxcbiAgICAgIGVuZDogc2VyaWFsaXphdGlvbi5lbmNvZGVyKHRoaXMuZW5kLCBlbmNvZGluZywgXCJCdWZmZXJcIiwgXCJudW1iZXJcIiksXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMubWFwKChvcHQpID0+IG9wdC5zZXJpYWxpemUoZW5jb2RpbmcpKSxcbiAgICAgIHRvdGFsVm90ZWRUaHJlc2hvbGROb21pbmF0b3I6IHNlcmlhbGl6YXRpb24uZW5jb2RlcihcbiAgICAgICAgdGhpcy50b3RhbFZvdGVkVGhyZXNob2xkTm9taW5hdG9yLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgXCJCdWZmZXJcIixcbiAgICAgICAgXCJudW1iZXJcIlxuICAgICAgKSxcbiAgICAgIG1vc3RWb3RlZFRocmVzaG9sZE5vbWluYXRvcjogc2VyaWFsaXphdGlvbi5lbmNvZGVyKFxuICAgICAgICB0aGlzLm1vc3RWb3RlZFRocmVzaG9sZE5vbWluYXRvcixcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIFwiQnVmZmVyXCIsXG4gICAgICAgIFwibnVtYmVyXCJcbiAgICAgICksXG4gICAgICBhbGxvd0Vhcmx5RmluaXNoOiB0aGlzLmFsbG93RWFybHlGaW5pc2hcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkc1xuICB9XG5cbiAgZGVzZXJpYWxpemUoZmllbGRzOiBvYmplY3QsIGVuY29kaW5nOiBTZXJpYWxpemVkRW5jb2RpbmcgPSBcImhleFwiKTogdGhpcyB7XG4gICAgdGhpcy5udW1PcHRpb25zLndyaXRlVUludDMyQkUodGhpcy5vcHRpb25zLmxlbmd0aCwgMClcbiAgICB0aGlzLm9wdGlvbnMgPSBmaWVsZHNbXCJvcHRpb25zXCJdLm1hcCgob3B0KSA9PlxuICAgICAgbmV3IEdlbmVyYWxWb3RlT3B0aW9uKCkuZGVzZXJpYWxpemUob3B0LCBlbmNvZGluZylcbiAgICApXG4gICAgdGhpcy5zdGFydCA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihcbiAgICAgIGZpZWxkc1tcInN0YXJ0XCJdLFxuICAgICAgZW5jb2RpbmcsXG4gICAgICBcIm51bWJlclwiLFxuICAgICAgXCJCdWZmZXJcIlxuICAgIClcbiAgICB0aGlzLmVuZCA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihcbiAgICAgIGZpZWxkc1tcImVuZFwiXSxcbiAgICAgIGVuY29kaW5nLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiQnVmZmVyXCJcbiAgICApXG4gICAgdGhpcy50b3RhbFZvdGVkVGhyZXNob2xkTm9taW5hdG9yID0gc2VyaWFsaXphdGlvbi5kZWNvZGVyKFxuICAgICAgZmllbGRzW1widG90YWxWb3RlZFRocmVzaG9sZE5vbWluYXRvclwiXSxcbiAgICAgIGVuY29kaW5nLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiQnVmZmVyXCJcbiAgICApXG4gICAgdGhpcy5tb3N0Vm90ZWRUaHJlc2hvbGROb21pbmF0b3IgPSBzZXJpYWxpemF0aW9uLmRlY29kZXIoXG4gICAgICBmaWVsZHNbXCJtb3N0Vm90ZWRUaHJlc2hvbGROb21pbmF0b3JcIl0sXG4gICAgICBlbmNvZGluZyxcbiAgICAgIFwibnVtYmVyXCIsXG4gICAgICBcIkJ1ZmZlclwiXG4gICAgKVxuICAgIHRoaXMuYWxsb3dFYXJseUZpbmlzaCA9IGZpZWxkc1tcImFsbG93RWFybHlGaW5pc2hcIl1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBmcm9tQnVmZmVyKGJ5dGVzOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyID0gMCk6IG51bWJlciB7XG4gICAgdGhpcy5udW1PcHRpb25zID0gYmludG9vbHMuY29weUZyb20oYnl0ZXMsIG9mZnNldCwgb2Zmc2V0ICsgNClcbiAgICBvZmZzZXQgKz0gNFxuICAgIGNvbnN0IG9wdGlvbkNvdW50ID0gdGhpcy5udW1PcHRpb25zLnJlYWRVSW50MzJCRSgwKVxuICAgIHRoaXMub3B0aW9ucyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25Db3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBuZXcgR2VuZXJhbFZvdGVPcHRpb24oKVxuICAgICAgb2Zmc2V0ID0gb3B0aW9uLmZyb21CdWZmZXIoYnl0ZXMsIG9mZnNldClcbiAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICB9XG4gICAgdGhpcy5zdGFydCA9IGJpbnRvb2xzLmNvcHlGcm9tKGJ5dGVzLCBvZmZzZXQsIG9mZnNldCArIDgpXG4gICAgb2Zmc2V0ICs9IDhcbiAgICB0aGlzLmVuZCA9IGJpbnRvb2xzLmNvcHlGcm9tKGJ5dGVzLCBvZmZzZXQsIG9mZnNldCArIDgpXG4gICAgb2Zmc2V0ICs9IDhcbiAgICB0aGlzLnRvdGFsVm90ZWRUaHJlc2hvbGROb21pbmF0b3IgPSBiaW50b29scy5jb3B5RnJvbShcbiAgICAgIGJ5dGVzLFxuICAgICAgb2Zmc2V0LFxuICAgICAgb2Zmc2V0ICsgOFxuICAgIClcbiAgICBvZmZzZXQgKz0gOFxuICAgIHRoaXMubW9zdFZvdGVkVGhyZXNob2xkTm9taW5hdG9yID0gYmludG9vbHMuY29weUZyb20oXG4gICAgICBieXRlcyxcbiAgICAgIG9mZnNldCxcbiAgICAgIG9mZnNldCArIDhcbiAgICApXG4gICAgb2Zmc2V0ICs9IDhcblxuICAgIHRoaXMuYWxsb3dFYXJseUZpbmlzaCA9XG4gICAgICBiaW50b29scy5jb3B5RnJvbShieXRlcywgb2Zmc2V0LCBvZmZzZXQgKyAxKS5yZWFkVUludDgoMCkgPT09IDFcbiAgICBvZmZzZXQgKz0gMVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgdG9CdWZmZXIoKTogQnVmZmVyIHtcbiAgICBsZXQgYmFyciA9IFt0aGlzLm51bU9wdGlvbnNdXG4gICAgbGV0IGJzaXplID0gdGhpcy5udW1PcHRpb25zLmxlbmd0aFxuXG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdCkgPT4ge1xuICAgICAgbGV0IG9wdEJ1ZmZlciA9IG9wdC50b0J1ZmZlcigpXG4gICAgICBiYXJyLnB1c2gob3B0QnVmZmVyKVxuICAgICAgYnNpemUgKz0gb3B0QnVmZmVyLmxlbmd0aFxuICAgIH0pXG5cbiAgICBiYXJyLnB1c2goXG4gICAgICB0aGlzLnN0YXJ0LFxuICAgICAgdGhpcy5lbmQsXG4gICAgICB0aGlzLnRvdGFsVm90ZWRUaHJlc2hvbGROb21pbmF0b3IsXG4gICAgICB0aGlzLm1vc3RWb3RlZFRocmVzaG9sZE5vbWluYXRvcixcbiAgICAgIEJ1ZmZlci5mcm9tKFt0aGlzLmFsbG93RWFybHlGaW5pc2ggPyAxIDogMF0pXG4gICAgKVxuXG4gICAgYnNpemUgKz1cbiAgICAgIHRoaXMuc3RhcnQubGVuZ3RoICtcbiAgICAgIHRoaXMuZW5kLmxlbmd0aCArXG4gICAgICB0aGlzLnRvdGFsVm90ZWRUaHJlc2hvbGROb21pbmF0b3IubGVuZ3RoICtcbiAgICAgIHRoaXMubW9zdFZvdGVkVGhyZXNob2xkTm9taW5hdG9yLmxlbmd0aCArXG4gICAgICAxXG5cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChiYXJyLCBic2l6ZSlcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0YXJ0PzogbnVtYmVyLFxuICAgIGVuZD86IG51bWJlcixcbiAgICB0b3RhbFZvdGVkVGhyZXNob2xkTm9taW5hdG9yPzogbnVtYmVyLFxuICAgIG1vc3RWb3RlZFRocmVzaG9sZE5vbWluYXRvcj86IG51bWJlcixcbiAgICBhbGxvd0Vhcmx5RmluaXNoPzogYm9vbGVhblxuICApIHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBCdWZmZXIuYWxsb2MoOCkgLy8gQnVmZmVyIHRvIGhvbGQgdGhlIHN0YXJ0IHRpbWUsIDggYnl0ZXNcbiAgICBzdGFydFRpbWUud3JpdGVVSW50MzJCRShzdGFydCwgNClcbiAgICBjb25zdCBlbmRUaW1lID0gQnVmZmVyLmFsbG9jKDgpIC8vIEJ1ZmZlciB0byBob2xkIHRoZSBlbmQgdGltZSwgOCBieXRlc1xuICAgIGVuZFRpbWUud3JpdGVVSW50MzJCRShlbmQsIDQpXG5cbiAgICB0aGlzLm9wdGlvbnMgPSBbXVxuICAgIHRoaXMuc3RhcnQgPSBzdGFydFRpbWVcbiAgICB0aGlzLmVuZCA9IGVuZFRpbWVcblxuICAgIHRoaXMudG90YWxWb3RlZFRocmVzaG9sZE5vbWluYXRvciA9IEJ1ZmZlci5hbGxvYyg4KVxuICAgIHRoaXMudG90YWxWb3RlZFRocmVzaG9sZE5vbWluYXRvci53cml0ZVVJbnRCRShcbiAgICAgIHRvdGFsVm90ZWRUaHJlc2hvbGROb21pbmF0b3IsXG4gICAgICAwLFxuICAgICAgOFxuICAgIClcbiAgICB0aGlzLm1vc3RWb3RlZFRocmVzaG9sZE5vbWluYXRvciA9IEJ1ZmZlci5hbGxvYyg4KVxuICAgIHRoaXMubW9zdFZvdGVkVGhyZXNob2xkTm9taW5hdG9yLndyaXRlVUludEJFKFxuICAgICAgbW9zdFZvdGVkVGhyZXNob2xkTm9taW5hdG9yLFxuICAgICAgMCxcbiAgICAgIDhcbiAgICApXG4gICAgdGhpcy5hbGxvd0Vhcmx5RmluaXNoID0gYWxsb3dFYXJseUZpbmlzaFxuICB9XG5cbiAgZ2V0VHlwZUlEKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGVJRFxuICB9XG5cbiAgZ2V0QWxsb3dFYXJseUZpbmlzaCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0Vhcmx5RmluaXNoXG4gIH1cbn1cbiJdfQ==