@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
224 lines (221 loc) • 21.3 kB
JavaScript
import { NetworkUtil } from '../network/NetworkUtil.es.js';
const 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"
};
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);
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: 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;
}
}
const MAX_FLOAT32 = 34028234663852886e22;
class Attributes {
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: 0.1,
value: 0.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: 0.02,
value: 0.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: 0.7,
value: 0.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: 0.02,
value: 0.02
})
];
}
getAttributes() {
return this.attributes;
}
networkSerialize() {
}
}
export { Attribute, AttributeIds, Attributes };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0cmlidXRlLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW50aXR5L0F0dHJpYnV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IE5ldHdvcmtVdGlsIH0gZnJvbSAnLi4vbmV0d29yay9OZXR3b3JrVXRpbCc7XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGVJZHMgPSB7XG4gICAgQWJzb3JwdGlvbjogJ21pbmVjcmFmdDphYnNvcnB0aW9uJyxcbiAgICBQbGF5ZXJTYXR1cmF0aW9uOiAnbWluZWNyYWZ0OnBsYXllci5zYXR1cmF0aW9uJyxcbiAgICBQbGF5ZXJFeGhhdXN0aW9uOiAnbWluZWNyYWZ0OnBsYXllci5leGhhdXN0aW9uJyxcbiAgICBLbm9ja2JhY2tSZXNpc3RlbmNlOiAnbWluZWNyYWZ0Omtub2NrYmFja19yZXNpc3RhbmNlJyxcbiAgICBIZWFsdGg6ICdtaW5lY3JhZnQ6aGVhbHRoJyxcbiAgICBNb3ZlbWVudDogJ21pbmVjcmFmdDptb3ZlbWVudCcsXG4gICAgRm9sbG93UmFuZ2U6ICdtaW5lY3JhZnQ6Zm9sbG93X3JhbmdlJyxcbiAgICBQbGF5ZXJIdW5nZXI6ICdtaW5lY3JhZnQ6cGxheWVyLmh1bmdlcicsXG4gICAgQXR0YWNrRGFtYWdlOiAnbWluZWNyYWZ0OmF0dGFja19kYW1hZ2UnLFxuICAgIFBsYXllckxldmVsOiAnbWluZWNyYWZ0OnBsYXllci5sZXZlbCcsXG4gICAgUGxheWVyRXhwZXJpZW5jZTogJ21pbmVjcmFmdDpwbGF5ZXIuZXhwZXJpZW5jZScsXG4gICAgVW5kZXJ3YXRlck1vdmVtZW50OiAnbWluZWNyYWZ0OnVuZGVyd2F0ZXJfbW92ZW1lbnQnLFxuICAgIEx1Y2s6ICdtaW5lY3JhZnQ6bHVjaycsXG4gICAgRmFsbERhbWFnZTogJ21pbmVjcmFmdDpmYWxsX2RhbWFnZScsXG4gICAgSG9yc2VKdW1wU3RyZW5ndGg6ICdtaW5lY3JhZnQ6aG9yc2UuanVtcF9zdHJlbmd0aCcsXG4gICAgWm9tYmllU3Bhd25SZWluZm9yY2VtZW50czogJ21pbmVjcmFmdDp6b21iaWUuc3Bhd25fcmVpbmZvcmNlbWVudHMnLFxuICAgIExhdmFNb3ZlbWVudDogJ21pbmVjcmFmdDpsYXZhX21vdmVtZW50J1xufTtcblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtaW46IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1heDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIHVzZWQgdG8gc3RvcmUgQXR0cmlidXRlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIFRoZSBhdHRyaWJ1dGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YS5uYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGF0YS5taW4gLSBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRhLm1heCAtIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRhdGEuZGVmIC0gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGF0YS52YWx1ZSAtIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWluLFxuICAgICAgICBtYXgsXG4gICAgICAgIGRlZixcbiAgICAgICAgdmFsdWVcbiAgICB9OiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgbWluOiBudW1iZXI7XG4gICAgICAgIG1heDogbnVtYmVyO1xuICAgICAgICBkZWY6IG51bWJlcjtcbiAgICAgICAgdmFsdWU6IG51bWJlcjtcbiAgICB9KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICAgICAgdGhpcy5kZWZhdWx0ID0gZGVmO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIG5ldHdvcmtTZXJpYWxpemUoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlRmxvYXRMRSh0aGlzLm1pbik7XG4gICAgICAgIHN0cmVhbS53cml0ZUZsb2F0TEUodGhpcy5tYXgpO1xuICAgICAgICBzdHJlYW0ud3JpdGVGbG9hdExFKHRoaXMudmFsdWUpO1xuICAgICAgICBzdHJlYW0ud3JpdGVGbG9hdExFKHRoaXMuZGVmYXVsdCk7XG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHN0cmVhbSwgdGhpcy5uYW1lKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQoMCk7IC8vIFRPRE86IG1vZGlmaWVyIGNvdW50XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBuZXR3b3JrRGVzZXJpYWxpemUoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBBdHRyaWJ1dGUge1xuICAgICAgICBjb25zdCBhdHRyID0gbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICBtaW46IHN0cmVhbS5yZWFkRmxvYXRMRSgpLFxuICAgICAgICAgICAgbWF4OiBzdHJlYW0ucmVhZEZsb2F0TEUoKSxcbiAgICAgICAgICAgIHZhbHVlOiBzdHJlYW0ucmVhZEZsb2F0TEUoKSxcbiAgICAgICAgICAgIGRlZjogc3RyZWFtLnJlYWRGbG9hdExFKCksXG4gICAgICAgICAgICBuYW1lOiBOZXR3b3JrVXRpbC5yZWFkU3RyaW5nKHN0cmVhbSlcbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTsgLy8gVE9ETzogc2tpcCBmb3Igbm93XG4gICAgICAgIHJldHVybiBhdHRyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1pbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5taW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuXG5jb25zdCBNQVhfRkxPQVQzMiA9IDMuNDAyODIzNDY2Mzg1Mjg4NmUzODtcbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBkZWZhdWx0IGF0dHJpYnV0ZXMgdG8gc2VuZCB0aGUgZmlyc3QgdGltZSBhIHBsYXllciBzcGF3bnMuXG4gICAgICovXG4gICAgcHVibGljIGdldERlZmF1bHRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkFic29ycHRpb24sXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMTYsXG4gICAgICAgICAgICAgICAgZGVmOiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5QbGF5ZXJTYXR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDIwLFxuICAgICAgICAgICAgICAgIGRlZjogNSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogNFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuUGxheWVyRXhoYXVzdGlvbixcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyMCxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLktub2NrYmFja1Jlc2lzdGVuY2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkhlYWx0aCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyMCxcbiAgICAgICAgICAgICAgICBkZWY6IDIwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAyMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuTW92ZW1lbnQsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogTUFYX0ZMT0FUMzIsXG4gICAgICAgICAgICAgICAgZGVmOiAwLjEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDAuMVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuRm9sbG93UmFuZ2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMjA0OCxcbiAgICAgICAgICAgICAgICBkZWY6IDE2LFxuICAgICAgICAgICAgICAgIHZhbHVlOiAxNlxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuUGxheWVySHVuZ2VyLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDIwLFxuICAgICAgICAgICAgICAgIGRlZjogMjAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDIwXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5BdHRhY2tEYW1hZ2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICBkZWY6IDEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDFcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlBsYXllckxldmVsLFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IDI0NzkxLFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuUGxheWVyRXhwZXJpZW5jZSxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgICAgIGRlZjogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuVW5kZXJ3YXRlck1vdmVtZW50LFxuICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICBtYXg6IE1BWF9GTE9BVDMyLFxuICAgICAgICAgICAgICAgIGRlZjogMC4wMixcbiAgICAgICAgICAgICAgICB2YWx1ZTogMC4wMlxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQXR0cmlidXRlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBBdHRyaWJ1dGVJZHMuTHVjayxcbiAgICAgICAgICAgICAgICBtaW46IC0xMDI0LFxuICAgICAgICAgICAgICAgIG1heDogMTAyNCxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkZhbGxEYW1hZ2UsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogTUFYX0ZMT0FUMzIsXG4gICAgICAgICAgICAgICAgZGVmOiAxLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBBdHRyaWJ1dGUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IEF0dHJpYnV0ZUlkcy5Ib3JzZUp1bXBTdHJlbmd0aCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiAyLFxuICAgICAgICAgICAgICAgIGRlZjogMC43LFxuICAgICAgICAgICAgICAgIHZhbHVlOiAwLjdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLlpvbWJpZVNwYXduUmVpbmZvcmNlbWVudHMsXG4gICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICBkZWY6IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlSWRzLkxhdmFNb3ZlbWVudCxcbiAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgbWF4OiBNQVhfRkxPQVQzMixcbiAgICAgICAgICAgICAgICBkZWY6IDAuMDIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDAuMDJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF0dHJpYnV0ZXMoKTogQXR0cmlidXRlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXR3b3JrU2VyaWFsaXplKCk6IHZvaWQge31cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdPLE1BQU0sWUFBZSxHQUFBO0FBQUEsRUFDeEIsVUFBWSxFQUFBLHNC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