@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
154 lines (149 loc) • 22.2 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const minecraft = require('@jsprismarine/minecraft');
const block_BlockMappings = require('../../block/BlockMappings.cjs.cjs');
const network_Identifiers = require('../Identifiers.cjs.cjs');
require('../packet/ActorFallPacket.cjs.cjs');
require('../packet/AddActorPacket.cjs.cjs');
require('../packet/AddItemActorPacket.cjs.cjs');
require('../packet/AddPlayerPacket.cjs.cjs');
require('../packet/AnimatePacket.cjs.cjs');
require('../packet/AvailableActorIdentifiersPacket.cjs.cjs');
require('../packet/AvailableCommandsPacket.cjs.cjs');
require('@jsprismarine/jsbinaryutils');
require('zlib');
require('../CompressionProvider.cjs.cjs');
require('../packet/NetworkSettingsPacket.cjs.cjs');
require('../packet/BiomeDefinitionListPacket.cjs.cjs');
require('../packet/ChangeDimensionPacket.cjs.cjs');
require('../packet/ChunkRadiusUpdatedPacket.cjs.cjs');
require('../packet/CommandRequestPacket.cjs.cjs');
require('../packet/ContainerClosePacket.cjs.cjs');
require('../packet/ContainerOpenPacket.cjs.cjs');
require('../packet/CreativeContentPacket.cjs.cjs');
require('../packet/DisconnectPacket.cjs.cjs');
require('../packet/EmoteListPacket.cjs.cjs');
require('../packet/InteractPacket.cjs.cjs');
require('../packet/InventoryContentPacket.cjs.cjs');
const network_packet_InventoryTransactionPacket = require('../packet/InventoryTransactionPacket.cjs.cjs');
require('../packet/ItemComponentPacket.cjs.cjs');
require('../packet/ItemStackRequestPacket.cjs.cjs');
require('../packet/ItemStackResponsePacket.cjs.cjs');
require('../packet/LevelChunkPacket.cjs.cjs');
const network_packet_LevelSoundEventPacket = require('../packet/LevelSoundEventPacket.cjs.cjs');
require('../packet/LoginPacket.cjs.cjs');
require('../packet/MobEquipmentPacket.cjs.cjs');
require('../packet/MoveActorAbsolutePacket.cjs.cjs');
require('../packet/MovePlayerPacket.cjs.cjs');
require('../packet/NetworkChunkPublisherUpdatePacket.cjs.cjs');
require('../packet/OnScreenTextureAnimationPacket.cjs.cjs');
require('../packet/PacketViolationWarningPacket.cjs.cjs');
require('../packet/PlaySoundPacket.cjs.cjs');
require('../packet/PlayStatusPacket.cjs.cjs');
require('../packet/PlayerActionPacket.cjs.cjs');
require('../packet/PlayerListPacket.cjs.cjs');
require('../packet/PlayerSkinPacket.cjs.cjs');
require('../packet/RemoveActorPacket.cjs.cjs');
require('../packet/RequestChunkRadiusPacket.cjs.cjs');
require('../packet/RequestNetworkSettingsPacket.cjs.cjs');
require('../packet/ResourcePackResponsePacket.cjs.cjs');
require('../packet/ResourcePackStackPacket.cjs.cjs');
require('../packet/ResourcePacksInfoPacket.cjs.cjs');
require('../packet/ServerSettingsRequestPacket.cjs.cjs');
require('../packet/SetActorDataPacket.cjs.cjs');
require('../packet/SetDefaultGametypePacket.cjs.cjs');
require('../packet/SetHealthPacket.cjs.cjs');
require('../packet/SetLocalPlayerAsInitializedPacket.cjs.cjs');
require('../packet/SetPlayerGametypePacket.cjs.cjs');
require('../packet/SetTimePacket.cjs.cjs');
require('../packet/ShowProfilePacket.cjs.cjs');
require('../packet/StartGamePacket.cjs.cjs');
require('../packet/TextPacket.cjs.cjs');
require('../packet/TickSyncPacket.cjs.cjs');
require('../packet/TransferPacket.cjs.cjs');
require('../packet/UpdateAdventureSettingsPacket.cjs.cjs');
require('../packet/UpdateAttributesPacket.cjs.cjs');
const network_packet_UpdateBlockPacket = require('../packet/UpdateBlockPacket.cjs.cjs');
require('../packet/WorldEventPacket.cjs.cjs');
class InventoryTransactionHandler {
static NetID = network_Identifiers.default.InventoryTransactionPacket;
async handle(packet, server, connection) {
const player = connection.getPlayer();
if (!player.isOnline()) return;
if (player.gamemode === minecraft.Gametype.SPECTATOR) return;
switch (packet.transactionType) {
case network_packet_InventoryTransactionPacket.TransactionType.NORMAL: {
packet.inventoryActions.forEach(async (action) => {
switch (action.sourceType) {
case 0: {
break;
}
default:
server.getLogger().debug(`Unknown source type: ${action.sourceType}`);
}
});
break;
}
case network_packet_InventoryTransactionPacket.TransactionType.USE_ITEM: {
const useItemData = packet.transactionData;
switch (useItemData.actionType) {
case network_packet_InventoryTransactionPacket.UseItemAction.CLICK_BLOCK:
await player.getWorld().useItemOn(
server.getBlockManager().getBlockByIdAndMeta(useItemData.itemInHand.getId(), useItemData.itemInHand.meta),
useItemData.blockPosition,
useItemData.blockFace,
useItemData.clickPosition,
player
);
break;
case network_packet_InventoryTransactionPacket.UseItemAction.CLICK_AIR:
break;
case network_packet_InventoryTransactionPacket.UseItemAction.BREAK_BLOCK: {
const chunk = await player.getWorld().getChunkAt(useItemData.blockPosition);
const blockId = chunk.getBlock(useItemData.blockPosition);
const block = server.getBlockManager().getBlockByIdAndMeta(blockId.id, blockId.meta);
if (!block) return;
const pk = new network_packet_UpdateBlockPacket.default();
pk.x = useItemData.blockPosition.getX();
pk.y = useItemData.blockPosition.getY();
pk.z = useItemData.blockPosition.getZ();
pk.blockRuntimeId = block_BlockMappings.BlockMappings.getRuntimeId("minecraft:air");
await Promise.all(
server.getSessionManager().getAllPlayers().filter((p) => p.getWorld().getUUID() === player.getWorld().getUUID()).map(async (player2) => player2.getNetworkSession().getConnection().sendDataPacket(pk))
);
const chunkPos = useItemData.blockPosition;
chunk.setBlock(
chunkPos.getX(),
chunkPos.getY(),
chunkPos.getZ(),
server.getBlockManager().getBlock("minecraft:air")
);
const soundPk = new network_packet_LevelSoundEventPacket.default();
soundPk.sound = 5;
soundPk.positionX = player.getX();
soundPk.positionY = player.getY();
soundPk.positionZ = player.getZ();
soundPk.extraData = block_BlockMappings.BlockMappings.getRuntimeId(block.getName());
soundPk.entityType = ":";
soundPk.isBabyMob = false;
soundPk.disableRelativeVolume = false;
await Promise.all(
player.getWorld().getPlayers().map((target) => target.getNetworkSession().send(soundPk))
);
break;
}
default: {
server.getLogger().debug(`Unknown action type: ${useItemData.actionType}`);
}
}
break;
}
default: {
server.getLogger().verbose(`Unknown type: ${packet.transactionType}`);
throw new Error("Invalid InventoryTransactionType");
}
}
}
}
exports.default = InventoryTransactionHandler;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5VHJhbnNhY3Rpb25IYW5kbGVyLmNqcy5janMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZXR3b3JrL2hhbmRsZXIvSW52ZW50b3J5VHJhbnNhY3Rpb25IYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWV0eXBlIH0gZnJvbSAnQGpzcHJpc21hcmluZS9taW5lY3JhZnQnO1xuaW1wb3J0IHR5cGUgeyBQbGF5ZXJTZXNzaW9uIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi8uLi9TZXJ2ZXInO1xuaW1wb3J0IHsgQmxvY2tNYXBwaW5ncyB9IGZyb20gJy4uLy4uL2Jsb2NrL0Jsb2NrTWFwcGluZ3MnO1xuaW1wb3J0IElkZW50aWZpZXJzIGZyb20gJy4uL0lkZW50aWZpZXJzJztcbmltcG9ydCB0eXBlIHsgSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQgfSBmcm9tICcuLi9QYWNrZXRzJztcbmltcG9ydCB7IExldmVsU291bmRFdmVudFBhY2tldCwgVXBkYXRlQmxvY2tQYWNrZXQgfSBmcm9tICcuLi9QYWNrZXRzJztcbmltcG9ydCB0eXBlIHsgVXNlSXRlbURhdGEgfSBmcm9tICcuLi9wYWNrZXQvSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBVc2VJdGVtQWN0aW9uIH0gZnJvbSAnLi4vcGFja2V0L0ludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0JztcbmltcG9ydCB0eXBlIFBhY2tldEhhbmRsZXIgZnJvbSAnLi9QYWNrZXRIYW5kbGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW52ZW50b3J5VHJhbnNhY3Rpb25IYW5kbGVyIGltcGxlbWVudHMgUGFja2V0SGFuZGxlcjxJbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgTmV0SUQgPSBJZGVudGlmaWVycy5JbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldDtcblxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGUocGFja2V0OiBJbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldCwgc2VydmVyOiBTZXJ2ZXIsIGNvbm5lY3Rpb246IFBsYXllclNlc3Npb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcGxheWVyID0gY29ubmVjdGlvbi5nZXRQbGF5ZXIoKTtcbiAgICAgICAgaWYgKCFwbGF5ZXIuaXNPbmxpbmUoKSkgcmV0dXJuO1xuICAgICAgICBpZiAocGxheWVyLmdhbWVtb2RlID09PSBHYW1ldHlwZS5TUEVDVEFUT1IpIHJldHVybjsgLy8gU3BlY3RhdG9ycyBzaG91bGRuJ3QgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoIHRoZSB3b3JsZC5cblxuICAgICAgICBzd2l0Y2ggKHBhY2tldC50cmFuc2FjdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk5PUk1BTDoge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHJlZmFjdG9yIHRoaXMgY3JhcC5cbiAgICAgICAgICAgICAgICAvLyBwcm9iYWJseSBiYXNlIGl0IG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW1wL1BvY2tldE1pbmUtTVAvYmxvYi9kMTlkYjVkMmU0NGQwOTI1Nzk4YzI4ODI0N2MzYmRkYjcxZDIzOTc1L3NyYy9wb2NrZXRtaW5lL1BsYXllci5waHAjTDIzOTkgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG4gICAgICAgICAgICAgICAgLy8gbGV0IG1vdmVkSXRlbTogQ29udGFpbmVyRW50cnkgfCBudWxsO1xuICAgICAgICAgICAgICAgIHBhY2tldC5pbnZlbnRvcnlBY3Rpb25zLmZvckVhY2goYXN5bmMgKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5zb3VyY2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFjayBmb3IgY3JlYXRpdmUgaW52ZW50b3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAoYWN0aW9uLndpbmRvd0lkID09PSAxMjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBjcmVhdGl2ZSBpbnZlbnRvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYXllci5nYW1lbW9kZSAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKGBQbGF5ZXIgaXNuJ3QgaW4gY3JlYXRpdmUgbW9kZWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGlkID0gYWN0aW9uLm9sZEl0ZW0uZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgbWV0YSA9IGFjdGlvbi5vbGRJdGVtLm1ldGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaXRlbSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIHNlcnZlci5nZXRJdGVtTWFuYWdlcigpLmdldEl0ZW1CeUlkKGlkKSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBzZXJ2ZXIuZ2V0QmxvY2tNYW5hZ2VyKCkuZ2V0QmxvY2tCeUlkQW5kTWV0YShpZCwgbWV0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGNvdW50ID0gNjQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW92ZWRJdGVtID0gbmV3IENvbnRhaW5lckVudHJ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgY291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLm5ld0l0ZW0uZ2V0SWQoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3ZlZEl0ZW0gPSBwbGF5ZXIuZ2V0SW52ZW50b3J5KCkuZ2V0SXRlbShhY3Rpb24udGFyZ2V0U2xvdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllci5nZXRJbnZlbnRvcnkoKS5yZW1vdmVJdGVtKGFjdGlvbi50YXJnZXRTbG90KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW92ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5nZXRMb2dnZXIoKS5kZWJ1ZyhgbW92ZWRJdGVtIGlzIHVuZGVmaW5lZGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLmdldEludmVudG9yeSgpLnNldEl0ZW0oYWN0aW9uLnRhcmdldFNsb3QsIG1vdmVkSXRlbSk7Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmdldExvZ2dlcigpLmRlYnVnKGBVbmtub3duIHNvdXJjZSB0eXBlOiAke2FjdGlvbi5zb3VyY2VUeXBlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5VU0VfSVRFTToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZUl0ZW1EYXRhID0gPFVzZUl0ZW1EYXRhPnBhY2tldC50cmFuc2FjdGlvbkRhdGE7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh1c2VJdGVtRGF0YS5hY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVXNlSXRlbUFjdGlvbi5DTElDS19CTE9DSzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBsYXllclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRXb3JsZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVzZUl0ZW1PbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QmxvY2tNYW5hZ2VyKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRCbG9ja0J5SWRBbmRNZXRhKHVzZUl0ZW1EYXRhLml0ZW1JbkhhbmQuZ2V0SWQoKSwgdXNlSXRlbURhdGEuaXRlbUluSGFuZC5tZXRhKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSXRlbURhdGEuYmxvY2tQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSXRlbURhdGEuYmxvY2tGYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJdGVtRGF0YS5jbGlja1Bvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVXNlSXRlbUFjdGlvbi5DTElDS19BSVI6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBVc2VJdGVtQWN0aW9uLkJSRUFLX0JMT0NLOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IGF3YWl0IHBsYXllci5nZXRXb3JsZCgpLmdldENodW5rQXQodXNlSXRlbURhdGEuYmxvY2tQb3NpdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrSWQgPSBjaHVuay5nZXRCbG9jayh1c2VJdGVtRGF0YS5ibG9ja1Bvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gc2VydmVyLmdldEJsb2NrTWFuYWdlcigpLmdldEJsb2NrQnlJZEFuZE1ldGEoYmxvY2tJZC5pZCwgYmxvY2tJZC5tZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGsgPSBuZXcgVXBkYXRlQmxvY2tQYWNrZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBrLnggPSB1c2VJdGVtRGF0YS5ibG9ja1Bvc2l0aW9uLmdldFgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBrLnkgPSB1c2VJdGVtRGF0YS5ibG9ja1Bvc2l0aW9uLmdldFkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBrLnogPSB1c2VJdGVtRGF0YS5ibG9ja1Bvc2l0aW9uLmdldFooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHJ1biBhIGZ1bmN0aW9uIGZyb20gYmxvY2suZ2V0QnJlYWtDb25zZXF1ZW5jZXMoKSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYnJva2VuIGJsb2NrIG1heSBwbGFjZSBtb3JlIGJsb2NrcyBvciBydW4gYmxvY2sgcmVsYXRlZCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZXhhbXBsZSwgaWNlIHNob3VsZCByZXBsYWNlIGl0c2VsZiB3aXRoIGEgd2F0ZXIgc291cmNlIGJsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBzdXJ2aXZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgcGsuYmxvY2tSdW50aW1lSWQgPSBCbG9ja01hcHBpbmdzLmdldFJ1bnRpbWVJZCgnbWluZWNyYWZ0OmFpcicpOyAvLyBBaXJcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCBibG9jay1icmVhayBwYWNrZXQgdG8gYWxsIHBsYXllcnMgaW4gdGhlIHNhbWUgd29ybGRcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2Vzc2lvbk1hbmFnZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QWxsUGxheWVycygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHApID0+IHAuZ2V0V29ybGQoKS5nZXRVVUlEKCkgPT09IHBsYXllci5nZXRXb3JsZCgpLmdldFVVSUQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChhc3luYyAocGxheWVyKSA9PiBwbGF5ZXIuZ2V0TmV0d29ya1Nlc3Npb24oKS5nZXRDb25uZWN0aW9uKCkuc2VuZERhdGFQYWNrZXQocGspKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmtQb3MgPSB1c2VJdGVtRGF0YS5ibG9ja1Bvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsuc2V0QmxvY2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtQb3MuZ2V0WCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rUG9zLmdldFkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua1Bvcy5nZXRaKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmdldEJsb2NrTWFuYWdlcigpLmdldEJsb2NrKCdtaW5lY3JhZnQ6YWlyJykhXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VuZFBrID0gbmV3IExldmVsU291bmRFdmVudFBhY2tldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291bmRQay5zb3VuZCA9IDU7IC8vIFRPRE86IGVudW1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc291bmRQay5wb3NpdGlvblggPSBwbGF5ZXIuZ2V0WCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291bmRQay5wb3NpdGlvblkgPSBwbGF5ZXIuZ2V0WSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291bmRQay5wb3NpdGlvblogPSBwbGF5ZXIuZ2V0WigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA/IDAgb3IgaWQgJiAweGZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kUGsuZXh0cmFEYXRhID0gQmxvY2tNYXBwaW5ncy5nZXRSdW50aW1lSWQoYmxvY2suZ2V0TmFtZSgpKTsgLy8gSW4gdGhpcyBjYXNlIHJlZmVycyB0byBibG9jayBydW50aW1lIElkXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VuZFBrLmVudGl0eVR5cGUgPSAnOic7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VuZFBrLmlzQmFieU1vYiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291bmRQay5kaXNhYmxlUmVsYXRpdmVWb2x1bWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRXb3JsZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRQbGF5ZXJzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodGFyZ2V0KSA9PiB0YXJnZXQuZ2V0TmV0d29ya1Nlc3Npb24oKS5zZW5kKHNvdW5kUGspKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5nZXRMb2dnZXIoKS5kZWJ1ZyhgVW5rbm93biBhY3Rpb24gdHlwZTogJHt1c2VJdGVtRGF0YS5hY3Rpb25UeXBlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgc2VydmVyLmdldExvZ2dlcigpLnZlcmJvc2UoYFVua25vd24gdHlwZTogJHtwYWNrZXQudHJhbnNhY3Rpb25UeXBlfWApO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBJbnZlbnRvcnlUcmFuc2FjdGlvblR5cGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJJZGVudGlmaWVycyIsIkdhbWV0eXBlIiwiVHJhbnNhY3Rpb25UeXBlIiwiVXNlSXRlbUFjdGlvbiIsIlVwZGF0ZUJsb2NrUGFja2V0IiwiQmxvY2tNYXBwaW5ncyIs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