@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
221 lines (220 loc) • 17.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_network_NetworkUtil = require("../network/NetworkUtil.cjs.cjs");
//#region src/entity/Attribute.ts
var AttributeIds = {
Absorption: "minecraft:absorption",
PlayerSaturation: "minecraft:player.saturation",
PlayerExhaustion: "minecraft:player.exhaustion",
KnockbackResistence: "minecraft:knockback_resistance",
Health: "minecraft:health",
Movement: "minecraft:movement",
FollowRange: "minecraft:follow_range",
PlayerHunger: "minecraft:player.hunger",
AttackDamage: "minecraft:attack_damage",
PlayerLevel: "minecraft:player.level",
PlayerExperience: "minecraft:player.experience",
UnderwaterMovement: "minecraft:underwater_movement",
Luck: "minecraft:luck",
FallDamage: "minecraft:fall_damage",
HorseJumpStrength: "minecraft:horse.jump_strength",
ZombieSpawnReinforcements: "minecraft:zombie.spawn_reinforcements",
LavaMovement: "minecraft:lava_movement"
};
var Attribute = class Attribute {
name;
min;
max;
default;
value;
/**
* Class used to store Attribute data.
*
* @param {object} data - The attribute data.
* @param {string} data.name - The name of the attribute.
* @param {number} data.min - The minimum value of the attribute.
* @param {number} data.max - The maximum value of the attribute.
* @param {number} data.def - The default value of the attribute.
* @param {number} data.value - The current value of the attribute.
*/
constructor({ name, min, max, def, value }) {
this.name = name;
this.min = min;
this.max = max;
this.default = def;
this.value = value;
}
networkSerialize(stream) {
stream.writeFloatLE(this.min);
stream.writeFloatLE(this.max);
stream.writeFloatLE(this.value);
stream.writeFloatLE(this.default);
require_network_NetworkUtil.NetworkUtil.writeString(stream, this.name);
stream.writeUnsignedVarInt(0);
}
static networkDeserialize(stream) {
const attr = new Attribute({
min: stream.readFloatLE(),
max: stream.readFloatLE(),
value: stream.readFloatLE(),
def: stream.readFloatLE(),
name: require_network_NetworkUtil.NetworkUtil.readString(stream)
});
stream.readUnsignedVarInt();
return attr;
}
getName() {
return this.name;
}
getMin() {
return this.min;
}
getMax() {
return this.max;
}
getDefault() {
return this.default;
}
getValue() {
return this.value;
}
};
var MAX_FLOAT32 = 34028234663852886e22;
var Attributes = class {
attributes = [];
/**
* Returns a list of default attributes to send the first time a player spawns.
*/
getDefaults() {
return [
new Attribute({
name: AttributeIds.Absorption,
min: 0,
max: 16,
def: 0,
value: 0
}),
new Attribute({
name: AttributeIds.PlayerSaturation,
min: 0,
max: 20,
def: 5,
value: 4
}),
new Attribute({
name: AttributeIds.PlayerExhaustion,
min: 0,
max: 20,
def: 0,
value: 0
}),
new Attribute({
name: AttributeIds.KnockbackResistence,
min: 0,
max: 1,
def: 0,
value: 0
}),
new Attribute({
name: AttributeIds.Health,
min: 0,
max: 20,
def: 20,
value: 20
}),
new Attribute({
name: AttributeIds.Movement,
min: 0,
max: MAX_FLOAT32,
def: .1,
value: .1
}),
new Attribute({
name: AttributeIds.FollowRange,
min: 0,
max: 2048,
def: 16,
value: 16
}),
new Attribute({
name: AttributeIds.PlayerHunger,
min: 0,
max: 20,
def: 20,
value: 20
}),
new Attribute({
name: AttributeIds.AttackDamage,
min: 0,
max: 1,
def: 1,
value: 1
}),
new Attribute({
name: AttributeIds.PlayerLevel,
min: 0,
max: 24791,
def: 0,
value: 0
}),
new Attribute({
name: AttributeIds.PlayerExperience,
min: 0,
max: 1,
def: 0,
value: 0
}),
new Attribute({
name: AttributeIds.UnderwaterMovement,
min: 0,
max: MAX_FLOAT32,
def: .02,
value: .02
}),
new Attribute({
name: AttributeIds.Luck,
min: -1024,
max: 1024,
def: 0,
value: 0
}),
new Attribute({
name: AttributeIds.FallDamage,
min: 0,
max: MAX_FLOAT32,
def: 1,
value: 1
}),
new Attribute({
name: AttributeIds.HorseJumpStrength,
min: 0,
max: 2,
def: .7,
value: .7
}),
new Attribute({
name: AttributeIds.ZombieSpawnReinforcements,
min: 0,
max: 1,
def: 0,
value: 0
}),
new Attribute({
name: AttributeIds.LavaMovement,
min: 0,
max: MAX_FLOAT32,
def: .02,
value: .02
})
];
}
getAttributes() {
return this.attributes;
}
networkSerialize() {}
};
//#endregion
exports.Attribute = Attribute;
exports.AttributeIds = AttributeIds;
exports.Attributes = Attributes;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0cmlidXRlLmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudGl0eS9BdHRyaWJ1dGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBOZXR3b3JrVXRpbCB9IGZyb20gJy4uL25ldHdvcmsvTmV0d29ya1V0aWwnO1xuXG5leHBvcnQgY29uc3QgQXR0cmlidXRlSWRzID0ge1xuICAgIEFic29ycHRpb246ICdtaW5lY3JhZnQ6YWJzb3JwdGlvbicsXG4gICAgUGxheWVyU2F0dXJhdGlvbjogJ21pbmVjcmFmdDpwbGF5ZXIuc2F0dXJhdGlvbicsXG4gICAgUGxheWVyRXhoYXVzdGlvbjogJ21pbmVjcmFmdDpwbGF5ZXIuZXhoYXVzdGlvbicsXG4gICAgS25vY2tiYWNrUmVzaXN0ZW5jZTogJ21pbmVjcmFmdDprbm9ja2JhY2tfcmVzaXN0YW5jZScsXG4gICAgSGVhbHRoOiAnbWluZWNyYWZ0OmhlYWx0aCcsXG4gICAgTW92ZW1lbnQ6ICdtaW5lY3JhZnQ6bW92ZW1lbnQnLFxuICAgIEZvbGxvd1JhbmdlOiAnbWluZWNyYWZ0OmZvbGxvd19yYW5nZScsXG4gICAgUGxheWVySHVuZ2VyOiAnbWluZWNyYWZ0OnBsYXllci5odW5nZXInLFxuICAgIEF0dGFja0RhbWFnZTogJ21pbmVjcmFmdDphdHRhY2tfZGFtYWdlJyxcbiAgICBQbGF5ZXJMZXZlbDogJ21pbmVjcmFmdDpwbGF5ZXIubGV2ZWwnLFxuICAgIFBsYXllckV4cGVyaWVuY2U6ICdtaW5lY3JhZnQ6cGxheWVyLmV4cGVyaWVuY2UnLFxuICAgIFVuZGVyd2F0ZXJNb3ZlbWVudDogJ21pbmVjcmFmdDp1bmRlcndhdGVyX21vdmVtZW50JyxcbiAgICBMdWNrOiAnbWluZWNyYWZ0Omx1Y2snLFxuICAgIEZhbGxEYW1hZ2U6ICdtaW5lY3JhZnQ6ZmFsbF9kYW1hZ2UnLFxuICAgIEhvcnNlSnVtcFN0cmVuZ3RoOiAnbWluZWNyYWZ0OmhvcnNlLmp1bXBfc3RyZW5ndGgnLFxuICAgIFpvbWJpZVNwYXduUmVpbmZvcmNlbWVudHM6ICdtaW5lY3JhZnQ6em9tYmllLnNwYXduX3JlaW5mb3JjZW1lbnRzJyxcbiAgICBMYXZhTW92ZW1lbnQ6ICdtaW5lY3JhZnQ6bGF2YV9tb3ZlbWVudCdcbn07XG5cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGUge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWluOiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXg6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHQ6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIEF0dHJpYnV0ZSBkYXRhLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBUaGUgYXR0cmlidXRlIGRhdGEuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEubmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRhdGEubWluIC0gVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGF0YS5tYXggLSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRhLmRlZiAtIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRhdGEudmFsdWUgLSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIG1pbixcbiAgICAgICAgbWF4LFxuICAgICAgICBkZWYsXG4gICAgICAgIHZhbHVlXG4gICAgfToge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIG1pbjogbnVtYmVyO1xuICAgICAgICBtYXg6IG51bWJlcjtcbiAgICAgICAgZGVmOiBudW1iZXI7XG4gICAgICAgIHZhbHVlOiBudW1iZXI7XG4gICAgfSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IGRlZjtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXR3b3JrU2VyaWFsaXplKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogdm9pZCB7XG4gICAgICAgIHN0cmVhbS53cml0ZUZsb2F0TEUodGhpcy5taW4pO1xuICAgICAgICBzdHJlYW0ud3JpdGVGbG9hdExFKHRoaXMubWF4KTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh0aGlzLnZhbHVlKTtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh0aGlzLmRlZmF1bHQpO1xuICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVN0cmluZyhzdHJlYW0sIHRoaXMubmFtZSk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KDApOyAvLyBUT0RPOiBtb2RpZmllciBjb3VudFxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogQXR0cmlidXRlIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgbWluOiBzdHJlYW0ucmVhZEZsb2F0TEUoKSxcbiAgICAgICAgICAgIG1heDogc3RyZWFtLnJlYWRGbG9hdExFKCksXG4gICAgICAgICAgICB2YWx1ZTogc3RyZWFtLnJlYWRGbG9hdExFKCksXG4gICAgICAgICAgICBkZWY6IHN0cmVhbS5yZWFkRmxvYXRMRSgpLFxuICAgICAgICAgICAgbmFtZTogTmV0d29ya1V0aWwucmVhZFN0cmluZyhzdHJlYW0pXG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCk7IC8vIFRPRE86IHNraXAgZm9yIG5vd1xuICAgICAgICByZXR1cm4gYXR0cjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNaW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNYXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF4O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cblxuY29uc3QgTUFYX0ZMT0FUMzIgPSAzLjQwMjgyMzQ2NjM4NTI4ODZlMzg7XG5leHBvcnQgY2xhc3MgQXR0cmlidXRlcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxpc3Qgb2YgZGVmYXVsdCBhdHRyaWJ1dGVzIHRvIHNlbmQgdGhlIGZpcnN0IHRpbWUgYSBwbGF5ZXIgc3Bhd25zLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXREZWZhdWx0cygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5BYnNvcnB0aW9uLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDE2LFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuUGxheWVyU2F0dXJhdGlvbixcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyMCxcbiAgICAgICAgICAgICAgICBkZWY6IDUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDRcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlBsYXllckV4aGF1c3Rpb24sXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMjAsXG4gICAgICAgICAgICAgICAgZGVmOiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5Lbm9ja2JhY2tSZXNpc3RlbmNlLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICAgICAgZGVmOiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5IZWFsdGgsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMjAsXG4gICAgICAgICAgICAgICAgZGVmOiAyMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMjBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLk1vdmVtZW50LFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IE1BWF9GTE9BVDMyLFxuICAgICAgICAgICAgICAgIGRlZjogMC4xLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwLjFcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkZvbGxvd1JhbmdlLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDIwNDgsXG4gICAgICAgICAgICAgICAgZGVmOiAxNixcbiAgICAgICAgICAgICAgICB2YWx1ZTogMTZcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlBsYXllckh1bmdlcixcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyMCxcbiAgICAgICAgICAgICAgICBkZWY6IDIwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAyMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuQXR0YWNrRGFtYWdlLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICAgICAgZGVmOiAxLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5QbGF5ZXJMZXZlbCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyNDc5MSxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlBsYXllckV4cGVyaWVuY2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlVuZGVyd2F0ZXJNb3ZlbWVudCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiBNQVhfRkxPQVQzMixcbiAgICAgICAgICAgICAgICBkZWY6IDAuMDIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDAuMDJcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkx1Y2ssXG4gICAgICAgICAgICAgICAgbWluOiAtMTAyNCxcbiAgICAgICAgICAgICAgICBtYXg6IDEwMjQsXG4gICAgICAgICAgICAgICAgZGVmOiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5GYWxsRGFtYWdlLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IE1BWF9GTE9BVDMyLFxuICAgICAgICAgICAgICAgIGRlZjogMSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuSG9yc2VKdW1wU3RyZW5ndGgsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMixcbiAgICAgICAgICAgICAgICBkZWY6IDAuNyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMC43XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5ab21iaWVTcGF3blJlaW5mb3JjZW1lbnRzLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICAgICAgZGVmOiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5MYXZhTW92ZW1lbnQsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogTUFYX0ZMT0FUMzIsXG4gICAgICAgICAgICAgICAgZGVmOiAwLjAyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwLjAyXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBdHRyaWJ1dGVzKCk6IEF0dHJpYnV0ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV0d29ya1NlcmlhbGl6ZSgpOiB2b2lkIHt9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxJQUFhLGVBQWU7Q0FDeEIsWUFBWTtDQUNaLGtCQUFrQjtD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