From 9697ca9ef4342842d8ec3000c71d3be11ee19e63 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 19:49:39 -0300 Subject: [PATCH 01/17] refactor: split shared into packages --- {shared => packages/song}/.eslintrc.js | 0 packages/song/.gitignore | 34 ++ packages/song/README.md | 15 + packages/song/bun.lock | 29 ++ {shared => packages/song}/jest.config.js | 0 packages/song/package.json | 33 ++ packages/song/src/index.ts | 8 + .../song/src}/injectMetadata.ts | 1 + .../song => packages/song/src}/notes.ts | 3 +- .../song => packages/song/src}/obfuscate.ts | 5 + .../song => packages/song/src}/pack.ts | 0 .../song => packages/song/src}/parse.ts | 2 +- .../song => packages/song/src}/stats.ts | 19 +- .../song => packages/song/src}/types.ts | 2 +- .../song => packages/song/src}/util.ts | 3 +- .../files/testCustomInstrumentNoUsage.nbs | Bin .../song/files/testCustomInstrumentUsage.nbs | Bin .../song}/tests/song/files/testDetune.nbs | Bin .../song/files/testExtraPopulatedLayer.nbs | Bin .../song}/tests/song/files/testLoop.nbs | Bin .../song}/tests/song/files/testOutOfRange.nbs | Bin .../song/files/testOutOfRangeCustomPitch.nbs | Bin .../song}/tests/song/files/testSimple.nbs | Bin .../files/testTempoChangerDifferentStart.nbs | Bin .../testTempoChangerMultipleInstruments.nbs | Bin .../song/files/testTempoChangerNoStart.nbs | Bin .../song/files/testTempoChangerOverlap.nbs | Bin .../song/files/testTempoChangerWithStart.nbs | Bin .../song}/tests/song/index.spec.ts | 3 +- .../song}/tests/song/obfuscate.ts | 0 {shared => packages/song}/tests/song/util.ts | 1 + packages/song/tsconfig.build.json | 18 + packages/song/tsconfig.json | 28 + packages/sounds/.eslintrc.js | 3 + packages/sounds/.gitignore | 34 ++ packages/sounds/README.md | 15 + packages/sounds/bun.lock | 29 ++ packages/sounds/jest.config.js | 33 ++ packages/sounds/package.json | 27 + .../sounds/src}/fetchSoundList.ts | 4 +- packages/sounds/src/index.ts | 3 + .../sounds => packages/sounds/src}/types.ts | 0 .../sounds => packages/sounds/src}/util.ts | 0 packages/sounds/tsconfig.build.json | 18 + packages/sounds/tsconfig.json | 28 + packages/thumbnail/.eslintrc.js | 3 + packages/thumbnail/.gitignore | 34 ++ packages/thumbnail/README.md | 15 + packages/thumbnail/bun.lock | 29 ++ packages/thumbnail/jest.config.js | 33 ++ packages/thumbnail/package.json | 35 ++ .../thumbnail/src}/canvasFactory.ts | 2 +- .../thumbnail/src}/colors.ts | 13 +- packages/thumbnail/src/index.ts | 4 + .../thumbnail/src}/types.ts | 2 +- .../thumbnail/src}/utils.spec.ts | 0 .../thumbnail/src}/utils.ts | 2 +- packages/thumbnail/tsconfig.build.json | 18 + packages/thumbnail/tsconfig.json | 29 ++ shared/features/sounds/index.ts | 1 - shared/features/thumbnail/index.ts | 145 ------ shared/package-lock.json | 481 ------------------ shared/package.json | 36 -- shared/tsconfig.json | 25 - shared/validation/common/deepFreeze.ts | 16 - shared/validation/common/dto/PageQuery.dto.ts | 70 --- shared/validation/common/dto/types.ts | 3 - shared/validation/song/constants.ts | 133 ----- .../song/dto/CustomInstrumentData.dto.ts | 6 - .../song/dto/FeaturedSongsDto.dtc.ts | 21 - shared/validation/song/dto/SongPageDto.ts | 34 -- shared/validation/song/dto/SongPreview.dto.ts | 75 --- shared/validation/song/dto/SongStats.ts | 69 --- shared/validation/song/dto/SongView.dto.ts | 108 ---- .../validation/song/dto/ThumbnailData.dto.ts | 50 -- .../validation/song/dto/UploadSongDto.dto.ts | 133 ----- .../song/dto/UploadSongResponseDto.dto.ts | 72 --- shared/validation/song/dto/types.ts | 41 -- shared/validation/user/constants.ts | 7 - shared/validation/user/dto/CreateUser.dto.ts | 41 -- shared/validation/user/dto/GetUser.dto.ts | 45 -- shared/validation/user/dto/Login.dto copy.ts | 9 - .../validation/user/dto/LoginWithEmail.dto.ts | 9 - .../validation/user/dto/NewEmailUser.dto.ts | 30 -- .../validation/user/dto/SingleUsePass.dto.ts | 14 - .../validation/user/dto/UpdateUsername.dto.ts | 16 - 86 files changed, 589 insertions(+), 1718 deletions(-) rename {shared => packages/song}/.eslintrc.js (100%) create mode 100644 packages/song/.gitignore create mode 100644 packages/song/README.md create mode 100644 packages/song/bun.lock rename {shared => packages/song}/jest.config.js (100%) create mode 100644 packages/song/package.json create mode 100644 packages/song/src/index.ts rename {shared/features/song => packages/song/src}/injectMetadata.ts (96%) rename {shared/features/song => packages/song/src}/notes.ts (95%) rename {shared/features/song => packages/song/src}/obfuscate.ts (97%) rename {shared/features/song => packages/song/src}/pack.ts (100%) rename {shared/features/song => packages/song/src}/parse.ts (96%) rename {shared/features/song => packages/song/src}/stats.ts (95%) rename {shared/features/song => packages/song/src}/types.ts (89%) rename {shared/features/song => packages/song/src}/util.ts (85%) rename {shared => packages/song}/tests/song/files/testCustomInstrumentNoUsage.nbs (100%) rename {shared => packages/song}/tests/song/files/testCustomInstrumentUsage.nbs (100%) rename {shared => packages/song}/tests/song/files/testDetune.nbs (100%) rename {shared => packages/song}/tests/song/files/testExtraPopulatedLayer.nbs (100%) rename {shared => packages/song}/tests/song/files/testLoop.nbs (100%) rename {shared => packages/song}/tests/song/files/testOutOfRange.nbs (100%) rename {shared => packages/song}/tests/song/files/testOutOfRangeCustomPitch.nbs (100%) rename {shared => packages/song}/tests/song/files/testSimple.nbs (100%) rename {shared => packages/song}/tests/song/files/testTempoChangerDifferentStart.nbs (100%) rename {shared => packages/song}/tests/song/files/testTempoChangerMultipleInstruments.nbs (100%) rename {shared => packages/song}/tests/song/files/testTempoChangerNoStart.nbs (100%) rename {shared => packages/song}/tests/song/files/testTempoChangerOverlap.nbs (100%) rename {shared => packages/song}/tests/song/files/testTempoChangerWithStart.nbs (100%) rename {shared => packages/song}/tests/song/index.spec.ts (98%) rename {shared => packages/song}/tests/song/obfuscate.ts (100%) rename {shared => packages/song}/tests/song/util.ts (95%) create mode 100644 packages/song/tsconfig.build.json create mode 100644 packages/song/tsconfig.json create mode 100644 packages/sounds/.eslintrc.js create mode 100644 packages/sounds/.gitignore create mode 100644 packages/sounds/README.md create mode 100644 packages/sounds/bun.lock create mode 100644 packages/sounds/jest.config.js create mode 100644 packages/sounds/package.json rename {shared/features/sounds => packages/sounds/src}/fetchSoundList.ts (94%) create mode 100644 packages/sounds/src/index.ts rename {shared/features/sounds => packages/sounds/src}/types.ts (100%) rename {shared/features/sounds => packages/sounds/src}/util.ts (100%) create mode 100644 packages/sounds/tsconfig.build.json create mode 100644 packages/sounds/tsconfig.json create mode 100644 packages/thumbnail/.eslintrc.js create mode 100644 packages/thumbnail/.gitignore create mode 100644 packages/thumbnail/README.md create mode 100644 packages/thumbnail/bun.lock create mode 100644 packages/thumbnail/jest.config.js create mode 100644 packages/thumbnail/package.json rename {shared/features/thumbnail => packages/thumbnail/src}/canvasFactory.ts (98%) rename {shared/features/thumbnail => packages/thumbnail/src}/colors.ts (90%) create mode 100644 packages/thumbnail/src/index.ts rename {shared/features/thumbnail => packages/thumbnail/src}/types.ts (95%) rename {shared/features/thumbnail => packages/thumbnail/src}/utils.spec.ts (100%) rename {shared/features/thumbnail => packages/thumbnail/src}/utils.ts (97%) create mode 100644 packages/thumbnail/tsconfig.build.json create mode 100644 packages/thumbnail/tsconfig.json delete mode 100644 shared/features/sounds/index.ts delete mode 100644 shared/features/thumbnail/index.ts delete mode 100644 shared/package-lock.json delete mode 100644 shared/package.json delete mode 100644 shared/tsconfig.json delete mode 100644 shared/validation/common/deepFreeze.ts delete mode 100644 shared/validation/common/dto/PageQuery.dto.ts delete mode 100644 shared/validation/common/dto/types.ts delete mode 100644 shared/validation/song/constants.ts delete mode 100644 shared/validation/song/dto/CustomInstrumentData.dto.ts delete mode 100644 shared/validation/song/dto/FeaturedSongsDto.dtc.ts delete mode 100644 shared/validation/song/dto/SongPageDto.ts delete mode 100644 shared/validation/song/dto/SongPreview.dto.ts delete mode 100644 shared/validation/song/dto/SongStats.ts delete mode 100644 shared/validation/song/dto/SongView.dto.ts delete mode 100644 shared/validation/song/dto/ThumbnailData.dto.ts delete mode 100644 shared/validation/song/dto/UploadSongDto.dto.ts delete mode 100644 shared/validation/song/dto/UploadSongResponseDto.dto.ts delete mode 100644 shared/validation/song/dto/types.ts delete mode 100644 shared/validation/user/constants.ts delete mode 100644 shared/validation/user/dto/CreateUser.dto.ts delete mode 100644 shared/validation/user/dto/GetUser.dto.ts delete mode 100644 shared/validation/user/dto/Login.dto copy.ts delete mode 100644 shared/validation/user/dto/LoginWithEmail.dto.ts delete mode 100644 shared/validation/user/dto/NewEmailUser.dto.ts delete mode 100644 shared/validation/user/dto/SingleUsePass.dto.ts delete mode 100644 shared/validation/user/dto/UpdateUsername.dto.ts diff --git a/shared/.eslintrc.js b/packages/song/.eslintrc.js similarity index 100% rename from shared/.eslintrc.js rename to packages/song/.eslintrc.js diff --git a/packages/song/.gitignore b/packages/song/.gitignore new file mode 100644 index 00000000..a14702c4 --- /dev/null +++ b/packages/song/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/song/README.md b/packages/song/README.md new file mode 100644 index 00000000..8ef81615 --- /dev/null +++ b/packages/song/README.md @@ -0,0 +1,15 @@ +# song + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.2.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/song/bun.lock b/packages/song/bun.lock new file mode 100644 index 00000000..d8a1b172 --- /dev/null +++ b/packages/song/bun.lock @@ -0,0 +1,29 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "song", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@types/node": ["@types/node@24.1.0", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w=="], + + "@types/react": ["@types/react@19.1.8", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g=="], + + "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], + } +} diff --git a/shared/jest.config.js b/packages/song/jest.config.js similarity index 100% rename from shared/jest.config.js rename to packages/song/jest.config.js diff --git a/packages/song/package.json b/packages/song/package.json new file mode 100644 index 00000000..cc21ac7e --- /dev/null +++ b/packages/song/package.json @@ -0,0 +1,33 @@ +{ + "name": "@nbw/song", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "private": true, + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts", + "development": "./src/index.ts" + } + }, + "scripts": { + "build": "bun run clean && bun build src/index.ts --outdir dist --target node && bun run build:types", + "build:types": "tsc --project tsconfig.build.json", + "clean": "rm -rf dist" + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "^5" + }, + "dependencies": { + "@encode42/nbs.js": "^5.0.2", + "unidecode": "^1.1.0", + "@timohausmann/quadtree-ts": "^2.2.2", + "@nbw/database": "workspace:*" + }, + "peerDependencies": { + "typescript": "^5" + } +} diff --git a/packages/song/src/index.ts b/packages/song/src/index.ts new file mode 100644 index 00000000..1faff3fa --- /dev/null +++ b/packages/song/src/index.ts @@ -0,0 +1,8 @@ +export * from './injectMetadata'; +export * from './notes'; +export * from './obfuscate'; +export * from './pack'; +export * from './parse'; +export * from './stats'; +export * from './types'; +export * from './util'; diff --git a/shared/features/song/injectMetadata.ts b/packages/song/src/injectMetadata.ts similarity index 96% rename from shared/features/song/injectMetadata.ts rename to packages/song/src/injectMetadata.ts index b61bbdb5..891af402 100644 --- a/shared/features/song/injectMetadata.ts +++ b/packages/song/src/injectMetadata.ts @@ -22,6 +22,7 @@ export function injectSongFileMetadata( for (const [id, soundPath] of soundPaths.entries()) { const customId = nbsSong.instruments.firstCustomIndex + id; const newSoundPath = soundPath.replace('/sounds/', '/'); + // @ts-ignore //TODO: fix this nbsSong.instruments.loaded[customId].meta.soundFile = newSoundPath; } } diff --git a/shared/features/song/notes.ts b/packages/song/src/notes.ts similarity index 95% rename from shared/features/song/notes.ts rename to packages/song/src/notes.ts index 34975c1c..757e0da7 100644 --- a/shared/features/song/notes.ts +++ b/packages/song/src/notes.ts @@ -1,7 +1,7 @@ import { Song } from '@encode42/nbs.js'; import { Quadtree, Rectangle } from '@timohausmann/quadtree-ts'; -import { Note } from './types'; +import type { Note } from './types'; type TreeNode = Rectangle; @@ -32,6 +32,7 @@ export class NoteQuadTree { data: { ...note, tick: tick, layer: layerId }, }); + // @ts-ignore //TODO: fix this this.quadtree.insert(treeItem); if (tick > this.width) this.width = tick; diff --git a/shared/features/song/obfuscate.ts b/packages/song/src/obfuscate.ts similarity index 97% rename from shared/features/song/obfuscate.ts rename to packages/song/src/obfuscate.ts index 7c1ae23f..169225a3 100644 --- a/shared/features/song/obfuscate.ts +++ b/packages/song/src/obfuscate.ts @@ -209,14 +209,19 @@ export class SongObfuscator { const tick = parseInt(tickStr); // Skip silent notes except if they are tempo changers + // @ts-ignore //TODO: fix this const isTempoChanger = tempoChangerIds.includes(note.instrument); + // @ts-ignore //TODO: fix this if (note.velocity === 0 && !isTempoChanger) continue; // Skip notes with deleted instruments + // @ts-ignore //TODO: fix this if (instrumentMapping[note.instrument] === undefined) continue; // Add obfuscated note to output + // @ts-ignore //TODO: fix this const newNote = getObfuscatedNote(note, layer); + // @ts-ignore //TODO: fix this if (isTempoChanger) newNote.pitch = note.pitch; addNoteToOutput(tick, newNote); } diff --git a/shared/features/song/pack.ts b/packages/song/src/pack.ts similarity index 100% rename from shared/features/song/pack.ts rename to packages/song/src/pack.ts diff --git a/shared/features/song/parse.ts b/packages/song/src/parse.ts similarity index 96% rename from shared/features/song/parse.ts rename to packages/song/src/parse.ts index f51fbeea..202daf8d 100644 --- a/shared/features/song/parse.ts +++ b/packages/song/src/parse.ts @@ -1,7 +1,7 @@ import { Song, fromArrayBuffer } from '@encode42/nbs.js'; import { NoteQuadTree } from './notes'; -import { InstrumentArray, SongFileType } from './types'; +import type { InstrumentArray, SongFileType } from './types'; import { getInstrumentNoteCounts } from './util'; async function getVanillaSoundList() { diff --git a/shared/features/song/stats.ts b/packages/song/src/stats.ts similarity index 95% rename from shared/features/song/stats.ts rename to packages/song/src/stats.ts index c0397eaa..914e7a9a 100644 --- a/shared/features/song/stats.ts +++ b/packages/song/src/stats.ts @@ -1,6 +1,6 @@ import { Song } from '@encode42/nbs.js'; -import { SongStatsType } from './types'; +import type { SongStatsType } from './types'; import { getTempoChangerInstrumentIds } from './util'; // Usage: @@ -120,6 +120,7 @@ export class SongStatsGenerator { layerCount = layerId; } + // @ts-ignore //TODO: fix this const effectivePitch = note.key + note.pitch / 100; // Differences between Note Block Studio and this implementation: @@ -147,6 +148,7 @@ export class SongStatsGenerator { // the default Minecraft sounds are enough to play the song (i.e. you can play it using only // a custom sounds.json in a resource pack). + // @ts-ignore //TODO: fix this const instrumentKey = this.song.instruments.loaded[note.instrument].key; // F#4 = 45 const minRange = 45 - (instrumentKey - 45) - 12; // F#3 = 33 const maxRange = 45 - (instrumentKey - 45) + 12; // F#5 = 57 @@ -156,12 +158,13 @@ export class SongStatsGenerator { // Don't consider tempo changers as detuned notes or custom instruments const isTempoChanger = tempoChangerInstruments.includes( + // @ts-ignore //TODO: fix this note.instrument, ); - + // @ts-ignore //TODO: fix this const hasDetune = note.pitch % 100 !== 0; - const usesCustomInstrument = + const usesCustomInstrument = // @ts-ignore //TODO: fix this note.instrument >= this.song.instruments.firstCustomIndex; if (!isTempoChanger) { @@ -171,7 +174,7 @@ export class SongStatsGenerator { if (isOutOfRange || hasDetune || usesCustomInstrument) incompatibleNoteCount++; } - + // @ts-ignore //TODO: fix this instrumentNoteCounts[note.instrument]++; noteCount++; } @@ -222,14 +225,14 @@ export class SongStatsGenerator { const note = layer.notes[tickStr]; const tick = parseInt(tickStr); - // Not a tempo changer + // @ts-ignore //TODO: fix this // Not a tempo changer if (!tempoChangerInstruments.includes(note.instrument)) continue; // The tempo change isn't effective if there's another tempo changer in the same tick, // so we iterate layers bottom to top and skip the block if a tempo changer has already // been found in this tick if (tick in tempoSegments) continue; - + // @ts-ignore //TODO: fix this const tempo = Math.abs(note.pitch) / 15; // note pitch = BPM = (t/s) * 15 tempoSegments[tick] = tempo; } @@ -266,9 +269,9 @@ export class SongStatsGenerator { for (let i = 0; i < tempoChangeTicks.length - 1; i++) { const currTick = tempoChangeTicks[i]; const nextTick = tempoChangeTicks[i + 1]; - + // @ts-ignore //TODO: fix this const currTempo = tempoSegments[currTick]; - + // @ts-ignore //TODO: fix this const segmentDurationTicks = nextTick - currTick; const timePerTick = 1 / currTempo; diff --git a/shared/features/song/types.ts b/packages/song/src/types.ts similarity index 89% rename from shared/features/song/types.ts rename to packages/song/src/types.ts index 203eb93f..d7fa4485 100644 --- a/shared/features/song/types.ts +++ b/packages/song/src/types.ts @@ -1,5 +1,5 @@ +import { SongStats } from '@nbw/database'; import { NoteQuadTree } from './notes'; -import { SongStats } from '../../validation/song/dto/SongStats'; export type SongFileType = { title: string; diff --git a/shared/features/song/util.ts b/packages/song/src/util.ts similarity index 85% rename from shared/features/song/util.ts rename to packages/song/src/util.ts index 9dea13cd..3a0258cd 100644 --- a/shared/features/song/util.ts +++ b/packages/song/src/util.ts @@ -17,8 +17,9 @@ export function getInstrumentNoteCounts(song: Song): Record { for (const layer of song.layers) { for (const tick in layer.notes) { const note = layer.notes[tick]; + // @ts-ignore //TODO: fix this const instrumentId = note.instrument; - blockCounts[instrumentId]++; + blockCounts[instrumentId] = (blockCounts[instrumentId] || 0) + 1; } } diff --git a/shared/tests/song/files/testCustomInstrumentNoUsage.nbs b/packages/song/tests/song/files/testCustomInstrumentNoUsage.nbs similarity index 100% rename from shared/tests/song/files/testCustomInstrumentNoUsage.nbs rename to packages/song/tests/song/files/testCustomInstrumentNoUsage.nbs diff --git a/shared/tests/song/files/testCustomInstrumentUsage.nbs b/packages/song/tests/song/files/testCustomInstrumentUsage.nbs similarity index 100% rename from shared/tests/song/files/testCustomInstrumentUsage.nbs rename to packages/song/tests/song/files/testCustomInstrumentUsage.nbs diff --git a/shared/tests/song/files/testDetune.nbs b/packages/song/tests/song/files/testDetune.nbs similarity index 100% rename from shared/tests/song/files/testDetune.nbs rename to packages/song/tests/song/files/testDetune.nbs diff --git a/shared/tests/song/files/testExtraPopulatedLayer.nbs b/packages/song/tests/song/files/testExtraPopulatedLayer.nbs similarity index 100% rename from shared/tests/song/files/testExtraPopulatedLayer.nbs rename to packages/song/tests/song/files/testExtraPopulatedLayer.nbs diff --git a/shared/tests/song/files/testLoop.nbs b/packages/song/tests/song/files/testLoop.nbs similarity index 100% rename from shared/tests/song/files/testLoop.nbs rename to packages/song/tests/song/files/testLoop.nbs diff --git a/shared/tests/song/files/testOutOfRange.nbs b/packages/song/tests/song/files/testOutOfRange.nbs similarity index 100% rename from shared/tests/song/files/testOutOfRange.nbs rename to packages/song/tests/song/files/testOutOfRange.nbs diff --git a/shared/tests/song/files/testOutOfRangeCustomPitch.nbs b/packages/song/tests/song/files/testOutOfRangeCustomPitch.nbs similarity index 100% rename from shared/tests/song/files/testOutOfRangeCustomPitch.nbs rename to packages/song/tests/song/files/testOutOfRangeCustomPitch.nbs diff --git a/shared/tests/song/files/testSimple.nbs b/packages/song/tests/song/files/testSimple.nbs similarity index 100% rename from shared/tests/song/files/testSimple.nbs rename to packages/song/tests/song/files/testSimple.nbs diff --git a/shared/tests/song/files/testTempoChangerDifferentStart.nbs b/packages/song/tests/song/files/testTempoChangerDifferentStart.nbs similarity index 100% rename from shared/tests/song/files/testTempoChangerDifferentStart.nbs rename to packages/song/tests/song/files/testTempoChangerDifferentStart.nbs diff --git a/shared/tests/song/files/testTempoChangerMultipleInstruments.nbs b/packages/song/tests/song/files/testTempoChangerMultipleInstruments.nbs similarity index 100% rename from shared/tests/song/files/testTempoChangerMultipleInstruments.nbs rename to packages/song/tests/song/files/testTempoChangerMultipleInstruments.nbs diff --git a/shared/tests/song/files/testTempoChangerNoStart.nbs b/packages/song/tests/song/files/testTempoChangerNoStart.nbs similarity index 100% rename from shared/tests/song/files/testTempoChangerNoStart.nbs rename to packages/song/tests/song/files/testTempoChangerNoStart.nbs diff --git a/shared/tests/song/files/testTempoChangerOverlap.nbs b/packages/song/tests/song/files/testTempoChangerOverlap.nbs similarity index 100% rename from shared/tests/song/files/testTempoChangerOverlap.nbs rename to packages/song/tests/song/files/testTempoChangerOverlap.nbs diff --git a/shared/tests/song/files/testTempoChangerWithStart.nbs b/packages/song/tests/song/files/testTempoChangerWithStart.nbs similarity index 100% rename from shared/tests/song/files/testTempoChangerWithStart.nbs rename to packages/song/tests/song/files/testTempoChangerWithStart.nbs diff --git a/shared/tests/song/index.spec.ts b/packages/song/tests/song/index.spec.ts similarity index 98% rename from shared/tests/song/index.spec.ts rename to packages/song/tests/song/index.spec.ts index 50c76d6c..08b8d48c 100644 --- a/shared/tests/song/index.spec.ts +++ b/packages/song/tests/song/index.spec.ts @@ -1,7 +1,8 @@ +// @ts-nocheck // TODO: fix this import assert from 'assert'; import { openSongFromPath } from './util'; -import { SongStatsGenerator } from '../../features/song/stats'; +import { SongStatsGenerator } from '../../src/stats'; // TO RUN: // diff --git a/shared/tests/song/obfuscate.ts b/packages/song/tests/song/obfuscate.ts similarity index 100% rename from shared/tests/song/obfuscate.ts rename to packages/song/tests/song/obfuscate.ts diff --git a/shared/tests/song/util.ts b/packages/song/tests/song/util.ts similarity index 95% rename from shared/tests/song/util.ts rename to packages/song/tests/song/util.ts index ac07620c..40698920 100644 --- a/shared/tests/song/util.ts +++ b/packages/song/tests/song/util.ts @@ -20,6 +20,7 @@ function asArrayBuffer(buffer: Buffer): ArrayBuffer { const view = new Uint8Array(arrayBuffer); for (let i = 0; i < buffer.length; ++i) { + // @ts-ignore //TODO: fix this view[i] = buffer[i]; } diff --git a/packages/song/tsconfig.build.json b/packages/song/tsconfig.build.json new file mode 100644 index 00000000..83b5c1fc --- /dev/null +++ b/packages/song/tsconfig.build.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "emitDeclarationOnly": true, + "declaration": true, + "outDir": "dist" + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "dist", + "**/*.spec.ts", + "**/*.test.ts" + ] +} \ No newline at end of file diff --git a/packages/song/tsconfig.json b/packages/song/tsconfig.json new file mode 100644 index 00000000..9c62f74b --- /dev/null +++ b/packages/song/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} diff --git a/packages/sounds/.eslintrc.js b/packages/sounds/.eslintrc.js new file mode 100644 index 00000000..6e4765d0 --- /dev/null +++ b/packages/sounds/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['../.eslintrc.js'], +}; diff --git a/packages/sounds/.gitignore b/packages/sounds/.gitignore new file mode 100644 index 00000000..a14702c4 --- /dev/null +++ b/packages/sounds/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/sounds/README.md b/packages/sounds/README.md new file mode 100644 index 00000000..ed240c38 --- /dev/null +++ b/packages/sounds/README.md @@ -0,0 +1,15 @@ +# sounds + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.2.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/sounds/bun.lock b/packages/sounds/bun.lock new file mode 100644 index 00000000..591943e0 --- /dev/null +++ b/packages/sounds/bun.lock @@ -0,0 +1,29 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "sounds", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@types/node": ["@types/node@24.1.0", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w=="], + + "@types/react": ["@types/react@19.1.8", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g=="], + + "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], + } +} diff --git a/packages/sounds/jest.config.js b/packages/sounds/jest.config.js new file mode 100644 index 00000000..fb1e071a --- /dev/null +++ b/packages/sounds/jest.config.js @@ -0,0 +1,33 @@ +module.exports = { + moduleFileExtensions: ['js', 'json', 'ts'], + rootDir: '.', + testRegex: '.*\\.spec\\.ts$', + transform: { + '^.+\\.(t|j)s$': [ + 'ts-jest', + { + tsconfig: '/tsconfig.json', + ignoreCodes: ['TS151001'], + }, + ], + }, + collectCoverageFrom: ['**/*.(t|j)s'], + coverageDirectory: './coverage', + testEnvironment: 'node', + moduleNameMapper: { + '^@shared/(.*)$': '/../shared/$1', + '^@server/(.*)$': '/src/$1', + }, + testPathIgnorePatterns: [ + '/node_modules/', + '/dist/', + '/coverage/', + ], + coveragePathIgnorePatterns: [ + '/node_modules/', + '/coverage/', + '/dist/', + '.eslintrc.js', + 'jest.config.js', + ], +}; diff --git a/packages/sounds/package.json b/packages/sounds/package.json new file mode 100644 index 00000000..8fdd97c6 --- /dev/null +++ b/packages/sounds/package.json @@ -0,0 +1,27 @@ +{ + "name": "@nbw/sounds", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "private": true, + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts", + "development": "./src/index.ts" + } + }, + "scripts": { + "build": "bun run clean && bun build src/index.ts --outdir dist --target node && bun run build:types", + "build:types": "tsc --project tsconfig.build.json", + "clean": "rm -rf dist" + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "^5" + }, + "peerDependencies": { + "typescript": "^5" + } +} diff --git a/shared/features/sounds/fetchSoundList.ts b/packages/sounds/src/fetchSoundList.ts similarity index 94% rename from shared/features/sounds/fetchSoundList.ts rename to packages/sounds/src/fetchSoundList.ts index f2c75857..e1d07d7c 100644 --- a/shared/features/sounds/fetchSoundList.ts +++ b/packages/sounds/src/fetchSoundList.ts @@ -1,10 +1,10 @@ -import { AssetIndexData, VersionData, VersionManifest } from './types'; +import type { AssetIndexData, VersionData, VersionManifest } from './types'; const MANIFEST_URL = 'https://piston-meta.mojang.com/mc/game/version_manifest_v2.json'; async function fetchWithCache(url: string) { - const response = await fetch(url, { cache: 'force-cache' }); + const response = await fetch(url); console.log('fetchWithCache', url, response.status); return response.json(); } diff --git a/packages/sounds/src/index.ts b/packages/sounds/src/index.ts new file mode 100644 index 00000000..076e62ca --- /dev/null +++ b/packages/sounds/src/index.ts @@ -0,0 +1,3 @@ +export * from './fetchSoundList'; +export * from './types'; +export * from './util'; diff --git a/shared/features/sounds/types.ts b/packages/sounds/src/types.ts similarity index 100% rename from shared/features/sounds/types.ts rename to packages/sounds/src/types.ts diff --git a/shared/features/sounds/util.ts b/packages/sounds/src/util.ts similarity index 100% rename from shared/features/sounds/util.ts rename to packages/sounds/src/util.ts diff --git a/packages/sounds/tsconfig.build.json b/packages/sounds/tsconfig.build.json new file mode 100644 index 00000000..83b5c1fc --- /dev/null +++ b/packages/sounds/tsconfig.build.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "emitDeclarationOnly": true, + "declaration": true, + "outDir": "dist" + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "dist", + "**/*.spec.ts", + "**/*.test.ts" + ] +} \ No newline at end of file diff --git a/packages/sounds/tsconfig.json b/packages/sounds/tsconfig.json new file mode 100644 index 00000000..8515f746 --- /dev/null +++ b/packages/sounds/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "baseUrl": "./src", + // Environment setup & latest features + "lib": [ + "ESNext" + ], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} \ No newline at end of file diff --git a/packages/thumbnail/.eslintrc.js b/packages/thumbnail/.eslintrc.js new file mode 100644 index 00000000..6e4765d0 --- /dev/null +++ b/packages/thumbnail/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['../.eslintrc.js'], +}; diff --git a/packages/thumbnail/.gitignore b/packages/thumbnail/.gitignore new file mode 100644 index 00000000..a14702c4 --- /dev/null +++ b/packages/thumbnail/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/thumbnail/README.md b/packages/thumbnail/README.md new file mode 100644 index 00000000..3b8c86ac --- /dev/null +++ b/packages/thumbnail/README.md @@ -0,0 +1,15 @@ +# thumbnail + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.2.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/thumbnail/bun.lock b/packages/thumbnail/bun.lock new file mode 100644 index 00000000..567e0c32 --- /dev/null +++ b/packages/thumbnail/bun.lock @@ -0,0 +1,29 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "thumbnail", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@types/node": ["@types/node@24.1.0", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w=="], + + "@types/react": ["@types/react@19.1.8", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g=="], + + "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], + } +} diff --git a/packages/thumbnail/jest.config.js b/packages/thumbnail/jest.config.js new file mode 100644 index 00000000..fb1e071a --- /dev/null +++ b/packages/thumbnail/jest.config.js @@ -0,0 +1,33 @@ +module.exports = { + moduleFileExtensions: ['js', 'json', 'ts'], + rootDir: '.', + testRegex: '.*\\.spec\\.ts$', + transform: { + '^.+\\.(t|j)s$': [ + 'ts-jest', + { + tsconfig: '/tsconfig.json', + ignoreCodes: ['TS151001'], + }, + ], + }, + collectCoverageFrom: ['**/*.(t|j)s'], + coverageDirectory: './coverage', + testEnvironment: 'node', + moduleNameMapper: { + '^@shared/(.*)$': '/../shared/$1', + '^@server/(.*)$': '/src/$1', + }, + testPathIgnorePatterns: [ + '/node_modules/', + '/dist/', + '/coverage/', + ], + coveragePathIgnorePatterns: [ + '/node_modules/', + '/coverage/', + '/dist/', + '.eslintrc.js', + 'jest.config.js', + ], +}; diff --git a/packages/thumbnail/package.json b/packages/thumbnail/package.json new file mode 100644 index 00000000..20d73c03 --- /dev/null +++ b/packages/thumbnail/package.json @@ -0,0 +1,35 @@ +{ + "name": "@nbw/thumbnail", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "private": true, + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts", + "development": "./src/index.ts" + } + }, + "scripts": { + "build": "bun run clean && bun build src/index.ts --outdir dist --target node && bun run build:types", + "build:types": "tsc --project tsconfig.build.json", + "clean": "rm -rf dist" + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "^5", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", + "@types/tailwindcss": "3.1.0" + }, + "peerDependencies": { + "typescript": "^5" + }, + "dependencies": { + "@napi-rs/canvas": "^0.1.74", + "@nbw/song": "workspace:*", + "tailwindcss": "^4.1.11" + } +} diff --git a/shared/features/thumbnail/canvasFactory.ts b/packages/thumbnail/src/canvasFactory.ts similarity index 98% rename from shared/features/thumbnail/canvasFactory.ts rename to packages/thumbnail/src/canvasFactory.ts index c2eb9214..79c1900f 100644 --- a/shared/features/thumbnail/canvasFactory.ts +++ b/packages/thumbnail/src/canvasFactory.ts @@ -3,7 +3,7 @@ import type Path from 'path'; import type NapiRs from '@napi-rs/canvas'; -import { CanvasUtils } from './types'; +import type { CanvasUtils } from './types'; let canvasUtils: CanvasUtils; diff --git a/shared/features/thumbnail/colors.ts b/packages/thumbnail/src/colors.ts similarity index 90% rename from shared/features/thumbnail/colors.ts rename to packages/thumbnail/src/colors.ts index c32d1bfa..0237bbc0 100644 --- a/shared/features/thumbnail/colors.ts +++ b/packages/thumbnail/src/colors.ts @@ -22,16 +22,9 @@ Full list of colors is available at: https://tailwindcss.com/docs/customizing-colors */ +import colors from 'tailwindcss/colors'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import tailwindColors from 'tailwindcss/lib/public/colors'; - -import { deepFreeze } from '@shared/validation/common/deepFreeze'; - -const colors = tailwindColors as Record>; - -export const bgColors = deepFreeze({ +export const bgColors = { red: { key: 'red', name: 'Red', @@ -140,6 +133,6 @@ export const bgColors = deepFreeze({ light: colors.zinc[200], dark: colors.zinc[800], }, -}); +} as const; export const bgColorsArray = Object.values(bgColors); diff --git a/packages/thumbnail/src/index.ts b/packages/thumbnail/src/index.ts new file mode 100644 index 00000000..ea31e4b4 --- /dev/null +++ b/packages/thumbnail/src/index.ts @@ -0,0 +1,4 @@ +export * from './canvasFactory'; +export * from './colors'; +export * from './types'; +export * from './utils'; diff --git a/shared/features/thumbnail/types.ts b/packages/thumbnail/src/types.ts similarity index 95% rename from shared/features/thumbnail/types.ts rename to packages/thumbnail/src/types.ts index b58ddec8..69e0c061 100644 --- a/shared/features/thumbnail/types.ts +++ b/packages/thumbnail/src/types.ts @@ -1,7 +1,7 @@ import type NapiRs from '@napi-rs/canvas'; +import type { NoteQuadTree } from '@nbw/song'; import { DrawingCanvas, RenderedImage } from './canvasFactory'; -import { NoteQuadTree } from '../song/notes'; export interface DrawParams { notes: NoteQuadTree; diff --git a/shared/features/thumbnail/utils.spec.ts b/packages/thumbnail/src/utils.spec.ts similarity index 100% rename from shared/features/thumbnail/utils.spec.ts rename to packages/thumbnail/src/utils.spec.ts diff --git a/shared/features/thumbnail/utils.ts b/packages/thumbnail/src/utils.ts similarity index 97% rename from shared/features/thumbnail/utils.ts rename to packages/thumbnail/src/utils.ts index cd45266c..52ad53af 100644 --- a/shared/features/thumbnail/utils.ts +++ b/packages/thumbnail/src/utils.ts @@ -1,5 +1,5 @@ import { createCanvas } from './canvasFactory'; -import { Canvas, Image } from './types'; +import type { Canvas, Image } from './types'; export const instrumentColors = [ '#1964ac', diff --git a/packages/thumbnail/tsconfig.build.json b/packages/thumbnail/tsconfig.build.json new file mode 100644 index 00000000..83b5c1fc --- /dev/null +++ b/packages/thumbnail/tsconfig.build.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "emitDeclarationOnly": true, + "declaration": true, + "outDir": "dist" + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "dist", + "**/*.spec.ts", + "**/*.test.ts" + ] +} \ No newline at end of file diff --git a/packages/thumbnail/tsconfig.json b/packages/thumbnail/tsconfig.json new file mode 100644 index 00000000..2b35155a --- /dev/null +++ b/packages/thumbnail/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} \ No newline at end of file diff --git a/shared/features/sounds/index.ts b/shared/features/sounds/index.ts deleted file mode 100644 index 6028e275..00000000 --- a/shared/features/sounds/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './fetchSoundList'; diff --git a/shared/features/thumbnail/index.ts b/shared/features/thumbnail/index.ts deleted file mode 100644 index a14231ee..00000000 --- a/shared/features/thumbnail/index.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { - createCanvas, - noteBlockImage, - saveToImage, - useFont, -} from './canvasFactory'; -import { Canvas, DrawParams } from './types'; -import { getKeyText, instrumentColors, isDarkColor, tintImage } from './utils'; - -export { bgColorsArray } from './colors'; -useFont(); - -export const swap = async (src: Canvas, dst: Canvas) => { - /** - * Run a `drawFunction` that returns a canvas and draw it to the passed `canvas`. - * - * @param drawFunction - Function that draws to a canvas and returns it - * @param canvas - Canvas to draw the output of `drawFunction` to - * - * @returns Nothing - */ - // Get canvas context - const ctx = dst.getContext('2d'); - - if (!ctx) { - throw new Error('Could not get canvas context'); - } - - // Swap the canvas - ctx.drawImage(src, 0, 0); -}; - -export const drawNotesOffscreen = async ({ - notes, - startTick, - startLayer, - zoomLevel, - backgroundColor, - canvasWidth, - //canvasHeight, - imgWidth = 1280, - imgHeight = 768, -}: DrawParams) => { - // Create new offscreen canvas - const canvas = createCanvas(imgWidth, imgHeight); - const ctx = canvas.getContext('2d'); - - if (!ctx) { - throw new Error('Could not get offscreen canvas context'); - } - - // Disable anti-aliasing - ctx.imageSmoothingEnabled = false; - - // Calculate effective zoom level - const zoomFactor = 2 ** (zoomLevel - 1); - - // Set scale to draw image at correct thumbnail size - if (canvasWidth !== undefined) { - const scale = canvasWidth / imgWidth; - ctx.scale(scale, scale); - } - - const width = canvas.width; - const height = canvas.height; - - ctx.clearRect(0, 0, width, height); - - // Draw background - ctx.fillStyle = backgroundColor; - ctx.fillRect(0, 0, width, height); - - // Check if the background color is dark or light - const isDark = isDarkColor(backgroundColor, 90); - - if (isDark) { - ctx.fillStyle = 'rgba(255, 255, 255, 0.15)'; - } else { - ctx.fillStyle = 'rgba(0, 0, 0, 0.4)'; - } - - // Draw vertical lines - for (let i = 0; i < width; i += 8 * zoomFactor) { - ctx.fillRect(i, 0, 1, height); - } - - const loadedNoteBlockImage = await noteBlockImage; - - // Iterate through note blocks and draw them - const endTick = startTick + width / (zoomFactor * 8) - 1; - const endLayer = startLayer + height / (zoomFactor * 8) - 1; - - const visibleNotes = notes.getNotesInRect({ - x1: startTick, - y1: startLayer, - x2: endTick, - y2: endLayer, - }); - - visibleNotes.forEach(async (note) => { - // Calculate position - const x = (note.tick - startTick) * 8 * zoomFactor; - const y = (note.layer - startLayer) * 8 * zoomFactor; - const overlayColor = instrumentColors[note.instrument % 16]; - - if (!loadedNoteBlockImage) { - throw new Error('Note block image not loaded'); - } - - // Draw the note block - ctx.drawImage( - tintImage(loadedNoteBlockImage, overlayColor), - x, - y, - 8 * zoomFactor, - 8 * zoomFactor, - ); - - // Draw the key text - const keyText = getKeyText(note.key); - ctx.fillStyle = '#ffffff'; - ctx.font = `${3 * zoomFactor}px Lato`; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText(keyText, x + 4 * zoomFactor, y + 4 * zoomFactor); - }); - - return canvas; -}; - -export const drawToImage = async (params: DrawParams): Promise => { - let canvas; - const { imgWidth, imgHeight } = params; - - if (!canvas) { - canvas = createCanvas(imgWidth, imgHeight); - } - - const output = await drawNotesOffscreen(params); - const byteArray = await saveToImage(output); - - // Convert to Buffer - const buffer = Buffer.from(byteArray); - return buffer; -}; diff --git a/shared/package-lock.json b/shared/package-lock.json deleted file mode 100644 index 69e748f1..00000000 --- a/shared/package-lock.json +++ /dev/null @@ -1,481 +0,0 @@ -{ - "name": "noteblockworld-shared", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "noteblockworld-shared", - "version": "0.1.0", - "license": "UNLICENSED", - "dependencies": { - "@encode42/nbs.js": "^5.0.0", - "@nestjs/swagger": "^7.1.1", - "@timohausmann/quadtree-ts": "^2.2.2", - "canvas": "^2.11.2", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.0", - "express": "^4.18.2", - "jszip": "^3.10.1", - "tailwindcss": "3.4.1", - "unidecode": "^1.1.0" - }, - "devDependencies": { - "@types/express": "^4.17.17", - "@types/multer": "^1.4.11", - "@types/node": "^20.3.1", - "@types/unidecode": "^0.1.3", - "typescript": "^5.1.3" - } - }, - "../node_modules/.pnpm/@encode42+nbs.js@5.0.0/node_modules/@encode42/nbs.js": { - "version": "5.0.0", - "license": "MIT", - "devDependencies": { - "@biomejs/biome": "^1.5.3", - "@rollup/plugin-commonjs": "^25.0.7", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@types/jest": "^29.5.12", - "@types/node": "^20.11.16", - "esbuild": "^0.20.0", - "jest": "^29.7.0", - "rollup": "^4.9.6", - "rollup-plugin-dts": "^6.1.0", - "rollup-plugin-esbuild": "^6.1.1", - "rollup-plugin-node-externals": "^7.0.1", - "ts-jest": "^29.1.2", - "typedoc": "^0.25.7", - "typedoc-material-theme": "^1.0.2", - "typedoc-plugin-mdn-links": "^3.1.15", - "typescript": "^5.3.3" - }, - "engines": { - "node": ">=18", - "pnpm": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/encode42" - } - }, - "../node_modules/.pnpm/@nestjs+swagger@7.3.1_@nestjs+common@10.3.9_class-transformer@0.5.1_class-validator@0.14.1_re_5ni76uxgwxmoan75mrdyzhl72e/node_modules/@nestjs/swagger": { - "version": "7.3.1", - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "^0.14.2", - "@nestjs/mapped-types": "2.0.5", - "js-yaml": "4.1.0", - "lodash": "4.17.21", - "path-to-regexp": "3.2.0", - "swagger-ui-dist": "5.11.2" - }, - "devDependencies": { - "@commitlint/cli": "19.2.1", - "@commitlint/config-angular": "19.1.0", - "@fastify/static": "7.0.1", - "@nestjs/common": "10.3.7", - "@nestjs/core": "10.3.7", - "@nestjs/platform-express": "10.3.7", - "@nestjs/platform-fastify": "10.3.7", - "@types/jest": "29.5.12", - "@types/js-yaml": "4.0.9", - "@types/lodash": "4.17.0", - "@types/node": "20.11.30", - "@typescript-eslint/eslint-plugin": "7.4.0", - "@typescript-eslint/parser": "7.4.0", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "eslint": "8.57.0", - "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "2.29.1", - "express": "4.19.2", - "husky": "9.0.11", - "jest": "29.7.0", - "lint-staged": "15.2.2", - "openapi-types": "12.1.3", - "prettier": "2.8.8", - "reflect-metadata": "0.2.2", - "release-it": "17.1.1", - "supertest": "6.3.4", - "swagger-parser": "10.0.3", - "ts-jest": "29.1.2", - "typescript": "5.1.6" - }, - "peerDependencies": { - "@fastify/static": "^6.0.0 || ^7.0.0", - "@nestjs/common": "^9.0.0 || ^10.0.0", - "@nestjs/core": "^9.0.0 || ^10.0.0", - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0" - }, - "peerDependenciesMeta": { - "@fastify/static": { - "optional": true - }, - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "../node_modules/.pnpm/@timohausmann+quadtree-ts@2.2.2/node_modules/@timohausmann/quadtree-ts": { - "version": "2.2.2", - "license": "MIT", - "devDependencies": { - "@rollup/plugin-typescript": "^8.2.5", - "@tsconfig/recommended": "^1.0.1", - "@types/jest": "^27.0.1", - "@typescript-eslint/eslint-plugin": "^4.29.3", - "@typescript-eslint/parser": "^4.29.3", - "eslint": "^7.32.0", - "eslint-plugin-tsdoc": "^0.2.14", - "jest": "^27.1.0", - "rollup": "^2.56.2", - "rollup-plugin-banner2": "^1.2.2", - "rollup-plugin-copy": "^3.5.0", - "rollup-plugin-terser": "^7.0.2", - "ts-jest": "^27.0.5", - "tslib": "^2.3.1", - "typedoc": "^0.22.5", - "typescript": "^4.3.5" - } - }, - "../node_modules/.pnpm/@types+express@4.17.21/node_modules/@types/express": { - "version": "4.17.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "../node_modules/.pnpm/@types+multer@1.4.11/node_modules/@types/multer": { - "version": "1.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "../node_modules/.pnpm/@types+node@20.14.2/node_modules/@types/node": { - "version": "20.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "../node_modules/.pnpm/canvas@2.11.2/node_modules/canvas": { - "version": "2.11.2", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "devDependencies": { - "@types/node": "^10.12.18", - "assert-rejects": "^1.0.0", - "dtslint": "^4.0.7", - "express": "^4.16.3", - "js-yaml": "^4.1.0", - "mocha": "^5.2.0", - "pixelmatch": "^4.0.2", - "standard": "^12.0.1", - "typescript": "^4.2.2" - }, - "engines": { - "node": ">=6" - } - }, - "../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer": { - "version": "0.5.1", - "license": "MIT" - }, - "../node_modules/.pnpm/class-validator@0.14.1/node_modules/class-validator": { - "version": "0.14.1", - "license": "MIT", - "dependencies": { - "@types/validator": "^13.11.8", - "libphonenumber-js": "^1.10.53", - "validator": "^13.9.0" - } - }, - "../node_modules/.pnpm/express@4.19.2/node_modules/express": { - "version": "4.19.2", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "devDependencies": { - "after": "0.8.2", - "connect-redis": "3.4.2", - "cookie-parser": "1.4.6", - "cookie-session": "2.0.0", - "ejs": "3.1.9", - "eslint": "8.47.0", - "express-session": "1.17.2", - "hbs": "4.2.0", - "marked": "0.7.0", - "method-override": "3.0.0", - "mocha": "10.2.0", - "morgan": "1.10.0", - "nyc": "15.1.0", - "pbkdf2-password": "1.2.1", - "supertest": "6.3.0", - "vhost": "~3.0.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip": { - "version": "3.10.1", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - }, - "devDependencies": { - "benchmark": "^2.1.4", - "browserify": "~13.0.0", - "eslint": "^8.18.0", - "grunt": "~0.4.1", - "grunt-browserify": "~5.0.0", - "grunt-cli": "~1.1.0", - "grunt-contrib-uglify": "~4.0.1", - "http-server": "^13.0.2", - "jszip-utils": "~0.0.2", - "package-json-versionify": "1.0.2", - "playwright": "^1.15.2", - "qunit": "~2.9.2", - "tmp": "0.0.28", - "typescript": "^4.6.3" - } - }, - "../node_modules/.pnpm/tailwindcss@3.4.1_ts-node@10.9.2_@types+node@20.14.2_typescript@5.4.5_/node_modules/tailwindcss": { - "version": "3.4.1", - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.19.1", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "devDependencies": { - "@swc/cli": "^0.1.62", - "@swc/core": "^1.3.55", - "@swc/jest": "^0.2.26", - "@swc/register": "^0.1.10", - "autoprefixer": "^10.4.14", - "browserslist": "^4.21.5", - "concurrently": "^8.0.1", - "cssnano": "^6.0.0", - "esbuild": "^0.17.18", - "eslint": "^8.39.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-prettier": "^4.2.1", - "jest": "^29.6.0", - "jest-diff": "^29.6.0", - "lightningcss": "1.18.0", - "prettier": "^2.8.8", - "rimraf": "^5.0.0", - "source-map-js": "^1.0.2", - "turbo": "^1.9.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/typescript@5.4.5/node_modules/typescript": { - "version": "5.4.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "devDependencies": { - "@esfx/canceltoken": "^1.0.0", - "@octokit/rest": "^20.0.2", - "@types/chai": "^4.3.11", - "@types/glob": "^8.1.0", - "@types/microsoft__typescript-etw": "^0.1.3", - "@types/minimist": "^1.2.5", - "@types/mocha": "^10.0.6", - "@types/ms": "^0.7.34", - "@types/node": "latest", - "@types/source-map-support": "^0.5.10", - "@types/which": "^3.0.3", - "@typescript-eslint/eslint-plugin": "^6.19.0", - "@typescript-eslint/parser": "^6.19.0", - "@typescript-eslint/utils": "^6.19.0", - "azure-devops-node-api": "^12.3.0", - "c8": "^9.1.0", - "chai": "^4.4.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "diff": "^5.1.0", - "dprint": "^0.45.0", - "esbuild": "^0.20.0", - "eslint": "^8.56.0", - "eslint-formatter-autolinkable-stylish": "^1.3.0", - "eslint-plugin-local": "^3.1.0", - "eslint-plugin-no-null": "^1.0.2", - "eslint-plugin-simple-import-sort": "^10.0.0", - "fast-xml-parser": "^4.3.3", - "glob": "^10.3.10", - "hereby": "^1.8.9", - "jsonc-parser": "^3.2.0", - "minimist": "^1.2.8", - "mocha": "^10.2.0", - "mocha-fivemat-progress-reporter": "^0.1.0", - "ms": "^2.1.3", - "node-fetch": "^3.3.2", - "playwright": "^1.41.0", - "source-map-support": "^0.5.21", - "tslib": "^2.6.2", - "typescript": "5.4.0-dev.20240119", - "which": "^3.0.1" - }, - "engines": { - "node": ">=14.17" - } - }, - "../node_modules/.pnpm/unidecode@1.1.0/node_modules/unidecode": { - "version": "1.1.0", - "devDependencies": { - "conventional-changelog-cli": "^4.1.0", - "jshint": "^2.5.11", - "mocha": "^10.3.0", - "npm-release": "^1.0.0" - }, - "engines": { - "node": ">= 0.4.12" - } - }, - "node_modules/@encode42/nbs.js": { - "resolved": "../node_modules/.pnpm/@encode42+nbs.js@5.0.0/node_modules/@encode42/nbs.js", - "link": true - }, - "node_modules/@nestjs/swagger": { - "resolved": "../node_modules/.pnpm/@nestjs+swagger@7.3.1_@nestjs+common@10.3.9_class-transformer@0.5.1_class-validator@0.14.1_re_5ni76uxgwxmoan75mrdyzhl72e/node_modules/@nestjs/swagger", - "link": true - }, - "node_modules/@timohausmann/quadtree-ts": { - "resolved": "../node_modules/.pnpm/@timohausmann+quadtree-ts@2.2.2/node_modules/@timohausmann/quadtree-ts", - "link": true - }, - "node_modules/@types/express": { - "resolved": "../node_modules/.pnpm/@types+express@4.17.21/node_modules/@types/express", - "link": true - }, - "node_modules/@types/multer": { - "resolved": "../node_modules/.pnpm/@types+multer@1.4.11/node_modules/@types/multer", - "link": true - }, - "node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@20.14.2/node_modules/@types/node", - "link": true - }, - "node_modules/@types/unidecode": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@types/unidecode/-/unidecode-0.1.3.tgz", - "integrity": "sha512-7R8zgAf8y1qq5Zif6UIXYR07MHvJIjcQM9Ym2am1YXaWdn9zJltLDwO8HpmIIjHiNT4VMGiNAw+UI9S7OM2foA==", - "dev": true - }, - "node_modules/canvas": { - "resolved": "../node_modules/.pnpm/canvas@2.11.2/node_modules/canvas", - "link": true - }, - "node_modules/class-transformer": { - "resolved": "../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer", - "link": true - }, - "node_modules/class-validator": { - "resolved": "../node_modules/.pnpm/class-validator@0.14.1/node_modules/class-validator", - "link": true - }, - "node_modules/express": { - "resolved": "../node_modules/.pnpm/express@4.19.2/node_modules/express", - "link": true - }, - "node_modules/jszip": { - "resolved": "../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip", - "link": true - }, - "node_modules/tailwindcss": { - "resolved": "../node_modules/.pnpm/tailwindcss@3.4.1_ts-node@10.9.2_@types+node@20.14.2_typescript@5.4.5_/node_modules/tailwindcss", - "link": true - }, - "node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@5.4.5/node_modules/typescript", - "link": true - }, - "node_modules/unidecode": { - "resolved": "../node_modules/.pnpm/unidecode@1.1.0/node_modules/unidecode", - "link": true - } - } -} diff --git a/shared/package.json b/shared/package.json deleted file mode 100644 index a6f9d501..00000000 --- a/shared/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "noteblockworld-shared", - "version": "0.1.0", - "description": "Shared packages for noteblockworld", - "keywords": [], - "author": "", - "license": "UNLICENSED", - "scripts": { - "lint": "eslint */**/*.ts --fix", - "test": "jest", - "tsc": "tsc" - }, - "dependencies": { - "@encode42/nbs.js": "^5.0.2", - "@napi-rs/canvas": "^0.1.53", - "@nestjs/swagger": "^7.1.1", - "@timohausmann/quadtree-ts": "^2.2.2", - "@types/unidecode": "^0.1.3", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.0", - "express": "^4.18.2", - "jszip": "^3.10.1", - "tailwindcss": "3.4.1", - "unidecode": "^1.1.0" - }, - "devDependencies": { - "@types/bun": "^1.2.10", - "@types/express": "^4.17.17", - "@types/jest": "^29.5.2", - "@types/multer": "^1.4.11", - "@types/node": "^20.3.1", - "jest": "^29.5.0", - "ts-jest": "^29.1.0", - "typescript": "^5.1.3" - } -} diff --git a/shared/tsconfig.json b/shared/tsconfig.json deleted file mode 100644 index 96e0cd1f..00000000 --- a/shared/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "module": "nodenext", - "moduleResolution": "nodenext", - "resolvePackageJsonImports": true, - "target": "es6", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "isolatedModules": true, - "strictPropertyInitialization": false, - "jsx": "preserve", - "plugins": [ - { - "name": "next" - } - ] - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/shared/validation/common/deepFreeze.ts b/shared/validation/common/deepFreeze.ts deleted file mode 100644 index 71b93589..00000000 --- a/shared/validation/common/deepFreeze.ts +++ /dev/null @@ -1,16 +0,0 @@ -export function deepFreeze( - object: T, -): Readonly { - const propNames = Object.getOwnPropertyNames(object); - - for (const name of propNames) { - const value = object[name]; - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - object[name] = - value && typeof value === 'object' ? deepFreeze(value) : value; - } - - return Object.freeze(object); -} diff --git a/shared/validation/common/dto/PageQuery.dto.ts b/shared/validation/common/dto/PageQuery.dto.ts deleted file mode 100644 index b1ea53d3..00000000 --- a/shared/validation/common/dto/PageQuery.dto.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { Transform } from 'class-transformer'; -import { - IsBoolean, - IsEnum, - IsNotEmpty, - IsNumber, - IsOptional, - IsString, - Max, - Min, -} from 'class-validator'; - -import { timespans } from '@shared/validation/song/constants'; -import type { TimespanType } from '@shared/validation/song/dto/types'; - -export class PageQueryDTO { - @Min(1) - @ApiProperty({ - example: 1, - description: 'page', - }) - page?: number = 1; - - @IsNotEmpty() - @IsNumber({ - allowNaN: false, - allowInfinity: false, - maxDecimalPlaces: 0, - }) - @Min(1) - @Max(100) - @ApiProperty({ - example: 20, - description: 'limit', - }) - limit?: number; - - @IsString() - @IsOptional() - @ApiProperty({ - example: 'field', - description: 'Sorts the results by the specified field.', - required: false, - }) - sort?: string = 'createdAt'; - - @IsBoolean() - @Transform(({ value }) => value === 'true') - @ApiProperty({ - example: false, - description: - 'Sorts the results in ascending order if true; in descending order if false.', - required: false, - }) - order?: boolean = false; - - @IsEnum(timespans) - @IsOptional() - @ApiProperty({ - example: 'hour', - description: 'Filters the results by the specified timespan.', - required: false, - }) - timespan?: TimespanType; - - constructor(partial: Partial) { - Object.assign(this, partial); - } -} diff --git a/shared/validation/common/dto/types.ts b/shared/validation/common/dto/types.ts deleted file mode 100644 index 2b92e50b..00000000 --- a/shared/validation/common/dto/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { PageQueryDTO } from './PageQuery.dto'; - -export type PageQueryDTOType = InstanceType; diff --git a/shared/validation/song/constants.ts b/shared/validation/song/constants.ts deleted file mode 100644 index db09b939..00000000 --- a/shared/validation/song/constants.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { bgColors } from '@shared/features/thumbnail/colors'; - -import { deepFreeze } from '../common/deepFreeze'; - -export const ThumbnailConst = deepFreeze({ - zoomLevel: { - min: 1, - max: 5, - default: 3, - }, - startTick: { - default: 0, - }, - startLayer: { - default: 0, - }, - backgroundColor: { - default: bgColors.gray.dark, - }, -}); - -export const MIMETYPE_NBS = 'application/octet-stream'; - -export const UploadConst = deepFreeze({ - file: { - maxSize: 1024 * 1024 * 3, // 3 MB - }, - - title: { - minLength: 3, - maxLength: 100, - }, - - description: { - maxLength: 1000, - }, - - originalAuthor: { - maxLength: 50, - }, - - category: { - default: 'none', - }, - - license: { - default: 'none', - }, - - customInstruments: { - maxCount: 240, - }, - - categories: { - none: 'No category', - rock: 'Rock', - pop: 'Pop', - jazz: 'Jazz', - blues: 'Blues', - country: 'Country', - metal: 'Metal', - hiphop: 'Hip-Hop', - rap: 'Rap', - reggae: 'Reggae', - classical: 'Classical', - electronic: 'Electronic', - dance: 'Dance', - rnb: 'R&B', - soul: 'Soul', - funk: 'Funk', - punk: 'Punk', - alternative: 'Alternative', - indie: 'Indie', - folk: 'Folk', - latin: 'Latin', - world: 'World', - other: 'Other', - vocaloid: 'Vocaloid', - soundtrack: 'Soundtrack', - instrumental: 'Instrumental', - ambient: 'Ambient', - gaming: 'Gaming', - anime: 'Anime', - movies_tv: 'Movies & TV', - chiptune: 'Chiptune', - lofi: 'Lofi', - kpop: 'K-pop', - jpop: 'J-pop', - }, - - licenses: { - standard: { - name: 'Standard License', - shortName: 'Standard License', - description: - "The author reserves all rights. You may not use this song without the author's permission.", - uploadDescription: - 'You allow us to distribute your song on Note Block World. Other users can listen to it, but they cannot use the song without your permission.', - }, - cc_by_sa: { - name: 'Creative Commons - Attribution-ShareAlike 4.0', - shortName: 'CC BY-SA 4.0', - description: - 'You can copy, modify, and distribute this song, even for commercial purposes, as long as you credit the author and provide a link to the song. If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.\n\nFor more information, please visit the [Creative Commons website](https://creativecommons.org/licenses/by-sa/4.0/).', - uploadDescription: - 'Anyone can copy, modify, remix, adapt and distribute this song, even for commercial purposes, as long as attribution is provided and the modifications are distributed under the same license.\nFor more information, visit the [Creative Commons](https://creativecommons.org/licenses/by-sa/4.0/) website.', - }, - }, - - visibility: { - public: 'Public', - private: 'Private', - }, -}); - -export const timespans = [ - 'hour', - 'day', - 'week', - 'month', - 'year', - 'all', -] as const; - -export const MY_SONGS = deepFreeze({ - PAGE_SIZE: 10, - SORT: 'createdAt', -}); - -export const BROWSER_SONGS = deepFreeze({ - featuredPageSize: 10, - paddedFeaturedPageSize: 5, -}); diff --git a/shared/validation/song/dto/CustomInstrumentData.dto.ts b/shared/validation/song/dto/CustomInstrumentData.dto.ts deleted file mode 100644 index 8cb3e835..00000000 --- a/shared/validation/song/dto/CustomInstrumentData.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { IsNotEmpty } from 'class-validator'; - -export class CustomInstrumentData { - @IsNotEmpty() - sound: string[]; -} diff --git a/shared/validation/song/dto/FeaturedSongsDto.dtc.ts b/shared/validation/song/dto/FeaturedSongsDto.dtc.ts deleted file mode 100644 index 65d6eff7..00000000 --- a/shared/validation/song/dto/FeaturedSongsDto.dtc.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { SongPreviewDto } from './SongPreview.dto'; - -export class FeaturedSongsDto { - hour: SongPreviewDto[]; - day: SongPreviewDto[]; - week: SongPreviewDto[]; - month: SongPreviewDto[]; - year: SongPreviewDto[]; - all: SongPreviewDto[]; - - public static create(): FeaturedSongsDto { - return { - hour: [], - day: [], - week: [], - month: [], - year: [], - all: [], - }; - } -} diff --git a/shared/validation/song/dto/SongPageDto.ts b/shared/validation/song/dto/SongPageDto.ts deleted file mode 100644 index 4e1e0a70..00000000 --- a/shared/validation/song/dto/SongPageDto.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { IsArray, IsNotEmpty, IsNumber, ValidateNested } from 'class-validator'; - -import { SongPreviewDto } from './SongPreview.dto'; - -export class SongPageDto { - @IsNotEmpty() - @IsArray() - @ValidateNested() - content: Array; - - @IsNotEmpty() - @IsNumber({ - allowNaN: false, - allowInfinity: false, - maxDecimalPlaces: 0, - }) - page: number; - - @IsNotEmpty() - @IsNumber({ - allowNaN: false, - allowInfinity: false, - maxDecimalPlaces: 0, - }) - limit: number; - - @IsNotEmpty() - @IsNumber({ - allowNaN: false, - allowInfinity: false, - maxDecimalPlaces: 0, - }) - total: number; -} diff --git a/shared/validation/song/dto/SongPreview.dto.ts b/shared/validation/song/dto/SongPreview.dto.ts deleted file mode 100644 index cdf7ad91..00000000 --- a/shared/validation/song/dto/SongPreview.dto.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { IsNotEmpty, IsString, IsUrl, MaxLength } from 'class-validator'; - -import { SongWithUser } from '../../../../server/src/song/entity/song.entity'; - -type SongPreviewUploader = { - username: string; - profileImage: string; -}; - -export class SongPreviewDto { - @IsString() - @IsNotEmpty() - publicId: string; - - @IsNotEmpty() - uploader: SongPreviewUploader; - - @IsNotEmpty() - @IsString() - @MaxLength(128) - title: string; - - @IsNotEmpty() - @IsString() - description: string; - - @IsNotEmpty() - @IsString() - @MaxLength(64) - originalAuthor: string; - - @IsNotEmpty() - duration: number; - - @IsNotEmpty() - noteCount: number; - - @IsNotEmpty() - @IsUrl() - thumbnailUrl: string; - - @IsNotEmpty() - createdAt: Date; - - @IsNotEmpty() - updatedAt: Date; - - @IsNotEmpty() - playCount: number; - - @IsNotEmpty() - @IsString() - visibility: string; - - constructor(partial: Partial) { - Object.assign(this, partial); - } - - public static fromSongDocumentWithUser(song: SongWithUser): SongPreviewDto { - return new SongPreviewDto({ - publicId: song.publicId, - uploader: song.uploader, - title: song.title, - description: song.description, - originalAuthor: song.originalAuthor, - duration: song.stats.duration, - noteCount: song.stats.noteCount, - thumbnailUrl: song.thumbnailUrl, - createdAt: song.createdAt, - updatedAt: song.updatedAt, - playCount: song.playCount, - visibility: song.visibility, - }); - } -} diff --git a/shared/validation/song/dto/SongStats.ts b/shared/validation/song/dto/SongStats.ts deleted file mode 100644 index 49cb712b..00000000 --- a/shared/validation/song/dto/SongStats.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { - IsBoolean, - IsInt, - IsNumber, - IsString, - ValidateIf, -} from 'class-validator'; - -export class SongStats { - @IsString() - midiFileName: string; - - @IsInt() - noteCount: number; - - @IsInt() - tickCount: number; - - @IsInt() - layerCount: number; - - @IsNumber() - tempo: number; - - @IsNumber() - @ValidateIf((_, value) => value !== null) - tempoRange: number[] | null; - - @IsNumber() - timeSignature: number; - - @IsNumber() - duration: number; - - @IsBoolean() - loop: boolean; - - @IsInt() - loopStartTick: number; - - @IsNumber() - minutesSpent: number; - - @IsInt() - vanillaInstrumentCount: number; - - @IsInt() - customInstrumentCount: number; - - @IsInt() - firstCustomInstrumentIndex: number; - - @IsInt() - outOfRangeNoteCount: number; - - @IsInt() - detunedNoteCount: number; - - @IsInt() - customInstrumentNoteCount: number; - - @IsInt() - incompatibleNoteCount: number; - - @IsBoolean() - compatible: boolean; - - instrumentNoteCounts: number[]; -} diff --git a/shared/validation/song/dto/SongView.dto.ts b/shared/validation/song/dto/SongView.dto.ts deleted file mode 100644 index e4450e3f..00000000 --- a/shared/validation/song/dto/SongView.dto.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { - IsBoolean, - IsDate, - IsNotEmpty, - IsNumber, - IsString, - IsUrl, -} from 'class-validator'; - -import { SongStats } from '@shared/validation/song/dto/SongStats'; - -import type { CategoryType, LicenseType, VisibilityType } from './types'; -import { SongDocument } from '../../../../server/src/song/entity/song.entity'; - -export type SongViewUploader = { - username: string; - profileImage: string; -}; - -export class SongViewDto { - @IsString() - @IsNotEmpty() - publicId: string; - - @IsDate() - @IsNotEmpty() - createdAt: Date; - - @IsNotEmpty() - uploader: SongViewUploader; - - @IsUrl() - @IsNotEmpty() - thumbnailUrl: string; - - @IsNumber() - @IsNotEmpty() - playCount: number; - - @IsNumber() - @IsNotEmpty() - downloadCount: number; - - @IsNumber() - @IsNotEmpty() - likeCount: number; - - @IsBoolean() - @IsNotEmpty() - allowDownload: boolean; - - @IsString() - @IsNotEmpty() - title: string; - - @IsString() - originalAuthor: string; - - @IsString() - description: string; - - @IsString() - @IsNotEmpty() - visibility: VisibilityType; - - @IsString() - @IsNotEmpty() - category: CategoryType; - - @IsString() - @IsNotEmpty() - license: LicenseType; - - customInstruments: string[]; - - @IsNumber() - @IsNotEmpty() - fileSize: number; - - @IsNotEmpty() - stats: SongStats; - - public static fromSongDocument(song: SongDocument): SongViewDto { - return new SongViewDto({ - publicId: song.publicId, - createdAt: song.createdAt, - uploader: song.uploader as unknown as SongViewUploader, - thumbnailUrl: song.thumbnailUrl, - playCount: song.playCount, - downloadCount: song.downloadCount, - likeCount: song.likeCount, - allowDownload: song.allowDownload, - title: song.title, - originalAuthor: song.originalAuthor, - description: song.description, - category: song.category, - visibility: song.visibility, - license: song.license, - customInstruments: song.customInstruments, - fileSize: song.fileSize, - stats: song.stats, - }); - } - - constructor(song: SongViewDto) { - Object.assign(this, song); - } -} diff --git a/shared/validation/song/dto/ThumbnailData.dto.ts b/shared/validation/song/dto/ThumbnailData.dto.ts deleted file mode 100644 index cdeff8d9..00000000 --- a/shared/validation/song/dto/ThumbnailData.dto.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsHexColor, IsInt, IsNotEmpty, Max, Min } from 'class-validator'; - -import { ThumbnailConst } from '../constants'; - -export class ThumbnailData { - @IsNotEmpty() - @Max(ThumbnailConst.zoomLevel.max) - @Min(ThumbnailConst.zoomLevel.min) - @IsInt() - @ApiProperty({ - description: 'Zoom level of the cover image', - example: ThumbnailConst.zoomLevel.default, - }) - zoomLevel: number; - - @IsNotEmpty() - @Min(0) - @IsInt() - @ApiProperty({ - description: 'X position of the cover image', - example: ThumbnailConst.startTick.default, - }) - startTick: number; - - @IsNotEmpty() - @Min(0) - @ApiProperty({ - description: 'Y position of the cover image', - example: ThumbnailConst.startLayer.default, - }) - startLayer: number; - - @IsNotEmpty() - @IsHexColor() - @ApiProperty({ - description: 'Background color of the cover image', - example: ThumbnailConst.backgroundColor.default, - }) - backgroundColor: string; - - static getApiExample(): ThumbnailData { - return { - zoomLevel: 3, - startTick: 0, - startLayer: 0, - backgroundColor: '#F0F0F0', - }; - } -} diff --git a/shared/validation/song/dto/UploadSongDto.dto.ts b/shared/validation/song/dto/UploadSongDto.dto.ts deleted file mode 100644 index 6ee1199f..00000000 --- a/shared/validation/song/dto/UploadSongDto.dto.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { Transform, Type } from 'class-transformer'; -import { - IsArray, - IsBoolean, - IsIn, - IsNotEmpty, - IsString, - MaxLength, - ValidateNested, -} from 'class-validator'; - -import { UploadConst } from '@shared/validation/song/constants'; - -import { ThumbnailData } from './ThumbnailData.dto'; -import type { CategoryType, LicenseType, VisibilityType } from './types'; -import { SongDocument } from '../../../../server/src/song/entity/song.entity'; - -const visibility = Object.keys(UploadConst.visibility) as Readonly; -const categories = Object.keys(UploadConst.categories) as Readonly; -const licenses = Object.keys(UploadConst.licenses) as Readonly; - -export class UploadSongDto { - @ApiProperty({ - description: 'The file to upload', - type: 'file', - }) - file: any; //TODO: Express.Multer.File; - - @IsNotEmpty() - @IsBoolean() - @Type(() => Boolean) - @ApiProperty({ - default: true, - description: 'Whether the song can be downloaded by other users', - example: true, - }) - allowDownload: boolean; - - @IsNotEmpty() - @IsString() - @IsIn(visibility) - @ApiProperty({ - enum: visibility, - default: visibility[0], - description: 'The visibility of the song', - example: visibility[0], - }) - visibility: VisibilityType; - - @IsNotEmpty() - @IsString() - @MaxLength(UploadConst.title.maxLength) - @ApiProperty({ - description: 'Title of the song', - example: 'My Song', - }) - title: string; - - @IsString() - @MaxLength(UploadConst.originalAuthor.maxLength) - @ApiProperty({ - description: 'Original author of the song', - example: 'Myself', - }) - originalAuthor: string; - - @IsString() - @MaxLength(UploadConst.description.maxLength) - @ApiProperty({ - description: 'Description of the song', - example: 'This is my song', - }) - description: string; - - @IsNotEmpty() - @IsString() - @IsIn(categories) - @ApiProperty({ - enum: categories, - description: 'Category of the song', - example: categories[0], - }) - category: CategoryType; - - @IsNotEmpty() - @ValidateNested() - @Type(() => ThumbnailData) - @Transform(({ value }) => JSON.parse(value)) - @ApiProperty({ - description: 'Thumbnail data of the song', - example: ThumbnailData.getApiExample(), - }) - thumbnailData: ThumbnailData; - - @IsNotEmpty() - @IsString() - @IsIn(licenses) - @ApiProperty({ - enum: licenses, - default: licenses[0], - description: 'The visibility of the song', - example: licenses[0], - }) - license: LicenseType; - - @IsArray() - @MaxLength(UploadConst.customInstruments.maxCount, { each: true }) - @ApiProperty({ - description: - 'List of custom instrument paths, one for each custom instrument in the song, relative to the assets/minecraft/sounds folder', - }) - @Transform(({ value }) => JSON.parse(value)) - customInstruments: string[]; - - constructor(partial: Partial) { - Object.assign(this, partial); - } - - public static fromSongDocument(song: SongDocument): UploadSongDto { - return new UploadSongDto({ - allowDownload: song.allowDownload, - visibility: song.visibility, - title: song.title, - originalAuthor: song.originalAuthor, - description: song.description, - category: song.category, - thumbnailData: song.thumbnailData, - license: song.license, - customInstruments: song.customInstruments ?? [], - }); - } -} diff --git a/shared/validation/song/dto/UploadSongResponseDto.dto.ts b/shared/validation/song/dto/UploadSongResponseDto.dto.ts deleted file mode 100644 index 2a488430..00000000 --- a/shared/validation/song/dto/UploadSongResponseDto.dto.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { Transform, Type } from 'class-transformer'; -import { - IsNotEmpty, - IsString, - MaxLength, - ValidateNested, -} from 'class-validator'; - -import * as SongViewDto from './SongView.dto'; -import { ThumbnailData } from './ThumbnailData.dto'; -import { SongWithUser } from '../../../../server/src/song/entity/song.entity'; - -export class UploadSongResponseDto { - @IsString() - @IsNotEmpty() - @ApiProperty({ - description: 'ID of the song', - example: '1234567890abcdef12345678', - }) - publicId: string; - - @IsNotEmpty() - @IsString() - @MaxLength(128) - @ApiProperty({ - description: 'Title of the song', - example: 'My Song', - }) - title: string; - - @IsString() - @MaxLength(64) - @ApiProperty({ - description: 'Original author of the song', - example: 'Myself', - }) - uploader: SongViewDto.SongViewUploader; - - @IsNotEmpty() - @ValidateNested() - @Type(() => ThumbnailData) - @Transform(({ value }) => JSON.parse(value)) - @ApiProperty({ - description: 'Thumbnail data of the song', - example: ThumbnailData.getApiExample(), - }) - thumbnailUrl: string; - - @IsNotEmpty() - duration: number; - - @IsNotEmpty() - noteCount: number; - - constructor(partial: Partial) { - Object.assign(this, partial); - } - - public static fromSongWithUserDocument( - song: SongWithUser, - ): UploadSongResponseDto { - return new UploadSongResponseDto({ - publicId: song.publicId, - title: song.title, - uploader: song.uploader, - duration: song.stats.duration, - thumbnailUrl: song.thumbnailUrl, - noteCount: song.stats.noteCount, - }); - } -} diff --git a/shared/validation/song/dto/types.ts b/shared/validation/song/dto/types.ts deleted file mode 100644 index 62841989..00000000 --- a/shared/validation/song/dto/types.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { CustomInstrumentData } from './CustomInstrumentData.dto'; -import { FeaturedSongsDto } from './FeaturedSongsDto.dtc'; -import { SongPageDto } from './SongPageDto'; -import { SongPreviewDto } from './SongPreview.dto'; -import { SongViewDto } from './SongView.dto'; -import { ThumbnailData as ThumbnailData } from './ThumbnailData.dto'; -import { UploadSongDto } from './UploadSongDto.dto'; -import { UploadSongResponseDto } from './UploadSongResponseDto.dto'; -import { UploadConst, timespans } from '../constants'; - -export type UploadSongDtoType = InstanceType; - -export type UploadSongNoFileDtoType = Omit; - -export type UploadSongResponseDtoType = InstanceType< - typeof UploadSongResponseDto ->; - -export type SongViewDtoType = InstanceType; - -export type SongPreviewDtoType = InstanceType; - -export type SongPageDtoType = InstanceType; - -export type CustomInstrumentDataType = InstanceType< - typeof CustomInstrumentData ->; - -export type FeaturedSongsDtoType = InstanceType; - -export type ThumbnailDataType = InstanceType; - -export type VisibilityType = keyof typeof UploadConst.visibility; - -export type CategoryType = keyof typeof UploadConst.categories; - -export type LicenseType = keyof typeof UploadConst.licenses; - -export type SongsFolder = Record; - -export type TimespanType = (typeof timespans)[number]; diff --git a/shared/validation/user/constants.ts b/shared/validation/user/constants.ts deleted file mode 100644 index 56b0ac79..00000000 --- a/shared/validation/user/constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { deepFreeze } from '../common/deepFreeze'; - -export const UserConst = deepFreeze({ - USERNAME_MIN_LENGTH: 3, - USERNAME_MAX_LENGTH: 32, - ALLOWED_REGEXP: /^[a-zA-Z0-9-_.]*$/, -}); diff --git a/shared/validation/user/dto/CreateUser.dto.ts b/shared/validation/user/dto/CreateUser.dto.ts deleted file mode 100644 index ec6ca8f8..00000000 --- a/shared/validation/user/dto/CreateUser.dto.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { - IsEmail, - IsNotEmpty, - IsString, - IsUrl, - MaxLength, -} from 'class-validator'; - -export class CreateUser { - @IsNotEmpty() - @IsString() - @MaxLength(64) - @IsEmail() - @ApiProperty({ - description: 'Email of the user', - example: 'vycasnicolas@gmailcom', - }) - email: string; - - @IsNotEmpty() - @IsString() - @MaxLength(64) - @ApiProperty({ - description: 'Username of the user', - example: 'tomast1137', - }) - username: string; - - @IsNotEmpty() - @IsUrl() - @ApiProperty({ - description: 'Profile image of the user', - example: 'https://example.com/image.png', - }) - profileImage: string; - - constructor(partial: Partial) { - Object.assign(this, partial); - } -} diff --git a/shared/validation/user/dto/GetUser.dto.ts b/shared/validation/user/dto/GetUser.dto.ts deleted file mode 100644 index 3feb46a3..00000000 --- a/shared/validation/user/dto/GetUser.dto.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { - IsEmail, - IsMongoId, - IsOptional, - IsString, - MaxLength, - MinLength, -} from 'class-validator'; - -export class GetUser { - @IsString() - @IsOptional() - @MaxLength(64) - @IsEmail() - @ApiProperty({ - description: 'Email of the user', - example: 'vycasnicolas@gmailcom', - }) - email?: string; - - @IsString() - @IsOptional() - @MaxLength(64) - @ApiProperty({ - description: 'Username of the user', - example: 'tomast1137', - }) - username?: string; - - @IsString() - @IsOptional() - @MaxLength(64) - @MinLength(24) - @IsMongoId() - @ApiProperty({ - description: 'ID of the user', - example: 'replace0me6b5f0a8c1a6d8c', - }) - id?: string; - - constructor(partial: Partial) { - Object.assign(this, partial); - } -} diff --git a/shared/validation/user/dto/Login.dto copy.ts b/shared/validation/user/dto/Login.dto copy.ts deleted file mode 100644 index b433a0d2..00000000 --- a/shared/validation/user/dto/Login.dto copy.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString } from 'class-validator'; - -export class LoginDto { - @ApiProperty() - @IsString() - @IsNotEmpty() - public email: string; -} diff --git a/shared/validation/user/dto/LoginWithEmail.dto.ts b/shared/validation/user/dto/LoginWithEmail.dto.ts deleted file mode 100644 index 27c2d9cc..00000000 --- a/shared/validation/user/dto/LoginWithEmail.dto.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString } from 'class-validator'; - -export class LoginWithEmailDto { - @ApiProperty() - @IsString() - @IsNotEmpty() - public email: string; -} diff --git a/shared/validation/user/dto/NewEmailUser.dto.ts b/shared/validation/user/dto/NewEmailUser.dto.ts deleted file mode 100644 index 33be8301..00000000 --- a/shared/validation/user/dto/NewEmailUser.dto.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { - IsEmail, - IsNotEmpty, - IsString, - MaxLength, - MinLength, -} from 'class-validator'; - -export class NewEmailUserDto { - @ApiProperty({ - description: 'User name', - example: 'Tomast1337', - }) - @IsString() - @IsNotEmpty() - @MaxLength(64) - @MinLength(4) - username: string; - - @ApiProperty({ - description: 'User email', - example: 'vycasnicolas@gmail.com', - }) - @IsString() - @IsNotEmpty() - @MaxLength(64) - @IsEmail() - email: string; -} diff --git a/shared/validation/user/dto/SingleUsePass.dto.ts b/shared/validation/user/dto/SingleUsePass.dto.ts deleted file mode 100644 index e1e04c25..00000000 --- a/shared/validation/user/dto/SingleUsePass.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString } from 'class-validator'; - -export class SingleUsePassDto { - @ApiProperty() - @IsString() - @IsNotEmpty() - id: string; - - @ApiProperty() - @IsString() - @IsNotEmpty() - pass: string; -} diff --git a/shared/validation/user/dto/UpdateUsername.dto.ts b/shared/validation/user/dto/UpdateUsername.dto.ts deleted file mode 100644 index e64e8940..00000000 --- a/shared/validation/user/dto/UpdateUsername.dto.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsString, Matches, MaxLength, MinLength } from 'class-validator'; - -import { UserConst } from '../constants'; - -export class UpdateUsernameDto { - @IsString() - @MaxLength(UserConst.USERNAME_MAX_LENGTH) - @MinLength(UserConst.USERNAME_MIN_LENGTH) - @Matches(UserConst.ALLOWED_REGEXP) - @ApiProperty({ - description: 'Username of the user', - example: 'tomast1137', - }) - username: string; -} From b4ecf421807c6a3722be87a1d52b689d4e6a456b Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 19:58:52 -0300 Subject: [PATCH 02/17] refactor: moved backend to packages --- .../backend}/.env.development.example | 0 {server => packages/backend}/.eslintrc.json | 0 {server => packages/backend}/.gitignore | 0 {server => packages/backend}/README.md | 0 .../backend}/assets/fonts/Lato-Regular.ttf | Bin .../assets/img/note-block-grayscale.png | Bin {server => packages/backend}/jest.config.js | 0 {server => packages/backend}/nest-cli.json | 0 {server => packages/backend}/package.json | 8 +- packages/backend/public/data/soundList.json | 3857 +++++++++++++++++ {server => packages/backend}/scripts/build.ts | 0 .../backend}/src/app.module.ts | 0 .../backend}/src/auth/auth.controller.spec.ts | 0 .../backend}/src/auth/auth.controller.ts | 0 .../backend}/src/auth/auth.module.ts | 0 .../backend}/src/auth/auth.service.spec.ts | 0 .../backend}/src/auth/auth.service.ts | 2 +- .../src/auth/strategies/JWT.strategy.spec.ts | 0 .../src/auth/strategies/JWT.strategy.ts | 0 .../discord.strategy/DiscordStrategyConfig.ts | 0 .../discord.strategy/Strategy.spec.ts | 0 .../strategies/discord.strategy/Strategy.ts | 0 .../discord.strategy/discord.strategy.spec.ts | 0 .../auth/strategies/discord.strategy/index.ts | 0 .../auth/strategies/discord.strategy/types.ts | 0 .../auth/strategies/github.strategy.spec.ts | 0 .../src/auth/strategies/github.strategy.ts | 0 .../auth/strategies/google.strategy.spec.ts | 0 .../src/auth/strategies/google.strategy.ts | 0 .../magicLinkEmail.strategy.spec.ts | 0 .../strategies/magicLinkEmail.strategy.ts | 0 .../backend}/src/auth/types/discordProfile.ts | 0 .../backend}/src/auth/types/githubProfile.ts | 0 .../backend}/src/auth/types/googleProfile.ts | 0 .../backend}/src/auth/types/profile.ts | 0 .../backend}/src/auth/types/token.ts | 0 .../src/config/EnvironmentVariables.ts | 0 .../email-login.controller.spec.ts | 0 .../src/email-login/email-login.controller.ts | 0 .../src/email-login/email-login.module.ts | 0 .../email-login/email-login.service.spec.ts | 0 .../src/email-login/email-login.service.ts | 0 .../backend}/src/file/file.module.ts | 0 .../backend}/src/file/file.service.spec.ts | 0 .../backend}/src/file/file.service.ts | 0 .../backend}/src/lib/GetRequestUser.spec.ts | 0 .../backend}/src/lib/GetRequestUser.ts | 0 .../src/lib/initializeSwagger.spec.ts | 0 .../backend}/src/lib/initializeSwagger.ts | 0 .../backend}/src/lib/parseToken.spec.ts | 0 .../backend}/src/lib/parseToken.ts | 0 .../src/mailing/mailing.controller.spec.ts | 0 .../src/mailing/mailing.controller.ts | 0 .../backend}/src/mailing/mailing.module.ts | 0 .../src/mailing/mailing.service.spec.ts | 0 .../backend}/src/mailing/mailing.service.ts | 0 .../templates/img/background-image.png | Bin .../src/mailing/templates/img/logo.png | Bin .../templates/magic-link-new-account.hbs | 0 .../src/mailing/templates/magic-link.hbs | 0 {server => packages/backend}/src/main.ts | 0 .../backend}/src/seed/seed.controller.spec.ts | 0 .../backend}/src/seed/seed.controller.ts | 0 .../backend}/src/seed/seed.module.ts | 0 .../backend}/src/seed/seed.service.spec.ts | 0 .../backend}/src/seed/seed.service.ts | 15 +- .../song-browser.controller.spec.ts | 0 .../song-browser/song-browser.controller.ts | 0 .../src/song-browser/song-browser.module.ts | 0 .../song-browser/song-browser.service.spec.ts | 0 .../src/song-browser/song-browser.service.ts | 0 .../song/my-songs/my-songs.controller.spec.ts | 4 +- .../src/song/my-songs/my-songs.controller.ts | 3 +- .../song-upload/song-upload.service.spec.ts | 0 .../song/song-upload/song-upload.service.ts | 14 +- .../song-webhook/song-webhook.service.spec.ts | 0 .../song/song-webhook/song-webhook.service.ts | 0 .../backend}/src/song/song.controller.spec.ts | 12 +- .../backend}/src/song/song.controller.ts | 14 +- .../backend}/src/song/song.module.ts | 2 +- .../backend}/src/song/song.service.spec.ts | 12 +- .../backend}/src/song/song.service.ts | 0 .../backend}/src/song/song.util.ts | 0 .../backend}/src/user/dto/user.dto.ts | 0 .../backend}/src/user/user.controller.spec.ts | 0 .../backend}/src/user/user.controller.ts | 0 .../backend}/src/user/user.module.ts | 0 .../backend}/src/user/user.service.spec.ts | 0 .../backend}/src/user/user.service.ts | 0 .../backend}/tsconfig.build.json | 0 {server => packages/backend}/tsconfig.json | 1 - packages/database/.eslintrc.js | 3 + packages/database/.gitignore | 34 + packages/database/README.md | 15 + packages/database/bun.lock | 29 + packages/database/index.ts | 1 + packages/database/jest.config.js | 33 + packages/database/package.json | 36 + .../database/src/common/dto/PageQuery.dto.ts | 70 + packages/database/src/common/dto/types.ts | 3 + packages/database/src/index.ts | 28 + packages/database/src/song/constants.ts | 131 + .../src/song/dto/CustomInstrumentData.dto.ts | 6 + .../src/song/dto/FeaturedSongsDto.dto.ts | 21 + .../database/src/song/dto/SongPage.dto.ts | 34 + .../database/src/song/dto/SongPreview.dto.ts | 75 + packages/database/src/song/dto/SongStats.ts | 69 + .../database/src/song/dto/SongView.dto.ts | 108 + .../src/song/dto/ThumbnailData.dto.ts | 50 + .../src/song/dto/UploadSongDto.dto.ts | 132 + .../src/song/dto/UploadSongResponseDto.dto.ts | 71 + packages/database/src/song/dto/types.ts | 41 + .../database}/src/song/entity/song.entity.ts | 21 +- packages/database/src/user/constants.ts | 5 + .../database/src/user/dto/CreateUser.dto.ts | 41 + packages/database/src/user/dto/GetUser.dto.ts | 45 + .../database/src/user/dto/Login.dto copy.ts | 9 + .../src/user/dto/LoginWithEmail.dto.ts | 9 + .../database/src/user/dto/NewEmailUser.dto.ts | 30 + .../src/user/dto/SingleUsePass.dto.ts | 14 + .../src/user/dto/UpdateUsername.dto.ts | 16 + packages/database/src/user/dto/user.dto.ts | 16 + .../database}/src/user/entity/user.entity.ts | 3 +- packages/database/tsconfig.build.json | 20 + packages/database/tsconfig.json | 46 + 125 files changed, 5154 insertions(+), 55 deletions(-) rename {server => packages/backend}/.env.development.example (100%) rename {server => packages/backend}/.eslintrc.json (100%) rename {server => packages/backend}/.gitignore (100%) rename {server => packages/backend}/README.md (100%) rename {server => packages/backend}/assets/fonts/Lato-Regular.ttf (100%) rename {server => packages/backend}/assets/img/note-block-grayscale.png (100%) rename {server => packages/backend}/jest.config.js (100%) rename {server => packages/backend}/nest-cli.json (100%) rename {server => packages/backend}/package.json (92%) create mode 100644 packages/backend/public/data/soundList.json rename {server => packages/backend}/scripts/build.ts (100%) rename {server => packages/backend}/src/app.module.ts (100%) rename {server => packages/backend}/src/auth/auth.controller.spec.ts (100%) rename {server => packages/backend}/src/auth/auth.controller.ts (100%) rename {server => packages/backend}/src/auth/auth.module.ts (100%) rename {server => packages/backend}/src/auth/auth.service.spec.ts (100%) rename {server => packages/backend}/src/auth/auth.service.ts (98%) rename {server => packages/backend}/src/auth/strategies/JWT.strategy.spec.ts (100%) rename {server => packages/backend}/src/auth/strategies/JWT.strategy.ts (100%) rename {server => packages/backend}/src/auth/strategies/discord.strategy/DiscordStrategyConfig.ts (100%) rename {server => packages/backend}/src/auth/strategies/discord.strategy/Strategy.spec.ts (100%) rename {server => packages/backend}/src/auth/strategies/discord.strategy/Strategy.ts (100%) rename {server => packages/backend}/src/auth/strategies/discord.strategy/discord.strategy.spec.ts (100%) rename {server => packages/backend}/src/auth/strategies/discord.strategy/index.ts (100%) rename {server => packages/backend}/src/auth/strategies/discord.strategy/types.ts (100%) rename {server => packages/backend}/src/auth/strategies/github.strategy.spec.ts (100%) rename {server => packages/backend}/src/auth/strategies/github.strategy.ts (100%) rename {server => packages/backend}/src/auth/strategies/google.strategy.spec.ts (100%) rename {server => packages/backend}/src/auth/strategies/google.strategy.ts (100%) rename {server => packages/backend}/src/auth/strategies/magicLinkEmail.strategy.spec.ts (100%) rename {server => packages/backend}/src/auth/strategies/magicLinkEmail.strategy.ts (100%) rename {server => packages/backend}/src/auth/types/discordProfile.ts (100%) rename {server => packages/backend}/src/auth/types/githubProfile.ts (100%) rename {server => packages/backend}/src/auth/types/googleProfile.ts (100%) rename {server => packages/backend}/src/auth/types/profile.ts (100%) rename {server => packages/backend}/src/auth/types/token.ts (100%) rename {server => packages/backend}/src/config/EnvironmentVariables.ts (100%) rename {server => packages/backend}/src/email-login/email-login.controller.spec.ts (100%) rename {server => packages/backend}/src/email-login/email-login.controller.ts (100%) rename {server => packages/backend}/src/email-login/email-login.module.ts (100%) rename {server => packages/backend}/src/email-login/email-login.service.spec.ts (100%) rename {server => packages/backend}/src/email-login/email-login.service.ts (100%) rename {server => packages/backend}/src/file/file.module.ts (100%) rename {server => packages/backend}/src/file/file.service.spec.ts (100%) rename {server => packages/backend}/src/file/file.service.ts (100%) rename {server => packages/backend}/src/lib/GetRequestUser.spec.ts (100%) rename {server => packages/backend}/src/lib/GetRequestUser.ts (100%) rename {server => packages/backend}/src/lib/initializeSwagger.spec.ts (100%) rename {server => packages/backend}/src/lib/initializeSwagger.ts (100%) rename {server => packages/backend}/src/lib/parseToken.spec.ts (100%) rename {server => packages/backend}/src/lib/parseToken.ts (100%) rename {server => packages/backend}/src/mailing/mailing.controller.spec.ts (100%) rename {server => packages/backend}/src/mailing/mailing.controller.ts (100%) rename {server => packages/backend}/src/mailing/mailing.module.ts (100%) rename {server => packages/backend}/src/mailing/mailing.service.spec.ts (100%) rename {server => packages/backend}/src/mailing/mailing.service.ts (100%) rename {server => packages/backend}/src/mailing/templates/img/background-image.png (100%) rename {server => packages/backend}/src/mailing/templates/img/logo.png (100%) rename {server => packages/backend}/src/mailing/templates/magic-link-new-account.hbs (100%) rename {server => packages/backend}/src/mailing/templates/magic-link.hbs (100%) rename {server => packages/backend}/src/main.ts (100%) rename {server => packages/backend}/src/seed/seed.controller.spec.ts (100%) rename {server => packages/backend}/src/seed/seed.controller.ts (100%) rename {server => packages/backend}/src/seed/seed.module.ts (100%) rename {server => packages/backend}/src/seed/seed.service.spec.ts (100%) rename {server => packages/backend}/src/seed/seed.service.ts (97%) rename {server => packages/backend}/src/song-browser/song-browser.controller.spec.ts (100%) rename {server => packages/backend}/src/song-browser/song-browser.controller.ts (100%) rename {server => packages/backend}/src/song-browser/song-browser.module.ts (100%) rename {server => packages/backend}/src/song-browser/song-browser.service.spec.ts (100%) rename {server => packages/backend}/src/song-browser/song-browser.service.ts (100%) rename {server => packages/backend}/src/song/my-songs/my-songs.controller.spec.ts (94%) rename {server => packages/backend}/src/song/my-songs/my-songs.controller.ts (87%) rename {server => packages/backend}/src/song/song-upload/song-upload.service.spec.ts (100%) rename {server => packages/backend}/src/song/song-upload/song-upload.service.ts (95%) rename {server => packages/backend}/src/song/song-webhook/song-webhook.service.spec.ts (100%) rename {server => packages/backend}/src/song/song-webhook/song-webhook.service.ts (100%) rename {server => packages/backend}/src/song/song.controller.spec.ts (96%) rename {server => packages/backend}/src/song/song.controller.ts (91%) rename {server => packages/backend}/src/song/song.module.ts (95%) rename {server => packages/backend}/src/song/song.service.spec.ts (98%) rename {server => packages/backend}/src/song/song.service.ts (100%) rename {server => packages/backend}/src/song/song.util.ts (100%) rename {server => packages/backend}/src/user/dto/user.dto.ts (100%) rename {server => packages/backend}/src/user/user.controller.spec.ts (100%) rename {server => packages/backend}/src/user/user.controller.ts (100%) rename {server => packages/backend}/src/user/user.module.ts (100%) rename {server => packages/backend}/src/user/user.service.spec.ts (100%) rename {server => packages/backend}/src/user/user.service.ts (100%) rename {server => packages/backend}/tsconfig.build.json (100%) rename {server => packages/backend}/tsconfig.json (96%) create mode 100644 packages/database/.eslintrc.js create mode 100644 packages/database/.gitignore create mode 100644 packages/database/README.md create mode 100644 packages/database/bun.lock create mode 100644 packages/database/index.ts create mode 100644 packages/database/jest.config.js create mode 100644 packages/database/package.json create mode 100644 packages/database/src/common/dto/PageQuery.dto.ts create mode 100644 packages/database/src/common/dto/types.ts create mode 100644 packages/database/src/index.ts create mode 100644 packages/database/src/song/constants.ts create mode 100644 packages/database/src/song/dto/CustomInstrumentData.dto.ts create mode 100644 packages/database/src/song/dto/FeaturedSongsDto.dto.ts create mode 100644 packages/database/src/song/dto/SongPage.dto.ts create mode 100644 packages/database/src/song/dto/SongPreview.dto.ts create mode 100644 packages/database/src/song/dto/SongStats.ts create mode 100644 packages/database/src/song/dto/SongView.dto.ts create mode 100644 packages/database/src/song/dto/ThumbnailData.dto.ts create mode 100644 packages/database/src/song/dto/UploadSongDto.dto.ts create mode 100644 packages/database/src/song/dto/UploadSongResponseDto.dto.ts create mode 100644 packages/database/src/song/dto/types.ts rename {server => packages/database}/src/song/entity/song.entity.ts (83%) create mode 100644 packages/database/src/user/constants.ts create mode 100644 packages/database/src/user/dto/CreateUser.dto.ts create mode 100644 packages/database/src/user/dto/GetUser.dto.ts create mode 100644 packages/database/src/user/dto/Login.dto copy.ts create mode 100644 packages/database/src/user/dto/LoginWithEmail.dto.ts create mode 100644 packages/database/src/user/dto/NewEmailUser.dto.ts create mode 100644 packages/database/src/user/dto/SingleUsePass.dto.ts create mode 100644 packages/database/src/user/dto/UpdateUsername.dto.ts create mode 100644 packages/database/src/user/dto/user.dto.ts rename {server => packages/database}/src/user/entity/user.entity.ts (95%) create mode 100644 packages/database/tsconfig.build.json create mode 100644 packages/database/tsconfig.json diff --git a/server/.env.development.example b/packages/backend/.env.development.example similarity index 100% rename from server/.env.development.example rename to packages/backend/.env.development.example diff --git a/server/.eslintrc.json b/packages/backend/.eslintrc.json similarity index 100% rename from server/.eslintrc.json rename to packages/backend/.eslintrc.json diff --git a/server/.gitignore b/packages/backend/.gitignore similarity index 100% rename from server/.gitignore rename to packages/backend/.gitignore diff --git a/server/README.md b/packages/backend/README.md similarity index 100% rename from server/README.md rename to packages/backend/README.md diff --git a/server/assets/fonts/Lato-Regular.ttf b/packages/backend/assets/fonts/Lato-Regular.ttf similarity index 100% rename from server/assets/fonts/Lato-Regular.ttf rename to packages/backend/assets/fonts/Lato-Regular.ttf diff --git a/server/assets/img/note-block-grayscale.png b/packages/backend/assets/img/note-block-grayscale.png similarity index 100% rename from server/assets/img/note-block-grayscale.png rename to packages/backend/assets/img/note-block-grayscale.png diff --git a/server/jest.config.js b/packages/backend/jest.config.js similarity index 100% rename from server/jest.config.js rename to packages/backend/jest.config.js diff --git a/server/nest-cli.json b/packages/backend/nest-cli.json similarity index 100% rename from server/nest-cli.json rename to packages/backend/nest-cli.json diff --git a/server/package.json b/packages/backend/package.json similarity index 92% rename from server/package.json rename to packages/backend/package.json index e97f758a..a95891e9 100644 --- a/server/package.json +++ b/packages/backend/package.json @@ -1,5 +1,5 @@ { - "name": "noteblockworld-server", + "name": "@nbw/noteblockworld-server", "version": "0.0.1", "description": "", "author": "", @@ -56,7 +56,11 @@ "rxjs": "^7.8.1", "uuid": "^9.0.1", "zod": "^3.24.1", - "zod-validation-error": "^3.4.0" + "zod-validation-error": "^3.4.0", + "@nbw/database": "workspace:*", + "@nbw/song": "workspace:*", + "@nbw/thumbnail": "workspace:*", + "@nbw/sounds": "workspace:*" }, "devDependencies": { "@faker-js/faker": "^9.3.0", diff --git a/packages/backend/public/data/soundList.json b/packages/backend/public/data/soundList.json new file mode 100644 index 00000000..c59b0acb --- /dev/null +++ b/packages/backend/public/data/soundList.json @@ -0,0 +1,3857 @@ +{ + "minecraft/sounds/ambient/cave/cave1.ogg": "1058cf72714c48b154e7883cb9d7ec918e0816b3", + "minecraft/sounds/ambient/cave/cave10.ogg": "698f16bcea825ec873cb38be0ba191b177654e62", + "minecraft/sounds/ambient/cave/cave11.ogg": "6f3ae50c05462ad0bb05dc33ab86ab5363cbd22a", + "minecraft/sounds/ambient/cave/cave12.ogg": "372cb0fcc25ddedffd2e96d61d4d96b0d09d2d7a", + "minecraft/sounds/ambient/cave/cave13.ogg": "7621463230ca87557d2ced0a97caa823dbe6ef7e", + "minecraft/sounds/ambient/cave/cave14.ogg": "d777d74530cde62ef1d15fe407a5be15d713f465", + "minecraft/sounds/ambient/cave/cave15.ogg": "27cce57244b212b662e1cf94054e2c216bcf804f", + "minecraft/sounds/ambient/cave/cave16.ogg": "3c760ef797c1dd3036c5cf7a51de04a2fdbc238d", + "minecraft/sounds/ambient/cave/cave17.ogg": "2eba27e201b8676c80dc6a9f1f7a44e6efddcc4f", + "minecraft/sounds/ambient/cave/cave18.ogg": "4e540903246cbd7140d2125e032de2ec44aa9119", + "minecraft/sounds/ambient/cave/cave19.ogg": "6277de504c0994f6a6b8deee42c03188fd8facc9", + "minecraft/sounds/ambient/cave/cave2.ogg": "a4fe07709e6dc99cdb378ce151f2547fb532469f", + "minecraft/sounds/ambient/cave/cave20.ogg": "19b9832c81480d973f27099f7cb94a84747b8f5e", + "minecraft/sounds/ambient/cave/cave21.ogg": "9c2eb9846a9d8a3aa291abe6db3cfab01a0464d1", + "minecraft/sounds/ambient/cave/cave22.ogg": "38bc4945e4b02b6da45ccb90e8a58dc723dd6227", + "minecraft/sounds/ambient/cave/cave23.ogg": "400706feb11661858c9cd229117cbbd4f6279d4d", + "minecraft/sounds/ambient/cave/cave3.ogg": "04b8da035ef067f8ba1946692ff9fd261c186c4f", + "minecraft/sounds/ambient/cave/cave4.ogg": "67863b6f569dc03626d407a811057825c2d45de9", + "minecraft/sounds/ambient/cave/cave5.ogg": "01b9a0d2165d5d0efd9a4e16d311d9b98d71f140", + "minecraft/sounds/ambient/cave/cave6.ogg": "f2384d4c466cc6132d69d97a4d2b341e1db7578a", + "minecraft/sounds/ambient/cave/cave7.ogg": "790a8a054d6fbc2440fdd0d5f153baa9d817756b", + "minecraft/sounds/ambient/cave/cave8.ogg": "104c4934605aef073d3ba87e89ba334de47fd03a", + "minecraft/sounds/ambient/cave/cave9.ogg": "a8cecb35ebf4dbbc83a496e30d81e0f72a85638c", + "minecraft/sounds/ambient/nether/basalt_deltas/active1.ogg": "ec427e5a26e2170b435c85f4bae71bf5b9329b2c", + "minecraft/sounds/ambient/nether/basalt_deltas/active2.ogg": "02e04a1bba845ed4b3c0d006ebffc894c3588604", + "minecraft/sounds/ambient/nether/basalt_deltas/active3.ogg": "d37865c3895660038e4ceb30fb199b346cc1b1ee", + "minecraft/sounds/ambient/nether/basalt_deltas/active4.ogg": "6c9cd4e4d33421764f7fb0183cc51e93b6c0fb2d", + "minecraft/sounds/ambient/nether/basalt_deltas/ambience.ogg": "baa42befb3ade28e36a1298c08e0f822dc695907", + "minecraft/sounds/ambient/nether/basalt_deltas/basaltground1.ogg": "81ec539eb173b103a18e0ab2ca314fb95dc3bf90", + "minecraft/sounds/ambient/nether/basalt_deltas/basaltground2.ogg": "8b75c05a03817591d1dd33399cf4fcc5a7e3f8ed", + "minecraft/sounds/ambient/nether/basalt_deltas/basaltground3.ogg": "69d349ed030f125c34766b96ba66beb812d1f5ef", + "minecraft/sounds/ambient/nether/basalt_deltas/basaltground4.ogg": "e12154ca862546b6f91db32596bfb587a1c1cf77", + "minecraft/sounds/ambient/nether/basalt_deltas/click1.ogg": "06a4b57e5aa49c6c3796eb9e1b3b14d9b37dcd94", + "minecraft/sounds/ambient/nether/basalt_deltas/click2.ogg": "5cfaa5161ce8e7c4e1a56aa13d1bb05503cb527d", + "minecraft/sounds/ambient/nether/basalt_deltas/click3.ogg": "79954196b3baa4d5bcabccae350d2607755ccf78", + "minecraft/sounds/ambient/nether/basalt_deltas/click4.ogg": "e7378124e1ff156e96ecff31b36454f66ecdc008", + "minecraft/sounds/ambient/nether/basalt_deltas/click5.ogg": "a85d759474ff252f0437b34fc609546610194634", + "minecraft/sounds/ambient/nether/basalt_deltas/click6.ogg": "d698c37a5aea211bbec76b4bc97addc7c70d6c67", + "minecraft/sounds/ambient/nether/basalt_deltas/click7.ogg": "76c31b73ee48718cbc25ac521e97a3a2a47b1636", + "minecraft/sounds/ambient/nether/basalt_deltas/click8.ogg": "1dd074d2d7ec04991ce6585677ffb93c78929e29", + "minecraft/sounds/ambient/nether/basalt_deltas/debris1.ogg": "bc08fcd33d5e5c03602972455ca6b15d6023a90f", + "minecraft/sounds/ambient/nether/basalt_deltas/debris2.ogg": "fd18d34fa8668ce814ecfef088fef9bc2b0de50b", + "minecraft/sounds/ambient/nether/basalt_deltas/debris3.ogg": "c148c0b10a397e94c198cc222b1dab5aa21ccb75", + "minecraft/sounds/ambient/nether/basalt_deltas/heavy_click1.ogg": "2ffdaf3473cf6452422780876f6551bbd8597356", + "minecraft/sounds/ambient/nether/basalt_deltas/heavy_click2.ogg": "cea35514055ec8165f9f67b3b73526e28d427b2e", + "minecraft/sounds/ambient/nether/basalt_deltas/long_debris1.ogg": "e063368288851806550ee81e108d62c0f8257aff", + "minecraft/sounds/ambient/nether/basalt_deltas/long_debris2.ogg": "6a64d03b90919dbd1610273e76b37d396fa06c91", + "minecraft/sounds/ambient/nether/basalt_deltas/plode1.ogg": "90bf2ebbdf3bb510eb5ec443405d1021f63ce4a3", + "minecraft/sounds/ambient/nether/basalt_deltas/plode2.ogg": "d6d63a572496becda48acdd84534e70032db2c52", + "minecraft/sounds/ambient/nether/basalt_deltas/plode3.ogg": "cf2dbb84c5354abc4309696eacf19640760531d2", + "minecraft/sounds/ambient/nether/basalt_deltas/twist1.ogg": "0df779cb6d625830021f46fa670b246f05ada156", + "minecraft/sounds/ambient/nether/basalt_deltas/twist2.ogg": "4564809b9a9e52f090da8b901ebdb22f4242b1cb", + "minecraft/sounds/ambient/nether/basalt_deltas/twist3.ogg": "d44e71399f6bf4d690ebb98fede53febdbcc7b27", + "minecraft/sounds/ambient/nether/basalt_deltas/twist4.ogg": "b1e914ffc0d263e0cc0304f0dd182f1c76d2831f", + "minecraft/sounds/ambient/nether/crimson_forest/addition1.ogg": "0c2cdb58940cd6b6a5b95bbde63f8d013b54003d", + "minecraft/sounds/ambient/nether/crimson_forest/addition2.ogg": "02b29a0ff4ac6b40acfee9076fd5caeb6719085b", + "minecraft/sounds/ambient/nether/crimson_forest/addition3.ogg": "d6c3dc83ab6a7944028fa07267783bbea2f3a49c", + "minecraft/sounds/ambient/nether/crimson_forest/ambience.ogg": "f88673368cf2305d150b35cbf72fb7b2267c1e19", + "minecraft/sounds/ambient/nether/crimson_forest/mood1.ogg": "f0cdd15e9eb0129cff065733cadbe1a4123ebfca", + "minecraft/sounds/ambient/nether/crimson_forest/mood2.ogg": "92bb2c7fa9c823679518f59fb447d20c17bc8bf5", + "minecraft/sounds/ambient/nether/crimson_forest/mood3.ogg": "0f932b9d5a9714a57139dfe77a22b341021b3780", + "minecraft/sounds/ambient/nether/crimson_forest/mood4.ogg": "bfe2ef49b5ddbeb0a394baead702376ef7828e18", + "minecraft/sounds/ambient/nether/crimson_forest/particles1.ogg": "c95705795315b5944f32c517b9c0a0d677249405", + "minecraft/sounds/ambient/nether/crimson_forest/particles2.ogg": "9331bef7e5d87f014ff5610769f73a0a7261bded", + "minecraft/sounds/ambient/nether/crimson_forest/particles3.ogg": "6ebe0bafda35b6d983d7da1b7102181781baf7c7", + "minecraft/sounds/ambient/nether/crimson_forest/shine1.ogg": "68e910067dea1e50474763a4852f3c9990992737", + "minecraft/sounds/ambient/nether/crimson_forest/shine2.ogg": "f543d1e6de128c3a149356c4f4768a84452c64c7", + "minecraft/sounds/ambient/nether/crimson_forest/shine3.ogg": "1ad916bab7338140d4025a1ad7ba807a0d9e99f7", + "minecraft/sounds/ambient/nether/crimson_forest/shroom1.ogg": "08d1e959c03311f97584702adc4ebbee57a73ba8", + "minecraft/sounds/ambient/nether/crimson_forest/shroom2.ogg": "3cd1a62b2373b7140621396eca5d60e244f7ab71", + "minecraft/sounds/ambient/nether/crimson_forest/shroom3.ogg": "2efba559e9d96db67fb182b31464dd9b6da4118e", + "minecraft/sounds/ambient/nether/crimson_forest/twang1.ogg": "7a1cf15a4bf688ab94c67bb6351455e363496c61", + "minecraft/sounds/ambient/nether/crimson_forest/voom1.ogg": "32c50f602ae4d10947617307f5e1436caa90bccf", + "minecraft/sounds/ambient/nether/crimson_forest/voom2.ogg": "2d333e27b8da7d2adffed6380b2b13ddac96f0a7", + "minecraft/sounds/ambient/nether/nether_wastes/addition1.ogg": "6ef2b3130bd4f8f693016aae5a5ad56ce05e3423", + "minecraft/sounds/ambient/nether/nether_wastes/addition2.ogg": "d85435987d1800612aefc6e9942df7ce560891ff", + "minecraft/sounds/ambient/nether/nether_wastes/addition3.ogg": "bdea3c433dfcd549f2e20f2ed9ab90c3cde71d83", + "minecraft/sounds/ambient/nether/nether_wastes/addition4.ogg": "55b027d5fce68364f9e82d1b3ec43bd7e9a19e21", + "minecraft/sounds/ambient/nether/nether_wastes/addition5.ogg": "7c0857bfbcd95dc99969bb97447cdb35fb77b6ef", + "minecraft/sounds/ambient/nether/nether_wastes/addition6.ogg": "cdc44d233d9ab161c6c6546a021222b39c093ea2", + "minecraft/sounds/ambient/nether/nether_wastes/addition7.ogg": "bbd0f09f68ee1b9ef8b55906d1124e745e21bf20", + "minecraft/sounds/ambient/nether/nether_wastes/addition8.ogg": "4984fe8a1524b5c203631317a1146c64f2d4ac24", + "minecraft/sounds/ambient/nether/nether_wastes/ambience.ogg": "c3b0749ea9403ec1232290fab4d1bc60583857bc", + "minecraft/sounds/ambient/nether/nether_wastes/dark1.ogg": "0c28d0fda9d575f08ba992a98d6e99ca5a76b886", + "minecraft/sounds/ambient/nether/nether_wastes/dark2.ogg": "c0333979878406dc6267b21eaa1334d7bc2d8b5f", + "minecraft/sounds/ambient/nether/nether_wastes/ground1.ogg": "13144a839243e2ce2616118445f1ca1fba4b5e1e", + "minecraft/sounds/ambient/nether/nether_wastes/ground2.ogg": "40f2588378e41f1e67da415d14d34f3a678cde6b", + "minecraft/sounds/ambient/nether/nether_wastes/ground3.ogg": "9df7b45d3ba5460f70dda8580d094af275c48219", + "minecraft/sounds/ambient/nether/nether_wastes/ground4.ogg": "95505e333c3b7fd1946fdfea15573864285c99e9", + "minecraft/sounds/ambient/nether/nether_wastes/mood1.ogg": "436970b9d93a5da26a5d20a4cefcea103ce431da", + "minecraft/sounds/ambient/nether/nether_wastes/mood2.ogg": "8d371dcbd1fdcd2b233a092975ee240487896af8", + "minecraft/sounds/ambient/nether/nether_wastes/mood3.ogg": "d9fb85b99f5a3093f81098f9413b7185d87f889c", + "minecraft/sounds/ambient/nether/nether_wastes/mood4.ogg": "67c5f03ae10eb02077b848a29e88f6b6becacf8b", + "minecraft/sounds/ambient/nether/nether_wastes/mood5.ogg": "5b21bad52e8963d8ac1bbaea347e3ab6a3da0574", + "minecraft/sounds/ambient/nether/soulsand_valley/ambience.ogg": "a7f2c0493e1888b320b546e750be202f1f94c50d", + "minecraft/sounds/ambient/nether/soulsand_valley/mood1.ogg": "f5c900b6fdab38912a19ac353b9c78a9501215ae", + "minecraft/sounds/ambient/nether/soulsand_valley/mood2.ogg": "d205eac4b65ba6851013f9a228fb1789941be080", + "minecraft/sounds/ambient/nether/soulsand_valley/mood3.ogg": "4a379d5c8bc1f29d5dac3b8296d6d5cdbc7e9470", + "minecraft/sounds/ambient/nether/soulsand_valley/mood4.ogg": "f0c4946eb21ffe8a3e81b83e4f103884e791f885", + "minecraft/sounds/ambient/nether/soulsand_valley/sand1.ogg": "ea5d0dfacc7437bf95455690f8a805a8c4840194", + "minecraft/sounds/ambient/nether/soulsand_valley/sand2.ogg": "278b4d72736b2f03173c0220475df9c622c2670d", + "minecraft/sounds/ambient/nether/soulsand_valley/sand3.ogg": "06e38c06d7165d7349dbdb85209910cb68815b7c", + "minecraft/sounds/ambient/nether/soulsand_valley/voices1.ogg": "1b46e7257ddef7c55289f55450cb9eab27fc995b", + "minecraft/sounds/ambient/nether/soulsand_valley/voices2.ogg": "21b17a27f2c3f919a1c87bcca0552292b1dcf843", + "minecraft/sounds/ambient/nether/soulsand_valley/voices3.ogg": "156e19e4e2055033641b01cf223d692b001b4424", + "minecraft/sounds/ambient/nether/soulsand_valley/voices4.ogg": "78294a9aaed85390e3f022a3dc346c509bea0a47", + "minecraft/sounds/ambient/nether/soulsand_valley/voices5.ogg": "11be3ad1e32adab4fcb1b6eedc0e9cb57e47d56d", + "minecraft/sounds/ambient/nether/soulsand_valley/whisper1.ogg": "c4306160b2239ff1d3a078758074f49b0b336535", + "minecraft/sounds/ambient/nether/soulsand_valley/whisper2.ogg": "cb2cec5109da541da2fbe9088ab63e47d0e351ce", + "minecraft/sounds/ambient/nether/soulsand_valley/whisper3.ogg": "9bb00c0798bc94210b1f23efb0da1c0d8d861365", + "minecraft/sounds/ambient/nether/soulsand_valley/whisper4.ogg": "0a23b6f3bb5ae4191fa749826443e77156bd0f71", + "minecraft/sounds/ambient/nether/soulsand_valley/whisper5.ogg": "9a5e93115b641512154d5e453dbaca06b71441f2", + "minecraft/sounds/ambient/nether/soulsand_valley/whisper6.ogg": "e7123ffbaaa628fa8a9b86c24eea34dae8fda37f", + "minecraft/sounds/ambient/nether/soulsand_valley/whisper7.ogg": "93b7f7e08ea4d4d7c67b9357a50be65dbf8115c1", + "minecraft/sounds/ambient/nether/soulsand_valley/whisper8.ogg": "9c1a4cdf3314da47f2b797cb55256d066af337cb", + "minecraft/sounds/ambient/nether/soulsand_valley/wind1.ogg": "f9758cb569fb20fe29e437112458f445d8ed5080", + "minecraft/sounds/ambient/nether/soulsand_valley/wind2.ogg": "f4f12b4e94d180c992a0a57fbd41701a272bf454", + "minecraft/sounds/ambient/nether/soulsand_valley/wind3.ogg": "5a8e8cbb8ab63cdc4f7fbe8cef7d6c4baa67d630", + "minecraft/sounds/ambient/nether/soulsand_valley/wind4.ogg": "b990d14cb77e7fc884bf0e098785385a520f0c01", + "minecraft/sounds/ambient/nether/soulsand_valley/with1.ogg": "82aa6f582d10a4f2e0e848a90a88d7262a84aa5f", + "minecraft/sounds/ambient/nether/warped_forest/addition1.ogg": "30b852ccfdb586472e8f7b9bc3d3d655e769ff25", + "minecraft/sounds/ambient/nether/warped_forest/addition2.ogg": "be1aefb33d82a26876f60e3aa33bad384bcd6d96", + "minecraft/sounds/ambient/nether/warped_forest/addition3.ogg": "52b22be2f42003c269b4b5f9a101128330bc7647", + "minecraft/sounds/ambient/nether/warped_forest/addition4.ogg": "47d744ded8930de34225e75f19e3320d313e03e3", + "minecraft/sounds/ambient/nether/warped_forest/addition5.ogg": "b365df38c3a3e81078686eb07d581c128615ad51", + "minecraft/sounds/ambient/nether/warped_forest/addition6.ogg": "c9ff6427e506c7b2419afc67e3af1572a7d160c4", + "minecraft/sounds/ambient/nether/warped_forest/ambience.ogg": "c1ba1a3d8f7f9db964d9658fa04015ed100d0164", + "minecraft/sounds/ambient/nether/warped_forest/creak1.ogg": "425d10c60202787db3c4d5da695ee2934bddb4d9", + "minecraft/sounds/ambient/nether/warped_forest/creak2.ogg": "4aa1a0d51f4adf8b38c27ab00bbd7da7ea841e7e", + "minecraft/sounds/ambient/nether/warped_forest/creak3.ogg": "4c0620ab6cac070584e06b1508784440abfe48a6", + "minecraft/sounds/ambient/nether/warped_forest/creak4.ogg": "f7475cb10f30f2658f870d30bb53197831b56818", + "minecraft/sounds/ambient/nether/warped_forest/creak5.ogg": "386730fb668bd471bfda86d21579840ca4943e4f", + "minecraft/sounds/ambient/nether/warped_forest/enish1.ogg": "5bc44a2b2ffe78ad063a83e3c0315b590fc38ac2", + "minecraft/sounds/ambient/nether/warped_forest/enish2.ogg": "9926aa4b33e65b99f24f0f6248c6756e24aab6c3", + "minecraft/sounds/ambient/nether/warped_forest/enish3.ogg": "3e2868131ea9dbc2197f351b6c93571ea2e30ad3", + "minecraft/sounds/ambient/nether/warped_forest/help1.ogg": "645a5cbd35f4cc5a8ea7ae884783153ca8776cbb", + "minecraft/sounds/ambient/nether/warped_forest/help2.ogg": "18fc554bbd6ec194bb32952bce55a9efd8d1124b", + "minecraft/sounds/ambient/nether/warped_forest/here1.ogg": "859d0902af97b5c15493ba815353cc24d972a556", + "minecraft/sounds/ambient/nether/warped_forest/here2.ogg": "e079e3be682d780f749f49da65d75521e0dc6b64", + "minecraft/sounds/ambient/nether/warped_forest/here3.ogg": "43775d8586d4b3bfc71835b5f13b4f5983417973", + "minecraft/sounds/ambient/nether/warped_forest/mood1.ogg": "7e30e09fea8453fdca7c43375b8c0fc41b640390", + "minecraft/sounds/ambient/nether/warped_forest/mood2.ogg": "d6639b3015fd8c9153a506eb239bec02e649a12b", + "minecraft/sounds/ambient/nether/warped_forest/mood3.ogg": "d9b0467ea5af4ed27e9824177d0139cc16b838f0", + "minecraft/sounds/ambient/nether/warped_forest/mood4.ogg": "6201e940fa4ab042208122df1747a1d56a66a193", + "minecraft/sounds/ambient/nether/warped_forest/mood5.ogg": "4bd8e7714429a47f8d278318110600d95087ce5a", + "minecraft/sounds/ambient/nether/warped_forest/mood6.ogg": "df66fe44f72c6d59fa9eaa61535755272007b094", + "minecraft/sounds/ambient/nether/warped_forest/mood7.ogg": "059dc76337eaf2690b281fd6013e2c7b57c34df3", + "minecraft/sounds/ambient/nether/warped_forest/mood8.ogg": "62ffa5f85aeefcee4a9aa98290beb14bdd84e68d", + "minecraft/sounds/ambient/nether/warped_forest/mood9.ogg": "845a813d61b345669e9cbc3c4014ddf2298580e9", + "minecraft/sounds/ambient/underwater/additions/animal1.ogg": "722f551cfab940a7cd04dc19fe7ea9faf9a7a2a5", + "minecraft/sounds/ambient/underwater/additions/animal2.ogg": "cce307819901e2b9523a3b7b4ac76b9a25a6629c", + "minecraft/sounds/ambient/underwater/additions/bass_whale1.ogg": "89236079c6c9eafb1b3d5aeaefbeb08dbf6003ff", + "minecraft/sounds/ambient/underwater/additions/bass_whale2.ogg": "b85c213aed6546ec8686f23f6c067886c8877ef3", + "minecraft/sounds/ambient/underwater/additions/bubbles1.ogg": "42d408bcaf1eedb56d67ecb1830c1bca972945bb", + "minecraft/sounds/ambient/underwater/additions/bubbles2.ogg": "2a7e0c71307f2f6d1b6b2e4e89dd83974cbf41d8", + "minecraft/sounds/ambient/underwater/additions/bubbles3.ogg": "16d4ffc146ea150158b410b094c676a2b2a1b33a", + "minecraft/sounds/ambient/underwater/additions/bubbles4.ogg": "799bc1661b7f771993906dbd61f66e331e6c7371", + "minecraft/sounds/ambient/underwater/additions/bubbles5.ogg": "f413b910995d27726ff581e2cffea2b73b9bea9c", + "minecraft/sounds/ambient/underwater/additions/bubbles6.ogg": "a70223a6a2369490c3f0e524794bee4e1ced6a7f", + "minecraft/sounds/ambient/underwater/additions/crackles1.ogg": "1252bc3bc70444a0719651f9c44f63d5343c7e46", + "minecraft/sounds/ambient/underwater/additions/crackles2.ogg": "ab38a0de64c27de16e3268d86339b100665f31ed", + "minecraft/sounds/ambient/underwater/additions/dark1.ogg": "5c2c1396d025b31899e64170c0d68b5aaa5bcf95", + "minecraft/sounds/ambient/underwater/additions/dark2.ogg": "d18c5588648d2ccfad21266bc3086e817715a1c9", + "minecraft/sounds/ambient/underwater/additions/dark3.ogg": "9870aac3e67912103715daff13532010b94f8dfb", + "minecraft/sounds/ambient/underwater/additions/dark4.ogg": "59d9086078d62a1c254f376efdc9563e99f6f9ec", + "minecraft/sounds/ambient/underwater/additions/driplets1.ogg": "309b7d70e68e6adcce89347356f1ff369281f676", + "minecraft/sounds/ambient/underwater/additions/driplets2.ogg": "4a28fb5d79c2cdcdd65666d9e8c11977b76a70c7", + "minecraft/sounds/ambient/underwater/additions/earth_crack.ogg": "880940d69969b702dde0807f29411c4c166f7c50", + "minecraft/sounds/ambient/underwater/additions/water1.ogg": "bd3df414a62eeb543b2e6ff2ee3ecad44412875a", + "minecraft/sounds/ambient/underwater/additions/water2.ogg": "e47790094f5b42482c9d6fd04f79a9b84ae9ff0d", + "minecraft/sounds/ambient/underwater/enter1.ogg": "7ba5854050897c8ef2efd8b1e4f878807154808a", + "minecraft/sounds/ambient/underwater/enter2.ogg": "8f501d40a4f75b8ebea3718ec6de8b9bee9bef6c", + "minecraft/sounds/ambient/underwater/enter3.ogg": "ca75ecfa65f05b616911574da104a3b58448eb2a", + "minecraft/sounds/ambient/underwater/exit1.ogg": "1811fdab411fd2501e8aa5a325de18db0282b693", + "minecraft/sounds/ambient/underwater/exit2.ogg": "125de45cae330e1e1c370482bc62c0f8c916d259", + "minecraft/sounds/ambient/underwater/exit3.ogg": "aa952fbf823bf799bbd023de31442569ea8b6688", + "minecraft/sounds/ambient/underwater/underwater_ambience.ogg": "2619f8780101e7ed90979adae6e88e39a0222c29", + "minecraft/sounds/ambient/weather/rain1.ogg": "59d8157fa79a96eb6557e4ff440aa7482edbbd52", + "minecraft/sounds/ambient/weather/rain2.ogg": "87fe1be2e8238dcf66ed0072cc8115702fe6b108", + "minecraft/sounds/ambient/weather/rain3.ogg": "c9d72edd2cd3a9f22ad5c6d900ea82dd4d64a0a5", + "minecraft/sounds/ambient/weather/rain4.ogg": "0e5dc591233a89f48c54bc54dfb1b337068e3b46", + "minecraft/sounds/ambient/weather/rain5.ogg": "f88c75c9c2d8cee9a9678e6e92f02371ea3d754b", + "minecraft/sounds/ambient/weather/rain6.ogg": "7cf945b7f890ae37adc150d5724fef99aed4d4e5", + "minecraft/sounds/ambient/weather/rain7.ogg": "e57aa22cc1f10bc8df115ced994e2de081a02237", + "minecraft/sounds/ambient/weather/rain8.ogg": "f22fffb4d87e6400999d1b4dd5a392a557ecd971", + "minecraft/sounds/ambient/weather/thunder1.ogg": "a20f0a846d7becf5d08756207f86acf24fac1a8d", + "minecraft/sounds/ambient/weather/thunder2.ogg": "9c94cf13276d60a7ce67eacdc3885f25fa0aadf5", + "minecraft/sounds/ambient/weather/thunder3.ogg": "7b96a88619a2228cf4c7d3a2b81ecfd1b3b56673", + "minecraft/sounds/block/amethyst/break1.ogg": "97b47b7a62f22addf6ff1db0c57b2fce22504098", + "minecraft/sounds/block/amethyst/break2.ogg": "fc857c1990d4bc7c157f4f8367ca4af0bd6168a2", + "minecraft/sounds/block/amethyst/break3.ogg": "3df72a8b90820eb7edfdcc816bf0febf49d94b7c", + "minecraft/sounds/block/amethyst/break4.ogg": "02ab34275a8711ea0145682083c321516b1ce490", + "minecraft/sounds/block/amethyst/place1.ogg": "cd4043ed1b5f883545ff0a269ffaaaf2758670fb", + "minecraft/sounds/block/amethyst/place2.ogg": "3a6ddcf1e7ea91f209713d03f713ef4d762a6437", + "minecraft/sounds/block/amethyst/place3.ogg": "8047b9279c9ac27483a3cc9e46dbef7c91465a28", + "minecraft/sounds/block/amethyst/place4.ogg": "1f049a7f368675990b173a101bcb92c90fcfab14", + "minecraft/sounds/block/amethyst/resonate1.ogg": "a135be46d5b8875428a50206ebf21925b4d4ead2", + "minecraft/sounds/block/amethyst/resonate2.ogg": "18b7eae4c8b8c2938ada086e44d8ce2c03f4df68", + "minecraft/sounds/block/amethyst/resonate3.ogg": "8d0f5200fb9949cf55e1de57297349c1188a3115", + "minecraft/sounds/block/amethyst/resonate4.ogg": "f558195a907e9dae4559bf054cb710a5019ddcf6", + "minecraft/sounds/block/amethyst/shimmer.ogg": "a62c6054fe1ac8137b22f29959b562c0d821b6ed", + "minecraft/sounds/block/amethyst/step1.ogg": "a0b189453154bd86ff8d6c941e4e01bd5021c472", + "minecraft/sounds/block/amethyst/step10.ogg": "6b2a7ff4fabb0285c50785acbb92720610bf9a86", + "minecraft/sounds/block/amethyst/step11.ogg": "a5335c2cf7877c146eee04e5b876ab0c01fe82d9", + "minecraft/sounds/block/amethyst/step12.ogg": "793afdfc1b11b160bea076e18b635e78594ebf27", + "minecraft/sounds/block/amethyst/step13.ogg": "c48966208f3b003318f411638e0319609065760f", + "minecraft/sounds/block/amethyst/step14.ogg": "b65c21fa3dfb0b283db7f247f3bf7961832916e6", + "minecraft/sounds/block/amethyst/step2.ogg": "c697b8d40bcc08d02fb14080bc0677554982be5d", + "minecraft/sounds/block/amethyst/step3.ogg": "911cf4d77ca2cfc7a4d5ffdb2c40554036cad5d1", + "minecraft/sounds/block/amethyst/step4.ogg": "92f61228a9a0dfab21dada9f530a8bf926266e21", + "minecraft/sounds/block/amethyst/step5.ogg": "ebf37eeeee4b62c34b4694f96340c5f0b42e7d69", + "minecraft/sounds/block/amethyst/step6.ogg": "0e12cc9cb756d12674ea01ec28762c05d2ceca35", + "minecraft/sounds/block/amethyst/step7.ogg": "7b09812c2b6e891590794b9a781e0d6a0e8befe8", + "minecraft/sounds/block/amethyst/step8.ogg": "dc74e553d162c301072dff6edf8d9d7b50a9fdd2", + "minecraft/sounds/block/amethyst/step9.ogg": "c1f9797ddfd38e67cbafaaf93f54f191bbaca722", + "minecraft/sounds/block/amethyst_cluster/break1.ogg": "e1740d184c200975ba50bda28b8095a782670b7d", + "minecraft/sounds/block/amethyst_cluster/break2.ogg": "f083b4a80f957cdde6bbc30ae6a26f8d8d190ae4", + "minecraft/sounds/block/amethyst_cluster/break3.ogg": "4bb85ec0463268e73658de26bc29ba60473abf96", + "minecraft/sounds/block/amethyst_cluster/break4.ogg": "60c88b2d0a2c82635f1d2469323bb8affd4339b3", + "minecraft/sounds/block/amethyst_cluster/place1.ogg": "979e158a9c798c2cb3fd6b83a675d3029795b1f7", + "minecraft/sounds/block/amethyst_cluster/place2.ogg": "5739d04564662a44fed5f274e6c1e780c42193d8", + "minecraft/sounds/block/amethyst_cluster/place3.ogg": "a850abda672f505eda68da08686ce5ba38e98424", + "minecraft/sounds/block/amethyst_cluster/place4.ogg": "ee3766ad91311671fe51ab5aad1d1752559cc1e2", + "minecraft/sounds/block/ancient_debris/break1.ogg": "80192b06c08980d15a933ee0aa1c7eba5bd9c110", + "minecraft/sounds/block/ancient_debris/break2.ogg": "7157aafc9c8a1735b9dbaeaf588e6bf39a16e61c", + "minecraft/sounds/block/ancient_debris/break3.ogg": "ed5ae9af8d9930fb04487434f2ee1d77856cee2b", + "minecraft/sounds/block/ancient_debris/break4.ogg": "f7c536aa2bfa413058ff92547210ddea1e8ca194", + "minecraft/sounds/block/ancient_debris/break5.ogg": "610ec4abc16e8cab1b2133bfbb3d9926d3c629e1", + "minecraft/sounds/block/azalea/break1.ogg": "f072e1ea7949f1b7abc7546e1e995cc294661985", + "minecraft/sounds/block/azalea/break2.ogg": "eb4d54fca28de797c309d13bae3d907bedad633d", + "minecraft/sounds/block/azalea/break3.ogg": "0134b8025c7ec8105cfaf850e0a4040fcfc93cf1", + "minecraft/sounds/block/azalea/break4.ogg": "03a1fcefc1224395d0c2b87525cdd17a270ed8f8", + "minecraft/sounds/block/azalea/break5.ogg": "8fd668f6584957c324c9eaccecefe1b811276485", + "minecraft/sounds/block/azalea/break6.ogg": "cb60f1ce5f4a0c38a6b2f4f287f708321c9b6a42", + "minecraft/sounds/block/azalea/step1.ogg": "4f841896c898aa4a20db902ed5683be431727d09", + "minecraft/sounds/block/azalea/step2.ogg": "0903c8aab0bade3a30dedb87000543fa757a3830", + "minecraft/sounds/block/azalea/step3.ogg": "fa46fa9128075af6cbd423fd52aada024932a82e", + "minecraft/sounds/block/azalea/step4.ogg": "cd04e3fc276e047d8f2030dcb9d923d426f16203", + "minecraft/sounds/block/azalea/step5.ogg": "fddd20faa0da21da79b19e89f1eb756c5218d0cd", + "minecraft/sounds/block/azalea/step6.ogg": "0be119370167e749ac3ffe67ee9fd9935ea5df8a", + "minecraft/sounds/block/azalea_leaves/break1.ogg": "09fe6bf6b8c0c5912edec2d22874ef49820baab0", + "minecraft/sounds/block/azalea_leaves/break2.ogg": "5051ca4b109d465c1524b5625a364dc9c98c6046", + "minecraft/sounds/block/azalea_leaves/break3.ogg": "adcae20609d1f828a1225af5f604f72f5c4fb117", + "minecraft/sounds/block/azalea_leaves/break4.ogg": "9920cfbe289ddee5447e97304a01c3d11377983b", + "minecraft/sounds/block/azalea_leaves/break5.ogg": "1a7631a3590477fcb454846191891a0edddfe563", + "minecraft/sounds/block/azalea_leaves/break6.ogg": "f19e9d11b4703257187fe78150e08d0dbaf7ce13", + "minecraft/sounds/block/azalea_leaves/break7.ogg": "fc30546a46675b2a1d6893636f15dd7343f2ac11", + "minecraft/sounds/block/azalea_leaves/step1.ogg": "e91322c3fc6f86883e3d4b56e642b959465067b8", + "minecraft/sounds/block/azalea_leaves/step2.ogg": "0976802baf73753eb8feba5beb05f11053c593e2", + "minecraft/sounds/block/azalea_leaves/step3.ogg": "a1d536a39ee1de7d61e580e6dc27f00ce9c2ec15", + "minecraft/sounds/block/azalea_leaves/step4.ogg": "bcd0f038e531be361b2aaedfdce952a76bcad3ce", + "minecraft/sounds/block/azalea_leaves/step5.ogg": "4ecb1cb31b563bbce5dc4867fa68032e9f5f7e0f", + "minecraft/sounds/block/bamboo/place1.ogg": "6f797144f816541aa43f119b4f9cb130048df70b", + "minecraft/sounds/block/bamboo/place2.ogg": "f300b4634a026e51a0b3c760fba6662483208d26", + "minecraft/sounds/block/bamboo/place3.ogg": "b8cdebb74d1e26e8b8a312af1575150b6891a49c", + "minecraft/sounds/block/bamboo/place4.ogg": "326134c1718d012006b6be1c02204b5e1865907f", + "minecraft/sounds/block/bamboo/place5.ogg": "2843a6f2d76f9dfb362a0938522181e68db83ac9", + "minecraft/sounds/block/bamboo/place6.ogg": "8bef91a032873606b8e70be7a885448fbedf657c", + "minecraft/sounds/block/bamboo/sapling_hit1.ogg": "c740cd0075574d1a6f07835e890fe1b584f6a81b", + "minecraft/sounds/block/bamboo/sapling_hit2.ogg": "c1ac1e175c6455070b4540ff9d16a1d5f84dd7d8", + "minecraft/sounds/block/bamboo/sapling_hit3.ogg": "16b67f7a0c3a03b60d6fbe8ae7ad6906c4b4fb11", + "minecraft/sounds/block/bamboo/sapling_hit4.ogg": "ffc27e79f6d191154702610ec056e106bc051208", + "minecraft/sounds/block/bamboo/sapling_hit5.ogg": "47b6a0b93c447b07f0be50ef331df0db97662c64", + "minecraft/sounds/block/bamboo/sapling_place1.ogg": "6eece3d1e68f2cc5c44d1dd0271935a032ad18ed", + "minecraft/sounds/block/bamboo/sapling_place2.ogg": "2ee826b38dd00813f26692a7de90e352eb4c812e", + "minecraft/sounds/block/bamboo/sapling_place3.ogg": "9d019d55711de8f310cfd167852a7298ca8a052e", + "minecraft/sounds/block/bamboo/sapling_place4.ogg": "ffb94b364eb694fec2cdc9ee412f52f7ada6070c", + "minecraft/sounds/block/bamboo/sapling_place5.ogg": "d74905f08eb52b11055eb29dd159184dba5150a7", + "minecraft/sounds/block/bamboo/sapling_place6.ogg": "2f30dcc0a8d06de7737886fdd2ee7012a924eab7", + "minecraft/sounds/block/bamboo/step1.ogg": "b97c3c571328e5b87c0411fd85ca71f887f8b51c", + "minecraft/sounds/block/bamboo/step2.ogg": "e79aa37dd4f19c461fddb36f406809ea1f962426", + "minecraft/sounds/block/bamboo/step3.ogg": "0dd9b4f8824ec7e7ad8a2f771f6affd591f6d091", + "minecraft/sounds/block/bamboo/step4.ogg": "4b7e0729b62626f5dcc65be24443d83defd30ec0", + "minecraft/sounds/block/bamboo/step5.ogg": "e7a858535966f99659d374f47c291ace24376c21", + "minecraft/sounds/block/bamboo/step6.ogg": "8de88913c677e71da62e113b58caa1ad7935f468", + "minecraft/sounds/block/bamboo_wood/break1.ogg": "cc9085f74264c2fa0ed864c107cc99a77565ea03", + "minecraft/sounds/block/bamboo_wood/break2.ogg": "c22d2c46238f1a9e3da7b311721f815217139bd4", + "minecraft/sounds/block/bamboo_wood/break3.ogg": "f1ccbee7c2633399fce0b0b447de975938b76119", + "minecraft/sounds/block/bamboo_wood/break4.ogg": "25521a196b3acc962d55f2d424c89a3ce757c836", + "minecraft/sounds/block/bamboo_wood/break5.ogg": "9b53041a543fdbd0f219a9a0bb378a6ed5103f82", + "minecraft/sounds/block/bamboo_wood/step1.ogg": "550e94017979ac5c20c587edab0024192acbc278", + "minecraft/sounds/block/bamboo_wood/step2.ogg": "e7818b52cd006008a7ee98f512067fde32fff0c6", + "minecraft/sounds/block/bamboo_wood/step3.ogg": "151df7faa5ba5614f7f86416d8ec683c7d9c0809", + "minecraft/sounds/block/bamboo_wood/step4.ogg": "bc187df1091f454b26f9b0b503bf12d557239770", + "minecraft/sounds/block/bamboo_wood/step5.ogg": "394ca943ee0678d13066531663fab6f1f41aea80", + "minecraft/sounds/block/bamboo_wood/step6.ogg": "51e0ac658961510dedc7d09a55d6a9fd9ab08497", + "minecraft/sounds/block/bamboo_wood_button/bamboo_wood_button.ogg": "4430e15a4d60083b9a1479beafd80ef132a651e3", + "minecraft/sounds/block/bamboo_wood_door/toggle1.ogg": "86082b956f8f548dc909ff4bcb5a2f729c65397e", + "minecraft/sounds/block/bamboo_wood_door/toggle2.ogg": "1cfbc7d97388508caa9df121fb41d7c2ff1897ff", + "minecraft/sounds/block/bamboo_wood_door/toggle3.ogg": "ee4cb58c10d927cd71fb93a91bc26f7e82c4f6b9", + "minecraft/sounds/block/bamboo_wood_door/toggle4.ogg": "81917a810e2d000ffcecee236fd59fba0383896a", + "minecraft/sounds/block/bamboo_wood_fence/toggle1.ogg": "561ec373e0556b34e1cebc647a44df39339a6b7d", + "minecraft/sounds/block/bamboo_wood_fence/toggle2.ogg": "ccd608398535517bd855f28e0b3c00832373bdbf", + "minecraft/sounds/block/bamboo_wood_fence/toggle3.ogg": "91d150774699001663cf17fa677e083d76a7014a", + "minecraft/sounds/block/bamboo_wood_fence/toggle4.ogg": "2aa5a5c53aa0e5722d1804a085cbcb5a705c524c", + "minecraft/sounds/block/bamboo_wood_hanging_sign/break1.ogg": "5be2d2af796b7b06a3c19d9e753210a272f6a194", + "minecraft/sounds/block/bamboo_wood_hanging_sign/break2.ogg": "6eae899a01a619c8159a79ee33f5555ac8edfacb", + "minecraft/sounds/block/bamboo_wood_hanging_sign/break3.ogg": "477cf5979094e0512e27d8e94e8b2ba98a479813", + "minecraft/sounds/block/bamboo_wood_hanging_sign/break4.ogg": "ee368242f57f021781e63d1f474720ac54257ac3", + "minecraft/sounds/block/bamboo_wood_hanging_sign/step1.ogg": "5c952648ebfc26241c9a5eccf4df06926b88d2e4", + "minecraft/sounds/block/bamboo_wood_hanging_sign/step2.ogg": "e2e099dbd66f0fe576cfb2e45f1999152847d511", + "minecraft/sounds/block/bamboo_wood_hanging_sign/step3.ogg": "9973249da2a3c95d932a38ca8570c60a9a8914f3", + "minecraft/sounds/block/bamboo_wood_hanging_sign/step4.ogg": "c15ef07564e069980974af309418847e5bcca521", + "minecraft/sounds/block/bamboo_wood_trapdoor/toggle1.ogg": "b6a49b5e947919c47d218697267c383c5553047d", + "minecraft/sounds/block/bamboo_wood_trapdoor/toggle2.ogg": "8fe6ffcac6cb527a4a1cd1810b6e10e702f0e39d", + "minecraft/sounds/block/bamboo_wood_trapdoor/toggle3.ogg": "4f55f82edbaa1c600462e711ce5b15da57e47e6d", + "minecraft/sounds/block/bamboo_wood_trapdoor/toggle4.ogg": "39122faf5c169baa901fd996dde41c3f29c20df0", + "minecraft/sounds/block/barrel/close.ogg": "2933ec1db4be45d5c2980ddce10f2209c4ee5230", + "minecraft/sounds/block/barrel/open1.ogg": "db0752c95ce3a167d0d21d0370e6824e120bee8c", + "minecraft/sounds/block/barrel/open2.ogg": "4a6a5bd43789676bcee313f8071c1f9138729597", + "minecraft/sounds/block/basalt/break1.ogg": "94bb6b253b7b185dce169221b3312bfba87f0bf1", + "minecraft/sounds/block/basalt/break2.ogg": "484aa5a6c50f1ddc6cdf57c19a3750b006c92e8f", + "minecraft/sounds/block/basalt/break3.ogg": "32b83f2f9b1c1c5a51a15ea17dedad92cf7aecb1", + "minecraft/sounds/block/basalt/break4.ogg": "7cc80749257e0df1d4ba6497d5ee49f15f0b6513", + "minecraft/sounds/block/basalt/break5.ogg": "3d30cf57e7ea8e8b3e94b7b1b6c21310c03fcf5d", + "minecraft/sounds/block/basalt/step1.ogg": "0e93efa70b9b8b2d4edd719b498b9c9c834a3832", + "minecraft/sounds/block/basalt/step2.ogg": "8a5ca64c3334328e4eecc4ed405340a217c0c28e", + "minecraft/sounds/block/basalt/step3.ogg": "372a080abb302cda9618aa8fdb0451badab9b2b9", + "minecraft/sounds/block/basalt/step4.ogg": "b1595a8d9aa1455d635ba9e73c1e4f6825ebe073", + "minecraft/sounds/block/basalt/step5.ogg": "bb5cc7a1ce12e97c787161d158c8f3a4232a9020", + "minecraft/sounds/block/basalt/step6.ogg": "3ef94652f082954479fb1b26ea42c92d1801bd0e", + "minecraft/sounds/block/beacon/activate.ogg": "28892890033064296ba36dfc9462be578d7b969a", + "minecraft/sounds/block/beacon/ambient.ogg": "288152797238fee61acb9c8e93aacb7728be8104", + "minecraft/sounds/block/beacon/deactivate.ogg": "44bd337eda14f18dd7d5c3366b91a5cea7e34bc0", + "minecraft/sounds/block/beacon/power1.ogg": "4b7a8bb552b47179761301bd7db481543e2404cf", + "minecraft/sounds/block/beacon/power2.ogg": "64b957ed6cb8e25f645cf3edd16df2dd83c04cb6", + "minecraft/sounds/block/beacon/power3.ogg": "8818eee402e23133873b51aa5ca4791f12fb3667", + "minecraft/sounds/block/beehive/drip1.ogg": "384931b89f622f9d55a4cd58cf8d328588b4de84", + "minecraft/sounds/block/beehive/drip2.ogg": "939be997b108dd223aa26adab3c35caf41588314", + "minecraft/sounds/block/beehive/drip3.ogg": "f550d4d895d47547fe58972d11e6029e903e1e39", + "minecraft/sounds/block/beehive/drip4.ogg": "2f80b9fdd8ee776dd2032f1f906fdc0cff427c9b", + "minecraft/sounds/block/beehive/drip5.ogg": "1368f950be4517b4ecaadd5da2ea8d9b3335e71d", + "minecraft/sounds/block/beehive/drip6.ogg": "0279a1e0669bfbf08cf8133a168b51a887aa6e7c", + "minecraft/sounds/block/beehive/enter.ogg": "69c5e373712ef6b1fa8a74188ad2998697fea5e8", + "minecraft/sounds/block/beehive/exit.ogg": "443b235cbaa3debae1ba0229f04ea7243cb1cd68", + "minecraft/sounds/block/beehive/shear.ogg": "a10cb2f721ba376a7d2bfe85291cde903bff3d59", + "minecraft/sounds/block/beehive/work1.ogg": "af7899a8835e361d8205580f1baf234f07354e5c", + "minecraft/sounds/block/beehive/work2.ogg": "d203866f75aba73c8f1cd1f347040023e0dc899d", + "minecraft/sounds/block/beehive/work3.ogg": "66a182bf80478faa761b4d78d396e6e8fed47337", + "minecraft/sounds/block/beehive/work4.ogg": "8849e75a8740e98b2613331272655ea5d6e95934", + "minecraft/sounds/block/bell/bell_use01.ogg": "af7fdeee060b5618460246826695c45b17fdbe3f", + "minecraft/sounds/block/bell/bell_use02.ogg": "496400b98474a0dc6769033fc8fe3db922549e8d", + "minecraft/sounds/block/bell/resonate.ogg": "486d067733df05b20b11e3dfc7b1d1a25526b6f0", + "minecraft/sounds/block/big_dripleaf/break1.ogg": "bb431f5babfe02d34f3de4bf8c0e13bf3eda3a8f", + "minecraft/sounds/block/big_dripleaf/break2.ogg": "47255d133c0535c1be709132c54fa21b807a77f2", + "minecraft/sounds/block/big_dripleaf/break3.ogg": "9cb0839e234c714ad880f6a3194f62219dca14d6", + "minecraft/sounds/block/big_dripleaf/break4.ogg": "69a2e5712c9c4c3a8baa1092f4fb3664c0e1a4c4", + "minecraft/sounds/block/big_dripleaf/break5.ogg": "2b2ac8e3015b75d9df65b12ec1b60fd515add986", + "minecraft/sounds/block/big_dripleaf/break6.ogg": "325a713ca5fc3580f022bb73fb58b48afc24e501", + "minecraft/sounds/block/big_dripleaf/step1.ogg": "3878bc489b0a8aa9a2465215772078352ee2120f", + "minecraft/sounds/block/big_dripleaf/step2.ogg": "7871eb3607f7ce9db79656cdba221b6c5ce25c4f", + "minecraft/sounds/block/big_dripleaf/step3.ogg": "fa51289eabe53d6440a6139d62f463ae645f6d58", + "minecraft/sounds/block/big_dripleaf/step4.ogg": "8738c6275a70c76d0f5c184fab8c953de0557e8f", + "minecraft/sounds/block/big_dripleaf/step5.ogg": "188e71a538efd71cd735b72dd8b9eb42e0d45ac2", + "minecraft/sounds/block/big_dripleaf/step6.ogg": "15010f2a6c3d3d996376e038af982f71bedfdafd", + "minecraft/sounds/block/big_dripleaf/tilt_down1.ogg": "bb1455229d719bcb9a50bc739d3630a200d37fbb", + "minecraft/sounds/block/big_dripleaf/tilt_down2.ogg": "5b546e717b6530000d18bf3a242d27fdaf5d2bfa", + "minecraft/sounds/block/big_dripleaf/tilt_down3.ogg": "66bb8badf84d28a31f4d7584bd1cde71addb20b2", + "minecraft/sounds/block/big_dripleaf/tilt_down4.ogg": "b9c97543573aea0b796303d4e51a2268dcbf0626", + "minecraft/sounds/block/big_dripleaf/tilt_down5.ogg": "1e8e2c38a9a16970094e4ad499440e77325c4f42", + "minecraft/sounds/block/big_dripleaf/tilt_up1.ogg": "3fc2112817cc025c93eb95cc1d0becf1b963b90d", + "minecraft/sounds/block/big_dripleaf/tilt_up2.ogg": "4c7f4cdd0626c77839e9ddfc120acd403c5444ae", + "minecraft/sounds/block/big_dripleaf/tilt_up3.ogg": "2861f25e5d304c80ec3c4c8be24780b202065795", + "minecraft/sounds/block/big_dripleaf/tilt_up4.ogg": "856cd7ba5df07d527d8fab59bcb620e07b278422", + "minecraft/sounds/block/blastfurnace/blastfurnace1.ogg": "a11636025bd4e85fec2f40ced585ac7028ee6046", + "minecraft/sounds/block/blastfurnace/blastfurnace2.ogg": "ca0c39fca7ab5b2dead37f6842a1d4ed4be1d621", + "minecraft/sounds/block/blastfurnace/blastfurnace3.ogg": "428e0d0e7c25d8ca12f1839d7e8623465e745a35", + "minecraft/sounds/block/blastfurnace/blastfurnace4.ogg": "2e9a2ad93404bf022c96f9fc944519ca21c14122", + "minecraft/sounds/block/blastfurnace/blastfurnace5.ogg": "15fe7b6d1e021b98fba3db61cb6770a9c9fd4b54", + "minecraft/sounds/block/bone_block/break1.ogg": "91ae98690736218edb5a24bb215d606be1d7c51e", + "minecraft/sounds/block/bone_block/break2.ogg": "7df7ac16c0c626ec85a989a2b63fa8143f149fd2", + "minecraft/sounds/block/bone_block/break3.ogg": "42cd5cfe8c34126062175d2c3d437db4b60bf925", + "minecraft/sounds/block/bone_block/break4.ogg": "62d0ae42e010821e3a4fe82652e9a7c7597013bb", + "minecraft/sounds/block/bone_block/break5.ogg": "ffc3155e5ebf3662feaa6dc6413be690c24f3633", + "minecraft/sounds/block/bone_block/step1.ogg": "723ab8918e4a49c9434924c23a46d8403117c9c2", + "minecraft/sounds/block/bone_block/step2.ogg": "281891c256915ee11ef4c3893a0c0b64a3fd8d2c", + "minecraft/sounds/block/bone_block/step3.ogg": "d781ed3a41c935c75305e990b591aa3aac1d6cdc", + "minecraft/sounds/block/bone_block/step4.ogg": "065186f68d8a54fe76d028da273ac2670eb09008", + "minecraft/sounds/block/bone_block/step5.ogg": "88d1ff9da5f9661168b3591273e0e153af1878a9", + "minecraft/sounds/block/brewing_stand/brew1.ogg": "ee0676820023142b84adf7065db872070ff86edb", + "minecraft/sounds/block/brewing_stand/brew2.ogg": "68a3447a6924f6cf0d1f970024bd0cb664972ac7", + "minecraft/sounds/block/bubble_column/bubble1.ogg": "631b1e3d64b315c432792ae015ba06083f34ef42", + "minecraft/sounds/block/bubble_column/bubble2.ogg": "912f27c8f38db853b835421579b3423393ae6260", + "minecraft/sounds/block/bubble_column/bubble3.ogg": "7b82612898e03ec61a3f49f809db703cfcd90c46", + "minecraft/sounds/block/bubble_column/upwards_ambient1.ogg": "cb6465255dddd7a501b8592b5b68c1bb73511f79", + "minecraft/sounds/block/bubble_column/upwards_ambient2.ogg": "5021730a7be8e2abed49649d545450ee44ac2112", + "minecraft/sounds/block/bubble_column/upwards_ambient3.ogg": "e22edffc8b879d8f042010b237d13247f17d5552", + "minecraft/sounds/block/bubble_column/upwards_ambient4.ogg": "6637a4756c12719f1dd59c2c2262fbb7f47875c5", + "minecraft/sounds/block/bubble_column/upwards_ambient5.ogg": "441c5d664ce613a1eff8fe2034c0ba368c7f3eec", + "minecraft/sounds/block/bubble_column/upwards_inside.ogg": "8868e83ebbdf92703f02eb8465520120f01c7ab6", + "minecraft/sounds/block/bubble_column/whirlpool_ambient1.ogg": "228b652fbb8d9f3d982ead2d0ab07fbd061a6908", + "minecraft/sounds/block/bubble_column/whirlpool_ambient2.ogg": "5492b1d8b471f403f7e2af774f2bfdee4e678889", + "minecraft/sounds/block/bubble_column/whirlpool_ambient3.ogg": "b1d714df1dff66b11a3fb2bf95f56fd3de7ee542", + "minecraft/sounds/block/bubble_column/whirlpool_ambient4.ogg": "7e985242c1b9b47ad6395daf23b9b23b6e57fac7", + "minecraft/sounds/block/bubble_column/whirlpool_ambient5.ogg": "6741e6a76f59d61730042f7b9a5aabbcc440a77e", + "minecraft/sounds/block/bubble_column/whirlpool_inside.ogg": "b74799d114c708694773ecabb007647c99973f35", + "minecraft/sounds/block/cake/add_candle1.ogg": "c268ad3b6ddf0005ac1270f745300faaded9fdf8", + "minecraft/sounds/block/cake/add_candle2.ogg": "73f6be05dc07c36b8be5c029f73fdd2eca3af293", + "minecraft/sounds/block/cake/add_candle3.ogg": "48862fe96a1e8b5c97d0bb07ce6571c335f392be", + "minecraft/sounds/block/calcite/break1.ogg": "cfd6b4db63ffaec9614d80d56fe2927f8aedab43", + "minecraft/sounds/block/calcite/break2.ogg": "af3b022b44ba0f87b1b119284f60987bd4d9ff3a", + "minecraft/sounds/block/calcite/break3.ogg": "29b1d75d1ef24892764120c9bec3a81fd46a3ed7", + "minecraft/sounds/block/calcite/break4.ogg": "e2e0a851ed4177eb0a5590e38a6e9d67cb32e8b2", + "minecraft/sounds/block/calcite/place1.ogg": "e2439eb75ea3b48581aa55b858d1fd4dd98e8d7d", + "minecraft/sounds/block/calcite/place2.ogg": "c748f00452be1c4bda28c3f0e672f7ffa59c027b", + "minecraft/sounds/block/calcite/place3.ogg": "7c8cf941eddc90b33007fbe7e95122848cabd236", + "minecraft/sounds/block/calcite/place4.ogg": "fd8a2120904453bd0f411ef122abb0096f07b82c", + "minecraft/sounds/block/calcite/step1.ogg": "f9e40e4713ecd899d3429844049bd8b275a44982", + "minecraft/sounds/block/calcite/step2.ogg": "1df02f5cffd771f11069d4e5fca9e901cbf27610", + "minecraft/sounds/block/calcite/step3.ogg": "8faf5fbcb4d1080241d44f2519a03b51fe92c3a9", + "minecraft/sounds/block/calcite/step4.ogg": "c40aea24787b7cce0c7fbcf950cc00e3f4c83ae5", + "minecraft/sounds/block/calcite/step5.ogg": "623ade16fac50f1ca883b38f67b41b02cf0c3e12", + "minecraft/sounds/block/calcite/step6.ogg": "fd1f1fd42cd32a5b5cea52a9c340a753587fc450", + "minecraft/sounds/block/campfire/crackle1.ogg": "5edb78c26e7c33f3b063ac681edd7b61dd3381a0", + "minecraft/sounds/block/campfire/crackle2.ogg": "2af9e14d4d56044ab96b5fed96a4af261eb230d2", + "minecraft/sounds/block/campfire/crackle3.ogg": "cb437915751e333e7054a2deb4e449612ae353dd", + "minecraft/sounds/block/campfire/crackle4.ogg": "f6824f8bedd23384944188bf00f9bcb91c6ca759", + "minecraft/sounds/block/campfire/crackle5.ogg": "40a50a72c02cd6b80815c5e9fe7c225cfab2f48b", + "minecraft/sounds/block/campfire/crackle6.ogg": "46169daee2ece0a3d3018578c80e8d175d48d49e", + "minecraft/sounds/block/candle/ambient1.ogg": "9d2969618da9501c1fbc40af6e775c23ca23c5b1", + "minecraft/sounds/block/candle/ambient2.ogg": "670e5884cdb3f5ef4ff33f175c278994d097993d", + "minecraft/sounds/block/candle/ambient3.ogg": "7e07671554c25c6969f42de636b3d976d31fd05a", + "minecraft/sounds/block/candle/ambient4.ogg": "fa66f10bb722a0e77a1bd2250501d53a936477c6", + "minecraft/sounds/block/candle/ambient5.ogg": "e3be518cd61155933433c6cb1ded6d8a1df89f9a", + "minecraft/sounds/block/candle/ambient6.ogg": "42204ac4fdac2c5631106a251ec38626351320c9", + "minecraft/sounds/block/candle/ambient7.ogg": "b452488d314f1bac96b7d4a21f0fd58acccf2ac0", + "minecraft/sounds/block/candle/ambient8.ogg": "4d0e0510a433fc624b8188509088aa04a530e9c0", + "minecraft/sounds/block/candle/ambient9.ogg": "bc1ca6e1cc863fa172bb09a0ec1e3356da2809e5", + "minecraft/sounds/block/candle/break1.ogg": "b0810a28f4e830280e26a59c40cc1bb12ba82e9b", + "minecraft/sounds/block/candle/break2.ogg": "642f4aec0fc60f20be24669dbca6e70bb69f26bb", + "minecraft/sounds/block/candle/break3.ogg": "1610e7eb27510c2e7afba890158d201c5f96d087", + "minecraft/sounds/block/candle/break4.ogg": "ff70366cf4a0a96784e0b106d1fba62c55dc9bcc", + "minecraft/sounds/block/candle/break5.ogg": "72b41d4c91dfb780106fa98639e180c86b744886", + "minecraft/sounds/block/candle/extinguish1.ogg": "ba74bb7c15c3126ae596d2dbe829738f092cc685", + "minecraft/sounds/block/candle/extinguish2.ogg": "aa4b21feb56cca319576289f48d9eec8570683cd", + "minecraft/sounds/block/candle/extinguish3.ogg": "feeee313beb55cf6d45b2f99c1bc23ec0a748cd9", + "minecraft/sounds/block/candle/step1.ogg": "54db8870ec9669d326e84c19507071650c92d3e3", + "minecraft/sounds/block/candle/step2.ogg": "0db776397819a632c88fbaea936fb92133e7e527", + "minecraft/sounds/block/candle/step3.ogg": "d049b28fc3ed2248fe64722a6c3bf804609bb306", + "minecraft/sounds/block/candle/step4.ogg": "6ec39e921a301681ecad0e067df2ddc953d1bd4f", + "minecraft/sounds/block/candle/step5.ogg": "008ab6dcdcac22f1dab94a5fc3ff7c3be12ecaae", + "minecraft/sounds/block/cauldron/dye1.ogg": "0666acde6adbf946a8c9c0c135db96ed341f1421", + "minecraft/sounds/block/cauldron/dye2.ogg": "4b01bb0855e33b81ba104d0c94fdad473ddff3b7", + "minecraft/sounds/block/cauldron/dye3.ogg": "a7c9f2e15fe097e97bcc6d129e7e03b436fde783", + "minecraft/sounds/block/cave_vines/break1.ogg": "2baa133f72953a7760a7c3789bb2af9b58646f3b", + "minecraft/sounds/block/cave_vines/break2.ogg": "55898a87d714f778ca0b3f7abdc87fce75e56b7b", + "minecraft/sounds/block/cave_vines/break3.ogg": "d5f97294ae98c752622b7fbdfc7fa32e0a141996", + "minecraft/sounds/block/cave_vines/break4.ogg": "bd957c218a9270dd77d10b98712b995b61d010e7", + "minecraft/sounds/block/cave_vines/break5.ogg": "14bd103e77ae1310e834f0892c7d90d0edb4d0d1", + "minecraft/sounds/block/chain/break1.ogg": "3c24328855ccdd933fba4b3247b329456f2f1b81", + "minecraft/sounds/block/chain/break2.ogg": "e861a169f03bd0c2cdea87172210b4de9cf9f191", + "minecraft/sounds/block/chain/break3.ogg": "7a7df9a71e86cd87074f92fcdc2a48da01169235", + "minecraft/sounds/block/chain/break4.ogg": "5b4904a7312be2c55a1db1b500eff30269f45e2e", + "minecraft/sounds/block/chain/step1.ogg": "b97fba61ba4a50a873a35fe4e84b541180bf89a5", + "minecraft/sounds/block/chain/step2.ogg": "3dafbad9dc1b4f6d362b386391f1c017508d5d42", + "minecraft/sounds/block/chain/step3.ogg": "6f1086519f3722b7c40b5ec15ad4a3e1baefdc05", + "minecraft/sounds/block/chain/step4.ogg": "1d4108a69bced7129b24c51b4011e0810cb76225", + "minecraft/sounds/block/chain/step5.ogg": "52d1dc49bbfbd67a6f1870793d1b90d2120a2a9a", + "minecraft/sounds/block/chain/step6.ogg": "f782c93d12dba8bb5985e9f94df42b60277aad09", + "minecraft/sounds/block/cherry_leaves/break1.ogg": "e37a1cce03b4d2b0711af303ca12f385513bf525", + "minecraft/sounds/block/cherry_leaves/break2.ogg": "73e4df44ac7d84734bbb96ca0f476c6ef2cca9a6", + "minecraft/sounds/block/cherry_leaves/break3.ogg": "c569d892b8e71e5847c39baa1aa2f2a155d99e4e", + "minecraft/sounds/block/cherry_leaves/break4.ogg": "22c4898315beef5371593f9093375bb867d41b65", + "minecraft/sounds/block/cherry_leaves/break5.ogg": "03ce1d7853f2cfe8bd4b9cee68ac7fa1a08285bf", + "minecraft/sounds/block/cherry_leaves/step1.ogg": "2da80a0e02b72466fbb3beb0258aebe37f06d2dd", + "minecraft/sounds/block/cherry_leaves/step2.ogg": "eb8164906353f4f9077eb3d4e913440bace7c3ef", + "minecraft/sounds/block/cherry_leaves/step3.ogg": "d7ad4cbbc2189a00cf28404d473a836b6a4c1014", + "minecraft/sounds/block/cherry_leaves/step4.ogg": "eba4d66a97f31ea8a55730d70694463357924335", + "minecraft/sounds/block/cherry_leaves/step5.ogg": "08f52b2a4deab55b16a4d6d2e2ae0b9c836666a3", + "minecraft/sounds/block/cherry_wood/break1.ogg": "a5917646618282d8d2383aa58b0bbf05507606cb", + "minecraft/sounds/block/cherry_wood/break2.ogg": "fee4387ba350fb2d9dd83a3f6c0b9c08ae40be27", + "minecraft/sounds/block/cherry_wood/break3.ogg": "631ea6f1e64ca68e9bb49862aaab1f71ed879227", + "minecraft/sounds/block/cherry_wood/break4.ogg": "818ecbb3788a79a72da93b8d2367000b90fdeeb7", + "minecraft/sounds/block/cherry_wood/break5.ogg": "219dd8d77204b36d8d45367f18f978c987a157d7", + "minecraft/sounds/block/cherry_wood/step1.ogg": "ac04f54eda90242fb93e50ca699359e452cabe37", + "minecraft/sounds/block/cherry_wood/step2.ogg": "f80ac07fd29a87232fef38a657f5e5ab654229fb", + "minecraft/sounds/block/cherry_wood/step3.ogg": "4147e403d6810ea5c24f856e17b42cf6806c0ac4", + "minecraft/sounds/block/cherry_wood/step4.ogg": "3b26613786f78114f40a1078c88311e31308dd9d", + "minecraft/sounds/block/cherry_wood/step5.ogg": "6a98537ff3698f2678f9d585c70216b15b4fe1d7", + "minecraft/sounds/block/cherry_wood/step6.ogg": "06bc0a3761bd322d26933c7597c86acb15242151", + "minecraft/sounds/block/cherry_wood_hanging_sign/break1.ogg": "f820f483ee022e9c8c7c64fdcc3205dfa3f57747", + "minecraft/sounds/block/cherry_wood_hanging_sign/break2.ogg": "f1b078c5dffd1cfc4e96160a776d7788ef5e17b8", + "minecraft/sounds/block/cherry_wood_hanging_sign/break3.ogg": "b66b02ae251364316a87c04d23ce0818818456a9", + "minecraft/sounds/block/cherry_wood_hanging_sign/break4.ogg": "097798914f7b4de095cbf76e6d154d58fc321f22", + "minecraft/sounds/block/cherry_wood_hanging_sign/step1.ogg": "c27d0aac4f4c7fdd2ff872f1d900f711582c2cd6", + "minecraft/sounds/block/cherry_wood_hanging_sign/step2.ogg": "0fff04bae2e68be07342942487706b351e5bb8ed", + "minecraft/sounds/block/cherry_wood_hanging_sign/step3.ogg": "43fd095b526ebf6f292c2d63fe28cec673707153", + "minecraft/sounds/block/cherry_wood_hanging_sign/step4.ogg": "a92635ffeed92282a716ce1f613f00ac40a85ae7", + "minecraft/sounds/block/cherrywood_button/cherrywood_click.ogg": "c246d102d0ff657a94b8a39f3ba6cf31f88e06ff", + "minecraft/sounds/block/cherrywood_door/toggle1.ogg": "8028f043cf9b7e73d4c89c3fcdb61b63f56e7322", + "minecraft/sounds/block/cherrywood_door/toggle2.ogg": "bdda303d3448d7c3d0db185515fb2ac9c4923470", + "minecraft/sounds/block/cherrywood_door/toggle3.ogg": "f9012db5040e08d07a22a620dcc405cdc3972ee5", + "minecraft/sounds/block/cherrywood_door/toggle4.ogg": "411f1dfe2ae82294cf873be8195359911d089e86", + "minecraft/sounds/block/cherrywood_fence_gate/toggle1.ogg": "d2a97a385b650f56b4d08797e370724c6d191168", + "minecraft/sounds/block/cherrywood_fence_gate/toggle2.ogg": "18719dd2c60d6faa295ac81fc8eb7c71d652debb", + "minecraft/sounds/block/cherrywood_fence_gate/toggle3.ogg": "544fbe5a0f9142f9ef84679fb7ebe9ee7eb58e38", + "minecraft/sounds/block/cherrywood_trapdoor/toggle1.ogg": "c24bab9b91cb2930736f84f7cbceaeb5d494e7e3", + "minecraft/sounds/block/cherrywood_trapdoor/toggle2.ogg": "28428844c6a0970815f7e0a4efff48d22947ad69", + "minecraft/sounds/block/cherrywood_trapdoor/toggle3.ogg": "24fdff18debd1596bdbe45bb4cfe076ef6c4d5b9", + "minecraft/sounds/block/chest/close1.ogg": "b15208bfec9342137bfdbb3b1aa90c8c59fdbb12", + "minecraft/sounds/block/chest/close2.ogg": "9ad4a06e128d4fe58937dc96d25f2f7dc1c6643b", + "minecraft/sounds/block/chest/close3.ogg": "363b091c102b0188c0a67b14150fc17777fba2e8", + "minecraft/sounds/block/chest/close_locked.ogg": "6b2c846ec8ed094f959d6134058d689430a2d67b", + "minecraft/sounds/block/chest/open.ogg": "fdb64434f50c1443b516f45547f62f64c9f0b3c4", + "minecraft/sounds/block/chest/open_locked.ogg": "70b0d0dabb74efcd05476a832d9a1af6b6f87d46", + "minecraft/sounds/block/chiseled_bookshelf/break1.ogg": "58f904c0c7b0502b6cde480c356cf1970dea09c5", + "minecraft/sounds/block/chiseled_bookshelf/break2.ogg": "4ecb43cdcadf266fd37297ac795f591fdd5b169f", + "minecraft/sounds/block/chiseled_bookshelf/break3.ogg": "a89cc74e28097546b39f393c21761e573f968603", + "minecraft/sounds/block/chiseled_bookshelf/break4.ogg": "1bc0813bf5e481101d80c123de1d3773fb8e8649", + "minecraft/sounds/block/chiseled_bookshelf/break5.ogg": "1cd16f0d51e7021a1910e0bdfc10b68be84d68ec", + "minecraft/sounds/block/chiseled_bookshelf/break6.ogg": "71cb911b1991fb44d04c23358b3aca48d9b690f9", + "minecraft/sounds/block/chiseled_bookshelf/insert1.ogg": "ff0253a660370841a8e7a1e3370c66c0e3a29dac", + "minecraft/sounds/block/chiseled_bookshelf/insert2.ogg": "b9a13347bb6c94d96fe798668415fd04092915f4", + "minecraft/sounds/block/chiseled_bookshelf/insert3.ogg": "7739ae87621d47ff47a36d6cadf2984438f7ffe5", + "minecraft/sounds/block/chiseled_bookshelf/insert4.ogg": "c1cf9cd1fa97cb04795683a80959be56b5a08374", + "minecraft/sounds/block/chiseled_bookshelf/insert_enchanted1.ogg": "dd8b95252bf92ca815d10c0f7c7fa004e60b8c35", + "minecraft/sounds/block/chiseled_bookshelf/insert_enchanted2.ogg": "e52c5e8d95c6c4d935449141f38a9b48972c9c85", + "minecraft/sounds/block/chiseled_bookshelf/insert_enchanted3.ogg": "3cb86999d7ece06f86a2e29c94b760b5d77f63d0", + "minecraft/sounds/block/chiseled_bookshelf/insert_enchanted4.ogg": "0bd9f569835966f06236483648dd79419a636ded", + "minecraft/sounds/block/chiseled_bookshelf/pickup1.ogg": "5c8c7e969869f97b45b28458a29f7cb0abdaaa9a", + "minecraft/sounds/block/chiseled_bookshelf/pickup2.ogg": "32e656200ba4a507579de8bd6c38e7c5a207c332", + "minecraft/sounds/block/chiseled_bookshelf/pickup3.ogg": "36d181b213f35eacebc4984261e745631b148a92", + "minecraft/sounds/block/chiseled_bookshelf/pickup_enchanted1.ogg": "c5b68eec5dd33613b1fe34a6fa80735d6301551c", + "minecraft/sounds/block/chiseled_bookshelf/pickup_enchanted2.ogg": "b7c8f20c690b6e74e665979afad90d13622507c4", + "minecraft/sounds/block/chiseled_bookshelf/pickup_enchanted3.ogg": "e9a15247ba3a53a58e33c0d47dde7632626283bb", + "minecraft/sounds/block/chiseled_bookshelf/step1.ogg": "e2cea3aecffc8383535202ac877759e54b464a77", + "minecraft/sounds/block/chiseled_bookshelf/step2.ogg": "44bf73c4b415442ca23bf917a465c996113a08fb", + "minecraft/sounds/block/chiseled_bookshelf/step3.ogg": "3e299e4046df5f8a660c16db5b50faefb3976cb0", + "minecraft/sounds/block/chiseled_bookshelf/step4.ogg": "106aa8342185c13f75f8a6c44d7186603de62fce", + "minecraft/sounds/block/chiseled_bookshelf/step5.ogg": "57291a737b71d702a8bed3fdb1df8263cb2d123a", + "minecraft/sounds/block/chorus_flower/death1.ogg": "9660299d31b6a8d345b8b21f82934c49150de15a", + "minecraft/sounds/block/chorus_flower/death2.ogg": "93b2ae9bffbbf94cc94999dbfff9cb58e3009488", + "minecraft/sounds/block/chorus_flower/death3.ogg": "f35eec6a4dc2653bef2cd489c1fc1b2ec96c45e3", + "minecraft/sounds/block/chorus_flower/grow1.ogg": "ce42b98a1a030efad7210ff3c59807c152f7c54f", + "minecraft/sounds/block/chorus_flower/grow2.ogg": "10a00a20070ca5ea3b8151c7d5a8f4ce84f05998", + "minecraft/sounds/block/chorus_flower/grow3.ogg": "2036f59b02988afac9e39a96751ce24ab7edc3ea", + "minecraft/sounds/block/chorus_flower/grow4.ogg": "3bab28dd831dbd0f70fd74ee1bf549571fbbecbf", + "minecraft/sounds/block/cobweb/break1.ogg": "e3bf0330c20e1020e23eb873ad655686d3bb2eb3", + "minecraft/sounds/block/cobweb/break2.ogg": "d691d8b12f320c6dde1edf27eea87db82b1d8a8f", + "minecraft/sounds/block/cobweb/break3.ogg": "2219b4e3106c3491936c82624e76faeee2dd66aa", + "minecraft/sounds/block/cobweb/break4.ogg": "d30cb8759cd6ec4da16d2cd3703efca5b0b5b413", + "minecraft/sounds/block/cobweb/break5.ogg": "10425642c04c50bcfd974356d9b6c70d8a104730", + "minecraft/sounds/block/cobweb/break6.ogg": "0abd682271cda1a5513e57cea7cdbcf383893813", + "minecraft/sounds/block/cobweb/step1.ogg": "23edec96549a8af965ce41c737bce85b5aa8b2d7", + "minecraft/sounds/block/cobweb/step2.ogg": "487efa6238a36d1745938c30e434d5d2972c4d29", + "minecraft/sounds/block/cobweb/step3.ogg": "bfb1049841a3595dd8118575db33de1bb482094c", + "minecraft/sounds/block/cobweb/step4.ogg": "d7edc70a0a6af1f241c2730869a74b83ece2c34b", + "minecraft/sounds/block/cobweb/step5.ogg": "6b85e734842e78d8284351f9c571d31f90a7da4a", + "minecraft/sounds/block/cobweb/step6.ogg": "ccb20a2db1107737f4ba087a9047d6dddb85aae8", + "minecraft/sounds/block/composter/empty1.ogg": "6bb2cdcea082f3318f5ee371ff94307312b0b5d0", + "minecraft/sounds/block/composter/empty2.ogg": "52aef6b85220e8f40b4f6b12600e876c5ae2b728", + "minecraft/sounds/block/composter/empty3.ogg": "7d7f7244a248dbf3b5db57aa2cde2d9d43e98b12", + "minecraft/sounds/block/composter/fill1.ogg": "7e4c50715d8ae2e51d320cc9d35aa564124693f7", + "minecraft/sounds/block/composter/fill2.ogg": "ca39057e2946eb481bb50b4186b52daadfbd7c1b", + "minecraft/sounds/block/composter/fill3.ogg": "985f000ff3b189601ad8de7997cda4d8af0c3f74", + "minecraft/sounds/block/composter/fill4.ogg": "f78a2094a7952634accb4a3a94419040e237092b", + "minecraft/sounds/block/composter/fill_success1.ogg": "41b2be4fa07b754dec426a0f8a152f10da40cc63", + "minecraft/sounds/block/composter/fill_success2.ogg": "f65e3616b32987b37735e69e0f25866bac75af6b", + "minecraft/sounds/block/composter/fill_success3.ogg": "3c4519470a30fd304e7189e1e7d454a3048bdc3a", + "minecraft/sounds/block/composter/fill_success4.ogg": "2efa63676b53e391c7c184d739044880cf694fee", + "minecraft/sounds/block/composter/ready1.ogg": "6c605ff79d8c1e30e52127138627e49ed2190e73", + "minecraft/sounds/block/composter/ready2.ogg": "ebe23a9c980acf919a3e611e74a3b51a8630be53", + "minecraft/sounds/block/composter/ready3.ogg": "58dd568a1d69b7365c33a06d5b54d1b70de0134e", + "minecraft/sounds/block/composter/ready4.ogg": "881057fb4871a123565b52143d63e3763af5f19a", + "minecraft/sounds/block/conduit/activate.ogg": "c2a7d28c80b49b04a1620a94a17405543a6fb1f6", + "minecraft/sounds/block/conduit/ambient.ogg": "148f34232a196bc04f61ea19f7ce39b2d330f45c", + "minecraft/sounds/block/conduit/attack1.ogg": "8439416a43efb373f1d54f2aa7d5c34ef2b7cda5", + "minecraft/sounds/block/conduit/attack2.ogg": "3270cf470710d8cbdeafe11e3e17448568f38b3c", + "minecraft/sounds/block/conduit/attack3.ogg": "4f903fdda92ed58d7a277a4221abe91c62f66f4e", + "minecraft/sounds/block/conduit/deactivate.ogg": "376554546bd7b0a108ff0be10ab4ba6389f0d125", + "minecraft/sounds/block/conduit/short1.ogg": "0b7ee07685cfd9f79bad201a3298e836869fc047", + "minecraft/sounds/block/conduit/short2.ogg": "c603db5c082e803c30e5fef555777143f96fcef9", + "minecraft/sounds/block/conduit/short3.ogg": "be2ca34c27adf5afe28781419ac55e015e48cf3b", + "minecraft/sounds/block/conduit/short4.ogg": "f8c9d5ab9d536dfea1652a2b3ce4878cf05a4b6f", + "minecraft/sounds/block/conduit/short5.ogg": "3db046e681a9888135e84e20a3e009575be65c62", + "minecraft/sounds/block/conduit/short6.ogg": "cb1dee565c5bdb7b16e025269aebbb4eabd69b13", + "minecraft/sounds/block/conduit/short7.ogg": "8923380f8288688f9183cfc1ec54f3c15061c396", + "minecraft/sounds/block/conduit/short8.ogg": "a41d82d0326266551006b4333af2e578d76b92a4", + "minecraft/sounds/block/conduit/short9.ogg": "3590f6f4fec1a1a2d24e6675fcc47ede09a7db3d", + "minecraft/sounds/block/copper/break1.ogg": "0971e38c31ca3d8a73cf0c4e4f8e1181bac82cf7", + "minecraft/sounds/block/copper/break2.ogg": "9606d4fb8a45d243704bd48e7569854526ab8590", + "minecraft/sounds/block/copper/break3.ogg": "ad3224028a3a2b7ac7fd1df82349d4cb61a06fd1", + "minecraft/sounds/block/copper/break4.ogg": "12c7ad583e2a0dd000c2dcd7ef4088330e0b18a2", + "minecraft/sounds/block/copper/step1.ogg": "9ad25c61551cfb93ca37731f9e7c6aa3a6ae3908", + "minecraft/sounds/block/copper/step2.ogg": "ab7982b9c9a0bbc6dcf38f0e0b2f3b6a911015bc", + "minecraft/sounds/block/copper/step3.ogg": "88ea17890a302ce1c8c4f499f6c7d6022f3917a6", + "minecraft/sounds/block/copper/step4.ogg": "eaf01859132e4f238cc2347c496016a92aaa4808", + "minecraft/sounds/block/copper/step5.ogg": "f8dabd3f3053aa45461a7e04e4428b25795172d7", + "minecraft/sounds/block/copper/step6.ogg": "187a79f49b69ba0d465aa4edc146808f0e04a35b", + "minecraft/sounds/block/copper_bulb/break1.ogg": "6669a59d95aa4f21d7d5a8068b42513694508c75", + "minecraft/sounds/block/copper_bulb/break2.ogg": "ea07abc11f8508d31b8e89386a4e2bb1bb602204", + "minecraft/sounds/block/copper_bulb/break3.ogg": "556cab29343e57f6443848c8582d2de3ad81f64f", + "minecraft/sounds/block/copper_bulb/break4.ogg": "4599306fb9df32b50b76012d6bd64bcb4c6bada6", + "minecraft/sounds/block/copper_bulb/place1.ogg": "2beab2d45dca0d65368ca44e2757df67da28acfe", + "minecraft/sounds/block/copper_bulb/place2.ogg": "92c82d5dae46a4ce7c743580d50dbb71376dc0ab", + "minecraft/sounds/block/copper_bulb/place3.ogg": "5b195c23a0e44177ef75975b5bf29c7315934908", + "minecraft/sounds/block/copper_bulb/place4.ogg": "5acc575e360a4f94d5a06b127b93c8c434f33247", + "minecraft/sounds/block/copper_bulb/step1.ogg": "f71fa1d73c11f266ae4da0bb85f2bfbbd9843e26", + "minecraft/sounds/block/copper_bulb/step2.ogg": "2c407f9ec146b242dc6b343faccbcd814a697f9b", + "minecraft/sounds/block/copper_bulb/step3.ogg": "650523a255e0d62b2900f0b69556a176e329680e", + "minecraft/sounds/block/copper_bulb/step4.ogg": "3d2aee74c91bf715f8cccc5d7a31fbffb27b916f", + "minecraft/sounds/block/copper_bulb/step5.ogg": "fb36173ad2d8fa5dc3bec16bffe9ca2aa5514d6a", + "minecraft/sounds/block/copper_bulb/step6.ogg": "9ea6c70cbb191c25a6572817339699ad88743877", + "minecraft/sounds/block/copper_bulb/toggle.ogg": "3cb58941cda74d99d934ab7de21a8197c02c2984", + "minecraft/sounds/block/copper_door/toggle1.ogg": "269eccfec612e3e4aa9c5c88833db1843a9fe986", + "minecraft/sounds/block/copper_door/toggle2.ogg": "352d993b893cfa0cd62293aeb410f29e687065a5", + "minecraft/sounds/block/copper_door/toggle3.ogg": "3fa0c7a0cce3dc05632c509b1c364b45a9335c76", + "minecraft/sounds/block/copper_grate/break1.ogg": "5ac7f5e586f1fdb4966cdb7e39c1b5989c52de9f", + "minecraft/sounds/block/copper_grate/break2.ogg": "029a8c21302bfd3733de3b9ef02a0b08dbd8d75d", + "minecraft/sounds/block/copper_grate/break3.ogg": "79e8a065c5ce2c593d45190b9ad8e5ec75f4edf0", + "minecraft/sounds/block/copper_grate/break4.ogg": "f1551be173bda7327006a3eb106bb8244fd74893", + "minecraft/sounds/block/copper_grate/step1.ogg": "2be6e1d2d7b2ead3e934c1d0ffe22d0a9007f1ff", + "minecraft/sounds/block/copper_grate/step2.ogg": "5ed74a344ad807ff75ea8010736a7a2277925458", + "minecraft/sounds/block/copper_grate/step3.ogg": "bba658e4fff93192be4748de9b5780e4d77eddb6", + "minecraft/sounds/block/copper_grate/step4.ogg": "488394809bc2c1ffe51a0694d184e7fd0437495f", + "minecraft/sounds/block/copper_grate/step5.ogg": "03ea54a43c621c13c6d38cdb857e4bb6a76a8023", + "minecraft/sounds/block/copper_grate/step6.ogg": "407be1e34e09022a1a175b64c7c87ac05bd1584a", + "minecraft/sounds/block/copper_trapdoor/toggle1.ogg": "656fdfef5989c5634d62c25aff1e81916eb4f7f6", + "minecraft/sounds/block/copper_trapdoor/toggle2.ogg": "b6366428d1b9fd074146ede74e0e95efd0330063", + "minecraft/sounds/block/copper_trapdoor/toggle3.ogg": "1fa807cfaf7979026cf567fc706c58b301fc27ce", + "minecraft/sounds/block/copper_trapdoor/toggle4.ogg": "bc9216bc46954a47659704667c8298a350177a5e", + "minecraft/sounds/block/crafter/craft.ogg": "51430c287f1d1901384b513ba14eb86703e39761", + "minecraft/sounds/block/crafter/fail.ogg": "835e8767ccd13731038505fa80c564d7b65f9d81", + "minecraft/sounds/block/creaking_heart/break/creaking_heart_break.ogg": "951bd24d521e7466557f50220af188f5d0d2d4c7", + "minecraft/sounds/block/creaking_heart/fall/creaking_heart_fall.ogg": "79087504baf5844468823ecbc2ef092d31011298", + "minecraft/sounds/block/creaking_heart/hit/creaking_heart_hit1.ogg": "f04f3818a8344179ea169eb252b8ead671836f69", + "minecraft/sounds/block/creaking_heart/hit/creaking_heart_hit2.ogg": "e4f2f698a6281c7d85f72363525655628e3d4d1b", + "minecraft/sounds/block/creaking_heart/hit/creaking_heart_hit3.ogg": "90a690d7850c916b4aaed906be3730e761ebffa8", + "minecraft/sounds/block/creaking_heart/hit/creaking_heart_hit4.ogg": "8a059948fa1bb11c735a212722f4243ab8cee2bb", + "minecraft/sounds/block/creaking_heart/hit/creaking_heart_hit5.ogg": "1ce850fe67a405cd5dafe550743655ba7f5477c4", + "minecraft/sounds/block/creaking_heart/hurt/trail1.ogg": "3d6144967801fcd05665f45768082dac5b4f36c9", + "minecraft/sounds/block/creaking_heart/hurt/trail2.ogg": "8b65d256a03b0ce5568d701655f5f87740fdc30f", + "minecraft/sounds/block/creaking_heart/hurt/trail3.ogg": "bfcce3651ca4c42d72cff71858502eaab9b9e6bf", + "minecraft/sounds/block/creaking_heart/hurt/trail4.ogg": "361a0d4382833f2e1c5a1a84de4c9bfcca48de16", + "minecraft/sounds/block/creaking_heart/hurt/trail5.ogg": "a329c273360e55b51d051e633714456bf2a66a5a", + "minecraft/sounds/block/creaking_heart/hurt/trail6.ogg": "4e9240b0b53868110b26cd527e2dc852cb406895", + "minecraft/sounds/block/creaking_heart/hurt/trail7.ogg": "c4e757abe67ec75b2ffdf808bb904327987980cd", + "minecraft/sounds/block/creaking_heart/idle/creaking_heart_idle1.ogg": "9423ca87fdc43522b12f30a324ba8756a36c62e1", + "minecraft/sounds/block/creaking_heart/idle/creaking_heart_idle2.ogg": "d8438a09f5dfe9a7bc4e0e6bb1d1827a4f226def", + "minecraft/sounds/block/creaking_heart/idle/creaking_heart_idle3.ogg": "50eca2e6d9a97e884fbfdcb0a30befb3e78f55d8", + "minecraft/sounds/block/creaking_heart/idle/creaking_heart_idle4.ogg": "cbb3377c9f8c8997f3b0d5722e632e6b03a9d206", + "minecraft/sounds/block/creaking_heart/place/creaking_heart_place1.ogg": "2157d02c910bfece3ba95ccf2b9ba4b8f15fca16", + "minecraft/sounds/block/creaking_heart/place/creaking_heart_place2.ogg": "0df1a7fadb71ab9a8aeb0e09631cde6812f02f07", + "minecraft/sounds/block/creaking_heart/place/creaking_heart_place3.ogg": "383d58430fbe460cf0a23adb7080bd1fd334b8a1", + "minecraft/sounds/block/creaking_heart/place/creaking_heart_place4.ogg": "c682b6ec9d7d601ac20378a4e2340670dce350f7", + "minecraft/sounds/block/creaking_heart/place/wood1.ogg": "110ad730c3a43b26a9b2457b59f65d9f10ea32af", + "minecraft/sounds/block/creaking_heart/place/wood2.ogg": "819109a6d3b1f3cac55bf47a38900045869b826f", + "minecraft/sounds/block/creaking_heart/place/wood3.ogg": "eb8f84a956ec661d84ad6214e6098de97c894db2", + "minecraft/sounds/block/creaking_heart/place/wood4.ogg": "903a6525b6d483a100f7531a792eddc656324fb6", + "minecraft/sounds/block/creaking_heart/spawnmob/creaking_heart_spawnmob.ogg": "7c2e83c4d82f8f351f6f4188f1fe1d9592f49499", + "minecraft/sounds/block/creaking_heart/step/creaking_heart_step1.ogg": "d53e7fe1270c7c8e26f559bd38165c52de1ade68", + "minecraft/sounds/block/creaking_heart/step/creaking_heart_step2.ogg": "c3b01e40dcc6d8e4d3e5665a3ae27e40c0cce082", + "minecraft/sounds/block/creaking_heart/step/creaking_heart_step3.ogg": "c8334f4b1bd15783b421771691acef1bbc0ac925", + "minecraft/sounds/block/creaking_heart/step/creaking_heart_step4.ogg": "3b80a9b5ab0a3780e249e2241201c2e91c791e76", + "minecraft/sounds/block/creaking_heart/step/creaking_heart_step5.ogg": "75f0045e0d2c80008868d32a9ac0757f597545b0", + "minecraft/sounds/block/creaking_heart/step/creaking_heart_step6.ogg": "d74d2fee6daa8276531e4a34d643a00decbe54bc", + "minecraft/sounds/block/decorated_pot/break1.ogg": "78ac79c9818b1d67229d845d5a4e3ee6e61d6d8e", + "minecraft/sounds/block/decorated_pot/break2.ogg": "b32b5de6ce7aa2c755411f8bd2eef6f430f13713", + "minecraft/sounds/block/decorated_pot/break3.ogg": "2eada693a9d40259e38b8e0cdbc1914d2b428560", + "minecraft/sounds/block/decorated_pot/break4.ogg": "a9dba324533068db41ed3a469ccb47cd8059fcdc", + "minecraft/sounds/block/decorated_pot/insert1.ogg": "1809f80cd813f57855f9c9c1a010f6d17dd4a649", + "minecraft/sounds/block/decorated_pot/insert2.ogg": "69de25025c1e217844abc2adf3b547cbf8176814", + "minecraft/sounds/block/decorated_pot/insert3.ogg": "7da7d56846a22d42c82cc511af3b93fed4d7123d", + "minecraft/sounds/block/decorated_pot/insert4.ogg": "a66698e1f9e53057d2f5cf8b06f21d807f84560c", + "minecraft/sounds/block/decorated_pot/insert_fail1.ogg": "1951d9003d62162a765700b587c573b109be7629", + "minecraft/sounds/block/decorated_pot/insert_fail2.ogg": "abf753c2ea6cb7c7a85eea69ec9c8487f96752a4", + "minecraft/sounds/block/decorated_pot/insert_fail3.ogg": "7e75d89480b76ae89c45503198b4b5834639b93a", + "minecraft/sounds/block/decorated_pot/insert_fail4.ogg": "964d2e9bf8294d6d271648c03a8da7c9f7b12a91", + "minecraft/sounds/block/decorated_pot/insert_fail5.ogg": "a60f0eb2578fb8ab48b93a62c747a8d1c8597cca", + "minecraft/sounds/block/decorated_pot/shatter1.ogg": "603e4795260af35c8d4648232f595bc4f9d6c56e", + "minecraft/sounds/block/decorated_pot/shatter2.ogg": "726f5257fc8b3b49da1ade18a4a6395cdc7128b9", + "minecraft/sounds/block/decorated_pot/shatter3.ogg": "81c82bfaf8a5222a6f13a4256ad08acfa71cde70", + "minecraft/sounds/block/decorated_pot/shatter4.ogg": "6882f98957c6ca466de5ca61a7bf8ab087d0be1e", + "minecraft/sounds/block/decorated_pot/shatter5.ogg": "38897373c385d415bd606ec1abe4da714a76e5bb", + "minecraft/sounds/block/decorated_pot/step1.ogg": "f01c78ac7381b67f5e3014ae5ed153417fd9acf2", + "minecraft/sounds/block/decorated_pot/step2.ogg": "421af59b08999afa060a848a27c2d6351eb87ac6", + "minecraft/sounds/block/decorated_pot/step3.ogg": "d488a658e985008dc1294fcac50f1b7a2f5e4344", + "minecraft/sounds/block/decorated_pot/step4.ogg": "041e272a9b846d85fa6ea5f7b58efd8d098948ab", + "minecraft/sounds/block/decorated_pot/step5.ogg": "8dcac0ef3f5ead77a5530f68c95c5a410a8b2cf0", + "minecraft/sounds/block/deepslate/break1.ogg": "10ca1bd826243a68c27721cdb82ea8e6d9b77a69", + "minecraft/sounds/block/deepslate/break2.ogg": "5bcc8f30d6b91f411a072b3d519a10e56a52bc5e", + "minecraft/sounds/block/deepslate/break3.ogg": "9b0f5516cd2decc745c7681f5b3f763f74c016a8", + "minecraft/sounds/block/deepslate/break4.ogg": "25f1bc69e8991e9ef0ca5bbabf9d13b7d5ccef85", + "minecraft/sounds/block/deepslate/place1.ogg": "25afb522d285c83c3a50007289bbfe1770bebaf5", + "minecraft/sounds/block/deepslate/place2.ogg": "53c7ade7123abe57fe72a35b855ceba543674072", + "minecraft/sounds/block/deepslate/place3.ogg": "dfdb585d1959ed830cbccc55d10190cba64a8310", + "minecraft/sounds/block/deepslate/place4.ogg": "e5ca13f1ea8432beda44f3d0c037015d72885043", + "minecraft/sounds/block/deepslate/place5.ogg": "98d9b15c6eacb67c6a4854fb0d3b97de3ab30340", + "minecraft/sounds/block/deepslate/place6.ogg": "85a926523452c262caa6f0bf3bf408a12e00f84e", + "minecraft/sounds/block/deepslate/step1.ogg": "0cf970cda6c7911eccf7bdbfaedf8134cb0dce59", + "minecraft/sounds/block/deepslate/step2.ogg": "1c8b0730d35a49b7460548db4f648086d64df6e0", + "minecraft/sounds/block/deepslate/step3.ogg": "6afbb475721b805b742f7e0bfae974594c5f6ce9", + "minecraft/sounds/block/deepslate/step4.ogg": "cae0425262afc9f1a725e632677a147025855014", + "minecraft/sounds/block/deepslate/step5.ogg": "9422061b499393c0163531dc8a536b5459ef168f", + "minecraft/sounds/block/deepslate/step6.ogg": "377153b349fa87703f381e4ce03dd954ec836f9d", + "minecraft/sounds/block/deepslate_bricks/place1.ogg": "028386c3a30bacec953cfb951f6550674f08f607", + "minecraft/sounds/block/deepslate_bricks/place2.ogg": "fff53a8f308c1fd78641188f635e01ef29eba61c", + "minecraft/sounds/block/deepslate_bricks/place3.ogg": "f95804a9685ba71d5e365ab01ea206e620d1ad63", + "minecraft/sounds/block/deepslate_bricks/place4.ogg": "a20add2a3031db81fe7ba732b721438db2c95889", + "minecraft/sounds/block/deepslate_bricks/place5.ogg": "e06ac63b2fb7dfe7234d2b0536e3abc483eccb24", + "minecraft/sounds/block/deepslate_bricks/place6.ogg": "cf7392963a13efadd11efe67f64895d44ddf03cf", + "minecraft/sounds/block/deepslate_bricks/step1.ogg": "fcd6c4cb3bd169eaaf9f609fa143959b4e259f52", + "minecraft/sounds/block/deepslate_bricks/step2.ogg": "2a965d409f4fb92d54d6ede7fc91cc47eea84881", + "minecraft/sounds/block/deepslate_bricks/step3.ogg": "74e99006d462c1d27f1628e35d72d44865347ed9", + "minecraft/sounds/block/deepslate_bricks/step4.ogg": "3a088e8aca46099f75c1a41f25c4e7f3e9db8524", + "minecraft/sounds/block/deepslate_bricks/step5.ogg": "87d5e8d5a978b0443d23741bb88434e88d60f60f", + "minecraft/sounds/block/dripstone/break1.ogg": "52c0482e727a9370374d59d8c6756d4cc828ac39", + "minecraft/sounds/block/dripstone/break2.ogg": "671b2fd5ff27883e9f4122b85a935774aadf0563", + "minecraft/sounds/block/dripstone/break3.ogg": "e877830582b6104352e90b35267dd91cffc8bc4e", + "minecraft/sounds/block/dripstone/break4.ogg": "c0b0636758ec85bd68ee8f4f9c7f79cd94daf2d2", + "minecraft/sounds/block/dripstone/break5.ogg": "6976b32e73a61a4bcaa761e51e4c4723674cf995", + "minecraft/sounds/block/dripstone/step1.ogg": "325b3145152437b6367e5a7644a4dcf7dc5851a0", + "minecraft/sounds/block/dripstone/step2.ogg": "2ef258042270ceae68c58a9bec9ae0a9ed0b2580", + "minecraft/sounds/block/dripstone/step3.ogg": "e0770d777577c35b55c806473556d8c5b967c836", + "minecraft/sounds/block/dripstone/step4.ogg": "80e109cad5a1c3556d3e7fa05023d3a5caa06a3a", + "minecraft/sounds/block/dripstone/step5.ogg": "5b78e2daaa4bcfb7bb2158859e73f6853c0a5286", + "minecraft/sounds/block/dripstone/step6.ogg": "874a85ad778aabf2595544b07da0197b49f24dd4", + "minecraft/sounds/block/enchantment_table/enchant1.ogg": "81fb73a754948f5d3f66972eb8404c12caf3d440", + "minecraft/sounds/block/enchantment_table/enchant2.ogg": "3da9a539fa3df4e70c6ab3eda39244288d83d3c4", + "minecraft/sounds/block/enchantment_table/enchant3.ogg": "62579dcf7b4bee2dfed7b64b94191bc2fee59cf3", + "minecraft/sounds/block/end_portal/endportal.ogg": "26cd0eda5615a02f1954de91dbf03d30670c031a", + "minecraft/sounds/block/end_portal/eyeplace1.ogg": "4a005d06d7684a38172f6cc763470e28b511c012", + "minecraft/sounds/block/end_portal/eyeplace2.ogg": "86e50969063621cfdf9388d207cc20e83195e763", + "minecraft/sounds/block/end_portal/eyeplace3.ogg": "95a4c1e7dc57e1d8fb1dec2349d7474968ecce30", + "minecraft/sounds/block/enderchest/close.ogg": "a76ef9378fc732b6df8902a9e1f1bc2ec6ce7fd0", + "minecraft/sounds/block/enderchest/open.ogg": "5f767c63a81e6579862c377a137e977d18768fc0", + "minecraft/sounds/block/eyeblossom/eyeblossom_close1.ogg": "8a3e53e060d2afd15c634bcdfdf6368e5d67cfb3", + "minecraft/sounds/block/eyeblossom/eyeblossom_close2.ogg": "93f7d5c9a9909e8acb58d53f0de85633f1c0d907", + "minecraft/sounds/block/eyeblossom/eyeblossom_close3.ogg": "71103b592ecb37e3b27ca3bd585fb06bfecc893f", + "minecraft/sounds/block/eyeblossom/eyeblossom_close_long.ogg": "6194784cddbd9eeba04602d62e9f8b48f209ada4", + "minecraft/sounds/block/eyeblossom/eyeblossom_idle1.ogg": "867043461e73df31076e74a8b9247fdffd30e6a1", + "minecraft/sounds/block/eyeblossom/eyeblossom_idle2.ogg": "eaf429a19fa56728ff8ce2fd312fd6c5a70d2af3", + "minecraft/sounds/block/eyeblossom/eyeblossom_idle3.ogg": "22bb473aaf36574555ca6e38bd69c0ec490dc903", + "minecraft/sounds/block/eyeblossom/eyeblossom_idle4.ogg": "0deea905080ffcd7b60b132028c04847f9d8d684", + "minecraft/sounds/block/eyeblossom/eyeblossom_idle5.ogg": "e615f5e9baf928e00115d84c7f287b1b1e8ed8d0", + "minecraft/sounds/block/eyeblossom/eyeblossom_idle6.ogg": "d1a0dd0eac2d8d81355849289c2cf0a434d3d246", + "minecraft/sounds/block/eyeblossom/eyeblossom_open1.ogg": "0fdf31adb7ab2d0af6e14ff615cfed27e6c95dd2", + "minecraft/sounds/block/eyeblossom/eyeblossom_open2.ogg": "b9dd3b0531aede1c5887b634fee63609e2305723", + "minecraft/sounds/block/eyeblossom/eyeblossom_open3.ogg": "c03ad485adf7987ea2be20207be558e23d904a62", + "minecraft/sounds/block/eyeblossom/eyeblossom_open4.ogg": "99ce682350c75934e52dafd946476e62c0a4f7f6", + "minecraft/sounds/block/eyeblossom/eyeblossom_open_long.ogg": "386adb1a2ab6eff86ab241f7376ad501ae7b6b45", + "minecraft/sounds/block/fence_gate/close1.ogg": "d8555cff1012f18bb05199ed5415108994e4400a", + "minecraft/sounds/block/fence_gate/close2.ogg": "deb1617c33e693a8d1fff7636efd4f0207347044", + "minecraft/sounds/block/fence_gate/open1.ogg": "9ecaba4f3d4ba3ca5eed76a95abd1b232d7ec007", + "minecraft/sounds/block/fence_gate/open2.ogg": "13bba294847b1d20b68a004f62fb8fb8b06c9fa6", + "minecraft/sounds/block/fletching_table/fletching_table1.ogg": "3a032babadb2e384f1412f6ac05a69e0bd0736b6", + "minecraft/sounds/block/fletching_table/fletching_table2.ogg": "9751fe8193532dae7df155f2a17eb45519c231b5", + "minecraft/sounds/block/froglight/break1.ogg": "364ffa7952f56038bc4274415b25d2e4f3221923", + "minecraft/sounds/block/froglight/break2.ogg": "df4143127a1beddf60415877b39b35cd82bbc47e", + "minecraft/sounds/block/froglight/break3.ogg": "2891cb85fbd8a90ed03889d0d17c640f518b42f7", + "minecraft/sounds/block/froglight/break4.ogg": "eeb1a037f3011c6c5b42cdcf34ae5a9cc4fa137f", + "minecraft/sounds/block/froglight/step1.ogg": "7678f24f572b9abbcfa3fcdc3f647e70b2139c4c", + "minecraft/sounds/block/froglight/step2.ogg": "559a02997de3175804810d3f29d567ae7d6b25dc", + "minecraft/sounds/block/froglight/step3.ogg": "199755acda9ff8e68311691f71002dbc8c8a68e9", + "minecraft/sounds/block/froglight/step4.ogg": "9ea0b90c978fa1fd42b432ef9ac7e90ae78be65f", + "minecraft/sounds/block/froglight/step5.ogg": "dd88cb17c10e4e6db9f6176b55ac9a95a36e958c", + "minecraft/sounds/block/froglight/step6.ogg": "e8a9a8c6c37f23e844a88ebcb7d8a39deb9d99e0", + "minecraft/sounds/block/frogspawn/break1.ogg": "2f5568d492a49c0bc36a9d2711f4bd87977f88c0", + "minecraft/sounds/block/frogspawn/break2.ogg": "f1b983140ad6a27be16a1f7079eef2f6942a1b73", + "minecraft/sounds/block/frogspawn/break3.ogg": "89e0fcbc59d01ef3d0929afbce9db78dfae29a3e", + "minecraft/sounds/block/frogspawn/break4.ogg": "e0bede88edb12879b3e34743f81ca5af1634c4c6", + "minecraft/sounds/block/frogspawn/hatch1.ogg": "92ed5d01731c0ce62f341425909319c7ac894a96", + "minecraft/sounds/block/frogspawn/hatch2.ogg": "1c189b5685045def884ef8752006bddbdd7f11fb", + "minecraft/sounds/block/frogspawn/hatch3.ogg": "8c584a285e699660942a9ffd16971bfac87bb337", + "minecraft/sounds/block/frogspawn/hatch4.ogg": "d8f877d754e29839011111e9a016be7c66c14462", + "minecraft/sounds/block/frogspawn/hatch5.ogg": "14b3534e2622470a71dbe69474c15e6a233cc1c6", + "minecraft/sounds/block/frogspawn/step1.ogg": "da8f6ebbc16826ff4ccf4091667f23ac62a7c710", + "minecraft/sounds/block/frogspawn/step2.ogg": "2bad307a2e2c4880316b7a0946dd0e4c1ed753da", + "minecraft/sounds/block/frogspawn/step3.ogg": "8ed6b6a1a08f56d5aeeb3994bb7f294a9ff342b7", + "minecraft/sounds/block/frogspawn/step4.ogg": "2e431342cd6e0de5ed7fd397d733dae07878ce9b", + "minecraft/sounds/block/frogspawn/step5.ogg": "fc3c5a15ca3126b41e55b14f6b93b32fae0e6ec4", + "minecraft/sounds/block/frogspawn/step6.ogg": "73969292d8da9b3fbedcb27e3d0f4eea4ba64227", + "minecraft/sounds/block/fungus/break1.ogg": "5617b344111456e4dbdc079b8bf3c4dfc34d9924", + "minecraft/sounds/block/fungus/break2.ogg": "49013f794592d1c3694879a9e883e8612d7a8a0b", + "minecraft/sounds/block/fungus/break3.ogg": "84d3ea63e3a016c4bab7e5477f3a5fa303c7ed19", + "minecraft/sounds/block/fungus/break4.ogg": "8485b20a62a0d364fe713be63df20c8a93181406", + "minecraft/sounds/block/fungus/break5.ogg": "cbe538f075bc65040e6c20188dec7c3cae3017be", + "minecraft/sounds/block/fungus/break6.ogg": "4f83255b0f8a4d58969aa5bb49a0a4b599875c3e", + "minecraft/sounds/block/furnace/fire_crackle1.ogg": "e2678af72ebaa5d6e1d89935d1a540d3120f3593", + "minecraft/sounds/block/furnace/fire_crackle2.ogg": "7bab209c06bf6883932c31542ac068548224dbba", + "minecraft/sounds/block/furnace/fire_crackle3.ogg": "70675b5c54517a6276ab311ee9302d0c331fa73b", + "minecraft/sounds/block/furnace/fire_crackle4.ogg": "3169821e109e3d5cf94a33d835e19534aded7db1", + "minecraft/sounds/block/furnace/fire_crackle5.ogg": "eece842840cd93d36ad7a8bc459cf8e431da208f", + "minecraft/sounds/block/grindstone/grindstone1.ogg": "ce7827134b654a394f9819ce77a1f3c9e0809070", + "minecraft/sounds/block/grindstone/grindstone2.ogg": "7bbbce598d019c64dd29959b6808bcd0b0e4d62b", + "minecraft/sounds/block/grindstone/grindstone3.ogg": "6b518182d367db6dd70fb81a204febd48821d4ef", + "minecraft/sounds/block/hanging_roots/break1.ogg": "c09538dc271842c3662d7c60cf9cd28713203b00", + "minecraft/sounds/block/hanging_roots/break2.ogg": "858b522acda61ab94dc9b52e75974e32b941c809", + "minecraft/sounds/block/hanging_roots/break3.ogg": "279c5eb57f9f8e91661ec69a074ab76c316d7356", + "minecraft/sounds/block/hanging_roots/break4.ogg": "6189d20ac2b2f05ef3e7e5485942be88d69307e4", + "minecraft/sounds/block/hanging_roots/step1.ogg": "b9ddc9980e14d1e32e7302b2ccb7ca03e7d4a624", + "minecraft/sounds/block/hanging_roots/step2.ogg": "f12746a79c34c36a87f0cabe7df1375e3b117743", + "minecraft/sounds/block/hanging_roots/step3.ogg": "c58202838caf73242f039ecbcdafbc10f7bb9111", + "minecraft/sounds/block/hanging_roots/step4.ogg": "e8a4101bf68a3a8d792919e390782c357aef4b94", + "minecraft/sounds/block/hanging_roots/step5.ogg": "9ebce2e32ca79b91e5c1d2339d1ccfe159526279", + "minecraft/sounds/block/hanging_roots/step6.ogg": "cb941a05cbaa57947fcca362a0d638b5d8c1e780", + "minecraft/sounds/block/hanging_sign/break1.ogg": "33dcd77a59abcf70fef080015aa4305149a8f6d8", + "minecraft/sounds/block/hanging_sign/break2.ogg": "1843cc603e40b465bc5e5047c74aef8a991f1e69", + "minecraft/sounds/block/hanging_sign/break3.ogg": "296ec244acae70f236c8f1220380976b8fa9e636", + "minecraft/sounds/block/hanging_sign/break4.ogg": "e19b634969f9f5a8e637d60be81488d86d835185", + "minecraft/sounds/block/hanging_sign/step1.ogg": "fc7e49c67bffc811f02ea9fef1cf893a15317003", + "minecraft/sounds/block/hanging_sign/step2.ogg": "2c2db8e64a159d526c4f0e6928ddc852c923252b", + "minecraft/sounds/block/hanging_sign/step3.ogg": "58d49f1ee9aee1fb8c455bff3372a5685c0de8fa", + "minecraft/sounds/block/hanging_sign/step4.ogg": "932044cf67069d4b7d651e325cbe2e47e3d9a264", + "minecraft/sounds/block/heavy_core/break1.ogg": "8b4ac501a75c7a3f64b2a822b1f099a828ea8297", + "minecraft/sounds/block/heavy_core/break2.ogg": "2f5ef01938e2150b020e84704f8f1d1097dc8879", + "minecraft/sounds/block/heavy_core/break3.ogg": "9c80b75f314a4da35fe312c4455577526e0098ab", + "minecraft/sounds/block/heavy_core/break4.ogg": "77b0b1385766ddfaf61bf952bf4bc056fb594782", + "minecraft/sounds/block/heavy_core/step1.ogg": "3558e4e13ba3829cc69f1268581e30b962416816", + "minecraft/sounds/block/heavy_core/step2.ogg": "c22a772466a47677068b27ce20486ce225944ae0", + "minecraft/sounds/block/heavy_core/step3.ogg": "b2c137da3b3c4a462af349c2e12eaf54e2c6f86a", + "minecraft/sounds/block/heavy_core/step4.ogg": "01e0a7d49b42e9544735260401c6fc23247f72f7", + "minecraft/sounds/block/honeyblock/break1.ogg": "0867899d7b001c677a06b7cf839abe12cdb47ca5", + "minecraft/sounds/block/honeyblock/break2.ogg": "760af46c92f93d599f3429e6f3c49795238ab603", + "minecraft/sounds/block/honeyblock/break3.ogg": "84c1cb04d76e69d4585e5653524af3111b2b74d4", + "minecraft/sounds/block/honeyblock/break4.ogg": "1e895627247fad9d1d0e168f2a412d657b7685a1", + "minecraft/sounds/block/honeyblock/break5.ogg": "b221e56eb46371dc460f75e07f550042aa27776c", + "minecraft/sounds/block/honeyblock/slide1.ogg": "2c93c34d755ef0c4831bd8aab06fb2c9cf0e18f0", + "minecraft/sounds/block/honeyblock/slide2.ogg": "77535e99c08e5d4b7e20bb0f5fe1022a18dfc5e6", + "minecraft/sounds/block/honeyblock/slide3.ogg": "e2269b8b16778ff810fb6202546b233a36d76a92", + "minecraft/sounds/block/honeyblock/slide4.ogg": "cf661b19b996e717140012df6c03d82e59c5dfc2", + "minecraft/sounds/block/honeyblock/step1.ogg": "93bf9534ab5112b8bf4c0a923f59fd544cda72db", + "minecraft/sounds/block/honeyblock/step2.ogg": "853943f6b6a3eeefeb973ceab6f74129e68de8e5", + "minecraft/sounds/block/honeyblock/step3.ogg": "2409d173c2c19bff5866c74288995db5b38b8c04", + "minecraft/sounds/block/honeyblock/step4.ogg": "c9a353bcc80f4d8ec924a7c519ccfdc62c538231", + "minecraft/sounds/block/honeyblock/step5.ogg": "2d1c7d18f5878cd82a294ea55bb7b611c5ad5854", + "minecraft/sounds/block/iron_door/close1.ogg": "c05d9ec6189da10f1a353eba44b2dd848e76ae15", + "minecraft/sounds/block/iron_door/close2.ogg": "c15f4576c221d1b81601594fc2d21cdda5b14d0a", + "minecraft/sounds/block/iron_door/close3.ogg": "7c26ac099f78d5f8d147ee6204036c1dc4cde134", + "minecraft/sounds/block/iron_door/close4.ogg": "498fa8e1d3dbf88fb4db534232f3cef53ccd198f", + "minecraft/sounds/block/iron_door/open1.ogg": "aa15d9a312e90e9239602341845376ffc9cccab8", + "minecraft/sounds/block/iron_door/open2.ogg": "75b7aaf6286f73ccf05d0fee7010e5a1967d0174", + "minecraft/sounds/block/iron_door/open3.ogg": "5dfd5cb900745dd72c32aa4789e202dbaf33f301", + "minecraft/sounds/block/iron_door/open4.ogg": "bb5b054c2e7e01baece3b8c1b3d07e394da270b8", + "minecraft/sounds/block/iron_trapdoor/close1.ogg": "8a8768677077f0b03d39c849df64ce160f0b5aa7", + "minecraft/sounds/block/iron_trapdoor/close2.ogg": "9c0455315f3c1f3c9faf9e6ea2b3eed852cb7e04", + "minecraft/sounds/block/iron_trapdoor/close3.ogg": "9d4c8962c167d0c694b94b401a4e89ee2429177f", + "minecraft/sounds/block/iron_trapdoor/close4.ogg": "5f99cc54eba4f024e28b1bdacd005112d53fa511", + "minecraft/sounds/block/iron_trapdoor/open1.ogg": "79d857276b703fdf9f8be7c35fee276f20d2217e", + "minecraft/sounds/block/iron_trapdoor/open2.ogg": "dc549f1079da543b117180603c6d33980996c34d", + "minecraft/sounds/block/iron_trapdoor/open3.ogg": "2fdc1630c74c7e10a0cd6d2046ae158d9926c960", + "minecraft/sounds/block/iron_trapdoor/open4.ogg": "b5dcfa7035a3d509b1dbbe85b1f2deae0d9a087b", + "minecraft/sounds/block/lantern/break1.ogg": "c7ee586c92e10e7edca3750eaf12c847722c27b6", + "minecraft/sounds/block/lantern/break2.ogg": "b0dbd07cf2dba8792a57e8c1930fdfbc13498496", + "minecraft/sounds/block/lantern/break3.ogg": "5056c670acb0cd350de812cf8cc1f7e7926e5d41", + "minecraft/sounds/block/lantern/break4.ogg": "8ea7441d6e84805615159a7d87f2aa01d9f4c1f1", + "minecraft/sounds/block/lantern/break5.ogg": "7009ad9e386de37fdf4c7fa56f0a0a1ba138e736", + "minecraft/sounds/block/lantern/break6.ogg": "07c4db76bf5dff677866d9317e7c8ee41e7f3e3a", + "minecraft/sounds/block/lantern/place1.ogg": "707692f15758fa8c84235d2007e0c00259df2ff2", + "minecraft/sounds/block/lantern/place2.ogg": "26531bcbcd4296469f610ff66b6b7261ad073cfd", + "minecraft/sounds/block/lantern/place3.ogg": "4c84011d7576f1a0dbdf0691ab8a4d102f8ba98e", + "minecraft/sounds/block/lantern/place4.ogg": "36e2b40419e68e1afd1ad19acd4828064d7c70ce", + "minecraft/sounds/block/lantern/place5.ogg": "d98b20e6d3dc4b39be27376af785f5098a7eeb8d", + "minecraft/sounds/block/lantern/place6.ogg": "26e04754e24ef912e08387423bd096b0d7d08815", + "minecraft/sounds/block/lodestone/lock1.ogg": "4553885dcba9ad468a6cbda4f809d27eed83aeee", + "minecraft/sounds/block/lodestone/lock2.ogg": "60aa21f8848710db1609a5aa433efae63d8f0857", + "minecraft/sounds/block/lodestone/place1.ogg": "935d8fc1072c11c04d986f3a24dd59eb69bf28f7", + "minecraft/sounds/block/lodestone/place2.ogg": "e1e49df3d3f8c96746d5424104648e3ab4eb24fc", + "minecraft/sounds/block/lodestone/place3.ogg": "9616fac7e99fda83764ab9cf39d522ee7930b33d", + "minecraft/sounds/block/lodestone/place4.ogg": "435d823c6302e6f50d55a1af43cff06945ed452a", + "minecraft/sounds/block/mangrove_roots/break1.ogg": "96314f3d851ca570a0f167121963d7c53f61c60f", + "minecraft/sounds/block/mangrove_roots/break2.ogg": "28c1c3858c3ca4cc6f7a8fc2de3c4864ba54e204", + "minecraft/sounds/block/mangrove_roots/break3.ogg": "f2fcb54f88e85b5cc704358208395451c106ad1a", + "minecraft/sounds/block/mangrove_roots/break4.ogg": "d419da1a4dfa239ea298171abc8d367a0a58a56d", + "minecraft/sounds/block/mangrove_roots/break5.ogg": "dcbb4157877fbe0ba458fce5331441e593b68a71", + "minecraft/sounds/block/mangrove_roots/break6.ogg": "ce7bcce2a58673654f76816af6c73f24823b5d2e", + "minecraft/sounds/block/mangrove_roots/step1.ogg": "dc0d35cfa96ebf706de43d062418305b7e287a83", + "minecraft/sounds/block/mangrove_roots/step2.ogg": "1b0a2d0b7c8bc639fef77964b83ad646ea63a08a", + "minecraft/sounds/block/mangrove_roots/step3.ogg": "507f8145163897693125ca7886f954823f53a107", + "minecraft/sounds/block/mangrove_roots/step4.ogg": "1e92199e014633778dd7090c06fc2e04ed810f9c", + "minecraft/sounds/block/mangrove_roots/step5.ogg": "e3c1133e11b01dbf63afed83e5e1d63f7fcb23d2", + "minecraft/sounds/block/mangrove_roots/step6.ogg": "1113dae1e5f7e715941d089d77f97e789531918b", + "minecraft/sounds/block/moss/break1.ogg": "a0f85922a40f928d450f846340e63071d3c65293", + "minecraft/sounds/block/moss/break2.ogg": "c135cc7d343007fd57558f70c787f708d49bd268", + "minecraft/sounds/block/moss/break3.ogg": "2d84a21b5d925497558acce92b7448e37a7bea11", + "minecraft/sounds/block/moss/break4.ogg": "ae3e9a8a423c4928f74b0e45cf57e95fec81dcbe", + "minecraft/sounds/block/moss/break5.ogg": "e36dc802e3e9b499fe37b0663e3ea6e3b55850a2", + "minecraft/sounds/block/moss/step1.ogg": "771cae5478daa79c850470d8bd06cf880fab04a9", + "minecraft/sounds/block/moss/step2.ogg": "539290770406876dd05593efada83ff5db358ed6", + "minecraft/sounds/block/moss/step3.ogg": "b2faf0571510850c8ca3471181b6ec7a1abc83f0", + "minecraft/sounds/block/moss/step4.ogg": "f7afa9f94ab6e8f64d3fb45d0b848a56931c0462", + "minecraft/sounds/block/moss/step5.ogg": "012237aa6dd50c9fc43bf5f53cb4a49ddefdb2b9", + "minecraft/sounds/block/moss/step6.ogg": "c8ab43d9d879323c65366ff56387d9c29cf3d64e", + "minecraft/sounds/block/mud/break1.ogg": "4b63d4da2bea032e4573b985ab3908a8b99a98de", + "minecraft/sounds/block/mud/break2.ogg": "940857260315b22485252b6c29f9bd2328559d84", + "minecraft/sounds/block/mud/break3.ogg": "5b086af7cfd4394a770076ad6d4cf2e60afc89a4", + "minecraft/sounds/block/mud/break4.ogg": "bfe4b85a831fccf945b8e4b4349b0299e42ce3a4", + "minecraft/sounds/block/mud/break5.ogg": "19aa39f803bfb0092ed47a7e096fe726662bbb3a", + "minecraft/sounds/block/mud/break6.ogg": "dddf0943e0b94ecaa09670cb9f1d51f0d68a719f", + "minecraft/sounds/block/mud/step1.ogg": "85539a26d936aa5cbbd328f98a16d9cdebab2d01", + "minecraft/sounds/block/mud/step2.ogg": "1f5c45e15d90873197142e61cc7bffd2c0be82f7", + "minecraft/sounds/block/mud/step3.ogg": "892b2053c7272c2a2f14f63c78b908a08b25adff", + "minecraft/sounds/block/mud/step4.ogg": "9f8d9380de46bf37ecb6c000663c40b176e62948", + "minecraft/sounds/block/mud/step5.ogg": "42429ae14b45439a7017145063b2cceea99ab2fc", + "minecraft/sounds/block/mud/step6.ogg": "18b3d3903494179868173d1f1dd0dc03f8de637a", + "minecraft/sounds/block/mud_bricks/break1.ogg": "6af06471f5896500f067b0e7a27e54d7a8cbc8e9", + "minecraft/sounds/block/mud_bricks/break2.ogg": "e28ea96f8a617dd17576718af898ba2c2a7d0c69", + "minecraft/sounds/block/mud_bricks/break3.ogg": "09283c5992e529526c1665ac36a3cd03f32e18ab", + "minecraft/sounds/block/mud_bricks/break4.ogg": "c5f10ae239087e3e036a1db50111b0d44d6ccf76", + "minecraft/sounds/block/mud_bricks/break5.ogg": "f105728be2be6022abc58f4b341964bcc5315246", + "minecraft/sounds/block/mud_bricks/break6.ogg": "b47e7e08ac51bfb3e0a51f9539e3661cf82b417c", + "minecraft/sounds/block/mud_bricks/step1.ogg": "67acf728cd0279728fc1704c58ab1a2f6e1cdb67", + "minecraft/sounds/block/mud_bricks/step2.ogg": "c67f469ee3d43a440ea5da854f4a3a52fd13f91a", + "minecraft/sounds/block/mud_bricks/step3.ogg": "1d78d4afb5fcc5f1029658db91b3fd1779f30155", + "minecraft/sounds/block/mud_bricks/step4.ogg": "248d09d3f4cb85c4dff2ba0c927b60de9fc44ec2", + "minecraft/sounds/block/mud_bricks/step5.ogg": "56944ee7c95b870515401e6d7d9505fe0653fd9e", + "minecraft/sounds/block/mud_bricks/step6.ogg": "44abacadab7273a1869e204101dcb2cf467b9d01", + "minecraft/sounds/block/muddy_mangrove_roots/break1.ogg": "663cd15b439f9aeb7a0959866e2aa879bd8d563a", + "minecraft/sounds/block/muddy_mangrove_roots/break2.ogg": "2280c8deb0c509f638d02bad1d0b1b3cb8d1e112", + "minecraft/sounds/block/muddy_mangrove_roots/break3.ogg": "fd9f79c0bf153332df5edf59b3fadb5f93539a30", + "minecraft/sounds/block/muddy_mangrove_roots/break4.ogg": "a9db0b7188ecc48d833866cb9612e3214b1854e3", + "minecraft/sounds/block/muddy_mangrove_roots/break5.ogg": "7b9be3ea905d57289b91510612b11f50264e1367", + "minecraft/sounds/block/muddy_mangrove_roots/break6.ogg": "5efd47f4bde0841741418d8ec3a1268b78a6d94c", + "minecraft/sounds/block/muddy_mangrove_roots/step1.ogg": "d2be579e57ef1e500b5435abd83ee7fdf8c261c8", + "minecraft/sounds/block/muddy_mangrove_roots/step2.ogg": "2059d7595f1873146adf2235a9a754880aa7655e", + "minecraft/sounds/block/muddy_mangrove_roots/step3.ogg": "64725912f2fa1fdd70cbf774fb0d2763483074e3", + "minecraft/sounds/block/muddy_mangrove_roots/step4.ogg": "7be87ed58c69281103a4bed34737f6058a2d31d7", + "minecraft/sounds/block/muddy_mangrove_roots/step5.ogg": "26c4d57246aef249c4b5548e8c938b393a45a97a", + "minecraft/sounds/block/muddy_mangrove_roots/step6.ogg": "c326c225c104b675adf31bb5536a23ac7f2cd862", + "minecraft/sounds/block/nether_bricks/break1.ogg": "455eb202c42b52ea55893d9e5b74ec100a2efb67", + "minecraft/sounds/block/nether_bricks/break2.ogg": "b99e052c58dd8a95606292a1dc252c2a824dbf40", + "minecraft/sounds/block/nether_bricks/break3.ogg": "47ed66641523134ad5f07e41e8fef27000c88454", + "minecraft/sounds/block/nether_bricks/break4.ogg": "672de5ad67eabcc62f2a71cb19d3bceb60e5fc4a", + "minecraft/sounds/block/nether_bricks/break5.ogg": "83cf0ff6d3ff09f0c4209a91325c5525e10848e8", + "minecraft/sounds/block/nether_bricks/break6.ogg": "2bc9a4fb9201db00c68cb85e28b22c788b8b478d", + "minecraft/sounds/block/nether_bricks/step1.ogg": "2b3d0e7b0b2c47cd500b15697dbb20d6da4c6576", + "minecraft/sounds/block/nether_bricks/step2.ogg": "362da2df9f0b4d43d7c09767314e3b9df9f280da", + "minecraft/sounds/block/nether_bricks/step3.ogg": "de538718f248c4ef4e94a7d84e3ef691c1d4c80f", + "minecraft/sounds/block/nether_bricks/step4.ogg": "ba7e3fd432297b977d426bd4a36d7d66b6cbaffc", + "minecraft/sounds/block/nether_bricks/step5.ogg": "e8f38c7550086025456c11fd99d57fece0f4f79b", + "minecraft/sounds/block/nether_bricks/step6.ogg": "14109863585f1de53d9bb7957089bfde8ea69f7b", + "minecraft/sounds/block/nether_ore/break1.ogg": "2534f9f86a48b18bfbedaba1796221b0fd12779f", + "minecraft/sounds/block/nether_ore/break2.ogg": "40ab5638b37fea5a71010d619bd8cad3771e4ea9", + "minecraft/sounds/block/nether_ore/break3.ogg": "507a087f3c73af46f5cdcd229f75f36c53ee043f", + "minecraft/sounds/block/nether_ore/break4.ogg": "ae6106cfedda9b9d250fd193f0487e1b3531d6ae", + "minecraft/sounds/block/nether_ore/step1.ogg": "32665c2824be59c76034e08bf6ec1c02c67de441", + "minecraft/sounds/block/nether_ore/step2.ogg": "cca7bcc6a8a9bc0ee9218bfa9a8471cacb8b0148", + "minecraft/sounds/block/nether_ore/step3.ogg": "595574dfa22c18712dbddd9f609d2bee2a1b9032", + "minecraft/sounds/block/nether_ore/step4.ogg": "404350219666d9ba40343896d071a00697dacbb9", + "minecraft/sounds/block/nether_ore/step5.ogg": "2facb0995b98997033ad5fea8fdd501b388ad8cd", + "minecraft/sounds/block/nether_sprouts/break1.ogg": "806fabe0425d34d9953f148ffe47cbd6dbedc500", + "minecraft/sounds/block/nether_sprouts/break2.ogg": "309f360ea3ad1fb4b6ef78e5bb209d6cb415dd5c", + "minecraft/sounds/block/nether_sprouts/break3.ogg": "afcad12625ae39469e9e2053d12030e90d3da360", + "minecraft/sounds/block/nether_sprouts/break4.ogg": "edaa44ef0bc25bcf62d529329fc8feac4c27e52d", + "minecraft/sounds/block/nether_sprouts/step1.ogg": "f02183adf26fec7f79ae5b18ff6715cde7dd7f04", + "minecraft/sounds/block/nether_sprouts/step2.ogg": "4c7e2706d6840e1466cf056ae047ce947852cb09", + "minecraft/sounds/block/nether_sprouts/step3.ogg": "701c9f5d1a05b7f1db7b78ca2149dc5d236cca8b", + "minecraft/sounds/block/nether_sprouts/step4.ogg": "88625ae1dfaf75726e37d23a0111429ad9ea5e56", + "minecraft/sounds/block/nether_sprouts/step5.ogg": "563f15f03500de05007a1283b906234b9e74b934", + "minecraft/sounds/block/nether_wood/break1.ogg": "08c7eb4906bb0c2464f137092656336da53759d1", + "minecraft/sounds/block/nether_wood/break2.ogg": "3109ae0a1d33b78d564824292222cad6966608a6", + "minecraft/sounds/block/nether_wood/break3.ogg": "26b3a3050da842e651ab271fb2522cf248ede82d", + "minecraft/sounds/block/nether_wood/break4.ogg": "1e68a44f65699cedc9b0b60f67a67ca1e71e5507", + "minecraft/sounds/block/nether_wood/step1.ogg": "2b4f4deceec8620529a32804c002807e1ec4341e", + "minecraft/sounds/block/nether_wood/step2.ogg": "23996bf437578860d46c2b1e12c46ce6554456a5", + "minecraft/sounds/block/nether_wood/step3.ogg": "01365c7ce1d328129648a910a9413d8d59d7b831", + "minecraft/sounds/block/nether_wood/step4.ogg": "9792ced2042dc6765b08e47df9ec14ed7422461a", + "minecraft/sounds/block/nether_wood/step5.ogg": "9d3e89d6d1e14810523b335ee3eb06685284808b", + "minecraft/sounds/block/nether_wood_button/nether_wood_button.ogg": "fdf2347d0f787cba3b39312138f26acbb26a0ba2", + "minecraft/sounds/block/nether_wood_door/toggle1.ogg": "02ddd8dece2f0e0ebbcccd0b8c1530ac48716494", + "minecraft/sounds/block/nether_wood_door/toggle2.ogg": "fcec8e0f15e782e2c3a01a21eadaa09a7a1172b4", + "minecraft/sounds/block/nether_wood_door/toggle3.ogg": "705e04dba52523e7d58f5a90a837ddcd4b8c116a", + "minecraft/sounds/block/nether_wood_door/toggle4.ogg": "b6728209a0fab9be659084ac19d0204fc2407711", + "minecraft/sounds/block/nether_wood_fence/toggle1.ogg": "9bfcb651cd20e9d33ca05bca5d9ca8ffdea4b9e0", + "minecraft/sounds/block/nether_wood_fence/toggle2.ogg": "038cff4932ee56b62e5c77f334dd5298c7cff1ae", + "minecraft/sounds/block/nether_wood_fence/toggle3.ogg": "4192122bdaa7d007518f938df4042dab1ae81149", + "minecraft/sounds/block/nether_wood_fence/toggle4.ogg": "8d7e8f796ab00a29c131326f39dbadd3c88f32e4", + "minecraft/sounds/block/nether_wood_hanging_sign/break1.ogg": "f32d15105885aa1a9956caa8032cc0b1e42cdd39", + "minecraft/sounds/block/nether_wood_hanging_sign/break2.ogg": "d83668d3039380fa037aed5095044a06fef7a035", + "minecraft/sounds/block/nether_wood_hanging_sign/break3.ogg": "517a67bab994f6605fe10596da833b6185695dfe", + "minecraft/sounds/block/nether_wood_hanging_sign/break4.ogg": "f7115c7f46d066c30fb62e85a9957e7d3c16b82f", + "minecraft/sounds/block/nether_wood_hanging_sign/step1.ogg": "808f9db277e7e6a7a0061bd283d85a229dabb1bc", + "minecraft/sounds/block/nether_wood_hanging_sign/step2.ogg": "ec1ba06efabc9960bb37c14791d494bfc6f8f5e8", + "minecraft/sounds/block/nether_wood_hanging_sign/step3.ogg": "0cff2cfc2ed0fe8607eabc98ee971c79c1a8c611", + "minecraft/sounds/block/nether_wood_hanging_sign/step4.ogg": "c08f6bfa8c0008932a3ebbd73f7fa32964802b50", + "minecraft/sounds/block/nether_wood_trapdoor/toggle1.ogg": "377dd408d95fda9e9379776349c69e813d4e1389", + "minecraft/sounds/block/nether_wood_trapdoor/toggle2.ogg": "295f048e8370d397aa4813172d10b2e1b1bd2409", + "minecraft/sounds/block/nether_wood_trapdoor/toggle3.ogg": "ebfaffb897611c1edf4ea6f2add562c41a51eb8b", + "minecraft/sounds/block/nether_wood_trapdoor/toggle4.ogg": "d80a8adf60b42ba1edc015e394f786e7d8a4f58c", + "minecraft/sounds/block/netherite/break1.ogg": "3773c5cbc781cea28dc05da324310db9e872830d", + "minecraft/sounds/block/netherite/break2.ogg": "06491fc8f45f858876f05cd1ac71742f3a86f1e4", + "minecraft/sounds/block/netherite/break3.ogg": "c5899fcf465776f0037779a16fdf1854fc8463ab", + "minecraft/sounds/block/netherite/break4.ogg": "a7d1972892b6af701d00185354b4a2b94a370bcd", + "minecraft/sounds/block/netherite/step1.ogg": "f16edd2531f260ab12ce55d6d68433f1dece9390", + "minecraft/sounds/block/netherite/step2.ogg": "3967b91cfd2cdd497654fb1a30cdea3542bcacc7", + "minecraft/sounds/block/netherite/step3.ogg": "2531bbaea203726d65d8aed31da576e2cec4fc74", + "minecraft/sounds/block/netherite/step4.ogg": "9955e190530db9fbbf2f527b0d60ac738b6a77ca", + "minecraft/sounds/block/netherite/step5.ogg": "48c42f377d9120924b658330e152bb872b9a8dad", + "minecraft/sounds/block/netherite/step6.ogg": "cd547d26573ab127a2cd668893dc85abb06fe84f", + "minecraft/sounds/block/netherrack/break1.ogg": "79565814c833a9a3161ddbda0ded8a9e015a67b6", + "minecraft/sounds/block/netherrack/break2.ogg": "324fdeb4e7ff88141d0bfe9b0d4558d59f0daf5c", + "minecraft/sounds/block/netherrack/break3.ogg": "acaab88f2be1efe9880b5698381432fb57be9c85", + "minecraft/sounds/block/netherrack/break4.ogg": "d753c2a6d9690523d51eec325ad97eee58b32706", + "minecraft/sounds/block/netherrack/break5.ogg": "d43c0400858983fd3d6d5cc4243f6a532961ca79", + "minecraft/sounds/block/netherrack/break6.ogg": "dea7b51e9a3c6f6caa547622cbd7c4c62e1540ca", + "minecraft/sounds/block/netherrack/step1.ogg": "d3c9081f7b79e5402a7060419173d889e59d297d", + "minecraft/sounds/block/netherrack/step2.ogg": "539444ea45e17cf39db2363068952eee74c0623d", + "minecraft/sounds/block/netherrack/step3.ogg": "49d29b0b9c9b39c7c99998f528e7e13923e11260", + "minecraft/sounds/block/netherrack/step4.ogg": "c43c957559b9b464807d5f16009015ff774480cd", + "minecraft/sounds/block/netherrack/step5.ogg": "8a65f8b0dbf5509455f2d211c416df9dd4379ada", + "minecraft/sounds/block/netherrack/step6.ogg": "a09924e4fb66c6c1669d4b8669e55132e38f586b", + "minecraft/sounds/block/netherwart/break1.ogg": "86f495c4d08c6e4441759d58fcea059943fece1c", + "minecraft/sounds/block/netherwart/break2.ogg": "5eec2047e7ef4aeda077e448768e9d1cb528050b", + "minecraft/sounds/block/netherwart/break3.ogg": "deae116c5e906108ccedb6650f167ed4cfb0af78", + "minecraft/sounds/block/netherwart/break4.ogg": "011aa5653f55c61f33db064b0e356e7d9e498cda", + "minecraft/sounds/block/netherwart/break5.ogg": "48be42bf39686e758bf872b1ff6044dee06a8676", + "minecraft/sounds/block/netherwart/break6.ogg": "127b46924330c96a1001c550084d2ce873526dc1", + "minecraft/sounds/block/netherwart/step1.ogg": "4450225471acf6c3ecbd2ee86f21a8c58bb18a75", + "minecraft/sounds/block/netherwart/step2.ogg": "7dd9b7c4d8ea50a0f1320f316ea69aaa3b4a6ebf", + "minecraft/sounds/block/netherwart/step3.ogg": "bf6337ce53c58d489fc2be8bd8681b109338fb7a", + "minecraft/sounds/block/netherwart/step4.ogg": "d060341da2eb62bbbff0f5d12be555b3404a5238", + "minecraft/sounds/block/netherwart/step5.ogg": "33a598eac9b8af70ccc8fbc8d7256c3fe08d5966", + "minecraft/sounds/block/nylium/break1.ogg": "62681ba4773e4825769bc16169847b7b160822bb", + "minecraft/sounds/block/nylium/break2.ogg": "e97672693d77c49e36c492be162b5dcba2a35998", + "minecraft/sounds/block/nylium/break3.ogg": "c70e4711a8ea34ab1e6f96382974be21fa612fa1", + "minecraft/sounds/block/nylium/break4.ogg": "6c89a8af10895729f1e774bee734013722e8299d", + "minecraft/sounds/block/nylium/break5.ogg": "4ab9e7d182a9a2a6a5d800764cf0b174343ecf92", + "minecraft/sounds/block/nylium/break6.ogg": "d393e350b4f3aeac47789f5d310811a878da8382", + "minecraft/sounds/block/nylium/step1.ogg": "0463c52f9e7b425006810c8146736416dd2b9231", + "minecraft/sounds/block/nylium/step2.ogg": "378d419f70b50e539947c300041ee22d5f0be9e5", + "minecraft/sounds/block/nylium/step3.ogg": "48b4d2735290187a7302048789a155a2939b5cf0", + "minecraft/sounds/block/nylium/step4.ogg": "2252358c51750cfc65ee27f8217384ccbe55171e", + "minecraft/sounds/block/nylium/step5.ogg": "e6b75086107f28c2648c62cd3a0b52150190d1ed", + "minecraft/sounds/block/nylium/step6.ogg": "abcedf57588b2ea2fe3fcbd1032e3ab35f23a499", + "minecraft/sounds/block/packed_mud/break1.ogg": "72280ef8562002f2cbe79cecf91f8391b92d80c3", + "minecraft/sounds/block/packed_mud/break2.ogg": "be1ee4c88215a9d0890ff9d7e1a0474cd0cf334f", + "minecraft/sounds/block/packed_mud/break3.ogg": "050b58b93370995f984309c705e11b890e11a2d0", + "minecraft/sounds/block/packed_mud/break4.ogg": "b5b4a83e60e890473ec3cb997b645ebb8c9780d6", + "minecraft/sounds/block/packed_mud/break5.ogg": "621c8e363ed571a9ece044cb05a6970414bc9d7b", + "minecraft/sounds/block/packed_mud/break6.ogg": "7b1d2ddf09008d1e49adeb1d0251272549ebecd3", + "minecraft/sounds/block/packed_mud/step1.ogg": "452af45b1729ff634fb30662366616e0b5924001", + "minecraft/sounds/block/packed_mud/step2.ogg": "377d376bf459b1f039e42df8510b7aaab037ea60", + "minecraft/sounds/block/packed_mud/step3.ogg": "a8008b64edce79bba47f0bee031d61e8cf993517", + "minecraft/sounds/block/packed_mud/step4.ogg": "87325e36738d7e7dadbddf82c06ec307ec4c1f10", + "minecraft/sounds/block/packed_mud/step5.ogg": "902fba3f16593df6c4df433af4f210d060d2bb8f", + "minecraft/sounds/block/packed_mud/step6.ogg": "5244bc92929a6e50c79e1dbe1b51a602c3454d07", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss1.ogg": "7089d660db3e43a6061cff7f4a77b0b770ef4632", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss10.ogg": "5f4becb2557c3da9947587eae18e0ef899769eeb", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss11.ogg": "2e82bfffe303f65ee7c2c23b4b0b637b79ae0360", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss12.ogg": "4d317c9632c6dc5cd6ec10546f6752a3ac8fbcae", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss13.ogg": "a27a948537d1e43e4e44b54c6d164d908a7a871c", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss14.ogg": "5f05073888c608db67790239fac0623f1f2671a6", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss15.ogg": "74856b910cbcb52f815f3c042ae5ac79979bb1ae", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss2.ogg": "0bb8f8a6d39ce1a811517c973eba3108629172a8", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss3.ogg": "10ddd558c544bb0286af5ed0b4b440353c3f2a87", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss4.ogg": "6736c2afa4cda671722e7d24cd5b66fc4006b054", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss5.ogg": "af770815209de8c8e5843d266c1610c04d5d58db", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss6.ogg": "b06e087e36c5ad1e3e32179d2d712d2bc24425a0", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss7.ogg": "8bc1c4de8c29b43f2934175f08be10aa5d538fcd", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss8.ogg": "2464fb278d1e855e9fa1a60056f24f0776b006bd", + "minecraft/sounds/block/pale_hanging_moss/pale_hanging_moss9.ogg": "ceb0c6b2dbb81643b41ade0a3fcb20e95f661b35", + "minecraft/sounds/block/pointed_dripstone/drip_lava1.ogg": "a23f29cc77384305500826664aab697de7d5fd13", + "minecraft/sounds/block/pointed_dripstone/drip_lava2.ogg": "1eefb114d3b9180fcad0ad1742e6b88fcf109974", + "minecraft/sounds/block/pointed_dripstone/drip_lava3.ogg": "cd97453e1bda550a8eb2b37eead6c2236d52ebfe", + "minecraft/sounds/block/pointed_dripstone/drip_lava4.ogg": "1e6adaad56312e2b6f2f1b8482e510430a4ffd73", + "minecraft/sounds/block/pointed_dripstone/drip_lava5.ogg": "536d231281501e65163f4ec45dac00d59d340469", + "minecraft/sounds/block/pointed_dripstone/drip_lava6.ogg": "0cf0b92265370a4fe7c1bc2c312e80b2f7185abb", + "minecraft/sounds/block/pointed_dripstone/drip_lava_cauldron1.ogg": "7396c2c7c63bb6b1e46ba4a80c61d98a76d17768", + "minecraft/sounds/block/pointed_dripstone/drip_lava_cauldron2.ogg": "54ff654f2f156090ebbe0452e2f798c89fb825bb", + "minecraft/sounds/block/pointed_dripstone/drip_lava_cauldron3.ogg": "4affb685bfbfd9aeef1998e9d711e6014c5563f5", + "minecraft/sounds/block/pointed_dripstone/drip_lava_cauldron4.ogg": "b3b5e5b2d89265d37de563ac906f951ff98586a6", + "minecraft/sounds/block/pointed_dripstone/drip_water1.ogg": "456643032f3498bbc0c1d2f8172f64382627821a", + "minecraft/sounds/block/pointed_dripstone/drip_water10.ogg": "6b07250ee0f1d24557b0e619b87c5df5748a7b28", + "minecraft/sounds/block/pointed_dripstone/drip_water11.ogg": "de659ace6358f7082bdafbe5be4d1e655fd3c7d4", + "minecraft/sounds/block/pointed_dripstone/drip_water12.ogg": "c58b24b5258f00a5df5f7715fffb2d196b25665f", + "minecraft/sounds/block/pointed_dripstone/drip_water13.ogg": "9a200c9c063915ec4ce512284ffdc29ab4411c29", + "minecraft/sounds/block/pointed_dripstone/drip_water14.ogg": "d419bf4575a2b611fe0d13e9f1e0e2e5ff007f1f", + "minecraft/sounds/block/pointed_dripstone/drip_water15.ogg": "945f5710936be2ab03a4fbc7aa5758d02f5a6861", + "minecraft/sounds/block/pointed_dripstone/drip_water2.ogg": "0382a4f5477b0ded79db02534de00b378081eb54", + "minecraft/sounds/block/pointed_dripstone/drip_water3.ogg": "e05438972b5cd4e8f2f3a7afcf762ef5bd954a51", + "minecraft/sounds/block/pointed_dripstone/drip_water4.ogg": "68e1263235a0f4a7ecd12d5e291ce29b5971b420", + "minecraft/sounds/block/pointed_dripstone/drip_water5.ogg": "46d47a68b34810964a01857a7c130792ca2d802c", + "minecraft/sounds/block/pointed_dripstone/drip_water6.ogg": "bbf7022f66336d12225d59985a57e6ffadf4544c", + "minecraft/sounds/block/pointed_dripstone/drip_water7.ogg": "7544da0466b7551f25d70cda5ca4dbf7ff14ff4b", + "minecraft/sounds/block/pointed_dripstone/drip_water8.ogg": "195653d23eba12d565a7a44b3b4187d9551774a4", + "minecraft/sounds/block/pointed_dripstone/drip_water9.ogg": "d223757959ae6f0517108bd4564bed4853fd6ccf", + "minecraft/sounds/block/pointed_dripstone/drip_water_cauldron1.ogg": "741882ca045142bfa076569c87bca37e0ed5a008", + "minecraft/sounds/block/pointed_dripstone/drip_water_cauldron2.ogg": "f32d47d254760dd12b673f60514987976de9e227", + "minecraft/sounds/block/pointed_dripstone/drip_water_cauldron3.ogg": "f014d90070e4c722238e9a8ef9ffef3a19ace83b", + "minecraft/sounds/block/pointed_dripstone/drip_water_cauldron4.ogg": "b2c8cba192539a413bcf2cc86724f19fa843199a", + "minecraft/sounds/block/pointed_dripstone/drip_water_cauldron5.ogg": "b4f74b6d59ef6a8c374b5362ff3059d7e130cf34", + "minecraft/sounds/block/pointed_dripstone/drip_water_cauldron6.ogg": "6447cd0ddcf09414a99551c3a53b69df5974455d", + "minecraft/sounds/block/pointed_dripstone/drip_water_cauldron7.ogg": "02023d32cefdb86096a2ce810fd8f2863dd97cfc", + "minecraft/sounds/block/pointed_dripstone/drip_water_cauldron8.ogg": "3206b61dfb32c47f6e1614de20538bd28ac60c10", + "minecraft/sounds/block/pointed_dripstone/land1.ogg": "11c7bf577d5772d813524c69c92447867cdb2cd5", + "minecraft/sounds/block/pointed_dripstone/land2.ogg": "0cfbbcc2a7658109bcd65ecc0208518803f4ba3e", + "minecraft/sounds/block/pointed_dripstone/land3.ogg": "779d1efdad643440d0699f6e39bebccd907f2a64", + "minecraft/sounds/block/pointed_dripstone/land4.ogg": "f5e067ba8cd334ca3db7bc4f06d4b924d2f6412e", + "minecraft/sounds/block/pointed_dripstone/land5.ogg": "676381e79bb6c4dbea4c4d9d1f8b20edc85e08c5", + "minecraft/sounds/block/powder_snow/break1.ogg": "f5f420385ffc93dfb1a07b0d8d1fc9a237be23b3", + "minecraft/sounds/block/powder_snow/break2.ogg": "bc3a4e3c4151d4719f5e8de7e2d58a523b70afa7", + "minecraft/sounds/block/powder_snow/break3.ogg": "0e8d1366458c1b6bc16c4bc5ce0e9992af5fd9e2", + "minecraft/sounds/block/powder_snow/break4.ogg": "85fd72d44ccbf8fc1e0b8aa714c37e0b5835cdc8", + "minecraft/sounds/block/powder_snow/break5.ogg": "1511afcb61d33d9b69e1c56da933cfcba53d6231", + "minecraft/sounds/block/powder_snow/break6.ogg": "cbe13b230d4275f4bfa29b9cd1d4fb359b3f0cdc", + "minecraft/sounds/block/powder_snow/break7.ogg": "e8e7230c42a623b988c64462a2c2c390face9d61", + "minecraft/sounds/block/powder_snow/step1.ogg": "04b2c0edc7128fcd1f414e34541f6fa675871cac", + "minecraft/sounds/block/powder_snow/step10.ogg": "8e0e61ae27476b55386152940245fc309ac1b11e", + "minecraft/sounds/block/powder_snow/step2.ogg": "8038df5285a51003d716016a725bfdd9b6643d42", + "minecraft/sounds/block/powder_snow/step3.ogg": "06983b3fc40c6770ccad2d85f0083d955a22f848", + "minecraft/sounds/block/powder_snow/step4.ogg": "f4d76fc18ff37d4caf3ee7d56628d11fbdcfb58b", + "minecraft/sounds/block/powder_snow/step5.ogg": "5237fcc3ff0a03c7ae59f1d55cf926e501d0d59b", + "minecraft/sounds/block/powder_snow/step6.ogg": "368bcd157f8768ccd56e479e44e3a6ea91e75d8b", + "minecraft/sounds/block/powder_snow/step7.ogg": "7cccdfdd8fb3b0655f04f7884c6c0f408a935407", + "minecraft/sounds/block/powder_snow/step8.ogg": "3dc37b550892aad4c165c3f23214e3ccabeabb53", + "minecraft/sounds/block/powder_snow/step9.ogg": "24f7783a45c3e3306db5ddf41fd1f7f3409cc551", + "minecraft/sounds/block/pumpkin/carve1.ogg": "80096de42d58bb6ef658182239afa297b1adcb28", + "minecraft/sounds/block/pumpkin/carve2.ogg": "612a31517eb566ba2e48dd74cbdcd2120620a55c", + "minecraft/sounds/block/resin/resin_break1.ogg": "71a03ccde88a5c440ce60afef906f19c4dfbc2ee", + "minecraft/sounds/block/resin/resin_break2.ogg": "1e59394b78c6dccb6f428c5b70dbf67802afc866", + "minecraft/sounds/block/resin/resin_break3.ogg": "f169c2bd7d40b3075e8e27c379904c3629f49452", + "minecraft/sounds/block/resin/resin_break4.ogg": "69796b6a75b37d44654dc128f4bd8cd1e8f57621", + "minecraft/sounds/block/resin/resin_break5.ogg": "a9e7ab86a266a8d4bc24c22f70b952edcf44f2c4", + "minecraft/sounds/block/resin/resin_fall.ogg": "d63208c8315112d2edc3a6b40f7878f0e92782e7", + "minecraft/sounds/block/resin/resin_place1.ogg": "b778f789f90ef9f2b82c9c2a33a3eec2d47fe356", + "minecraft/sounds/block/resin/resin_place2.ogg": "8bd78604d88160f561feb7d05220fa42beff0ca8", + "minecraft/sounds/block/resin/resin_place3.ogg": "2af3514e4685782da41c6c1bf003e49f7235aab4", + "minecraft/sounds/block/resin/resin_place4.ogg": "95162dc7621e7cddc16c9b0e60d18555af80032c", + "minecraft/sounds/block/resin/resin_step1.ogg": "96a80007c1ae9c9354d812150d37dde3042637f4", + "minecraft/sounds/block/resin/resin_step2.ogg": "c4e97902ea7d103a5821d922a921de27c9007cd2", + "minecraft/sounds/block/resin/resin_step3.ogg": "6e5c3a15fe5af5ea9c58e25437d31717a9a5410c", + "minecraft/sounds/block/resin/resin_step4.ogg": "f3cfba3cf1e876f7058b7106d54b431f65718bf8", + "minecraft/sounds/block/resin/resin_step5.ogg": "343e433ef9dfa926c4ddf69c09922e3052c69406", + "minecraft/sounds/block/resin_bricks/resin_brick_break.ogg": "e875411d29501160a7321d0b27bc85bd1b86d1c0", + "minecraft/sounds/block/resin_bricks/resin_brick_fall.ogg": "4151c7520e64521a2f44e58f58f8a8f729ac07b9", + "minecraft/sounds/block/resin_bricks/resin_brick_hit1.ogg": "943c4b9ecdc317e2b1607ea180dca174dcb2c75d", + "minecraft/sounds/block/resin_bricks/resin_brick_hit2.ogg": "5897178066f58be63ccd8b9df42dff2760b73a95", + "minecraft/sounds/block/resin_bricks/resin_brick_hit3.ogg": "27aea996b107206c2e0938f441b722a727248fe4", + "minecraft/sounds/block/resin_bricks/resin_brick_hit4.ogg": "43b98ec31e91d01637f00376ba8a747bd0c316d7", + "minecraft/sounds/block/resin_bricks/resin_brick_hit5.ogg": "6ea2f56d5ff9c2dd6f6e2b0e6743c59863543f1a", + "minecraft/sounds/block/resin_bricks/resin_brick_place1.ogg": "1f34b0827dc6de72edac0befa329ca6377961558", + "minecraft/sounds/block/resin_bricks/resin_brick_place2.ogg": "b2d4fe875f5a729c8eb07eafd7ab77ea51b890f2", + "minecraft/sounds/block/resin_bricks/resin_brick_place3.ogg": "1f6a703221da3f3a2b2a45c0ee6636e3109ba6ff", + "minecraft/sounds/block/resin_bricks/resin_brick_place4.ogg": "5de7eb14bb1a4da831cc46c743471dcf56f477f9", + "minecraft/sounds/block/resin_bricks/resin_brick_place5.ogg": "6bd9dca08ccd2281e86e5d3c61f5a2376e7dbe12", + "minecraft/sounds/block/resin_bricks/resin_brick_step1.ogg": "ad95b90dd122aaa98a8f2a996cd3fa13ce33540a", + "minecraft/sounds/block/resin_bricks/resin_brick_step2.ogg": "4fbb4e179a4f4d7c5771f2dc9829fa1655953697", + "minecraft/sounds/block/resin_bricks/resin_brick_step3.ogg": "af129e6773af0e7219b7f3dcbc2ad76449232151", + "minecraft/sounds/block/resin_bricks/resin_brick_step4.ogg": "bbd2e34c38f16149b093d2dd44883fd326fc4d33", + "minecraft/sounds/block/resin_bricks/resin_brick_step5.ogg": "c6cf97c199eb5ba33b6a4c760dc9874a5f2e000e", + "minecraft/sounds/block/respawn_anchor/ambient1.ogg": "defd232c21ece141935cea0bdb9f174a8f33feec", + "minecraft/sounds/block/respawn_anchor/ambient2.ogg": "666c560b860bfac36cbac7b015a24ccad0500db6", + "minecraft/sounds/block/respawn_anchor/ambient3.ogg": "9ef36a3e43ddd991266031eeb29914d619993d2e", + "minecraft/sounds/block/respawn_anchor/charge1.ogg": "0e0d263eeae9e4289916c92f830e282a5d45f720", + "minecraft/sounds/block/respawn_anchor/charge2.ogg": "76ba0d2dec5567374c31d2d788183c440efebe9a", + "minecraft/sounds/block/respawn_anchor/charge3.ogg": "254411a1cba6d0855f397299e0d423ee3f14961c", + "minecraft/sounds/block/respawn_anchor/deplete1.ogg": "a084cc73ae04f6d4aaec3b33865dc05709c17603", + "minecraft/sounds/block/respawn_anchor/deplete2.ogg": "f39c3b69a7d8f3fac8797a9145c8b93cac94fc67", + "minecraft/sounds/block/respawn_anchor/set_spawn1.ogg": "e400aafb294db87f5954f41908c79cb88de6b632", + "minecraft/sounds/block/respawn_anchor/set_spawn2.ogg": "2ad3af7f859896938ae115828662030128ee6768", + "minecraft/sounds/block/respawn_anchor/set_spawn3.ogg": "7540f499c7713711ec0ebb7e3a6240c8b1ed0b8e", + "minecraft/sounds/block/rooted_dirt/break1.ogg": "5c42d1ae39df50bcdfe714db876148720a069efd", + "minecraft/sounds/block/rooted_dirt/break2.ogg": "00d7b6cb90bbe6552d8b23650f6da1cab68993fa", + "minecraft/sounds/block/rooted_dirt/break3.ogg": "23006984a98b3fd36acb05998fb95fde42ee5e93", + "minecraft/sounds/block/rooted_dirt/break4.ogg": "8defa6e305571b092e691a90712c9cc8001fb661", + "minecraft/sounds/block/rooted_dirt/step1.ogg": "678a8fc38db841b7c5c66cd8486f30031e3a7c8b", + "minecraft/sounds/block/rooted_dirt/step2.ogg": "7ac608958fbdffa90dd9cd4d9e518ef30260b6ea", + "minecraft/sounds/block/rooted_dirt/step3.ogg": "2ccfb856440fe00f1862e1292ca87a2168f924a0", + "minecraft/sounds/block/rooted_dirt/step4.ogg": "3c636ebfa3a1540c450e3b16bd8ddd25cc086723", + "minecraft/sounds/block/rooted_dirt/step5.ogg": "552218e330c62eb7f84420dcae85a816b2163c04", + "minecraft/sounds/block/rooted_dirt/step6.ogg": "1d38d387f662e11899756c5c41db05edf2eb241d", + "minecraft/sounds/block/roots/break1.ogg": "074bf1f2406289d81e600c80862c0267550e4a8e", + "minecraft/sounds/block/roots/break2.ogg": "381bd8590b65134d8c2f31a443cb37752145d353", + "minecraft/sounds/block/roots/break3.ogg": "9bc2d810f802f87c64287edb6f3257c78e10ecae", + "minecraft/sounds/block/roots/break4.ogg": "0c1bb4bac0a42c0c444238a0a89da29dc459aa27", + "minecraft/sounds/block/roots/break5.ogg": "b12d1119fb5401538fd56ea7aeba89c80546a2ec", + "minecraft/sounds/block/roots/break6.ogg": "bafb15c3d188e1425c0b6428551a14d16b320d9c", + "minecraft/sounds/block/roots/step1.ogg": "0a11f0f24ea5c41821023ec829100194cc6c8ae0", + "minecraft/sounds/block/roots/step2.ogg": "11a807d88209d0f4f2e81763c9369c093923fad7", + "minecraft/sounds/block/roots/step3.ogg": "4540a415cc3e1413a09b54fbfcf9cb1c3c48a357", + "minecraft/sounds/block/roots/step4.ogg": "2a3535b318a9132b00a1ecb2a3216c8bf237f279", + "minecraft/sounds/block/roots/step5.ogg": "8711b18848546a66c88aa8d92400ee9e7ee861c1", + "minecraft/sounds/block/scaffold/place1.ogg": "7a286cc442a5e57c1affe56d03efca5a28d42d3b", + "minecraft/sounds/block/scaffold/place2.ogg": "e3103a151f27376d8584aeb342c49d1eb71ef12b", + "minecraft/sounds/block/scaffold/place3.ogg": "7206e030a8bb50f75a88306a361e829cf8e065d0", + "minecraft/sounds/block/scaffold/place4.ogg": "c35ae74e4d097c52687f23e6badf2b2e69eb5d2e", + "minecraft/sounds/block/sculk/break1.ogg": "2f76af471d19058770d322704e2ae0b00537d4ac", + "minecraft/sounds/block/sculk/break10.ogg": "935038c6a2ce4547ea8e8deea051e57b9975024b", + "minecraft/sounds/block/sculk/break11.ogg": "341c5c89f16883188250f5f62e809eae68206234", + "minecraft/sounds/block/sculk/break12.ogg": "9529ec6496b7178e1da810e458cc9093e6ee84ed", + "minecraft/sounds/block/sculk/break13.ogg": "d9609b4a85d83ca70fb1ec0140437ed1c5539f50", + "minecraft/sounds/block/sculk/break14.ogg": "047de78010b7c20397f6df4509bfaa39b188da2e", + "minecraft/sounds/block/sculk/break2.ogg": "ea5959c5dfd8e0217aa2b9d9ba5d5d33f65d840a", + "minecraft/sounds/block/sculk/break3.ogg": "aa8f9b3b48a5e5698e351603e88195a4bbf4e038", + "minecraft/sounds/block/sculk/break4.ogg": "23cf697afb231117c4a2d6e01e40b6e9a0d497f7", + "minecraft/sounds/block/sculk/break5.ogg": "5f66affa1bb143794e97aba6b2e7e600e61d0b4c", + "minecraft/sounds/block/sculk/break6.ogg": "3f7ccc87f31b5307ebff3347596a35fc0c3f11c1", + "minecraft/sounds/block/sculk/break7.ogg": "58a7fc3f3c3396357f3a1386b8f25c428d6e7655", + "minecraft/sounds/block/sculk/break8.ogg": "8a456c979ae648793e0bc67ff93df0a9a6834131", + "minecraft/sounds/block/sculk/break9.ogg": "589fff28d3590774738d0da812a631d265724318", + "minecraft/sounds/block/sculk/charge1.ogg": "6f9e9c9a5f3e789f4c7b889673c07ae791665c12", + "minecraft/sounds/block/sculk/charge2.ogg": "c48194bed96095d75606b69ebb680071579e4287", + "minecraft/sounds/block/sculk/charge3.ogg": "52a753b45e64efb80784e45776403d54f1dc312f", + "minecraft/sounds/block/sculk/charge4.ogg": "9b50889699fbbe7accfeb5e38fd3a16954fe0d66", + "minecraft/sounds/block/sculk/charge5.ogg": "453cbf0d5f094078c2b5572c19d610874b2bf053", + "minecraft/sounds/block/sculk/place1.ogg": "f67c848272ef2cf16983e7e959bfe675d4258cc5", + "minecraft/sounds/block/sculk/place2.ogg": "f9ff2b9241e8f39d99852969896358502023b02b", + "minecraft/sounds/block/sculk/place3.ogg": "ed62d68890b991e04345aaa0a95b56cd506afac8", + "minecraft/sounds/block/sculk/place4.ogg": "061daab0fb148906aaa50e9c7c8e81da06fe427f", + "minecraft/sounds/block/sculk/place5.ogg": "1ea4892f78e9522c99664631d181ddb48da24217", + "minecraft/sounds/block/sculk/spread1.ogg": "68e60273efbd711121dd926c5811b4c20da743b3", + "minecraft/sounds/block/sculk/spread2.ogg": "71de59f2a2e80284b82b321d2ab715bda93ba2ff", + "minecraft/sounds/block/sculk/spread3.ogg": "3ae880252601ad23cb57438b04bd6680522be664", + "minecraft/sounds/block/sculk/spread4.ogg": "89508f92c6917da7dd5e1a5945936f12e53529da", + "minecraft/sounds/block/sculk/spread5.ogg": "b1d5d976d5dbc91c986e6a70ef1297c3afdc9813", + "minecraft/sounds/block/sculk/step1.ogg": "f24ac8947717a1ea52d6bc35f686767082df62aa", + "minecraft/sounds/block/sculk/step2.ogg": "357797503b925c9139b166cd31a48d9260f7ee61", + "minecraft/sounds/block/sculk/step3.ogg": "94d61b2f28dcbb8e635657b831545d4cc241fb52", + "minecraft/sounds/block/sculk/step4.ogg": "677f59ed8b7946e34cd99ce7192bd11c1afdc27a", + "minecraft/sounds/block/sculk/step5.ogg": "e32ac8d5f874a5654be012c88148a87975261d1c", + "minecraft/sounds/block/sculk/step6.ogg": "7ccc3bd2ba2f89aaaa903f10e8174f12dd50c727", + "minecraft/sounds/block/sculk_catalyst/break1.ogg": "ec94a5ec38f2cd5b440619734b21f86de6c93992", + "minecraft/sounds/block/sculk_catalyst/break10.ogg": "3e33597db3a9c2d00ea63ef5f06fd8c300117285", + "minecraft/sounds/block/sculk_catalyst/break2.ogg": "970879f2cb6cce9ce072c28b3c475535d88bc5a5", + "minecraft/sounds/block/sculk_catalyst/break3.ogg": "c31b0dd62eaec2708e791e4e04c48813b1cdd895", + "minecraft/sounds/block/sculk_catalyst/break4.ogg": "ed0ea7a1d2549cb25b6cd6c3f2af23b3abc2a2de", + "minecraft/sounds/block/sculk_catalyst/break5.ogg": "c9c3290f4e0033e9ba2c91ef800824a6696da710", + "minecraft/sounds/block/sculk_catalyst/break6.ogg": "b66a833fb3975e5febfecd09a25400c1d57e1fe3", + "minecraft/sounds/block/sculk_catalyst/break7.ogg": "1e7d056e556fd40270e92a187164d27f60fc04b3", + "minecraft/sounds/block/sculk_catalyst/break8.ogg": "b305daa318fa7db0097813d10bce1b1114ffd62d", + "minecraft/sounds/block/sculk_catalyst/break9.ogg": "555df6c41d133feea389a48ba76f00f37460b5f0", + "minecraft/sounds/block/sculk_catalyst/place1.ogg": "df24463e66a88d2fc9f85922cdc32045ada9d10c", + "minecraft/sounds/block/sculk_catalyst/place2.ogg": "8ae8cb06b4ddbf9a2c79c44fee5fabf4bb3d0421", + "minecraft/sounds/block/sculk_catalyst/place3.ogg": "f61739d682a1edca93a90cff1e3c3cbdf2269000", + "minecraft/sounds/block/sculk_catalyst/place4.ogg": "6f05a249a3f6db896122f82de58b30e8f3ec71a7", + "minecraft/sounds/block/sculk_catalyst/place5.ogg": "68bae150ce7321de9150b6f0b60711e25251e844", + "minecraft/sounds/block/sculk_catalyst/step1.ogg": "54151fe9a4bc01de2a3647d8e8f8babcb2c725d8", + "minecraft/sounds/block/sculk_catalyst/step2.ogg": "17e416c1edb242639b5582dee23f1e82f024e8f2", + "minecraft/sounds/block/sculk_catalyst/step3.ogg": "039ffe61b98008ab3a9abf930a7d0d994e2fc10a", + "minecraft/sounds/block/sculk_catalyst/step4.ogg": "17f1204d0875e4bbd46240a9339411a3c667ea03", + "minecraft/sounds/block/sculk_catalyst/step5.ogg": "33b5165a6883700a99cf2061a9801f65ce28620c", + "minecraft/sounds/block/sculk_catalyst/step6.ogg": "46e0afc72cebc57aafec235d6e2b28d6335662bb", + "minecraft/sounds/block/sculk_sensor/break1.ogg": "e6d3911f803110236587e652b5cbc990e4f22ba9", + "minecraft/sounds/block/sculk_sensor/break2.ogg": "1ce1fd11070653071311ed2abd8a50e25c0543ec", + "minecraft/sounds/block/sculk_sensor/break3.ogg": "568d1b99a5a8133c6b0686791b4d5fa55d7d64f6", + "minecraft/sounds/block/sculk_sensor/break4.ogg": "63aaab4b1c60dcb6f97c8b78db7791e3ab5353ee", + "minecraft/sounds/block/sculk_sensor/break5.ogg": "c0135de2f265a4303a542d8edd21933642077e01", + "minecraft/sounds/block/sculk_sensor/place1.ogg": "17555ee1014945e896df557e7d83bc6073cad363", + "minecraft/sounds/block/sculk_sensor/place2.ogg": "69c92fb62d8a7711f2c81db1fafb46b36d126f99", + "minecraft/sounds/block/sculk_sensor/place3.ogg": "c0696332cde4faacaaf2f827c0112221f4f6cc14", + "minecraft/sounds/block/sculk_sensor/place4.ogg": "8e3c151725219a0c9dd16be100b43a9a7faf5a82", + "minecraft/sounds/block/sculk_sensor/place5.ogg": "90a1ad51df9224dd1c0f9b45797d08c80ef88c9d", + "minecraft/sounds/block/sculk_sensor/sculk_clicking1.ogg": "a33ec641bf3173dda6d8c48d08516e4df9776a4e", + "minecraft/sounds/block/sculk_sensor/sculk_clicking2.ogg": "dc0c30a5e32d773644d445f5a13f7c4fa079eb35", + "minecraft/sounds/block/sculk_sensor/sculk_clicking3.ogg": "b9099a6d04dddc47ca2c01f6bcb751cb86b38d85", + "minecraft/sounds/block/sculk_sensor/sculk_clicking4.ogg": "5ca580ea624bc79ea0d0dbf1befca09d639956f9", + "minecraft/sounds/block/sculk_sensor/sculk_clicking5.ogg": "cf9a16acc0ff7e958ca7857a62104cf84b77696a", + "minecraft/sounds/block/sculk_sensor/sculk_clicking6.ogg": "a923bb37ed00273cb70623f6ebb750d8aa701e52", + "minecraft/sounds/block/sculk_sensor/sculk_clicking_stop1.ogg": "6ea96110357f29e6e77b3df20b938483cce28cc4", + "minecraft/sounds/block/sculk_sensor/sculk_clicking_stop2.ogg": "639814aadec7da5d05e0af3a9dfb3e56a2751eeb", + "minecraft/sounds/block/sculk_sensor/sculk_clicking_stop3.ogg": "68828b76f86100a43daf79f9d8e893457ba91000", + "minecraft/sounds/block/sculk_sensor/sculk_clicking_stop4.ogg": "f87220f8a3d7e71a12457b0e64456c6b4bfbd1b6", + "minecraft/sounds/block/sculk_sensor/sculk_clicking_stop5.ogg": "251c56cebe93887713e0a297b48bd0b154932a2d", + "minecraft/sounds/block/sculk_shrieker/break1.ogg": "1c8c17a8e9f1cc1496a25bfd2fd2711e67ad6b20", + "minecraft/sounds/block/sculk_shrieker/break2.ogg": "25349bf71bc382c8168b7a6ec110cc982e1b0e70", + "minecraft/sounds/block/sculk_shrieker/break3.ogg": "5bbea888cd1f9266630d8668a5e0eac0d3e534d8", + "minecraft/sounds/block/sculk_shrieker/break4.ogg": "ca1eb376b8921d99953a48c1c5aee03e986d9996", + "minecraft/sounds/block/sculk_shrieker/break5.ogg": "213cea011c25db98a5f98978ce93ed4d690d4122", + "minecraft/sounds/block/sculk_shrieker/break6.ogg": "62ce4ae83e9872a3c3febff4a98fc226282fb112", + "minecraft/sounds/block/sculk_shrieker/place1.ogg": "4c4ea0c08ca3de147713fc7a526a4923affb9585", + "minecraft/sounds/block/sculk_shrieker/place2.ogg": "1557a78f14fc2b0428ceb71c732e418097211114", + "minecraft/sounds/block/sculk_shrieker/place3.ogg": "c1d4af3dcc869abd8ed39ac1d5eb59e3678971d6", + "minecraft/sounds/block/sculk_shrieker/place4.ogg": "1b2a82de1c311fbca1ac0a114bd50f66186552ad", + "minecraft/sounds/block/sculk_shrieker/place5.ogg": "962f5a528dd2a5beaf80233b88fc412acc517aeb", + "minecraft/sounds/block/sculk_shrieker/shriek1.ogg": "556028a3bbc4dba60b0d05c85530ca588c9086e8", + "minecraft/sounds/block/sculk_shrieker/shriek2.ogg": "74a120f19cc005c528a5561801369d528c26c13d", + "minecraft/sounds/block/sculk_shrieker/shriek3.ogg": "0bd2d425ba3d8254999c9b9cb162b05427752447", + "minecraft/sounds/block/sculk_shrieker/shriek4.ogg": "1591058de3128b8a44b8beab1a17ad63ba17301a", + "minecraft/sounds/block/sculk_shrieker/shriek5.ogg": "ccf2f26922472624e30d8bbaf0a371d074c10270", + "minecraft/sounds/block/sculk_vein/break1.ogg": "bc98be2424e6d38791e6bbbab6f33272147baa82", + "minecraft/sounds/block/sculk_vein/break2.ogg": "2801f7043382da42c00e35340a863acdb6d295bd", + "minecraft/sounds/block/sculk_vein/break3.ogg": "6bf5fb2f1dc2c5697d944d124642a4aa5aba7b36", + "minecraft/sounds/block/sculk_vein/break4.ogg": "1942e678da7394668deb796dcea4782ef3ec0f47", + "minecraft/sounds/block/sculk_vein/break5.ogg": "16a795a416c461ba132f4aebd63c207fccecaf0c", + "minecraft/sounds/block/shroomlight/break1.ogg": "4d756cc6dee2679587cf572580e82e70d3c47033", + "minecraft/sounds/block/shroomlight/break2.ogg": "febd527db3b25563c613c8c86bcfca56a51881d9", + "minecraft/sounds/block/shroomlight/break3.ogg": "d6dcb6cd453a54decac9df9b6bad6e58e7b2e929", + "minecraft/sounds/block/shroomlight/break4.ogg": "d850f5f8d60bc937de205e6642b8e54c659c4596", + "minecraft/sounds/block/shroomlight/break5.ogg": "b7c85be9fd490e33bdad516b08d9b13bc2021e5b", + "minecraft/sounds/block/shroomlight/step1.ogg": "a02ee345cc7a7cc2afb6ea0a368b097e3e477608", + "minecraft/sounds/block/shroomlight/step2.ogg": "faddf6a4f633983c0582b3434bd5edc14fcdc648", + "minecraft/sounds/block/shroomlight/step3.ogg": "f418af29b5bcd1cfcb7351db09d8b419be68d628", + "minecraft/sounds/block/shroomlight/step4.ogg": "e7a439e6fe0d1ec8712e002a00b3f655d2ef9660", + "minecraft/sounds/block/shroomlight/step5.ogg": "e3f115735569f60ad88dda390105cc3e142c8d37", + "minecraft/sounds/block/shroomlight/step6.ogg": "6e3522c6dfd94911fab8b194f2ac3250c7465cae", + "minecraft/sounds/block/shulker_box/close.ogg": "20fc09bebf0cf9023d63564a411cd3c8083eb633", + "minecraft/sounds/block/shulker_box/open.ogg": "0cdec84d6a3e1089d879410a960d2ae05dceaeb6", + "minecraft/sounds/block/sign/waxed_interact_fail1.ogg": "37bd8d8bbe79f763c98e0e2e641a36d4409d71fd", + "minecraft/sounds/block/sign/waxed_interact_fail2.ogg": "e1786efc1dbae614b055a47779c3a3ebdd0453d8", + "minecraft/sounds/block/sign/waxed_interact_fail3.ogg": "db59b1210639639858f43ac512fd118659944388", + "minecraft/sounds/block/smithing_table/smithing_table1.ogg": "84680f16139f2d2ea3d6ac5276db83dae01efa87", + "minecraft/sounds/block/smithing_table/smithing_table2.ogg": "6571f0d5bc3f62a19308fd040ba0da11a0fa59c1", + "minecraft/sounds/block/smithing_table/smithing_table3.ogg": "9f409623a7365a1d32d6b9601bb2014d8880c975", + "minecraft/sounds/block/smoker/smoker1.ogg": "1b6e19574b10bd3e91ee40980bdfbab733e73486", + "minecraft/sounds/block/smoker/smoker2.ogg": "812ffca1d982cd9decae23284044527c7d0dabb9", + "minecraft/sounds/block/smoker/smoker3.ogg": "9c1aa4f0997c2e02617986a6c79d67c44f12f93f", + "minecraft/sounds/block/smoker/smoker4.ogg": "0cac3b2fbb284e5121e8062b8a08f81b9eb4b53d", + "minecraft/sounds/block/smoker/smoker5.ogg": "91effb4eb1199cf1f02db23f1004e006125b2950", + "minecraft/sounds/block/soul_sand/break1.ogg": "34b6976a1e91d76ae76d7bfd0aaae51134310199", + "minecraft/sounds/block/soul_sand/break2.ogg": "47030d3d124dd545ab6f6e8da482ad4c2b96add3", + "minecraft/sounds/block/soul_sand/break3.ogg": "434f9df33b0d402b7094c36f463f52e3cb3762f3", + "minecraft/sounds/block/soul_sand/break4.ogg": "96f2fcce73cba1c2f56eb9ae6b1c311cd0817bd8", + "minecraft/sounds/block/soul_sand/break5.ogg": "b98bc9a1058d07a2c978dda367c43e37b649ad12", + "minecraft/sounds/block/soul_sand/break6.ogg": "ee2176e57cdc64434c2bd71249d283a6356cfe70", + "minecraft/sounds/block/soul_sand/break7.ogg": "afc9fac5422fd61cb56180a712953332ec0918e7", + "minecraft/sounds/block/soul_sand/break8.ogg": "ba2ba79529033573f178e585e77c44c513a8f579", + "minecraft/sounds/block/soul_sand/break9.ogg": "fe1de3c384b47f8ea46120a90c020adbfe913819", + "minecraft/sounds/block/soul_sand/step1.ogg": "3591ce4debaac9064c44043a3034cdafd77c2533", + "minecraft/sounds/block/soul_sand/step2.ogg": "d1d06273f32c192232342d42c37eb44df42ccb39", + "minecraft/sounds/block/soul_sand/step3.ogg": "ca096eeb4efdebcd12b704cd7d99f1bb7163e8d9", + "minecraft/sounds/block/soul_sand/step4.ogg": "a9fa12e80ae506b7f7982a2868f1c2a40f6abebf", + "minecraft/sounds/block/soul_sand/step5.ogg": "c5a16dd2e2e184a4cbb1dff2eae8ac5eab110f2b", + "minecraft/sounds/block/soul_soil/break1.ogg": "3bbb9dc8987ea084ed200fc419b6fb60454c6e13", + "minecraft/sounds/block/soul_soil/break2.ogg": "5489c44a4fbedfb800d3d3ba978ae6e1b5eaee5e", + "minecraft/sounds/block/soul_soil/break3.ogg": "8210d2353fbd6b0b1c9bfd7fdf3232f5866bf729", + "minecraft/sounds/block/soul_soil/break4.ogg": "104403b1df4f2aaa53cd6c8a91ce1be8c874ff5c", + "minecraft/sounds/block/soul_soil/break5.ogg": "bfcdaf1edfe6d62d9ce49f150cf847bec99136ac", + "minecraft/sounds/block/soul_soil/break6.ogg": "86767d3c08a06dc2440463a05f5a505e05454ab9", + "minecraft/sounds/block/soul_soil/step1.ogg": "38be8858400ff9f27f276b3d162d4d469dcceff7", + "minecraft/sounds/block/soul_soil/step2.ogg": "5d48455ed9dcb058b5ae5d246294223e858c8113", + "minecraft/sounds/block/soul_soil/step3.ogg": "a16c9407a782197eae018ab8c9b254948c5b80f8", + "minecraft/sounds/block/soul_soil/step4.ogg": "4a208cddefe51a2b1fd81a3de82b3e8c1977e299", + "minecraft/sounds/block/soul_soil/step5.ogg": "a01705000011bfcb8786351ab4a2d4dbebf8d132", + "minecraft/sounds/block/spawner/break1.ogg": "ccf2a5a264bb58795f6475d5c61e2ea295964528", + "minecraft/sounds/block/spawner/break2.ogg": "4e52f7136f1c64a57d85f5a3d4f6d00009c1bca8", + "minecraft/sounds/block/spawner/break3.ogg": "6b0c7eb3f22a33d07d4226d26153fe060ae762e5", + "minecraft/sounds/block/spawner/break4.ogg": "ae03ecde88fa08a7ad611f4a795677ae60ace9db", + "minecraft/sounds/block/spawner/step1.ogg": "13c0edd0a66e783fbdc67d9a95ad2868f99d19dd", + "minecraft/sounds/block/spawner/step2.ogg": "2f3436fae7a108cb5f4731fd3cbe31b0621fa725", + "minecraft/sounds/block/spawner/step3.ogg": "612f3d2f815f646d336d90ec223e8561a0f658d5", + "minecraft/sounds/block/spawner/step4.ogg": "6210466ea3b85499767bd003a7c0a091d46d6cf0", + "minecraft/sounds/block/spawner/step5.ogg": "d52edd118f8cc81023fdfa4de28a79ceaaf01ec1", + "minecraft/sounds/block/sponge/absorb1.ogg": "225b26ba6d8842e364ace9d8b0c64831c18c16e7", + "minecraft/sounds/block/sponge/absorb2.ogg": "b7d69f7b5bb8c1b16592f831a7eb21b8ca35bcab", + "minecraft/sounds/block/sponge/absorb3.ogg": "b75918507a7a30d84baa72b6279dfd30139d956c", + "minecraft/sounds/block/sponge/break1.ogg": "eb8f0b060718f3b74eb991f85023bc5d5c21ee59", + "minecraft/sounds/block/sponge/break2.ogg": "febbe68cf8ee59dad874785d4316b9eea1168163", + "minecraft/sounds/block/sponge/break3.ogg": "95d201f92ddfba80febb175d051a10073cfd629a", + "minecraft/sounds/block/sponge/break4.ogg": "db03ffd082f64ebfbe318d1c92dc1f2ad26f3c3d", + "minecraft/sounds/block/sponge/step1.ogg": "58a16a9ad86e31d7681d35749c926c410da90e71", + "minecraft/sounds/block/sponge/step2.ogg": "1b3ba9a6a14e99ce3b9c1b832ed3e5a9d7c12379", + "minecraft/sounds/block/sponge/step3.ogg": "d93adf271c6f8b00aa7d1338033d22e5cb1a2259", + "minecraft/sounds/block/sponge/step4.ogg": "2c71430f0cf03dfc9b8d6c72e3d36477210ef6fd", + "minecraft/sounds/block/sponge/step5.ogg": "ea3cc7187d7c5b51c58bf3a6ffa70637901b7b98", + "minecraft/sounds/block/sponge/step6.ogg": "160dbeaa819ab4151692b736beeee12094a633ba", + "minecraft/sounds/block/sponge/wet_sponge/break1.ogg": "4cc99bd425886ee0692da0cc91f680828010a884", + "minecraft/sounds/block/sponge/wet_sponge/break2.ogg": "8de22c03536fb625a4652e06e4cf75b83485fc0c", + "minecraft/sounds/block/sponge/wet_sponge/break3.ogg": "5117536be57b6df3e49b2a6ad9730b8096a65c2b", + "minecraft/sounds/block/sponge/wet_sponge/break4.ogg": "357995f8d51884f14e5fa979c3f1e875eb6949c7", + "minecraft/sounds/block/sponge/wet_sponge/step1.ogg": "66ad1d35e8e3d5f063346dbb2ee00f51aff6625b", + "minecraft/sounds/block/sponge/wet_sponge/step2.ogg": "6cdf620249c506b80bd7c781ec69ec3e332d2bf8", + "minecraft/sounds/block/sponge/wet_sponge/step3.ogg": "74e8bb9c8c47da4916b971027dd78a2efe51430e", + "minecraft/sounds/block/sponge/wet_sponge/step4.ogg": "c9b9082b0a2085bad5636eb01a89298428b588bf", + "minecraft/sounds/block/spore_blossom/break1.ogg": "68ada49c61d305b3fff50762cc87b964fadbb2e3", + "minecraft/sounds/block/spore_blossom/break2.ogg": "0720d3b4819f8626286004e5b96d5de9c945ce86", + "minecraft/sounds/block/spore_blossom/break3.ogg": "20d6daa862da95996fdeb5036b95a4918895305f", + "minecraft/sounds/block/spore_blossom/break4.ogg": "0477daf851cba253d4c909ad3245b6cde4ea4937", + "minecraft/sounds/block/spore_blossom/break5.ogg": "2e505c6bd1a299c567e0f20f28fd8a3ddf3072a9", + "minecraft/sounds/block/spore_blossom/step1.ogg": "f2cb1052d3dfb30bdf60a387bc197578d63b1264", + "minecraft/sounds/block/spore_blossom/step2.ogg": "b841029b8b8f260f0f5fe6032e5e163330bf80ab", + "minecraft/sounds/block/spore_blossom/step3.ogg": "68c941413914e16a8564b5fb58c97540a5db771f", + "minecraft/sounds/block/spore_blossom/step4.ogg": "2e2a3fbb0fa73bfa638b5c3619be174661e75e5c", + "minecraft/sounds/block/spore_blossom/step5.ogg": "dc041680e0e84defdc9af9546d54aa1dc99c8263", + "minecraft/sounds/block/spore_blossom/step6.ogg": "303ed1b5a9e84adbb5edcaec6de03706c8bd5fa3", + "minecraft/sounds/block/stem/break1.ogg": "c0fe37367ec8507b7b8edafad6a4ba066b0b97f0", + "minecraft/sounds/block/stem/break2.ogg": "cffa70fded6b305ef635e917e08fdb3170a231e5", + "minecraft/sounds/block/stem/break3.ogg": "8dbf96aa7208979d2b97f7906d2f46a0be1d9bf4", + "minecraft/sounds/block/stem/break4.ogg": "ce0ed48ea0723cb2df3b1379ef5d66b7d916aceb", + "minecraft/sounds/block/stem/break5.ogg": "54bb5eeb26f5028b371212d2e708bef056b2ab6e", + "minecraft/sounds/block/stem/break6.ogg": "88837df52ff6ee8f6c5f406a3d3f022733341369", + "minecraft/sounds/block/stem/step1.ogg": "bdffa80cb8875b1b71cd80d07d05aa642630211a", + "minecraft/sounds/block/stem/step2.ogg": "f3f31701219ad15323ecbc13041be88c7bde103a", + "minecraft/sounds/block/stem/step3.ogg": "e443b124baab6ce502b079268f3025e07dbff6d6", + "minecraft/sounds/block/stem/step4.ogg": "72e89b6a9ca8f72c1f5f67c09c8d3dbc6d6f2ae2", + "minecraft/sounds/block/stem/step5.ogg": "94097d3a1ca59a7e2d2ab9b4c948eb5393e50592", + "minecraft/sounds/block/stem/step6.ogg": "e04f8abb9df2de85ddad179aa71a006648c20a31", + "minecraft/sounds/block/suspicious_gravel/break1.ogg": "54a19edefba480d7985c8da05c35340d0db9cb0e", + "minecraft/sounds/block/suspicious_gravel/break2.ogg": "380fe0f9580a7ab619e3d754c619c9b57a4e95b7", + "minecraft/sounds/block/suspicious_gravel/break3.ogg": "4223968073a67175ee913c256f18f8e808fdece2", + "minecraft/sounds/block/suspicious_gravel/break4.ogg": "db3a7cd1eb984b163f8c545a5eeb8ff8ace44e79", + "minecraft/sounds/block/suspicious_gravel/break5.ogg": "a66f76a8dbe2e6dc1f9205597bdae1362a2b5cf9", + "minecraft/sounds/block/suspicious_gravel/break6.ogg": "8fdb4080b274671e8634bee9c32e3e08cff95b92", + "minecraft/sounds/block/suspicious_gravel/place1.ogg": "fe185fa59f21659207064439e17039bb39fbd73a", + "minecraft/sounds/block/suspicious_gravel/place2.ogg": "13a974b130eaa184a6ad276308ad8ba32ba06e66", + "minecraft/sounds/block/suspicious_gravel/place3.ogg": "d5ad8cea62f912013b0b1634077cfe85e2c68931", + "minecraft/sounds/block/suspicious_gravel/place4.ogg": "8fb273a29573dc71202949abbbda0eb84a18327d", + "minecraft/sounds/block/suspicious_gravel/step1.ogg": "a9e03b9f5f11663bcaf413014f16a394c067514c", + "minecraft/sounds/block/suspicious_gravel/step2.ogg": "859a02ca8ab17a21bd05bc05f1f66811b6e03444", + "minecraft/sounds/block/suspicious_gravel/step3.ogg": "e0269c5d612057cd820cd73822caaed30a0a1a73", + "minecraft/sounds/block/suspicious_gravel/step4.ogg": "7bf0b305e76d86071003474114ff211e2e9a581f", + "minecraft/sounds/block/suspicious_sand/break1.ogg": "50225fbfb904caa6ddfd2816609e34e390f45f9e", + "minecraft/sounds/block/suspicious_sand/break2.ogg": "eb56e6fb3e29a18846d134972eec9db1ad65b5fd", + "minecraft/sounds/block/suspicious_sand/break3.ogg": "89684131070403ea2d3babd119de32a456452984", + "minecraft/sounds/block/suspicious_sand/break4.ogg": "39dac60d9d79b33739eed95b7e30080ce2e75d10", + "minecraft/sounds/block/suspicious_sand/break5.ogg": "c167b27c258d1c19bc098ab30fbc66222821ff93", + "minecraft/sounds/block/suspicious_sand/break6.ogg": "1571a21fdbae57cfc1d9e1742cb9f511ab99c636", + "minecraft/sounds/block/suspicious_sand/place1.ogg": "265a4f766be77ae9a035f09e146a64be8c073ae5", + "minecraft/sounds/block/suspicious_sand/place2.ogg": "052706580c2512db6ffe36d37ede67dd7900016a", + "minecraft/sounds/block/suspicious_sand/place3.ogg": "8bbc42b4c5773ed082d30dde9506ecac45a26cf9", + "minecraft/sounds/block/suspicious_sand/place4.ogg": "e8567c5cff70491d49cbdfd2f9b3df3a3d7a6076", + "minecraft/sounds/block/suspicious_sand/place5.ogg": "4e8f8a6dbdff95795d25bd7bd0e460aed28f01c4", + "minecraft/sounds/block/suspicious_sand/step1.ogg": "1691218e5ce6ee66ef01cd947f6fbb68fd0a4123", + "minecraft/sounds/block/suspicious_sand/step2.ogg": "3a5e4bef6baaa603578055b2555499720e8f1b75", + "minecraft/sounds/block/suspicious_sand/step3.ogg": "98a086f97728ae57a4552ef3c812f6fd9576c888", + "minecraft/sounds/block/suspicious_sand/step4.ogg": "f1fe33e67908c15871f210350d549474c5c26648", + "minecraft/sounds/block/suspicious_sand/step5.ogg": "8e4c8fd5eb7e1f339e87ceb3d6f92b62fca717a5", + "minecraft/sounds/block/sweet_berry_bush/break1.ogg": "5e70eed559dac551cc7e0493793628e7b55a44d0", + "minecraft/sounds/block/sweet_berry_bush/break2.ogg": "622fb127130bc09030d8662c16b5e2743defa03b", + "minecraft/sounds/block/sweet_berry_bush/break3.ogg": "98f36fa7518bce840b14b1cc9b48e9baa9ff9bad", + "minecraft/sounds/block/sweet_berry_bush/break4.ogg": "e1620e03cf52aaa8d046a9b54f8eddfb6059f694", + "minecraft/sounds/block/sweet_berry_bush/place1.ogg": "5d7690eecfec6ee9ebd6e2731374747ae6b57c2f", + "minecraft/sounds/block/sweet_berry_bush/place2.ogg": "3fca17f8df0a59b97686b8601a34faed92e9a323", + "minecraft/sounds/block/sweet_berry_bush/place3.ogg": "2c7a5a4388dae71dd5100f6e6c5423189e4062ad", + "minecraft/sounds/block/sweet_berry_bush/place4.ogg": "efc20a63cc14535bfdf616f90b3596e07a6b10ee", + "minecraft/sounds/block/sweet_berry_bush/place5.ogg": "3b99ac91d9c17e6d4542ccc4fcfeaf2fe715b2d9", + "minecraft/sounds/block/sweet_berry_bush/place6.ogg": "d3a1213d23d0669b296afeaef52f72eb32b866f1", + "minecraft/sounds/block/trial_spawner/about_to_spawn_item.ogg": "7f09c286de0c2a186c84eb67c777ad35a50562e9", + "minecraft/sounds/block/trial_spawner/ambient1.ogg": "39143ab7c257c5b1138448103fecf73c8e001fa5", + "minecraft/sounds/block/trial_spawner/ambient2.ogg": "015b6ad7c08735a7856ce404b33ddce317d4c23a", + "minecraft/sounds/block/trial_spawner/ambient3.ogg": "a484516c7a1a86a82cc393790ba5d0b635eada65", + "minecraft/sounds/block/trial_spawner/ambient4.ogg": "e78d997b02f91f36876f65a7aa6ec4fd86142366", + "minecraft/sounds/block/trial_spawner/ambient5.ogg": "ad001047a1b15e067500bbf3c0cb90095eb69684", + "minecraft/sounds/block/trial_spawner/ambient_ominous1.ogg": "04430b2c137aaae37241228c6bfeea8e62cf48b5", + "minecraft/sounds/block/trial_spawner/ambient_ominous2.ogg": "e003cae940c726ae24f198f3d0745f78abac14ad", + "minecraft/sounds/block/trial_spawner/ambient_ominous3.ogg": "e82282aebe27217e74878c179a3b45c335e7cf38", + "minecraft/sounds/block/trial_spawner/ambient_ominous4.ogg": "092db8449ed085eb9b764c9ab1adc829ee4e2300", + "minecraft/sounds/block/trial_spawner/ambient_ominous5.ogg": "0a9d177aa4fb5896b3125f6aea8eadf62c7260dd", + "minecraft/sounds/block/trial_spawner/break1.ogg": "4d89f4dce1ef82cdd930f10f9dcbc3f1e3cf24a6", + "minecraft/sounds/block/trial_spawner/break2.ogg": "d181fa75f01a291979f9103d7cd7473631fb5e8c", + "minecraft/sounds/block/trial_spawner/break3.ogg": "a6cc7f68228c91f8e692144464f48ece318e9a11", + "minecraft/sounds/block/trial_spawner/close_shutter.ogg": "7356e0a396a34eaa3e882923d3968f4b2e5e4651", + "minecraft/sounds/block/trial_spawner/detect_player1.ogg": "1094a96acf2f61274676d345505c4a5ef75c6b94", + "minecraft/sounds/block/trial_spawner/detect_player2.ogg": "02332b417ec91b279ecdd49923f2e162d87bfea4", + "minecraft/sounds/block/trial_spawner/detect_player3.ogg": "a6f81cd44a241516d9ce835e6f9e75e62436cdeb", + "minecraft/sounds/block/trial_spawner/eject_item1.ogg": "98c94b78a3538392ec63314bd00b6fdd02277a1e", + "minecraft/sounds/block/trial_spawner/ominous_activate.ogg": "59b77eaabf6ba4415b71f760638917e891d22336", + "minecraft/sounds/block/trial_spawner/open_shutter.ogg": "70c7e704472d19e92b606eac1d71250c3e69dd40", + "minecraft/sounds/block/trial_spawner/place1.ogg": "3e56f0d658620d97b10cc9a7e5483eb940ed2e08", + "minecraft/sounds/block/trial_spawner/place2.ogg": "5b13f3f71578e30012b3f30cc0057f8c846118c2", + "minecraft/sounds/block/trial_spawner/place3.ogg": "89bbd7da47d332ed514e65631bcea79fcfa32efc", + "minecraft/sounds/block/trial_spawner/spawn1.ogg": "f95e9a960a796d7582c3cebff6fe3e5333164911", + "minecraft/sounds/block/trial_spawner/spawn2.ogg": "4904ea79799cddee7169cef551c0d09450ac31bd", + "minecraft/sounds/block/trial_spawner/spawn3.ogg": "8f6d15acc509936941efdc566b60c66365b1561e", + "minecraft/sounds/block/trial_spawner/spawn4.ogg": "abbb3a6b3bfe83e1c3e75db04580d6bdd0adbcaf", + "minecraft/sounds/block/trial_spawner/spawn_item1.ogg": "487799e00e80d0706f1284df3fc8c7805bb325d4", + "minecraft/sounds/block/trial_spawner/spawn_item2.ogg": "eaaf823192b61a168b20839da313ce62bd060ef9", + "minecraft/sounds/block/trial_spawner/spawn_item3.ogg": "67abd16cada0ff493b373ba04aedbc11411cd890", + "minecraft/sounds/block/trial_spawner/spawn_item_begin1.ogg": "567755439fc5118a0ede2e191a552ca0c1db8d25", + "minecraft/sounds/block/trial_spawner/spawn_item_begin2.ogg": "45986752eaebf2c004da7e1e297df0ccf55c929e", + "minecraft/sounds/block/trial_spawner/spawn_item_begin3.ogg": "2368a0e0b26e33051af360cc4c14cfdcf6246bc0", + "minecraft/sounds/block/trial_spawner/step1.ogg": "b20c57049e28e3c972ed280532f021440e91fa42", + "minecraft/sounds/block/trial_spawner/step2.ogg": "1618d8c9a2d0b3afe5d244aa0c4a3123ce9bb0fb", + "minecraft/sounds/block/trial_spawner/step3.ogg": "cfe9c216f6d2c028106bbadd6fee985f896fa771", + "minecraft/sounds/block/trial_spawner/step4.ogg": "0fb1c24c2ac7866392f1a2d441cd4416d41723eb", + "minecraft/sounds/block/trial_spawner/step5.ogg": "58930c612add179d3954cdeabdf6894d11eec1c6", + "minecraft/sounds/block/tuff/break1.ogg": "b7b9a8feb18573e4ee4f34f81b72339ce1846050", + "minecraft/sounds/block/tuff/break2.ogg": "fb4a558d5e26a519aaf79f0ca351690ca55cc867", + "minecraft/sounds/block/tuff/break3.ogg": "4e0df873385a1ff16081134f00b01658382267a2", + "minecraft/sounds/block/tuff/break4.ogg": "f2a9abf36b6b67eecc9260a9d7b0005892e448e5", + "minecraft/sounds/block/tuff/break5.ogg": "7dd06959ed85aa66822640c8aac47d941fb1768a", + "minecraft/sounds/block/tuff/step1.ogg": "a2f02c5e19d877adf6675f641b71f49b1becd8ab", + "minecraft/sounds/block/tuff/step2.ogg": "e1e1d133b900bdf3484b2c0bb0f745e6ecb338ba", + "minecraft/sounds/block/tuff/step3.ogg": "fdc7b34ca4e848c6230a8601c873ba06104b6ec3", + "minecraft/sounds/block/tuff/step4.ogg": "c75b3bd6889c6bd7cf8d6717cdfbaf711c1e4ee7", + "minecraft/sounds/block/tuff/step5.ogg": "6b2ac5e67c159b91f29cc8ce9388e1c4bc4ce84a", + "minecraft/sounds/block/tuff/step6.ogg": "2b63cb8b075639c741d798e9db9fead6b1dacdb2", + "minecraft/sounds/block/tuff_bricks/place1.ogg": "605d64b2d1dbc275dbd95d4c27e46ab5cf33052f", + "minecraft/sounds/block/tuff_bricks/place2.ogg": "0529f4425e6066a1628fdc7b89142216c4a27f7c", + "minecraft/sounds/block/tuff_bricks/place3.ogg": "9db12c7ad3c9cc47607e75eb2fbb0476cf583a40", + "minecraft/sounds/block/tuff_bricks/place4.ogg": "8e1b5ac91c37eede382a2240a808a8c2766462be", + "minecraft/sounds/block/tuff_bricks/place5.ogg": "e900c4254dc640e95576b13e6890d70e38eda88f", + "minecraft/sounds/block/tuff_bricks/step1.ogg": "b99f0a6c3e186e4a1e5d023d930fc811bf8f9c74", + "minecraft/sounds/block/tuff_bricks/step2.ogg": "41fef90488ed0aa65bd83e123a6bcd20360bdb83", + "minecraft/sounds/block/tuff_bricks/step3.ogg": "1a2de0f1eabea06f144265b1c09e11463202c026", + "minecraft/sounds/block/tuff_bricks/step4.ogg": "cef7fe4475a9a6943c408bae69291d61fbe2a5cf", + "minecraft/sounds/block/tuff_bricks/step5.ogg": "ebf5d5933fb1461b8f714335b98efe00bfb36e0a", + "minecraft/sounds/block/tuff_bricks/step6.ogg": "64c5ef9ce717fe8c9b2ceb6fd2e0632bcce5d51b", + "minecraft/sounds/block/vault/activate.ogg": "92dab48dc7436bd2b2cc564c9190f934f9fd5463", + "minecraft/sounds/block/vault/ambient1.ogg": "e9644deaba05299e6f119096a892366b06a92727", + "minecraft/sounds/block/vault/ambient2.ogg": "1ee3efc2dd4121176b542c96fcc7baf6d3badd13", + "minecraft/sounds/block/vault/ambient3.ogg": "f856295d6812e739fbdf42056f3e1814cf2a76ab", + "minecraft/sounds/block/vault/break1.ogg": "9175b581230b552217fe55f19830d359a435ced6", + "minecraft/sounds/block/vault/break2.ogg": "92e6c376ee2745b5e05d3ac1820bedfa417f2ee4", + "minecraft/sounds/block/vault/break3.ogg": "8c515ed4795bb3d7aed1b86849ba65703edf1306", + "minecraft/sounds/block/vault/break4.ogg": "e1940bfcf38822799cd81279f642e0ec13920923", + "minecraft/sounds/block/vault/deactivate.ogg": "86db10084162de0f4e27fe2df10b67e33898760e", + "minecraft/sounds/block/vault/eject1.ogg": "f73a43d391dae371010eecfa517fac11d08507f3", + "minecraft/sounds/block/vault/eject2.ogg": "e676c2c8b9653ba25c46993aafd5c9afce671785", + "minecraft/sounds/block/vault/eject3.ogg": "317a73002f87d331c31885720e84a0a081e06998", + "minecraft/sounds/block/vault/insert.ogg": "097eabe5a18ccfcc253e23550b596bd2a5746649", + "minecraft/sounds/block/vault/insert_fail.ogg": "5b8a1ac9caa777cc31443a08654f5044b979aad7", + "minecraft/sounds/block/vault/open_shutter.ogg": "4158d20271c062b43a0a8081acdf0937221cceb1", + "minecraft/sounds/block/vault/place1.ogg": "4470661621cf0e95abdac0b099ece7d8bb308020", + "minecraft/sounds/block/vault/place2.ogg": "8e6265fa36f3494f01c87c7de1d5be3ce3f4255b", + "minecraft/sounds/block/vault/place3.ogg": "64daa28cc72b76a3516f8291fa929e5c2702f4dc", + "minecraft/sounds/block/vault/place4.ogg": "2ed55ab3b9df49cb57662b483a9fa40403d380a5", + "minecraft/sounds/block/vault/reject_rewarded_player.ogg": "9a4bfa8eeb8f34803bf89e55eee3fb062e9bbac6", + "minecraft/sounds/block/vault/step1.ogg": "d25f44424805b208ce77aad6a1898d55831d47ab", + "minecraft/sounds/block/vault/step2.ogg": "0828348eb05a0e1b232f6b091b8598e2123f9a43", + "minecraft/sounds/block/vault/step3.ogg": "bc490285ee3c28a5ad8dfadd42a2b6974690a430", + "minecraft/sounds/block/vault/step4.ogg": "ea3c8dba058142c1ff38d7dd49895f5b8b037baa", + "minecraft/sounds/block/vault/step5.ogg": "88378c5a24a6cd1f8c543ddaa08988bab2ac2eb9", + "minecraft/sounds/block/vault/step6.ogg": "614d534c219fe77929fe81d642dc783f3ed7e6c1", + "minecraft/sounds/block/vault/step7.ogg": "eb500c65f1c33130ab0f29a8b7432a4bfe2187e0", + "minecraft/sounds/block/vault/step8.ogg": "1aa54bf9d3ce024643a7dea98d5d82ffe4ca4e6e", + "minecraft/sounds/block/vine/break1.ogg": "b448b8755fbb96a437a626fcf5d98e2d690255e2", + "minecraft/sounds/block/vine/break2.ogg": "2f2223b7dbd52a91055bd780184f6881e5db0bb8", + "minecraft/sounds/block/vine/break3.ogg": "d37ac7023b6b04d17dd809e95a17069befaffca3", + "minecraft/sounds/block/vine/break4.ogg": "4016f27dc128015be0ff8732e5bff569da3146ca", + "minecraft/sounds/block/vine/climb1.ogg": "4e2b84745b8b544d6adfa0ffe774b2e4fa04c55c", + "minecraft/sounds/block/vine/climb2.ogg": "674af8ae97eb617cd3fece7c22db24d37c2333ae", + "minecraft/sounds/block/vine/climb3.ogg": "b7ba45026cfcc13c7bba3a7f11ae8c1164d77af9", + "minecraft/sounds/block/vine/climb4.ogg": "ecbd493a02ae4def0aaa9a00957738796c3a6896", + "minecraft/sounds/block/vine/climb5.ogg": "8d0c2f3eae53fe7fa1f9b55b9088c75d601c712c", + "minecraft/sounds/block/waterlily/place1.ogg": "a836d78166d52951fe5aa76cf4a9bfc582e07907", + "minecraft/sounds/block/waterlily/place2.ogg": "176d2f7cec51bf54d1702230d038de817912659e", + "minecraft/sounds/block/waterlily/place3.ogg": "8b5a04fbaf70e8526752e7cdf4e915eeb76a2bc0", + "minecraft/sounds/block/waterlily/place4.ogg": "44fe93631e6cb71ac33c8902cc1ad74219e9b527", + "minecraft/sounds/block/wooden_door/close1.ogg": "2c9c67b6239e6201059540c0f720e6b8837bc754", + "minecraft/sounds/block/wooden_door/close2.ogg": "7ec17a07c70a32a80c280f37e340bea8b53eb46a", + "minecraft/sounds/block/wooden_door/close3.ogg": "9ea710fe8e53c52667375c842145e1654c7c51ea", + "minecraft/sounds/block/wooden_door/open1.ogg": "e539f6aa8c7d9ab2aac76e677100807c41b26e29", + "minecraft/sounds/block/wooden_door/open2.ogg": "e3cba57bdf41754cc6b47831b916d0d3e7d8856f", + "minecraft/sounds/block/wooden_trapdoor/close1.ogg": "893e51fb583c45afdf430c46cb1707132a74bb2e", + "minecraft/sounds/block/wooden_trapdoor/close2.ogg": "d1d8a4043b005ded332e4520fa9331c7fc818523", + "minecraft/sounds/block/wooden_trapdoor/close3.ogg": "bf11ddbd35fb38146a42e1d64938979755e8c16b", + "minecraft/sounds/block/wooden_trapdoor/open1.ogg": "a942ba9178c104b54519aa462679458355db26c5", + "minecraft/sounds/block/wooden_trapdoor/open2.ogg": "4b812a92858942797979e63714dbf814bd246d35", + "minecraft/sounds/block/wooden_trapdoor/open3.ogg": "22324b1071e3d53f5f719899ca5d7213dfe4542d", + "minecraft/sounds/block/wooden_trapdoor/open4.ogg": "510bcfc863b9d64fd063d038f97547bfe58e2f12", + "minecraft/sounds/block/wooden_trapdoor/open5.ogg": "071003e0b359f3a85959c5a7ad8955c19947455e", + "minecraft/sounds/damage/fallbig.ogg": "6582e589d649de71649f01db4f24eb8d90ea0a74", + "minecraft/sounds/damage/fallsmall.ogg": "0e2e8a4968dc62f096f2789883492d5498a47391", + "minecraft/sounds/damage/hit1.ogg": "c43077ac1f9ceda7e9e1c152f839baf207833aa8", + "minecraft/sounds/damage/hit2.ogg": "65bf3f80ca720c55b99925ba3a515d2f932b15b1", + "minecraft/sounds/damage/hit3.ogg": "b334c8ab1abc3ffa233bd612074bc8032c9b160f", + "minecraft/sounds/dig/cloth1.ogg": "311ef8b58ab266c5a5d903dd758a062532e33f3b", + "minecraft/sounds/dig/cloth2.ogg": "7eb276f23a2f4ef72e77a4876f78b141488b77f3", + "minecraft/sounds/dig/cloth3.ogg": "965177ba822cee3f7cd1c82cf4ee0a956cbf62bd", + "minecraft/sounds/dig/cloth4.ogg": "2cc660a4ab39a14a29ecb79265684901cbaf90fe", + "minecraft/sounds/dig/coral1.ogg": "e717312f23b16407ffba767e236da64fde668e7b", + "minecraft/sounds/dig/coral2.ogg": "02b6bcbd9c941183a6ebff340c10e4b7c3c5eb4c", + "minecraft/sounds/dig/coral3.ogg": "fa373b2d51876345ba5ac309fcc3f2536398caf0", + "minecraft/sounds/dig/coral4.ogg": "affbfd1a44bb29795b914c1f7dafbaae7b652194", + "minecraft/sounds/dig/grass1.ogg": "39fd80b9346a28f891c6ffabd197b974fa61f2cd", + "minecraft/sounds/dig/grass2.ogg": "f2da10547bfa0f1babdfd2ea5c31e09cd871a3aa", + "minecraft/sounds/dig/grass3.ogg": "cebb2bda1cd962516882e36ad2a9927167aadfa1", + "minecraft/sounds/dig/grass4.ogg": "a0b221f6c8e23628108a46804ab2afb15c180b5a", + "minecraft/sounds/dig/gravel1.ogg": "91f8c3ab78696acc791e139e89dcb38d28f6af7f", + "minecraft/sounds/dig/gravel2.ogg": "40cd627d79a3dbe0dd3a74d51e3b5ece08c27e11", + "minecraft/sounds/dig/gravel3.ogg": "c1a534edf0ab91984231a0009ce65988209fede4", + "minecraft/sounds/dig/gravel4.ogg": "f7fb23c23cf43e478d664e3f2f4305ffb22494b9", + "minecraft/sounds/dig/sand1.ogg": "fbb8115856475678b59b9c923a17bb3c1c685629", + "minecraft/sounds/dig/sand2.ogg": "faa54c39b08b83ed77c3ea076737778e7f92ead8", + "minecraft/sounds/dig/sand3.ogg": "7ef725e8974a636a63cfd438c5829dc2bdbba354", + "minecraft/sounds/dig/sand4.ogg": "4945ba65b8429e8ecb7e37a1fbcce386931accb7", + "minecraft/sounds/dig/snow1.ogg": "f59e759247f1b73ea74670495d4716f7c0736f6e", + "minecraft/sounds/dig/snow2.ogg": "07dea5606e9449e3c9e9cd5d4a6439b9a10d35b5", + "minecraft/sounds/dig/snow3.ogg": "c07e7288103269b18dd00d2d701bf627c6d8127d", + "minecraft/sounds/dig/snow4.ogg": "14d15c2b2e9310027d3fc9cdfd131b56acca8029", + "minecraft/sounds/dig/stone1.ogg": "4ec831592ae2bcbac1b4047a9f9f72a2de5ca834", + "minecraft/sounds/dig/stone2.ogg": "7afc0a50da1e1f92499c9c45c7ea912808d9a9ea", + "minecraft/sounds/dig/stone3.ogg": "dc61bcd12bea28fc6a3427b62e458c4d1922f3fc", + "minecraft/sounds/dig/stone4.ogg": "d8bfc754f9ced2f50521f7bb94503ec456887ddc", + "minecraft/sounds/dig/wet_grass1.ogg": "91a8543456e06dea5fc066db5ba7986c8783fac5", + "minecraft/sounds/dig/wet_grass2.ogg": "70c0cf4b40effff39602153f909828a63667e74d", + "minecraft/sounds/dig/wet_grass3.ogg": "8be3509f63277ee94d5a3027eac6db2e645831ad", + "minecraft/sounds/dig/wet_grass4.ogg": "1a616c4727e64a4e9710ec4a8abcbc070d5ff057", + "minecraft/sounds/dig/wood1.ogg": "ef59a7ee4163d8b06fcda67e356ffe717756adda", + "minecraft/sounds/dig/wood2.ogg": "e6c0a8a18eb9c866042b44595ba9f40e3a691153", + "minecraft/sounds/dig/wood3.ogg": "8e7b1f82f4d68c04e8fdd43fb631079e4e36badc", + "minecraft/sounds/dig/wood4.ogg": "be74b375d7adfe9470afec83707cda6f35275fa1", + "minecraft/sounds/enchant/soulspeed/soulspeed1.ogg": "e6c779bd9afddd64386267151d5be140378e5c2a", + "minecraft/sounds/enchant/soulspeed/soulspeed10.ogg": "134d89171222ab13b8f6a0c265c2e27feb08a45d", + "minecraft/sounds/enchant/soulspeed/soulspeed11.ogg": "f168111f74c7b2b44dbee6b4e72d0300fa3a8b99", + "minecraft/sounds/enchant/soulspeed/soulspeed12.ogg": "bf7ad9e27109632f03424ade68c3e4330e623c82", + "minecraft/sounds/enchant/soulspeed/soulspeed13.ogg": "711ded3c88295be8e4fa5fe657ee9e459aacd033", + "minecraft/sounds/enchant/soulspeed/soulspeed2.ogg": "e6b0a68a971f744318c220a3a8f6e0c63ca2e48c", + "minecraft/sounds/enchant/soulspeed/soulspeed3.ogg": "0ccca22fee32f342be3f886e5202025800a742c0", + "minecraft/sounds/enchant/soulspeed/soulspeed4.ogg": "db82fb7505c936e1b5a03c4464bd10963f3c64ce", + "minecraft/sounds/enchant/soulspeed/soulspeed5.ogg": "bde5dc6ef9a98a6ba115d6841e57c9585fb73381", + "minecraft/sounds/enchant/soulspeed/soulspeed6.ogg": "0ead26ea56117ce0715c4c9d8266a0e4ad92c275", + "minecraft/sounds/enchant/soulspeed/soulspeed7.ogg": "d07596a3ffb5c61fba9e72813caab952dd32635d", + "minecraft/sounds/enchant/soulspeed/soulspeed8.ogg": "824eadc9623fec95a1e1e330e48852e3dbbcbf77", + "minecraft/sounds/enchant/soulspeed/soulspeed9.ogg": "0ea63ab9ae3849d51863299604e7fbbfed7cbfdb", + "minecraft/sounds/enchant/thorns/hit1.ogg": "a7d2c7b475aa5e3de50699b73c075e54d27832e8", + "minecraft/sounds/enchant/thorns/hit2.ogg": "3b9a1020e956a1ab334c518447b54146e8c6ed4d", + "minecraft/sounds/enchant/thorns/hit3.ogg": "c9916def2cc8fb2e3f82b726ea6014730c3fb428", + "minecraft/sounds/enchant/thorns/hit4.ogg": "a191d7d12d62e0d9a3a9e8628657f477f722370c", + "minecraft/sounds/entity/armorstand/break1.ogg": "abd7d55ed1f4cefef84a935937a0893dea150a45", + "minecraft/sounds/entity/armorstand/break2.ogg": "935fbfb4b3dea314ead96418f06ac31b4d6fe55c", + "minecraft/sounds/entity/armorstand/break3.ogg": "98c98486abde4419300c0a8ead95b922e153ff03", + "minecraft/sounds/entity/armorstand/break4.ogg": "87253391dd7e646128e05e386c0af8d9c67c15c1", + "minecraft/sounds/entity/armorstand/hit1.ogg": "a021158e44a44ca64443eb86d591847374349daa", + "minecraft/sounds/entity/armorstand/hit2.ogg": "d9ca1f6db0fd7108c3806a99e8d70f4f6e9ba45c", + "minecraft/sounds/entity/armorstand/hit3.ogg": "984d3aaaba9e8bfd10a7edb77de46b975be8e25a", + "minecraft/sounds/entity/armorstand/hit4.ogg": "87b1f12d7daa327c65c66ac44569eca9ab4bc4d7", + "minecraft/sounds/entity/boat/paddle_land1.ogg": "64bfe63e0e769c4048fc87a4e30e58836ef14cf1", + "minecraft/sounds/entity/boat/paddle_land2.ogg": "e49c0c26da1c6a7bfd6d8b4771518c1cdfe3f1fb", + "minecraft/sounds/entity/boat/paddle_land3.ogg": "118a9274f2d1fa899f135eb670ea37fac1c77161", + "minecraft/sounds/entity/boat/paddle_land4.ogg": "2800055fbed23e1f0f3f1fcc4beafaa3b2e07690", + "minecraft/sounds/entity/boat/paddle_land5.ogg": "7ff747597389d9d485ab873114dd80bf3e2ab50c", + "minecraft/sounds/entity/boat/paddle_land6.ogg": "25cd1504b3514c4ac2e1b5cb39065ad081587aed", + "minecraft/sounds/entity/boat/paddle_water1.ogg": "a8e8f828ff3d44fdec0ce34c12727a0e075310e3", + "minecraft/sounds/entity/boat/paddle_water2.ogg": "bb9658d1bc476ab148a13a9c13f465622797eeaf", + "minecraft/sounds/entity/boat/paddle_water3.ogg": "69dc81055187d0e31f8ee24cc35d37d4297d9a7e", + "minecraft/sounds/entity/boat/paddle_water4.ogg": "10c460699d18665b9e7eee123722dbba524efb56", + "minecraft/sounds/entity/boat/paddle_water5.ogg": "80a7880c1b190f4faeeca1d5a3b584108dfa480a", + "minecraft/sounds/entity/boat/paddle_water6.ogg": "cd4d1e4514138832c4e73728e73505e67dabd3fe", + "minecraft/sounds/entity/boat/paddle_water7.ogg": "20fee08df557431fb61a70413758c0788badac79", + "minecraft/sounds/entity/boat/paddle_water8.ogg": "742a002ecc284e8a474c4a36e71e3e89d04cdb8c", + "minecraft/sounds/entity/bobber/castfast.ogg": "101a748961ca243023a09cf65b686f397f3d11d9", + "minecraft/sounds/entity/bobber/retrieve1.ogg": "990232db6a8b7edfb8e7fd0e167b79c2eef9c37d", + "minecraft/sounds/entity/bobber/retrieve2.ogg": "d07f7fc78faef5c32fd7dd1dc908f7dc98240259", + "minecraft/sounds/entity/bobber/retrieve3.ogg": "629db7d90d2a8555adafa8fc057303eb92f7081b", + "minecraft/sounds/entity/cow/milk1.ogg": "1602a54a8a6542aabc8e61c93103c387309ecf18", + "minecraft/sounds/entity/cow/milk2.ogg": "0a970d2c73e3566f27f466ace7ca11aac92432d8", + "minecraft/sounds/entity/cow/milk3.ogg": "0f968681ee6786f33eeb7acd5ecc66274c0d8722", + "minecraft/sounds/entity/endereye/dead1.ogg": "75a6cf26c59fcbd34fcd4036b01ae4bb4b31d399", + "minecraft/sounds/entity/endereye/dead2.ogg": "1ee51af69babaa870152ca7d936f419deed7312a", + "minecraft/sounds/entity/endereye/endereye_launch1.ogg": "ff13ffdb77813d916bd2cc25c2f3ac3d872a6313", + "minecraft/sounds/entity/endereye/endereye_launch2.ogg": "1825ee6ee58c2b237b00c5274496bff9e08aeeba", + "minecraft/sounds/entity/fish/flop1.ogg": "6c0181e299523eb049795987bcd9261722f1c669", + "minecraft/sounds/entity/fish/flop2.ogg": "3932099acfba8a0deb270b414c6121b25d250a3c", + "minecraft/sounds/entity/fish/flop3.ogg": "09d7b8b447b3be33a021e055bbbc9345355c9f3f", + "minecraft/sounds/entity/fish/flop4.ogg": "be9d8ea24b23fcc0e192df2698146b3d02451c4b", + "minecraft/sounds/entity/fish/hurt1.ogg": "d6daf3b5976d491e69f19becea691611027656ed", + "minecraft/sounds/entity/fish/hurt2.ogg": "0595544638db96f0add571c3a6ef133d0e90f4db", + "minecraft/sounds/entity/fish/hurt3.ogg": "c020d240c75d0f7722c8a9389e9360adf0b141ac", + "minecraft/sounds/entity/fish/hurt4.ogg": "246b84dff55d2750e1656fe94964f127a0d14ec2", + "minecraft/sounds/entity/fish/swim1.ogg": "6b7328aceb145af99f686cb4139d7b508e2fa0bd", + "minecraft/sounds/entity/fish/swim2.ogg": "ea829c0aeca04d62a2cfad9f1f7f306a63b55027", + "minecraft/sounds/entity/fish/swim3.ogg": "1627e8a87dfc18acc7cd5492d55ded515fc59f9a", + "minecraft/sounds/entity/fish/swim4.ogg": "92edd8965abfbca38d960fee86f5aeeb8f62f592", + "minecraft/sounds/entity/fish/swim5.ogg": "c632fa24db616894c46b2011c2f214853924c4a1", + "minecraft/sounds/entity/fish/swim6.ogg": "fb7b6292644e6255751b21196663ce864cc764bd", + "minecraft/sounds/entity/fish/swim7.ogg": "027a4dd9a154b579f299743b00d185f4a5e9f7a0", + "minecraft/sounds/entity/glow_squid/ambient1.ogg": "d7eea753fd5427fa998cf16a7e2f23b609f49543", + "minecraft/sounds/entity/glow_squid/ambient2.ogg": "d5431403bfe1850cc294af2f35e737797a1da3fa", + "minecraft/sounds/entity/glow_squid/ambient3.ogg": "e013433d9eefa16770ca4490057809d06982bdb2", + "minecraft/sounds/entity/glow_squid/ambient4.ogg": "03b362c532f7ed076cd88ab64b19a3f73c90163f", + "minecraft/sounds/entity/glow_squid/ambient5.ogg": "14a6d604352f36301c4916a3c648e47d5ce90a3a", + "minecraft/sounds/entity/glow_squid/death1.ogg": "3280cc0e1315544c95499b2605b449b74f72f14f", + "minecraft/sounds/entity/glow_squid/death2.ogg": "e2150a8156779b2e95d160eea10ef9d90f1f411b", + "minecraft/sounds/entity/glow_squid/death3.ogg": "081806d394e4195a8cd7a86d6a75a538710ffc8a", + "minecraft/sounds/entity/glow_squid/hurt1.ogg": "cf086d2c2a01895cdcc06b4f9389266af3650eb0", + "minecraft/sounds/entity/glow_squid/hurt2.ogg": "1e8424eee2b7dace9f2c0c5aef27f35e0c6e810d", + "minecraft/sounds/entity/glow_squid/hurt3.ogg": "b538a0fcb3666d8c0cbf06ccd2db9138fa3484ad", + "minecraft/sounds/entity/glow_squid/hurt4.ogg": "b9ee1f3190faee2d3d3ae2b7deba3ead8905232a", + "minecraft/sounds/entity/glow_squid/squirt1.ogg": "b83f8cab85b9288e27ac3ed59dd5b0d06b224c95", + "minecraft/sounds/entity/glow_squid/squirt2.ogg": "c3fa8cadd6a35cc16a6218ac7fdd69848d017f6f", + "minecraft/sounds/entity/glow_squid/squirt3.ogg": "c53103daf9cb37f9d183ddc75e9015173f8161fe", + "minecraft/sounds/entity/guardian/ambient1.ogg": "efd770196ca6bff7497e30f78f770d3b3b547b4b", + "minecraft/sounds/entity/guardian/ambient2.ogg": "461cefd95b72446499462ceba8235e26bc8b5292", + "minecraft/sounds/entity/guardian/ambient3.ogg": "e4f886b180e038dfbdd5b1bd48a79d0bef46b4fa", + "minecraft/sounds/entity/guardian/ambient4.ogg": "8f3044f9d866d93b6d4f9543c14044a80f90d679", + "minecraft/sounds/entity/horse/eat1.ogg": "ee4ca5a73aa96e40055ca858f520821df9f71600", + "minecraft/sounds/entity/horse/eat2.ogg": "c6a29da21e121be99eab7dd666eefedec6130323", + "minecraft/sounds/entity/horse/eat3.ogg": "86684bab230ab69cafa1d7bbb16b66229ecdac20", + "minecraft/sounds/entity/horse/eat4.ogg": "c27fa8942cc778b64290147a45f711cb03082de7", + "minecraft/sounds/entity/horse/eat5.ogg": "b3296406a31dda15806ec8328cb662a70cd778c9", + "minecraft/sounds/entity/itemframe/add_item1.ogg": "99d745c29649c84492a072bc1c9002a51695cf81", + "minecraft/sounds/entity/itemframe/add_item2.ogg": "69a4a003e93004641e0ab5c2a743265d9c0ca77d", + "minecraft/sounds/entity/itemframe/add_item3.ogg": "95d8be2cd93f60079dace71b4393c949b48fb461", + "minecraft/sounds/entity/itemframe/add_item4.ogg": "0ae74c540e774f938ab085bb17207ccad1738c01", + "minecraft/sounds/entity/itemframe/break1.ogg": "55353cde7e6449249f33513f10dc43e7f6f9fe56", + "minecraft/sounds/entity/itemframe/break2.ogg": "4e50de01407050ed8e51722ef6f021c8e1f4ca5f", + "minecraft/sounds/entity/itemframe/break3.ogg": "56b0c91d5c0dbf2d9ada5cbb5404130e7e505bf9", + "minecraft/sounds/entity/itemframe/place1.ogg": "dc788a6b10cd82aea9fb56f4c67eccaf53656fe2", + "minecraft/sounds/entity/itemframe/place2.ogg": "bb56db9d9bee7e10519d8010ccd350983ee4be87", + "minecraft/sounds/entity/itemframe/place3.ogg": "e9b9d6122cc2aba27ba876e5d6fc9fbb44d45e1b", + "minecraft/sounds/entity/itemframe/place4.ogg": "dce04a1db885f8291e719977f560b96707df8147", + "minecraft/sounds/entity/itemframe/remove_item1.ogg": "00765b2e5a821e8b22c8b555fd32d887ec805aed", + "minecraft/sounds/entity/itemframe/remove_item2.ogg": "ff85720a0188679f7e861a96ae25f6230fd895e9", + "minecraft/sounds/entity/itemframe/remove_item3.ogg": "718445399fdbe1b89eaa779c3875dece106732e0", + "minecraft/sounds/entity/itemframe/remove_item4.ogg": "e39709df8a61157842ef81742242eee76f7f435b", + "minecraft/sounds/entity/itemframe/rotate_item1.ogg": "277e91e5e04b06ecd3ff231e8912873d2e1d5700", + "minecraft/sounds/entity/itemframe/rotate_item2.ogg": "c00c9f50501b1880e577822e6fe2cefa64904c8b", + "minecraft/sounds/entity/itemframe/rotate_item3.ogg": "202d7c719c841a48ed52cae567fdc6b35ec79ab8", + "minecraft/sounds/entity/itemframe/rotate_item4.ogg": "66a1ef29c6f8d833bbaaf6401b380cdc22ca4a01", + "minecraft/sounds/entity/leashknot/break1.ogg": "8e26f68ea998ee0f2c11aa0056a3b8081cd3de00", + "minecraft/sounds/entity/leashknot/break2.ogg": "d1175044e61b37e7194acb5348ba677cfc6636f1", + "minecraft/sounds/entity/leashknot/break3.ogg": "b3554ecb8fb40eafb383a2d2697b4825ec5d4011", + "minecraft/sounds/entity/leashknot/place1.ogg": "5a913c4565451734126b5955efe6b998fa8b27f9", + "minecraft/sounds/entity/leashknot/place2.ogg": "fe92c23b1a1aaaf4915b104528b3f1ed7b27a457", + "minecraft/sounds/entity/leashknot/place3.ogg": "3e477928d725e6f9cbe3240c425f9027d5372542", + "minecraft/sounds/entity/painting/break1.ogg": "b42538a11f5ec415ebbd996b6d8dec26d567718b", + "minecraft/sounds/entity/painting/break2.ogg": "b358e15873b87382205f737919d36ab262b5fd9c", + "minecraft/sounds/entity/painting/break3.ogg": "91547587db850771aba7fcd5eb830cf680f45ab2", + "minecraft/sounds/entity/painting/place1.ogg": "da5b5c99010a20667923ce0393d50fc2be5e250e", + "minecraft/sounds/entity/painting/place2.ogg": "b3772ead112bd894903522889cad0c748626a004", + "minecraft/sounds/entity/painting/place3.ogg": "025f732e23e817832bda44466091cfe896cb08ff", + "minecraft/sounds/entity/painting/place4.ogg": "5ae6add80b9fd5dc84ea5399c3a621e4f31928b4", + "minecraft/sounds/entity/player/attack/crit1.ogg": "caa8f5d2de3c3fa53eca358967e930a45cafca18", + "minecraft/sounds/entity/player/attack/crit2.ogg": "3a27444995a679ffa6b87daf3fde2a02451629ef", + "minecraft/sounds/entity/player/attack/crit3.ogg": "0366f0465a1b6a3f186b495b4578c7b1c8929943", + "minecraft/sounds/entity/player/attack/knockback1.ogg": "75d437919fe1cbd8b594762778abe50262adddf6", + "minecraft/sounds/entity/player/attack/knockback2.ogg": "9c20f972468b42ef0e91d36f163059b8cad93677", + "minecraft/sounds/entity/player/attack/knockback3.ogg": "3083ff465e1d177eebb73788a43a1855b9ec64ed", + "minecraft/sounds/entity/player/attack/knockback4.ogg": "93c50c20f4eb2d3f6116f8b354fb5d5090e78712", + "minecraft/sounds/entity/player/attack/strong1.ogg": "999bdf382687457820f934783e6ef38dc01c508b", + "minecraft/sounds/entity/player/attack/strong2.ogg": "f71fa38e886f8a6c60803422c286e347efb65676", + "minecraft/sounds/entity/player/attack/strong3.ogg": "cc9728d993ea4ea9e87b86cb7c36459ecd48207d", + "minecraft/sounds/entity/player/attack/strong4.ogg": "521749fe4b753428e2ddf3273a7639f95da8524f", + "minecraft/sounds/entity/player/attack/strong5.ogg": "bf544e65cfdec0512f9e89320d0453f94a5883e7", + "minecraft/sounds/entity/player/attack/strong6.ogg": "46baa8602f9e40edf48f5c0ac7a280474140033b", + "minecraft/sounds/entity/player/attack/sweep1.ogg": "89741b2005ca27c98454e0cc000afe33b5af86fb", + "minecraft/sounds/entity/player/attack/sweep2.ogg": "5350ba0ce6e2d5deeb53849704ce4702c0ee4a85", + "minecraft/sounds/entity/player/attack/sweep3.ogg": "8740a15ba2100a68975842c571d40edf970f5bef", + "minecraft/sounds/entity/player/attack/sweep4.ogg": "98dfc1ea33b18d387dfbed5cbdc919250538c42e", + "minecraft/sounds/entity/player/attack/sweep5.ogg": "bf3558e6fb0cacdf87d0d35f1a470acbe5842af4", + "minecraft/sounds/entity/player/attack/sweep6.ogg": "2b9277d2e4542d106bca65e63092c6fcaadf40ea", + "minecraft/sounds/entity/player/attack/sweep7.ogg": "dcbf16528e0835b5638c782cede362aa8743fccd", + "minecraft/sounds/entity/player/attack/weak1.ogg": "5bdac09a1d22de188f771f9d9e372440d9e40523", + "minecraft/sounds/entity/player/attack/weak2.ogg": "4e441f1e9f9035d97aba12de0bea604d71f47d69", + "minecraft/sounds/entity/player/attack/weak3.ogg": "af751e5757eb23cba6e7bec6ecab54339d801a18", + "minecraft/sounds/entity/player/attack/weak4.ogg": "0f30dad25ab6d5570ab52bdcc2c03e26cb7cf6cb", + "minecraft/sounds/entity/player/hurt/berrybush_hurt1.ogg": "f1986caf428a5af77d8ee727150285ec66e02084", + "minecraft/sounds/entity/player/hurt/berrybush_hurt2.ogg": "2bfceee0fd6e951984251c3683546350d8931bbe", + "minecraft/sounds/entity/player/hurt/drown1.ogg": "cc446b2f1d46b2f4f5c90dfc932dc3d1963a2136", + "minecraft/sounds/entity/player/hurt/drown2.ogg": "a3fea7b6f54b4e7a789f7ad5249586956c3412c4", + "minecraft/sounds/entity/player/hurt/drown3.ogg": "cd83862ecc762663e81f7c7e404b32cff4f53793", + "minecraft/sounds/entity/player/hurt/drown4.ogg": "8a87818be8e38de3e3b185356057e81f5e021ce0", + "minecraft/sounds/entity/player/hurt/fire_hurt1.ogg": "90256cbc94aa370ec98b61726693a57093112b14", + "minecraft/sounds/entity/player/hurt/fire_hurt2.ogg": "b487d1bff4d74ff09603ee6fc5134c6d7382b768", + "minecraft/sounds/entity/player/hurt/fire_hurt3.ogg": "7215144981a575cebaf1def177005af78969d644", + "minecraft/sounds/entity/player/hurt/freeze_hurt1.ogg": "56c678526d9d6d4a6383f0fb8efe701cf83949d2", + "minecraft/sounds/entity/player/hurt/freeze_hurt2.ogg": "81e3e20ca6bb0da2ebcf2f37cccf1f8adc75bada", + "minecraft/sounds/entity/player/hurt/freeze_hurt3.ogg": "1872caa90f666a5159e28413c408c4ccf5fffdd9", + "minecraft/sounds/entity/player/hurt/freeze_hurt4.ogg": "480767336e40e2dabae0ab20164af027cc37a1a7", + "minecraft/sounds/entity/player/hurt/freeze_hurt5.ogg": "ec5d867eedaf6d09eaae0b6661a63d708c641d2e", + "minecraft/sounds/entity/pufferfish/blow_out1.ogg": "f2c8022f3dcd8ea20a491fc348ffe3943d94d9ef", + "minecraft/sounds/entity/pufferfish/blow_out2.ogg": "50ec7ecc3244655688e27bf8169a94fd0c12e7ce", + "minecraft/sounds/entity/pufferfish/blow_up1.ogg": "07b8d2d4b2254e2f2025695a93eff81b8a244a7b", + "minecraft/sounds/entity/pufferfish/blow_up2.ogg": "66173e5d28add6337d8a3311a470a898bebc9b6d", + "minecraft/sounds/entity/pufferfish/death1.ogg": "e921725a3564630a95c443c99d463bb0877307f2", + "minecraft/sounds/entity/pufferfish/death2.ogg": "524b07366062a097582b35b1b51dac0cf01131cc", + "minecraft/sounds/entity/pufferfish/flop1.ogg": "8bdd9dc43166d8ac3a93a8a6907bd2e0c6e1dc53", + "minecraft/sounds/entity/pufferfish/flop2.ogg": "ee69ba4643850e25c135089671abb6f7f2b0605f", + "minecraft/sounds/entity/pufferfish/flop3.ogg": "42a6b8b7a9c20c1a73e64ae6bab694c3f124c891", + "minecraft/sounds/entity/pufferfish/flop4.ogg": "6b7dc17dd98147dee62028a26b10354ea72881a8", + "minecraft/sounds/entity/pufferfish/hurt1.ogg": "cbe0bcd4e918d83a5964daa4a6d1cb52875e61ff", + "minecraft/sounds/entity/pufferfish/hurt2.ogg": "3a036d07f4a38045ee6d825b2ab9a80d7393f81d", + "minecraft/sounds/entity/pufferfish/sting1.ogg": "8c77e39c3958afba611d8deb5e9fad14565754a7", + "minecraft/sounds/entity/pufferfish/sting2.ogg": "a36831c90b82b2c640d5d5aa5e68d95c2a33e66a", + "minecraft/sounds/entity/rabbit/attack1.ogg": "fa72bfddc68861a12cb74b6eab8540c97d3cf810", + "minecraft/sounds/entity/rabbit/attack2.ogg": "2684ec22cc77a8b34013155dccbaef5563fc2190", + "minecraft/sounds/entity/rabbit/attack3.ogg": "8669668f3aa42ca007e5ae6dd78e0c96d2c5fcd4", + "minecraft/sounds/entity/rabbit/attack4.ogg": "8ed4b0a281dcc54691427b10036e65cb407f922b", + "minecraft/sounds/entity/shulker/ambient1.ogg": "95dca0416258364d90649392592d470eb800b17c", + "minecraft/sounds/entity/shulker/ambient2.ogg": "f1a522b5bea10dbb48e49279c1358e71846d3a92", + "minecraft/sounds/entity/shulker/ambient3.ogg": "1829db3d900fde5a1f118286c7b437ebc48c06d3", + "minecraft/sounds/entity/shulker/ambient4.ogg": "b04022583d2d085a769e14ca7b7ea6566f326d58", + "minecraft/sounds/entity/shulker/ambient5.ogg": "0e533ac4f54c97288ac1f1d207ae185f1059f6ea", + "minecraft/sounds/entity/shulker/ambient6.ogg": "5fd4f3fd1c07f8c03452c27c8a188c2947a96f75", + "minecraft/sounds/entity/shulker/ambient7.ogg": "a12177b8cb7844ed33eac78576c4fb43cebad4b9", + "minecraft/sounds/entity/shulker/close1.ogg": "5561ce870837ae106a6ff0b6186d04f726aeafc6", + "minecraft/sounds/entity/shulker/close2.ogg": "5f98c736907655a48944c763657a38d472416d6e", + "minecraft/sounds/entity/shulker/close3.ogg": "d4d7803c440c4ae44ffb49803ab2b8aaf7a137ae", + "minecraft/sounds/entity/shulker/close4.ogg": "031e80a9c2aa7455df9c9092e2136cd94e5bd6b9", + "minecraft/sounds/entity/shulker/close5.ogg": "da1ba3ff3110d6ea777251c88ea77bcf35168c80", + "minecraft/sounds/entity/shulker/death1.ogg": "5a2a953165cac17c014e9da4c202f1efde19ec46", + "minecraft/sounds/entity/shulker/death2.ogg": "3d8274d3fe03f28abb559e08505202ca5261ae47", + "minecraft/sounds/entity/shulker/death3.ogg": "f8608dc8085c9c70ce8f40e039b950c10359ab8b", + "minecraft/sounds/entity/shulker/death4.ogg": "b7ddd5ef5c3c487e586827bc9a879261e397c726", + "minecraft/sounds/entity/shulker/hurt1.ogg": "05b10bf6d4554c28cb2fbd0ed85a505e92140e2e", + "minecraft/sounds/entity/shulker/hurt2.ogg": "12edc7d00dc3c2ee5d82f26875be77586c46a7ed", + "minecraft/sounds/entity/shulker/hurt3.ogg": "e4df499058ce4b7f52801a7b6966de47c948feee", + "minecraft/sounds/entity/shulker/hurt4.ogg": "80c1c8a3de011b5c08169f0c532c272ca586d355", + "minecraft/sounds/entity/shulker/hurt_closed1.ogg": "db24df80329e9c1ac4566a0ed20029d312002409", + "minecraft/sounds/entity/shulker/hurt_closed2.ogg": "5722548545b3405acfe280a74e88471517bc7bb1", + "minecraft/sounds/entity/shulker/hurt_closed3.ogg": "2d67535d719b7485f2a97b1f397051302d3ad1cd", + "minecraft/sounds/entity/shulker/hurt_closed4.ogg": "511fce760d0a64353a839f456f4225783be344bc", + "minecraft/sounds/entity/shulker/hurt_closed5.ogg": "8aaaa5fc3424da6ad9cd5fb3954c4fc798064dd0", + "minecraft/sounds/entity/shulker/open1.ogg": "39dd58da1447613afebbfbd099a551663ac442bc", + "minecraft/sounds/entity/shulker/open2.ogg": "466465961daca3ad95d498fe34aace460ed4c8a4", + "minecraft/sounds/entity/shulker/open3.ogg": "67ed08f926da4c66424152f639f5da65caac3ce4", + "minecraft/sounds/entity/shulker/open4.ogg": "98155943b8d35f365d0d2a03b0c5d36d303f5e7b", + "minecraft/sounds/entity/shulker/open5.ogg": "11abcda449b0ca4aca0244552413a2eac6c3f3bd", + "minecraft/sounds/entity/shulker/shoot1.ogg": "cc94a15dca4384c3c315ec98628648fb291f17d7", + "minecraft/sounds/entity/shulker/shoot2.ogg": "d17a3b165c758f5f7e63af5c7141aa60602930e2", + "minecraft/sounds/entity/shulker/shoot3.ogg": "79c2e2711a546a1867b46ef2b81d8d410107f18d", + "minecraft/sounds/entity/shulker/shoot4.ogg": "972034032fd6d1b684830976337f8e9db87c7337", + "minecraft/sounds/entity/shulker_bullet/hit1.ogg": "9340adb5c86230146f204c26a13c052626a8ad9e", + "minecraft/sounds/entity/shulker_bullet/hit2.ogg": "888dc3e9ae0fb74109b2e79020919a4ebfd7dd66", + "minecraft/sounds/entity/shulker_bullet/hit3.ogg": "17b7dff9e88b7b32613ce678a0c29020e4b5ce93", + "minecraft/sounds/entity/shulker_bullet/hit4.ogg": "6d4188e3c7b26a4dca657f9f047383deccf6ec73", + "minecraft/sounds/entity/snowman/death1.ogg": "2cd6168b26195743bcf0bed440ad45743ecbbb34", + "minecraft/sounds/entity/snowman/death2.ogg": "1ad98d0724af8b2e34319cd6da92f307586d7862", + "minecraft/sounds/entity/snowman/death3.ogg": "a5e571cb47ef1595626aba0c828ad816fe49a1e0", + "minecraft/sounds/entity/snowman/hurt1.ogg": "c6405b145de8a51fd46d41eec8fa6082e29ed18e", + "minecraft/sounds/entity/snowman/hurt2.ogg": "8724b09ee35adb9ace9e61d670e5f353d1bfe11a", + "minecraft/sounds/entity/snowman/hurt3.ogg": "5094896e7cad39b5e02171fcfb46e4fd1f39faa5", + "minecraft/sounds/entity/squid/ambient1.ogg": "92d2131b77dcd60662b1654a19e1adda5298b000", + "minecraft/sounds/entity/squid/ambient2.ogg": "d3bfe35a4fba6d758d3145a1ec79537b375951e5", + "minecraft/sounds/entity/squid/ambient3.ogg": "f838813765b828ba7cf7e5bd2b90f4feda336a5c", + "minecraft/sounds/entity/squid/ambient4.ogg": "27ae395229d009612356eb15f515136a0735c3a4", + "minecraft/sounds/entity/squid/ambient5.ogg": "06ad3d307a76c4580a4544fe3979dec91cdbb783", + "minecraft/sounds/entity/squid/death1.ogg": "f8bb5cd842efcf11fed61ab3f84829e52c86dbd0", + "minecraft/sounds/entity/squid/death2.ogg": "031a652f8312c40cb840d799697b46ac82caff43", + "minecraft/sounds/entity/squid/death3.ogg": "2b19c3348c5c8e76149a75daea2697d80b9ef9a8", + "minecraft/sounds/entity/squid/hurt1.ogg": "4eca0b42ae1d805adc3cc9111b05dcdd030c6cfd", + "minecraft/sounds/entity/squid/hurt2.ogg": "b67b209ba70e8f9870c423fc287ba006e31beefd", + "minecraft/sounds/entity/squid/hurt3.ogg": "167060f1bbc05af83e76cd87d806ca639a84c171", + "minecraft/sounds/entity/squid/hurt4.ogg": "9951f6d78107877d0fe342ab3bff2ffc3b3393a6", + "minecraft/sounds/entity/squid/squirt1.ogg": "033d81228f515aaa0db79aeb02815ae81c8ff350", + "minecraft/sounds/entity/squid/squirt2.ogg": "7beb78e86805a46f533619f64c93bcf0cf2eb669", + "minecraft/sounds/entity/squid/squirt3.ogg": "7825864b7d10705e97ce395853742a70de8f51e7", + "minecraft/sounds/entity/wind_charge/wind_burst1.ogg": "22b61f8192748c33e482b973edd993eed7c405da", + "minecraft/sounds/entity/wind_charge/wind_burst2.ogg": "839b5c67010398d2e655500b498e9931e9a30ce1", + "minecraft/sounds/entity/wind_charge/wind_burst3.ogg": "55ffa7726f8f2603fea7c0db2b27633a49b3fe20", + "minecraft/sounds/entity/witch/ambient1.ogg": "312745ed858214dfc2215346cd9a3012c90018b5", + "minecraft/sounds/entity/witch/ambient2.ogg": "46444368ff9406554c1110381c97fb0e378da08d", + "minecraft/sounds/entity/witch/ambient3.ogg": "a442af18ceda67f72569a6cae4189557d9ce1c32", + "minecraft/sounds/entity/witch/ambient4.ogg": "3ba11d50f64611ffcf47ebd2c36658db136c22b9", + "minecraft/sounds/entity/witch/ambient5.ogg": "487c27a5cd45da871d968c1525143a0c6666b5d6", + "minecraft/sounds/entity/witch/celebrate.ogg": "fe4b76487891b4bbc702d84cd2623b7b5df5b7da", + "minecraft/sounds/entity/witch/death1.ogg": "651b016a545d9abcd5593e80c95b9a757a02041d", + "minecraft/sounds/entity/witch/death2.ogg": "1cd7a5c2740f295ee14c60b1a16036440a4e4beb", + "minecraft/sounds/entity/witch/death3.ogg": "8808491b110a6e15d0599d5108978f46a7140099", + "minecraft/sounds/entity/witch/drink1.ogg": "b12eb3b7df1ad600424bb01975e363955deccf8e", + "minecraft/sounds/entity/witch/drink2.ogg": "98c5637be3a8318c6dd0dc1f0404f15ebc01fc1b", + "minecraft/sounds/entity/witch/drink3.ogg": "42d31886efa49e957123b2e1d2a0433e475eb449", + "minecraft/sounds/entity/witch/drink4.ogg": "778b0704d697e97d4c7ecf6cb3ef2802b73b6d1b", + "minecraft/sounds/entity/witch/hurt1.ogg": "e650acca8d23cc14b08b7c287c99e6f1490f9b6c", + "minecraft/sounds/entity/witch/hurt2.ogg": "c5c6ab39ac52459ec0738696b244baf231387d2c", + "minecraft/sounds/entity/witch/hurt3.ogg": "71d54c16492583678134b4d6e2c7f960f72df97a", + "minecraft/sounds/entity/witch/throw1.ogg": "a2ba5981d87d17865c72fb54463bfaa344888851", + "minecraft/sounds/entity/witch/throw2.ogg": "895d6705151e0df42c7f95e62935159da7324976", + "minecraft/sounds/entity/witch/throw3.ogg": "8188fca013d11018a5fa2ebfe1543e8595576831", + "minecraft/sounds/event/mob_effects/bad_omen.ogg": "f8484a5e5106e2b355abbc905fa11c45fdaa1e66", + "minecraft/sounds/event/mob_effects/raid_omen.ogg": "51eda81eaa45fd035a53d251183653eb38884de9", + "minecraft/sounds/event/mob_effects/trial_omen.ogg": "ad2de743a4e028d852f46757f5a662d16c203471", + "minecraft/sounds/event/raid/raidhorn_01.ogg": "e32932c73c601488f8dfaa290cfd8ee2457c764b", + "minecraft/sounds/event/raid/raidhorn_02.ogg": "6cbd8afd0860ebfc0339cffc7963a9678fe81a68", + "minecraft/sounds/event/raid/raidhorn_03.ogg": "9fef290f4b3a4e312b4c2611e370244b7337be44", + "minecraft/sounds/event/raid/raidhorn_04.ogg": "3beb96e88535529e6e24f557e927fffd57956a3a", + "minecraft/sounds/fire/fire.ogg": "132b4cd65581c2a3658af6a0d4eedc6a0c1e17ed", + "minecraft/sounds/fire/ignite.ogg": "f125c13e6b445091cd1efd409547ffb9452138f5", + "minecraft/sounds/fireworks/blast1.ogg": "71d9ad77da5febc1b2b7bd5916ca730c2b9ab6a8", + "minecraft/sounds/fireworks/blast_far1.ogg": "b391080c22475f5196be93af0d7475cdb78e7003", + "minecraft/sounds/fireworks/largeblast1.ogg": "62b284afd1c5805c6300c41e80c3f27e1994b2e3", + "minecraft/sounds/fireworks/largeblast_far1.ogg": "cb708ddb2081e3ee334ee73d39093dd8f2e35940", + "minecraft/sounds/fireworks/launch1.ogg": "9d1ba828a27b2a6b5be6b97e4d6b554db885cb08", + "minecraft/sounds/fireworks/twinkle1.ogg": "cfa1c4fcdb9c70534b54249266f877ad2fac7a9f", + "minecraft/sounds/fireworks/twinkle_far1.ogg": "81cc878e9bd9af120e4fa6f66da69a769cfb75d1", + "minecraft/sounds/item/armor/break_wolf.ogg": "cc03a029799cea8d138ba34f703921afeda017ab", + "minecraft/sounds/item/armor/crack_wolf1.ogg": "0a9c7929a7ac1d4ade36b5a27dcdffbc6ed0bd74", + "minecraft/sounds/item/armor/crack_wolf2.ogg": "28b18a97cc579a21c2435811757f234741a814c5", + "minecraft/sounds/item/armor/crack_wolf3.ogg": "498e22ffc5a433104da6fdef98ede32474ae24b4", + "minecraft/sounds/item/armor/crack_wolf4.ogg": "1b55010b83389107e7950b585c082101fefb3afe", + "minecraft/sounds/item/armor/damage_wolf1.ogg": "048d0a8b845eee8862e5d22d7df69a88b587dae7", + "minecraft/sounds/item/armor/damage_wolf2.ogg": "166c10afd3ce627a95fba126e751fe890afc3d4f", + "minecraft/sounds/item/armor/damage_wolf3.ogg": "ca626f7442f2f59d60c47abe567a1d50144f0aa4", + "minecraft/sounds/item/armor/damage_wolf4.ogg": "186d32bbd4777bdc95ebd5f379c22817083ecdec", + "minecraft/sounds/item/armor/equip_chain1.ogg": "16a50dd79cc72f718738607427b07a3bddbaab80", + "minecraft/sounds/item/armor/equip_chain2.ogg": "7de7d162c2a937e135f8c3ec948d2a3ae495a069", + "minecraft/sounds/item/armor/equip_chain3.ogg": "f9bec7e8b1980155e375c12e4656fcc4903f0bda", + "minecraft/sounds/item/armor/equip_chain4.ogg": "9234258d13f8cf39b01b8f25a7cc5bf1008e5103", + "minecraft/sounds/item/armor/equip_chain5.ogg": "951186e27f7e5a070f750f2c1a5d63a8fcb25ebf", + "minecraft/sounds/item/armor/equip_chain6.ogg": "2292d8ff33d68fd4892d28911a04582e30ef1e24", + "minecraft/sounds/item/armor/equip_diamond1.ogg": "5280bbe1c5d5ddabd622b4458c3aa31c4616a3da", + "minecraft/sounds/item/armor/equip_diamond2.ogg": "4598667fd060396fc26fa163baa3a2388db67088", + "minecraft/sounds/item/armor/equip_diamond3.ogg": "1a3e1070c746c70ecfb0c8a9f615a80d2ecd4581", + "minecraft/sounds/item/armor/equip_diamond4.ogg": "74c8d4ddfb43716d39f20d4e9db5f59997343a5a", + "minecraft/sounds/item/armor/equip_diamond5.ogg": "8ddeb231655f45d98e62f3281a1c50cd9035576b", + "minecraft/sounds/item/armor/equip_diamond6.ogg": "4e1465768a779370a37ee82ca170e47b3bd14edd", + "minecraft/sounds/item/armor/equip_generic1.ogg": "2571600f0f6a7e6ca98587bea590952e5a5c6670", + "minecraft/sounds/item/armor/equip_generic2.ogg": "b4b28147d0656f3fb171ebbc276165b32031ae99", + "minecraft/sounds/item/armor/equip_generic3.ogg": "1b8082ca84b25a3275154ad1aa7e58df923c9d46", + "minecraft/sounds/item/armor/equip_generic4.ogg": "3618580be0e536a804509d28141b684c272f6ae4", + "minecraft/sounds/item/armor/equip_generic5.ogg": "8511ad612a1499370e1078f1c3745ca2df124ccb", + "minecraft/sounds/item/armor/equip_generic6.ogg": "e6708a29725381e43e77c7f9344244b7444ff8b8", + "minecraft/sounds/item/armor/equip_gold1.ogg": "d549abd369ef84357e4d29873f70b0a2448c9c21", + "minecraft/sounds/item/armor/equip_gold2.ogg": "f96c84e93272817d89dc0350484e8cd40c17bd53", + "minecraft/sounds/item/armor/equip_gold3.ogg": "1eede2d3b33f29b1a7d1bb75c0da88f26f5e68b9", + "minecraft/sounds/item/armor/equip_gold4.ogg": "9f1e922e758c8cc7ce48305be7f1d9a834486c5d", + "minecraft/sounds/item/armor/equip_gold5.ogg": "d757702418266a5530799911184d72d42c45fe91", + "minecraft/sounds/item/armor/equip_gold6.ogg": "79c7d561ef22929fbfd0c1c05f9f4bb50b485660", + "minecraft/sounds/item/armor/equip_iron1.ogg": "c5feca44b10c0afe361f2bb6b5715d71aacc0422", + "minecraft/sounds/item/armor/equip_iron2.ogg": "c43f8116f0e0571b77d62041573f27e263fbacd8", + "minecraft/sounds/item/armor/equip_iron3.ogg": "7f5891d061e4df605c1f0fc317d8066399d5192e", + "minecraft/sounds/item/armor/equip_iron4.ogg": "a4d790e99aee7b2e903e28ad6058ef91fb62b7f2", + "minecraft/sounds/item/armor/equip_iron5.ogg": "64dac1b222bb4a269089949c4e4f03e57de5e618", + "minecraft/sounds/item/armor/equip_iron6.ogg": "8aeec53d877af725b710614572f276954c7d0f17", + "minecraft/sounds/item/armor/equip_leather1.ogg": "190fc3c07ce94bbb446911d1de5e71826e427162", + "minecraft/sounds/item/armor/equip_leather2.ogg": "5ed8873c9403762b7e267c0fe90e414379216519", + "minecraft/sounds/item/armor/equip_leather3.ogg": "2d63137e2ea2e90b1f24b98d72382f8ea26236dc", + "minecraft/sounds/item/armor/equip_leather4.ogg": "637f51dad0819a54a95b0bf80931b54ec6acdcbb", + "minecraft/sounds/item/armor/equip_leather5.ogg": "9501ca012db1c1484af6920b3e84fac716d5b197", + "minecraft/sounds/item/armor/equip_leather6.ogg": "f4f12db42aa3ae8138adbcaf7a2e2d236ab094b0", + "minecraft/sounds/item/armor/equip_netherite1.ogg": "a3ed04daf5a6a405fa3964b37ceda19b43a8c777", + "minecraft/sounds/item/armor/equip_netherite2.ogg": "0f26ee9bab891d6b9a12de80aca8ab86be8a4eba", + "minecraft/sounds/item/armor/equip_netherite3.ogg": "324ef0c8d043e6c4246efad337ed07d84b59c84e", + "minecraft/sounds/item/armor/equip_netherite4.ogg": "3ef1282ef1b9783f295770629b0deb9a018858a4", + "minecraft/sounds/item/armor/equip_wolf1.ogg": "7b3b3090c1652e73b99880388ccb00f9bb28d28d", + "minecraft/sounds/item/armor/equip_wolf2.ogg": "00cac24f0f0f86a8cf565fae4a172632020ac01b", + "minecraft/sounds/item/armor/repair_wolf1.ogg": "3c435daad14ecb014d2b10681bdc579fb0f6383a", + "minecraft/sounds/item/armor/repair_wolf2.ogg": "95cb05f2fe80e48c26c098922c67617ca31c7515", + "minecraft/sounds/item/armor/repair_wolf3.ogg": "3337aa5055fde65fc91ba5116fb83ca881b61b33", + "minecraft/sounds/item/armor/repair_wolf4.ogg": "ab154af601d656940408a300b8c283543b96b203", + "minecraft/sounds/item/armor/unequip_wolf1.ogg": "8515daefb7997178c39bf3ee44e418122098fb71", + "minecraft/sounds/item/armor/unequip_wolf2.ogg": "04ac3b928398bfa3762c6c2874cc66dcd8381472", + "minecraft/sounds/item/axe/scrape1.ogg": "6b4bd28b12261998837cccf2103de64a12a5220e", + "minecraft/sounds/item/axe/scrape2.ogg": "834dbbc645ef60386e48fe2a6733f31e8ded3ce8", + "minecraft/sounds/item/axe/scrape3.ogg": "d95586217ece6aeec83a03b7a4a2ba7af602a0b2", + "minecraft/sounds/item/axe/strip1.ogg": "c3f51078a2b014ef3dda8ce7ef4d3f41314a58dd", + "minecraft/sounds/item/axe/strip2.ogg": "707e3ce4bafbb7cc300e238fab40f3c0d1720187", + "minecraft/sounds/item/axe/strip3.ogg": "becfde3a25426367d26296620690dd0a312197d3", + "minecraft/sounds/item/axe/strip4.ogg": "3b26c455634254e4b8617b7c65b79d48c40dcc1d", + "minecraft/sounds/item/axe/wax_off1.ogg": "c1d3c3ae071526e455a980e1ed0d2a408a0e0235", + "minecraft/sounds/item/axe/wax_off2.ogg": "d700f02f29c166b746a60fdd35177207ee614ec8", + "minecraft/sounds/item/axe/wax_off3.ogg": "6cb547d2f95e1ccf54cc5e836f1a6d873bb66b33", + "minecraft/sounds/item/bonemeal/bonemeal1.ogg": "36bc5d9141cf26819f795772caaf69bbe213fc1e", + "minecraft/sounds/item/bonemeal/bonemeal2.ogg": "6dc95a1516b8e454d48cd789453110f4ae770809", + "minecraft/sounds/item/bonemeal/bonemeal3.ogg": "a99e7021b3ad14414532a2c988728094a1e29967", + "minecraft/sounds/item/bonemeal/bonemeal4.ogg": "8f569038378aab43810f2b1c2f4054da7b21c3b7", + "minecraft/sounds/item/bonemeal/bonemeal5.ogg": "2ea7872655ca486677b75f64775ef59357ac2d32", + "minecraft/sounds/item/book/close_put1.ogg": "d8530109173c289e3e880135b3651743fee623dd", + "minecraft/sounds/item/book/close_put2.ogg": "5aa31e94e64488e10a8e0cb985cb2b3ea5ac089e", + "minecraft/sounds/item/book/open_flip1.ogg": "f185272a7508eab9bd63ef024d1f921ed0aa4226", + "minecraft/sounds/item/book/open_flip2.ogg": "83db28fa10d28a63fb649729e8fdec2ecde0f430", + "minecraft/sounds/item/book/open_flip3.ogg": "dcd587498ffd5c2036b4486715bf6f59cc7eb312", + "minecraft/sounds/item/bottle/drink_honey1.ogg": "331c13e9fceca0aee79b9d06dea291dae32fcf8e", + "minecraft/sounds/item/bottle/drink_honey2.ogg": "d6c5192f3b05220ab7db75842ecfe07b2eaf63cb", + "minecraft/sounds/item/bottle/drink_honey3.ogg": "c34c0e19a013b68682f3380f342f6d7c1ebfdf39", + "minecraft/sounds/item/bottle/empty1.ogg": "6aebb6160f030291f9f72af11e215d01a5e4289f", + "minecraft/sounds/item/bottle/empty2.ogg": "f7699e48fb626bae244aeb9735c9e8e10830e8bd", + "minecraft/sounds/item/bottle/fill1.ogg": "da07a6d437bb99d76d9b31520b63883638497b72", + "minecraft/sounds/item/bottle/fill2.ogg": "5805befbac0824eb2ca27821bf7a47cf2b9ce1c2", + "minecraft/sounds/item/bottle/fill3.ogg": "47a19ce6642f535dc040be1fb812612b38af5d37", + "minecraft/sounds/item/bottle/fill4.ogg": "bcab7bec9fc226bdd88f07868f1d9ce1834198ff", + "minecraft/sounds/item/bottle/fill_dragonbreath1.ogg": "f13041d4e6aa259fd660b555563329d4be7d490f", + "minecraft/sounds/item/bottle/fill_dragonbreath2.ogg": "31718790d69993ec588f16daf43f48c2feb0ff59", + "minecraft/sounds/item/brush/brush_sand_complete1.ogg": "7b9ecc952c1c9f5c79585533ff35b32d77e79100", + "minecraft/sounds/item/brush/brush_sand_complete2.ogg": "390c1e8ea2a1fad82e0c179bcc08b734899307f7", + "minecraft/sounds/item/brush/brush_sand_complete3.ogg": "82d79ebe4115b1ec95cefb5355fff4e1517bdaba", + "minecraft/sounds/item/brush/brush_sand_complete4.ogg": "0426b1c47e484327c2debc1d01b5be6bc6cdde7f", + "minecraft/sounds/item/brush/brush_sand_complete5.ogg": "106505e987c08d164a3da51c2e37b9126cab9af9", + "minecraft/sounds/item/brush/brushing_generic1.ogg": "3035f8b719dfe54ce16d4bc2b9b93f9a968e7f2e", + "minecraft/sounds/item/brush/brushing_generic2.ogg": "b6c6761b701793ad12c4cad6034861c3e0b9f898", + "minecraft/sounds/item/brush/brushing_generic3.ogg": "28809bee5a55462486cf62b32f0c6f9871836d00", + "minecraft/sounds/item/brush/brushing_generic4.ogg": "376b4bf50eb6a2723c52196eeb8dc719584a06c8", + "minecraft/sounds/item/brush/brushing_gravel1.ogg": "ee2eaa8a52780fe3d3ca89860fe4ec408038face", + "minecraft/sounds/item/brush/brushing_gravel2.ogg": "41055e11b0eaa0a3d53408b63a505e77c85958b8", + "minecraft/sounds/item/brush/brushing_gravel3.ogg": "9263cdc07e710b3ab85d72c4d64799f3b23dd493", + "minecraft/sounds/item/brush/brushing_gravel4.ogg": "d13a0f970a059d6af9364f4e84588c109773bbb7", + "minecraft/sounds/item/brush/brushing_gravel_complete1.ogg": "1c9a58f2fbafdfabc1b4d5f5afa196537ce324eb", + "minecraft/sounds/item/brush/brushing_gravel_complete2.ogg": "fcfcdced92d1ea40b586165e0c043736308d7f67", + "minecraft/sounds/item/brush/brushing_gravel_complete3.ogg": "0ba4406cdbcd432a381267d14f49d8adee63da65", + "minecraft/sounds/item/brush/brushing_gravel_complete4.ogg": "4f8a3193ebee4e2e31393bec691011a57d477dc7", + "minecraft/sounds/item/brush/brushing_sand1.ogg": "33c4b5cea605c7cd9dd8bae7d8b41926ef97df16", + "minecraft/sounds/item/brush/brushing_sand2.ogg": "0f932860ef79ef34c9538b2baa117f7d592c59ce", + "minecraft/sounds/item/brush/brushing_sand3.ogg": "1afbe77856dbefe7a551cad0ad7125f5c9d40645", + "minecraft/sounds/item/brush/brushing_sand4.ogg": "de956afb80a70059b31a79ddb0775dff5d65ed07", + "minecraft/sounds/item/bucket/empty1.ogg": "f75e57175b69ab1e6c408ab3f32160c8416a8675", + "minecraft/sounds/item/bucket/empty2.ogg": "270c29f3c5cbc795c36bd3e41fb9c367ab91ae0f", + "minecraft/sounds/item/bucket/empty3.ogg": "ef7610b0effe7d9ae641938cc7cc317158a59b91", + "minecraft/sounds/item/bucket/empty_fish1.ogg": "02acc7700dc592bbdff3dcddab03f5c43d9f756e", + "minecraft/sounds/item/bucket/empty_fish2.ogg": "43c6b3ad8c721cc0cc671f07d44d43ec7479efeb", + "minecraft/sounds/item/bucket/empty_fish3.ogg": "cf27e6a0ce68e026e5da6970ad0b56279da2a555", + "minecraft/sounds/item/bucket/empty_lava1.ogg": "c78cf4fe10dcc6e3e47b01f7008ee8396b02d2bd", + "minecraft/sounds/item/bucket/empty_lava2.ogg": "b2fa3db0c8363b9c454f9a04f93eebb11409229e", + "minecraft/sounds/item/bucket/empty_lava3.ogg": "6376cabb22a0e3042b25cb7443a5a75bffe6e4a6", + "minecraft/sounds/item/bucket/empty_powder_snow1.ogg": "b1aefa52f4db2a7185a0a92f5d0f427015c5a95c", + "minecraft/sounds/item/bucket/empty_powder_snow2.ogg": "cd1d156edae157df11b57f84da2e6a570c7bbdf3", + "minecraft/sounds/item/bucket/fill1.ogg": "a8436a6aa1015791109dfce0ebc7d47399338c7f", + "minecraft/sounds/item/bucket/fill2.ogg": "21e1cc7289a188e7424f451b787257063f20a61e", + "minecraft/sounds/item/bucket/fill3.ogg": "7a34a4136adc49b5a656010daad587b73de65786", + "minecraft/sounds/item/bucket/fill_axolotl1.ogg": "b8417bcd4ff39f94b5672a29d48281ece77c7abe", + "minecraft/sounds/item/bucket/fill_axolotl2.ogg": "847a88d743631e657191915ca9a24a6cad4a8d4f", + "minecraft/sounds/item/bucket/fill_axolotl3.ogg": "01bb74e92fabcd2a63d15ecf221c7be801543667", + "minecraft/sounds/item/bucket/fill_fish1.ogg": "ec087e874bd5f61a406d52bb45f7bccdc79bfaae", + "minecraft/sounds/item/bucket/fill_fish2.ogg": "66d7c20045b77b5da035f981e6b5ff1f7961c6c7", + "minecraft/sounds/item/bucket/fill_fish3.ogg": "c8ad1ea1832413257901c65151f88c00e2a4cf4b", + "minecraft/sounds/item/bucket/fill_lava1.ogg": "46c8440dcc94a4874d2926708eced9f73a13be0f", + "minecraft/sounds/item/bucket/fill_lava2.ogg": "8c9c80d0e76124c462434740a97e925546e0de11", + "minecraft/sounds/item/bucket/fill_lava3.ogg": "fa66a080afaf3d8a87939789053b326e76e43323", + "minecraft/sounds/item/bucket/fill_powder_snow1.ogg": "581b3e143cfedd5eeb1625cb3e72f912e740aa6a", + "minecraft/sounds/item/bucket/fill_powder_snow2.ogg": "3999b5a61c24b2c667ed360451e1e6c8a2cf7b9f", + "minecraft/sounds/item/bundle/drop_contents1.ogg": "fb00d15fdc16cadb33091b3af851bfa10faa0e1c", + "minecraft/sounds/item/bundle/drop_contents2.ogg": "0b6a8010c62e24588a902e4224279c1ee25acb09", + "minecraft/sounds/item/bundle/drop_contents3.ogg": "27c7f7454d70a924977b0f239febbbbde87ac06a", + "minecraft/sounds/item/bundle/insert1.ogg": "c67d6555fcbd313040687c2d8df3036ad4c18275", + "minecraft/sounds/item/bundle/insert2.ogg": "8ac3455f9b5cc8b7e92bfa750ee40186389bbb55", + "minecraft/sounds/item/bundle/insert3.ogg": "526895e2cd6d5655326f39f8b045a2761c89094d", + "minecraft/sounds/item/bundle/insert_fail.ogg": "e27673c973f083b21bcbdee2bd0b18daed3e95f8", + "minecraft/sounds/item/bundle/remove_one1.ogg": "e66deffd7d46205db77a2d46ebea58f3818bf4da", + "minecraft/sounds/item/bundle/remove_one2.ogg": "9e86260492f98274ee2b3a1db4fb352a7a991606", + "minecraft/sounds/item/bundle/remove_one3.ogg": "a741083672035c9f7e67968b080b9a0f40b639a7", + "minecraft/sounds/item/crossbow/loading_end.ogg": "37c6276a287144b5a2855d1c7e697500459d6070", + "minecraft/sounds/item/crossbow/loading_middle1.ogg": "024adc119457d65ad4e77d447c59af2df2e9d56d", + "minecraft/sounds/item/crossbow/loading_middle2.ogg": "bccd7d6902c9f32c6051ee7383886dbaf88f8632", + "minecraft/sounds/item/crossbow/loading_middle3.ogg": "273f437147692f666f264dcc868dbb6ac9c69468", + "minecraft/sounds/item/crossbow/loading_middle4.ogg": "0ab6fd973e07708127ef918c69ab224add2cbd35", + "minecraft/sounds/item/crossbow/loading_start.ogg": "7ac730a63061814535b75dece8711fc97e072654", + "minecraft/sounds/item/crossbow/quick_charge/quick1_1.ogg": "cf9bb5a571e80e643c2eb07928058ffde799fc38", + "minecraft/sounds/item/crossbow/quick_charge/quick1_2.ogg": "c720d92eeacadfda441bbb4c1dc1b28b575e23f0", + "minecraft/sounds/item/crossbow/quick_charge/quick1_3.ogg": "b30260a71e81bc8b912ded848a516d3aa93a5d6d", + "minecraft/sounds/item/crossbow/quick_charge/quick2_1.ogg": "148064b50dcf31e9a72dee35a332b95db95c693d", + "minecraft/sounds/item/crossbow/quick_charge/quick2_2.ogg": "b272eb3804cccb3cc691c228877717d9c6ded059", + "minecraft/sounds/item/crossbow/quick_charge/quick2_3.ogg": "45febb0f2e4c7d7252aecd2b144f6b8015abad1a", + "minecraft/sounds/item/crossbow/quick_charge/quick3_1.ogg": "0753fdb23227445dce935e2ec9a88ee4a0be8ae7", + "minecraft/sounds/item/crossbow/quick_charge/quick3_2.ogg": "3bb88b8940d6dd7ea27496dacb41c7379bc9e1bb", + "minecraft/sounds/item/crossbow/quick_charge/quick3_3.ogg": "73d7d9e0c010e376b0abaf4a0a64cfa073d6a24c", + "minecraft/sounds/item/crossbow/shoot1.ogg": "c756a5998391027b765f39e0045ef41322d8bce7", + "minecraft/sounds/item/crossbow/shoot2.ogg": "4ecc38b27694d9ad73b20dedd154e5efe6b23b8e", + "minecraft/sounds/item/crossbow/shoot3.ogg": "e3afffc6ce280c71da16ece37339826d9dcdaa1c", + "minecraft/sounds/item/dye/dye.ogg": "d17c3ae92560cb8fb21ac26511c592bbec3d9696", + "minecraft/sounds/item/elytra/elytra_loop.ogg": "75c3df1293a7a559a780b47d2f9e630e7b0a46ff", + "minecraft/sounds/item/goat_horn/call0.ogg": "ce8a2675cc2c9ac986851d2c5139d5c9ad3eeee1", + "minecraft/sounds/item/goat_horn/call1.ogg": "b7835e5b2816a6ea6550a98146afcc05a120d00b", + "minecraft/sounds/item/goat_horn/call2.ogg": "94c5df5cba50f5bb456702130bd286d1273f9692", + "minecraft/sounds/item/goat_horn/call3.ogg": "16c3be71d3e789ee539cd70819e526343ace5e84", + "minecraft/sounds/item/goat_horn/call4.ogg": "49ca72487f0f5138b476c8a3a0a3f9b6897c00f6", + "minecraft/sounds/item/goat_horn/call5.ogg": "5be8ac36d235793819eb009a90ca55c05a1ddc46", + "minecraft/sounds/item/goat_horn/call6.ogg": "48b33e04ea624e00bf12df82a74c138eddc1c671", + "minecraft/sounds/item/goat_horn/call7.ogg": "eb0bec3a8b45c259476e76865dda01fe55074b85", + "minecraft/sounds/item/hoe/till1.ogg": "8c45f63f3b50b8445dee67dba0cccabe66e983be", + "minecraft/sounds/item/hoe/till2.ogg": "0e8a8879477f2a286a0f5ca217a8e95700f239f1", + "minecraft/sounds/item/hoe/till3.ogg": "fad8acc222de5de75fab16d2fa1698d3161a893e", + "minecraft/sounds/item/hoe/till4.ogg": "0e9a4a2859f4ea0548460398f6a7e7cdd595ce08", + "minecraft/sounds/item/honeycomb/wax_on1.ogg": "5e7f45451e2d0bcc22173a977e395454654b5ca5", + "minecraft/sounds/item/honeycomb/wax_on2.ogg": "8260c62cccc2b437bf3dab9f2aae999d857b3335", + "minecraft/sounds/item/honeycomb/wax_on3.ogg": "83e1905e00f9a0516548844c6b0383959c1d422d", + "minecraft/sounds/item/ink_sac/ink_sac1.ogg": "246e37485c726cc50b5af4c9cc4f2d55ff2406bb", + "minecraft/sounds/item/ink_sac/ink_sac2.ogg": "95646e6c1db2fce4a2ea3fb498d02e8e2b4389cb", + "minecraft/sounds/item/ink_sac/ink_sac3.ogg": "67fba17716dbffbea9ec9f6f127a272433637fa2", + "minecraft/sounds/item/mace/smash_air1.ogg": "dcdef344e1dff43fd798e3faa41e3ac5e36410f2", + "minecraft/sounds/item/mace/smash_air2.ogg": "15f8ff8cda809e33413e5aa428840f37caf15b3c", + "minecraft/sounds/item/mace/smash_air3.ogg": "7114c65027e2ef0d8f42a406fa226e513a76ab72", + "minecraft/sounds/item/mace/smash_ground1.ogg": "8f5008b42cf998a0bf391a9772fab8aa69049cac", + "minecraft/sounds/item/mace/smash_ground2.ogg": "9f8089db25a221807d6650835ea6af22659ba4d1", + "minecraft/sounds/item/mace/smash_ground3.ogg": "f0212098e16342cc0270c6b64eaffd7a6edc5c4c", + "minecraft/sounds/item/mace/smash_ground4.ogg": "e747ec6761e14fa3fbb6e9e6c1dacb0891ef52f9", + "minecraft/sounds/item/mace/smash_ground_heavy.ogg": "c43e28df256051df61e03b9d3ef5908a6c933e88", + "minecraft/sounds/item/ominous_bottle/dispose.ogg": "6c85c21a335a1387207a3681de07240cdcdee5fa", + "minecraft/sounds/item/plant/crop1.ogg": "2d01aa86f7a45e27cc61f6875c39f1f844aa7fd6", + "minecraft/sounds/item/plant/crop2.ogg": "107c9f66683a7c7d2fefc74dca1fb82117107831", + "minecraft/sounds/item/plant/crop3.ogg": "442f78be85189bb938e703b19aad7d4823914a7b", + "minecraft/sounds/item/plant/crop4.ogg": "0fba25df72d77f0434e0db24dce97aa7a98020ce", + "minecraft/sounds/item/plant/crop5.ogg": "0524d6385119aa8478e5b9610bbcb06db6266f24", + "minecraft/sounds/item/plant/crop6.ogg": "0e28e932a15ad310b652f070a7f0bc2edb9da141", + "minecraft/sounds/item/plant/netherwart1.ogg": "8136a8c6e0ea3eb99377689d2652d41013731958", + "minecraft/sounds/item/plant/netherwart2.ogg": "12fbc8ee4634f9f751d8d63d634ab441eac5e595", + "minecraft/sounds/item/plant/netherwart3.ogg": "3b318c399b11e0adc81653a8372fd5ddf4daa14a", + "minecraft/sounds/item/plant/netherwart4.ogg": "701f3e0a598b56cb35c691db5f0b17c2dc3d0368", + "minecraft/sounds/item/plant/netherwart5.ogg": "83598a7d1de171a739adb97539d387707030e5f6", + "minecraft/sounds/item/plant/netherwart6.ogg": "bcdb1977793eda739217da89aa7fef1cc9846115", + "minecraft/sounds/item/shield/block1.ogg": "f3b8dcde479d572a5c6973d5b73314eecd785dd6", + "minecraft/sounds/item/shield/block2.ogg": "5d7950a8e81d01ecf611ec91f8d9c55dea8b542b", + "minecraft/sounds/item/shield/block3.ogg": "b3622c3b48ea9f018d4eaa37d7ac59958b1b9626", + "minecraft/sounds/item/shield/block4.ogg": "a8a9c58188055618b0478696edfdeeff0c3da51b", + "minecraft/sounds/item/shield/block5.ogg": "1427db69fd890239451ba01a09774f3083e6980b", + "minecraft/sounds/item/shovel/flatten1.ogg": "1a6a34eba2c5041ddf9e8062367faf42025c72e3", + "minecraft/sounds/item/shovel/flatten2.ogg": "399ba913566d400fd1abbe0c2f2f3f7e9b470c2b", + "minecraft/sounds/item/shovel/flatten3.ogg": "5a5a34d32df0ff19a9754820ff486f0482d93dd9", + "minecraft/sounds/item/shovel/flatten4.ogg": "bf2d553ebf0778934013d2bc07d71c35bf86f851", + "minecraft/sounds/item/spyglass/stop.ogg": "e6ee4114f1db6bba8ae04d24fe8313b5a8095bcf", + "minecraft/sounds/item/spyglass/use.ogg": "433026dc9ff0946ef52622316550aef5fcf9fb46", + "minecraft/sounds/item/sweet_berries/pick_from_bush1.ogg": "6a9c1661d8915ca8528e2d8ee88c4cd6ff238307", + "minecraft/sounds/item/sweet_berries/pick_from_bush2.ogg": "25d61770bb505d80389d91fd2dfe47d0ca09a4f7", + "minecraft/sounds/item/totem/use_totem.ogg": "f3fa2f7ac95f0bd8419b9638b2e6b289265e4b18", + "minecraft/sounds/item/trident/ground_impact1.ogg": "b6d586ac6b9ba1660b8f5c49463ff5860fc26914", + "minecraft/sounds/item/trident/ground_impact2.ogg": "a1ef47e0497eb04404fd8c4625bb229c1295abfd", + "minecraft/sounds/item/trident/ground_impact3.ogg": "816e9600a743cdc43a539dab603445ae7f6a27b1", + "minecraft/sounds/item/trident/ground_impact4.ogg": "1956d4d05996b70d3dd3f8183a146705ae2d427f", + "minecraft/sounds/item/trident/pierce1.ogg": "8636f54842ab14cbec18f43907c7e765d718ae88", + "minecraft/sounds/item/trident/pierce2.ogg": "20ff9c365388f6d79ee733522dbe3aadbfd536f3", + "minecraft/sounds/item/trident/pierce3.ogg": "3a67e115eda155d00a0c71fdc4f454f040d14e82", + "minecraft/sounds/item/trident/return1.ogg": "d956f17b213d2f1cd188f2661660b8f21243dc4a", + "minecraft/sounds/item/trident/return2.ogg": "a33fc4451792179988c4a8b82a941719f224c45a", + "minecraft/sounds/item/trident/return3.ogg": "d772889423e6824e729c8454825b6f3db09782c9", + "minecraft/sounds/item/trident/riptide1.ogg": "37320ce148b868929eed407e4ea5cf41613f8eaf", + "minecraft/sounds/item/trident/riptide2.ogg": "47e7e34f63028843ca8086510feb6ab9b1f15ce3", + "minecraft/sounds/item/trident/riptide3.ogg": "3ac386d9b02d557d06e9dfe701045b2b01b23fc3", + "minecraft/sounds/item/trident/throw1.ogg": "57bc0d3c05470580efb254ec51262eae17ff0c4c", + "minecraft/sounds/item/trident/throw2.ogg": "c8e64c102f026145de1da692d73ba8bb400ef025", + "minecraft/sounds/item/trident/thunder1.ogg": "9b50f8b4ace51d032fdb0dfe37b5edd9591cb41e", + "minecraft/sounds/item/trident/thunder2.ogg": "e93cec6a428a6459861daa2bb392094310186fdb", + "minecraft/sounds/liquid/heavy_splash.ogg": "c8c992df46642c5c27a8c713c6078a08da1693e2", + "minecraft/sounds/liquid/lava.ogg": "fac082b27d0637fec11f0f150c440a44b13afa8a", + "minecraft/sounds/liquid/lavapop.ogg": "9297374242fa6116dbc30ef6778d30d1e73b5f8b", + "minecraft/sounds/liquid/splash.ogg": "264ae650cce4cea0cd4cb1757624a9d51653499b", + "minecraft/sounds/liquid/splash2.ogg": "338e0b08a21e73dd5e7888c9c7e67e9a1a119dc1", + "minecraft/sounds/liquid/swim1.ogg": "547abbf1fa7de9dee7f2d78c3a55c1d15a4614ab", + "minecraft/sounds/liquid/swim10.ogg": "3c83854d50456a6cc9a4dde52975e71960da1688", + "minecraft/sounds/liquid/swim11.ogg": "30a600a9e2cfef0400bbab062cbbd0be2755b5a0", + "minecraft/sounds/liquid/swim12.ogg": "f9500ef831484ce2c2e69bbb02fe9ec23af93d9b", + "minecraft/sounds/liquid/swim13.ogg": "ef6e9421377a64e4b25d8f60da356a60a39c16a4", + "minecraft/sounds/liquid/swim14.ogg": "fd8953047707f4ab8fef40ed4e55bf07b2217df9", + "minecraft/sounds/liquid/swim15.ogg": "80156c24f24360716ea24497c857fbba853ca5dd", + "minecraft/sounds/liquid/swim16.ogg": "c8c78d167a008f5320cb7112e00345adf6eb39eb", + "minecraft/sounds/liquid/swim17.ogg": "7d33a0653252f7f8b0ca57688c6eaf9e200ab37c", + "minecraft/sounds/liquid/swim18.ogg": "b511c74ca73f54d9e698f560fdf7762f9af92f16", + "minecraft/sounds/liquid/swim2.ogg": "b054ede6e4d3fc188301b15dc0053f01d36ee38e", + "minecraft/sounds/liquid/swim3.ogg": "42d71c0b4b894b091e6924068a7624788e03b92e", + "minecraft/sounds/liquid/swim4.ogg": "d53da5fdbf67c4bb4597ed0e212a252920692459", + "minecraft/sounds/liquid/swim5.ogg": "7d467b1a379b73ebf64453402b46a4430a42657a", + "minecraft/sounds/liquid/swim6.ogg": "11e7c4b42ab89941ee148bc84f10dfeee42c0925", + "minecraft/sounds/liquid/swim7.ogg": "fa138f9ab5a15dd9507b033c5948b1de357ed1f8", + "minecraft/sounds/liquid/swim8.ogg": "5fbcb419f46e58e1f5079abfa6099646a6f035e6", + "minecraft/sounds/liquid/swim9.ogg": "f03d18b2bce2a3c51e6e831747cd8b944f5771f6", + "minecraft/sounds/liquid/water.ogg": "e75c6077b1bfa4a791d62d9951d6e8891757ad1c", + "minecraft/sounds/minecart/base.ogg": "1838caa64fbc7b6ac410af7ce816352d7909ad68", + "minecraft/sounds/minecart/inside.ogg": "f11f49974aad534a80dff4996d492bc40d5f2064", + "minecraft/sounds/minecart/inside_underwater1.ogg": "8079d95b4510d24fe71798e40888e98b592f974d", + "minecraft/sounds/minecart/inside_underwater2.ogg": "1d53a9e71d80171126290be65917ce893cbfef0c", + "minecraft/sounds/minecart/inside_underwater3.ogg": "ee85480030c2946c7e16af11c02f4340753ef0ae", + "minecraft/sounds/mob/allay/death1.ogg": "5661b57b68464a0cd49e34349b2fffc4ae158182", + "minecraft/sounds/mob/allay/death2.ogg": "f985df2d8681c21b01e9bfd97f0b7202398944fa", + "minecraft/sounds/mob/allay/hurt1.ogg": "a58f05597ae455373587e39f5d04eb7035d37cad", + "minecraft/sounds/mob/allay/hurt2.ogg": "cbfd69a8915dbdd6ba2331775f1896e6667eaaec", + "minecraft/sounds/mob/allay/idle_with_item1.ogg": "12b5fed32bcf0492dbe0ab8fea19262a25c49526", + "minecraft/sounds/mob/allay/idle_with_item2.ogg": "7b418335da299dd716517026317d7e58117735ca", + "minecraft/sounds/mob/allay/idle_with_item3.ogg": "55736bf72866347107f6f06b8cbf87993fd311d8", + "minecraft/sounds/mob/allay/idle_with_item4.ogg": "0175c017335a7fbf4a23a357b4f201bee0383fe7", + "minecraft/sounds/mob/allay/idle_without_item1.ogg": "9410ea94169557cef4737e37245029b7febeedb5", + "minecraft/sounds/mob/allay/idle_without_item2.ogg": "dbd04b334c46b180a0113de9b6d955f89a983c59", + "minecraft/sounds/mob/allay/idle_without_item3.ogg": "dbed2ce953204287bfd089e99bba2ccaa64c3f36", + "minecraft/sounds/mob/allay/idle_without_item4.ogg": "509d57f807af65bcd3cff606524202be0a00f674", + "minecraft/sounds/mob/allay/item_given1.ogg": "b68a7ddc65e8113ce2522ce53bcf28dddb198a15", + "minecraft/sounds/mob/allay/item_given2.ogg": "fe80b22bc6159a72e19acc60e1d36b5db1c67d3c", + "minecraft/sounds/mob/allay/item_given3.ogg": "e6432134389e4c93f338133caef3d1af20bb62ae", + "minecraft/sounds/mob/allay/item_given4.ogg": "89edf6c17693361003a04db7f240bdc434fc48a8", + "minecraft/sounds/mob/allay/item_taken1.ogg": "1580dfa0697652565278d4accfbb4673705765aa", + "minecraft/sounds/mob/allay/item_taken2.ogg": "eddda2761b48c2663ed76c851a1b4cc2def90588", + "minecraft/sounds/mob/allay/item_taken3.ogg": "445882c95ff7a5691ea9ca58637eea7534858154", + "minecraft/sounds/mob/allay/item_taken4.ogg": "61d172e0025b72c0bc70e234f3aa82718303ec73", + "minecraft/sounds/mob/allay/item_thrown1.ogg": "4fb4b17f3aacd8cb53ce70c0c59a15767d97ec3a", + "minecraft/sounds/mob/armadillo/ambient1.ogg": "76a69ee1c9af542a384d675bee0d40ece9c6fa43", + "minecraft/sounds/mob/armadillo/ambient2.ogg": "8dcb966daf784226dd041dea755355cee2e8709e", + "minecraft/sounds/mob/armadillo/ambient3.ogg": "18a0146a81975f4b8e2aac86906a368c4524f15a", + "minecraft/sounds/mob/armadillo/ambient4.ogg": "d560ea12518d390d5354707ac8196475f3c95821", + "minecraft/sounds/mob/armadillo/ambient5.ogg": "1e18eb2f3ad5c379a53c6aeedc0ee3e9d6ee62c8", + "minecraft/sounds/mob/armadillo/ambient6.ogg": "68a399326c45452ca61a2d6587a18ad9d5ebe5a6", + "minecraft/sounds/mob/armadillo/ambient7.ogg": "bbf9c0a2d81f384c8276295646a54946e2491b54", + "minecraft/sounds/mob/armadillo/ambient8.ogg": "92f9a86c6387c1464236bbc4f9de5ebe60580965", + "minecraft/sounds/mob/armadillo/brush_armadillo1.ogg": "21c1d5fae82a32d76de31b0ea05ae7454bf07cb3", + "minecraft/sounds/mob/armadillo/brush_armadillo2.ogg": "dbfa086465ece0d8ce7d0a71af7555f1ba32cf26", + "minecraft/sounds/mob/armadillo/death1.ogg": "25b67879adb4eea054d75f9191f42e38a91b6043", + "minecraft/sounds/mob/armadillo/death2.ogg": "942f8aa6ef1ea1d4a7baa192d2d1c1abfabf0b90", + "minecraft/sounds/mob/armadillo/death3.ogg": "cf4041926ae66fe4fbf2ec5927f92ad3da938b2f", + "minecraft/sounds/mob/armadillo/death4.ogg": "9628106bdc110328920700c5af43d7319ef327d6", + "minecraft/sounds/mob/armadillo/eat1.ogg": "460066a486afec42aa1a5613e50296a394b7c0c4", + "minecraft/sounds/mob/armadillo/eat2.ogg": "76689cd5b6061f2814cd8c804ab981b861458071", + "minecraft/sounds/mob/armadillo/eat3.ogg": "3847348851687333acddacc9759f7396d2124ac0", + "minecraft/sounds/mob/armadillo/hurt1.ogg": "d6a89ef0e39b8fb3369741f94cfaa14defe511da", + "minecraft/sounds/mob/armadillo/hurt2.ogg": "c9722884dddb2b01d3d1a64ae1780677bb828f5e", + "minecraft/sounds/mob/armadillo/hurt3.ogg": "1f4f64a46ca95dd9df5fc0c5be8dbe3e9f3c2533", + "minecraft/sounds/mob/armadillo/hurt4.ogg": "f9758a99ea9ffe42a2473394ec9f4bbda6c41276", + "minecraft/sounds/mob/armadillo/hurt5.ogg": "8569e774f10480e83a430b5baf4609c561c5f7d4", + "minecraft/sounds/mob/armadillo/hurt_reduced1.ogg": "f7c36c515cc267c0d461dbe1f3c2d6be62d99e8c", + "minecraft/sounds/mob/armadillo/hurt_reduced2.ogg": "2ed065e293ef62c22cb4d41eddb8cf26d4044376", + "minecraft/sounds/mob/armadillo/hurt_reduced3.ogg": "d6e6212132761652a9452cbaf683d51b60ad2505", + "minecraft/sounds/mob/armadillo/hurt_reduced4.ogg": "806720e66e2ddceb497081f3ee709c61877a3dc7", + "minecraft/sounds/mob/armadillo/land1.ogg": "87d5e6747f08cc6c82aecba1fee3a1bbfb57a82e", + "minecraft/sounds/mob/armadillo/land2.ogg": "d083154a29f9d698b41390693cef34783a7f89d6", + "minecraft/sounds/mob/armadillo/land3.ogg": "095b229dfd83927251ec0ec6e79f8c3158f99a3b", + "minecraft/sounds/mob/armadillo/land4.ogg": "f09c1001fd7e9982e0e6e3fabf4e1a7ced9b2cce", + "minecraft/sounds/mob/armadillo/peek.ogg": "a01d5a32c55bcddeb5a2c215a8a7c97db00eb7fb", + "minecraft/sounds/mob/armadillo/roll1.ogg": "28a986ab93d20421b9250278650dee517f62db72", + "minecraft/sounds/mob/armadillo/roll2.ogg": "015b6e71f8ee84e02cd8cbe2746e27a48c80fd19", + "minecraft/sounds/mob/armadillo/roll3.ogg": "3ed807a2900832bdd1f68a4c2507a6b3e350bd5d", + "minecraft/sounds/mob/armadillo/roll4.ogg": "c20700ef00948b6509d11e4aeee9d4548bd3d11b", + "minecraft/sounds/mob/armadillo/scute_drop1.ogg": "41a397f9f400b11f378a94f1e56f5a78c8d66d1d", + "minecraft/sounds/mob/armadillo/scute_drop2.ogg": "f35d5bf4f37c7206f51c736918e72ee0f77efe3a", + "minecraft/sounds/mob/armadillo/step1.ogg": "197bf8c344e27787f647872c58158b02f8580245", + "minecraft/sounds/mob/armadillo/step2.ogg": "2ead0c18cb6a07570950a6fdc1648058a4f4265e", + "minecraft/sounds/mob/armadillo/step3.ogg": "9e987356cafebd98b41b7fd560f8fb934b2d99ce", + "minecraft/sounds/mob/armadillo/step4.ogg": "b4d1c623eec38d8b55adffe95d43dfb6e9e15872", + "minecraft/sounds/mob/armadillo/step5.ogg": "ad6cedf7f70cecbafe6e20639c166942454f4544", + "minecraft/sounds/mob/armadillo/unroll_finish1.ogg": "ab8b23fd8937af4efc851ce3172e28d08f7bef63", + "minecraft/sounds/mob/armadillo/unroll_finish2.ogg": "eda4a38365349ca847008ce669c9896f9ba9c998", + "minecraft/sounds/mob/armadillo/unroll_start.ogg": "b79e4086587daec752f015c8f89cc3bb8991a70b", + "minecraft/sounds/mob/axolotl/attack1.ogg": "7d3f1f2baa61d33875d71386c3b8ec85dc4ae9d6", + "minecraft/sounds/mob/axolotl/attack2.ogg": "60671488f7efff3ce37ddd7b0027198829935a15", + "minecraft/sounds/mob/axolotl/attack3.ogg": "e08768e4746c8fa948a4409a7eea286cba53bd06", + "minecraft/sounds/mob/axolotl/attack4.ogg": "de11555f812ec0376a98cf4b64100c189a2df8f3", + "minecraft/sounds/mob/axolotl/death1.ogg": "fe5294afdbfe6561a361ecb560b331c7447ac63c", + "minecraft/sounds/mob/axolotl/death2.ogg": "83cfcaec81aa3ef38f57a3db313b28beaeebfb79", + "minecraft/sounds/mob/axolotl/hurt1.ogg": "b1d2dae87eb291e2f48417e767387014037b81f4", + "minecraft/sounds/mob/axolotl/hurt2.ogg": "00f5d330fac7924b65b850e12c8436123c7b07e4", + "minecraft/sounds/mob/axolotl/hurt3.ogg": "9550d6928017b1ca6767efa45d7a6d75128d6dca", + "minecraft/sounds/mob/axolotl/hurt4.ogg": "2dab15d51297d5f32d65335a312b473cca578fa7", + "minecraft/sounds/mob/axolotl/idle1.ogg": "02fd7c2b089b399810df9d6fafe40e15a8d0d07b", + "minecraft/sounds/mob/axolotl/idle2.ogg": "1dc20f57b19d65cda41dbb5789fa49f3b77064f0", + "minecraft/sounds/mob/axolotl/idle3.ogg": "979808be0dc14a812557b46cf4b12fc890ab996e", + "minecraft/sounds/mob/axolotl/idle4.ogg": "dac600c95ae16a9a2199c6e47f1a77895886bfdd", + "minecraft/sounds/mob/axolotl/idle5.ogg": "1f975ac46b3917d05e6c64248c540944bafebd79", + "minecraft/sounds/mob/axolotl/idle_air1.ogg": "89c8bd590966d3590a488567f376be501aa9d3be", + "minecraft/sounds/mob/axolotl/idle_air2.ogg": "eefa3f8e293b2f05e43e2e1cac9e868b17bc19de", + "minecraft/sounds/mob/axolotl/idle_air3.ogg": "290e827930e4333e78d13c08b2a2e341da29f1b2", + "minecraft/sounds/mob/axolotl/idle_air4.ogg": "a11cb77dfcf81418a9b562642a212cd1a4189add", + "minecraft/sounds/mob/axolotl/idle_air5.ogg": "9ba866dae3ef8f00106d91a611753daf6147ea58", + "minecraft/sounds/mob/bat/death.ogg": "412bd95a470640470d72be3d107d6a6cf61c0a8d", + "minecraft/sounds/mob/bat/hurt1.ogg": "1f149c8e23220f9fa9c126a91b806444369bdf9c", + "minecraft/sounds/mob/bat/hurt2.ogg": "fa7c0f7aa58bb840ede0c7eef5428779d64ad67d", + "minecraft/sounds/mob/bat/hurt3.ogg": "459fca285ade6aced5f9d489fcacd1096f87402b", + "minecraft/sounds/mob/bat/hurt4.ogg": "44031ccae235f6b1c2b4af85c4e3050ec7d0b141", + "minecraft/sounds/mob/bat/idle1.ogg": "4d69060908edf479353f2b48e00fed9009d3b2a7", + "minecraft/sounds/mob/bat/idle2.ogg": "2e08911ec9116f3e21afe947fa6fec64d1d6fcb8", + "minecraft/sounds/mob/bat/idle3.ogg": "1c48ebfeef25389410fcc7d7ed6e3ab9fe183e0b", + "minecraft/sounds/mob/bat/idle4.ogg": "4bb5bce96a4fa6e248b253faf92bbc959f772e59", + "minecraft/sounds/mob/bat/loop.ogg": "7a9bef29a41d8a734e861952d5ce14076a80c1e1", + "minecraft/sounds/mob/bat/takeoff.ogg": "5f569f554286fe2cda904c330392f6cf781aa63f", + "minecraft/sounds/mob/bee/aggressive1.ogg": "589ae7da46a948514a677a3c7c4d23e1750b3ab6", + "minecraft/sounds/mob/bee/aggressive2.ogg": "224b92c6f7b57da1a34bc81a501171d4d0b92587", + "minecraft/sounds/mob/bee/aggressive3.ogg": "75ce7dd8513af76b486cd7421fc7036bebb56308", + "minecraft/sounds/mob/bee/death1.ogg": "e3ea94a5120e2149f231d587766c9cae60e300e6", + "minecraft/sounds/mob/bee/death2.ogg": "7e6f5590925bb2445ccaa8d0318ca89cea279585", + "minecraft/sounds/mob/bee/hurt1.ogg": "58b2a39f25d1198fbd7057768eb9c4a9f4c24210", + "minecraft/sounds/mob/bee/hurt2.ogg": "4ce121465f51e7e7bfb039be4f6ad673b112e277", + "minecraft/sounds/mob/bee/hurt3.ogg": "9c3af6d96295912d57474fe29e33c9f1ecf611b2", + "minecraft/sounds/mob/bee/loop1.ogg": "ed6e39704f157207ceec704fa12367b4fb5fd915", + "minecraft/sounds/mob/bee/loop2.ogg": "20b1958fea9069befbb20cb494761d2402fb0240", + "minecraft/sounds/mob/bee/loop3.ogg": "4bfefe2ba00af801702211fafc868aebac5d795b", + "minecraft/sounds/mob/bee/loop4.ogg": "355793d4197fdab0e194d9e862f2fcd13c7377a1", + "minecraft/sounds/mob/bee/loop5.ogg": "4536569ebac20ed5b5ad7d3f4cb10d7346fb80e8", + "minecraft/sounds/mob/bee/pollinate1.ogg": "0185a95af09199750da74d9ac8b61fd5f9e351ae", + "minecraft/sounds/mob/bee/pollinate2.ogg": "cac18dd78797e5396d38bf8856f4b615ee3dd94c", + "minecraft/sounds/mob/bee/pollinate3.ogg": "d5643d66f5c0b412f2213c7d6ac63d961244967a", + "minecraft/sounds/mob/bee/pollinate4.ogg": "20b3a807754f6daf5778057c94bcc898d97884b9", + "minecraft/sounds/mob/bee/sting.ogg": "175a15e5352078159c540207f6240e8751dadefd", + "minecraft/sounds/mob/blaze/breathe1.ogg": "f9e4ff760b11244522bce898a4a0ebab1dd4520e", + "minecraft/sounds/mob/blaze/breathe2.ogg": "a6b1c17e2247cb39045bb2ad20cb794260d9883e", + "minecraft/sounds/mob/blaze/breathe3.ogg": "9d7301192ed6c03b2a965d8bfc5d2f94e150bf69", + "minecraft/sounds/mob/blaze/breathe4.ogg": "277f717e1aa7fd71fc50c276add302a985b2a34b", + "minecraft/sounds/mob/blaze/death.ogg": "cd7bf7e231c8fbf316bbcbd77278ac021e428834", + "minecraft/sounds/mob/blaze/hit1.ogg": "6e958c47928b592951feacce8015e0b308e39934", + "minecraft/sounds/mob/blaze/hit2.ogg": "7b39a6fffd8da4772a541574ca89fe52825bb0e6", + "minecraft/sounds/mob/blaze/hit3.ogg": "eabb8fadff028f3c7c6833ca7718e933ce88773b", + "minecraft/sounds/mob/blaze/hit4.ogg": "15d82386ec6836665d83b047bbb1738233b0e916", + "minecraft/sounds/mob/bogged/ambient1.ogg": "d43522bbc17961e2c76834554595efe60ef7e16c", + "minecraft/sounds/mob/bogged/ambient2.ogg": "ebd33d8020bfd40d9bc38a17e5544184502f84cc", + "minecraft/sounds/mob/bogged/ambient3.ogg": "022c7a36e6086312bd6815603f6a0399341b4020", + "minecraft/sounds/mob/bogged/ambient4.ogg": "6277161e9b812fb8d9ae8cc0090dcf66595a0a9b", + "minecraft/sounds/mob/bogged/death.ogg": "eb3f71a2308f933eec6f2b7c04ac2dc3a59a0f99", + "minecraft/sounds/mob/bogged/hurt1.ogg": "a19a5a096ec8856616c25a286c6bb5cec949ae17", + "minecraft/sounds/mob/bogged/hurt2.ogg": "d1253ce9c86d56603fbbf45256b894370ff6ed58", + "minecraft/sounds/mob/bogged/hurt3.ogg": "c13d499b09561cf2e65e8038e987a678fe17ea23", + "minecraft/sounds/mob/bogged/hurt4.ogg": "2f792cc686394f284b8fd3a9c021fc945ad6cc09", + "minecraft/sounds/mob/bogged/step1.ogg": "99791a6827feba6dc95bb95815d80057be9ddfd3", + "minecraft/sounds/mob/bogged/step2.ogg": "e61a6f41cf448134c738bffea855e66ee49608a4", + "minecraft/sounds/mob/bogged/step3.ogg": "01e90fd7f1cf5238a16e79497a7a0e5056a1f706", + "minecraft/sounds/mob/bogged/step4.ogg": "31b8ddaa79944c66bf1245bd1802b50dccd59812", + "minecraft/sounds/mob/breeze/charge1.ogg": "c57dce9bbf07003810a36c0f790cb130bee8030e", + "minecraft/sounds/mob/breeze/charge2.ogg": "13b3f8c2125605191c427190a47ebb7467e12f5c", + "minecraft/sounds/mob/breeze/charge3.ogg": "ebcb1dde470b8c8022890809f85b9deb5c35e9b6", + "minecraft/sounds/mob/breeze/death1.ogg": "212b19b38d0e61a4308cba33546a1da8bf7a1e3d", + "minecraft/sounds/mob/breeze/death2.ogg": "0afdb46f21cbc3dc7c65980ed245ae6479ed3542", + "minecraft/sounds/mob/breeze/deflect1.ogg": "8d9238f873139d3c0f5eba3ce952553c7d5b195c", + "minecraft/sounds/mob/breeze/deflect2.ogg": "1059daca2eb9c39744a5b3829627bc43c8af8968", + "minecraft/sounds/mob/breeze/deflect3.ogg": "d94071f611865533ad8b71382e0e1972b54b17de", + "minecraft/sounds/mob/breeze/hurt1.ogg": "4e320073a5d3980a784cf2e3ed875b50a9764550", + "minecraft/sounds/mob/breeze/hurt2.ogg": "e0553315e49647f8cae2425f23edfafffea0609b", + "minecraft/sounds/mob/breeze/hurt3.ogg": "ba9e27200653712bc3396983774bc61d4fc88b3b", + "minecraft/sounds/mob/breeze/idle1.ogg": "3bff95daab248a565e9b241eaffaae13070b9a15", + "minecraft/sounds/mob/breeze/idle2.ogg": "ac048cb5950480e8697b0e4741d53ff62c2cb84c", + "minecraft/sounds/mob/breeze/idle3.ogg": "6ea9be6132a22310a0ae4dbe7fbe03a8edec4366", + "minecraft/sounds/mob/breeze/idle4.ogg": "61dbffae9d50f65ff842dc0f90debd9e31683ccf", + "minecraft/sounds/mob/breeze/idle_air1.ogg": "09a9647f47a22744139707a067b5876cf26df3cb", + "minecraft/sounds/mob/breeze/idle_air2.ogg": "b24d87d2696bcb80708dd122d6789a60bd68acba", + "minecraft/sounds/mob/breeze/idle_air3.ogg": "88d994eb34435986dfabf98dd64abda81c60b707", + "minecraft/sounds/mob/breeze/idle_air4.ogg": "b08f6e02b476a81fc428679c62c7039027199f25", + "minecraft/sounds/mob/breeze/inhale1.ogg": "4175672fe68bec354b210a053d398fd7b20bb8e4", + "minecraft/sounds/mob/breeze/inhale2.ogg": "4377468f69b405c8f0882ef7de291e8c88fd189b", + "minecraft/sounds/mob/breeze/jump1.ogg": "417fdcfaf5f07ccb50aaf7fce8a65118273427e8", + "minecraft/sounds/mob/breeze/jump2.ogg": "47bc6f4f6493e31d68852c9be089c743f93accee", + "minecraft/sounds/mob/breeze/land1.ogg": "e58faf1242f37d7bde94c932eec7e8227dba3ced", + "minecraft/sounds/mob/breeze/land2.ogg": "18cfdb1fa5b5bd873d3402dbc332173ca9bd0d45", + "minecraft/sounds/mob/breeze/shoot.ogg": "e0e6b98db313e09f51ccb63000911509facc7744", + "minecraft/sounds/mob/breeze/slide1.ogg": "ef580bc33235a7de6df3724dbefa8beb5f3efc78", + "minecraft/sounds/mob/breeze/slide2.ogg": "4268c73e5c421b2e2d0fbcf48631593463e5b422", + "minecraft/sounds/mob/breeze/slide3.ogg": "d5604b2eee31c92daed0bab23a225ba354adb843", + "minecraft/sounds/mob/breeze/slide4.ogg": "19c89e8cb66c03de661dce6d7f780badfdddad6e", + "minecraft/sounds/mob/breeze/whirl.ogg": "3cb4ec3901425f7dc7c61def23a25dc0d286123a", + "minecraft/sounds/mob/breeze/wind_burst1.ogg": "88fcac4f179539ebd3fb60d92db4cdbf16266ddd", + "minecraft/sounds/mob/breeze/wind_burst2.ogg": "f51bb9bbe6c1b2c4e0acc313908e9cd768b8c449", + "minecraft/sounds/mob/breeze/wind_burst3.ogg": "32b595ddc5004a2bff43d90ed029a2cf934f0ac0", + "minecraft/sounds/mob/camel/ambient1.ogg": "d6a6bd8e84743a49e090c8966a2009063ffbee68", + "minecraft/sounds/mob/camel/ambient2.ogg": "523e7498b573764916aa0d0d5fa163a0ef3b4caf", + "minecraft/sounds/mob/camel/ambient3.ogg": "3a442e7b5274ecd5481e9062418620fc8fd17e57", + "minecraft/sounds/mob/camel/ambient4.ogg": "75c3e1b56723461d889b37c0af0c40898806a9db", + "minecraft/sounds/mob/camel/ambient5.ogg": "d724db5fe922c701736cfca5d0d20cdc70e01c05", + "minecraft/sounds/mob/camel/ambient6.ogg": "5d8e7a47c637d50c167fc9c7d603ed58d9aaa23c", + "minecraft/sounds/mob/camel/ambient7.ogg": "00e30f283c3a012e0321265f62f1e916d06f3532", + "minecraft/sounds/mob/camel/ambient8.ogg": "6a08ddb3e3019ce34f75958a143bb3ccb15018db", + "minecraft/sounds/mob/camel/dash1.ogg": "818fd48666770b45ec19509d18fab62dbf2b859c", + "minecraft/sounds/mob/camel/dash2.ogg": "b55ef6a117639e3d8bee344183dfc6c65e8036c2", + "minecraft/sounds/mob/camel/dash3.ogg": "352a5126d3d32147a74ca9e5d1a9577dbcec75bc", + "minecraft/sounds/mob/camel/dash4.ogg": "f6d023a6271ccf429a72a0f1736a84f8ec2d6637", + "minecraft/sounds/mob/camel/dash5.ogg": "b0f1c0cfe2924b1e794508b92a5aa179d29ac1bc", + "minecraft/sounds/mob/camel/dash6.ogg": "df0a0502b7b79edb2f6c4baf58aff0bd18d4ee29", + "minecraft/sounds/mob/camel/dash_ready1.ogg": "823d8e488e40b684698576ab72bb80f8903a3a68", + "minecraft/sounds/mob/camel/death1.ogg": "5cfb0802f4ea18691b0df78c679ad054f97380f0", + "minecraft/sounds/mob/camel/death2.ogg": "762d9719aa4ee55cbf3fd9e58e4f7d512d89d950", + "minecraft/sounds/mob/camel/eat1.ogg": "2657b51a5664bab572ae31f24f2d7b99afd62414", + "minecraft/sounds/mob/camel/eat2.ogg": "7c841d6f811a2946770e94ad4732a8910a4bd4eb", + "minecraft/sounds/mob/camel/eat3.ogg": "9beae1fa9c0b9fb67863798151564a200facdf24", + "minecraft/sounds/mob/camel/eat4.ogg": "cc0bcc79d4e83eade33c68220145b0b20ef458ae", + "minecraft/sounds/mob/camel/eat5.ogg": "363176714ded11d18f9f0cbe8df4629442600764", + "minecraft/sounds/mob/camel/hurt1.ogg": "ee388df70e55bc7462b68ed49eda8532a6561498", + "minecraft/sounds/mob/camel/hurt2.ogg": "f9f57cf8b0743cd7b19aea4d30b1a5834e6dea40", + "minecraft/sounds/mob/camel/hurt3.ogg": "c263373729022241c21e32693bef04fd8f50d476", + "minecraft/sounds/mob/camel/hurt4.ogg": "9a83a8b7262544a0473802adc20a4250e2624602", + "minecraft/sounds/mob/camel/sit1.ogg": "387fecc2cc03108ddb6f03df0fbb45846388af77", + "minecraft/sounds/mob/camel/sit2.ogg": "86342127e36b679ed9846408cb99bcc1aa04fc4d", + "minecraft/sounds/mob/camel/sit3.ogg": "057385c44cf4b4a32e97ff1dfdba1a9a87875bc5", + "minecraft/sounds/mob/camel/sit4.ogg": "44886eed578f551391b69af7a651d78bafab34ee", + "minecraft/sounds/mob/camel/stand1.ogg": "03b56f10188fb173d2c5d767674d55b9f5ff9902", + "minecraft/sounds/mob/camel/stand2.ogg": "05e98ef311575355390b4b06f103553e24b2f027", + "minecraft/sounds/mob/camel/stand3.ogg": "8d8da2d91cf0ebf4400de8ac8a65a3bbbf0d11a7", + "minecraft/sounds/mob/camel/stand4.ogg": "6762f9d4601780c97734e713bd54568c9ba3c687", + "minecraft/sounds/mob/camel/stand5.ogg": "b29373839b9b8ee96afeede958312e7ea783f660", + "minecraft/sounds/mob/camel/step1.ogg": "d390309c25210f1f74ef17e97d80047befb640dd", + "minecraft/sounds/mob/camel/step2.ogg": "6c7d087048d8f37979d6f8a726c2f9a328491353", + "minecraft/sounds/mob/camel/step3.ogg": "91c18d957f612d003b89221603f3d93b165f4d23", + "minecraft/sounds/mob/camel/step4.ogg": "769e415507f445ce99c0d693a767d7c6767ba159", + "minecraft/sounds/mob/camel/step5.ogg": "5e47dff0a1a49de2005b037ba11022d0d137b831", + "minecraft/sounds/mob/camel/step6.ogg": "88005e510e6d652e888ce1098998123179b97a9d", + "minecraft/sounds/mob/camel/step_sand1.ogg": "204aebe731d1e8b230f4a2ef4f494e33bd8a835e", + "minecraft/sounds/mob/camel/step_sand2.ogg": "0d2a9808c3a76773784d77e0e30ee106cdeb2675", + "minecraft/sounds/mob/camel/step_sand3.ogg": "271e442119fea8aa36e4f5ad810b90ef97214c5d", + "minecraft/sounds/mob/camel/step_sand4.ogg": "dd713481356def734428b94d44d3df15f8a9fc71", + "minecraft/sounds/mob/camel/step_sand5.ogg": "5a7d4b019da7be1395bd024715aefb55a3d5743c", + "minecraft/sounds/mob/camel/step_sand6.ogg": "324b5fe052c41ecb8f9f99ceb02f0ae0f378801e", + "minecraft/sounds/mob/cat/beg1.ogg": "efba8a3a509b6d67b3882b5de37d8dfa05648210", + "minecraft/sounds/mob/cat/beg2.ogg": "c8036952a1becca954cec11225d785d279f01813", + "minecraft/sounds/mob/cat/beg3.ogg": "f58d52921ed996f12b51ea3423668da2dcf48daf", + "minecraft/sounds/mob/cat/eat1.ogg": "638cfa93effc79da0da5b5335a0aa39190ff6b47", + "minecraft/sounds/mob/cat/eat2.ogg": "e228ab1407ec3f8fda277d8cc4e58a75b11f564f", + "minecraft/sounds/mob/cat/hiss1.ogg": "3dc3bc30c986313bb320a4d1513b413afad48254", + "minecraft/sounds/mob/cat/hiss2.ogg": "844749c39f3519ef6123527240c5c05c40a1abd1", + "minecraft/sounds/mob/cat/hiss3.ogg": "51245a824bb389a71c48749288269c3a0d5ac320", + "minecraft/sounds/mob/cat/hitt1.ogg": "43900ed0dab4b45659688892d9b007749422555b", + "minecraft/sounds/mob/cat/hitt2.ogg": "baf2cefc76fb045e9e42b52e7000945dbdf36a09", + "minecraft/sounds/mob/cat/hitt3.ogg": "2ffe20140c099788da13857e58695526075e17ba", + "minecraft/sounds/mob/cat/meow1.ogg": "ece06913c286fbff4c82fb3209ac768ad277e870", + "minecraft/sounds/mob/cat/meow2.ogg": "97ad91936d0be05d3438d7e1f0ca61871cbfb5f5", + "minecraft/sounds/mob/cat/meow3.ogg": "c66fd6530bb91335a153f4816641e28a3bb1c316", + "minecraft/sounds/mob/cat/meow4.ogg": "d7eb1f30e029b5b1b36f0d60264257ccd793dc19", + "minecraft/sounds/mob/cat/ocelot/death1.ogg": "1895fed0ac3c70a47754824ff8bfb1f505fa1d1d", + "minecraft/sounds/mob/cat/ocelot/death2.ogg": "af40835f0081df5f78f07675ca07d8224efde93f", + "minecraft/sounds/mob/cat/ocelot/death3.ogg": "a90a8b4e705615b43cb446ea44239d3831a83ca7", + "minecraft/sounds/mob/cat/ocelot/idle1.ogg": "6a85025309bdff20ddd146ec932e7eebc8acd711", + "minecraft/sounds/mob/cat/ocelot/idle2.ogg": "8fc64dea15a395ccba89d91501c7767a6f816418", + "minecraft/sounds/mob/cat/ocelot/idle3.ogg": "1e81bb7439dc52568e691419beff6900f271578c", + "minecraft/sounds/mob/cat/ocelot/idle4.ogg": "888efd5ccb2366b7d37f6cb706ab5bec225a0a4a", + "minecraft/sounds/mob/cat/purr1.ogg": "bcd162867f2443cb8c7c6a3486ded73d97f089e9", + "minecraft/sounds/mob/cat/purr2.ogg": "a396414ad4f8b797cc8c4b8f2f512ed96377b859", + "minecraft/sounds/mob/cat/purr3.ogg": "faf7717be4970aa108ad24c4ce22257c09a06ee6", + "minecraft/sounds/mob/cat/purreow1.ogg": "4e9be4db8317c7e096ef4f5cfe016f866e36f40c", + "minecraft/sounds/mob/cat/purreow2.ogg": "3469e814a648321af9cfb3aa9985737fe53f5e43", + "minecraft/sounds/mob/cat/stray/idle1.ogg": "67ff272003f1f1bb9a648dee1e93b8fd8c98225b", + "minecraft/sounds/mob/cat/stray/idle2.ogg": "2e2c162880810d78b449371dbb971472c4df4fe0", + "minecraft/sounds/mob/cat/stray/idle3.ogg": "97c61ce93b5f8d14e921e88bf8288f5a304ed7f0", + "minecraft/sounds/mob/cat/stray/idle4.ogg": "8104076eab97d709782f2b52463f5ee0c3691ee3", + "minecraft/sounds/mob/chicken/hurt1.ogg": "4eff70fec48a26fe31c76b414cb732d47595e2c7", + "minecraft/sounds/mob/chicken/hurt2.ogg": "ebc5c57c45f850d9ba673493a8edff1e27317143", + "minecraft/sounds/mob/chicken/plop.ogg": "7a2066da814b01dede8e60f1b60915e0b8484055", + "minecraft/sounds/mob/chicken/say1.ogg": "833f9b908db2f877e678c377b9f62f9b726d7b0c", + "minecraft/sounds/mob/chicken/say2.ogg": "83c89769f6a4bf564df34990a6d4fea3fa90ae9d", + "minecraft/sounds/mob/chicken/say3.ogg": "f6077e9c2465b000a8ec60a9bf0fd610ec2e2822", + "minecraft/sounds/mob/chicken/step1.ogg": "e16352150262ab49686f6c0aeaffa7532d3157ea", + "minecraft/sounds/mob/chicken/step2.ogg": "b893fcb8cd5a120eb443a6fb6cdf9ca1ff9ac2c4", + "minecraft/sounds/mob/cow/hurt1.ogg": "43544ddbc393f3a6869e26d5cef76eea44cd49b3", + "minecraft/sounds/mob/cow/hurt2.ogg": "0276d2067c640e57b91046514cd682e54a5e4cc2", + "minecraft/sounds/mob/cow/hurt3.ogg": "12721227ecd0f64b2e8767c08a57f5ef05fede05", + "minecraft/sounds/mob/cow/say1.ogg": "50b928af4d33822d8cc5ca0d0161053e491b6c5a", + "minecraft/sounds/mob/cow/say2.ogg": "e0adeecdfc7a8e7616eaac7b792de21204cad910", + "minecraft/sounds/mob/cow/say3.ogg": "627e6ea6b076dbf8e467b9b921dc019042434d96", + "minecraft/sounds/mob/cow/say4.ogg": "86d7debb43f3016d525c649ff9f61a2869eec3cd", + "minecraft/sounds/mob/cow/step1.ogg": "2842bba36bc93963247f5311e576b6247e737705", + "minecraft/sounds/mob/cow/step2.ogg": "939399f7b2bf256ba744f19b4cc102c90ee282ee", + "minecraft/sounds/mob/cow/step3.ogg": "8ca0e2f511471f2fd9375915131499ea323c828c", + "minecraft/sounds/mob/cow/step4.ogg": "249e56179595072f8445d81ccdeb8067444fa594", + "minecraft/sounds/mob/creaking/creaking_activate.ogg": "d740ea697c1f09e1bdc68dccd43a2aee48759072", + "minecraft/sounds/mob/creaking/creaking_attack1.ogg": "6e6783637ca21eceb00659ed6ea5c6d71c03b22a", + "minecraft/sounds/mob/creaking/creaking_attack2.ogg": "919749bfacbb135b5703a11d8c624329820104b6", + "minecraft/sounds/mob/creaking/creaking_attack3.ogg": "171c005ff69321b333fd69d4fb9dfaab966ff70a", + "minecraft/sounds/mob/creaking/creaking_attack4.ogg": "c729001616db9a277987b9ffb176e4bc9dbfca5d", + "minecraft/sounds/mob/creaking/creaking_deactivate.ogg": "639157a1c66558da9f66045150f66885c2adabbe", + "minecraft/sounds/mob/creaking/creaking_death.ogg": "f8eb114e21403ebce17da21c34c5fb3d1c4d42f9", + "minecraft/sounds/mob/creaking/creaking_freeze1.ogg": "6be14445d7574aedf48232e4d028420738bc56c5", + "minecraft/sounds/mob/creaking/creaking_freeze2.ogg": "1d2b77fca163ae74eabbcee782dbb2e9f8e54d7c", + "minecraft/sounds/mob/creaking/creaking_freeze3.ogg": "ee61f8f3f2b268f4435c49722298d92a403ac253", + "minecraft/sounds/mob/creaking/creaking_freeze4.ogg": "f3ca6e1c943b3fa1520247f00d8283800f94fb04", + "minecraft/sounds/mob/creaking/creaking_idle1.ogg": "6b6a1f07a8fb3b97c6d6cc4d3810e33c2701c47a", + "minecraft/sounds/mob/creaking/creaking_idle2.ogg": "d91e759d9c17fa11c5f9a98542774c6af5735d52", + "minecraft/sounds/mob/creaking/creaking_idle3.ogg": "75aad92df36ba44928e934674069694ad03f42f9", + "minecraft/sounds/mob/creaking/creaking_idle4.ogg": "30cbb388cfac2e93e06628218f5ad334bfef60e9", + "minecraft/sounds/mob/creaking/creaking_idle5.ogg": "38b17e27ba3eb6b8e549c295040f21d965ed347c", + "minecraft/sounds/mob/creaking/creaking_idle6.ogg": "9822ae94c710bcd4130f78bb353eefecfd614c2f", + "minecraft/sounds/mob/creaking/creaking_spawn.ogg": "cd47b9f60b4fd86af8d4877540920ea4b557d829", + "minecraft/sounds/mob/creaking/creaking_step1.ogg": "46a4197001b67c84ff3752c96afce6e747936774", + "minecraft/sounds/mob/creaking/creaking_step2.ogg": "0d68cf80d3018c93de2f3048114dd7452d75b8da", + "minecraft/sounds/mob/creaking/creaking_step3.ogg": "3f6d5f2b9ea4f0091d971e05a2551a4386ecf299", + "minecraft/sounds/mob/creaking/creaking_step4.ogg": "6c3ac56c7444bfee116bb7cf52b01b90f3319608", + "minecraft/sounds/mob/creaking/creaking_step5.ogg": "5c5eaa8d9f0acd439140e81270789da9ecf6694d", + "minecraft/sounds/mob/creaking/creaking_sway1.ogg": "650766ab090fba82c32a43b5700923021cd5ceaa", + "minecraft/sounds/mob/creaking/creaking_sway2.ogg": "a7fed36ccd746da48fa81923e59c6cfb8e9d4404", + "minecraft/sounds/mob/creaking/creaking_sway3.ogg": "e5c209b55e5bbc33c8ed1eeea19cf2901380f1f7", + "minecraft/sounds/mob/creaking/creaking_sway4.ogg": "81e6856b28c34e1f0e2f93a0b191639da64365d4", + "minecraft/sounds/mob/creaking/creaking_twitch.ogg": "dc0c2df786c6a78d4f162f8fca0fbc3f67aed7db", + "minecraft/sounds/mob/creaking/creaking_unfreeze1.ogg": "e8591bd70a7a73bc824fdbb82adc198cb22ea6e1", + "minecraft/sounds/mob/creaking/creaking_unfreeze2.ogg": "3f9d592a660e95a22ccc7952dcecbc378fde271e", + "minecraft/sounds/mob/creaking/creaking_unfreeze3.ogg": "a1a1eed5307c991ad0b64e0cb6fce87f20f713c5", + "minecraft/sounds/mob/creaking/parrot_imitate_creaking.ogg": "0455845f8b0976b0ae74c9fe296fa9a6a2f92c6a", + "minecraft/sounds/mob/creeper/death.ogg": "bd090d4d049f06217d1436552525d96ea1fa53b0", + "minecraft/sounds/mob/creeper/say1.ogg": "6fc976d65fc742451db2049a2a38a1007b976bc1", + "minecraft/sounds/mob/creeper/say2.ogg": "79fdb366ce047a20297c73f85858ea7e29ec0898", + "minecraft/sounds/mob/creeper/say3.ogg": "8eaa122d6c96f2d5fef601926aa930cef0c5f81c", + "minecraft/sounds/mob/creeper/say4.ogg": "ecbf5ce78cc21479c4b91273fd030ed68639d3f8", + "minecraft/sounds/mob/dolphin/attack1.ogg": "b9e4c8f0f63c3a9a0771bbc4359234d97339d008", + "minecraft/sounds/mob/dolphin/attack2.ogg": "d02838d6c51c5512e5ccc223e8b6be0c007119c7", + "minecraft/sounds/mob/dolphin/attack3.ogg": "f62a73239f487b70244cf17f1f4bee534abb02eb", + "minecraft/sounds/mob/dolphin/blowhole1.ogg": "d3a6b1fd78a9bf7dfb16a0986b7c1c5dd02c2582", + "minecraft/sounds/mob/dolphin/blowhole2.ogg": "3a201ad8e740595873b23ab0d98636f0dc7d3637", + "minecraft/sounds/mob/dolphin/death1.ogg": "0d3e577976f9e59bafcd19004c81ee6518b45dd5", + "minecraft/sounds/mob/dolphin/death2.ogg": "cbe596331c96ad03c2cfeb6702de4cf1969e142d", + "minecraft/sounds/mob/dolphin/eat1.ogg": "64a64e066d510dfa1cfcb15ab4337f3679b4bb20", + "minecraft/sounds/mob/dolphin/eat2.ogg": "4ecf07e9b0feba4c6a3d6ecc12eef2b7e23f9924", + "minecraft/sounds/mob/dolphin/eat3.ogg": "2b671b1f044f5b77f0473d64b8e108a5724ee653", + "minecraft/sounds/mob/dolphin/hurt1.ogg": "109e0c05235854b59f3b2f23fd97184be43d9992", + "minecraft/sounds/mob/dolphin/hurt2.ogg": "b36d24996ad848b9c33513b59ebb164a57952a5f", + "minecraft/sounds/mob/dolphin/hurt3.ogg": "7a3534229d271f27229989b7f0c75a796500648a", + "minecraft/sounds/mob/dolphin/idle1.ogg": "b6422999a415318b44ae4ae14d78a784fde2c5fa", + "minecraft/sounds/mob/dolphin/idle2.ogg": "7e8e01f81e874e72730d92f94a62b159e9bfc6fc", + "minecraft/sounds/mob/dolphin/idle3.ogg": "31b547e0dae375f8fd07431de05a56bdc6880f4d", + "minecraft/sounds/mob/dolphin/idle4.ogg": "15ac5b26a14242099b1213c07361534d08a634b7", + "minecraft/sounds/mob/dolphin/idle5.ogg": "47652e4aebab8702f231c0e7d3584c4f45e8f923", + "minecraft/sounds/mob/dolphin/idle6.ogg": "bbcd0a021e237c25380a29feec39f3dd53f2ad92", + "minecraft/sounds/mob/dolphin/idle_water1.ogg": "e4e5f8d0b92e1334e4d5b7104961eaed21f92edb", + "minecraft/sounds/mob/dolphin/idle_water10.ogg": "f0e15006b2f0b2687859fe57d623fa2351dfbc11", + "minecraft/sounds/mob/dolphin/idle_water2.ogg": "cec6836f7640b9d29ffff134bc19504c4b57d87c", + "minecraft/sounds/mob/dolphin/idle_water3.ogg": "5666e34551a4d11e53c40777bc7df22bbeffd725", + "minecraft/sounds/mob/dolphin/idle_water4.ogg": "2cebf08712ba200267c03afbe4b09b183ae16bca", + "minecraft/sounds/mob/dolphin/idle_water5.ogg": "fd72a5f970252b07213768276904f6f77c8c1697", + "minecraft/sounds/mob/dolphin/idle_water6.ogg": "2b922bcec8ab14e5dfeba99bd444b2322528f098", + "minecraft/sounds/mob/dolphin/idle_water7.ogg": "5ee286112cff8297e06ac2ce7ab5f614490c668e", + "minecraft/sounds/mob/dolphin/idle_water8.ogg": "29539a3ccb453d08ca31bd45e993dc3e47a67f87", + "minecraft/sounds/mob/dolphin/idle_water9.ogg": "a80e43bb6795ac91852685ad6cecae10d08d1005", + "minecraft/sounds/mob/dolphin/jump1.ogg": "d928028965babf43ba8c046fb281673b8992b6e8", + "minecraft/sounds/mob/dolphin/jump2.ogg": "73bb5c480c4fa3b911c0efa249d6acd4bab86257", + "minecraft/sounds/mob/dolphin/jump3.ogg": "a25cc0deef44936ce6996c372d740f4840a00eeb", + "minecraft/sounds/mob/dolphin/play1.ogg": "fb6e21a81ba507e3b8dd486b3d47848e43479794", + "minecraft/sounds/mob/dolphin/play2.ogg": "7cada580a1c35232f8bee70622d24db572591ddf", + "minecraft/sounds/mob/dolphin/splash1.ogg": "ecf87d451311b9dd807fc7be2af6b8860ba00a8b", + "minecraft/sounds/mob/dolphin/splash2.ogg": "6078298fdc7a6e3f344b6e7278652ad2d6a612c8", + "minecraft/sounds/mob/dolphin/splash3.ogg": "5f93c70e7bfeeefe4cfe5be15af57210a5d25118", + "minecraft/sounds/mob/dolphin/swim1.ogg": "37e82d37c936fb9088ca4a64fc3216f0b43d73bf", + "minecraft/sounds/mob/dolphin/swim2.ogg": "7e51c92c96d6ad6e25d8ab9bc1f4def474c94e7a", + "minecraft/sounds/mob/dolphin/swim3.ogg": "baa663c69f4d55239063962c4129a1ef9bbb905e", + "minecraft/sounds/mob/dolphin/swim4.ogg": "f97d90b3fe08a7728d4ac23379dccac280ed694f", + "minecraft/sounds/mob/drowned/convert1.ogg": "04a415716140e9d508b438d0d8fcb6fd2f232df8", + "minecraft/sounds/mob/drowned/convert2.ogg": "c25d156970589270b585aae5bffb794c9017c864", + "minecraft/sounds/mob/drowned/convert3.ogg": "434e9e09c26b4624b4db25783819f15f1a093365", + "minecraft/sounds/mob/drowned/death1.ogg": "9edb642d9b16f8e3dd495c7f65348b9ebdbee5f8", + "minecraft/sounds/mob/drowned/death2.ogg": "f06613bca60316fdc9ae333e39c1c9fd8a06e4de", + "minecraft/sounds/mob/drowned/hurt1.ogg": "56334e56a9ad22e1b8488343cd7b71dc7e77da41", + "minecraft/sounds/mob/drowned/hurt2.ogg": "d61d7652325cb778c62dc25bee94de856740cfba", + "minecraft/sounds/mob/drowned/hurt3.ogg": "3052c1715360c132eabe491a7df05d95835e2a5b", + "minecraft/sounds/mob/drowned/idle1.ogg": "e0b1ba03cb9b518daca91007846dc2b1b8a91899", + "minecraft/sounds/mob/drowned/idle2.ogg": "540e5c7b281cbca39b98ef82c26302c4ada59f49", + "minecraft/sounds/mob/drowned/idle3.ogg": "77ef81db0fa49e065c4f0cfc8b3093dc98b926a5", + "minecraft/sounds/mob/drowned/idle4.ogg": "ccf001fd23dab6378684cd638288f7f3e1d02160", + "minecraft/sounds/mob/drowned/idle5.ogg": "48e25a17ab04266467a54528dfb09d9caf6ec0f2", + "minecraft/sounds/mob/drowned/step1.ogg": "36a5b2759d4d42c4e6e0af5bb05496d2f73e9f67", + "minecraft/sounds/mob/drowned/step2.ogg": "7d35b855afd6df7f3b12db2da7a08d59b6c0d069", + "minecraft/sounds/mob/drowned/step3.ogg": "94029c8b507945a2ffbcb85b224f9ebdb63631eb", + "minecraft/sounds/mob/drowned/step4.ogg": "5863a08b676a22d88a0c8af9955c2e48d2deb2ad", + "minecraft/sounds/mob/drowned/step5.ogg": "8227d2c8a967ab7d1a0362332b52a8a107d82b7a", + "minecraft/sounds/mob/drowned/water/death1.ogg": "e2ee4ca2a71f25e26fc06bbc89616a40aed74384", + "minecraft/sounds/mob/drowned/water/death2.ogg": "7fc3927e4c0258b3f3f9ee1945d411cbeeb2bdf6", + "minecraft/sounds/mob/drowned/water/hurt1.ogg": "657d76d798d33b71bad04bb220b7b88c339327bf", + "minecraft/sounds/mob/drowned/water/hurt2.ogg": "466021d015a199472996b848d1beb1fe86db8bf2", + "minecraft/sounds/mob/drowned/water/hurt3.ogg": "93ac6c1f1ced2cc9eed75e6a7b94ede19fe09658", + "minecraft/sounds/mob/drowned/water/idle1.ogg": "9b2354fb5f979ec4be45d0a2a92acb77a29622d6", + "minecraft/sounds/mob/drowned/water/idle2.ogg": "478fdd04b01658ef5105b433362e8f52a7a3287b", + "minecraft/sounds/mob/drowned/water/idle3.ogg": "4ef2681e351d00e80403a8f56445577fb074e9bd", + "minecraft/sounds/mob/drowned/water/idle4.ogg": "81a7657d366a4e1bdc288744b10fe68ab8fb2dde", + "minecraft/sounds/mob/enderdragon/end.ogg": "76dd4983249264ab1f4779145118bb162b0d884a", + "minecraft/sounds/mob/enderdragon/growl1.ogg": "b5f9d965c227474231582b52f14f8167b97bf476", + "minecraft/sounds/mob/enderdragon/growl2.ogg": "b814e7cbcdd572ed7f926a947250d009f206c07b", + "minecraft/sounds/mob/enderdragon/growl3.ogg": "37e634797f199982107aa7d296a0f14d69135227", + "minecraft/sounds/mob/enderdragon/growl4.ogg": "c263ae99db287bd803591b0b6cd7865435e6c54a", + "minecraft/sounds/mob/enderdragon/hit1.ogg": "59cc1d9f09157d334c52db5b79da04f8d56c11bf", + "minecraft/sounds/mob/enderdragon/hit2.ogg": "1933ea18af228a0d39e26c554adb396acdaee05b", + "minecraft/sounds/mob/enderdragon/hit3.ogg": "4634e0b38a0062a9e52a6079773bf252fb421761", + "minecraft/sounds/mob/enderdragon/hit4.ogg": "d3df4915f7e23b900d472dba0468df0065ebc7ae", + "minecraft/sounds/mob/enderdragon/wings1.ogg": "b2a6162b783a62cffabc2bd58e79e383b5c70a8d", + "minecraft/sounds/mob/enderdragon/wings2.ogg": "2f25e83bbfac230b610691e174dc7440101ed279", + "minecraft/sounds/mob/enderdragon/wings3.ogg": "e4741020ec40e539b87e1339570e6453d3812e1e", + "minecraft/sounds/mob/enderdragon/wings4.ogg": "8bcda486ff6fdb2c2c4532da72e6d71536779853", + "minecraft/sounds/mob/enderdragon/wings5.ogg": "4518fdf76b94647009cc6e2463e12743c44c3118", + "minecraft/sounds/mob/enderdragon/wings6.ogg": "7bd37531acf96c978dc484e84dbdfc5bd11c05c1", + "minecraft/sounds/mob/endermen/death.ogg": "85a616fdd30fb3782da596048a034fbbd8df30ab", + "minecraft/sounds/mob/endermen/hit1.ogg": "a6edf57f2e84d56a45c1936f34f88da69184ebb4", + "minecraft/sounds/mob/endermen/hit2.ogg": "54ab48277ef3c82cf46e0b044180aced6fa08c9c", + "minecraft/sounds/mob/endermen/hit3.ogg": "6e9c3f42dabbab33be160964f49f145ac181c711", + "minecraft/sounds/mob/endermen/hit4.ogg": "f0af45e814823e47963d702a38ef90c7d515bdc9", + "minecraft/sounds/mob/endermen/idle1.ogg": "7c42f197c2b4dfd98ffb6a30b50ee2777db18bef", + "minecraft/sounds/mob/endermen/idle2.ogg": "d1faf091c1aa0be81a3ce71110a5c07c91c3141a", + "minecraft/sounds/mob/endermen/idle3.ogg": "14cce45307ffc5fe7f50e9f0d0ed3d32ab24beb0", + "minecraft/sounds/mob/endermen/idle4.ogg": "ed7ddfb460eb5246d6cbbdf3b6eb381bbd3fe26a", + "minecraft/sounds/mob/endermen/idle5.ogg": "ad2675a08adbe28d8a6247a36debfbf70983b0ca", + "minecraft/sounds/mob/endermen/portal.ogg": "15eb7f0940b43b5422524c8f20db44b72b310233", + "minecraft/sounds/mob/endermen/portal2.ogg": "e513adbd9b3ea95b7c2d5726c8ae7a5f497e0328", + "minecraft/sounds/mob/endermen/scream1.ogg": "712e0aaea2e31ba6872912dddc28640ad3a4207e", + "minecraft/sounds/mob/endermen/scream2.ogg": "86a0b94f4f328875c20b338c3cb8cda44a55d942", + "minecraft/sounds/mob/endermen/scream3.ogg": "71d7fdda5f0ff979adb0f6c7895d8b6be16ad624", + "minecraft/sounds/mob/endermen/scream4.ogg": "a66c9a44027dc9c57cef179b4896c5cddcb1da59", + "minecraft/sounds/mob/endermen/stare.ogg": "75b6933acfef6d24e2205b01f34d8907c5fb9dad", + "minecraft/sounds/mob/evocation_illager/cast1.ogg": "ea93dbbc9a8d5fc306b042fc70c4f3b35a94113b", + "minecraft/sounds/mob/evocation_illager/cast2.ogg": "466c7079811a6589a34f6efe17e5a212b2fcc18a", + "minecraft/sounds/mob/evocation_illager/celebrate.ogg": "da0c8b46bbdbafa6b228a1eec36b1debb86b9405", + "minecraft/sounds/mob/evocation_illager/death1.ogg": "1a6e8801cfbafdd14af3b345dbc9c0ec6f806511", + "minecraft/sounds/mob/evocation_illager/death2.ogg": "b75434f8a7d65c44caa508c486d64440bba01a1d", + "minecraft/sounds/mob/evocation_illager/fangs.ogg": "3be8d0b483bcd9d7234a55fa8b0ab81f0713438e", + "minecraft/sounds/mob/evocation_illager/hurt1.ogg": "89ef3aed3fec190c64ed86eeba5dc38aae9ca2ee", + "minecraft/sounds/mob/evocation_illager/hurt2.ogg": "8dfd90da4e259388924ff960e6abc8dec7bd0337", + "minecraft/sounds/mob/evocation_illager/idle1.ogg": "86d6f58ce7ae38547cbe6953043b66c53fed5d1c", + "minecraft/sounds/mob/evocation_illager/idle2.ogg": "e691b03bd2617dfdc13abbaa53acda1bae060b50", + "minecraft/sounds/mob/evocation_illager/idle3.ogg": "48585e48180eb593a5eaada25365c3fe123ac938", + "minecraft/sounds/mob/evocation_illager/idle4.ogg": "6b66557e4f1c10f571b830621286093c07d7892b", + "minecraft/sounds/mob/evocation_illager/prepare_attack1.ogg": "135ee4fcf11d359fdfed376277ed718767357c08", + "minecraft/sounds/mob/evocation_illager/prepare_attack2.ogg": "3ca11902af61eec12ef68e9cca8da23d3874d131", + "minecraft/sounds/mob/evocation_illager/prepare_summon.ogg": "e792be7a228007d8a782b0d6caf9da9ebf77a86b", + "minecraft/sounds/mob/evocation_illager/prepare_wololo.ogg": "c34e09b000a60a7250e483d9ccb55e4f084c9ba1", + "minecraft/sounds/mob/fox/aggro1.ogg": "69d4af7d21df68c5398d7728ed67b7b1198fc2d5", + "minecraft/sounds/mob/fox/aggro2.ogg": "8a7b847203edef386f62a33fd3124ea1f2df7398", + "minecraft/sounds/mob/fox/aggro3.ogg": "3c9f164e25e55a37175f1eaf60ed2675df0612b6", + "minecraft/sounds/mob/fox/aggro4.ogg": "767d49561422e3833d1da8232d82f45c582a52f4", + "minecraft/sounds/mob/fox/aggro5.ogg": "61262ee70465e468013fc106e148a95a4afd83d5", + "minecraft/sounds/mob/fox/aggro6.ogg": "9e4fc69aa5e5a7044047a409db552b1d9c51934a", + "minecraft/sounds/mob/fox/aggro7.ogg": "fbb55f4189b2c02105b54c30b54f356c85bbbbd1", + "minecraft/sounds/mob/fox/bite1.ogg": "91140fda4ef1bd92904110fe9bf0e47021729576", + "minecraft/sounds/mob/fox/bite2.ogg": "7cf7ffd53f702e2cf9990df19fd50f46158bd087", + "minecraft/sounds/mob/fox/bite3.ogg": "2459fcec85d1cb0b0bd1f777f48c86e7988d666a", + "minecraft/sounds/mob/fox/death1.ogg": "dc73f580e9edbf1b0e604da410f336311f2599b4", + "minecraft/sounds/mob/fox/death2.ogg": "86589a9fa6cc44c7761b8e648a0b83c0145f740b", + "minecraft/sounds/mob/fox/eat1.ogg": "257c010a7d684f568085b72964563620f9a7d345", + "minecraft/sounds/mob/fox/eat2.ogg": "dec3ae11e464151aa3b1c86c3f30b2409ccce423", + "minecraft/sounds/mob/fox/eat3.ogg": "b1919c44d2336004abd33f9e8812546ae2fa4de5", + "minecraft/sounds/mob/fox/hurt1.ogg": "1fbc058a646eae018f463781d2881617c5c0d209", + "minecraft/sounds/mob/fox/hurt2.ogg": "ba051eb9851481f52f1989bd2f42e3f9dc6582f1", + "minecraft/sounds/mob/fox/hurt3.ogg": "142f978e76ef856d86a979bc0ee8281d861ee924", + "minecraft/sounds/mob/fox/hurt4.ogg": "596514f2cc18e8439a6691fa173e6bb628f443d7", + "minecraft/sounds/mob/fox/idle1.ogg": "55789901e16de878aafe1590b7690d66e1572885", + "minecraft/sounds/mob/fox/idle2.ogg": "42b6a2716a0f3fc191ff7354c2d216ce122ab793", + "minecraft/sounds/mob/fox/idle3.ogg": "5ba6a4be8a288b2452509afe0b0c15ee166ec07d", + "minecraft/sounds/mob/fox/idle4.ogg": "4f0cd42f8a076d4c856c09bf5162b8f360c6f50b", + "minecraft/sounds/mob/fox/idle5.ogg": "9d6afa5a053c302ee0360a85d62749ad8b05a86a", + "minecraft/sounds/mob/fox/idle6.ogg": "f131c13c62e7737ef02e24610b4d6a0f1139f1c7", + "minecraft/sounds/mob/fox/screech1.ogg": "c950e310d3f8e35a489011ad997eaed762b5d524", + "minecraft/sounds/mob/fox/screech2.ogg": "f60c452247e3accbca0203eeebaa391953829cfb", + "minecraft/sounds/mob/fox/screech3.ogg": "ed8860df917447cf7c407a5ab9f2c21772463901", + "minecraft/sounds/mob/fox/screech4.ogg": "89c7ffa21ee7ffc3e0876eb22faea4df26dc6c5a", + "minecraft/sounds/mob/fox/sleep1.ogg": "e3cc500d7f48934f7f7198e5a88f529a72016dcd", + "minecraft/sounds/mob/fox/sleep2.ogg": "5dc64ea990d5980f7b435d65590b5fadc583c22c", + "minecraft/sounds/mob/fox/sleep3.ogg": "bb1c912446199a6b0e45e18c6d5ff586f6261610", + "minecraft/sounds/mob/fox/sleep4.ogg": "cdfc9ce095217d16a3783fa493b32b1d39cb3332", + "minecraft/sounds/mob/fox/sleep5.ogg": "d9766e5713edb90c8b20409701f630b287e0a23d", + "minecraft/sounds/mob/fox/sniff1.ogg": "afc9566a2e61b2065ce99bb1d5e7184b65930408", + "minecraft/sounds/mob/fox/sniff2.ogg": "cb32aeeebd928a290e60f59e51ea309edeefcfa0", + "minecraft/sounds/mob/fox/sniff3.ogg": "1215e91ae93d796612c0e7bc4b46d2d600a6a204", + "minecraft/sounds/mob/fox/sniff4.ogg": "4d9169f5ec84feb825c784696b1b45368fd77611", + "minecraft/sounds/mob/fox/spit1.ogg": "579f8760daaa880e702a559fa24df84e28abda7a", + "minecraft/sounds/mob/fox/spit2.ogg": "76ca9ac5520898d74430637e2b4462794bab19ce", + "minecraft/sounds/mob/fox/spit3.ogg": "5bebe57eca536834dfdd8183936afb75ccfe7362", + "minecraft/sounds/mob/frog/death1.ogg": "f93dee2f747d1f96dc4fb4f20b82aca07869a4bd", + "minecraft/sounds/mob/frog/death2.ogg": "1de952f58c1ebdb47caa5b18ab080c8ee9eb062a", + "minecraft/sounds/mob/frog/death3.ogg": "9e4a2605efb6c14236aa45fa850e0a37981d560b", + "minecraft/sounds/mob/frog/eat1.ogg": "48f0eb9208f2b84cf9812d1c686d076049ef3bde", + "minecraft/sounds/mob/frog/eat2.ogg": "37fb36af790bf61d8e8deb0b990c8cee3fc5b624", + "minecraft/sounds/mob/frog/eat3.ogg": "96696ce78f076f9d89ef4e6c02b70d7dba93eb93", + "minecraft/sounds/mob/frog/eat4.ogg": "cf17f40e6163925c82c53bf6859368695d536f74", + "minecraft/sounds/mob/frog/hurt1.ogg": "5c29424360d286b446e2df1c2ceabcc4565475ea", + "minecraft/sounds/mob/frog/hurt2.ogg": "a463398d76f6d6417f924afbc83faf9735f85b2d", + "minecraft/sounds/mob/frog/hurt3.ogg": "4b685fe9c23f03e3a24709a55f3244d2861b999a", + "minecraft/sounds/mob/frog/hurt4.ogg": "3fb6dc2b199729123776c72166f9863a3d6881ee", + "minecraft/sounds/mob/frog/hurt5.ogg": "12ff439575ffec95e59750e7b38ba83cbc361a81", + "minecraft/sounds/mob/frog/idle1.ogg": "031aed1262eac0ad9c3275eb53f75c38298c47c4", + "minecraft/sounds/mob/frog/idle2.ogg": "e4c061372b9dd0341c09539dc03525d7d8c19012", + "minecraft/sounds/mob/frog/idle3.ogg": "e596b441499af7d245029de65e587153b58bd54d", + "minecraft/sounds/mob/frog/idle4.ogg": "7eae1376b92e71afb53a776a9c36ccbddcc7e1c9", + "minecraft/sounds/mob/frog/idle5.ogg": "bd8311140a7dec4319db34a00ca8128d0bc7f344", + "minecraft/sounds/mob/frog/idle6.ogg": "9b7d92af06a25ff43cd024cbd2310fde3dc2ed8e", + "minecraft/sounds/mob/frog/idle7.ogg": "cb4429a1045f0e8611818f66ac6ab444dc87d049", + "minecraft/sounds/mob/frog/idle8.ogg": "6cae1d7535447f361985f6e318de58b7bee42018", + "minecraft/sounds/mob/frog/lay_spawn1.ogg": "ea2bab54458a10b94a0ad0508d260df96d6a2016", + "minecraft/sounds/mob/frog/lay_spawn2.ogg": "d9cb13721d9857626ab832b633c5d2d1d8e5e38a", + "minecraft/sounds/mob/frog/long_jump1.ogg": "f09c4c67e1403d34cee7a60217b76099de3416d5", + "minecraft/sounds/mob/frog/long_jump2.ogg": "72f1a30cc0f5811a121ef666fc0c221a2048f6fc", + "minecraft/sounds/mob/frog/long_jump3.ogg": "5093ce54bca246c93bb159c83ec8e3d17424ef9b", + "minecraft/sounds/mob/frog/long_jump4.ogg": "6e193d8037b734e7a7bb69aadf3ae98c90a13858", + "minecraft/sounds/mob/frog/step1.ogg": "50991b159a03d7fc14205505fb133115a8664deb", + "minecraft/sounds/mob/frog/step2.ogg": "6ef362393b703aa5538cd99bdce71c33cc42c4ba", + "minecraft/sounds/mob/frog/step3.ogg": "ae1059f3bbf5308f127d5388afccf03a8d2cafce", + "minecraft/sounds/mob/frog/step4.ogg": "56f0a473389b4051c181ed4b7e59097a44b6059e", + "minecraft/sounds/mob/frog/tongue1.ogg": "f1081a559202c73cef9686b64965cc5158b65948", + "minecraft/sounds/mob/frog/tongue2.ogg": "15e97ff3fda29dcb5cfb8a8becd1cc64199af1b8", + "minecraft/sounds/mob/frog/tongue3.ogg": "8d8d6c9677b4236bbc6756414783f1b2cfa792f0", + "minecraft/sounds/mob/frog/tongue4.ogg": "82a11ab06ea2449f523353407eed3c0a4ad814ec", + "minecraft/sounds/mob/ghast/affectionate_scream.ogg": "45d5ecb9b35e17e4e62690fdfcf6bb182a44ccc6", + "minecraft/sounds/mob/ghast/charge.ogg": "3066a05ff74bb537d38e2172c257f28f1b3f6e53", + "minecraft/sounds/mob/ghast/death.ogg": "3d7d2c5a95f0829dbec7f2fefbf16660e38ceec6", + "minecraft/sounds/mob/ghast/fireball4.ogg": "e2aae5ec9916c6c4ae328520f4d72a50afff5aed", + "minecraft/sounds/mob/ghast/moan1.ogg": "5271efaf10e123ce7d03a574ebb8a593c7e8c826", + "minecraft/sounds/mob/ghast/moan2.ogg": "0e208ff8b70b022978b4ea57cfa2ac6672680112", + "minecraft/sounds/mob/ghast/moan3.ogg": "5eeb380f700bf402638e09482ff55ae926bde71e", + "minecraft/sounds/mob/ghast/moan4.ogg": "8edd840599bbd1e35f7fa3857d8a9f7d43e697d6", + "minecraft/sounds/mob/ghast/moan5.ogg": "083557d2eb1a78315ca5f18c384ab3ee693e53ed", + "minecraft/sounds/mob/ghast/moan6.ogg": "161d5566c38f3cec70a776995bdf58a52852aa79", + "minecraft/sounds/mob/ghast/moan7.ogg": "aad0209b6d3f6ca32cf80aae78d11bffef3d974e", + "minecraft/sounds/mob/ghast/scream1.ogg": "b846fade34b2a51499e24134c5c0536bb8c4d49b", + "minecraft/sounds/mob/ghast/scream2.ogg": "8d8d8ed31959f603aae9d3d79356d208abeeecf7", + "minecraft/sounds/mob/ghast/scream3.ogg": "d7e153c51e1e5cd4838a7bd694e4b42edeab340f", + "minecraft/sounds/mob/ghast/scream4.ogg": "d955376c8e19a267b1449fc369b87b25dede4fcf", + "minecraft/sounds/mob/ghast/scream5.ogg": "6853ff1b496995fd4acf8b0bb60bb28b4f9dabac", + "minecraft/sounds/mob/goat/death1.ogg": "f06d0edd6f684505e9d08c2d29524bdde10ad5c6", + "minecraft/sounds/mob/goat/death2.ogg": "fcf124bd16154e0500ed8df76666ea3aef43b1f7", + "minecraft/sounds/mob/goat/death3.ogg": "10d0b220421dd843116a014f76168f7a182f7be2", + "minecraft/sounds/mob/goat/death4.ogg": "3f1655db225a7093a59d2274011c312b3d522e80", + "minecraft/sounds/mob/goat/death5.ogg": "81e15e31d36a37b041db04df16531346b20338a0", + "minecraft/sounds/mob/goat/eat1.ogg": "5e881ee2418a6311e99592bfdb745faa8987792e", + "minecraft/sounds/mob/goat/eat2.ogg": "b95f32ed10e41cb19986179bcb35fad4ee89e146", + "minecraft/sounds/mob/goat/eat3.ogg": "53d78c3a4afe30b5ec5a54e969647572bf72e9d2", + "minecraft/sounds/mob/goat/horn_break1.ogg": "f6a1529f02669d1bd89580c8da35b4af276230b3", + "minecraft/sounds/mob/goat/horn_break2.ogg": "4a2ef804bd313ca3ff2e10d205a9e19d50f174df", + "minecraft/sounds/mob/goat/horn_break3.ogg": "38ed6e21e2baa234c0a8901ab8a6fbe5eed00450", + "minecraft/sounds/mob/goat/horn_break4.ogg": "636f77f372f8b27da2b5804cee61c7091e2925de", + "minecraft/sounds/mob/goat/hurt1.ogg": "3d04e75b29e9a21df3122d60cef4424d5c2514c4", + "minecraft/sounds/mob/goat/hurt2.ogg": "303b49a590780c8f69bce33818f74bd807f77c84", + "minecraft/sounds/mob/goat/hurt3.ogg": "a62bc5a06775b97eee6a740d29b0dafa953cc2d9", + "minecraft/sounds/mob/goat/hurt4.ogg": "4f2b3cd4cbad0fe999faf32dd7334109b9836bfa", + "minecraft/sounds/mob/goat/idle1.ogg": "d23cb7187ed6af7b59978740cb20799305be6984", + "minecraft/sounds/mob/goat/idle2.ogg": "1ac66e5239f060e54a8b2e4357013f902d5a67ca", + "minecraft/sounds/mob/goat/idle3.ogg": "fa631962fecd531873b9d9c9639f1af56a222d39", + "minecraft/sounds/mob/goat/idle4.ogg": "8b855f61442b96b34447bbcecbe003ac99700f66", + "minecraft/sounds/mob/goat/idle5.ogg": "70806f4600f9912430cf85b69d36f5a6e71ecbea", + "minecraft/sounds/mob/goat/idle6.ogg": "de321cabe42c7bc9fc0a172f39eed42c2b9b9ae5", + "minecraft/sounds/mob/goat/idle7.ogg": "b9ea7673485aa2713eb365b97fed4a32460218da", + "minecraft/sounds/mob/goat/idle8.ogg": "99ccae1d18428ab4629afec56cda36d1ae125fbd", + "minecraft/sounds/mob/goat/impact1.ogg": "d90e6fdd5a89cc91603c57eace78b3b77521eaa9", + "minecraft/sounds/mob/goat/impact2.ogg": "8c63dc56c264fa42cd127e83714a0f927a23d298", + "minecraft/sounds/mob/goat/impact3.ogg": "c35193da8c9f0b0ccd1080bee591c645a8c4ef3c", + "minecraft/sounds/mob/goat/jump1.ogg": "ea9f9d3dde1b2f63a4840d1cf680c7809d379b3b", + "minecraft/sounds/mob/goat/jump2.ogg": "641cf35f089efec7494d67c3116fe4ddb5ae37c0", + "minecraft/sounds/mob/goat/pre_ram1.ogg": "1e1edd1aa00a705b3c20a8a4f0758c1df8dfd3c7", + "minecraft/sounds/mob/goat/pre_ram2.ogg": "1e6a4ebd05ff7042bf9bc3b5fd45dbf7a0919e41", + "minecraft/sounds/mob/goat/pre_ram3.ogg": "982573a3ca665307ecfa7ac79479aefda24231ff", + "minecraft/sounds/mob/goat/pre_ram4.ogg": "e391fd4d704892ca8e29777318f3a95c773e4222", + "minecraft/sounds/mob/goat/scream1.ogg": "6ae2ff298c1c5658592c15705dff320acafc79c5", + "minecraft/sounds/mob/goat/scream2.ogg": "8f252063b2238390276990d5897d04abecabc5c7", + "minecraft/sounds/mob/goat/scream3.ogg": "05cd621e2ed94339c2ea5f117afb153c7a75f77b", + "minecraft/sounds/mob/goat/scream4.ogg": "23f0b79cd6655e531f01c25e3c543b064dea2c2e", + "minecraft/sounds/mob/goat/scream5.ogg": "06b903971b89f88fe2cea066d005b19c17925c3b", + "minecraft/sounds/mob/goat/scream6.ogg": "9bc103a2c140ce56a499af07d11171d4f2767a4a", + "minecraft/sounds/mob/goat/scream7.ogg": "cfe4f2e9c1b7b1fc52693b32b3abefd70b0cb3bc", + "minecraft/sounds/mob/goat/scream8.ogg": "d6dee97223593e762b595e4c0a3c2a5e3a2a609d", + "minecraft/sounds/mob/goat/scream9.ogg": "dd78f4d0985fb51407e8be51a5b9c359a5b51012", + "minecraft/sounds/mob/goat/screaming_death1.ogg": "8017842db46e848a224bd8eadbe874e3b19681d0", + "minecraft/sounds/mob/goat/screaming_death2.ogg": "ced2af6d2885592b10ceb5ffddd399ecde13f5c3", + "minecraft/sounds/mob/goat/screaming_death3.ogg": "073eab6086fd3bd9fd76e59acbbc3dab7033a816", + "minecraft/sounds/mob/goat/screaming_hurt1.ogg": "a9d69852e104d8ba4adc24ac3123f3b2994b5f34", + "minecraft/sounds/mob/goat/screaming_hurt2.ogg": "6495136aab23f9c5b6821965c936faf9b50e4a1b", + "minecraft/sounds/mob/goat/screaming_hurt3.ogg": "544e752b66ddd7e82c22e9aed1a392cc578e1889", + "minecraft/sounds/mob/goat/screaming_milk1.ogg": "230a48238f55e8a56b07fdda230b0322a3439d2d", + "minecraft/sounds/mob/goat/screaming_milk2.ogg": "d6f47f2ee9873b32ca53064ea4bb8a2e045a6451", + "minecraft/sounds/mob/goat/screaming_milk3.ogg": "41ea86c6c13c1fb5a9e5328232b2c8e16d18e2f9", + "minecraft/sounds/mob/goat/screaming_milk4.ogg": "39b7372ac76df026acb03946bbe9c988cdf0885c", + "minecraft/sounds/mob/goat/screaming_milk5.ogg": "0c4bc22cdddeb8bf4ebcbf785765fc0c4e05a59c", + "minecraft/sounds/mob/goat/screaming_pre_ram1.ogg": "a8a396b310256d802c7ae2c9f78feb72d4df735d", + "minecraft/sounds/mob/goat/screaming_pre_ram2.ogg": "c5bf526d1d9d8bba0147c848143ada28fc387a48", + "minecraft/sounds/mob/goat/screaming_pre_ram3.ogg": "527a0a831df27e62e4223cf50b50e446c3aba6ba", + "minecraft/sounds/mob/goat/screaming_pre_ram4.ogg": "f24003f7c291a8b08bd9080e9bd32eafea6348a6", + "minecraft/sounds/mob/goat/screaming_pre_ram5.ogg": "e95b84c41cd03f5f0e632b0677108d139a26866f", + "minecraft/sounds/mob/goat/step1.ogg": "be3621c8da611a9a46ac6349f3d611ebbdc3e0e2", + "minecraft/sounds/mob/goat/step2.ogg": "cd237064c4803cfdaa84b7469544f7730a4339a1", + "minecraft/sounds/mob/goat/step3.ogg": "d98b73986f29eed74b0106e9919e3107cd3c2f97", + "minecraft/sounds/mob/goat/step4.ogg": "0af78c8eaf64884cdc943af387926764242c44fd", + "minecraft/sounds/mob/goat/step5.ogg": "cd95b52d170837d249735c3815f57654fe307d3c", + "minecraft/sounds/mob/goat/step6.ogg": "94afa8dda40ba0ac5e6225cf8bef196bb3f1cccf", + "minecraft/sounds/mob/guardian/attack_loop.ogg": "d7505745c0c75b19934cd7cb304607badbbf7e80", + "minecraft/sounds/mob/guardian/curse.ogg": "723b7981e98bd1907e7d3fce30da15caeff9bb4b", + "minecraft/sounds/mob/guardian/elder_death.ogg": "b1a5c68cc2ad876472b77ad25d91bf5931a4254a", + "minecraft/sounds/mob/guardian/elder_hit1.ogg": "4c2f6fc7afe9eeb0ce6158553fa988ba2b532db7", + "minecraft/sounds/mob/guardian/elder_hit2.ogg": "4de3292162a343b21656e610342d17e92331c574", + "minecraft/sounds/mob/guardian/elder_hit3.ogg": "d96cc8ccb82deba5d97df793fc5e79914c66f0d9", + "minecraft/sounds/mob/guardian/elder_hit4.ogg": "34574dc6e95a7ca786a4e40e9d2263470d7d7eda", + "minecraft/sounds/mob/guardian/elder_idle1.ogg": "f89332d0596fab92ffff6290464074b33c2c294b", + "minecraft/sounds/mob/guardian/elder_idle2.ogg": "7d896daf494f616435ff9f9357727b2be7d16842", + "minecraft/sounds/mob/guardian/elder_idle3.ogg": "c8b37b6aeaa041068338a1725fbfd8ab44e35953", + "minecraft/sounds/mob/guardian/elder_idle4.ogg": "2da932f9cad41c7a5cac3d9c5ddfa70da0808952", + "minecraft/sounds/mob/guardian/flop1.ogg": "1330faec2b5a6ed7dbb3932e4002966a854df137", + "minecraft/sounds/mob/guardian/flop2.ogg": "43bd3b146f2647c02261c662c1fa2604303fe991", + "minecraft/sounds/mob/guardian/flop3.ogg": "24d54ac72d33f31ab903a14581f2c294d6622c0b", + "minecraft/sounds/mob/guardian/flop4.ogg": "b479c2b39fadb1211c87bc4857d2b15d269f63bc", + "minecraft/sounds/mob/guardian/guardian_death.ogg": "ef1c704a54dce8806a45814d0aca75b8f244620a", + "minecraft/sounds/mob/guardian/guardian_hit1.ogg": "08979d1090cc231f2ac106eddabbeebfaf6161ec", + "minecraft/sounds/mob/guardian/guardian_hit2.ogg": "b86bf2360315b92c4585f790bf9e73747407ee4b", + "minecraft/sounds/mob/guardian/guardian_hit3.ogg": "23991e171a938d4fb87016ad13c37ca5bc9c04be", + "minecraft/sounds/mob/guardian/guardian_hit4.ogg": "1c20908d9029ed3dc441a1c77e6cfeb862f56cb8", + "minecraft/sounds/mob/guardian/land_death.ogg": "2d0deed2af648ecb09b0380c1588993cfeb2c32a", + "minecraft/sounds/mob/guardian/land_hit1.ogg": "6de02a09775d274130058c654b20010bdbc93f3d", + "minecraft/sounds/mob/guardian/land_hit2.ogg": "337653ea7805d5af52dd47e6fa916bc050abec3f", + "minecraft/sounds/mob/guardian/land_hit3.ogg": "19434f0f3ba2166ab34002407387b7d2789be062", + "minecraft/sounds/mob/guardian/land_hit4.ogg": "3de5312afc6f3b85438788025d54d984fdf57cab", + "minecraft/sounds/mob/guardian/land_idle1.ogg": "92ecd29a556b0b14727b8aac22c4929b4baa37c5", + "minecraft/sounds/mob/guardian/land_idle2.ogg": "3db7f5a1f49f02357824ad7200019ffa76256181", + "minecraft/sounds/mob/guardian/land_idle3.ogg": "09731cd69beab52a64296536a2470605d1647d15", + "minecraft/sounds/mob/guardian/land_idle4.ogg": "eeb39963e94bc35785a7b1967e753e8fc708aa9b", + "minecraft/sounds/mob/hoglin/angry1.ogg": "6c261a3d5df9cfa755f9becbe9eff78822bde902", + "minecraft/sounds/mob/hoglin/angry2.ogg": "7561831105288058296eaa73970bf2e3ca2d2b16", + "minecraft/sounds/mob/hoglin/angry3.ogg": "58fac9456ae52633eed3b525465ba22ef5f3a35b", + "minecraft/sounds/mob/hoglin/angry4.ogg": "755de154a6f5bc28bfadaad9841817d23a90b1ff", + "minecraft/sounds/mob/hoglin/angry5.ogg": "2eca26df0ffa646edee1248cbd22731d625bdfe1", + "minecraft/sounds/mob/hoglin/angry6.ogg": "6a77335eee2b4db567d0d53dbf11ee0194839c09", + "minecraft/sounds/mob/hoglin/attack1.ogg": "bf3b3574b32a1a2f607cbbd4eb0b88b9e6b531c1", + "minecraft/sounds/mob/hoglin/attack2.ogg": "d3fd06b9ff3f8c6696169a19e5031de6bbfa15de", + "minecraft/sounds/mob/hoglin/converted1.ogg": "38c25af3e2a2d245b1778f681e53eb16af740f7c", + "minecraft/sounds/mob/hoglin/converted2.ogg": "10d0f3010e33c6a1b563d7e628bb32a4619a8547", + "minecraft/sounds/mob/hoglin/death1.ogg": "2c3628f6c930d4659dc70eff2210aab53e05bb8f", + "minecraft/sounds/mob/hoglin/death2.ogg": "59268870f300ebbe170f4ec17a6811e7d6880f62", + "minecraft/sounds/mob/hoglin/death3.ogg": "6aa1dc196bf2f337dacc30a5927ba8a24006a921", + "minecraft/sounds/mob/hoglin/hurt1.ogg": "73276c997c63d4595d7dc2f6623f35aa5d2e485f", + "minecraft/sounds/mob/hoglin/hurt2.ogg": "795a67efbe31b7a23d21a6a4fdc87104794598bf", + "minecraft/sounds/mob/hoglin/hurt3.ogg": "3c5f513f53d595e75f787b764dd054882d9c3146", + "minecraft/sounds/mob/hoglin/hurt4.ogg": "d4284b06214d64fa8853bd71f503198cab5f452e", + "minecraft/sounds/mob/hoglin/idle1.ogg": "d908e7f4a29d27e67d57260b2efa2d876c30613b", + "minecraft/sounds/mob/hoglin/idle10.ogg": "eb52e26ad35a1b251e45d7bd0a986b05b2628249", + "minecraft/sounds/mob/hoglin/idle11.ogg": "57983674378a3d1bf827833e362a69839acd609e", + "minecraft/sounds/mob/hoglin/idle2.ogg": "ae22f9af9ca8a88e0bbbe6b61088d8b9b1653572", + "minecraft/sounds/mob/hoglin/idle3.ogg": "bfaf9063e4cbc2b4b0ee1284ee2a56b53e02e6d2", + "minecraft/sounds/mob/hoglin/idle4.ogg": "36d5c0e23a741d7b4682fbc70ee624e87569e197", + "minecraft/sounds/mob/hoglin/idle5.ogg": "75b54f54e6bba7b1e908555fd99b27700c859508", + "minecraft/sounds/mob/hoglin/idle6.ogg": "dee4bd36721024fea400710a427d4056ade2f435", + "minecraft/sounds/mob/hoglin/idle7.ogg": "feacefb3c252238ed5d74d36386f187ca2cfc4f9", + "minecraft/sounds/mob/hoglin/idle8.ogg": "374666b4b60e3f4139e932c2212f892632cb8ff3", + "minecraft/sounds/mob/hoglin/idle9.ogg": "e959f24a326e15f17a727b4c58517aee9f368fa3", + "minecraft/sounds/mob/hoglin/retreat1.ogg": "a9eb67a51fe7e122f4f0f3e5bb248b0f4e196b29", + "minecraft/sounds/mob/hoglin/retreat2.ogg": "e52f081f561c76b00b49e2e90ca2eec9f289ceb7", + "minecraft/sounds/mob/hoglin/retreat3.ogg": "04547c5e9a62aa47809ecb464d578cb8ea1afc23", + "minecraft/sounds/mob/hoglin/step1.ogg": "a50e81c3a29f43af61bce72b51d81ca07d628ff3", + "minecraft/sounds/mob/hoglin/step2.ogg": "e42ded803519dd0cb5e47bbdc9c7ba54da7bb32b", + "minecraft/sounds/mob/hoglin/step3.ogg": "ab689dfa6896e807f940932c6a26998cabf6b488", + "minecraft/sounds/mob/hoglin/step4.ogg": "7ebe67ee8f113f6de7b7f6d7d71e925c31fdc84d", + "minecraft/sounds/mob/hoglin/step5.ogg": "e19c1c506b3912b5525b4dda588495376ddc6d96", + "minecraft/sounds/mob/hoglin/step6.ogg": "8b9616d697f22321f8d557df82392aa8e70e8a64", + "minecraft/sounds/mob/horse/angry1.ogg": "657d93d7a22eb25458ab2534f93ffdc05b444a90", + "minecraft/sounds/mob/horse/armor.ogg": "4bc6be271666131b075137efc1bfc8e943e41482", + "minecraft/sounds/mob/horse/breathe1.ogg": "1afdcef47e76d36184f0e699bd2d6fc6418996c3", + "minecraft/sounds/mob/horse/breathe2.ogg": "f9c910948d26f6e6fd92728aa259cde0f91ee421", + "minecraft/sounds/mob/horse/breathe3.ogg": "84f2c608df1dedf9ad9ae385f38d4cc003e980d6", + "minecraft/sounds/mob/horse/death.ogg": "8f5e0651a43e9b2413946ce4ec7b0103d653e4c9", + "minecraft/sounds/mob/horse/donkey/angry1.ogg": "db9f68cd9db4cf86eb57d171d9714fdca847106e", + "minecraft/sounds/mob/horse/donkey/angry2.ogg": "5d734258d232ebcbad8485561b2e031d26db89e0", + "minecraft/sounds/mob/horse/donkey/death.ogg": "def512f49f1152a1b82e2ce4dfe0482aaa16c38b", + "minecraft/sounds/mob/horse/donkey/hit1.ogg": "ace85d419307a303d34d1d6dcc33a211ff4eb84b", + "minecraft/sounds/mob/horse/donkey/hit2.ogg": "c7541de2ca425c980064fdac3a933594b4c76eaa", + "minecraft/sounds/mob/horse/donkey/hit3.ogg": "778be006871e8b273ec8ab607e1b8820d254436f", + "minecraft/sounds/mob/horse/donkey/idle1.ogg": "094428cbf21b6221e738157e51c6b351b412dffe", + "minecraft/sounds/mob/horse/donkey/idle2.ogg": "8042b947982f1fed3ac3bf938b1b975f131e6443", + "minecraft/sounds/mob/horse/donkey/idle3.ogg": "f88abbff29410862a934d78f834d3142f34bc116", + "minecraft/sounds/mob/horse/gallop1.ogg": "f92ce93d42da91a95d921efd1532a1dff479a7a9", + "minecraft/sounds/mob/horse/gallop2.ogg": "3400cdc571e3c92b14cb255b47fcfb992abf77e7", + "minecraft/sounds/mob/horse/gallop3.ogg": "fa890e6daf87c9fa6d7a5eee6a0ef29e80efc7cf", + "minecraft/sounds/mob/horse/gallop4.ogg": "94cf597af95061779ab98c3e73b9b6cbf78342bb", + "minecraft/sounds/mob/horse/hit1.ogg": "b6cbe93c68a94ee93f79301307b024b864a888fa", + "minecraft/sounds/mob/horse/hit2.ogg": "0ecc87df118c175ccf396330b96f9a6917e9bbdd", + "minecraft/sounds/mob/horse/hit3.ogg": "bd25ed102ba7be60a04be404c1dc46b97bc0b55a", + "minecraft/sounds/mob/horse/hit4.ogg": "6e631a9b0f54b20aa9513d24e9214c3cfb4456c9", + "minecraft/sounds/mob/horse/idle1.ogg": "6483cce6aec3f4627e46c8a251072e40f069e75d", + "minecraft/sounds/mob/horse/idle2.ogg": "38f5b1e93a9ef1d4779890ba4e43370421ff17e3", + "minecraft/sounds/mob/horse/idle3.ogg": "1ebea9a6e9cb5d3c97828cb8026db4fb6c4e0fc6", + "minecraft/sounds/mob/horse/jump.ogg": "b2006f7883f10123e11ae1e81c63cd6b0d3d478e", + "minecraft/sounds/mob/horse/land.ogg": "041446ca731499a1a15438d8df05fb04d942b2f7", + "minecraft/sounds/mob/horse/leather.ogg": "246278736976219de64df5d7ef1ca905b5924efb", + "minecraft/sounds/mob/horse/skeleton/death.ogg": "8bc2c8515d2022d580de6ca09e9117b28b338e31", + "minecraft/sounds/mob/horse/skeleton/hit1.ogg": "5a9de95708ab5797123933e1523e47c9f504ea87", + "minecraft/sounds/mob/horse/skeleton/hit2.ogg": "9c53c94ae67ad6ecff869d59ba162379fef65979", + "minecraft/sounds/mob/horse/skeleton/hit3.ogg": "99b93c4e99d75c329a37c4b409f16df983a4e2fa", + "minecraft/sounds/mob/horse/skeleton/hit4.ogg": "fa0958c80d46b700cb620e27fa95fce58c8aed90", + "minecraft/sounds/mob/horse/skeleton/idle1.ogg": "c3ac093896099ce5e5c316151af77bc0679590b1", + "minecraft/sounds/mob/horse/skeleton/idle2.ogg": "2fe7558b44e0f2115de9efc14027f431b74b8e5c", + "minecraft/sounds/mob/horse/skeleton/idle3.ogg": "6768d68960b07aa2183f0b29f3c01344c373e449", + "minecraft/sounds/mob/horse/skeleton/water/gallop1.ogg": "7da9205947bad631c102c7b0b4eb6003b68a5e11", + "minecraft/sounds/mob/horse/skeleton/water/gallop2.ogg": "065ae5e3252835018ebec25b600d9fb4e79fc0f8", + "minecraft/sounds/mob/horse/skeleton/water/gallop3.ogg": "2366f9985e55f9712d153ce48d391c56415ef3de", + "minecraft/sounds/mob/horse/skeleton/water/gallop4.ogg": "a518e6df51f090ddbb0a191c8d67381c2810aedd", + "minecraft/sounds/mob/horse/skeleton/water/idle1.ogg": "fd65fc9dcab76906d5d4cb1d8949cbdced3c3646", + "minecraft/sounds/mob/horse/skeleton/water/idle2.ogg": "6199bae4a02add8c159b685acbd8f752bb776857", + "minecraft/sounds/mob/horse/skeleton/water/idle3.ogg": "803241cc64e53ceb4211c5222ff06cfd691b2ad7", + "minecraft/sounds/mob/horse/skeleton/water/idle4.ogg": "659d7a3c3171b1f0ef99bf075d5897c54c42a733", + "minecraft/sounds/mob/horse/skeleton/water/idle5.ogg": "b919065291bc2d0632a8c1e5292621c053744acf", + "minecraft/sounds/mob/horse/skeleton/water/jump.ogg": "92e854405f58ed2d1c339bc4917bf1345a734483", + "minecraft/sounds/mob/horse/skeleton/water/soft1.ogg": "3d0f02f1282f807234ace3f5d408d71069340857", + "minecraft/sounds/mob/horse/skeleton/water/soft2.ogg": "9785ad151bafe0ebbccd19115ec0292aaa4e221f", + "minecraft/sounds/mob/horse/skeleton/water/soft3.ogg": "89ae8e1e64e97e96e9e29e432eaf623a20df8f5d", + "minecraft/sounds/mob/horse/skeleton/water/soft4.ogg": "2e31efc9abd7b80f12589e1c5ca41436399f11ef", + "minecraft/sounds/mob/horse/skeleton/water/soft5.ogg": "8831f30b872dc52fb18fcf2e842a13889111e3d7", + "minecraft/sounds/mob/horse/skeleton/water/soft6.ogg": "86a81954be9aaa84854aa606f8100ff9e9d31000", + "minecraft/sounds/mob/horse/soft1.ogg": "c485999f9cfe0e90a41a0c19e590c6ba56bc7035", + "minecraft/sounds/mob/horse/soft2.ogg": "9396576ec3e7a564c4b9abea5cfbadac3a69105b", + "minecraft/sounds/mob/horse/soft3.ogg": "ffb6738eb0cf2bb20b07aa3304036cf470a9e7fb", + "minecraft/sounds/mob/horse/soft4.ogg": "a59fb898d981e00949606be9cf50e68c3a2ae49a", + "minecraft/sounds/mob/horse/soft5.ogg": "d82f22daf7e6723965cfc609daa4bd340a0f87b5", + "minecraft/sounds/mob/horse/soft6.ogg": "f286f48fe15189385b222b3045da1e730862fbfa", + "minecraft/sounds/mob/horse/wood1.ogg": "738feec331550415131bc9323e4b61e2eed299cf", + "minecraft/sounds/mob/horse/wood2.ogg": "1995e1a028d4d3fe4c2bfb0f19cb3f635392d655", + "minecraft/sounds/mob/horse/wood3.ogg": "cc627f04ec494906df1be6b366a1195b29470268", + "minecraft/sounds/mob/horse/wood4.ogg": "5d5e4af694b8bf892a9a70da56c380d1100050f1", + "minecraft/sounds/mob/horse/wood5.ogg": "de795fff7858ce5adcd232af64fef76342e9caf0", + "minecraft/sounds/mob/horse/wood6.ogg": "94dc6662cb919072506918fc3dad64663eb8bb26", + "minecraft/sounds/mob/horse/zombie/death.ogg": "90fef087440d5297b82908c2d2a239c1fa04e442", + "minecraft/sounds/mob/horse/zombie/hit1.ogg": "9c7b89be4cd0b8acb2bb73130972ce23a728adfa", + "minecraft/sounds/mob/horse/zombie/hit2.ogg": "d51230ebdce979f0fbf97f8fc803de43216a9d4f", + "minecraft/sounds/mob/horse/zombie/hit3.ogg": "96a422508e7dcb5fa7a2a83d7a3e5a1781773e52", + "minecraft/sounds/mob/horse/zombie/hit4.ogg": "0ca6f9876d9aa99031f22de9d7f5202a42d3c54d", + "minecraft/sounds/mob/horse/zombie/idle1.ogg": "acc9d1a98ab8e680182ff461ff67aff4810d9583", + "minecraft/sounds/mob/horse/zombie/idle2.ogg": "37f4c7a3a20b6d48b8f467381ee4e73bbf8c09dc", + "minecraft/sounds/mob/horse/zombie/idle3.ogg": "750e4dbf74fe89f116d749d3aa1e619f32ee436e", + "minecraft/sounds/mob/husk/convert1.ogg": "51dbd9a8b167a552cbc9a376f1f8133b454b6458", + "minecraft/sounds/mob/husk/convert2.ogg": "8d5469b6c5ab97a8f97f28204b068fbfa0a46853", + "minecraft/sounds/mob/husk/death1.ogg": "e51d8d0e351491c0b6b9b5175e9d4b0657e033f8", + "minecraft/sounds/mob/husk/death2.ogg": "35f4080cb0d3229d4f0838f638673eb6837a0178", + "minecraft/sounds/mob/husk/hurt1.ogg": "9a7f0d645ba926abd313b9626fed49ead83056be", + "minecraft/sounds/mob/husk/hurt2.ogg": "c29d44c116eb9a9f2564c5e2933e1f62d126b416", + "minecraft/sounds/mob/husk/idle1.ogg": "c9fb0414dece49be099daaa9a61227ff8500dbf2", + "minecraft/sounds/mob/husk/idle2.ogg": "a6c211ee8f24bcb87079a7c300f9e8f326e68531", + "minecraft/sounds/mob/husk/idle3.ogg": "b683c8cc2aeb709b2c42535de5fe7f86bf6399fa", + "minecraft/sounds/mob/husk/step1.ogg": "fff2b8b3cc447917102d8109f4da8f87da040656", + "minecraft/sounds/mob/husk/step2.ogg": "ffc4776b16f5a75e1c7364e41f3b31455756c176", + "minecraft/sounds/mob/husk/step3.ogg": "336de0edfc0f8186e41eeba1e65ff58763324d8d", + "minecraft/sounds/mob/husk/step4.ogg": "695c375dffb26360fefb8975dfa98972b0ddd4e3", + "minecraft/sounds/mob/husk/step5.ogg": "6128eb6363243e499304b25b0b1ebd2d3f56bdb1", + "minecraft/sounds/mob/illusion_illager/death1.ogg": "69f85728e3bce4307774433a4da29400ec37a9f3", + "minecraft/sounds/mob/illusion_illager/death2.ogg": "c18b4929798c97565c439081284992e7fe70a133", + "minecraft/sounds/mob/illusion_illager/hurt1.ogg": "9fb86d62fcbb60337197353e2da16dd588a6d03a", + "minecraft/sounds/mob/illusion_illager/hurt2.ogg": "478155b926977ca4dd52b235a36e2f89a77bb74c", + "minecraft/sounds/mob/illusion_illager/hurt3.ogg": "ccbd38411e047d5b9f8b90b8f0839f5fc72181b8", + "minecraft/sounds/mob/illusion_illager/idle1.ogg": "5b6990798846f4a425cf2783e5e017ca741b35b1", + "minecraft/sounds/mob/illusion_illager/idle2.ogg": "af3ab843fdc34475c4f318f9cd4cb5831ead420c", + "minecraft/sounds/mob/illusion_illager/idle3.ogg": "b0e3b71f049765671bc27be96724fb5701afc4f5", + "minecraft/sounds/mob/illusion_illager/idle4.ogg": "0f786cfb60312e36353e47ffba52559fd1c30770", + "minecraft/sounds/mob/illusion_illager/mirror_move1.ogg": "485339846fd58acb7ab863d914f42736db4583b1", + "minecraft/sounds/mob/illusion_illager/mirror_move2.ogg": "ced0b0d9e9d87dd090c42d240b0062c6c2f7cce6", + "minecraft/sounds/mob/illusion_illager/prepare_blind.ogg": "c78245bd99917dbd09351f151c8975230867eaab", + "minecraft/sounds/mob/illusion_illager/prepare_mirror.ogg": "dd1e0bfc7375af66108a6bd824e9a70005b3c26a", + "minecraft/sounds/mob/irongolem/damage1.ogg": "e96e03891c4c365dd2aef3491c032e5dbbd0f4fa", + "minecraft/sounds/mob/irongolem/damage2.ogg": "74fb4a747125ac026ade020b5ee2cebd77d13881", + "minecraft/sounds/mob/irongolem/death.ogg": "aa6c662548316c68591a63f568be1f997d162ef1", + "minecraft/sounds/mob/irongolem/hit1.ogg": "9d528a24b3aaf8e4210b570316ef4fe125f813d8", + "minecraft/sounds/mob/irongolem/hit2.ogg": "5808ff93c6c65ba2350d2237756ac9a9d4ce00fe", + "minecraft/sounds/mob/irongolem/hit3.ogg": "ca81722355d52173332eddb89942d0c38f74d2ea", + "minecraft/sounds/mob/irongolem/hit4.ogg": "4253a2a69d1dce1a5b00d24a675e379677463d19", + "minecraft/sounds/mob/irongolem/repair.ogg": "f540f50e7eead24b7e25ddedb9d3b25cfafe593a", + "minecraft/sounds/mob/irongolem/throw.ogg": "f30080c54b46aa2dcaa260018cb07ef0561408ac", + "minecraft/sounds/mob/irongolem/walk1.ogg": "c736e96b2f2134cb2a590834152ae1b3b2af150d", + "minecraft/sounds/mob/irongolem/walk2.ogg": "98f8cdbd360822f55128801767f1fcf938caef56", + "minecraft/sounds/mob/irongolem/walk3.ogg": "071db4363132ebb930caa4152024a72e373cf578", + "minecraft/sounds/mob/irongolem/walk4.ogg": "ed5c965e0354fff9b8acca3021594a9c4402acd4", + "minecraft/sounds/mob/llama/angry1.ogg": "76072a386e3d8bfe1adfb01848c0ee177ccb6403", + "minecraft/sounds/mob/llama/death1.ogg": "4061a315e7629a5d42a98f91efdbb10424fc70eb", + "minecraft/sounds/mob/llama/death2.ogg": "d72d2c42ed5d0c9f39b5a903555b73265100ea27", + "minecraft/sounds/mob/llama/eat1.ogg": "a297cd9713e000c77feefd41a06024b523cfefe5", + "minecraft/sounds/mob/llama/eat2.ogg": "644f4be2e5dd8a22954b66048104d6e3a2bd5628", + "minecraft/sounds/mob/llama/eat3.ogg": "0dd2a053d1305f953b77e67a320e350d68212bc6", + "minecraft/sounds/mob/llama/hurt1.ogg": "7fa3cc293a0ade6cbe4e1d0a08cd683b70c5b848", + "minecraft/sounds/mob/llama/hurt2.ogg": "08b13d73e321b2def27d361ae6785ebfef90fdbb", + "minecraft/sounds/mob/llama/hurt3.ogg": "fc67392704eb817ccec3043ebbadb1bd1a8879c0", + "minecraft/sounds/mob/llama/idle1.ogg": "429641a500432ac2df9dcf0f28b034bfbc435acf", + "minecraft/sounds/mob/llama/idle2.ogg": "953b11b095140ee772694591a284051c694fa909", + "minecraft/sounds/mob/llama/idle3.ogg": "4db3c2a36a1f41ce3e6559ebd801318c95c7a9e3", + "minecraft/sounds/mob/llama/idle4.ogg": "7dbe7f6b02b34c2e4258c78ebf71fc36f8db627a", + "minecraft/sounds/mob/llama/idle5.ogg": "7372ffbb929b7f189c5e99b41730bab2c45e40a8", + "minecraft/sounds/mob/llama/spit1.ogg": "b22e8e1097ff3cf4456c35c1e3dc24b3b4775eb9", + "minecraft/sounds/mob/llama/spit2.ogg": "de12bd40faf0fa843aaf90da7e6ff3e2abb21d38", + "minecraft/sounds/mob/llama/step1.ogg": "5cd4263758e9a45acfe027bf8cdf659cf3dc62ca", + "minecraft/sounds/mob/llama/step2.ogg": "6413e0ae6dc38daa62208fea68f5a49403e99d95", + "minecraft/sounds/mob/llama/step3.ogg": "44b982dcbae854042c18c766a4dee28d2497f612", + "minecraft/sounds/mob/llama/step4.ogg": "2cd4d29d08d094849c445d6df887e10e2bef6ead", + "minecraft/sounds/mob/llama/step5.ogg": "37a177326891665f15c6dd9aba72a0fb96c29cbf", + "minecraft/sounds/mob/llama/swag.ogg": "8c4623fe4b3d3a2000cb597ff07c430d4d0bfb3a", + "minecraft/sounds/mob/magmacube/big1.ogg": "c72dc968c642afa06e6e93d996185ada18f82154", + "minecraft/sounds/mob/magmacube/big2.ogg": "93062e5109692ee4b67d10ee603a0ea00da22fbc", + "minecraft/sounds/mob/magmacube/big3.ogg": "09cb0285a1114b63a899fb8163a18f38924d0069", + "minecraft/sounds/mob/magmacube/big4.ogg": "633a8506034ee419376a895f538b88928140b4f7", + "minecraft/sounds/mob/magmacube/jump1.ogg": "1e00e965fd5a742ae5557c5dfb9091d65fb1db59", + "minecraft/sounds/mob/magmacube/jump2.ogg": "a844931912efa27ca3f73a5d75ad377536ffea92", + "minecraft/sounds/mob/magmacube/jump3.ogg": "d835073b99f1d326dd0f0c2dd6c0a97e19118062", + "minecraft/sounds/mob/magmacube/jump4.ogg": "b8bdf3ad47c431c1da576c60eeb018754357edab", + "minecraft/sounds/mob/magmacube/small1.ogg": "38aca3200a34dac9bfb02a70dc261344ba009e23", + "minecraft/sounds/mob/magmacube/small2.ogg": "922e50f84afc88deb5c68fc6d4e0b55c91dc1110", + "minecraft/sounds/mob/magmacube/small3.ogg": "4320eabba4eb4e1c6be142a82255e3147101c40d", + "minecraft/sounds/mob/magmacube/small4.ogg": "66b0772a248492e0c9db6e98c24c80d154c44cc0", + "minecraft/sounds/mob/magmacube/small5.ogg": "a675120deb3392f0b241f4e08df54694b20719fe", + "minecraft/sounds/mob/mooshroom/convert1.ogg": "8d045ea00ba8696c421713a369be842ecf5af593", + "minecraft/sounds/mob/mooshroom/convert2.ogg": "640c1c6b998a8a121b66f9e018a1a008ec8d778d", + "minecraft/sounds/mob/mooshroom/eat1.ogg": "13e7f901d031c5077d6632967523bd61d29bb783", + "minecraft/sounds/mob/mooshroom/eat2.ogg": "2529442f541237a80f10aad29d2aaa275b10b609", + "minecraft/sounds/mob/mooshroom/eat3.ogg": "2d033f1dc484294df50a0180a66be5f456a652fe", + "minecraft/sounds/mob/mooshroom/eat4.ogg": "722c2e319fb2094de9232b9a92396417bdef5b9d", + "minecraft/sounds/mob/mooshroom/milk1.ogg": "cc1ec7ebed87b9f830861891b382661948d08c4b", + "minecraft/sounds/mob/mooshroom/milk2.ogg": "e9eb51e116b47c1ed0709efdc1fe163300fda8e4", + "minecraft/sounds/mob/mooshroom/milk3.ogg": "d0134cd4f1b2fbfd3639f293d92d7ec43fd6ded9", + "minecraft/sounds/mob/panda/aggressive/aggressive1.ogg": "1cc42a4336edfabea25db242b3b7fd86f285a977", + "minecraft/sounds/mob/panda/aggressive/aggressive2.ogg": "9f8b52c288f0b0ad72c06bd48c1eb11b1737b7da", + "minecraft/sounds/mob/panda/aggressive/aggressive3.ogg": "67b10fedd43e774e36284992fc690d582d147018", + "minecraft/sounds/mob/panda/aggressive/aggressive4.ogg": "bae2d98f1c2393ae276fae3b13e9da3972306972", + "minecraft/sounds/mob/panda/bite1.ogg": "3a767d6948f06027f17958955c6b2cd9fcf3f151", + "minecraft/sounds/mob/panda/bite2.ogg": "1d35d9c81c646c7007bde70c4f2d942743878bb2", + "minecraft/sounds/mob/panda/bite3.ogg": "fdc088f8ad2a48e49b3b6a6bab62abe20596d0e6", + "minecraft/sounds/mob/panda/cant_breed1.ogg": "f4cd8111260b8bc8ad13acbefe95b6691f6a4fdd", + "minecraft/sounds/mob/panda/cant_breed2.ogg": "de69ca0acd9f534deaf2984ba6de79d23a679ed9", + "minecraft/sounds/mob/panda/cant_breed3.ogg": "e40562f895c4c5809fd98ae4794abcf26db7adcd", + "minecraft/sounds/mob/panda/cant_breed4.ogg": "bc85675b9f81497d4ffb13d88dda3f57d42855a5", + "minecraft/sounds/mob/panda/cant_breed5.ogg": "24c5d88bc56f22851030904c219aad4fe032edc2", + "minecraft/sounds/mob/panda/death1.ogg": "cf7bf5fa2b4ce5bb8946f0b38ae9855b14e3bf9f", + "minecraft/sounds/mob/panda/death2.ogg": "18944e89e2ba120c2e6a38a65912ce1a09e4ca3a", + "minecraft/sounds/mob/panda/death3.ogg": "15ef532d2532df5bd73431a249a841dfb7c06292", + "minecraft/sounds/mob/panda/death4.ogg": "70bc7babfa17f43c0215ca89244e3d103603dcd9", + "minecraft/sounds/mob/panda/eat1.ogg": "9de807068ef3a713c55f517bb454945aaf7de44a", + "minecraft/sounds/mob/panda/eat10.ogg": "8fb4c784459d54c2972fb4c62ba2cb5d60da1f74", + "minecraft/sounds/mob/panda/eat11.ogg": "5ddd64522bdc21ad230300d2d21ac91deaf2db86", + "minecraft/sounds/mob/panda/eat12.ogg": "a64d1fcb71cb9e72fb7f357ece491408abb10e52", + "minecraft/sounds/mob/panda/eat2.ogg": "54782e8b9c26be8a05bbb7145cc496fa1374a31a", + "minecraft/sounds/mob/panda/eat3.ogg": "cc1c26a06f5e0457be3ed37de4f3f24dd368cf76", + "minecraft/sounds/mob/panda/eat4.ogg": "e4e8881b4363c482d4921e5bad27f212e661d4f1", + "minecraft/sounds/mob/panda/eat5.ogg": "9f1f5605ac3ee1df2d79688daffb516e4f3df9e6", + "minecraft/sounds/mob/panda/eat6.ogg": "7a7565acf4a18ef54107bfa29f9c17c06afb5226", + "minecraft/sounds/mob/panda/eat7.ogg": "41ae38bc134450cb8591d420115133a3b57eff02", + "minecraft/sounds/mob/panda/eat8.ogg": "ad6af4c6e7bcff6db24dda95caaa4aaff6ab47d8", + "minecraft/sounds/mob/panda/eat9.ogg": "c85188df33d61438f138adff89b9653a3f54822f", + "minecraft/sounds/mob/panda/hurt1.ogg": "c2d4b125bb2d0660017b0aade42af9805edc6586", + "minecraft/sounds/mob/panda/hurt2.ogg": "351eff6423f3cc85901e1dacc0d4b9c432f9eed1", + "minecraft/sounds/mob/panda/hurt3.ogg": "7b974f1e23958cccb4ccde4a426bc0514cd5339f", + "minecraft/sounds/mob/panda/hurt4.ogg": "e3b8b601d62bde1bd4eb404e3eb6fba4f728fe90", + "minecraft/sounds/mob/panda/hurt5.ogg": "e02d95dae5d8e6c81f3dc161721e0738df9f18a1", + "minecraft/sounds/mob/panda/hurt6.ogg": "906f3c7603388170df9be706d950cb9e79a7ce3d", + "minecraft/sounds/mob/panda/idle1.ogg": "f485faccfd23c9b8b540738399d0ef5aaaf60031", + "minecraft/sounds/mob/panda/idle2.ogg": "c4a5353b575600774c0b2fea037db62a8b006101", + "minecraft/sounds/mob/panda/idle3.ogg": "ff6a6d0cbb51b9f94f014b5fb99ff5f4755ddc02", + "minecraft/sounds/mob/panda/idle4.ogg": "2600e2e6383845aee4310aa5f3f549d954e2ac9b", + "minecraft/sounds/mob/panda/nosebreath1.ogg": "d9972bb05701e6b63f2fce94ddd060108478030c", + "minecraft/sounds/mob/panda/nosebreath2.ogg": "d2a781064ab643e6573b3b31fee50db5ad8f7441", + "minecraft/sounds/mob/panda/nosebreath3.ogg": "2d6f3a6a48dcd6e17232275cf2af87c9aaad495f", + "minecraft/sounds/mob/panda/pant1.ogg": "4f15d4d0638863392f5f0038a38ff87ed5c40af6", + "minecraft/sounds/mob/panda/pant2.ogg": "1ce573f8b1719051252d70501121bdc5f510ac62", + "minecraft/sounds/mob/panda/pre_sneeze.ogg": "0c621637b9aeaf6f2be4d44a1f8368d1fbb25282", + "minecraft/sounds/mob/panda/sneeze1.ogg": "26f53bb37024a11bb6cc1be50fe8658d1b2388cc", + "minecraft/sounds/mob/panda/sneeze2.ogg": "e4507d8e89ce253a95a43672c54cb425b31e7b9d", + "minecraft/sounds/mob/panda/sneeze3.ogg": "15b1663eb046d98d37dd81f98ec831fcf72c1a01", + "minecraft/sounds/mob/panda/step1.ogg": "9d3cc1cb5298a3efc3229069e010aa4bab1f6336", + "minecraft/sounds/mob/panda/step2.ogg": "7d7ec74df17c6e6908d14bec7f3d7112c5466658", + "minecraft/sounds/mob/panda/step3.ogg": "6779f5e3fc00b201a145f903bb94c2b5eb0724ab", + "minecraft/sounds/mob/panda/step4.ogg": "8d37ef4a9a330c23aa6746183424fde31bcdf11e", + "minecraft/sounds/mob/panda/step5.ogg": "fc919c8e2069fdc70876a85251c9839ff48697e0", + "minecraft/sounds/mob/panda/worried/worried1.ogg": "15beaa4b980e4cdd87ecd2c573f04b3f196e3b8c", + "minecraft/sounds/mob/panda/worried/worried2.ogg": "8fb8df008222d5fcc8d2147187625f05dc5c0991", + "minecraft/sounds/mob/panda/worried/worried3.ogg": "d1311c39925f86d86ac7d00f5f8f4d15ecb31759", + "minecraft/sounds/mob/panda/worried/worried4.ogg": "ffd59d56815c269515151dc71655b091a7bc5729", + "minecraft/sounds/mob/panda/worried/worried5.ogg": "ab4c0ec59a96c6300cf0f4c289b2f67898386c3d", + "minecraft/sounds/mob/panda/worried/worried6.ogg": "12d429d6df6716c2bf5e05fdb2d503ec1c1a5b08", + "minecraft/sounds/mob/parrot/death1.ogg": "0bfde0688dbbb5baae87be69c8863f1b8ff14c96", + "minecraft/sounds/mob/parrot/death2.ogg": "d47eb67f59ec462b9b2f5e8b8773297867068952", + "minecraft/sounds/mob/parrot/death3.ogg": "df94cb8f2317c95732feaf4b561476d381483b7a", + "minecraft/sounds/mob/parrot/death4.ogg": "0acc3cdf1242adc4310e6d67079f35c12e00b735", + "minecraft/sounds/mob/parrot/eat1.ogg": "d0334761a307487ba4d051648ca7df4221a3b835", + "minecraft/sounds/mob/parrot/eat2.ogg": "78b99f889c28717f7cd82fa113f0681502cfa53d", + "minecraft/sounds/mob/parrot/eat3.ogg": "f1f6528247ecc729feb0fe08b5f3d81470ae137a", + "minecraft/sounds/mob/parrot/fly1.ogg": "29fbab28d2b809013c195137f745525b13e92082", + "minecraft/sounds/mob/parrot/fly2.ogg": "3cc981a101ae80fbda5a40ac54ab2f418f087898", + "minecraft/sounds/mob/parrot/fly3.ogg": "35a69020b6b470d44c132cd37781920cd3cf7d0c", + "minecraft/sounds/mob/parrot/fly4.ogg": "6c752adc2596d76e89d8866cba2a5226892f6d02", + "minecraft/sounds/mob/parrot/fly5.ogg": "3b521cd8a14d4e2f3ec509465aaaff956239d056", + "minecraft/sounds/mob/parrot/fly6.ogg": "a48d1ae5a24dbebe1db26cd5fa5976aacbe175bd", + "minecraft/sounds/mob/parrot/fly7.ogg": "cdba9fd6154fe95d595cf2641b4564ecf4e6a55c", + "minecraft/sounds/mob/parrot/fly8.ogg": "394e57ac47e16e470f090e4b2f128a0f201d6cde", + "minecraft/sounds/mob/parrot/hurt1.ogg": "48acc0d591ef38aede99d77e9bbe82d939991139", + "minecraft/sounds/mob/parrot/hurt2.ogg": "e274b31e5f2856c9ef048248bb4f8dc353c55e4d", + "minecraft/sounds/mob/parrot/idle1.ogg": "7758bc210e0b8a5013cc8689ae0606d9bdbee4bf", + "minecraft/sounds/mob/parrot/idle2.ogg": "2b3045915d07d98dab3279bbb7066b3ab6f519e7", + "minecraft/sounds/mob/parrot/idle3.ogg": "70479e8618d9f47528b26a32b65285e65a68dfc2", + "minecraft/sounds/mob/parrot/idle4.ogg": "8e6a9e99c9c849c53b61da8a91541e94b180cb90", + "minecraft/sounds/mob/parrot/idle5.ogg": "71050bbf68c95591ef5b96f74b6ae5b9e91f45a1", + "minecraft/sounds/mob/parrot/idle6.ogg": "56c168f9b424f34e83ed74ad7dd76beac654636e", + "minecraft/sounds/mob/parrot/step1.ogg": "2345540ad9a071ec601e028459bb0c3649845237", + "minecraft/sounds/mob/parrot/step2.ogg": "1cef2a7476a96d50c0379e15ed2a8b9579527e26", + "minecraft/sounds/mob/parrot/step3.ogg": "e63dea12eb3ffb13dda1bc3258a2a1dcc91a63f7", + "minecraft/sounds/mob/parrot/step4.ogg": "7de717ca128c7dc643ffb067df2eb5c0fdd5fc6f", + "minecraft/sounds/mob/parrot/step5.ogg": "95ba7a407300fc85b5e2ea9dba563ce69f45ad2b", + "minecraft/sounds/mob/phantom/bite1.ogg": "dd0da6a379419805cb63e30d138965829c2fced4", + "minecraft/sounds/mob/phantom/bite2.ogg": "32bd1e1d184c82e5aae1d3ad687e21665b93cdec", + "minecraft/sounds/mob/phantom/death1.ogg": "ae60d6d4f582fb3557d5b6b89946c9d494dbff5f", + "minecraft/sounds/mob/phantom/death2.ogg": "4ed098c177a4d8f0e7cc64cc4acc008f65cba798", + "minecraft/sounds/mob/phantom/death3.ogg": "1d9ca2668a02b21e5bcabb468bbee23edd255aab", + "minecraft/sounds/mob/phantom/flap1.ogg": "05084588e272aca53e25940af43624f7a1449766", + "minecraft/sounds/mob/phantom/flap2.ogg": "9fa24ef0a1c545a8eb8014130dd022763f34f72e", + "minecraft/sounds/mob/phantom/flap3.ogg": "774ac8e0156d5afc13f49acd2c1193231c9ce383", + "minecraft/sounds/mob/phantom/flap4.ogg": "e89273765e1e263333391605f1c1c33dfb9fd1a9", + "minecraft/sounds/mob/phantom/flap5.ogg": "8e4ccaf6ce579b9951feacb9bfb8241ac1d94e48", + "minecraft/sounds/mob/phantom/flap6.ogg": "0308d7cbf420532ce02e650d13eb5c9f577b3067", + "minecraft/sounds/mob/phantom/hurt1.ogg": "83ff2c375e2f592dd8021915b4bd165fc90b5e42", + "minecraft/sounds/mob/phantom/hurt2.ogg": "241facfff309b6288fa4704b141b4d8808741bc0", + "minecraft/sounds/mob/phantom/hurt3.ogg": "5d6c181854a62ba9bac3a4fdd70e22b8d161e319", + "minecraft/sounds/mob/phantom/idle1.ogg": "4a916eb00f50e0bf53b076a24f697a80ca5dd9cd", + "minecraft/sounds/mob/phantom/idle2.ogg": "319a1c770452b3accc07a8f0d5908de278afc151", + "minecraft/sounds/mob/phantom/idle3.ogg": "7e2c2c0473a06be0b8eb575b966dd094c71c8c82", + "minecraft/sounds/mob/phantom/idle4.ogg": "bd3aef7f367a4db7a4e0bf680b48280e45ddaff3", + "minecraft/sounds/mob/phantom/idle5.ogg": "39bb6feb1aea09e0a18c5c868412de5ab822c060", + "minecraft/sounds/mob/phantom/swoop1.ogg": "e1f59b0ae1ba6a05e426bf8572d909b6c16fab90", + "minecraft/sounds/mob/phantom/swoop2.ogg": "f841f4b0b1060493e8f792ac74496b2a0c9d49b1", + "minecraft/sounds/mob/phantom/swoop3.ogg": "17952e5f04deba5308ee7d30561a7d24aec33dd4", + "minecraft/sounds/mob/phantom/swoop4.ogg": "a639c2645183e94ff65f69d2fc3356b1cfa53481", + "minecraft/sounds/mob/pig/death.ogg": "49b6b073bc60bca804c3ad0bc28dc547361ebd3e", + "minecraft/sounds/mob/pig/say1.ogg": "22c5aefca088b196a011a1615aaaa6b68f2ad703", + "minecraft/sounds/mob/pig/say2.ogg": "ade6bb1df3170ded24773c992324c9cd314248da", + "minecraft/sounds/mob/pig/say3.ogg": "72031a3276c8e87243e6aec406eab8dc75e016ed", + "minecraft/sounds/mob/pig/step1.ogg": "bd0ed194271946aa0152da7276c919b49a8dfb82", + "minecraft/sounds/mob/pig/step2.ogg": "42714946662de93024632f108738d9c69bedc1f9", + "minecraft/sounds/mob/pig/step3.ogg": "00d34c5e9d71885143378bb2bd46d03c4ad7e9a2", + "minecraft/sounds/mob/pig/step4.ogg": "a41b977902c5ca168d33bc98fdb2dffd348e7c53", + "minecraft/sounds/mob/pig/step5.ogg": "6ac3f94dfa686a9034c2490780e72c8f5327c399", + "minecraft/sounds/mob/piglin/admire1.ogg": "8e3701253a89b9b08e87d58e04b0f79e0a6c2f5b", + "minecraft/sounds/mob/piglin/admire2.ogg": "1ad1b8932e167020d141ff62f3e630633626da0a", + "minecraft/sounds/mob/piglin/angry1.ogg": "60d1fda7012944ed16e25fc1926d4595ab2d3555", + "minecraft/sounds/mob/piglin/angry2.ogg": "ebb58195db8df016ab25e5cc4fad3026a13798a5", + "minecraft/sounds/mob/piglin/angry3.ogg": "5c0c1db45c95491f1e8273a3500ceac73f484830", + "minecraft/sounds/mob/piglin/angry4.ogg": "ccdb0b492072c06e011fe82219e903285f6966a6", + "minecraft/sounds/mob/piglin/celebrate1.ogg": "3137d4923103ee59efaf9f520cd21aebbc971177", + "minecraft/sounds/mob/piglin/celebrate2.ogg": "f3b01b508719c5b4775da95dbbfc666b7cd72c14", + "minecraft/sounds/mob/piglin/celebrate3.ogg": "664e84b3b330899f275a2bcfd71c46ba935ff25f", + "minecraft/sounds/mob/piglin/celebrate4.ogg": "886190d022c21bd3480e0a72a26846e28d2d2bb4", + "minecraft/sounds/mob/piglin/converted1.ogg": "3b487b3e3ec6009b9825fa23c941577c87488ce3", + "minecraft/sounds/mob/piglin/converted2.ogg": "9a3227ecad3d8535062e102633e0332bdff45a00", + "minecraft/sounds/mob/piglin/death1.ogg": "7be61443ca2883bc8e500bfed9f4ed5d5ad65809", + "minecraft/sounds/mob/piglin/death2.ogg": "ccbcfa6bbba42df2e8672cdabfcb9f1ded460ea7", + "minecraft/sounds/mob/piglin/death3.ogg": "052248b1ed17167e8bc8b9f61e38a93c4e5f4ca7", + "minecraft/sounds/mob/piglin/death4.ogg": "ed449e84fc90883941a5daae9a69834a7a221226", + "minecraft/sounds/mob/piglin/hurt1.ogg": "523fa864bde9ad0153d95cba82c8d155b3294968", + "minecraft/sounds/mob/piglin/hurt2.ogg": "f1492c9397cd08e1f4e8bffeae01518740c1fd44", + "minecraft/sounds/mob/piglin/hurt3.ogg": "3d99d34e8bcf0419fa3696bd2e95a4b2edaae331", + "minecraft/sounds/mob/piglin/idle1.ogg": "37c638650c820500b90b68381d7bd7b40591b8b6", + "minecraft/sounds/mob/piglin/idle2.ogg": "6d117449beebf9359a5ee6e107d4818d13a17a05", + "minecraft/sounds/mob/piglin/idle3.ogg": "9843a7fe901e32195a74066365fe3b82fb96f90a", + "minecraft/sounds/mob/piglin/idle4.ogg": "1d934f24734d3f7a9a62d415cde184f3316fda45", + "minecraft/sounds/mob/piglin/idle5.ogg": "b3aa8284b5d1df72957e7a9d7947ff0dddfd7fc1", + "minecraft/sounds/mob/piglin/jealous1.ogg": "fe6f533990f01233c6f741dea98780d9513e1dc3", + "minecraft/sounds/mob/piglin/jealous2.ogg": "fae1cecfc29f67926d47701932a161572b1929c7", + "minecraft/sounds/mob/piglin/jealous3.ogg": "655d339faca5f54ecbc0b279cf7c90721efed4bd", + "minecraft/sounds/mob/piglin/jealous4.ogg": "1c219e07490c50912fae8fe77b44f5090c16fa93", + "minecraft/sounds/mob/piglin/jealous5.ogg": "6eee90cd95c540508b924883a7658b7a9957302c", + "minecraft/sounds/mob/piglin/retreat1.ogg": "1eb670b34a9bc1cfbc28559a229d34762f7ac9be", + "minecraft/sounds/mob/piglin/retreat2.ogg": "efe5fb6f70554d950ebb14e60b00bf5d0179b7ae", + "minecraft/sounds/mob/piglin/retreat3.ogg": "c6ac851130fd51651efeba38957187c85c8b4b29", + "minecraft/sounds/mob/piglin/retreat4.ogg": "afd964f83bfa6f316a51a179eca98b2e8222a262", + "minecraft/sounds/mob/piglin/step1.ogg": "7455df5161e6d1c36a06cfd15a7724bf6a8efadd", + "minecraft/sounds/mob/piglin/step2.ogg": "e200f8d25bc7e63a7f5cd871e140b2dc6f801718", + "minecraft/sounds/mob/piglin/step3.ogg": "09d18c4d752b420233a35d9cc1a05af16cbd3dca", + "minecraft/sounds/mob/piglin/step4.ogg": "1de7a5eaabd398cca23321b405820f5e4e953dbe", + "minecraft/sounds/mob/piglin/step5.ogg": "b0158d4692687981c7a54fdd56113cafb673673a", + "minecraft/sounds/mob/piglin_brute/angry1.ogg": "64f16af0de928612e92607b053021b7e62cc5240", + "minecraft/sounds/mob/piglin_brute/angry2.ogg": "a28d0caaecd1b12391933485e120d380abe91ba7", + "minecraft/sounds/mob/piglin_brute/angry3.ogg": "bb106d048210f17e8b94d72bba0114824254998b", + "minecraft/sounds/mob/piglin_brute/angry4.ogg": "3c904dfff38734a24c2c6857f6a13251a3901a4f", + "minecraft/sounds/mob/piglin_brute/angry5.ogg": "0a62bde16fc2dd5e85f84fb8f0ba2e12f1e7cb92", + "minecraft/sounds/mob/piglin_brute/death1.ogg": "246c82d29e17aec21ad8616d70395cc9a18569d0", + "minecraft/sounds/mob/piglin_brute/death2.ogg": "69fc1d36f954348b4d3e9c475cb39c2e67b03e6b", + "minecraft/sounds/mob/piglin_brute/death3.ogg": "0e7f2b828b2da3a1e1887fce7cff04ed2f5a3cba", + "minecraft/sounds/mob/piglin_brute/hurt1.ogg": "50116675df44b6d60a200e3fb2070dc67fc11d7c", + "minecraft/sounds/mob/piglin_brute/hurt2.ogg": "b726a2355288a8f607badefd74a9068f1bc734d1", + "minecraft/sounds/mob/piglin_brute/hurt3.ogg": "beec370278bea51ecdf462f08f67454d3ec63eba", + "minecraft/sounds/mob/piglin_brute/hurt4.ogg": "be6fb471361325ec9692f49d41e92de7996474d5", + "minecraft/sounds/mob/piglin_brute/idle1.ogg": "682aa9e38a3819ef272d82fbee6134d21e3ed9e1", + "minecraft/sounds/mob/piglin_brute/idle2.ogg": "926af0437953fbd903c9ca1b9d42645688d3967c", + "minecraft/sounds/mob/piglin_brute/idle3.ogg": "40a7bbb37aff1dc0a13bf0e0dc432be9b11d05a5", + "minecraft/sounds/mob/piglin_brute/idle4.ogg": "39863ed3a471649a3e8d110aaa99ac81efe03058", + "minecraft/sounds/mob/piglin_brute/idle5.ogg": "5f5048533f7301f256b80d010ce969909ddcddd1", + "minecraft/sounds/mob/piglin_brute/idle6.ogg": "2ebbe4f72dc8cbc876159eced4c138e523939279", + "minecraft/sounds/mob/piglin_brute/idle7.ogg": "f28d8306eccdf34242636a56d962570104759a8f", + "minecraft/sounds/mob/piglin_brute/idle8.ogg": "9c855f1f9c0d3ec3abbe37b97da86b94bf8e79e9", + "minecraft/sounds/mob/piglin_brute/idle9.ogg": "49a03d502e04d5a2e13d81a4323784ddf327218f", + "minecraft/sounds/mob/piglin_brute/step1.ogg": "cff9499421adee16907229fee43767e1b11194f4", + "minecraft/sounds/mob/piglin_brute/step2.ogg": "cbb5c089e2797c818aac2731c4e0b25de7357bce", + "minecraft/sounds/mob/piglin_brute/step3.ogg": "0d1e37d7a6f3b0543234d3fcea88af7025fb06c7", + "minecraft/sounds/mob/piglin_brute/step4.ogg": "5ff6a8096d2c81d963dd7ff775bdfbc3ecf7076a", + "minecraft/sounds/mob/piglin_brute/step5.ogg": "804d9a53c906913794d18691bb26040cf2e1324d", + "minecraft/sounds/mob/pillager/celebrate1.ogg": "6036cf54dc5e3a69fbed75eee1701dcfb460f4cb", + "minecraft/sounds/mob/pillager/celebrate2.ogg": "a9f73206482601a7c87cf0b8f52808b1f069d4f1", + "minecraft/sounds/mob/pillager/celebrate3.ogg": "5f890d0d5415bdffef389911b57b01f73888811b", + "minecraft/sounds/mob/pillager/celebrate4.ogg": "cdc576e5d8fab89535b5fd2be313608ee82691a9", + "minecraft/sounds/mob/pillager/death1.ogg": "fccc80974524000a83635308c53a645d0d1a2a97", + "minecraft/sounds/mob/pillager/death2.ogg": "37a2fd80b646c30bc4caaf19fedc61357a698348", + "minecraft/sounds/mob/pillager/horn_celebrate.ogg": "3399418ab9cc653a2c7094e81adcd04aef21cece", + "minecraft/sounds/mob/pillager/hurt1.ogg": "44b02e9b5b77222737f93ed43eadcb39a9c7c003", + "minecraft/sounds/mob/pillager/hurt2.ogg": "602d6a80a55319cf9928c63e10720c0764524d14", + "minecraft/sounds/mob/pillager/hurt3.ogg": "56b6675c85557f631665c8edf46e0a34c77ed1a5", + "minecraft/sounds/mob/pillager/idle1.ogg": "3d1ca64f306c4ca5c7009a5cd2aaa4ead3f49651", + "minecraft/sounds/mob/pillager/idle2.ogg": "401a4f86da4f4e33ecd55e46048b51344268332f", + "minecraft/sounds/mob/pillager/idle3.ogg": "5798b9c17b5b00a7acfded2c24d42f6a700f24de", + "minecraft/sounds/mob/pillager/idle4.ogg": "3a73a4136d37e22bd44e92a2caf584f4f55dd70c", + "minecraft/sounds/mob/polarbear/death1.ogg": "6d353c3e78f60a841ee459a180376f8fe189e623", + "minecraft/sounds/mob/polarbear/death2.ogg": "26811be0930dbb49c3686d3a69b22f1f2965fb29", + "minecraft/sounds/mob/polarbear/death3.ogg": "50b4d18ccb5189016b582b9de0328715b4e181b7", + "minecraft/sounds/mob/polarbear/hurt1.ogg": "7b33ce222598a42c9613dad18aa9e85e16a9d217", + "minecraft/sounds/mob/polarbear/hurt2.ogg": "6c9072eac9d59db316907d74c93b0ff203760c6d", + "minecraft/sounds/mob/polarbear/hurt3.ogg": "b48dbc89aae64e280876707e065126924717f998", + "minecraft/sounds/mob/polarbear/hurt4.ogg": "cf435c7050205cb44a3c2f85ff87eb76c6a032f7", + "minecraft/sounds/mob/polarbear/idle1.ogg": "d6f8b5eb451a72846e1decfd664c83ac02284396", + "minecraft/sounds/mob/polarbear/idle2.ogg": "ea57a9528fc394bd438f0c5c9eedcbaec65bedff", + "minecraft/sounds/mob/polarbear/idle3.ogg": "872a3e47b7e88e5fa76fbbf71558ecfcb36de671", + "minecraft/sounds/mob/polarbear/idle4.ogg": "89c7aba7b4d0cb27793cbbc801e5b52d892524b4", + "minecraft/sounds/mob/polarbear/step1.ogg": "4fdae2c387ce4b9598891c2e8f44061fece85265", + "minecraft/sounds/mob/polarbear/step2.ogg": "83d9b6c417ae06b91b351151068bae65ca434771", + "minecraft/sounds/mob/polarbear/step3.ogg": "0ff220c28e679af2c8a0ef90afc477aaf1ff6c07", + "minecraft/sounds/mob/polarbear/step4.ogg": "bf5787e78267cb28236bdde3dd7ca8483c237b89", + "minecraft/sounds/mob/polarbear/warning1.ogg": "7f2489b172301ed7457a17ae1bd8f4d1ffe8cf0b", + "minecraft/sounds/mob/polarbear/warning2.ogg": "c21a656fb6366c4ad35f5be74ebb28f378fb926b", + "minecraft/sounds/mob/polarbear/warning3.ogg": "6c7fc817f892c79af5d2a1bc976fc17c2e313bd0", + "minecraft/sounds/mob/polarbear_baby/idle1.ogg": "678b39601c8f02b92e3aa124df64bbdcef96a1a6", + "minecraft/sounds/mob/polarbear_baby/idle2.ogg": "ebcc56665b24df0635c3bd95f55ef3c9fe133b3b", + "minecraft/sounds/mob/polarbear_baby/idle3.ogg": "dcca8fc5afeeab70064a44adea417032b79c432d", + "minecraft/sounds/mob/polarbear_baby/idle4.ogg": "3607b1d4e8d5e42de1a3fbb60b9948d7dbe5d039", + "minecraft/sounds/mob/rabbit/bunnymurder.ogg": "d8d82045b29653159f689d3356dd87f38b2b41cd", + "minecraft/sounds/mob/rabbit/hop1.ogg": "1b212fdf64a28ebb7796686dfc0de2c665fad429", + "minecraft/sounds/mob/rabbit/hop2.ogg": "983b8598fa068b6f3a2a1d8a1c28ac6bd57e177b", + "minecraft/sounds/mob/rabbit/hop3.ogg": "1624c603e4fc24f7375265e27ebecf1a681b5e93", + "minecraft/sounds/mob/rabbit/hop4.ogg": "9cce2f0d3657b83380e1746c6fe5444cf1c613f6", + "minecraft/sounds/mob/rabbit/hurt1.ogg": "e806fa91be20960f791acc4657db0ec8714d932e", + "minecraft/sounds/mob/rabbit/hurt2.ogg": "d354b0d9ab9ac3d157ab3b196e21223222ce74a5", + "minecraft/sounds/mob/rabbit/hurt3.ogg": "6881f868cad20e47a6b9c04b9b32950fc9c30160", + "minecraft/sounds/mob/rabbit/hurt4.ogg": "b93dda954ca171b3f287571a1ea33cb68ef6a300", + "minecraft/sounds/mob/rabbit/idle1.ogg": "005ff4be3158efd7ea7851cddc9839c753d65773", + "minecraft/sounds/mob/rabbit/idle2.ogg": "0f70fcfef5937a907041fe864c1403a6e6f3d377", + "minecraft/sounds/mob/rabbit/idle3.ogg": "1373cc1ac88329676d09f1607c1f7e5925da103d", + "minecraft/sounds/mob/rabbit/idle4.ogg": "8fc7baf8356f85638a8cb7d1c12f5ba15a5c8fec", + "minecraft/sounds/mob/ravager/bite1.ogg": "5089cd829181b591a9cfe5590497b06d59f77550", + "minecraft/sounds/mob/ravager/bite2.ogg": "383342ac69af173e01714110c1dbd6d52de7c887", + "minecraft/sounds/mob/ravager/bite3.ogg": "0f4f6d5ffbd1517cec039ff97c08801bdad07292", + "minecraft/sounds/mob/ravager/celebrate1.ogg": "a9571a32478f42fb063c3237297f2bfe01a37795", + "minecraft/sounds/mob/ravager/celebrate2.ogg": "ecfaee551612efdd61812132331fec1a8a57feed", + "minecraft/sounds/mob/ravager/death1.ogg": "b3fdf645eabd1e6c1334bfb54bcbde3576c59b92", + "minecraft/sounds/mob/ravager/death2.ogg": "bb6f34150e416c1c9a335a5232ff561774bd5e10", + "minecraft/sounds/mob/ravager/death3.ogg": "9a96a7a756ccf93118b709114c12fbc7af6672b9", + "minecraft/sounds/mob/ravager/hurt1.ogg": "e231367664680ecd993348375b089fb9b3a33547", + "minecraft/sounds/mob/ravager/hurt2.ogg": "c4095e981c62291381eadb5e361865e90630c8a9", + "minecraft/sounds/mob/ravager/hurt3.ogg": "6ed05589cf5885b3ce969ed649b7f9da465e3417", + "minecraft/sounds/mob/ravager/hurt4.ogg": "7d3bd8655eb785e3dc00367643bf99b3077e04aa", + "minecraft/sounds/mob/ravager/idle1.ogg": "33493d630036b86bb088a5a586f5b58d9e27b439", + "minecraft/sounds/mob/ravager/idle2.ogg": "4ec488470e6e7b626a62c700b05f9678f54ca4a1", + "minecraft/sounds/mob/ravager/idle3.ogg": "605869b47596e4fe6347ae68455a37dbd74ea22f", + "minecraft/sounds/mob/ravager/idle4.ogg": "54d3bab527bce99450bce5d976a64ff96361e2f8", + "minecraft/sounds/mob/ravager/idle5.ogg": "f4ed34bb8aede2c674a93c4ab3876cb21db62c49", + "minecraft/sounds/mob/ravager/idle6.ogg": "9bd543c512105dc4909c24dde5516e7b1f1a113e", + "minecraft/sounds/mob/ravager/idle7.ogg": "51985898d7ba21742a883dca7f9966386a6e8512", + "minecraft/sounds/mob/ravager/idle8.ogg": "0d6c8eb9d44fdf6250502beceea9a4ab1a0f25b4", + "minecraft/sounds/mob/ravager/roar1.ogg": "8855447a5c5fe347907ae574495fec645a11a9d1", + "minecraft/sounds/mob/ravager/roar2.ogg": "070b4565691243aa4255810ac4d29c1238d03536", + "minecraft/sounds/mob/ravager/roar3.ogg": "c638b991376f596903f7a6f58adf02240e3ef3fe", + "minecraft/sounds/mob/ravager/roar4.ogg": "b8990fb5454091c22e0cb44377a3d113781b316a", + "minecraft/sounds/mob/ravager/step1.ogg": "9b54f0eb559f983da0d39680bf107572e5525aea", + "minecraft/sounds/mob/ravager/step2.ogg": "3a70cf139a5eaeb68bb595bc33d29ce9f7cb74d8", + "minecraft/sounds/mob/ravager/step3.ogg": "a10f6c006f094ce0206044e20189a6beea38efba", + "minecraft/sounds/mob/ravager/step4.ogg": "01466740b89dababdd58f6477403db5228dd6022", + "minecraft/sounds/mob/ravager/step5.ogg": "701173e8135b69f0731feafd06997b2949d32bf2", + "minecraft/sounds/mob/ravager/stun1.ogg": "f9507b69aac25a8752c88e92533b3bd03bad90cc", + "minecraft/sounds/mob/ravager/stun2.ogg": "a9daf385a56f10ef7cf4ea8181b901b397325524", + "minecraft/sounds/mob/ravager/stun3.ogg": "e9007f25f1595d3289b973d233fd20d40f07fd0c", + "minecraft/sounds/mob/sheep/say1.ogg": "debbd3aa0f42c073f44313d4d8e5b6dccf3b55fa", + "minecraft/sounds/mob/sheep/say2.ogg": "186d4c1b06582149a972becfaf104b47adce497e", + "minecraft/sounds/mob/sheep/say3.ogg": "db4e9084fc98c2cf591704000525ca4c9a4a8a57", + "minecraft/sounds/mob/sheep/shear.ogg": "1349548ded32689a6405b4f3bec19bba6da42d83", + "minecraft/sounds/mob/sheep/step1.ogg": "c71079f0790272d470082ac4f400df31e39e7c4a", + "minecraft/sounds/mob/sheep/step2.ogg": "9dfeee82d2710b84cbc0dec89b2dc857cb8f2521", + "minecraft/sounds/mob/sheep/step3.ogg": "738d3164073aac2f5ad0247287b551b2659041ab", + "minecraft/sounds/mob/sheep/step4.ogg": "6939981d810d79fdda5542d312ef152d94af35e5", + "minecraft/sounds/mob/sheep/step5.ogg": "e44f7cec6df34a303e041247fa1c2017e395b627", + "minecraft/sounds/mob/silverfish/hit1.ogg": "8112d96f4f017bd0fb7d01b1b1167727c78a72b4", + "minecraft/sounds/mob/silverfish/hit2.ogg": "d9b29a53708a15e1fdfd4cfcbb879f36dd30ab65", + "minecraft/sounds/mob/silverfish/hit3.ogg": "fbd17ce3ea0f054c54081c25eca2cc6570ee496a", + "minecraft/sounds/mob/silverfish/kill.ogg": "e22688b99a704b528f438bf70af8a91c47f1d4b1", + "minecraft/sounds/mob/silverfish/say1.ogg": "2c571d88b34724382b12dc367df7195ac03ce468", + "minecraft/sounds/mob/silverfish/say2.ogg": "358b7c6f74475a3496f47fabf5f5c07d31d2bcc4", + "minecraft/sounds/mob/silverfish/say3.ogg": "b8f943d148af90b760a93a03fd4da89427a44986", + "minecraft/sounds/mob/silverfish/say4.ogg": "c2843d6e69e87af69def41ee423488e6aeefdd76", + "minecraft/sounds/mob/silverfish/step1.ogg": "e8501a0d5da86571164009a1f3d5ac9830b3e6c6", + "minecraft/sounds/mob/silverfish/step2.ogg": "135130d76cc42fe7a902960f8a367efb74de57d1", + "minecraft/sounds/mob/silverfish/step3.ogg": "16c08ce6994f0c8bf9a326d14139c83f1c448d2d", + "minecraft/sounds/mob/silverfish/step4.ogg": "f5a8f8189d9286957468eaaf1851727bb4e5064b", + "minecraft/sounds/mob/skeleton/death.ogg": "324bdca11921a46b0c87e61bf7a93047e70eb750", + "minecraft/sounds/mob/skeleton/hurt1.ogg": "6df446a07ce7f7aa292e8eeeab9f96543acd805b", + "minecraft/sounds/mob/skeleton/hurt2.ogg": "f3d328aec8103dc8d9686f2d1251a052fbd8a469", + "minecraft/sounds/mob/skeleton/hurt3.ogg": "816e6dd7c8e080ab8b6197aa46ea9dbb73bf0540", + "minecraft/sounds/mob/skeleton/hurt4.ogg": "c7dfb6697b44e539ee6228e1de125e306f41f339", + "minecraft/sounds/mob/skeleton/say1.ogg": "82a837074ebb499c05a8ec9258190288ddcb5cbe", + "minecraft/sounds/mob/skeleton/say2.ogg": "10a50164901a3145a398850661f133410818e6c5", + "minecraft/sounds/mob/skeleton/say3.ogg": "991a3ca0d15f17adbf7b337057a760dd93888f81", + "minecraft/sounds/mob/skeleton/step1.ogg": "15f33c8815532cf9149d1d4b4b4aca3b432338d0", + "minecraft/sounds/mob/skeleton/step2.ogg": "febd4bf87f845f6bb10ffd8ffa85219052f3396d", + "minecraft/sounds/mob/skeleton/step3.ogg": "71aba3de2e7e5870bd63374a9b9fc4968b7df334", + "minecraft/sounds/mob/skeleton/step4.ogg": "85f10b61a540a9ee014c5c489d17e5bfa57b3d2e", + "minecraft/sounds/mob/slime/attack1.ogg": "c79241eee16ad345aba39b93f6e35d46c679fb25", + "minecraft/sounds/mob/slime/attack2.ogg": "5fb99bb93fb8a88844a7026b5ac3c906f053761e", + "minecraft/sounds/mob/slime/big1.ogg": "eff4b27c4de6d4e6c8fd88adfaf2a7d486ce7886", + "minecraft/sounds/mob/slime/big2.ogg": "791edfe35bc72bb3d836ae1ecd5270d441777844", + "minecraft/sounds/mob/slime/big3.ogg": "5cde6592ea7457b2bc11169b996cc491790608fd", + "minecraft/sounds/mob/slime/big4.ogg": "96fd44f6a57b46075ad2553d2b68263aa5800f31", + "minecraft/sounds/mob/slime/small1.ogg": "b8dac8173742660aa660232450f635945f3fdc1f", + "minecraft/sounds/mob/slime/small2.ogg": "16797c4ad9d87a3ff939a4816d29acb189590dca", + "minecraft/sounds/mob/slime/small3.ogg": "78c8e3e8fc96d3b576eddf850c010b97e5959de4", + "minecraft/sounds/mob/slime/small4.ogg": "98c23d73be7bd53350cd4b1b830705f98465fa03", + "minecraft/sounds/mob/slime/small5.ogg": "e46d37992739a282c1aee677fa874bb5646e947e", + "minecraft/sounds/mob/sniffer/death1.ogg": "7dc7373a3e13a9a1f50b0474859ad9a7220f5f56", + "minecraft/sounds/mob/sniffer/death2.ogg": "7fad73987669bfb30d09e2d71413c86f6fa29435", + "minecraft/sounds/mob/sniffer/digging_stop1.ogg": "f3dc08c87e5469ad9a1be1b7838dc34862fbf0f1", + "minecraft/sounds/mob/sniffer/digging_stop2.ogg": "cd958b8ca43c161009ec7c2f461b36e5c1d897bd", + "minecraft/sounds/mob/sniffer/eat1.ogg": "ee53ef9349efeee12cf2c7a4ac0b721cab72344a", + "minecraft/sounds/mob/sniffer/eat2.ogg": "8c1fb777d4454c17bd13e29a226302de9aa68dba", + "minecraft/sounds/mob/sniffer/eat3.ogg": "c5936d5489a27289c324395d43decd54688b1d64", + "minecraft/sounds/mob/sniffer/happy1.ogg": "5d1c8f6859e75306b17ac3d4f0eab61b686d9b5c", + "minecraft/sounds/mob/sniffer/happy2.ogg": "e6634d3bef5f2b97d86ee3982c063600f3ce5ed3", + "minecraft/sounds/mob/sniffer/happy3.ogg": "8bea2d07bf47cf8f0eba8c4049c394bf3c92f835", + "minecraft/sounds/mob/sniffer/happy4.ogg": "c849cb44037b7f6565c7feb27e11b02897001592", + "minecraft/sounds/mob/sniffer/happy5.ogg": "75cc2290efa602b53fa7dd1698d792e7c8bc0517", + "minecraft/sounds/mob/sniffer/hurt1.ogg": "6a8bd18d9f889734e86146ac8a57b2725df13030", + "minecraft/sounds/mob/sniffer/hurt2.ogg": "09a94e462b5161d4e432a2cf3fe12205a1471690", + "minecraft/sounds/mob/sniffer/hurt3.ogg": "176a42e45e175ba7eb2ad6828d7ec324e27658a9", + "minecraft/sounds/mob/sniffer/idle1.ogg": "0afbcb49885df59aa3c31521b95d17e7dd50fc33", + "minecraft/sounds/mob/sniffer/idle10.ogg": "e0eccc8388223a8ab1e293b1858f95e83d3c7f19", + "minecraft/sounds/mob/sniffer/idle11.ogg": "f323baa2161f9d95fac3b0f07465f53941f87f93", + "minecraft/sounds/mob/sniffer/idle2.ogg": "8ca287259fc74a037044930768dd94b76249d057", + "minecraft/sounds/mob/sniffer/idle3.ogg": "ca7e9465bad9c66a83f20092d59c9a239e41e43f", + "minecraft/sounds/mob/sniffer/idle4.ogg": "231e110bf9287385c59565a2e514bcc09b9eadca", + "minecraft/sounds/mob/sniffer/idle5.ogg": "a4d76d331caf75f0ffc11f2b76f12fbd4f70f932", + "minecraft/sounds/mob/sniffer/idle6.ogg": "bb234a9c051cb4ed4f66900ac9e6b49f26f22dda", + "minecraft/sounds/mob/sniffer/idle7.ogg": "8d2b0c2bcb5f452c9dcd08246733006d56c658bb", + "minecraft/sounds/mob/sniffer/idle8.ogg": "7a7dad3c650ba7e3ba50af91ad0c579c2ddfb0e8", + "minecraft/sounds/mob/sniffer/idle9.ogg": "ce2db416dff051685249d00707e36a3421a11018", + "minecraft/sounds/mob/sniffer/longdig1.ogg": "50fff063cf07332d93f7461e62a4464492d47a15", + "minecraft/sounds/mob/sniffer/longdig2.ogg": "bc040fc717537de51319dac4a77a5312a3bdfbe0", + "minecraft/sounds/mob/sniffer/scenting1.ogg": "c40b35ce47406f220ffa40b4e22fd766149e03ba", + "minecraft/sounds/mob/sniffer/scenting2.ogg": "7c1316769a136a75db6a526ded569c47d1e12e28", + "minecraft/sounds/mob/sniffer/scenting3.ogg": "a010bf6e310588699f491f326d72c651f1b7d0e5", + "minecraft/sounds/mob/sniffer/searching1.ogg": "abaf3bb7e717965cdefe19e08628031f7b478f84", + "minecraft/sounds/mob/sniffer/searching2.ogg": "25a7fbeeb39299a538011e919297775b390f4529", + "minecraft/sounds/mob/sniffer/searching3.ogg": "1d2384d4bd89270212a4ceef494e9aec4561d7e9", + "minecraft/sounds/mob/sniffer/searching4.ogg": "43c74f4bceca88a5eedb0e5ba6e2ce4946119068", + "minecraft/sounds/mob/sniffer/searching5.ogg": "eeebab297d38f8dbc733267c115f97d9f9e34a10", + "minecraft/sounds/mob/sniffer/searching6.ogg": "eee21f52dd32033c88ad523b98a6315518cfe0b5", + "minecraft/sounds/mob/sniffer/sniffing1.ogg": "40a031654a1b4b18777b7cd188f8567d7b5c98a1", + "minecraft/sounds/mob/sniffer/sniffing2.ogg": "755e69980dc931bb4883f3418a09d5ee7ed51ee4", + "minecraft/sounds/mob/sniffer/sniffing3.ogg": "688363e00caa323a19d41b7d4dbb4b7d60414eae", + "minecraft/sounds/mob/sniffer/step1.ogg": "c286b600d5c46356f53f2d44d6416e036704c933", + "minecraft/sounds/mob/sniffer/step2.ogg": "5db24715e858119af23a6d4ec8a2e6384b0de100", + "minecraft/sounds/mob/sniffer/step3.ogg": "551080f43d0a4d6f2cda17a0b79bd29faa0446e0", + "minecraft/sounds/mob/sniffer/step4.ogg": "b2a2874f6a4cfc613655bd5d885d21f6e4d09632", + "minecraft/sounds/mob/sniffer/step5.ogg": "4eac11b10e9585b5b549c111f0a46011269886c9", + "minecraft/sounds/mob/sniffer/step6.ogg": "b91c608071dcd107a053cc4675f5fa8f58078edc", + "minecraft/sounds/mob/spider/death.ogg": "eec5d186206792d2c650e1dbaa9c8796c56d2ea3", + "minecraft/sounds/mob/spider/say1.ogg": "8a687fb7ea955d58a8e758a7e6ca8147c48dd477", + "minecraft/sounds/mob/spider/say2.ogg": "0d61e1a8550820d63881a1cfb333c4dda042e86a", + "minecraft/sounds/mob/spider/say3.ogg": "8cb03a82e064925b02b9f89b9b2a492feaeaa117", + "minecraft/sounds/mob/spider/say4.ogg": "ceede14b6b28de916432ab1aa7b1de6b50c374fb", + "minecraft/sounds/mob/spider/step1.ogg": "a0cffda2225b6daff48e5408cedf2ba6deb50e28", + "minecraft/sounds/mob/spider/step2.ogg": "f24f2b189395a15f9fe65e059519a781c1fa42b0", + "minecraft/sounds/mob/spider/step3.ogg": "31a036700ec392bc377852ca1654224161bea132", + "minecraft/sounds/mob/spider/step4.ogg": "9e3191b2fc9df76169aed567f53c535b2f2194da", + "minecraft/sounds/mob/stray/convert1.ogg": "dfb63b5d98fc6f17aed98dcd68aca39052ae1ff4", + "minecraft/sounds/mob/stray/convert2.ogg": "c67fe48974aeec012fc4c3bd21f8ab307b890811", + "minecraft/sounds/mob/stray/convert3.ogg": "a6706996801caa6b9d5dadd13204df9516d4ca87", + "minecraft/sounds/mob/stray/death1.ogg": "a016fd59de9ae9df7573041ac8460bffb543265f", + "minecraft/sounds/mob/stray/death2.ogg": "a38b8c5721ba5b13547de6d8f8101a3e33846c0f", + "minecraft/sounds/mob/stray/hurt1.ogg": "803e8806639566aaaf0c4fe4ae76103b19646fcc", + "minecraft/sounds/mob/stray/hurt2.ogg": "f321c0d7ab19678573ccc95bb28a3583269e0433", + "minecraft/sounds/mob/stray/hurt3.ogg": "ccec8bf252bd7b0ee27be14ffa45b552f4fc4f66", + "minecraft/sounds/mob/stray/hurt4.ogg": "63907313270d5d87a92111082e1a85f394153ace", + "minecraft/sounds/mob/stray/idle1.ogg": "2d0296d2a048fe41c2ea5c1882f569337a7af698", + "minecraft/sounds/mob/stray/idle2.ogg": "19120c79ca4607c49e15e108ef7eade8d9fbf3f4", + "minecraft/sounds/mob/stray/idle3.ogg": "07f0c92bc179f58ceeeedfef2bc2ed76920cf99d", + "minecraft/sounds/mob/stray/idle4.ogg": "0a17697bd8ea22449a30c20d233bf801945915f4", + "minecraft/sounds/mob/stray/step1.ogg": "cbde9decd88888768847ab56b8e8e7be29b549b7", + "minecraft/sounds/mob/stray/step2.ogg": "55c3b12c57345802fe55fa7010a03c6861de94cf", + "minecraft/sounds/mob/stray/step3.ogg": "d54773d09778e22a0c14e7913e2fbdf14a9b5429", + "minecraft/sounds/mob/stray/step4.ogg": "bcec1afc6bd7eb00ecf3706aad798726414b6ee6", + "minecraft/sounds/mob/strider/death1.ogg": "14031867b855e073c024cdbc3f21b9c25be7d007", + "minecraft/sounds/mob/strider/death2.ogg": "7c7ad950734bf39a46092b1d9650c1255fdbfdd3", + "minecraft/sounds/mob/strider/death3.ogg": "63d38dff7a8f122fd7b329b2a8d346cd9974d764", + "minecraft/sounds/mob/strider/death4.ogg": "9f67b65cc7b88859764467476504cb25d03f89fc", + "minecraft/sounds/mob/strider/eat1.ogg": "27be6264413a59c1a574d4ddf2ae01053efa48d2", + "minecraft/sounds/mob/strider/eat2.ogg": "a9bc27e80ed80eb61b9a505b52fc9efebd634453", + "minecraft/sounds/mob/strider/eat3.ogg": "bc35f9cb62ffb1ce4181c65179ebe3f53e3575f8", + "minecraft/sounds/mob/strider/happy1.ogg": "94c8a7041b56af194005108e6863f8faf7bc508b", + "minecraft/sounds/mob/strider/happy2.ogg": "7aa19be91e3a5608fab943f02123833db09a058a", + "minecraft/sounds/mob/strider/happy3.ogg": "339a4ca7e66f34c7fa5f4de7198ee56bd6987ede", + "minecraft/sounds/mob/strider/happy4.ogg": "0f9105b4b2010d8a3376d101efa024904b39d04c", + "minecraft/sounds/mob/strider/happy5.ogg": "e0c39adaab20fa66a32d93316c06fb2a1eeab98e", + "minecraft/sounds/mob/strider/hurt1.ogg": "948e5c119ba5fa1923b76b03a4d80292b8b58b5d", + "minecraft/sounds/mob/strider/hurt2.ogg": "e19398687322f38946201580a929be39e10b309e", + "minecraft/sounds/mob/strider/hurt3.ogg": "c130bec73d7395b44bb9311ab0176f97512861b3", + "minecraft/sounds/mob/strider/hurt4.ogg": "6f619afea6bdaa066c29c0fd782e49e4e1a2c2fe", + "minecraft/sounds/mob/strider/idle1.ogg": "167633537d3c25326d108feb76491f266d55b969", + "minecraft/sounds/mob/strider/idle2.ogg": "bc7a9788a740e46a10237bad9c95b94d777adf33", + "minecraft/sounds/mob/strider/idle3.ogg": "c650f698e8baad90404da5eec4a26b70380c3551", + "minecraft/sounds/mob/strider/idle4.ogg": "15a1fc23c9bb50ed2a5476b96dd70868dc6fe365", + "minecraft/sounds/mob/strider/idle5.ogg": "b5243953e6415eadf03b735e12187736eff4bedf", + "minecraft/sounds/mob/strider/idle6.ogg": "63b00435a6086c270b8c47567f2f489d122ce5a3", + "minecraft/sounds/mob/strider/retreat1.ogg": "beb7a9ec0d0e6f6d5bf40f90b563f0bec8b1f4d9", + "minecraft/sounds/mob/strider/retreat2.ogg": "493cce04bae5c64ae11fb9f067c9ccb9b1ad3067", + "minecraft/sounds/mob/strider/retreat3.ogg": "7ff23cbba45f0458df09d95f7aed7c988802facf", + "minecraft/sounds/mob/strider/retreat4.ogg": "c22bf2b418d0ba99f79cb97a9bf86b68904e3096", + "minecraft/sounds/mob/strider/retreat5.ogg": "bb16dc8979255140a90592700b2b3d82c30a4e97", + "minecraft/sounds/mob/strider/step1.ogg": "091eb6ab91298d4ca5629d7dc75e340279ce090f", + "minecraft/sounds/mob/strider/step2.ogg": "81c7f5b93526c8cd970c8eca1248d45d7bd0e85e", + "minecraft/sounds/mob/strider/step3.ogg": "7b017560e2db27bea5eb7706a63fc30064e8e425", + "minecraft/sounds/mob/strider/step4.ogg": "eb8741e8796d74b128ee0692e583f18e6128efe6", + "minecraft/sounds/mob/strider/step5.ogg": "d61e0d09c8c6b4ae019f790b460bf7c86a360ba5", + "minecraft/sounds/mob/strider/step_lava1.ogg": "41ea11e04e24771a43a5cc0352321d18e88cc1ed", + "minecraft/sounds/mob/strider/step_lava2.ogg": "8f7cf140dac3cb400ccaacaef1fc8b2fa9c181c9", + "minecraft/sounds/mob/strider/step_lava3.ogg": "3c0464ed74b4fd0697f913420fa1839cf3298dd3", + "minecraft/sounds/mob/strider/step_lava4.ogg": "8409d6b888dfde69412f0b24208d174511c347d0", + "minecraft/sounds/mob/strider/step_lava5.ogg": "ed038e3fa6170bb1bef598e1e7c38bebf6fa591f", + "minecraft/sounds/mob/strider/step_lava6.ogg": "b6e8682f1b6276c1e81c5af3516613a874c5c532", + "minecraft/sounds/mob/tadpole/death1.ogg": "f3ea2e58d1ae9e3aab8512861ca8eafe9ae7e059", + "minecraft/sounds/mob/tadpole/death2.ogg": "d7c15b87710a61f9c202570078ed2b25df090955", + "minecraft/sounds/mob/tadpole/hurt1.ogg": "ff59d8e9e10ed72b0cb83cf4af2b49b59205485d", + "minecraft/sounds/mob/tadpole/hurt2.ogg": "df142866d683b20804347c08423782bd32db9155", + "minecraft/sounds/mob/tadpole/hurt3.ogg": "2a2fcf485744434e5a047066316768160f4a0b93", + "minecraft/sounds/mob/tadpole/hurt4.ogg": "1929f683bcfb0066319ba09cb03f5d00987d7017", + "minecraft/sounds/mob/turtle/armor.ogg": "ae40c4b39e59cfc7152b7ff647150e7a5f184bef", + "minecraft/sounds/mob/turtle/baby/death1.ogg": "f18324e5496d773fa3080a77284985e2d6562d49", + "minecraft/sounds/mob/turtle/baby/death2.ogg": "0ec6ace10121c4fbca90d9aa756d0637f0f482a8", + "minecraft/sounds/mob/turtle/baby/egg_hatched1.ogg": "74881aa5bd8452cc167d86ee09382fc5919d0207", + "minecraft/sounds/mob/turtle/baby/egg_hatched2.ogg": "6ae10cffc71848dd5bf4a28d2134f446a7d7603d", + "minecraft/sounds/mob/turtle/baby/egg_hatched3.ogg": "5a12a9ce0f818640c7ef49832c13266edd27207c", + "minecraft/sounds/mob/turtle/baby/hurt1.ogg": "52c0af0dd09fc812e8c99fd7a98f595bec2868db", + "minecraft/sounds/mob/turtle/baby/hurt2.ogg": "32e6ef3cbceaa79dfb5ba09643eed25ee2f5e4d6", + "minecraft/sounds/mob/turtle/baby/shamble1.ogg": "129abf589045d3abc35f64b286ee8052795bb814", + "minecraft/sounds/mob/turtle/baby/shamble2.ogg": "12e4e9f0d13c8e891a87ffadf86f333918008972", + "minecraft/sounds/mob/turtle/baby/shamble3.ogg": "b2c7e62c6e45bc0743c6ee0e8a2d127a23c290bf", + "minecraft/sounds/mob/turtle/baby/shamble4.ogg": "5c83631b528231825892d266de71eda05fcaae79", + "minecraft/sounds/mob/turtle/death1.ogg": "ce6bae8ef864dfac0f666120b8e2c8cccf0f7a2f", + "minecraft/sounds/mob/turtle/death2.ogg": "fd1c4105ae5f14595ee6dc230594740d8d809f0b", + "minecraft/sounds/mob/turtle/death3.ogg": "387af78d9a3c17f3f09a42c7dceef2fa4f2cd161", + "minecraft/sounds/mob/turtle/egg/drop_egg1.ogg": "708a8039622bda40de1997f4d0410e6729d964d0", + "minecraft/sounds/mob/turtle/egg/drop_egg2.ogg": "a6053f9a5655e692555db6b0102cace489c86c2c", + "minecraft/sounds/mob/turtle/egg/egg_break1.ogg": "e15a8f7fdce4175e05fe4799f5bd28468aedfa8c", + "minecraft/sounds/mob/turtle/egg/egg_break2.ogg": "52b667e0cd5778872f8523cb5ce486b04c6391ef", + "minecraft/sounds/mob/turtle/egg/egg_crack1.ogg": "3329207b08cac85f3a990757027fc248e4d23b06", + "minecraft/sounds/mob/turtle/egg/egg_crack2.ogg": "d18dd70bd8f855c5530f6f36287c31ecbd026147", + "minecraft/sounds/mob/turtle/egg/egg_crack3.ogg": "63eddc1acc4729bb60076fae24e702689ef91e97", + "minecraft/sounds/mob/turtle/egg/egg_crack4.ogg": "96a84af9fad5619657dd5ea6995888f95144ae10", + "minecraft/sounds/mob/turtle/egg/egg_crack5.ogg": "1934a01d11c9f49124ccc57772805011b8aa512a", + "minecraft/sounds/mob/turtle/egg/jump_egg1.ogg": "f7e2e72cde7a1843375ec84428e8ec23e7e8f0da", + "minecraft/sounds/mob/turtle/egg/jump_egg2.ogg": "5f38b63f4b9f7ce7640db73b6b9be4131629626e", + "minecraft/sounds/mob/turtle/egg/jump_egg3.ogg": "fd27e5e8ab5f65e279180333ff6b5d952f639d62", + "minecraft/sounds/mob/turtle/egg/jump_egg4.ogg": "ddd41cdbf69a8fd9acdc36b1267735f8eb3712de", + "minecraft/sounds/mob/turtle/hurt1.ogg": "c23a02b5b7a068096d9010236a89abe2fd277fb6", + "minecraft/sounds/mob/turtle/hurt2.ogg": "94e8088b50454d25414f9ac63cc5364b7812f2e3", + "minecraft/sounds/mob/turtle/hurt3.ogg": "fd72bc03228180b5397a76cb0f2c93852a40ba4d", + "minecraft/sounds/mob/turtle/hurt4.ogg": "0f3189f7ac0807a289e2118c18e6c34c0d3f235d", + "minecraft/sounds/mob/turtle/hurt5.ogg": "ebf8a65ba44449f468329c2388908fc237a91b38", + "minecraft/sounds/mob/turtle/idle1.ogg": "9015a049f9a649eb3cb3f9a8e36cdb130ed78a2d", + "minecraft/sounds/mob/turtle/idle2.ogg": "4d659b75f4ee6440d784c212c236a213b70370c2", + "minecraft/sounds/mob/turtle/idle3.ogg": "8595e9f6b5eb1c0d646ced84941662e8c9a2d003", + "minecraft/sounds/mob/turtle/swim/swim1.ogg": "4df04261a31036a117c1e0b6a29586491cdd74f1", + "minecraft/sounds/mob/turtle/swim/swim2.ogg": "b0386400d7a47f087313bb7924b75a579dd59e32", + "minecraft/sounds/mob/turtle/swim/swim3.ogg": "3d1a5c2a922aca9957398b9ab3765c00b3309033", + "minecraft/sounds/mob/turtle/swim/swim4.ogg": "f0c27e02d0ba89942516f75439ef211264f2e997", + "minecraft/sounds/mob/turtle/swim/swim5.ogg": "c7d7f137752824568b828e45574f7bdbdba12cac", + "minecraft/sounds/mob/turtle/walk1.ogg": "3914700472b796e27c02fb68c6d4ff4bf91ac781", + "minecraft/sounds/mob/turtle/walk2.ogg": "1e3ec649e4a3ceb42ed7fd278c99fba3ef6ee8e0", + "minecraft/sounds/mob/turtle/walk3.ogg": "118c938f87c868ba05a3dca13b67f738ac84a1c9", + "minecraft/sounds/mob/turtle/walk4.ogg": "7a968d72e42dc51d7c1127983ea4b3e5b8d4bfe8", + "minecraft/sounds/mob/turtle/walk5.ogg": "19325ee6c15df1a211c5d41b135098bf49239dd0", + "minecraft/sounds/mob/vex/charge1.ogg": "e4208f313e7c1431d9e04c80974fa4ed4a783275", + "minecraft/sounds/mob/vex/charge2.ogg": "a87243e6908907bfc9b2493e1bc0fd52d551045e", + "minecraft/sounds/mob/vex/charge3.ogg": "8248ad6190c073991d504dabe7e8e115d0cde89e", + "minecraft/sounds/mob/vex/death1.ogg": "d33b4c2a9bcaa175655a69f9b0a425bf1c136b71", + "minecraft/sounds/mob/vex/death2.ogg": "032dab45995981f555619bfbd8ff80a0fc5f3d91", + "minecraft/sounds/mob/vex/hurt1.ogg": "909ded09c154faea85e71d5456921be64cbdcd49", + "minecraft/sounds/mob/vex/hurt2.ogg": "a0d9187ca37ac82a7e11b0564882e87762bca51c", + "minecraft/sounds/mob/vex/idle1.ogg": "7a13ec82ec28b2adf2424a415ad5bcb67bbc4ccd", + "minecraft/sounds/mob/vex/idle2.ogg": "c7ce80fe971fc4644d149da5bf4756181468ed0e", + "minecraft/sounds/mob/vex/idle3.ogg": "aa745efd1abcd1fa4c3b660d7e386f62df11cb7b", + "minecraft/sounds/mob/vex/idle4.ogg": "6eb62a07da842363c903f38c3a67e520ceaa097f", + "minecraft/sounds/mob/villager/death.ogg": "d14ad77876e82f51c5953c7403c6fec448881df5", + "minecraft/sounds/mob/villager/haggle1.ogg": "5aeb216fb57aee98f9f6b1dca27cf22c259586c1", + "minecraft/sounds/mob/villager/haggle2.ogg": "4cc4b47a09fbcafe9e7715255acff0f79772c591", + "minecraft/sounds/mob/villager/haggle3.ogg": "862cb429acb77fd01e647d28f6437f21e4ac3ebd", + "minecraft/sounds/mob/villager/hit1.ogg": "f95ca0ad69f3111113542f115cc1b48f656129ca", + "minecraft/sounds/mob/villager/hit2.ogg": "3c1c1c3fcde317846d8099bf419f7eca455e8724", + "minecraft/sounds/mob/villager/hit3.ogg": "472cc45f50a7baf721e4af27d30c8aabd64ebb35", + "minecraft/sounds/mob/villager/hit4.ogg": "864a2d0a35e699be0a89fb1c9425a405f825a970", + "minecraft/sounds/mob/villager/idle1.ogg": "fd2a15ba3147d954e840e76bffe5ffdd89a07a51", + "minecraft/sounds/mob/villager/idle2.ogg": "200020d0b7d783b393e0bda9ac508a3f0eed1dcc", + "minecraft/sounds/mob/villager/idle3.ogg": "be7e1c6b7a0ea50bf397e828f91359e61cff9a5e", + "minecraft/sounds/mob/villager/no1.ogg": "323c80e65c321928f08ca320b1f8eb4b95acfa3b", + "minecraft/sounds/mob/villager/no2.ogg": "f0621ec9192760a9ab4a97f279613b05320092b4", + "minecraft/sounds/mob/villager/no3.ogg": "dbc7170260fd83dcc1e35ef352b0ab2667711b64", + "minecraft/sounds/mob/villager/yes1.ogg": "284933d50341876997cbc95b64864b6abab113af", + "minecraft/sounds/mob/villager/yes2.ogg": "efa1a5748620e66ca12e12c8ed9ae99a0dc10221", + "minecraft/sounds/mob/villager/yes3.ogg": "23f3506cc009ae94eee3bb87b318abeec9d44fc7", + "minecraft/sounds/mob/vindication_illager/celebrate1.ogg": "ec9c805cef9f502a8f6bae558c7ddaa5d202be8b", + "minecraft/sounds/mob/vindication_illager/celebrate2.ogg": "1eaf3b9c3bdc23af573d7a46c60b0b2e5ad84f12", + "minecraft/sounds/mob/vindication_illager/death1.ogg": "e864e8ed9a756b9ce4fcf592299579af86f20935", + "minecraft/sounds/mob/vindication_illager/death2.ogg": "8da0afea2dcda4ab840e962e0e1616b7c35da228", + "minecraft/sounds/mob/vindication_illager/hurt1.ogg": "8d22f72686dcf0e857e35620b7a2a44624471f3a", + "minecraft/sounds/mob/vindication_illager/hurt2.ogg": "b9361288a03fad98053bf519ea7eced31e072099", + "minecraft/sounds/mob/vindication_illager/hurt3.ogg": "2e8e4851fce57c409245a321827275f390158f89", + "minecraft/sounds/mob/vindication_illager/idle1.ogg": "786f127c0584048be4308d9722d486b983b927ba", + "minecraft/sounds/mob/vindication_illager/idle2.ogg": "7daa6b5522fb37adf0ef03065ba93bcdec96668a", + "minecraft/sounds/mob/vindication_illager/idle3.ogg": "774f5b188dfc3e1429ed7e4c95c15ad1863efb9b", + "minecraft/sounds/mob/vindication_illager/idle4.ogg": "f1c8a183dba71fbb340e5a6af0db5cccb2079bfa", + "minecraft/sounds/mob/vindication_illager/idle5.ogg": "ea903c158603f54ca2f72078ff77d0572a7dbb8e", + "minecraft/sounds/mob/wandering_trader/appeared1.ogg": "c1a8ccb4210c8f6cd1c2bc0766097b0de355b516", + "minecraft/sounds/mob/wandering_trader/appeared2.ogg": "81adad34862b8f9e9479039a04aca78ddd85206c", + "minecraft/sounds/mob/wandering_trader/death.ogg": "af31586c0a6b38bbf027309b696d560bbdb80c36", + "minecraft/sounds/mob/wandering_trader/disappeared1.ogg": "d25a30f6055cb1063940dcc18ca098b9778200d4", + "minecraft/sounds/mob/wandering_trader/disappeared2.ogg": "2d7296dbf7f097ea03fdbff5f698634a3ded650e", + "minecraft/sounds/mob/wandering_trader/drink_milk1.ogg": "45e404755af7eeed3d222bbc8a30782f0c529616", + "minecraft/sounds/mob/wandering_trader/drink_milk2.ogg": "72c4fd7a2a9d27b3191c512980d8bea39d3ce68c", + "minecraft/sounds/mob/wandering_trader/drink_milk3.ogg": "2c39bcfd669f132ea1e14f4ce20c310e94440a69", + "minecraft/sounds/mob/wandering_trader/drink_milk4.ogg": "5a00e3f6b3f6124ff473f27fa28f35890c2ffd54", + "minecraft/sounds/mob/wandering_trader/drink_milk5.ogg": "bab935754ea614fb07824020a80b332d6dd24537", + "minecraft/sounds/mob/wandering_trader/drink_potion.ogg": "63383499c144feb574238023ec70d64685608b7c", + "minecraft/sounds/mob/wandering_trader/haggle1.ogg": "121f572e8566c4dabca914ac78cb0a3d2c6e5ae8", + "minecraft/sounds/mob/wandering_trader/haggle2.ogg": "750b67e390ddb8d91e158e6f18eb7cf88b64af12", + "minecraft/sounds/mob/wandering_trader/haggle3.ogg": "853aba2cd3609300a4f15fb4f9efbaac5f05e9e8", + "minecraft/sounds/mob/wandering_trader/hurt1.ogg": "b6acecebe32d8dcc80075de586df9cac260e95aa", + "minecraft/sounds/mob/wandering_trader/hurt2.ogg": "443bb8b2c22f2137e17c0e1df188da31c51b4c7c", + "minecraft/sounds/mob/wandering_trader/hurt3.ogg": "9b7fdf9628c04364222af0c6d339a7494679afd0", + "minecraft/sounds/mob/wandering_trader/hurt4.ogg": "007b6d9297e842b63ac7b876b38916212a3c9b51", + "minecraft/sounds/mob/wandering_trader/idle1.ogg": "ee1041e7a3737704a17891c7860701e6d3b4c980", + "minecraft/sounds/mob/wandering_trader/idle2.ogg": "b00ff5869490ccf7b1517413f4c7783eaf48191c", + "minecraft/sounds/mob/wandering_trader/idle3.ogg": "78ec27fadbb62589a2c277c1180803753eabdadc", + "minecraft/sounds/mob/wandering_trader/idle4.ogg": "5f78203be17288b5cdc2b5176280e8312f8e0b89", + "minecraft/sounds/mob/wandering_trader/idle5.ogg": "8156895b48beeeda17bd215371e7be2859c9bc66", + "minecraft/sounds/mob/wandering_trader/no1.ogg": "bb6dbc8a6a2c9ef7ea9c053bdd19344015f518f5", + "minecraft/sounds/mob/wandering_trader/no2.ogg": "358f72d0265cd98cca578525e61544a02e2fa392", + "minecraft/sounds/mob/wandering_trader/no3.ogg": "19fcc8ebf54d0821d0f88a135f19a83cc219dfa9", + "minecraft/sounds/mob/wandering_trader/no4.ogg": "238dd5aa82ef8779be1a443b953279b871e8b8e6", + "minecraft/sounds/mob/wandering_trader/no5.ogg": "67e2b7f1f5e48da3dc7aae2cc7e6a48cffd1c7a7", + "minecraft/sounds/mob/wandering_trader/reappeared1.ogg": "3c624a2b3db73f3a6dd9a0548a09ad4b7e5255a6", + "minecraft/sounds/mob/wandering_trader/reappeared2.ogg": "fe9145d6352ff30799568436e7b6d0ea2b05afb7", + "minecraft/sounds/mob/wandering_trader/yes1.ogg": "622440e109b6fd67dcbb33a8210a9ab4f494d8b3", + "minecraft/sounds/mob/wandering_trader/yes2.ogg": "3d23df1c4aa63856b669ca18c27c240d346e7665", + "minecraft/sounds/mob/wandering_trader/yes3.ogg": "d3881122aa7b811e96a66b88a59f5c2b0d32c436", + "minecraft/sounds/mob/wandering_trader/yes4.ogg": "92e577c282bb0f3afbcea470fde1c8292a4e098b", + "minecraft/sounds/mob/warden/agitated_1.ogg": "612124534b759f5db4832c9f96d371347579f595", + "minecraft/sounds/mob/warden/agitated_2.ogg": "ddc5431b2332e9a027e733f09c123d1d7ea53d86", + "minecraft/sounds/mob/warden/agitated_3.ogg": "628607524d7e165cebb597dca371dd117ccafcc7", + "minecraft/sounds/mob/warden/agitated_4.ogg": "84ac333e5b28bfe2d75461071a97736a05a98ae1", + "minecraft/sounds/mob/warden/agitated_5.ogg": "e8f490ef8c34a94fa5b663f2ca3d45a7005d809b", + "minecraft/sounds/mob/warden/agitated_6.ogg": "d143707f07b3c5cae2bb499fd9e1e3f48ab1d2fc", + "minecraft/sounds/mob/warden/ambient_1.ogg": "ed3f57eae7abddc41f115384387ff6c24ded1996", + "minecraft/sounds/mob/warden/ambient_10.ogg": "5e10a7d73e89ddee95ca195b3642ac225ecc8340", + "minecraft/sounds/mob/warden/ambient_11.ogg": "7dd001cb691c087eb1d1771bfca14d100b8f0d76", + "minecraft/sounds/mob/warden/ambient_12.ogg": "26be2bf85193d707c93ea3440775a061e002df8b", + "minecraft/sounds/mob/warden/ambient_2.ogg": "1ae2ea9397f8ed322f169d020e629fb2ed77b8ba", + "minecraft/sounds/mob/warden/ambient_3.ogg": "3eaad2c803380279f22157159b710e59c658bf46", + "minecraft/sounds/mob/warden/ambient_4.ogg": "715e5a4bf5be5c8c4a7287f9add531b0672989cc", + "minecraft/sounds/mob/warden/ambient_5.ogg": "fcc0ef464d25f5a9ab5e0c8bfb28742cb4af4c66", + "minecraft/sounds/mob/warden/ambient_6.ogg": "30f01019a58d311e86c90b50fd4797a1224dc856", + "minecraft/sounds/mob/warden/ambient_7.ogg": "03d52bb8840398d21e8ecdb4e61c7acef69fef0a", + "minecraft/sounds/mob/warden/ambient_8.ogg": "b1208f6c3156a9f65c1063759392b181cb83d2e5", + "minecraft/sounds/mob/warden/ambient_9.ogg": "ec1c5a40c16616e5c140034055954bf7cdd0bf47", + "minecraft/sounds/mob/warden/angry_1.ogg": "da5bbadb46099260439283e7d170d1b1e2440756", + "minecraft/sounds/mob/warden/angry_2.ogg": "8bba51d3ece2194b3d080df7b1d5c0d40895cf10", + "minecraft/sounds/mob/warden/angry_3.ogg": "04ab8fe1e63614fb78fae031043abb111936cab7", + "minecraft/sounds/mob/warden/angry_4.ogg": "72a578bf5d3cde7c972c3a9a3bd9f56f65bfd5e1", + "minecraft/sounds/mob/warden/angry_5.ogg": "eb81b977ecf8575f4216ca9d50c4a1af7a1b5c9c", + "minecraft/sounds/mob/warden/angry_6.ogg": "2276ad86ce09eb7c689658432735464957dcb48e", + "minecraft/sounds/mob/warden/attack_impact_1.ogg": "93d5a2d83f36efd582d31630801cd96c70c60715", + "minecraft/sounds/mob/warden/attack_impact_2.ogg": "ce9a43bef1d1e9e42b60aa4323d32e31add4b1c0", + "minecraft/sounds/mob/warden/death_1.ogg": "d32360539026017d28d644430b246c0db61145f5", + "minecraft/sounds/mob/warden/death_2.ogg": "23f49bc78c831d49b59470801e8edada3c366dc6", + "minecraft/sounds/mob/warden/dig.ogg": "a21e17aa9da8aae598db112329ef0e08cd272b77", + "minecraft/sounds/mob/warden/emerge.ogg": "1dc49c965c586bdfe2f8d990c141384a47dcda44", + "minecraft/sounds/mob/warden/heartbeat_1.ogg": "f730e1ccb1f3d425232bd0e78697e69fd44b0ce5", + "minecraft/sounds/mob/warden/heartbeat_2.ogg": "fd92259b2665792127b52ba95e69dc8e017868ec", + "minecraft/sounds/mob/warden/heartbeat_3.ogg": "3f716fe047e7ed8d751d01f7f57f65238a55c992", + "minecraft/sounds/mob/warden/heartbeat_4.ogg": "03ef08c7b003a62766495030acc60ac475327582", + "minecraft/sounds/mob/warden/hurt_1.ogg": "48d5f752564c3f6b9f04157f1faf134a831ee1c9", + "minecraft/sounds/mob/warden/hurt_2.ogg": "0897e691085bce82bdbcbcc49ec79753f7273cf5", + "minecraft/sounds/mob/warden/hurt_3.ogg": "31c63f04424414dae60aea291ca7d5b977001abb", + "minecraft/sounds/mob/warden/hurt_4.ogg": "42c028822ba7e843f53c53762f6586e654594d57", + "minecraft/sounds/mob/warden/listening_1.ogg": "68b63b77ca9c7171609a39e2c292cf50fd663fb4", + "minecraft/sounds/mob/warden/listening_2.ogg": "9620bd7894626119808276d90597dafcb4006c39", + "minecraft/sounds/mob/warden/listening_3.ogg": "1a9fd62fe3699710ca3aa2c9188a44a4f1fecf90", + "minecraft/sounds/mob/warden/listening_4.ogg": "53063778ac8449c79e42198a1f3b63c68f6c9069", + "minecraft/sounds/mob/warden/listening_5.ogg": "6de302c5b1fdc9607485f64640b905e37642d86b", + "minecraft/sounds/mob/warden/listening_angry_1.ogg": "97116f4bf1df22a78ed414fce32dfe56cadded19", + "minecraft/sounds/mob/warden/listening_angry_2.ogg": "0d5d634a492ad420a3486128b4ea65e231312eaa", + "minecraft/sounds/mob/warden/listening_angry_3.ogg": "3d14cf8f25bd73f558f4e016fedfe26d07067b33", + "minecraft/sounds/mob/warden/listening_angry_4.ogg": "7dad3b60796c4e8c15c9c01c947f2cc7163ded23", + "minecraft/sounds/mob/warden/listening_angry_5.ogg": "f8dda0060147884a14f6c871496559571dc0fa22", + "minecraft/sounds/mob/warden/nearby_close_1.ogg": "882756c7761f4470cfb92b1b1f3597fb4bcf3e9f", + "minecraft/sounds/mob/warden/nearby_close_2.ogg": "17ca16026e5556f1ff2e48d2ab1332c96c914641", + "minecraft/sounds/mob/warden/nearby_close_3.ogg": "8bd88654359722dba0fc6b02f4d6b9216695ef70", + "minecraft/sounds/mob/warden/nearby_close_4.ogg": "22f31c6708e3ea1e5b2de087684bb02eb446c8ac", + "minecraft/sounds/mob/warden/nearby_closer_1.ogg": "20981456d652bbcdddaf7ed10fce0d42ad0f8379", + "minecraft/sounds/mob/warden/nearby_closer_2.ogg": "40082fd467ff5e7cfb389c4ca862939a15db7e69", + "minecraft/sounds/mob/warden/nearby_closer_3.ogg": "b0e38d02270299aea7d65853662456bb1640a5d5", + "minecraft/sounds/mob/warden/nearby_closest_1.ogg": "1fa974f5957de452440d6bfa8f9aa112bc96cd9c", + "minecraft/sounds/mob/warden/nearby_closest_2.ogg": "b43eda372b248f213e11aab9f2ab24dc996d8caf", + "minecraft/sounds/mob/warden/nearby_closest_3.ogg": "86745fd0223b24d6e7a42dc84f409fa6908a7cff", + "minecraft/sounds/mob/warden/roar_1.ogg": "6a1ae356c74c9fb89af87a9ac6d313ff4363fb2a", + "minecraft/sounds/mob/warden/roar_2.ogg": "9ee7ddc0aa7a89321fe1f9c7a7eb3a4c9c11c8c9", + "minecraft/sounds/mob/warden/roar_3.ogg": "54c95e9185616c2db606e8af71949fa56d6c6a9a", + "minecraft/sounds/mob/warden/roar_4.ogg": "58766a0b926a32c728533ca4ba0d44c3a6221f4d", + "minecraft/sounds/mob/warden/roar_5.ogg": "2d454a4d3cb18e736aecaa4c00298085ded913e3", + "minecraft/sounds/mob/warden/sniff_1.ogg": "3257ff8dc891c52a342b60e0b7624bae88379e54", + "minecraft/sounds/mob/warden/sniff_2.ogg": "3c98528d4afa4af1201e4bf7dece20cc382835cd", + "minecraft/sounds/mob/warden/sniff_3.ogg": "06045c750b32298bd794c046f087005750bc2d58", + "minecraft/sounds/mob/warden/sniff_4.ogg": "9cd27061e6924c970ebd737cf5bea17778d4b42e", + "minecraft/sounds/mob/warden/sonic_boom1.ogg": "2f812473b307c7586e3760ed8c4b800b8802e2c7", + "minecraft/sounds/mob/warden/sonic_boom2.ogg": "de72462d4723182ceed3fdc86b87b2aab912b812", + "minecraft/sounds/mob/warden/sonic_boom3.ogg": "6ed9e10ed18f497d4b1c5e8f26af748bcb46b9fe", + "minecraft/sounds/mob/warden/sonic_boom4.ogg": "2a1f98cfe05895f6ea959e00df12247bbe5dce6a", + "minecraft/sounds/mob/warden/sonic_charge1.ogg": "5bf38da0a281f7f9f0db9109f2155e4484abe404", + "minecraft/sounds/mob/warden/sonic_charge2.ogg": "1f6882f0cafa10e5839b202503d5db141c835766", + "minecraft/sounds/mob/warden/sonic_charge3.ogg": "7ce06a52ad2c364f73b37b367e7392acc8454192", + "minecraft/sounds/mob/warden/sonic_charge4.ogg": "648c1d7f3790bdb5c95252149f0405896b9e3144", + "minecraft/sounds/mob/warden/step_1.ogg": "9d75dbce9be2bab1e8f77dc841bad52eb190549d", + "minecraft/sounds/mob/warden/step_2.ogg": "dbe17da4c29e39b19e85bf85c8729a62824552f0", + "minecraft/sounds/mob/warden/step_3.ogg": "85d457a67055477cb22538ee3ee0b3d537bef3f5", + "minecraft/sounds/mob/warden/step_4.ogg": "d18015d2512466c2f81311914df0bf29d9bfcacb", + "minecraft/sounds/mob/warden/tendril_clicks_1.ogg": "a892bf72bd55a468fb49901d3c2256b7d9f0d38e", + "minecraft/sounds/mob/warden/tendril_clicks_2.ogg": "e1256df4732914224e42e64aafb2b51df33cca90", + "minecraft/sounds/mob/warden/tendril_clicks_3.ogg": "7f1e51127887e125e4991b592d32f218eb674c11", + "minecraft/sounds/mob/warden/tendril_clicks_4.ogg": "bdad81aa76a53149ac316e730b1d18977a952699", + "minecraft/sounds/mob/warden/tendril_clicks_5.ogg": "46d9741e0c7f3334cdf74ba5eb72659f0e16fd1d", + "minecraft/sounds/mob/warden/tendril_clicks_6.ogg": "848b1ae0e0895cf3e93aa81d1f6295ac933a01d9", + "minecraft/sounds/mob/wither/death.ogg": "db84aad8831f937c3c4162766a8abcb49506c1e7", + "minecraft/sounds/mob/wither/hurt1.ogg": "befdf6ca94508a93e52b5324abb793aefef4066f", + "minecraft/sounds/mob/wither/hurt2.ogg": "9ec7172eac72fc7bcb96aa3f741777735a9baec6", + "minecraft/sounds/mob/wither/hurt3.ogg": "4b905fd80da30e902a26f0e34f1ade44df0fb51e", + "minecraft/sounds/mob/wither/hurt4.ogg": "a2b5af171e999ddfe59c01bbfc6401e7478d6760", + "minecraft/sounds/mob/wither/idle1.ogg": "34dbc7532d14383742333147ca3adbda0350aa0e", + "minecraft/sounds/mob/wither/idle2.ogg": "78d511b2ae44d0354e932acdc7acdaaf0a39d73a", + "minecraft/sounds/mob/wither/idle3.ogg": "fc5c06d978f498bdb2bcf2deb36c6864bc6b01de", + "minecraft/sounds/mob/wither/idle4.ogg": "075c9e204c4150e7c43e57f1f01428177aca997d", + "minecraft/sounds/mob/wither/shoot.ogg": "59ce2fddc9e777d47471c5614aa5d7d219a43ad1", + "minecraft/sounds/mob/wither/spawn.ogg": "52049ed59e074474287b5dfee00477ce571b3385", + "minecraft/sounds/mob/wither_skeleton/death1.ogg": "5c016e18ac7a942da00fa06522166b6210c8b3e6", + "minecraft/sounds/mob/wither_skeleton/death2.ogg": "5f37a9b5e066526cf6cd755a74d48219799e16f6", + "minecraft/sounds/mob/wither_skeleton/hurt1.ogg": "aca61491c1ed4f91b2f97ad221ba279cb7629579", + "minecraft/sounds/mob/wither_skeleton/hurt2.ogg": "bbd08e5b85eed19819e376c79f01255b62ae52a1", + "minecraft/sounds/mob/wither_skeleton/hurt3.ogg": "1b89e9af6ef35f52b41be1a3acbc0bafd8e7df40", + "minecraft/sounds/mob/wither_skeleton/hurt4.ogg": "52219b8a45a0371ebd3601efd5deac6df63a8175", + "minecraft/sounds/mob/wither_skeleton/idle1.ogg": "54b9403fc2362a9fc28b67e7f34f7c3efdfe0dce", + "minecraft/sounds/mob/wither_skeleton/idle2.ogg": "63c3efe76ca17085f67edb073a762c5891dfe2d1", + "minecraft/sounds/mob/wither_skeleton/idle3.ogg": "cdcd8fab475fd1b753231cc3f8d285e246f72c63", + "minecraft/sounds/mob/wither_skeleton/step1.ogg": "c9fc431f36c1d5798bd8a6a28758dc81229fd3fa", + "minecraft/sounds/mob/wither_skeleton/step2.ogg": "a6bc97e54bc4eaa1cbe8fd6b2d1c26359a481b7a", + "minecraft/sounds/mob/wither_skeleton/step3.ogg": "ab4688cc0739633a0fe61ef747073fed02ec5f87", + "minecraft/sounds/mob/wither_skeleton/step4.ogg": "6d45eef09a06f1c16bbb90c8f4a6be1fcb5a12df", + "minecraft/sounds/mob/wolf/bark1.ogg": "527618d2fbb9712950357c4d5e95cfb86ffee417", + "minecraft/sounds/mob/wolf/bark2.ogg": "91e49e790fcff847789f84be16acd4baed935b95", + "minecraft/sounds/mob/wolf/bark3.ogg": "c75a24f3faeecd3a93af8bea54694c059b079fc4", + "minecraft/sounds/mob/wolf/death.ogg": "945dab2b484c34f108e1ea8eebca5e5e2a9e6424", + "minecraft/sounds/mob/wolf/growl1.ogg": "0eaaba6d7fee5159a61b36aea268381bface391b", + "minecraft/sounds/mob/wolf/growl2.ogg": "b0a993d2dd9d67854e6247fca5e0c10b4e65c23d", + "minecraft/sounds/mob/wolf/growl3.ogg": "e0870af492065576d94bb65591f01d79a80e4d83", + "minecraft/sounds/mob/wolf/howl1.ogg": "074ee57fa9c2d306b39988f89d6cd69ede949388", + "minecraft/sounds/mob/wolf/howl2.ogg": "089ed9057e7fcff2110eb0ee5bb886616c495f76", + "minecraft/sounds/mob/wolf/hurt1.ogg": "a08590d43a21ee739bd7b9be85b4a81564e6f74a", + "minecraft/sounds/mob/wolf/hurt2.ogg": "b2fba6c9788a53ab7da07aa8d2f25cdc07973222", + "minecraft/sounds/mob/wolf/hurt3.ogg": "5dcca782068ac52ce9074a7809db023cab2cd77c", + "minecraft/sounds/mob/wolf/panting.ogg": "27a06c66cec51f15bfb36adecfd5bea80b359e16", + "minecraft/sounds/mob/wolf/shake.ogg": "dc6280367f55275a1b5cd90823561c98f8faaff0", + "minecraft/sounds/mob/wolf/step1.ogg": "6fcafa13cfbef21a54e545a706fd8657a841a154", + "minecraft/sounds/mob/wolf/step2.ogg": "73d8711890a1225f767f556bd4963d4348659b7b", + "minecraft/sounds/mob/wolf/step3.ogg": "f5f68d0d8f603c6ba6d1f01b2cb548d710d29987", + "minecraft/sounds/mob/wolf/step4.ogg": "639d3ecadc8ec244aa94fccfdfdd225522e3ec73", + "minecraft/sounds/mob/wolf/step5.ogg": "7125632649039c3f105639964961df8c15c8fb0c", + "minecraft/sounds/mob/wolf/whine.ogg": "416f50a5bf3f2163da1cbcb821c0c00027da1525", + "minecraft/sounds/mob/zoglin/angry1.ogg": "66994251f371dad569790e05e8f7b6472c2b7334", + "minecraft/sounds/mob/zoglin/angry2.ogg": "df95b0661f1702172436b993499ba7d16a8d8998", + "minecraft/sounds/mob/zoglin/angry3.ogg": "69de3c72732d43860edaf6cf4ee6366f81c402c5", + "minecraft/sounds/mob/zoglin/attack1.ogg": "7001f57b712a6d03bbd924e8a8f4b36aedeeef56", + "minecraft/sounds/mob/zoglin/attack2.ogg": "33a3f9645aad8c7d5ab8251b8f7fac67c5fb90ac", + "minecraft/sounds/mob/zoglin/death1.ogg": "56a5b8e793ce6ebcc4094a835aebb0588d6e98a4", + "minecraft/sounds/mob/zoglin/death2.ogg": "37cb3d1aa4e5fb5b191c596377027d7461ab4dcd", + "minecraft/sounds/mob/zoglin/death3.ogg": "04dfc903b459be6103a30401fbc411dd960d4b60", + "minecraft/sounds/mob/zoglin/hurt1.ogg": "86911c8c9eb54a3be3addaaf045a349647691afb", + "minecraft/sounds/mob/zoglin/hurt2.ogg": "891fcac353b7c81b1a2cff12e1e59f4cb96a4d91", + "minecraft/sounds/mob/zoglin/hurt3.ogg": "decab13d1ed36d8c3d0ad2f6d1e064b5dc74ab11", + "minecraft/sounds/mob/zoglin/idle1.ogg": "fb79eb6d6a8cd4421a89d3fa03855518af4b1a79", + "minecraft/sounds/mob/zoglin/idle2.ogg": "fbf6e8e09bfcb1d95a8795b5e5b2a9cebbb4c009", + "minecraft/sounds/mob/zoglin/idle3.ogg": "84fd00ea656c5cb570c19077383e1690d532406e", + "minecraft/sounds/mob/zoglin/idle4.ogg": "41e28a6eb08a94bff37779e72d149dedd920b2ab", + "minecraft/sounds/mob/zoglin/idle5.ogg": "fbcce88e0a8f7e3dc831d2ac296dc238cbc2ec5e", + "minecraft/sounds/mob/zoglin/idle6.ogg": "6fce1c49d98d57a1ae0f858939d30beb2abcdf44", + "minecraft/sounds/mob/zoglin/step1.ogg": "6faf5d46008e9794f6cc1f8835e3a694684899e7", + "minecraft/sounds/mob/zoglin/step2.ogg": "e8cd487fb1c3762538dbb258464d36b06cdbceca", + "minecraft/sounds/mob/zoglin/step3.ogg": "dce96bcfed80defbe42be5c6157e29e876139d55", + "minecraft/sounds/mob/zoglin/step4.ogg": "e4c6669590f0ef6dbf21e118cef81b4122703161", + "minecraft/sounds/mob/zoglin/step5.ogg": "046ea45b6bccc4d8d003b4dd93ac764999303aa6", + "minecraft/sounds/mob/zombie/death.ogg": "51deaef407de6444854e4da39b165faa0d41370d", + "minecraft/sounds/mob/zombie/hurt1.ogg": "e46ef10953dadb96e7faab3dddcfecc5551b652b", + "minecraft/sounds/mob/zombie/hurt2.ogg": "0fe7a2c57b0b284ec0e7b52b0e0e38d4a9139e53", + "minecraft/sounds/mob/zombie/infect.ogg": "943f45c787298643b8a64f9eba13a7311ec81f8b", + "minecraft/sounds/mob/zombie/metal1.ogg": "c61f0e983f4ab8acf150ed87805127aebd05b14c", + "minecraft/sounds/mob/zombie/metal2.ogg": "a19eea7979d380661c1514a5d999e99e0eb61ee6", + "minecraft/sounds/mob/zombie/metal3.ogg": "65919863c0a6fbb0ae175f1b2d9061532b1fd725", + "minecraft/sounds/mob/zombie/remedy.ogg": "171889bdb52f74e922653a883db46fdf67cd35b8", + "minecraft/sounds/mob/zombie/say1.ogg": "65b762da90c8b192ee065692fcd50068f571b3fc", + "minecraft/sounds/mob/zombie/say2.ogg": "66a961b791a166340350a5f4d6029d6d0cae214b", + "minecraft/sounds/mob/zombie/say3.ogg": "7e86ced51d049411a28627854c633a3977f45332", + "minecraft/sounds/mob/zombie/step1.ogg": "cb6b9af3cd796285405177177f8ca7a2d6c91a25", + "minecraft/sounds/mob/zombie/step2.ogg": "5ce5022d7f6176bd0ebc0aceadedd228d2b2a8c6", + "minecraft/sounds/mob/zombie/step3.ogg": "c9202ed6588c8acab2f13cfeeb170ec3d0805d59", + "minecraft/sounds/mob/zombie/step4.ogg": "70fdc50a914cb6c3d90c6c3bae33955192303807", + "minecraft/sounds/mob/zombie/step5.ogg": "9cb8dba93672de4ae019f50dfd31356a8c9a51b5", + "minecraft/sounds/mob/zombie/unfect.ogg": "b02f3e6b3857de2ab43035a0127b789347ae23ee", + "minecraft/sounds/mob/zombie/wood1.ogg": "ecf6be58a57906919271ba4608f31fa0a4f0a4f2", + "minecraft/sounds/mob/zombie/wood2.ogg": "7269af1c1d8773763c1af8bfa4bd38e13b3e1f98", + "minecraft/sounds/mob/zombie/wood3.ogg": "af1be61826d289bdae090eaa58dd4cc257595f2f", + "minecraft/sounds/mob/zombie/wood4.ogg": "5b37751d224d4a409435095ea29bfbd8b5218092", + "minecraft/sounds/mob/zombie/woodbreak.ogg": "1bce612bb8770ada5477a7b2a592bab99c86a000", + "minecraft/sounds/mob/zombie_villager/death.ogg": "37da25a09c68c32a9b7ced845e8f384255ab732d", + "minecraft/sounds/mob/zombie_villager/hurt1.ogg": "1e8409f4044b4f23bc6e2396a74f026795bbed4c", + "minecraft/sounds/mob/zombie_villager/hurt2.ogg": "73799c114c80ae724e594dc4b636dc0100d134a0", + "minecraft/sounds/mob/zombie_villager/say1.ogg": "0fe03055f98935b7564db033979648173be0bcc7", + "minecraft/sounds/mob/zombie_villager/say2.ogg": "2de87d32e203d429bc3b13c3ec6060fe6a2f7e38", + "minecraft/sounds/mob/zombie_villager/say3.ogg": "42f0cd5a2a4e294954bcd9c03ea80cee35cd06ad", + "minecraft/sounds/mob/zombified_piglin/zpig1.ogg": "ac0f71eb6911c31abfc398c0a5ccfe6911715745", + "minecraft/sounds/mob/zombified_piglin/zpig2.ogg": "7ff81055a299493a758c0b0f6c129dec6132dff1", + "minecraft/sounds/mob/zombified_piglin/zpig3.ogg": "dc322d97f25efe9a419e9771b80bee8807637c2e", + "minecraft/sounds/mob/zombified_piglin/zpig4.ogg": "a1ac7aa91b5f63a2c32bcd414702f8309cd2f2a2", + "minecraft/sounds/mob/zombified_piglin/zpigangry1.ogg": "6a24d73c5e26aacae2f76bf2455ab42ca4815024", + "minecraft/sounds/mob/zombified_piglin/zpigangry2.ogg": "3ff01c01f8e0e0e1132a470e153a48951853ffc8", + "minecraft/sounds/mob/zombified_piglin/zpigangry3.ogg": "1d38837caac921f267165753db56a9d123fa9edc", + "minecraft/sounds/mob/zombified_piglin/zpigangry4.ogg": "99f280560d677a6c298040b142f42d3b39d4c800", + "minecraft/sounds/mob/zombified_piglin/zpigdeath.ogg": "6b82e81c0122b8edad442925a532f7574ce7c8d2", + "minecraft/sounds/mob/zombified_piglin/zpighurt1.ogg": "7be727ea16b9a261665b8419397115f13a0966b6", + "minecraft/sounds/mob/zombified_piglin/zpighurt2.ogg": "cac9dc33a726571ddb0c5afe19e10384191a4395", + "minecraft/sounds/music/game/a_familiar_room.ogg": "7f77e186063198933a7dd67eb492ae4d74839dd9", + "minecraft/sounds/music/game/an_ordinary_day.ogg": "ac88b24961961f52fbaf8efc55ae7e260b6f4ad2", + "minecraft/sounds/music/game/ancestry.ogg": "829c044d2c7189d938efb8cb89d1bb66b77c67da", + "minecraft/sounds/music/game/bromeliad.ogg": "4b7422b5e6324067f24ea7aee2b8f242ce46069b", + "minecraft/sounds/music/game/clark.ogg": "bbb301a6ed65e5e92eb97b601b9ea9979324bccf", + "minecraft/sounds/music/game/comforting_memories.ogg": "1c9aa4f2710ac7025a56f99feb132a29cf5a2b64", + "minecraft/sounds/music/game/creative/aria_math.ogg": "2cc340b0663cc0b2c64e88e6daf0fc1a9b35fc2d", + "minecraft/sounds/music/game/creative/biome_fest.ogg": "741249a89e97577f7a5acf30ece523fde0042650", + "minecraft/sounds/music/game/creative/blind_spots.ogg": "37ca3a11409c7a70d81499cfd34c37b2b982239c", + "minecraft/sounds/music/game/creative/dreiton.ogg": "2382caaea57324875b9873cf1d93c5b3ad28f547", + "minecraft/sounds/music/game/creative/haunt_muskie.ogg": "0824e1e9c8faa785a8fe975421fae67c651b7333", + "minecraft/sounds/music/game/creative/taswell.ogg": "4b84efdf7e8a4e45279bfe841ac98ba46c4cc5e0", + "minecraft/sounds/music/game/crescent_dunes.ogg": "3de85c831b083e10d906c3ac007d7ca9f36b4075", + "minecraft/sounds/music/game/danny.ogg": "603fd41ebe3eac0795ebfa0b31195be1866d1e9c", + "minecraft/sounds/music/game/deeper.ogg": "8e901a9a5e4daee7e3cbff8a3529d0a4148f8406", + "minecraft/sounds/music/game/dry_hands.ogg": "53976ed366c97ad86c1d7ce21497c9985f33d4f1", + "minecraft/sounds/music/game/echo_in_the_wind.ogg": "5c97ac9788ab81e560bae32b0f5e4fc244e544b4", + "minecraft/sounds/music/game/eld_unknown.ogg": "1346ff09e77c8506476a017f63d9a820f25f0839", + "minecraft/sounds/music/game/end/alpha.ogg": "6d689e547efb849a3641c4eee912a395187197f5", + "minecraft/sounds/music/game/end/boss.ogg": "67e25166bfe3e0ce3ef45ce2680b2413f80ccc5a", + "minecraft/sounds/music/game/end/the_end.ogg": "853da2928e9ca37e6d7c9aeaad58d4cbfeca77d4", + "minecraft/sounds/music/game/endless.ogg": "14221fedadd7431bc557f36be1af86582955f7c5", + "minecraft/sounds/music/game/featherfall.ogg": "0c62057c8a75b57a8f06e7c1bc1b21a7f88d4820", + "minecraft/sounds/music/game/floating_dream.ogg": "dec42f5a10b6a0018594bdb868882ddccf04f52e", + "minecraft/sounds/music/game/haggstrom.ogg": "c25705e16f1d51a56a2b0a4604250b3844ceadcf", + "minecraft/sounds/music/game/infinite_amethyst.ogg": "f6dd3e263823fbc2051f441e5b12a02b2258ae84", + "minecraft/sounds/music/game/key.ogg": "8ee9d608f0bbb2d0513af7bfc1b55e591ada05ea", + "minecraft/sounds/music/game/komorebi.ogg": "c3e6d3f34a7221360ad11d18335edd6709df4609", + "minecraft/sounds/music/game/left_to_bloom.ogg": "a971ae2004798c14bc3387cfd1b89420092b3263", + "minecraft/sounds/music/game/living_mice.ogg": "532fdae2fd43bc046f78a1b7b79f28161f25fc4c", + "minecraft/sounds/music/game/mice_on_venus.ogg": "06a2f38a094573652977232abcc4f268cf6745ad", + "minecraft/sounds/music/game/minecraft.ogg": "7f7777e5d5b163c5d64201fd53e5682599548a49", + "minecraft/sounds/music/game/nether/ballad_of_the_cats.ogg": "fa2719bb68297a235f970cf1f7bc105a5acf90c9", + "minecraft/sounds/music/game/nether/concrete_halls.ogg": "bc11027f0c3aabe6da20bf3f4ef734f96c6d9de1", + "minecraft/sounds/music/game/nether/crimson_forest/chrysopoeia.ogg": "6855f8a8905b601cf5a15094a8ebeab066345cc2", + "minecraft/sounds/music/game/nether/dead_voxel.ogg": "bc83ef53bf163e45854a4e619c2c8f20017be979", + "minecraft/sounds/music/game/nether/nether_wastes/rubedo.ogg": "54f37a73d613c9e2f9c303f7c3f2180cbf67912b", + "minecraft/sounds/music/game/nether/soulsand_valley/so_below.ogg": "ce719536d17beda1445931d3ba33d3c23d51e48f", + "minecraft/sounds/music/game/nether/warmth.ogg": "df444dec6fc366f517bcee5995dfe7148bf0b436", + "minecraft/sounds/music/game/one_more_day.ogg": "324f58251829988ad3f4a5f7dc39b647fdcc2639", + "minecraft/sounds/music/game/oxygene.ogg": "b99889832d7f9abe35725506e4cd48075e25f957", + "minecraft/sounds/music/game/pokopoko.ogg": "2142a00de645aa748b908c74fc275a3025b8bd90", + "minecraft/sounds/music/game/puzzlebox.ogg": "cb01089f7f2a4e84b36790efa99f3ed89ef08f5e", + "minecraft/sounds/music/game/stand_tall.ogg": "e04acb34861b4ac53abf9c0e3aec3c0f83cefc0c", + "minecraft/sounds/music/game/subwoofer_lullaby.ogg": "0dbcd56e6d8a931818f0913a0e23f784106d4ad8", + "minecraft/sounds/music/game/swamp/aerie.ogg": "7d2d4b60ec51462992b7429aa861d03048cd43c1", + "minecraft/sounds/music/game/swamp/firebugs.ogg": "bea9b17990e1d513cab127ead72c8f655995109e", + "minecraft/sounds/music/game/swamp/labyrinthine.ogg": "c1a20b3df904eb16e6775b5624cbd3aa8619d3cb", + "minecraft/sounds/music/game/sweden.ogg": "be9b14926936c4509f7fe5002cdfbba3b2752d82", + "minecraft/sounds/music/game/watcher.ogg": "4878a57f39655fedb891c16425e55a3cd91a2d70", + "minecraft/sounds/music/game/water/axolotl.ogg": "12c0a5f206d75f11eaceb2395005038a496c8f11", + "minecraft/sounds/music/game/water/dragon_fish.ogg": "b6955f323aa2f2eb7f6b480c9d2f053f6a314b50", + "minecraft/sounds/music/game/water/shuniji.ogg": "94e5b3f27e93bd060066e3e8aa45aac7eeababf6", + "minecraft/sounds/music/game/wending.ogg": "0cfa947f3d282bb02426b1c5e666b5dc28aff8a4", + "minecraft/sounds/music/game/wet_hands.ogg": "e8a73969b515a15df138a4d55b07f4ff573db25f", + "minecraft/sounds/music/game/yakusoku.ogg": "e36444071568c3273ea00627ed5462275cd6828e", + "minecraft/sounds/music/menu/beginning_2.ogg": "fe440be99066e6efcdb809c00d706bc62a500184", + "minecraft/sounds/music/menu/floating_trees.ogg": "3cf507fd0a0288688962bd265839e4a706f5d24b", + "minecraft/sounds/music/menu/moog_city_2.ogg": "215583bfda553bb04b5b15ef27d643abfe5fa2f1", + "minecraft/sounds/music/menu/mutation.ogg": "f5d6381c34a8154bfd3fdbb67fa87d9fca6794f0", + "minecraft/sounds/note/banjo.ogg": "6a859c09d4960d1122947be21504ebcc7f37a8a4", + "minecraft/sounds/note/bass.ogg": "e28d844995368de1d45c724a5d371c9952ae5ed4", + "minecraft/sounds/note/bassattack.ogg": "4211ca09a11fcf0bb2f20d210389ddeae6e0fc8e", + "minecraft/sounds/note/bd.ogg": "11fb23958cae11865bedec00522d70a188ca5d1b", + "minecraft/sounds/note/bell.ogg": "a1e833dec61595dc79d0c672fcd7838579ca4b14", + "minecraft/sounds/note/bit.ogg": "496a1bcb51a8a67b628d0d444fbac88994a4b231", + "minecraft/sounds/note/cow_bell.ogg": "d6d79daa625442e143f9b2b9157e3d8af2800094", + "minecraft/sounds/note/didgeridoo.ogg": "ed0556eeed6f8f8c48b06a34401592215fe80f60", + "minecraft/sounds/note/flute.ogg": "0445f088325b39038df2b37a958ec6c987f5e714", + "minecraft/sounds/note/guitar.ogg": "4c237fdb2ea5f970c73b18dc7d17df4c5439fbed", + "minecraft/sounds/note/harp.ogg": "46244605b8663a29cdce7bccc5b2d038241e32ee", + "minecraft/sounds/note/harp2.ogg": "4a2b2aca57376ac8daf67a9c339914d2ffbe9828", + "minecraft/sounds/note/hat.ogg": "db3b85662c0000733a04d5087d7d835771a70cc5", + "minecraft/sounds/note/icechime.ogg": "2368ded1c164202a059876128e68b2e70ebcdff9", + "minecraft/sounds/note/iron_xylophone.ogg": "f0c022a51c4e496fe8b57ee6a769e01e5b321e4d", + "minecraft/sounds/note/pling.ogg": "774ae41e86f0b62a5cc961d1bc2e3d0aef9d229c", + "minecraft/sounds/note/snare.ogg": "2db5799d39524c6f99e439d310e4a0817c61660e", + "minecraft/sounds/note/xylobone.ogg": "b97cfa83f2be06885ce9419522ad379bf96b90c7", + "minecraft/sounds/portal/portal.ogg": "5cab2f09f1fecc35ea879da5a30678b9c7daca23", + "minecraft/sounds/portal/travel.ogg": "9022fcfb001438a87c65b268202a6abf5957b64a", + "minecraft/sounds/portal/trigger.ogg": "86ee4459e92beea5a4287881d26f7eaee0411c92", + "minecraft/sounds/random/anvil_break.ogg": "6fa4895a44f671fd7c24c366f87ca908da6485a3", + "minecraft/sounds/random/anvil_land.ogg": "781d4bfc6ee0aff2a61b0d78f0da34610a28aa62", + "minecraft/sounds/random/anvil_use.ogg": "f789417f40eee40b4d8ae6422d78f0ce06a94211", + "minecraft/sounds/random/bow.ogg": "4a6c47aa4f8c2cfe3237b250ed19b8714d611fd2", + "minecraft/sounds/random/bowhit1.ogg": "8648a8dcbe82c047b60d74783f7b1c9eb5826290", + "minecraft/sounds/random/bowhit2.ogg": "f4e487a5fdbf864c782a09090aca709548183f44", + "minecraft/sounds/random/bowhit3.ogg": "cc1872c0c02461eab4e70141cd7f29e512756e7a", + "minecraft/sounds/random/bowhit4.ogg": "6bb2c7d902f930fa17c1df0739ae2cbeb452151f", + "minecraft/sounds/random/break.ogg": "8abcbed843fff26146330dde170862e64b8491ab", + "minecraft/sounds/random/breath.ogg": "9b699c4339f512eb851b2ebbef524d90cb75e577", + "minecraft/sounds/random/burp.ogg": "389e837fa8c7f8f09499b43d8710489dfd8c53dd", + "minecraft/sounds/random/chestclosed.ogg": "056393a33a9633685c3dc3be2887f5cbd7dbc63f", + "minecraft/sounds/random/chestopen.ogg": "186d5d9481d59cc99bc4be1b5fbb98d0ef877b8e", + "minecraft/sounds/random/classic_hurt.ogg": "9d485556b89bf776042080774679c37300bc744b", + "minecraft/sounds/random/click.ogg": "3455ca942556c7d5eac7dd5e458e7fb3bad564c9", + "minecraft/sounds/random/click_stereo.ogg": "f0ca66561f832bf2f60b393837297c2692367cd5", + "minecraft/sounds/random/door_close.ogg": "9ea8a9e105321891bda18b9007b383b40aa7c076", + "minecraft/sounds/random/door_open.ogg": "5bb5a04e776d69ca12b1d7bc369975f9bf62e741", + "minecraft/sounds/random/drink.ogg": "ed402bb1c240a70fa9eb05fe5eec436c248598f2", + "minecraft/sounds/random/eat1.ogg": "ebf6fcfa3dd26d6f684fd90388221d4ee4a1af1d", + "minecraft/sounds/random/eat2.ogg": "608792c62e053a9ddf9fc3bd493a6da1437ad36a", + "minecraft/sounds/random/eat3.ogg": "d8a23d7672a2e277c8a0c08e131fded629fb5db7", + "minecraft/sounds/random/explode1.ogg": "fa85b9e7e54c36c9f9d0249ca739444b5e3bb66c", + "minecraft/sounds/random/explode2.ogg": "e55daa373e577f611565d57ec53cd28dcf472f99", + "minecraft/sounds/random/explode3.ogg": "3a92d0fd263265719532041f6f2ea44c7ba2f2e2", + "minecraft/sounds/random/explode4.ogg": "09835e0c3138faf6047506a2b6f1da087c082d2e", + "minecraft/sounds/random/fizz.ogg": "bd76df5c882dc4b65925a8b25c0e7dbebef9bb2e", + "minecraft/sounds/random/fuse.ogg": "b9a550ba1e028c027557572aeb928b760864efe4", + "minecraft/sounds/random/glass1.ogg": "fa35a51bb74a4a6cf0c48161342db5a8577f13e5", + "minecraft/sounds/random/glass2.ogg": "f1b8e424aa0559952b08651d792f96381d2fb132", + "minecraft/sounds/random/glass3.ogg": "3be3cf9a5c8534bf6548ba89c699a3b2abf9e074", + "minecraft/sounds/random/levelup.ogg": "19034765ba8ba5389b35804ab213537ab5cf706f", + "minecraft/sounds/random/orb.ogg": "8a04a60d5c28fc60df472a877ca57f37eabc78d7", + "minecraft/sounds/random/pop.ogg": "d6ae1c04d0a7376a33d1df12e1b8057cfbab6bc2", + "minecraft/sounds/random/splash.ogg": "ceddbe3cb01ed6f356d455a1960d13d96afb5363", + "minecraft/sounds/random/successful_hit.ogg": "57f50076e7b91b12595a17cf0d38303f979f862b", + "minecraft/sounds/random/wood_click.ogg": "cb7fd9405357f21decb5de0b373b837dadcbca9c", + "minecraft/sounds/records/11.ogg": "b406e1c10c0cf34fd943dddd2cea5106dab53ee9", + "minecraft/sounds/records/13.ogg": "b0ed9fc4ce57b96c05c956b92fe077e8d7c448a6", + "minecraft/sounds/records/5.ogg": "584ac8cfca1f68b5e1eb6d0c3554dd52f31bbec5", + "minecraft/sounds/records/blocks.ogg": "cde65556718d191e30d48fd625bad1381f1fcd06", + "minecraft/sounds/records/cat.ogg": "d4313530b3100f824e2f0b2adeed165b0b816267", + "minecraft/sounds/records/chirp.ogg": "8bd9484e2bc85bfa2c1c4c6dd84d102c9a7f86c0", + "minecraft/sounds/records/creator.ogg": "1b62b6e66e47b1cf034ec3ac54bb7c6baff74780", + "minecraft/sounds/records/creator_music_box.ogg": "e1b4726cf75e5d6db25fc22204ceb83279f69498", + "minecraft/sounds/records/far.ogg": "28912fd79cfe0e4e9465503809465ec400b0926b", + "minecraft/sounds/records/mall.ogg": "62ef4f7c2da1d0ebf50c9462c9bfe7b27e865b0f", + "minecraft/sounds/records/mellohi.ogg": "1f86ddd8bc02fb96c27583c0b38ebd0dcdaf271a", + "minecraft/sounds/records/otherside.ogg": "60f3cb6da0dedefb50015b883c98e32357134231", + "minecraft/sounds/records/pigstep.ogg": "12174a8a8332a4156d57d57f370932ad28789df0", + "minecraft/sounds/records/precipice.ogg": "043067183af1d374857b0210fc281535fcf64665", + "minecraft/sounds/records/relic.ogg": "180d3c12b20c806ad7da82a77c32238547f68214", + "minecraft/sounds/records/stal.ogg": "d826bdcc7a5cf8a276d9dec67c71775c55d1f924", + "minecraft/sounds/records/strad.ogg": "8d5b13c57c0689a009a5857219a2700009495afe", + "minecraft/sounds/records/wait.ogg": "aa57d2ca2d029c3b042adac9e66838d981145606", + "minecraft/sounds/records/ward.ogg": "7b2c4354cb259a4ed7bf7dcf317012aa54bceb06", + "minecraft/sounds/step/cloth1.ogg": "f66cb283d78f7192d14033617cfd1a5f129f08a0", + "minecraft/sounds/step/cloth2.ogg": "97886d7ba109c2dc48ac0088fb4ab464268a1528", + "minecraft/sounds/step/cloth3.ogg": "b4a3ad988379b9e11f55fabe16066cf28f682d90", + "minecraft/sounds/step/cloth4.ogg": "5108c24b6b55cb2eb5cccdf3f28f82359ea4d7df", + "minecraft/sounds/step/coral1.ogg": "b8bc43affc8c05c158c98502904005b2d876cbb7", + "minecraft/sounds/step/coral2.ogg": "4fe9374c1d2f4277aa45fa6610d33a384dd7134f", + "minecraft/sounds/step/coral3.ogg": "a2467aa307af205f714f3cb30868e176b584da3d", + "minecraft/sounds/step/coral4.ogg": "286294cdcd4f87d8eecd6b7544e5a215ba7cfa3e", + "minecraft/sounds/step/coral5.ogg": "c5b42cadf05e186fbc144dbb25eadf55fbbf8d9a", + "minecraft/sounds/step/coral6.ogg": "82d92c79fb45bd5e068c8b03062662534c23b692", + "minecraft/sounds/step/grass1.ogg": "6d68d66730c285e0c866c71b0cfcdf065ad96e42", + "minecraft/sounds/step/grass2.ogg": "269587652f4143877ba240bba36fadd3fccbe603", + "minecraft/sounds/step/grass3.ogg": "29d3254f2a82d15916991e90a608db68178586a4", + "minecraft/sounds/step/grass4.ogg": "938a23d03c5a72deb69bf0abcf2c072063ffe524", + "minecraft/sounds/step/grass5.ogg": "8c97b6d40a58ec71caa53098ce65f53e45e316f7", + "minecraft/sounds/step/grass6.ogg": "49fccf7d54780bae55dbda7351afcf884ba97c51", + "minecraft/sounds/step/gravel1.ogg": "9941b4190e8543f5d4d3c4550157edea4c8799df", + "minecraft/sounds/step/gravel2.ogg": "bc8e845a483dfeaf1aed57134218c219db747b2b", + "minecraft/sounds/step/gravel3.ogg": "9653184afd63cd7b2e1a76b32f9348eba486fdda", + "minecraft/sounds/step/gravel4.ogg": "0c020939060793adc9fe30113325849a8bf77bb2", + "minecraft/sounds/step/ladder1.ogg": "3fdd5aa55541d43545c6f0a32a46bcfcbddb5275", + "minecraft/sounds/step/ladder2.ogg": "12735079a45c835d19ca8bd415fc76027b525973", + "minecraft/sounds/step/ladder3.ogg": "d1c7aa522ea479249af889356d5a3166fc08a407", + "minecraft/sounds/step/ladder4.ogg": "3ffc1f0a10482ab25ef24d0a618aba0289dbb827", + "minecraft/sounds/step/ladder5.ogg": "929a486c3d4b8c67cde7a04c6a9f1966864c772d", + "minecraft/sounds/step/sand1.ogg": "6831f2025b403ae7b7db7d535872f74e900167d7", + "minecraft/sounds/step/sand2.ogg": "2138c6ea8c39713386a3d1e08c612e2840d8bb56", + "minecraft/sounds/step/sand3.ogg": "e7aa24565ec25896722f8756a73a554edaed8175", + "minecraft/sounds/step/sand4.ogg": "b1c1cb788fdba32f1326e79ad1deb3e863e544f8", + "minecraft/sounds/step/sand5.ogg": "098c6ffcdebbc12e18c84d2729e9b06377dc7c95", + "minecraft/sounds/step/scaffold1.ogg": "9de5631d30cb894420d62f699448dcb0b63d550c", + "minecraft/sounds/step/scaffold2.ogg": "ad32f51bad7a68289bcc7270c73f109bf551f651", + "minecraft/sounds/step/scaffold3.ogg": "6c824498e5ccedf219400b36cd05b95524342251", + "minecraft/sounds/step/scaffold4.ogg": "e3a14e3022607d0f48bc3b17d3f72b015d54ed2b", + "minecraft/sounds/step/scaffold5.ogg": "0a34f2dfbba42968c98bdad1926ec2f4a0226944", + "minecraft/sounds/step/scaffold6.ogg": "7938494a1174a99d39cdcb0da28aaa06c562df0d", + "minecraft/sounds/step/scaffold7.ogg": "367a21ebbf3314f456500fb62eba65cb5c75bcdc", + "minecraft/sounds/step/snow1.ogg": "0ac6bdc2d85025531e84145a64e04b287dabc51a", + "minecraft/sounds/step/snow2.ogg": "db2cf4f4cbab91745a4f887cfe5f053d8770398c", + "minecraft/sounds/step/snow3.ogg": "8d931d4ee6b9228390ebefa6a3f41304143d0e45", + "minecraft/sounds/step/snow4.ogg": "c40e688556920a67cf8a412b61f3627bcc082586", + "minecraft/sounds/step/stone1.ogg": "ef859078b24917d4a9d12e84c2a63d08bef04d97", + "minecraft/sounds/step/stone2.ogg": "be927139e2936139d4608b8a7645578f95d75dc4", + "minecraft/sounds/step/stone3.ogg": "feaf23df11048587e92792a7afbbeb560c4556f7", + "minecraft/sounds/step/stone4.ogg": "0e800e8471613ac1d4e75367c9278879115956af", + "minecraft/sounds/step/stone5.ogg": "66267eada65930c654b94de8876c15f630b097e3", + "minecraft/sounds/step/stone6.ogg": "580e9bb670b8a684f32ae25ef2e9e3c4281e36a9", + "minecraft/sounds/step/wet_grass1.ogg": "48b434d0ad59f5975a173d23ef60480eb08fa6fb", + "minecraft/sounds/step/wet_grass2.ogg": "9a9bcfb00e0a416a09abf0b1064baa1fdddd2b3d", + "minecraft/sounds/step/wet_grass3.ogg": "bd6bd427d755c0c9df7a342aef28f160aac36fb1", + "minecraft/sounds/step/wet_grass4.ogg": "c4177c5fd31775441aba7d25b863fa138aafa191", + "minecraft/sounds/step/wet_grass5.ogg": "1c49fe28c9708000e6cc38d4140efd9ad944393f", + "minecraft/sounds/step/wet_grass6.ogg": "b6077580d5acce058bfb8127b83a2e7d7a45253e", + "minecraft/sounds/step/wood1.ogg": "a120746451672bfebaf36c8dcf8844c13138fa80", + "minecraft/sounds/step/wood2.ogg": "57eeddaae9d56b728be998abe56c43222620518c", + "minecraft/sounds/step/wood3.ogg": "41488c54c1481440d911510405e7353717e06d5d", + "minecraft/sounds/step/wood4.ogg": "d59466f80baac2b72fc3176709fdf3f370ecf71c", + "minecraft/sounds/step/wood5.ogg": "3b706e6a8836326e165cbb24feed4dfde3bf5656", + "minecraft/sounds/step/wood6.ogg": "c3ccd01c24a20096ac82f97e563f0192e3c58917", + "minecraft/sounds/tile/piston/in.ogg": "089c6bbbbbc25235352d41b844cf7bb7b7136f71", + "minecraft/sounds/tile/piston/out.ogg": "3901af42f72bbf980a1c7b05bc9a0022d6620c8f", + "minecraft/sounds/ui/cartography_table/drawmap1.ogg": "0fefe0a800702935cef8ff888cb2d711f0220628", + "minecraft/sounds/ui/cartography_table/drawmap2.ogg": "c806bde5aa9dd27c81832f82c7a27a208f5b0a04", + "minecraft/sounds/ui/cartography_table/drawmap3.ogg": "5935a6c4874744a39f96527e5eca40ac94fb0b74", + "minecraft/sounds/ui/hud/hud_bubble.ogg": "99a74f5734610b1ebe18a0e3589fc22a6e4dc307", + "minecraft/sounds/ui/loom/select_pattern1.ogg": "e0391aeb167a8be978b25b5f415a5d655c40153b", + "minecraft/sounds/ui/loom/select_pattern2.ogg": "a1a7b885db05e48a2f452de75d1cca4c8703f637", + "minecraft/sounds/ui/loom/select_pattern3.ogg": "dab140dbe86d882c6b370df754309447ab3f16a7", + "minecraft/sounds/ui/loom/select_pattern4.ogg": "69a546fd8202436096224a45b044b33e321c3bd5", + "minecraft/sounds/ui/loom/select_pattern5.ogg": "e218e23e5181d2f0539469d483cad553db5d1b60", + "minecraft/sounds/ui/loom/take_result1.ogg": "2f19ae244c92e4ed7fa8c205c0341f1f3a4cc67e", + "minecraft/sounds/ui/loom/take_result2.ogg": "35c280803fdd75a413b84070bf4fa9d0e65b7d43", + "minecraft/sounds/ui/stonecutter/cut1.ogg": "0cce5dacf1a8f44502b8e22cff699e6903deb13c", + "minecraft/sounds/ui/stonecutter/cut2.ogg": "daeb5ce102282ed1b537b15ffb98ac25bd5602da", + "minecraft/sounds/ui/toast/challenge_complete.ogg": "bd01dff39a7bd1e0e7f6847f7aee981f157e4f94", + "minecraft/sounds/ui/toast/in.ogg": "506f2fdb1b7530df66134aa04c71e66513df0c93", + "minecraft/sounds/ui/toast/out.ogg": "984a7d9501fd7d679c1c91af756ca8633beb09b6" +} diff --git a/server/scripts/build.ts b/packages/backend/scripts/build.ts similarity index 100% rename from server/scripts/build.ts rename to packages/backend/scripts/build.ts diff --git a/server/src/app.module.ts b/packages/backend/src/app.module.ts similarity index 100% rename from server/src/app.module.ts rename to packages/backend/src/app.module.ts diff --git a/server/src/auth/auth.controller.spec.ts b/packages/backend/src/auth/auth.controller.spec.ts similarity index 100% rename from server/src/auth/auth.controller.spec.ts rename to packages/backend/src/auth/auth.controller.spec.ts diff --git a/server/src/auth/auth.controller.ts b/packages/backend/src/auth/auth.controller.ts similarity index 100% rename from server/src/auth/auth.controller.ts rename to packages/backend/src/auth/auth.controller.ts diff --git a/server/src/auth/auth.module.ts b/packages/backend/src/auth/auth.module.ts similarity index 100% rename from server/src/auth/auth.module.ts rename to packages/backend/src/auth/auth.module.ts diff --git a/server/src/auth/auth.service.spec.ts b/packages/backend/src/auth/auth.service.spec.ts similarity index 100% rename from server/src/auth/auth.service.spec.ts rename to packages/backend/src/auth/auth.service.spec.ts diff --git a/server/src/auth/auth.service.ts b/packages/backend/src/auth/auth.service.ts similarity index 98% rename from server/src/auth/auth.service.ts rename to packages/backend/src/auth/auth.service.ts index 02fd6fa3..333500a7 100644 --- a/server/src/auth/auth.service.ts +++ b/packages/backend/src/auth/auth.service.ts @@ -1,6 +1,6 @@ import { Inject, Injectable, Logger } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; -import { CreateUser } from '@shared/validation/user/dto/CreateUser.dto'; +import { CreateUser } from '@nbw/database'; import axios from 'axios'; import type { Request, Response } from 'express'; diff --git a/server/src/auth/strategies/JWT.strategy.spec.ts b/packages/backend/src/auth/strategies/JWT.strategy.spec.ts similarity index 100% rename from server/src/auth/strategies/JWT.strategy.spec.ts rename to packages/backend/src/auth/strategies/JWT.strategy.spec.ts diff --git a/server/src/auth/strategies/JWT.strategy.ts b/packages/backend/src/auth/strategies/JWT.strategy.ts similarity index 100% rename from server/src/auth/strategies/JWT.strategy.ts rename to packages/backend/src/auth/strategies/JWT.strategy.ts diff --git a/server/src/auth/strategies/discord.strategy/DiscordStrategyConfig.ts b/packages/backend/src/auth/strategies/discord.strategy/DiscordStrategyConfig.ts similarity index 100% rename from server/src/auth/strategies/discord.strategy/DiscordStrategyConfig.ts rename to packages/backend/src/auth/strategies/discord.strategy/DiscordStrategyConfig.ts diff --git a/server/src/auth/strategies/discord.strategy/Strategy.spec.ts b/packages/backend/src/auth/strategies/discord.strategy/Strategy.spec.ts similarity index 100% rename from server/src/auth/strategies/discord.strategy/Strategy.spec.ts rename to packages/backend/src/auth/strategies/discord.strategy/Strategy.spec.ts diff --git a/server/src/auth/strategies/discord.strategy/Strategy.ts b/packages/backend/src/auth/strategies/discord.strategy/Strategy.ts similarity index 100% rename from server/src/auth/strategies/discord.strategy/Strategy.ts rename to packages/backend/src/auth/strategies/discord.strategy/Strategy.ts diff --git a/server/src/auth/strategies/discord.strategy/discord.strategy.spec.ts b/packages/backend/src/auth/strategies/discord.strategy/discord.strategy.spec.ts similarity index 100% rename from server/src/auth/strategies/discord.strategy/discord.strategy.spec.ts rename to packages/backend/src/auth/strategies/discord.strategy/discord.strategy.spec.ts diff --git a/server/src/auth/strategies/discord.strategy/index.ts b/packages/backend/src/auth/strategies/discord.strategy/index.ts similarity index 100% rename from server/src/auth/strategies/discord.strategy/index.ts rename to packages/backend/src/auth/strategies/discord.strategy/index.ts diff --git a/server/src/auth/strategies/discord.strategy/types.ts b/packages/backend/src/auth/strategies/discord.strategy/types.ts similarity index 100% rename from server/src/auth/strategies/discord.strategy/types.ts rename to packages/backend/src/auth/strategies/discord.strategy/types.ts diff --git a/server/src/auth/strategies/github.strategy.spec.ts b/packages/backend/src/auth/strategies/github.strategy.spec.ts similarity index 100% rename from server/src/auth/strategies/github.strategy.spec.ts rename to packages/backend/src/auth/strategies/github.strategy.spec.ts diff --git a/server/src/auth/strategies/github.strategy.ts b/packages/backend/src/auth/strategies/github.strategy.ts similarity index 100% rename from server/src/auth/strategies/github.strategy.ts rename to packages/backend/src/auth/strategies/github.strategy.ts diff --git a/server/src/auth/strategies/google.strategy.spec.ts b/packages/backend/src/auth/strategies/google.strategy.spec.ts similarity index 100% rename from server/src/auth/strategies/google.strategy.spec.ts rename to packages/backend/src/auth/strategies/google.strategy.spec.ts diff --git a/server/src/auth/strategies/google.strategy.ts b/packages/backend/src/auth/strategies/google.strategy.ts similarity index 100% rename from server/src/auth/strategies/google.strategy.ts rename to packages/backend/src/auth/strategies/google.strategy.ts diff --git a/server/src/auth/strategies/magicLinkEmail.strategy.spec.ts b/packages/backend/src/auth/strategies/magicLinkEmail.strategy.spec.ts similarity index 100% rename from server/src/auth/strategies/magicLinkEmail.strategy.spec.ts rename to packages/backend/src/auth/strategies/magicLinkEmail.strategy.spec.ts diff --git a/server/src/auth/strategies/magicLinkEmail.strategy.ts b/packages/backend/src/auth/strategies/magicLinkEmail.strategy.ts similarity index 100% rename from server/src/auth/strategies/magicLinkEmail.strategy.ts rename to packages/backend/src/auth/strategies/magicLinkEmail.strategy.ts diff --git a/server/src/auth/types/discordProfile.ts b/packages/backend/src/auth/types/discordProfile.ts similarity index 100% rename from server/src/auth/types/discordProfile.ts rename to packages/backend/src/auth/types/discordProfile.ts diff --git a/server/src/auth/types/githubProfile.ts b/packages/backend/src/auth/types/githubProfile.ts similarity index 100% rename from server/src/auth/types/githubProfile.ts rename to packages/backend/src/auth/types/githubProfile.ts diff --git a/server/src/auth/types/googleProfile.ts b/packages/backend/src/auth/types/googleProfile.ts similarity index 100% rename from server/src/auth/types/googleProfile.ts rename to packages/backend/src/auth/types/googleProfile.ts diff --git a/server/src/auth/types/profile.ts b/packages/backend/src/auth/types/profile.ts similarity index 100% rename from server/src/auth/types/profile.ts rename to packages/backend/src/auth/types/profile.ts diff --git a/server/src/auth/types/token.ts b/packages/backend/src/auth/types/token.ts similarity index 100% rename from server/src/auth/types/token.ts rename to packages/backend/src/auth/types/token.ts diff --git a/server/src/config/EnvironmentVariables.ts b/packages/backend/src/config/EnvironmentVariables.ts similarity index 100% rename from server/src/config/EnvironmentVariables.ts rename to packages/backend/src/config/EnvironmentVariables.ts diff --git a/server/src/email-login/email-login.controller.spec.ts b/packages/backend/src/email-login/email-login.controller.spec.ts similarity index 100% rename from server/src/email-login/email-login.controller.spec.ts rename to packages/backend/src/email-login/email-login.controller.spec.ts diff --git a/server/src/email-login/email-login.controller.ts b/packages/backend/src/email-login/email-login.controller.ts similarity index 100% rename from server/src/email-login/email-login.controller.ts rename to packages/backend/src/email-login/email-login.controller.ts diff --git a/server/src/email-login/email-login.module.ts b/packages/backend/src/email-login/email-login.module.ts similarity index 100% rename from server/src/email-login/email-login.module.ts rename to packages/backend/src/email-login/email-login.module.ts diff --git a/server/src/email-login/email-login.service.spec.ts b/packages/backend/src/email-login/email-login.service.spec.ts similarity index 100% rename from server/src/email-login/email-login.service.spec.ts rename to packages/backend/src/email-login/email-login.service.spec.ts diff --git a/server/src/email-login/email-login.service.ts b/packages/backend/src/email-login/email-login.service.ts similarity index 100% rename from server/src/email-login/email-login.service.ts rename to packages/backend/src/email-login/email-login.service.ts diff --git a/server/src/file/file.module.ts b/packages/backend/src/file/file.module.ts similarity index 100% rename from server/src/file/file.module.ts rename to packages/backend/src/file/file.module.ts diff --git a/server/src/file/file.service.spec.ts b/packages/backend/src/file/file.service.spec.ts similarity index 100% rename from server/src/file/file.service.spec.ts rename to packages/backend/src/file/file.service.spec.ts diff --git a/server/src/file/file.service.ts b/packages/backend/src/file/file.service.ts similarity index 100% rename from server/src/file/file.service.ts rename to packages/backend/src/file/file.service.ts diff --git a/server/src/lib/GetRequestUser.spec.ts b/packages/backend/src/lib/GetRequestUser.spec.ts similarity index 100% rename from server/src/lib/GetRequestUser.spec.ts rename to packages/backend/src/lib/GetRequestUser.spec.ts diff --git a/server/src/lib/GetRequestUser.ts b/packages/backend/src/lib/GetRequestUser.ts similarity index 100% rename from server/src/lib/GetRequestUser.ts rename to packages/backend/src/lib/GetRequestUser.ts diff --git a/server/src/lib/initializeSwagger.spec.ts b/packages/backend/src/lib/initializeSwagger.spec.ts similarity index 100% rename from server/src/lib/initializeSwagger.spec.ts rename to packages/backend/src/lib/initializeSwagger.spec.ts diff --git a/server/src/lib/initializeSwagger.ts b/packages/backend/src/lib/initializeSwagger.ts similarity index 100% rename from server/src/lib/initializeSwagger.ts rename to packages/backend/src/lib/initializeSwagger.ts diff --git a/server/src/lib/parseToken.spec.ts b/packages/backend/src/lib/parseToken.spec.ts similarity index 100% rename from server/src/lib/parseToken.spec.ts rename to packages/backend/src/lib/parseToken.spec.ts diff --git a/server/src/lib/parseToken.ts b/packages/backend/src/lib/parseToken.ts similarity index 100% rename from server/src/lib/parseToken.ts rename to packages/backend/src/lib/parseToken.ts diff --git a/server/src/mailing/mailing.controller.spec.ts b/packages/backend/src/mailing/mailing.controller.spec.ts similarity index 100% rename from server/src/mailing/mailing.controller.spec.ts rename to packages/backend/src/mailing/mailing.controller.spec.ts diff --git a/server/src/mailing/mailing.controller.ts b/packages/backend/src/mailing/mailing.controller.ts similarity index 100% rename from server/src/mailing/mailing.controller.ts rename to packages/backend/src/mailing/mailing.controller.ts diff --git a/server/src/mailing/mailing.module.ts b/packages/backend/src/mailing/mailing.module.ts similarity index 100% rename from server/src/mailing/mailing.module.ts rename to packages/backend/src/mailing/mailing.module.ts diff --git a/server/src/mailing/mailing.service.spec.ts b/packages/backend/src/mailing/mailing.service.spec.ts similarity index 100% rename from server/src/mailing/mailing.service.spec.ts rename to packages/backend/src/mailing/mailing.service.spec.ts diff --git a/server/src/mailing/mailing.service.ts b/packages/backend/src/mailing/mailing.service.ts similarity index 100% rename from server/src/mailing/mailing.service.ts rename to packages/backend/src/mailing/mailing.service.ts diff --git a/server/src/mailing/templates/img/background-image.png b/packages/backend/src/mailing/templates/img/background-image.png similarity index 100% rename from server/src/mailing/templates/img/background-image.png rename to packages/backend/src/mailing/templates/img/background-image.png diff --git a/server/src/mailing/templates/img/logo.png b/packages/backend/src/mailing/templates/img/logo.png similarity index 100% rename from server/src/mailing/templates/img/logo.png rename to packages/backend/src/mailing/templates/img/logo.png diff --git a/server/src/mailing/templates/magic-link-new-account.hbs b/packages/backend/src/mailing/templates/magic-link-new-account.hbs similarity index 100% rename from server/src/mailing/templates/magic-link-new-account.hbs rename to packages/backend/src/mailing/templates/magic-link-new-account.hbs diff --git a/server/src/mailing/templates/magic-link.hbs b/packages/backend/src/mailing/templates/magic-link.hbs similarity index 100% rename from server/src/mailing/templates/magic-link.hbs rename to packages/backend/src/mailing/templates/magic-link.hbs diff --git a/server/src/main.ts b/packages/backend/src/main.ts similarity index 100% rename from server/src/main.ts rename to packages/backend/src/main.ts diff --git a/server/src/seed/seed.controller.spec.ts b/packages/backend/src/seed/seed.controller.spec.ts similarity index 100% rename from server/src/seed/seed.controller.spec.ts rename to packages/backend/src/seed/seed.controller.spec.ts diff --git a/server/src/seed/seed.controller.ts b/packages/backend/src/seed/seed.controller.ts similarity index 100% rename from server/src/seed/seed.controller.ts rename to packages/backend/src/seed/seed.controller.ts diff --git a/server/src/seed/seed.module.ts b/packages/backend/src/seed/seed.module.ts similarity index 100% rename from server/src/seed/seed.module.ts rename to packages/backend/src/seed/seed.module.ts diff --git a/server/src/seed/seed.service.spec.ts b/packages/backend/src/seed/seed.service.spec.ts similarity index 100% rename from server/src/seed/seed.service.spec.ts rename to packages/backend/src/seed/seed.service.spec.ts diff --git a/server/src/seed/seed.service.ts b/packages/backend/src/seed/seed.service.ts similarity index 97% rename from server/src/seed/seed.service.ts rename to packages/backend/src/seed/seed.service.ts index 2d8c6771..d2801b60 100644 --- a/server/src/seed/seed.service.ts +++ b/packages/backend/src/seed/seed.service.ts @@ -1,5 +1,12 @@ import { Instrument, Note, Song } from '@encode42/nbs.js'; import { faker } from '@faker-js/faker'; +import { + CategoryType, + LicenseType, + UploadConst, + UploadSongDto, + VisibilityType, +} from '@nbw/database'; import { HttpException, HttpStatus, @@ -7,14 +14,6 @@ import { Injectable, Logger, } from '@nestjs/common'; -import { UploadConst } from '@shared/validation/song/constants'; -import { - CategoryType, - LicenseType, - VisibilityType, -} from '@shared/validation/song/dto/types'; -import { UploadSongDto } from '@shared/validation/song/dto/UploadSongDto.dto'; - import { SongDocument } from '@server/song/entity/song.entity'; import { SongService } from '@server/song/song.service'; import { UserDocument } from '@server/user/entity/user.entity'; diff --git a/server/src/song-browser/song-browser.controller.spec.ts b/packages/backend/src/song-browser/song-browser.controller.spec.ts similarity index 100% rename from server/src/song-browser/song-browser.controller.spec.ts rename to packages/backend/src/song-browser/song-browser.controller.spec.ts diff --git a/server/src/song-browser/song-browser.controller.ts b/packages/backend/src/song-browser/song-browser.controller.ts similarity index 100% rename from server/src/song-browser/song-browser.controller.ts rename to packages/backend/src/song-browser/song-browser.controller.ts diff --git a/server/src/song-browser/song-browser.module.ts b/packages/backend/src/song-browser/song-browser.module.ts similarity index 100% rename from server/src/song-browser/song-browser.module.ts rename to packages/backend/src/song-browser/song-browser.module.ts diff --git a/server/src/song-browser/song-browser.service.spec.ts b/packages/backend/src/song-browser/song-browser.service.spec.ts similarity index 100% rename from server/src/song-browser/song-browser.service.spec.ts rename to packages/backend/src/song-browser/song-browser.service.spec.ts diff --git a/server/src/song-browser/song-browser.service.ts b/packages/backend/src/song-browser/song-browser.service.ts similarity index 100% rename from server/src/song-browser/song-browser.service.ts rename to packages/backend/src/song-browser/song-browser.service.ts diff --git a/server/src/song/my-songs/my-songs.controller.spec.ts b/packages/backend/src/song/my-songs/my-songs.controller.spec.ts similarity index 94% rename from server/src/song/my-songs/my-songs.controller.spec.ts rename to packages/backend/src/song/my-songs/my-songs.controller.spec.ts index a5c4a0d1..6f4c3a10 100644 --- a/server/src/song/my-songs/my-songs.controller.spec.ts +++ b/packages/backend/src/song/my-songs/my-songs.controller.spec.ts @@ -1,8 +1,8 @@ import { HttpException } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { Test, TestingModule } from '@nestjs/testing'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { SongPageDto } from '@shared/validation/song/dto/SongPageDto'; +import { PageQueryDTO } from '@nbw/database'; +import { SongPageDto } from '@nbw/database'; import type { UserDocument } from '@server/user/entity/user.entity'; diff --git a/server/src/song/my-songs/my-songs.controller.ts b/packages/backend/src/song/my-songs/my-songs.controller.ts similarity index 87% rename from server/src/song/my-songs/my-songs.controller.ts rename to packages/backend/src/song/my-songs/my-songs.controller.ts index 16b84c54..ff7930af 100644 --- a/server/src/song/my-songs/my-songs.controller.ts +++ b/packages/backend/src/song/my-songs/my-songs.controller.ts @@ -1,8 +1,7 @@ import { Controller, Get, Query, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { SongPageDto } from '@shared/validation/song/dto/SongPageDto'; +import { PageQueryDTO, SongPageDto } from '@nbw/database'; import { GetRequestToken, validateUser } from '@server/lib/GetRequestUser'; import type { UserDocument } from '@server/user/entity/user.entity'; diff --git a/server/src/song/song-upload/song-upload.service.spec.ts b/packages/backend/src/song/song-upload/song-upload.service.spec.ts similarity index 100% rename from server/src/song/song-upload/song-upload.service.spec.ts rename to packages/backend/src/song/song-upload/song-upload.service.spec.ts diff --git a/server/src/song/song-upload/song-upload.service.ts b/packages/backend/src/song/song-upload/song-upload.service.ts similarity index 95% rename from server/src/song/song-upload/song-upload.service.ts rename to packages/backend/src/song/song-upload/song-upload.service.ts index 1186796a..53fd4127 100644 --- a/server/src/song/song-upload/song-upload.service.ts +++ b/packages/backend/src/song/song-upload/song-upload.service.ts @@ -6,14 +6,12 @@ import { Injectable, Logger, } from '@nestjs/common'; -import { injectSongFileMetadata } from '@shared/features/song/injectMetadata'; -import { NoteQuadTree } from '@shared/features/song/notes'; -import { obfuscateAndPackSong } from '@shared/features/song/pack'; -import { SongStatsGenerator } from '@shared/features/song/stats'; -import { drawToImage } from '@shared/features/thumbnail'; -import { SongStats } from '@shared/validation/song/dto/SongStats'; -import { ThumbnailData } from '@shared/validation/song/dto/ThumbnailData.dto'; -import { UploadSongDto } from '@shared/validation/song/dto/UploadSongDto.dto'; +import { injectSongFileMetadata } from '@nbw/song'; +import { NoteQuadTree } from '@nbw/song'; +import { obfuscateAndPackSong } from '@nbw/song'; +import { SongStatsGenerator } from '@nbw/song'; +import { drawToImage } from '@nbw/thumbnail'; +import { SongStats, ThumbnailData, UploadSongDto } from '@nbw/database'; import { Types } from 'mongoose'; import { FileService } from '@server/file/file.service'; diff --git a/server/src/song/song-webhook/song-webhook.service.spec.ts b/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts similarity index 100% rename from server/src/song/song-webhook/song-webhook.service.spec.ts rename to packages/backend/src/song/song-webhook/song-webhook.service.spec.ts diff --git a/server/src/song/song-webhook/song-webhook.service.ts b/packages/backend/src/song/song-webhook/song-webhook.service.ts similarity index 100% rename from server/src/song/song-webhook/song-webhook.service.ts rename to packages/backend/src/song/song-webhook/song-webhook.service.ts diff --git a/server/src/song/song.controller.spec.ts b/packages/backend/src/song/song.controller.spec.ts similarity index 96% rename from server/src/song/song.controller.spec.ts rename to packages/backend/src/song/song.controller.spec.ts index 72fcaccc..500203cc 100644 --- a/server/src/song/song.controller.spec.ts +++ b/packages/backend/src/song/song.controller.spec.ts @@ -1,11 +1,13 @@ import { HttpStatus, UnauthorizedException } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { Test, TestingModule } from '@nestjs/testing'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; -import { SongViewDto } from '@shared/validation/song/dto/SongView.dto'; -import { UploadSongDto } from '@shared/validation/song/dto/UploadSongDto.dto'; -import { UploadSongResponseDto } from '@shared/validation/song/dto/UploadSongResponseDto.dto'; +import { + PageQueryDTO, + SongPreviewDto, + SongViewDto, + UploadSongDto, + UploadSongResponseDto, +} from '@nbw/database'; import { Response } from 'express'; import { FileService } from '@server/file/file.service'; diff --git a/server/src/song/song.controller.ts b/packages/backend/src/song/song.controller.ts similarity index 91% rename from server/src/song/song.controller.ts rename to packages/backend/src/song/song.controller.ts index 30ad3b03..d02510cf 100644 --- a/server/src/song/song.controller.ts +++ b/packages/backend/src/song/song.controller.ts @@ -27,12 +27,14 @@ import { ApiOperation, ApiTags, } from '@nestjs/swagger'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { UploadConst } from '@shared/validation/song/constants'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; -import { SongViewDto } from '@shared/validation/song/dto/SongView.dto'; -import { UploadSongDto } from '@shared/validation/song/dto/UploadSongDto.dto'; -import { UploadSongResponseDto } from '@shared/validation/song/dto/UploadSongResponseDto.dto'; +import { + PageQueryDTO, + SongPreviewDto, + SongViewDto, + UploadSongDto, + UploadSongResponseDto, + UploadConst, +} from '@nbw/database'; import type { Response } from 'express'; import { FileService } from '@server/file/file.service'; diff --git a/server/src/song/song.module.ts b/packages/backend/src/song/song.module.ts similarity index 95% rename from server/src/song/song.module.ts rename to packages/backend/src/song/song.module.ts index b15aff89..70ba225e 100644 --- a/server/src/song/song.module.ts +++ b/packages/backend/src/song/song.module.ts @@ -6,12 +6,12 @@ import { AuthModule } from '@server/auth/auth.module'; import { FileModule } from '@server/file/file.module'; import { UserModule } from '@server/user/user.module'; -import { Song, SongSchema } from './entity/song.entity'; import { MySongsController } from './my-songs/my-songs.controller'; import { SongUploadService } from './song-upload/song-upload.service'; import { SongWebhookService } from './song-webhook/song-webhook.service'; import { SongController } from './song.controller'; import { SongService } from './song.service'; +import Song, { SongSchema } from '@nbw/database'; @Module({ imports: [ diff --git a/server/src/song/song.service.spec.ts b/packages/backend/src/song/song.service.spec.ts similarity index 98% rename from server/src/song/song.service.spec.ts rename to packages/backend/src/song/song.service.spec.ts index 7ea30e54..015966b0 100644 --- a/server/src/song/song.service.spec.ts +++ b/packages/backend/src/song/song.service.spec.ts @@ -1,11 +1,13 @@ import { HttpException } from '@nestjs/common'; import { getModelToken } from '@nestjs/mongoose'; import { Test, TestingModule } from '@nestjs/testing'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; -import { SongStats } from '@shared/validation/song/dto/SongStats'; -import { SongViewDto } from '@shared/validation/song/dto/SongView.dto'; -import { UploadSongDto } from '@shared/validation/song/dto/UploadSongDto.dto'; -import { UploadSongResponseDto } from '@shared/validation/song/dto/UploadSongResponseDto.dto'; +import { + SongPreviewDto, + SongStats, + SongViewDto, + UploadSongDto, + UploadSongResponseDto, +} from '@nbw/database'; import mongoose, { Model } from 'mongoose'; import { FileService } from '@server/file/file.service'; diff --git a/server/src/song/song.service.ts b/packages/backend/src/song/song.service.ts similarity index 100% rename from server/src/song/song.service.ts rename to packages/backend/src/song/song.service.ts diff --git a/server/src/song/song.util.ts b/packages/backend/src/song/song.util.ts similarity index 100% rename from server/src/song/song.util.ts rename to packages/backend/src/song/song.util.ts diff --git a/server/src/user/dto/user.dto.ts b/packages/backend/src/user/dto/user.dto.ts similarity index 100% rename from server/src/user/dto/user.dto.ts rename to packages/backend/src/user/dto/user.dto.ts diff --git a/server/src/user/user.controller.spec.ts b/packages/backend/src/user/user.controller.spec.ts similarity index 100% rename from server/src/user/user.controller.spec.ts rename to packages/backend/src/user/user.controller.spec.ts diff --git a/server/src/user/user.controller.ts b/packages/backend/src/user/user.controller.ts similarity index 100% rename from server/src/user/user.controller.ts rename to packages/backend/src/user/user.controller.ts diff --git a/server/src/user/user.module.ts b/packages/backend/src/user/user.module.ts similarity index 100% rename from server/src/user/user.module.ts rename to packages/backend/src/user/user.module.ts diff --git a/server/src/user/user.service.spec.ts b/packages/backend/src/user/user.service.spec.ts similarity index 100% rename from server/src/user/user.service.spec.ts rename to packages/backend/src/user/user.service.spec.ts diff --git a/server/src/user/user.service.ts b/packages/backend/src/user/user.service.ts similarity index 100% rename from server/src/user/user.service.ts rename to packages/backend/src/user/user.service.ts diff --git a/server/tsconfig.build.json b/packages/backend/tsconfig.build.json similarity index 100% rename from server/tsconfig.build.json rename to packages/backend/tsconfig.build.json diff --git a/server/tsconfig.json b/packages/backend/tsconfig.json similarity index 96% rename from server/tsconfig.json rename to packages/backend/tsconfig.json index 0db5d2a1..67252776 100644 --- a/server/tsconfig.json +++ b/packages/backend/tsconfig.json @@ -1,5 +1,4 @@ { - "extends": "../tsconfig.json", "compilerOptions": { "module": "commonjs", "declaration": true, diff --git a/packages/database/.eslintrc.js b/packages/database/.eslintrc.js new file mode 100644 index 00000000..6e4765d0 --- /dev/null +++ b/packages/database/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['../.eslintrc.js'], +}; diff --git a/packages/database/.gitignore b/packages/database/.gitignore new file mode 100644 index 00000000..a14702c4 --- /dev/null +++ b/packages/database/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/database/README.md b/packages/database/README.md new file mode 100644 index 00000000..32ec1674 --- /dev/null +++ b/packages/database/README.md @@ -0,0 +1,15 @@ +# database + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.2.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/database/bun.lock b/packages/database/bun.lock new file mode 100644 index 00000000..bbbc828b --- /dev/null +++ b/packages/database/bun.lock @@ -0,0 +1,29 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "database", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@types/node": ["@types/node@24.1.0", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w=="], + + "@types/react": ["@types/react@19.1.8", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g=="], + + "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], + } +} diff --git a/packages/database/index.ts b/packages/database/index.ts new file mode 100644 index 00000000..f67b2c64 --- /dev/null +++ b/packages/database/index.ts @@ -0,0 +1 @@ +console.log("Hello via Bun!"); \ No newline at end of file diff --git a/packages/database/jest.config.js b/packages/database/jest.config.js new file mode 100644 index 00000000..fb1e071a --- /dev/null +++ b/packages/database/jest.config.js @@ -0,0 +1,33 @@ +module.exports = { + moduleFileExtensions: ['js', 'json', 'ts'], + rootDir: '.', + testRegex: '.*\\.spec\\.ts$', + transform: { + '^.+\\.(t|j)s$': [ + 'ts-jest', + { + tsconfig: '/tsconfig.json', + ignoreCodes: ['TS151001'], + }, + ], + }, + collectCoverageFrom: ['**/*.(t|j)s'], + coverageDirectory: './coverage', + testEnvironment: 'node', + moduleNameMapper: { + '^@shared/(.*)$': '/../shared/$1', + '^@server/(.*)$': '/src/$1', + }, + testPathIgnorePatterns: [ + '/node_modules/', + '/dist/', + '/coverage/', + ], + coveragePathIgnorePatterns: [ + '/node_modules/', + '/coverage/', + '/dist/', + '.eslintrc.js', + 'jest.config.js', + ], +}; diff --git a/packages/database/package.json b/packages/database/package.json new file mode 100644 index 00000000..2154c9a7 --- /dev/null +++ b/packages/database/package.json @@ -0,0 +1,36 @@ +{ + "name": "@nbw/database", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "private": true, + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts", + "development": "./src/index.ts" + } + }, + "scripts": { + "build": "bun run clean && bun run build:js && bun run build:types", + "build:js": "tsc --project tsconfig.build.json --declaration false --emitDeclarationOnly false", + "build:types": "tsc --project tsconfig.build.json --emitDeclarationOnly", + "clean": "rm -rf dist" + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "^5" + }, + "dependencies": { + "@nestjs/common": "^10.4.15", + "@nestjs/swagger": "^11.1.5", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "mongoose": "^7.8.3", + "@nbw/thumbnail": "workspace:*" + }, + "peerDependencies": { + "typescript": "^5" + } +} diff --git a/packages/database/src/common/dto/PageQuery.dto.ts b/packages/database/src/common/dto/PageQuery.dto.ts new file mode 100644 index 00000000..ea45e626 --- /dev/null +++ b/packages/database/src/common/dto/PageQuery.dto.ts @@ -0,0 +1,70 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; +import { + IsBoolean, + IsEnum, + IsNotEmpty, + IsNumber, + IsOptional, + IsString, + Max, + Min, +} from 'class-validator'; + +import { timespans } from '@database/song/constants'; +import type { TimespanType } from '@database/song/dto/types'; + +export class PageQueryDTO { + @Min(1) + @ApiProperty({ + example: 1, + description: 'page', + }) + page?: number = 1; + + @IsNotEmpty() + @IsNumber({ + allowNaN: false, + allowInfinity: false, + maxDecimalPlaces: 0, + }) + @Min(1) + @Max(100) + @ApiProperty({ + example: 20, + description: 'limit', + }) + limit?: number; + + @IsString() + @IsOptional() + @ApiProperty({ + example: 'field', + description: 'Sorts the results by the specified field.', + required: false, + }) + sort?: string = 'createdAt'; + + @IsBoolean() + @Transform(({ value }) => value === 'true') + @ApiProperty({ + example: false, + description: + 'Sorts the results in ascending order if true; in descending order if false.', + required: false, + }) + order?: boolean = false; + + @IsEnum(timespans) + @IsOptional() + @ApiProperty({ + example: 'hour', + description: 'Filters the results by the specified timespan.', + required: false, + }) + timespan?: TimespanType; + + constructor(partial: Partial) { + Object.assign(this, partial); + } +} diff --git a/packages/database/src/common/dto/types.ts b/packages/database/src/common/dto/types.ts new file mode 100644 index 00000000..2b92e50b --- /dev/null +++ b/packages/database/src/common/dto/types.ts @@ -0,0 +1,3 @@ +import { PageQueryDTO } from './PageQuery.dto'; + +export type PageQueryDTOType = InstanceType; diff --git a/packages/database/src/index.ts b/packages/database/src/index.ts new file mode 100644 index 00000000..3092ccb4 --- /dev/null +++ b/packages/database/src/index.ts @@ -0,0 +1,28 @@ +export * from './common/dto/PageQuery.dto'; +export * from './common/dto/types'; + +export * from './song/constants'; + +export * from './song/dto/CustomInstrumentData.dto'; +export * from './song/dto/FeaturedSongsDto.dto'; +export * from './song/dto/SongPage.dto'; +export * from './song/dto/SongPreview.dto'; +export * from './song/dto/SongStats'; +export * from './song/dto/SongView.dto'; +export * from './song/dto/ThumbnailData.dto'; +export * from './song/dto/types'; +export * from './song/dto/UploadSongDto.dto'; +export * from './song/dto/UploadSongResponseDto.dto'; + +export * from './song/entity/song.entity'; + +export * from './user/constants'; +export * from './user/dto/CreateUser.dto'; +export * from './user/dto/GetUser.dto'; +export * from './user/dto/Login.dto copy'; +export * from './user/dto/LoginWithEmail.dto'; +export * from './user/dto/NewEmailUser.dto'; +export * from './user/dto/SingleUsePass.dto'; +export * from './user/dto/UpdateUsername.dto'; + +export * from './user/entity/user.entity'; diff --git a/packages/database/src/song/constants.ts b/packages/database/src/song/constants.ts new file mode 100644 index 00000000..05854ff5 --- /dev/null +++ b/packages/database/src/song/constants.ts @@ -0,0 +1,131 @@ +import { bgColors } from '@nbw/thumbnail'; + +export const ThumbnailConst = { + zoomLevel: { + min: 1, + max: 5, + default: 3, + }, + startTick: { + default: 0, + }, + startLayer: { + default: 0, + }, + backgroundColor: { + default: bgColors.gray.dark, + }, +} as const; + +export const MIMETYPE_NBS = 'application/octet-stream' as const; + +export const UploadConst = { + file: { + maxSize: 1024 * 1024 * 3, // 3 MB + }, + + title: { + minLength: 3, + maxLength: 100, + }, + + description: { + maxLength: 1000, + }, + + originalAuthor: { + maxLength: 50, + }, + + category: { + default: 'none', + }, + + license: { + default: 'none', + }, + + customInstruments: { + maxCount: 240, + }, + + categories: { + none: 'No category', + rock: 'Rock', + pop: 'Pop', + jazz: 'Jazz', + blues: 'Blues', + country: 'Country', + metal: 'Metal', + hiphop: 'Hip-Hop', + rap: 'Rap', + reggae: 'Reggae', + classical: 'Classical', + electronic: 'Electronic', + dance: 'Dance', + rnb: 'R&B', + soul: 'Soul', + funk: 'Funk', + punk: 'Punk', + alternative: 'Alternative', + indie: 'Indie', + folk: 'Folk', + latin: 'Latin', + world: 'World', + other: 'Other', + vocaloid: 'Vocaloid', + soundtrack: 'Soundtrack', + instrumental: 'Instrumental', + ambient: 'Ambient', + gaming: 'Gaming', + anime: 'Anime', + movies_tv: 'Movies & TV', + chiptune: 'Chiptune', + lofi: 'Lofi', + kpop: 'K-pop', + jpop: 'J-pop', + }, + + licenses: { + standard: { + name: 'Standard License', + shortName: 'Standard License', + description: + "The author reserves all rights. You may not use this song without the author's permission.", + uploadDescription: + 'You allow us to distribute your song on Note Block World. Other users can listen to it, but they cannot use the song without your permission.', + }, + cc_by_sa: { + name: 'Creative Commons - Attribution-ShareAlike 4.0', + shortName: 'CC BY-SA 4.0', + description: + 'You can copy, modify, and distribute this song, even for commercial purposes, as long as you credit the author and provide a link to the song. If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.\n\nFor more information, please visit the [Creative Commons website](https://creativecommons.org/licenses/by-sa/4.0/).', + uploadDescription: + 'Anyone can copy, modify, remix, adapt and distribute this song, even for commercial purposes, as long as attribution is provided and the modifications are distributed under the same license.\nFor more information, visit the [Creative Commons](https://creativecommons.org/licenses/by-sa/4.0/) website.', + }, + }, + + visibility: { + public: 'Public', + private: 'Private', + }, +} as const; + +export const timespans = [ + 'hour', + 'day', + 'week', + 'month', + 'year', + 'all', +] as const; + +export const MY_SONGS = { + PAGE_SIZE: 10, + SORT: 'createdAt', +} as const; + +export const BROWSER_SONGS = { + featuredPageSize: 10, + paddedFeaturedPageSize: 5, +} as const; diff --git a/packages/database/src/song/dto/CustomInstrumentData.dto.ts b/packages/database/src/song/dto/CustomInstrumentData.dto.ts new file mode 100644 index 00000000..8cb3e835 --- /dev/null +++ b/packages/database/src/song/dto/CustomInstrumentData.dto.ts @@ -0,0 +1,6 @@ +import { IsNotEmpty } from 'class-validator'; + +export class CustomInstrumentData { + @IsNotEmpty() + sound: string[]; +} diff --git a/packages/database/src/song/dto/FeaturedSongsDto.dto.ts b/packages/database/src/song/dto/FeaturedSongsDto.dto.ts new file mode 100644 index 00000000..65d6eff7 --- /dev/null +++ b/packages/database/src/song/dto/FeaturedSongsDto.dto.ts @@ -0,0 +1,21 @@ +import { SongPreviewDto } from './SongPreview.dto'; + +export class FeaturedSongsDto { + hour: SongPreviewDto[]; + day: SongPreviewDto[]; + week: SongPreviewDto[]; + month: SongPreviewDto[]; + year: SongPreviewDto[]; + all: SongPreviewDto[]; + + public static create(): FeaturedSongsDto { + return { + hour: [], + day: [], + week: [], + month: [], + year: [], + all: [], + }; + } +} diff --git a/packages/database/src/song/dto/SongPage.dto.ts b/packages/database/src/song/dto/SongPage.dto.ts new file mode 100644 index 00000000..4e1e0a70 --- /dev/null +++ b/packages/database/src/song/dto/SongPage.dto.ts @@ -0,0 +1,34 @@ +import { IsArray, IsNotEmpty, IsNumber, ValidateNested } from 'class-validator'; + +import { SongPreviewDto } from './SongPreview.dto'; + +export class SongPageDto { + @IsNotEmpty() + @IsArray() + @ValidateNested() + content: Array; + + @IsNotEmpty() + @IsNumber({ + allowNaN: false, + allowInfinity: false, + maxDecimalPlaces: 0, + }) + page: number; + + @IsNotEmpty() + @IsNumber({ + allowNaN: false, + allowInfinity: false, + maxDecimalPlaces: 0, + }) + limit: number; + + @IsNotEmpty() + @IsNumber({ + allowNaN: false, + allowInfinity: false, + maxDecimalPlaces: 0, + }) + total: number; +} diff --git a/packages/database/src/song/dto/SongPreview.dto.ts b/packages/database/src/song/dto/SongPreview.dto.ts new file mode 100644 index 00000000..97acff3c --- /dev/null +++ b/packages/database/src/song/dto/SongPreview.dto.ts @@ -0,0 +1,75 @@ +import { IsNotEmpty, IsString, IsUrl, MaxLength } from 'class-validator'; + +import type { SongWithUser } from '@database/song/entity/song.entity'; + +type SongPreviewUploader = { + username: string; + profileImage: string; +}; + +export class SongPreviewDto { + @IsString() + @IsNotEmpty() + publicId: string; + + @IsNotEmpty() + uploader: SongPreviewUploader; + + @IsNotEmpty() + @IsString() + @MaxLength(128) + title: string; + + @IsNotEmpty() + @IsString() + description: string; + + @IsNotEmpty() + @IsString() + @MaxLength(64) + originalAuthor: string; + + @IsNotEmpty() + duration: number; + + @IsNotEmpty() + noteCount: number; + + @IsNotEmpty() + @IsUrl() + thumbnailUrl: string; + + @IsNotEmpty() + createdAt: Date; + + @IsNotEmpty() + updatedAt: Date; + + @IsNotEmpty() + playCount: number; + + @IsNotEmpty() + @IsString() + visibility: string; + + constructor(partial: Partial) { + Object.assign(this, partial); + } + + public static fromSongDocumentWithUser(song: SongWithUser): SongPreviewDto { + return new SongPreviewDto({ + publicId: song.publicId, + uploader: song.uploader, + title: song.title, + description: song.description, + originalAuthor: song.originalAuthor, + duration: song.stats.duration, + noteCount: song.stats.noteCount, + thumbnailUrl: song.thumbnailUrl, + createdAt: song.createdAt, + updatedAt: song.updatedAt, + playCount: song.playCount, + visibility: song.visibility, + }); + } +} diff --git a/packages/database/src/song/dto/SongStats.ts b/packages/database/src/song/dto/SongStats.ts new file mode 100644 index 00000000..49cb712b --- /dev/null +++ b/packages/database/src/song/dto/SongStats.ts @@ -0,0 +1,69 @@ +import { + IsBoolean, + IsInt, + IsNumber, + IsString, + ValidateIf, +} from 'class-validator'; + +export class SongStats { + @IsString() + midiFileName: string; + + @IsInt() + noteCount: number; + + @IsInt() + tickCount: number; + + @IsInt() + layerCount: number; + + @IsNumber() + tempo: number; + + @IsNumber() + @ValidateIf((_, value) => value !== null) + tempoRange: number[] | null; + + @IsNumber() + timeSignature: number; + + @IsNumber() + duration: number; + + @IsBoolean() + loop: boolean; + + @IsInt() + loopStartTick: number; + + @IsNumber() + minutesSpent: number; + + @IsInt() + vanillaInstrumentCount: number; + + @IsInt() + customInstrumentCount: number; + + @IsInt() + firstCustomInstrumentIndex: number; + + @IsInt() + outOfRangeNoteCount: number; + + @IsInt() + detunedNoteCount: number; + + @IsInt() + customInstrumentNoteCount: number; + + @IsInt() + incompatibleNoteCount: number; + + @IsBoolean() + compatible: boolean; + + instrumentNoteCounts: number[]; +} diff --git a/packages/database/src/song/dto/SongView.dto.ts b/packages/database/src/song/dto/SongView.dto.ts new file mode 100644 index 00000000..f63df5f4 --- /dev/null +++ b/packages/database/src/song/dto/SongView.dto.ts @@ -0,0 +1,108 @@ +import { + IsBoolean, + IsDate, + IsNotEmpty, + IsNumber, + IsString, + IsUrl, +} from 'class-validator'; + +import { SongStats } from '@database/song/dto/SongStats'; + +import type { CategoryType, LicenseType, VisibilityType } from './types'; +import type { SongDocument } from '@database/song/entity/song.entity'; + +export type SongViewUploader = { + username: string; + profileImage: string; +}; + +export class SongViewDto { + @IsString() + @IsNotEmpty() + publicId: string; + + @IsDate() + @IsNotEmpty() + createdAt: Date; + + @IsNotEmpty() + uploader: SongViewUploader; + + @IsUrl() + @IsNotEmpty() + thumbnailUrl: string; + + @IsNumber() + @IsNotEmpty() + playCount: number; + + @IsNumber() + @IsNotEmpty() + downloadCount: number; + + @IsNumber() + @IsNotEmpty() + likeCount: number; + + @IsBoolean() + @IsNotEmpty() + allowDownload: boolean; + + @IsString() + @IsNotEmpty() + title: string; + + @IsString() + originalAuthor: string; + + @IsString() + description: string; + + @IsString() + @IsNotEmpty() + visibility: VisibilityType; + + @IsString() + @IsNotEmpty() + category: CategoryType; + + @IsString() + @IsNotEmpty() + license: LicenseType; + + customInstruments: string[]; + + @IsNumber() + @IsNotEmpty() + fileSize: number; + + @IsNotEmpty() + stats: SongStats; + + public static fromSongDocument(song: SongDocument): SongViewDto { + return new SongViewDto({ + publicId: song.publicId, + createdAt: song.createdAt, + uploader: song.uploader as unknown as SongViewUploader, + thumbnailUrl: song.thumbnailUrl, + playCount: song.playCount, + downloadCount: song.downloadCount, + likeCount: song.likeCount, + allowDownload: song.allowDownload, + title: song.title, + originalAuthor: song.originalAuthor, + description: song.description, + category: song.category, + visibility: song.visibility, + license: song.license, + customInstruments: song.customInstruments, + fileSize: song.fileSize, + stats: song.stats, + }); + } + + constructor(song: SongViewDto) { + Object.assign(this, song); + } +} diff --git a/packages/database/src/song/dto/ThumbnailData.dto.ts b/packages/database/src/song/dto/ThumbnailData.dto.ts new file mode 100644 index 00000000..cdeff8d9 --- /dev/null +++ b/packages/database/src/song/dto/ThumbnailData.dto.ts @@ -0,0 +1,50 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsHexColor, IsInt, IsNotEmpty, Max, Min } from 'class-validator'; + +import { ThumbnailConst } from '../constants'; + +export class ThumbnailData { + @IsNotEmpty() + @Max(ThumbnailConst.zoomLevel.max) + @Min(ThumbnailConst.zoomLevel.min) + @IsInt() + @ApiProperty({ + description: 'Zoom level of the cover image', + example: ThumbnailConst.zoomLevel.default, + }) + zoomLevel: number; + + @IsNotEmpty() + @Min(0) + @IsInt() + @ApiProperty({ + description: 'X position of the cover image', + example: ThumbnailConst.startTick.default, + }) + startTick: number; + + @IsNotEmpty() + @Min(0) + @ApiProperty({ + description: 'Y position of the cover image', + example: ThumbnailConst.startLayer.default, + }) + startLayer: number; + + @IsNotEmpty() + @IsHexColor() + @ApiProperty({ + description: 'Background color of the cover image', + example: ThumbnailConst.backgroundColor.default, + }) + backgroundColor: string; + + static getApiExample(): ThumbnailData { + return { + zoomLevel: 3, + startTick: 0, + startLayer: 0, + backgroundColor: '#F0F0F0', + }; + } +} diff --git a/packages/database/src/song/dto/UploadSongDto.dto.ts b/packages/database/src/song/dto/UploadSongDto.dto.ts new file mode 100644 index 00000000..06f1f368 --- /dev/null +++ b/packages/database/src/song/dto/UploadSongDto.dto.ts @@ -0,0 +1,132 @@ +import { UploadConst } from '@database/song/constants'; +import type { SongDocument } from '@database/song/entity/song.entity'; +import { ApiProperty } from '@nestjs/swagger'; +import { Transform, Type } from 'class-transformer'; +import { + IsArray, + IsBoolean, + IsIn, + IsNotEmpty, + IsString, + MaxLength, + ValidateNested, +} from 'class-validator'; +import { ThumbnailData } from './ThumbnailData.dto'; +import type { CategoryType, LicenseType, VisibilityType } from './types'; + +const visibility = Object.keys(UploadConst.visibility) as Readonly; +const categories = Object.keys(UploadConst.categories) as Readonly; +const licenses = Object.keys(UploadConst.licenses) as Readonly; + +export class UploadSongDto { + @ApiProperty({ + description: 'The file to upload', + // @ts-ignore //TODO: fix this + type: 'file', + }) + file: any; //TODO: Express.Multer.File; + + @IsNotEmpty() + @IsBoolean() + @Type(() => Boolean) + @ApiProperty({ + default: true, + description: 'Whether the song can be downloaded by other users', + example: true, + }) + allowDownload: boolean; + + @IsNotEmpty() + @IsString() + @IsIn(visibility) + @ApiProperty({ + enum: visibility, + default: visibility[0], + description: 'The visibility of the song', + example: visibility[0], + }) + visibility: VisibilityType; + + @IsNotEmpty() + @IsString() + @MaxLength(UploadConst.title.maxLength) + @ApiProperty({ + description: 'Title of the song', + example: 'My Song', + }) + title: string; + + @IsString() + @MaxLength(UploadConst.originalAuthor.maxLength) + @ApiProperty({ + description: 'Original author of the song', + example: 'Myself', + }) + originalAuthor: string; + + @IsString() + @MaxLength(UploadConst.description.maxLength) + @ApiProperty({ + description: 'Description of the song', + example: 'This is my song', + }) + description: string; + + @IsNotEmpty() + @IsString() + @IsIn(categories) + @ApiProperty({ + enum: categories, + description: 'Category of the song', + example: categories[0], + }) + category: CategoryType; + + @IsNotEmpty() + @ValidateNested() + @Type(() => ThumbnailData) + @Transform(({ value }) => JSON.parse(value)) + @ApiProperty({ + description: 'Thumbnail data of the song', + example: ThumbnailData.getApiExample(), + }) + thumbnailData: ThumbnailData; + + @IsNotEmpty() + @IsString() + @IsIn(licenses) + @ApiProperty({ + enum: licenses, + default: licenses[0], + description: 'The visibility of the song', + example: licenses[0], + }) + license: LicenseType; + + @IsArray() + @MaxLength(UploadConst.customInstruments.maxCount, { each: true }) + @ApiProperty({ + description: + 'List of custom instrument paths, one for each custom instrument in the song, relative to the assets/minecraft/sounds folder', + }) + @Transform(({ value }) => JSON.parse(value)) + customInstruments: string[]; + + constructor(partial: Partial) { + Object.assign(this, partial); + } + + public static fromSongDocument(song: SongDocument): UploadSongDto { + return new UploadSongDto({ + allowDownload: song.allowDownload, + visibility: song.visibility, + title: song.title, + originalAuthor: song.originalAuthor, + description: song.description, + category: song.category, + thumbnailData: song.thumbnailData, + license: song.license, + customInstruments: song.customInstruments ?? [], + }); + } +} diff --git a/packages/database/src/song/dto/UploadSongResponseDto.dto.ts b/packages/database/src/song/dto/UploadSongResponseDto.dto.ts new file mode 100644 index 00000000..de1210bb --- /dev/null +++ b/packages/database/src/song/dto/UploadSongResponseDto.dto.ts @@ -0,0 +1,71 @@ +import type { SongWithUser } from '@database/song/entity/song.entity'; +import { ApiProperty } from '@nestjs/swagger'; +import { Transform, Type } from 'class-transformer'; +import { + IsNotEmpty, + IsString, + MaxLength, + ValidateNested, +} from 'class-validator'; +import * as SongViewDto from './SongView.dto'; +import { ThumbnailData } from './ThumbnailData.dto'; + +export class UploadSongResponseDto { + @IsString() + @IsNotEmpty() + @ApiProperty({ + description: 'ID of the song', + example: '1234567890abcdef12345678', + }) + publicId: string; + + @IsNotEmpty() + @IsString() + @MaxLength(128) + @ApiProperty({ + description: 'Title of the song', + example: 'My Song', + }) + title: string; + + @IsString() + @MaxLength(64) + @ApiProperty({ + description: 'Original author of the song', + example: 'Myself', + }) + uploader: SongViewDto.SongViewUploader; + + @IsNotEmpty() + @ValidateNested() + @Type(() => ThumbnailData) + @Transform(({ value }) => JSON.parse(value)) + @ApiProperty({ + description: 'Thumbnail data of the song', + example: ThumbnailData.getApiExample(), + }) + thumbnailUrl: string; + + @IsNotEmpty() + duration: number; + + @IsNotEmpty() + noteCount: number; + + constructor(partial: Partial) { + Object.assign(this, partial); + } + + public static fromSongWithUserDocument( + song: SongWithUser, + ): UploadSongResponseDto { + return new UploadSongResponseDto({ + publicId: song.publicId, + title: song.title, + uploader: song.uploader, + duration: song.stats.duration, + thumbnailUrl: song.thumbnailUrl, + noteCount: song.stats.noteCount, + }); + } +} diff --git a/packages/database/src/song/dto/types.ts b/packages/database/src/song/dto/types.ts new file mode 100644 index 00000000..a4500098 --- /dev/null +++ b/packages/database/src/song/dto/types.ts @@ -0,0 +1,41 @@ +import { CustomInstrumentData } from './CustomInstrumentData.dto'; +import { FeaturedSongsDto } from './FeaturedSongsDto.dto'; +import { SongPageDto } from './SongPage.dto'; +import { SongPreviewDto } from './SongPreview.dto'; +import { SongViewDto } from './SongView.dto'; +import { ThumbnailData as ThumbnailData } from './ThumbnailData.dto'; +import { UploadSongDto } from './UploadSongDto.dto'; +import { UploadSongResponseDto } from './UploadSongResponseDto.dto'; +import { UploadConst, timespans } from '../constants'; + +export type UploadSongDtoType = InstanceType; + +export type UploadSongNoFileDtoType = Omit; + +export type UploadSongResponseDtoType = InstanceType< + typeof UploadSongResponseDto +>; + +export type SongViewDtoType = InstanceType; + +export type SongPreviewDtoType = InstanceType; + +export type SongPageDtoType = InstanceType; + +export type CustomInstrumentDataType = InstanceType< + typeof CustomInstrumentData +>; + +export type FeaturedSongsDtoType = InstanceType; + +export type ThumbnailDataType = InstanceType; + +export type VisibilityType = keyof typeof UploadConst.visibility; + +export type CategoryType = keyof typeof UploadConst.categories; + +export type LicenseType = keyof typeof UploadConst.licenses; + +export type SongsFolder = Record; + +export type TimespanType = (typeof timespans)[number]; diff --git a/server/src/song/entity/song.entity.ts b/packages/database/src/song/entity/song.entity.ts similarity index 83% rename from server/src/song/entity/song.entity.ts rename to packages/database/src/song/entity/song.entity.ts index 530ca19e..195499e1 100644 --- a/server/src/song/entity/song.entity.ts +++ b/packages/database/src/song/entity/song.entity.ts @@ -1,15 +1,11 @@ import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; -import { SongStats } from '@shared/validation/song/dto/SongStats'; -import { SongViewUploader } from '@shared/validation/song/dto/SongView.dto'; -import { ThumbnailData } from '@shared/validation/song/dto/ThumbnailData.dto'; -import type { - CategoryType, - LicenseType, - VisibilityType, -} from '@shared/validation/song/dto/types'; -import { HydratedDocument, Schema as MongooseSchema, Types } from 'mongoose'; - -import { User } from '@server/user/entity/user.entity'; +import type { HydratedDocument } from 'mongoose'; +import { Schema as MongooseSchema, Types } from 'mongoose'; +import { User } from '@database/user/entity/user.entity'; +import { SongStats } from '../dto/SongStats'; +import type { SongViewUploader } from '../dto/SongView.dto'; +import { ThumbnailData } from '../dto/ThumbnailData.dto'; +import type { CategoryType, LicenseType, VisibilityType } from '../dto/types'; @Schema({ timestamps: true, @@ -21,7 +17,7 @@ import { User } from '@server/user/entity/user.entity'; }, }, }) -export class Song { +export default class Song { @Prop({ type: String, required: true, unique: true }) publicId: string; @@ -96,7 +92,6 @@ export class Song { @Prop({ type: String, required: false }) webhookMessageId?: string | null; } - export const SongSchema = SchemaFactory.createForClass(Song); export type SongDocument = Song & HydratedDocument; diff --git a/packages/database/src/user/constants.ts b/packages/database/src/user/constants.ts new file mode 100644 index 00000000..75bdebfd --- /dev/null +++ b/packages/database/src/user/constants.ts @@ -0,0 +1,5 @@ +export const UserConst = { + USERNAME_MIN_LENGTH: 3, + USERNAME_MAX_LENGTH: 32, + ALLOWED_REGEXP: /^[a-zA-Z0-9-_.]*$/, +} as const; diff --git a/packages/database/src/user/dto/CreateUser.dto.ts b/packages/database/src/user/dto/CreateUser.dto.ts new file mode 100644 index 00000000..ec6ca8f8 --- /dev/null +++ b/packages/database/src/user/dto/CreateUser.dto.ts @@ -0,0 +1,41 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { + IsEmail, + IsNotEmpty, + IsString, + IsUrl, + MaxLength, +} from 'class-validator'; + +export class CreateUser { + @IsNotEmpty() + @IsString() + @MaxLength(64) + @IsEmail() + @ApiProperty({ + description: 'Email of the user', + example: 'vycasnicolas@gmailcom', + }) + email: string; + + @IsNotEmpty() + @IsString() + @MaxLength(64) + @ApiProperty({ + description: 'Username of the user', + example: 'tomast1137', + }) + username: string; + + @IsNotEmpty() + @IsUrl() + @ApiProperty({ + description: 'Profile image of the user', + example: 'https://example.com/image.png', + }) + profileImage: string; + + constructor(partial: Partial) { + Object.assign(this, partial); + } +} diff --git a/packages/database/src/user/dto/GetUser.dto.ts b/packages/database/src/user/dto/GetUser.dto.ts new file mode 100644 index 00000000..3feb46a3 --- /dev/null +++ b/packages/database/src/user/dto/GetUser.dto.ts @@ -0,0 +1,45 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { + IsEmail, + IsMongoId, + IsOptional, + IsString, + MaxLength, + MinLength, +} from 'class-validator'; + +export class GetUser { + @IsString() + @IsOptional() + @MaxLength(64) + @IsEmail() + @ApiProperty({ + description: 'Email of the user', + example: 'vycasnicolas@gmailcom', + }) + email?: string; + + @IsString() + @IsOptional() + @MaxLength(64) + @ApiProperty({ + description: 'Username of the user', + example: 'tomast1137', + }) + username?: string; + + @IsString() + @IsOptional() + @MaxLength(64) + @MinLength(24) + @IsMongoId() + @ApiProperty({ + description: 'ID of the user', + example: 'replace0me6b5f0a8c1a6d8c', + }) + id?: string; + + constructor(partial: Partial) { + Object.assign(this, partial); + } +} diff --git a/packages/database/src/user/dto/Login.dto copy.ts b/packages/database/src/user/dto/Login.dto copy.ts new file mode 100644 index 00000000..b433a0d2 --- /dev/null +++ b/packages/database/src/user/dto/Login.dto copy.ts @@ -0,0 +1,9 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; + +export class LoginDto { + @ApiProperty() + @IsString() + @IsNotEmpty() + public email: string; +} diff --git a/packages/database/src/user/dto/LoginWithEmail.dto.ts b/packages/database/src/user/dto/LoginWithEmail.dto.ts new file mode 100644 index 00000000..27c2d9cc --- /dev/null +++ b/packages/database/src/user/dto/LoginWithEmail.dto.ts @@ -0,0 +1,9 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; + +export class LoginWithEmailDto { + @ApiProperty() + @IsString() + @IsNotEmpty() + public email: string; +} diff --git a/packages/database/src/user/dto/NewEmailUser.dto.ts b/packages/database/src/user/dto/NewEmailUser.dto.ts new file mode 100644 index 00000000..33be8301 --- /dev/null +++ b/packages/database/src/user/dto/NewEmailUser.dto.ts @@ -0,0 +1,30 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { + IsEmail, + IsNotEmpty, + IsString, + MaxLength, + MinLength, +} from 'class-validator'; + +export class NewEmailUserDto { + @ApiProperty({ + description: 'User name', + example: 'Tomast1337', + }) + @IsString() + @IsNotEmpty() + @MaxLength(64) + @MinLength(4) + username: string; + + @ApiProperty({ + description: 'User email', + example: 'vycasnicolas@gmail.com', + }) + @IsString() + @IsNotEmpty() + @MaxLength(64) + @IsEmail() + email: string; +} diff --git a/packages/database/src/user/dto/SingleUsePass.dto.ts b/packages/database/src/user/dto/SingleUsePass.dto.ts new file mode 100644 index 00000000..e1e04c25 --- /dev/null +++ b/packages/database/src/user/dto/SingleUsePass.dto.ts @@ -0,0 +1,14 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; + +export class SingleUsePassDto { + @ApiProperty() + @IsString() + @IsNotEmpty() + id: string; + + @ApiProperty() + @IsString() + @IsNotEmpty() + pass: string; +} diff --git a/packages/database/src/user/dto/UpdateUsername.dto.ts b/packages/database/src/user/dto/UpdateUsername.dto.ts new file mode 100644 index 00000000..e64e8940 --- /dev/null +++ b/packages/database/src/user/dto/UpdateUsername.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsString, Matches, MaxLength, MinLength } from 'class-validator'; + +import { UserConst } from '../constants'; + +export class UpdateUsernameDto { + @IsString() + @MaxLength(UserConst.USERNAME_MAX_LENGTH) + @MinLength(UserConst.USERNAME_MIN_LENGTH) + @Matches(UserConst.ALLOWED_REGEXP) + @ApiProperty({ + description: 'Username of the user', + example: 'tomast1137', + }) + username: string; +} diff --git a/packages/database/src/user/dto/user.dto.ts b/packages/database/src/user/dto/user.dto.ts new file mode 100644 index 00000000..a611c20f --- /dev/null +++ b/packages/database/src/user/dto/user.dto.ts @@ -0,0 +1,16 @@ +import { User } from '../entity/user.entity'; + +export class UserDto { + username: string; + publicName: string; + email: string; + static fromEntity(user: User): UserDto { + const userDto: UserDto = { + username: user.username, + publicName: user.publicName, + email: user.email, + }; + + return userDto; + } +} diff --git a/server/src/user/entity/user.entity.ts b/packages/database/src/user/entity/user.entity.ts similarity index 95% rename from server/src/user/entity/user.entity.ts rename to packages/database/src/user/entity/user.entity.ts index ff800a28..e480e133 100644 --- a/server/src/user/entity/user.entity.ts +++ b/packages/database/src/user/entity/user.entity.ts @@ -1,5 +1,6 @@ import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; -import { HydratedDocument, Schema as MongooseSchema } from 'mongoose'; +import type { HydratedDocument } from 'mongoose'; +import { Schema as MongooseSchema } from 'mongoose'; @Schema({}) class SocialLinks { diff --git a/packages/database/tsconfig.build.json b/packages/database/tsconfig.build.json new file mode 100644 index 00000000..16832395 --- /dev/null +++ b/packages/database/tsconfig.build.json @@ -0,0 +1,20 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "declaration": true, + "outDir": "dist", + "allowImportingTsExtensions": false, + "verbatimModuleSyntax": false, + "moduleResolution": "node" + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "dist", + "**/*.spec.ts", + "**/*.test.ts" + ] +} \ No newline at end of file diff --git a/packages/database/tsconfig.json b/packages/database/tsconfig.json new file mode 100644 index 00000000..513e5852 --- /dev/null +++ b/packages/database/tsconfig.json @@ -0,0 +1,46 @@ +{ + "compilerOptions": { + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + // Environment setup & latest features + "lib": [ + "ESNext" + ], + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + // Bundler mode + //"moduleResolution": "", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false, + "paths": { + "@database/*": [ + "src/*" + ], + } + } +} \ No newline at end of file From f79dc4e98bb9b12a033c645f8364148cfd7ab314 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 19:59:34 -0300 Subject: [PATCH 03/17] refactor: moved frontend to apps/frontend --- {web => apps/frontend}/.env.local.example | 0 {web => apps/frontend}/.eslintrc.js | 0 {web => apps/frontend}/.gitignore | 0 {web => apps/frontend}/README.md | 0 {web => apps/frontend}/mdx-components.tsx | 0 {web => apps/frontend}/next.config.mjs | 0 {web => apps/frontend}/package.json | 2 +- {web => apps/frontend}/postcss.config.js | 0 {web => apps/frontend}/posts/about/about.md | 0 .../2024-07-22_closed-beta-announcement.md | 0 .../blog/2024-07-27_changelog-july-2024.md | 0 .../blog/2024-10-07_changelog-october-2024.md | 0 .../posts/blog/2025-04-25_blanketcon-2025 | 0 .../frontend}/posts/help/1_creating-song.md | 0 .../frontend}/posts/help/2_uploading-song.md | 0 .../frontend}/posts/help/3_browsing-songs.md | 0 .../posts/help/4_downloading-songs.md | 0 .../posts/help/5_custom-instruments.md | 0 {web => apps/frontend}/public/adasync.js | 0 {web => apps/frontend}/public/ads.txt | 0 .../frontend}/public/background-tile-flat.png | Bin .../frontend}/public/background-tile.png | Bin {web => apps/frontend}/public/broken.png | Bin {web => apps/frontend}/public/demo.png | Bin .../frontend}/public/docs/guidelines.md | 0 {web => apps/frontend}/public/docs/privacy.md | 0 {web => apps/frontend}/public/docs/terms.md | 0 {web => apps/frontend}/public/empty-chest.png | Bin .../frontend}/public/fonts/Lato-Regular.ttf | Bin {web => apps/frontend}/public/guidelines.md | 0 {web => apps/frontend}/public/icons/README.md | 0 .../public/icons/android-chrome-192x192.png | Bin .../public/icons/android-chrome-256x256.png | Bin .../public/icons/apple-touch-icon.png | Bin .../frontend}/public/icons/browserconfig.xml | 0 .../frontend}/public/icons/favicon-16x16.png | Bin .../frontend}/public/icons/favicon-32x32.png | Bin .../frontend}/public/icons/favicon.ico | Bin .../frontend}/public/icons/mstile-150x150.png | Bin .../frontend}/public/icons/mstile-310x150.png | Bin .../frontend}/public/icons/mstile-310x310.png | Bin .../frontend}/public/icons/mstile-70x70.png | Bin .../public/icons/safari-pinned-tab.svg | 0 .../frontend}/public/icons/site.webmanifest | 0 .../frontend}/public/img/authors/bentroen.png | Bin .../frontend}/public/img/authors/encode42.png | Bin .../public/img/authors/tomast1337.jpg | Bin .../public/img/blog/blanketcon-2025.jpg | Bin .../public/img/help/1_creating_song.png | Bin .../public/img/help/2_uploading_song.png | Bin .../public/img/help/3_browsing_songs.png | Bin .../public/img/help/4_downloading_songs.png | Bin .../public/img/help/5_custom_instruments.png | Bin .../public/img/note-block-grayscale.png | Bin .../frontend}/public/img/note-block-pfp.jpg | Bin {web => apps/frontend}/public/img/post.png | Bin {web => apps/frontend}/public/nbw-color.png | Bin {web => apps/frontend}/public/nbw-header.png | Bin .../frontend}/public/nbw-logo-flat.png | Bin {web => apps/frontend}/public/nbw-logo.png | Bin {web => apps/frontend}/public/nbw-white.png | Bin .../frontend}/public/notes_sprites.png | Bin .../src/app/(content)/(info)/about/about.mdx | 0 .../src/app/(content)/(info)/about/page.tsx | 0 .../app/(content)/(info)/blog/[id]/page.tsx | 0 .../src/app/(content)/(info)/blog/page.tsx | 0 .../app/(content)/(info)/contact/contact.mdx | 0 .../src/app/(content)/(info)/contact/page.tsx | 0 .../app/(content)/(info)/help/[id]/page.tsx | 0 .../src/app/(content)/(info)/help/page.tsx | 0 .../frontend}/src/app/(content)/layout.tsx | 0 .../src/app/(content)/my-songs/page.tsx | 0 .../frontend}/src/app/(content)/page.tsx | 0 .../src/app/(content)/song/[id]/edit/page.tsx | 0 .../src/app/(content)/song/[id]/page.tsx | 0 .../src/app/(content)/upload/layout.tsx | 0 .../src/app/(content)/upload/page.tsx | 0 .../app/(content)/user/[id]/page_disable.tsx | 0 .../(external)/(auth)/login/email/page.tsx | 0 .../src/app/(external)/(auth)/login/page.tsx | 0 .../src/app/(external)/(auth)/logout/page.tsx | 0 .../(external)/(legal)/guidelines/page.tsx | 0 .../src/app/(external)/(legal)/layout.tsx | 0 .../app/(external)/(legal)/privacy/page.tsx | 0 .../src/app/(external)/(legal)/terms/page.tsx | 0 .../app/(external)/[...not-found]/page.tsx | 0 .../frontend}/src/app/(external)/layout.tsx | 0 .../src/app/enableRecaptchaBadge.css | 0 {web => apps/frontend}/src/app/favicon.ico | Bin {web => apps/frontend}/src/app/globals.css | 0 .../frontend}/src/app/hideScrollbar.css | 0 {web => apps/frontend}/src/app/layout.tsx | 0 {web => apps/frontend}/src/app/not-found.tsx | 0 {web => apps/frontend}/src/global.d.ts | 0 .../frontend}/src/lib/axios/ClientAxios.ts | 0 {web => apps/frontend}/src/lib/axios/index.ts | 0 .../frontend}/src/lib/axios/token.utils.ts | 0 {web => apps/frontend}/src/lib/posts.ts | 0 .../frontend}/src/lib/tailwind.utils.ts | 0 .../modules/auth/components/client/.gitkeep | 0 .../auth/components/client/LoginFrom.tsx | 0 .../auth/components/client/login.util.ts | 0 .../src/modules/auth/components/loginPage.tsx | 0 .../auth/components/loginWithEmailPage.tsx | 0 .../src/modules/auth/features/.gitkeep | 0 .../src/modules/auth/features/auth.utils.ts | 0 .../frontend}/src/modules/auth/types/User.ts | 0 .../src/modules/browse/WelcomeBanner.tsx | 0 .../browse/components/HomePageComponent.tsx | 0 .../modules/browse/components/SongCard.tsx | 0 .../browse/components/SongCardGroup.tsx | 0 .../components/client/CategoryButton.tsx | 0 .../components/client/LoadMoreButton.tsx | 0 .../components/client/TimespanButton.tsx | 0 .../client/context/FeaturedSongs.context.tsx | 0 .../client/context/HomePage.context.tsx | 0 .../client/context/RecentSongs.context.tsx | 0 .../edit-profile/components/client/.gitkeep | 0 .../modules/edit-profile/features/.gitkeep | 0 .../my-songs/components/MySongsPage.tsx | 0 .../components/client/DeleteConfirmDialog.tsx | 0 .../components/client/MySongsButtons.tsx | 0 .../components/client/MySongsTable.tsx | 0 .../my-songs/components/client/SongRow.tsx | 0 .../client/context/MySongs.context.tsx | 0 .../shared/components/CustomMarkdown.tsx | 0 .../shared/components/GoogleAdSense.tsx | 0 .../shared/components/NoteBlockWorldLogo.tsx | 0 .../shared/components/TeamMemberCard.tsx | 0 .../shared/components/client/BackButton.tsx | 0 .../shared/components/client/Carousel.tsx | 0 .../shared/components/client/Command.tsx | 0 .../shared/components/client/CookieBanner.tsx | 0 .../shared/components/client/ErrorBalloon.tsx | 0 .../shared/components/client/ErrorBox.tsx | 0 .../shared/components/client/FormElements.tsx | 0 .../shared/components/client/GenericModal.tsx | 0 .../shared/components/client/Popover.tsx | 0 .../components/client/UserMenuButton.tsx | 0 .../shared/components/client/ads/AdSlots.tsx | 0 .../components/client/ads/DetectAdBlock.tsx | 0 .../client/ads/useAdSenseClient.tsx | 0 .../shared/components/layout/BlockTab.tsx | 0 .../components/layout/CopyrightFooter.tsx | 0 .../components/layout/DocumentLayout.tsx | 0 .../shared/components/layout/Footer.tsx | 0 .../shared/components/layout/Header.tsx | 0 .../shared/components/layout/MusicalNote.css | 0 .../shared/components/layout/MusicalNote.tsx | 0 .../shared/components/layout/NavLinks.tsx | 0 .../shared/components/layout/NavbarLayout.tsx | 0 .../components/layout/RandomSongButton.tsx | 0 .../shared/components/layout/SettingsMenu.tsx | 0 .../components/layout/SignOutButton.tsx | 0 .../components/layout/SongThumbnail.tsx | 0 .../shared/components/layout/UserMenu.tsx | 0 .../shared/components/layout/UserMenuLink.tsx | 0 .../shared/components/layout/popover.tsx | 0 .../src/modules/shared/components/tooltip.tsx | 0 .../src/modules/shared/util/format.ts | 0 .../components/client/EditSongPage.tsx | 0 .../components/client/SongEditForm.tsx | 0 .../client/context/EditSong.context.tsx | 0 .../components/client/SongUploadForm.tsx | 0 .../components/client/UploadCompleteModal.tsx | 0 .../components/client/UploadSongPage.tsx | 0 .../client/context/UploadSong.context.tsx | 0 .../modules/song/components/SongDetails.tsx | 0 .../src/modules/song/components/SongPage.tsx | 0 .../song/components/SongPageButtons.tsx | 0 .../components/client/DownloadSongModal.tsx | 0 .../song/components/client/FileDisplay.tsx | 0 .../components/client/InstrumentPicker.tsx | 0 .../song/components/client/LicenseInfo.tsx | 0 .../song/components/client/ShareModal.tsx | 0 .../song/components/client/SongCanvas.tsx | 0 .../song/components/client/SongForm.tsx | 0 .../song/components/client/SongForm.zod.ts | 0 .../components/client/SongSearchCombo.tsx | 0 .../song/components/client/SongSelector.tsx | 0 .../components/client/SongThumbnailInput.tsx | 0 .../components/client/ThumbnailRenderer.tsx | 0 .../client/context/Song.context.tsx | 0 .../src/modules/song/util/downloadSong.ts | 0 .../src/modules/song/util/getSoundList.ts | 0 .../modules/user/components/UserProfile.tsx | 0 .../modules/user/components/client/.gitkeep | 0 .../src/modules/user/features/song.util.ts | 0 .../src/modules/user/features/user.util.ts | 0 {web => apps/frontend}/tailwind.config.js | 0 apps/frontend/tsconfig.json | 48 ++++++++++++++++++ web/tsconfig.json | 31 ----------- 192 files changed, 49 insertions(+), 32 deletions(-) rename {web => apps/frontend}/.env.local.example (100%) rename {web => apps/frontend}/.eslintrc.js (100%) rename {web => apps/frontend}/.gitignore (100%) rename {web => apps/frontend}/README.md (100%) rename {web => apps/frontend}/mdx-components.tsx (100%) rename {web => apps/frontend}/next.config.mjs (100%) rename {web => apps/frontend}/package.json (97%) rename {web => apps/frontend}/postcss.config.js (100%) rename {web => apps/frontend}/posts/about/about.md (100%) rename {web => apps/frontend}/posts/blog/2024-07-22_closed-beta-announcement.md (100%) rename {web => apps/frontend}/posts/blog/2024-07-27_changelog-july-2024.md (100%) rename {web => apps/frontend}/posts/blog/2024-10-07_changelog-october-2024.md (100%) rename {web => apps/frontend}/posts/blog/2025-04-25_blanketcon-2025 (100%) rename {web => apps/frontend}/posts/help/1_creating-song.md (100%) rename {web => apps/frontend}/posts/help/2_uploading-song.md (100%) rename {web => apps/frontend}/posts/help/3_browsing-songs.md (100%) rename {web => apps/frontend}/posts/help/4_downloading-songs.md (100%) rename {web => apps/frontend}/posts/help/5_custom-instruments.md (100%) rename {web => apps/frontend}/public/adasync.js (100%) rename {web => apps/frontend}/public/ads.txt (100%) rename {web => apps/frontend}/public/background-tile-flat.png (100%) rename {web => apps/frontend}/public/background-tile.png (100%) rename {web => apps/frontend}/public/broken.png (100%) rename {web => apps/frontend}/public/demo.png (100%) rename {web => apps/frontend}/public/docs/guidelines.md (100%) rename {web => apps/frontend}/public/docs/privacy.md (100%) rename {web => apps/frontend}/public/docs/terms.md (100%) rename {web => apps/frontend}/public/empty-chest.png (100%) rename {web => apps/frontend}/public/fonts/Lato-Regular.ttf (100%) rename {web => apps/frontend}/public/guidelines.md (100%) rename {web => apps/frontend}/public/icons/README.md (100%) rename {web => apps/frontend}/public/icons/android-chrome-192x192.png (100%) rename {web => apps/frontend}/public/icons/android-chrome-256x256.png (100%) rename {web => apps/frontend}/public/icons/apple-touch-icon.png (100%) rename {web => apps/frontend}/public/icons/browserconfig.xml (100%) rename {web => apps/frontend}/public/icons/favicon-16x16.png (100%) rename {web => apps/frontend}/public/icons/favicon-32x32.png (100%) rename {web => apps/frontend}/public/icons/favicon.ico (100%) rename {web => apps/frontend}/public/icons/mstile-150x150.png (100%) rename {web => apps/frontend}/public/icons/mstile-310x150.png (100%) rename {web => apps/frontend}/public/icons/mstile-310x310.png (100%) rename {web => apps/frontend}/public/icons/mstile-70x70.png (100%) rename {web => apps/frontend}/public/icons/safari-pinned-tab.svg (100%) rename {web => apps/frontend}/public/icons/site.webmanifest (100%) rename {web => apps/frontend}/public/img/authors/bentroen.png (100%) rename {web => apps/frontend}/public/img/authors/encode42.png (100%) rename {web => apps/frontend}/public/img/authors/tomast1337.jpg (100%) rename {web => apps/frontend}/public/img/blog/blanketcon-2025.jpg (100%) rename {web => apps/frontend}/public/img/help/1_creating_song.png (100%) rename {web => apps/frontend}/public/img/help/2_uploading_song.png (100%) rename {web => apps/frontend}/public/img/help/3_browsing_songs.png (100%) rename {web => apps/frontend}/public/img/help/4_downloading_songs.png (100%) rename {web => apps/frontend}/public/img/help/5_custom_instruments.png (100%) rename {web => apps/frontend}/public/img/note-block-grayscale.png (100%) rename {web => apps/frontend}/public/img/note-block-pfp.jpg (100%) rename {web => apps/frontend}/public/img/post.png (100%) rename {web => apps/frontend}/public/nbw-color.png (100%) rename {web => apps/frontend}/public/nbw-header.png (100%) rename {web => apps/frontend}/public/nbw-logo-flat.png (100%) rename {web => apps/frontend}/public/nbw-logo.png (100%) rename {web => apps/frontend}/public/nbw-white.png (100%) rename {web => apps/frontend}/public/notes_sprites.png (100%) rename {web => apps/frontend}/src/app/(content)/(info)/about/about.mdx (100%) rename {web => apps/frontend}/src/app/(content)/(info)/about/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/(info)/blog/[id]/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/(info)/blog/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/(info)/contact/contact.mdx (100%) rename {web => apps/frontend}/src/app/(content)/(info)/contact/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/(info)/help/[id]/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/(info)/help/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/layout.tsx (100%) rename {web => apps/frontend}/src/app/(content)/my-songs/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/song/[id]/edit/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/song/[id]/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/upload/layout.tsx (100%) rename {web => apps/frontend}/src/app/(content)/upload/page.tsx (100%) rename {web => apps/frontend}/src/app/(content)/user/[id]/page_disable.tsx (100%) rename {web => apps/frontend}/src/app/(external)/(auth)/login/email/page.tsx (100%) rename {web => apps/frontend}/src/app/(external)/(auth)/login/page.tsx (100%) rename {web => apps/frontend}/src/app/(external)/(auth)/logout/page.tsx (100%) rename {web => apps/frontend}/src/app/(external)/(legal)/guidelines/page.tsx (100%) rename {web => apps/frontend}/src/app/(external)/(legal)/layout.tsx (100%) rename {web => apps/frontend}/src/app/(external)/(legal)/privacy/page.tsx (100%) rename {web => apps/frontend}/src/app/(external)/(legal)/terms/page.tsx (100%) rename {web => apps/frontend}/src/app/(external)/[...not-found]/page.tsx (100%) rename {web => apps/frontend}/src/app/(external)/layout.tsx (100%) rename {web => apps/frontend}/src/app/enableRecaptchaBadge.css (100%) rename {web => apps/frontend}/src/app/favicon.ico (100%) rename {web => apps/frontend}/src/app/globals.css (100%) rename {web => apps/frontend}/src/app/hideScrollbar.css (100%) rename {web => apps/frontend}/src/app/layout.tsx (100%) rename {web => apps/frontend}/src/app/not-found.tsx (100%) rename {web => apps/frontend}/src/global.d.ts (100%) rename {web => apps/frontend}/src/lib/axios/ClientAxios.ts (100%) rename {web => apps/frontend}/src/lib/axios/index.ts (100%) rename {web => apps/frontend}/src/lib/axios/token.utils.ts (100%) rename {web => apps/frontend}/src/lib/posts.ts (100%) rename {web => apps/frontend}/src/lib/tailwind.utils.ts (100%) rename {web => apps/frontend}/src/modules/auth/components/client/.gitkeep (100%) rename {web => apps/frontend}/src/modules/auth/components/client/LoginFrom.tsx (100%) rename {web => apps/frontend}/src/modules/auth/components/client/login.util.ts (100%) rename {web => apps/frontend}/src/modules/auth/components/loginPage.tsx (100%) rename {web => apps/frontend}/src/modules/auth/components/loginWithEmailPage.tsx (100%) rename {web => apps/frontend}/src/modules/auth/features/.gitkeep (100%) rename {web => apps/frontend}/src/modules/auth/features/auth.utils.ts (100%) rename {web => apps/frontend}/src/modules/auth/types/User.ts (100%) rename {web => apps/frontend}/src/modules/browse/WelcomeBanner.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/HomePageComponent.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/SongCard.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/SongCardGroup.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/client/CategoryButton.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/client/LoadMoreButton.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/client/TimespanButton.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/client/context/FeaturedSongs.context.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/client/context/HomePage.context.tsx (100%) rename {web => apps/frontend}/src/modules/browse/components/client/context/RecentSongs.context.tsx (100%) rename {web => apps/frontend}/src/modules/edit-profile/components/client/.gitkeep (100%) rename {web => apps/frontend}/src/modules/edit-profile/features/.gitkeep (100%) rename {web => apps/frontend}/src/modules/my-songs/components/MySongsPage.tsx (100%) rename {web => apps/frontend}/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx (100%) rename {web => apps/frontend}/src/modules/my-songs/components/client/MySongsButtons.tsx (100%) rename {web => apps/frontend}/src/modules/my-songs/components/client/MySongsTable.tsx (100%) rename {web => apps/frontend}/src/modules/my-songs/components/client/SongRow.tsx (100%) rename {web => apps/frontend}/src/modules/my-songs/components/client/context/MySongs.context.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/CustomMarkdown.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/GoogleAdSense.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/NoteBlockWorldLogo.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/TeamMemberCard.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/BackButton.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/Carousel.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/Command.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/CookieBanner.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/ErrorBalloon.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/ErrorBox.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/FormElements.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/GenericModal.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/Popover.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/UserMenuButton.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/ads/AdSlots.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/ads/DetectAdBlock.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/client/ads/useAdSenseClient.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/BlockTab.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/CopyrightFooter.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/DocumentLayout.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/Footer.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/Header.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/MusicalNote.css (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/MusicalNote.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/NavLinks.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/NavbarLayout.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/RandomSongButton.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/SettingsMenu.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/SignOutButton.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/SongThumbnail.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/UserMenu.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/UserMenuLink.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/layout/popover.tsx (100%) rename {web => apps/frontend}/src/modules/shared/components/tooltip.tsx (100%) rename {web => apps/frontend}/src/modules/shared/util/format.ts (100%) rename {web => apps/frontend}/src/modules/song-edit/components/client/EditSongPage.tsx (100%) rename {web => apps/frontend}/src/modules/song-edit/components/client/SongEditForm.tsx (100%) rename {web => apps/frontend}/src/modules/song-edit/components/client/context/EditSong.context.tsx (100%) rename {web => apps/frontend}/src/modules/song-upload/components/client/SongUploadForm.tsx (100%) rename {web => apps/frontend}/src/modules/song-upload/components/client/UploadCompleteModal.tsx (100%) rename {web => apps/frontend}/src/modules/song-upload/components/client/UploadSongPage.tsx (100%) rename {web => apps/frontend}/src/modules/song-upload/components/client/context/UploadSong.context.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/SongDetails.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/SongPage.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/SongPageButtons.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/DownloadSongModal.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/FileDisplay.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/InstrumentPicker.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/LicenseInfo.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/ShareModal.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/SongCanvas.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/SongForm.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/SongForm.zod.ts (100%) rename {web => apps/frontend}/src/modules/song/components/client/SongSearchCombo.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/SongSelector.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/SongThumbnailInput.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/ThumbnailRenderer.tsx (100%) rename {web => apps/frontend}/src/modules/song/components/client/context/Song.context.tsx (100%) rename {web => apps/frontend}/src/modules/song/util/downloadSong.ts (100%) rename {web => apps/frontend}/src/modules/song/util/getSoundList.ts (100%) rename {web => apps/frontend}/src/modules/user/components/UserProfile.tsx (100%) rename {web => apps/frontend}/src/modules/user/components/client/.gitkeep (100%) rename {web => apps/frontend}/src/modules/user/features/song.util.ts (100%) rename {web => apps/frontend}/src/modules/user/features/user.util.ts (100%) rename {web => apps/frontend}/tailwind.config.js (100%) create mode 100644 apps/frontend/tsconfig.json delete mode 100644 web/tsconfig.json diff --git a/web/.env.local.example b/apps/frontend/.env.local.example similarity index 100% rename from web/.env.local.example rename to apps/frontend/.env.local.example diff --git a/web/.eslintrc.js b/apps/frontend/.eslintrc.js similarity index 100% rename from web/.eslintrc.js rename to apps/frontend/.eslintrc.js diff --git a/web/.gitignore b/apps/frontend/.gitignore similarity index 100% rename from web/.gitignore rename to apps/frontend/.gitignore diff --git a/web/README.md b/apps/frontend/README.md similarity index 100% rename from web/README.md rename to apps/frontend/README.md diff --git a/web/mdx-components.tsx b/apps/frontend/mdx-components.tsx similarity index 100% rename from web/mdx-components.tsx rename to apps/frontend/mdx-components.tsx diff --git a/web/next.config.mjs b/apps/frontend/next.config.mjs similarity index 100% rename from web/next.config.mjs rename to apps/frontend/next.config.mjs diff --git a/web/package.json b/apps/frontend/package.json similarity index 97% rename from web/package.json rename to apps/frontend/package.json index 3ef5aa46..6ce8145d 100644 --- a/web/package.json +++ b/apps/frontend/package.json @@ -1,5 +1,5 @@ { - "name": "noteblockworld-web", + "name": "@nbw/noteblockworld-frontend", "version": "0.1.0", "private": true, "scripts": { diff --git a/web/postcss.config.js b/apps/frontend/postcss.config.js similarity index 100% rename from web/postcss.config.js rename to apps/frontend/postcss.config.js diff --git a/web/posts/about/about.md b/apps/frontend/posts/about/about.md similarity index 100% rename from web/posts/about/about.md rename to apps/frontend/posts/about/about.md diff --git a/web/posts/blog/2024-07-22_closed-beta-announcement.md b/apps/frontend/posts/blog/2024-07-22_closed-beta-announcement.md similarity index 100% rename from web/posts/blog/2024-07-22_closed-beta-announcement.md rename to apps/frontend/posts/blog/2024-07-22_closed-beta-announcement.md diff --git a/web/posts/blog/2024-07-27_changelog-july-2024.md b/apps/frontend/posts/blog/2024-07-27_changelog-july-2024.md similarity index 100% rename from web/posts/blog/2024-07-27_changelog-july-2024.md rename to apps/frontend/posts/blog/2024-07-27_changelog-july-2024.md diff --git a/web/posts/blog/2024-10-07_changelog-october-2024.md b/apps/frontend/posts/blog/2024-10-07_changelog-october-2024.md similarity index 100% rename from web/posts/blog/2024-10-07_changelog-october-2024.md rename to apps/frontend/posts/blog/2024-10-07_changelog-october-2024.md diff --git a/web/posts/blog/2025-04-25_blanketcon-2025 b/apps/frontend/posts/blog/2025-04-25_blanketcon-2025 similarity index 100% rename from web/posts/blog/2025-04-25_blanketcon-2025 rename to apps/frontend/posts/blog/2025-04-25_blanketcon-2025 diff --git a/web/posts/help/1_creating-song.md b/apps/frontend/posts/help/1_creating-song.md similarity index 100% rename from web/posts/help/1_creating-song.md rename to apps/frontend/posts/help/1_creating-song.md diff --git a/web/posts/help/2_uploading-song.md b/apps/frontend/posts/help/2_uploading-song.md similarity index 100% rename from web/posts/help/2_uploading-song.md rename to apps/frontend/posts/help/2_uploading-song.md diff --git a/web/posts/help/3_browsing-songs.md b/apps/frontend/posts/help/3_browsing-songs.md similarity index 100% rename from web/posts/help/3_browsing-songs.md rename to apps/frontend/posts/help/3_browsing-songs.md diff --git a/web/posts/help/4_downloading-songs.md b/apps/frontend/posts/help/4_downloading-songs.md similarity index 100% rename from web/posts/help/4_downloading-songs.md rename to apps/frontend/posts/help/4_downloading-songs.md diff --git a/web/posts/help/5_custom-instruments.md b/apps/frontend/posts/help/5_custom-instruments.md similarity index 100% rename from web/posts/help/5_custom-instruments.md rename to apps/frontend/posts/help/5_custom-instruments.md diff --git a/web/public/adasync.js b/apps/frontend/public/adasync.js similarity index 100% rename from web/public/adasync.js rename to apps/frontend/public/adasync.js diff --git a/web/public/ads.txt b/apps/frontend/public/ads.txt similarity index 100% rename from web/public/ads.txt rename to apps/frontend/public/ads.txt diff --git a/web/public/background-tile-flat.png b/apps/frontend/public/background-tile-flat.png similarity index 100% rename from web/public/background-tile-flat.png rename to apps/frontend/public/background-tile-flat.png diff --git a/web/public/background-tile.png b/apps/frontend/public/background-tile.png similarity index 100% rename from web/public/background-tile.png rename to apps/frontend/public/background-tile.png diff --git a/web/public/broken.png b/apps/frontend/public/broken.png similarity index 100% rename from web/public/broken.png rename to apps/frontend/public/broken.png diff --git a/web/public/demo.png b/apps/frontend/public/demo.png similarity index 100% rename from web/public/demo.png rename to apps/frontend/public/demo.png diff --git a/web/public/docs/guidelines.md b/apps/frontend/public/docs/guidelines.md similarity index 100% rename from web/public/docs/guidelines.md rename to apps/frontend/public/docs/guidelines.md diff --git a/web/public/docs/privacy.md b/apps/frontend/public/docs/privacy.md similarity index 100% rename from web/public/docs/privacy.md rename to apps/frontend/public/docs/privacy.md diff --git a/web/public/docs/terms.md b/apps/frontend/public/docs/terms.md similarity index 100% rename from web/public/docs/terms.md rename to apps/frontend/public/docs/terms.md diff --git a/web/public/empty-chest.png b/apps/frontend/public/empty-chest.png similarity index 100% rename from web/public/empty-chest.png rename to apps/frontend/public/empty-chest.png diff --git a/web/public/fonts/Lato-Regular.ttf b/apps/frontend/public/fonts/Lato-Regular.ttf similarity index 100% rename from web/public/fonts/Lato-Regular.ttf rename to apps/frontend/public/fonts/Lato-Regular.ttf diff --git a/web/public/guidelines.md b/apps/frontend/public/guidelines.md similarity index 100% rename from web/public/guidelines.md rename to apps/frontend/public/guidelines.md diff --git a/web/public/icons/README.md b/apps/frontend/public/icons/README.md similarity index 100% rename from web/public/icons/README.md rename to apps/frontend/public/icons/README.md diff --git a/web/public/icons/android-chrome-192x192.png b/apps/frontend/public/icons/android-chrome-192x192.png similarity index 100% rename from web/public/icons/android-chrome-192x192.png rename to apps/frontend/public/icons/android-chrome-192x192.png diff --git a/web/public/icons/android-chrome-256x256.png b/apps/frontend/public/icons/android-chrome-256x256.png similarity index 100% rename from web/public/icons/android-chrome-256x256.png rename to apps/frontend/public/icons/android-chrome-256x256.png diff --git a/web/public/icons/apple-touch-icon.png b/apps/frontend/public/icons/apple-touch-icon.png similarity index 100% rename from web/public/icons/apple-touch-icon.png rename to apps/frontend/public/icons/apple-touch-icon.png diff --git a/web/public/icons/browserconfig.xml b/apps/frontend/public/icons/browserconfig.xml similarity index 100% rename from web/public/icons/browserconfig.xml rename to apps/frontend/public/icons/browserconfig.xml diff --git a/web/public/icons/favicon-16x16.png b/apps/frontend/public/icons/favicon-16x16.png similarity index 100% rename from web/public/icons/favicon-16x16.png rename to apps/frontend/public/icons/favicon-16x16.png diff --git a/web/public/icons/favicon-32x32.png b/apps/frontend/public/icons/favicon-32x32.png similarity index 100% rename from web/public/icons/favicon-32x32.png rename to apps/frontend/public/icons/favicon-32x32.png diff --git a/web/public/icons/favicon.ico b/apps/frontend/public/icons/favicon.ico similarity index 100% rename from web/public/icons/favicon.ico rename to apps/frontend/public/icons/favicon.ico diff --git a/web/public/icons/mstile-150x150.png b/apps/frontend/public/icons/mstile-150x150.png similarity index 100% rename from web/public/icons/mstile-150x150.png rename to apps/frontend/public/icons/mstile-150x150.png diff --git a/web/public/icons/mstile-310x150.png b/apps/frontend/public/icons/mstile-310x150.png similarity index 100% rename from web/public/icons/mstile-310x150.png rename to apps/frontend/public/icons/mstile-310x150.png diff --git a/web/public/icons/mstile-310x310.png b/apps/frontend/public/icons/mstile-310x310.png similarity index 100% rename from web/public/icons/mstile-310x310.png rename to apps/frontend/public/icons/mstile-310x310.png diff --git a/web/public/icons/mstile-70x70.png b/apps/frontend/public/icons/mstile-70x70.png similarity index 100% rename from web/public/icons/mstile-70x70.png rename to apps/frontend/public/icons/mstile-70x70.png diff --git a/web/public/icons/safari-pinned-tab.svg b/apps/frontend/public/icons/safari-pinned-tab.svg similarity index 100% rename from web/public/icons/safari-pinned-tab.svg rename to apps/frontend/public/icons/safari-pinned-tab.svg diff --git a/web/public/icons/site.webmanifest b/apps/frontend/public/icons/site.webmanifest similarity index 100% rename from web/public/icons/site.webmanifest rename to apps/frontend/public/icons/site.webmanifest diff --git a/web/public/img/authors/bentroen.png b/apps/frontend/public/img/authors/bentroen.png similarity index 100% rename from web/public/img/authors/bentroen.png rename to apps/frontend/public/img/authors/bentroen.png diff --git a/web/public/img/authors/encode42.png b/apps/frontend/public/img/authors/encode42.png similarity index 100% rename from web/public/img/authors/encode42.png rename to apps/frontend/public/img/authors/encode42.png diff --git a/web/public/img/authors/tomast1337.jpg b/apps/frontend/public/img/authors/tomast1337.jpg similarity index 100% rename from web/public/img/authors/tomast1337.jpg rename to apps/frontend/public/img/authors/tomast1337.jpg diff --git a/web/public/img/blog/blanketcon-2025.jpg b/apps/frontend/public/img/blog/blanketcon-2025.jpg similarity index 100% rename from web/public/img/blog/blanketcon-2025.jpg rename to apps/frontend/public/img/blog/blanketcon-2025.jpg diff --git a/web/public/img/help/1_creating_song.png b/apps/frontend/public/img/help/1_creating_song.png similarity index 100% rename from web/public/img/help/1_creating_song.png rename to apps/frontend/public/img/help/1_creating_song.png diff --git a/web/public/img/help/2_uploading_song.png b/apps/frontend/public/img/help/2_uploading_song.png similarity index 100% rename from web/public/img/help/2_uploading_song.png rename to apps/frontend/public/img/help/2_uploading_song.png diff --git a/web/public/img/help/3_browsing_songs.png b/apps/frontend/public/img/help/3_browsing_songs.png similarity index 100% rename from web/public/img/help/3_browsing_songs.png rename to apps/frontend/public/img/help/3_browsing_songs.png diff --git a/web/public/img/help/4_downloading_songs.png b/apps/frontend/public/img/help/4_downloading_songs.png similarity index 100% rename from web/public/img/help/4_downloading_songs.png rename to apps/frontend/public/img/help/4_downloading_songs.png diff --git a/web/public/img/help/5_custom_instruments.png b/apps/frontend/public/img/help/5_custom_instruments.png similarity index 100% rename from web/public/img/help/5_custom_instruments.png rename to apps/frontend/public/img/help/5_custom_instruments.png diff --git a/web/public/img/note-block-grayscale.png b/apps/frontend/public/img/note-block-grayscale.png similarity index 100% rename from web/public/img/note-block-grayscale.png rename to apps/frontend/public/img/note-block-grayscale.png diff --git a/web/public/img/note-block-pfp.jpg b/apps/frontend/public/img/note-block-pfp.jpg similarity index 100% rename from web/public/img/note-block-pfp.jpg rename to apps/frontend/public/img/note-block-pfp.jpg diff --git a/web/public/img/post.png b/apps/frontend/public/img/post.png similarity index 100% rename from web/public/img/post.png rename to apps/frontend/public/img/post.png diff --git a/web/public/nbw-color.png b/apps/frontend/public/nbw-color.png similarity index 100% rename from web/public/nbw-color.png rename to apps/frontend/public/nbw-color.png diff --git a/web/public/nbw-header.png b/apps/frontend/public/nbw-header.png similarity index 100% rename from web/public/nbw-header.png rename to apps/frontend/public/nbw-header.png diff --git a/web/public/nbw-logo-flat.png b/apps/frontend/public/nbw-logo-flat.png similarity index 100% rename from web/public/nbw-logo-flat.png rename to apps/frontend/public/nbw-logo-flat.png diff --git a/web/public/nbw-logo.png b/apps/frontend/public/nbw-logo.png similarity index 100% rename from web/public/nbw-logo.png rename to apps/frontend/public/nbw-logo.png diff --git a/web/public/nbw-white.png b/apps/frontend/public/nbw-white.png similarity index 100% rename from web/public/nbw-white.png rename to apps/frontend/public/nbw-white.png diff --git a/web/public/notes_sprites.png b/apps/frontend/public/notes_sprites.png similarity index 100% rename from web/public/notes_sprites.png rename to apps/frontend/public/notes_sprites.png diff --git a/web/src/app/(content)/(info)/about/about.mdx b/apps/frontend/src/app/(content)/(info)/about/about.mdx similarity index 100% rename from web/src/app/(content)/(info)/about/about.mdx rename to apps/frontend/src/app/(content)/(info)/about/about.mdx diff --git a/web/src/app/(content)/(info)/about/page.tsx b/apps/frontend/src/app/(content)/(info)/about/page.tsx similarity index 100% rename from web/src/app/(content)/(info)/about/page.tsx rename to apps/frontend/src/app/(content)/(info)/about/page.tsx diff --git a/web/src/app/(content)/(info)/blog/[id]/page.tsx b/apps/frontend/src/app/(content)/(info)/blog/[id]/page.tsx similarity index 100% rename from web/src/app/(content)/(info)/blog/[id]/page.tsx rename to apps/frontend/src/app/(content)/(info)/blog/[id]/page.tsx diff --git a/web/src/app/(content)/(info)/blog/page.tsx b/apps/frontend/src/app/(content)/(info)/blog/page.tsx similarity index 100% rename from web/src/app/(content)/(info)/blog/page.tsx rename to apps/frontend/src/app/(content)/(info)/blog/page.tsx diff --git a/web/src/app/(content)/(info)/contact/contact.mdx b/apps/frontend/src/app/(content)/(info)/contact/contact.mdx similarity index 100% rename from web/src/app/(content)/(info)/contact/contact.mdx rename to apps/frontend/src/app/(content)/(info)/contact/contact.mdx diff --git a/web/src/app/(content)/(info)/contact/page.tsx b/apps/frontend/src/app/(content)/(info)/contact/page.tsx similarity index 100% rename from web/src/app/(content)/(info)/contact/page.tsx rename to apps/frontend/src/app/(content)/(info)/contact/page.tsx diff --git a/web/src/app/(content)/(info)/help/[id]/page.tsx b/apps/frontend/src/app/(content)/(info)/help/[id]/page.tsx similarity index 100% rename from web/src/app/(content)/(info)/help/[id]/page.tsx rename to apps/frontend/src/app/(content)/(info)/help/[id]/page.tsx diff --git a/web/src/app/(content)/(info)/help/page.tsx b/apps/frontend/src/app/(content)/(info)/help/page.tsx similarity index 100% rename from web/src/app/(content)/(info)/help/page.tsx rename to apps/frontend/src/app/(content)/(info)/help/page.tsx diff --git a/web/src/app/(content)/layout.tsx b/apps/frontend/src/app/(content)/layout.tsx similarity index 100% rename from web/src/app/(content)/layout.tsx rename to apps/frontend/src/app/(content)/layout.tsx diff --git a/web/src/app/(content)/my-songs/page.tsx b/apps/frontend/src/app/(content)/my-songs/page.tsx similarity index 100% rename from web/src/app/(content)/my-songs/page.tsx rename to apps/frontend/src/app/(content)/my-songs/page.tsx diff --git a/web/src/app/(content)/page.tsx b/apps/frontend/src/app/(content)/page.tsx similarity index 100% rename from web/src/app/(content)/page.tsx rename to apps/frontend/src/app/(content)/page.tsx diff --git a/web/src/app/(content)/song/[id]/edit/page.tsx b/apps/frontend/src/app/(content)/song/[id]/edit/page.tsx similarity index 100% rename from web/src/app/(content)/song/[id]/edit/page.tsx rename to apps/frontend/src/app/(content)/song/[id]/edit/page.tsx diff --git a/web/src/app/(content)/song/[id]/page.tsx b/apps/frontend/src/app/(content)/song/[id]/page.tsx similarity index 100% rename from web/src/app/(content)/song/[id]/page.tsx rename to apps/frontend/src/app/(content)/song/[id]/page.tsx diff --git a/web/src/app/(content)/upload/layout.tsx b/apps/frontend/src/app/(content)/upload/layout.tsx similarity index 100% rename from web/src/app/(content)/upload/layout.tsx rename to apps/frontend/src/app/(content)/upload/layout.tsx diff --git a/web/src/app/(content)/upload/page.tsx b/apps/frontend/src/app/(content)/upload/page.tsx similarity index 100% rename from web/src/app/(content)/upload/page.tsx rename to apps/frontend/src/app/(content)/upload/page.tsx diff --git a/web/src/app/(content)/user/[id]/page_disable.tsx b/apps/frontend/src/app/(content)/user/[id]/page_disable.tsx similarity index 100% rename from web/src/app/(content)/user/[id]/page_disable.tsx rename to apps/frontend/src/app/(content)/user/[id]/page_disable.tsx diff --git a/web/src/app/(external)/(auth)/login/email/page.tsx b/apps/frontend/src/app/(external)/(auth)/login/email/page.tsx similarity index 100% rename from web/src/app/(external)/(auth)/login/email/page.tsx rename to apps/frontend/src/app/(external)/(auth)/login/email/page.tsx diff --git a/web/src/app/(external)/(auth)/login/page.tsx b/apps/frontend/src/app/(external)/(auth)/login/page.tsx similarity index 100% rename from web/src/app/(external)/(auth)/login/page.tsx rename to apps/frontend/src/app/(external)/(auth)/login/page.tsx diff --git a/web/src/app/(external)/(auth)/logout/page.tsx b/apps/frontend/src/app/(external)/(auth)/logout/page.tsx similarity index 100% rename from web/src/app/(external)/(auth)/logout/page.tsx rename to apps/frontend/src/app/(external)/(auth)/logout/page.tsx diff --git a/web/src/app/(external)/(legal)/guidelines/page.tsx b/apps/frontend/src/app/(external)/(legal)/guidelines/page.tsx similarity index 100% rename from web/src/app/(external)/(legal)/guidelines/page.tsx rename to apps/frontend/src/app/(external)/(legal)/guidelines/page.tsx diff --git a/web/src/app/(external)/(legal)/layout.tsx b/apps/frontend/src/app/(external)/(legal)/layout.tsx similarity index 100% rename from web/src/app/(external)/(legal)/layout.tsx rename to apps/frontend/src/app/(external)/(legal)/layout.tsx diff --git a/web/src/app/(external)/(legal)/privacy/page.tsx b/apps/frontend/src/app/(external)/(legal)/privacy/page.tsx similarity index 100% rename from web/src/app/(external)/(legal)/privacy/page.tsx rename to apps/frontend/src/app/(external)/(legal)/privacy/page.tsx diff --git a/web/src/app/(external)/(legal)/terms/page.tsx b/apps/frontend/src/app/(external)/(legal)/terms/page.tsx similarity index 100% rename from web/src/app/(external)/(legal)/terms/page.tsx rename to apps/frontend/src/app/(external)/(legal)/terms/page.tsx diff --git a/web/src/app/(external)/[...not-found]/page.tsx b/apps/frontend/src/app/(external)/[...not-found]/page.tsx similarity index 100% rename from web/src/app/(external)/[...not-found]/page.tsx rename to apps/frontend/src/app/(external)/[...not-found]/page.tsx diff --git a/web/src/app/(external)/layout.tsx b/apps/frontend/src/app/(external)/layout.tsx similarity index 100% rename from web/src/app/(external)/layout.tsx rename to apps/frontend/src/app/(external)/layout.tsx diff --git a/web/src/app/enableRecaptchaBadge.css b/apps/frontend/src/app/enableRecaptchaBadge.css similarity index 100% rename from web/src/app/enableRecaptchaBadge.css rename to apps/frontend/src/app/enableRecaptchaBadge.css diff --git a/web/src/app/favicon.ico b/apps/frontend/src/app/favicon.ico similarity index 100% rename from web/src/app/favicon.ico rename to apps/frontend/src/app/favicon.ico diff --git a/web/src/app/globals.css b/apps/frontend/src/app/globals.css similarity index 100% rename from web/src/app/globals.css rename to apps/frontend/src/app/globals.css diff --git a/web/src/app/hideScrollbar.css b/apps/frontend/src/app/hideScrollbar.css similarity index 100% rename from web/src/app/hideScrollbar.css rename to apps/frontend/src/app/hideScrollbar.css diff --git a/web/src/app/layout.tsx b/apps/frontend/src/app/layout.tsx similarity index 100% rename from web/src/app/layout.tsx rename to apps/frontend/src/app/layout.tsx diff --git a/web/src/app/not-found.tsx b/apps/frontend/src/app/not-found.tsx similarity index 100% rename from web/src/app/not-found.tsx rename to apps/frontend/src/app/not-found.tsx diff --git a/web/src/global.d.ts b/apps/frontend/src/global.d.ts similarity index 100% rename from web/src/global.d.ts rename to apps/frontend/src/global.d.ts diff --git a/web/src/lib/axios/ClientAxios.ts b/apps/frontend/src/lib/axios/ClientAxios.ts similarity index 100% rename from web/src/lib/axios/ClientAxios.ts rename to apps/frontend/src/lib/axios/ClientAxios.ts diff --git a/web/src/lib/axios/index.ts b/apps/frontend/src/lib/axios/index.ts similarity index 100% rename from web/src/lib/axios/index.ts rename to apps/frontend/src/lib/axios/index.ts diff --git a/web/src/lib/axios/token.utils.ts b/apps/frontend/src/lib/axios/token.utils.ts similarity index 100% rename from web/src/lib/axios/token.utils.ts rename to apps/frontend/src/lib/axios/token.utils.ts diff --git a/web/src/lib/posts.ts b/apps/frontend/src/lib/posts.ts similarity index 100% rename from web/src/lib/posts.ts rename to apps/frontend/src/lib/posts.ts diff --git a/web/src/lib/tailwind.utils.ts b/apps/frontend/src/lib/tailwind.utils.ts similarity index 100% rename from web/src/lib/tailwind.utils.ts rename to apps/frontend/src/lib/tailwind.utils.ts diff --git a/web/src/modules/auth/components/client/.gitkeep b/apps/frontend/src/modules/auth/components/client/.gitkeep similarity index 100% rename from web/src/modules/auth/components/client/.gitkeep rename to apps/frontend/src/modules/auth/components/client/.gitkeep diff --git a/web/src/modules/auth/components/client/LoginFrom.tsx b/apps/frontend/src/modules/auth/components/client/LoginFrom.tsx similarity index 100% rename from web/src/modules/auth/components/client/LoginFrom.tsx rename to apps/frontend/src/modules/auth/components/client/LoginFrom.tsx diff --git a/web/src/modules/auth/components/client/login.util.ts b/apps/frontend/src/modules/auth/components/client/login.util.ts similarity index 100% rename from web/src/modules/auth/components/client/login.util.ts rename to apps/frontend/src/modules/auth/components/client/login.util.ts diff --git a/web/src/modules/auth/components/loginPage.tsx b/apps/frontend/src/modules/auth/components/loginPage.tsx similarity index 100% rename from web/src/modules/auth/components/loginPage.tsx rename to apps/frontend/src/modules/auth/components/loginPage.tsx diff --git a/web/src/modules/auth/components/loginWithEmailPage.tsx b/apps/frontend/src/modules/auth/components/loginWithEmailPage.tsx similarity index 100% rename from web/src/modules/auth/components/loginWithEmailPage.tsx rename to apps/frontend/src/modules/auth/components/loginWithEmailPage.tsx diff --git a/web/src/modules/auth/features/.gitkeep b/apps/frontend/src/modules/auth/features/.gitkeep similarity index 100% rename from web/src/modules/auth/features/.gitkeep rename to apps/frontend/src/modules/auth/features/.gitkeep diff --git a/web/src/modules/auth/features/auth.utils.ts b/apps/frontend/src/modules/auth/features/auth.utils.ts similarity index 100% rename from web/src/modules/auth/features/auth.utils.ts rename to apps/frontend/src/modules/auth/features/auth.utils.ts diff --git a/web/src/modules/auth/types/User.ts b/apps/frontend/src/modules/auth/types/User.ts similarity index 100% rename from web/src/modules/auth/types/User.ts rename to apps/frontend/src/modules/auth/types/User.ts diff --git a/web/src/modules/browse/WelcomeBanner.tsx b/apps/frontend/src/modules/browse/WelcomeBanner.tsx similarity index 100% rename from web/src/modules/browse/WelcomeBanner.tsx rename to apps/frontend/src/modules/browse/WelcomeBanner.tsx diff --git a/web/src/modules/browse/components/HomePageComponent.tsx b/apps/frontend/src/modules/browse/components/HomePageComponent.tsx similarity index 100% rename from web/src/modules/browse/components/HomePageComponent.tsx rename to apps/frontend/src/modules/browse/components/HomePageComponent.tsx diff --git a/web/src/modules/browse/components/SongCard.tsx b/apps/frontend/src/modules/browse/components/SongCard.tsx similarity index 100% rename from web/src/modules/browse/components/SongCard.tsx rename to apps/frontend/src/modules/browse/components/SongCard.tsx diff --git a/web/src/modules/browse/components/SongCardGroup.tsx b/apps/frontend/src/modules/browse/components/SongCardGroup.tsx similarity index 100% rename from web/src/modules/browse/components/SongCardGroup.tsx rename to apps/frontend/src/modules/browse/components/SongCardGroup.tsx diff --git a/web/src/modules/browse/components/client/CategoryButton.tsx b/apps/frontend/src/modules/browse/components/client/CategoryButton.tsx similarity index 100% rename from web/src/modules/browse/components/client/CategoryButton.tsx rename to apps/frontend/src/modules/browse/components/client/CategoryButton.tsx diff --git a/web/src/modules/browse/components/client/LoadMoreButton.tsx b/apps/frontend/src/modules/browse/components/client/LoadMoreButton.tsx similarity index 100% rename from web/src/modules/browse/components/client/LoadMoreButton.tsx rename to apps/frontend/src/modules/browse/components/client/LoadMoreButton.tsx diff --git a/web/src/modules/browse/components/client/TimespanButton.tsx b/apps/frontend/src/modules/browse/components/client/TimespanButton.tsx similarity index 100% rename from web/src/modules/browse/components/client/TimespanButton.tsx rename to apps/frontend/src/modules/browse/components/client/TimespanButton.tsx diff --git a/web/src/modules/browse/components/client/context/FeaturedSongs.context.tsx b/apps/frontend/src/modules/browse/components/client/context/FeaturedSongs.context.tsx similarity index 100% rename from web/src/modules/browse/components/client/context/FeaturedSongs.context.tsx rename to apps/frontend/src/modules/browse/components/client/context/FeaturedSongs.context.tsx diff --git a/web/src/modules/browse/components/client/context/HomePage.context.tsx b/apps/frontend/src/modules/browse/components/client/context/HomePage.context.tsx similarity index 100% rename from web/src/modules/browse/components/client/context/HomePage.context.tsx rename to apps/frontend/src/modules/browse/components/client/context/HomePage.context.tsx diff --git a/web/src/modules/browse/components/client/context/RecentSongs.context.tsx b/apps/frontend/src/modules/browse/components/client/context/RecentSongs.context.tsx similarity index 100% rename from web/src/modules/browse/components/client/context/RecentSongs.context.tsx rename to apps/frontend/src/modules/browse/components/client/context/RecentSongs.context.tsx diff --git a/web/src/modules/edit-profile/components/client/.gitkeep b/apps/frontend/src/modules/edit-profile/components/client/.gitkeep similarity index 100% rename from web/src/modules/edit-profile/components/client/.gitkeep rename to apps/frontend/src/modules/edit-profile/components/client/.gitkeep diff --git a/web/src/modules/edit-profile/features/.gitkeep b/apps/frontend/src/modules/edit-profile/features/.gitkeep similarity index 100% rename from web/src/modules/edit-profile/features/.gitkeep rename to apps/frontend/src/modules/edit-profile/features/.gitkeep diff --git a/web/src/modules/my-songs/components/MySongsPage.tsx b/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx similarity index 100% rename from web/src/modules/my-songs/components/MySongsPage.tsx rename to apps/frontend/src/modules/my-songs/components/MySongsPage.tsx diff --git a/web/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx b/apps/frontend/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx similarity index 100% rename from web/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx rename to apps/frontend/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx diff --git a/web/src/modules/my-songs/components/client/MySongsButtons.tsx b/apps/frontend/src/modules/my-songs/components/client/MySongsButtons.tsx similarity index 100% rename from web/src/modules/my-songs/components/client/MySongsButtons.tsx rename to apps/frontend/src/modules/my-songs/components/client/MySongsButtons.tsx diff --git a/web/src/modules/my-songs/components/client/MySongsTable.tsx b/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx similarity index 100% rename from web/src/modules/my-songs/components/client/MySongsTable.tsx rename to apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx diff --git a/web/src/modules/my-songs/components/client/SongRow.tsx b/apps/frontend/src/modules/my-songs/components/client/SongRow.tsx similarity index 100% rename from web/src/modules/my-songs/components/client/SongRow.tsx rename to apps/frontend/src/modules/my-songs/components/client/SongRow.tsx diff --git a/web/src/modules/my-songs/components/client/context/MySongs.context.tsx b/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx similarity index 100% rename from web/src/modules/my-songs/components/client/context/MySongs.context.tsx rename to apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx diff --git a/web/src/modules/shared/components/CustomMarkdown.tsx b/apps/frontend/src/modules/shared/components/CustomMarkdown.tsx similarity index 100% rename from web/src/modules/shared/components/CustomMarkdown.tsx rename to apps/frontend/src/modules/shared/components/CustomMarkdown.tsx diff --git a/web/src/modules/shared/components/GoogleAdSense.tsx b/apps/frontend/src/modules/shared/components/GoogleAdSense.tsx similarity index 100% rename from web/src/modules/shared/components/GoogleAdSense.tsx rename to apps/frontend/src/modules/shared/components/GoogleAdSense.tsx diff --git a/web/src/modules/shared/components/NoteBlockWorldLogo.tsx b/apps/frontend/src/modules/shared/components/NoteBlockWorldLogo.tsx similarity index 100% rename from web/src/modules/shared/components/NoteBlockWorldLogo.tsx rename to apps/frontend/src/modules/shared/components/NoteBlockWorldLogo.tsx diff --git a/web/src/modules/shared/components/TeamMemberCard.tsx b/apps/frontend/src/modules/shared/components/TeamMemberCard.tsx similarity index 100% rename from web/src/modules/shared/components/TeamMemberCard.tsx rename to apps/frontend/src/modules/shared/components/TeamMemberCard.tsx diff --git a/web/src/modules/shared/components/client/BackButton.tsx b/apps/frontend/src/modules/shared/components/client/BackButton.tsx similarity index 100% rename from web/src/modules/shared/components/client/BackButton.tsx rename to apps/frontend/src/modules/shared/components/client/BackButton.tsx diff --git a/web/src/modules/shared/components/client/Carousel.tsx b/apps/frontend/src/modules/shared/components/client/Carousel.tsx similarity index 100% rename from web/src/modules/shared/components/client/Carousel.tsx rename to apps/frontend/src/modules/shared/components/client/Carousel.tsx diff --git a/web/src/modules/shared/components/client/Command.tsx b/apps/frontend/src/modules/shared/components/client/Command.tsx similarity index 100% rename from web/src/modules/shared/components/client/Command.tsx rename to apps/frontend/src/modules/shared/components/client/Command.tsx diff --git a/web/src/modules/shared/components/client/CookieBanner.tsx b/apps/frontend/src/modules/shared/components/client/CookieBanner.tsx similarity index 100% rename from web/src/modules/shared/components/client/CookieBanner.tsx rename to apps/frontend/src/modules/shared/components/client/CookieBanner.tsx diff --git a/web/src/modules/shared/components/client/ErrorBalloon.tsx b/apps/frontend/src/modules/shared/components/client/ErrorBalloon.tsx similarity index 100% rename from web/src/modules/shared/components/client/ErrorBalloon.tsx rename to apps/frontend/src/modules/shared/components/client/ErrorBalloon.tsx diff --git a/web/src/modules/shared/components/client/ErrorBox.tsx b/apps/frontend/src/modules/shared/components/client/ErrorBox.tsx similarity index 100% rename from web/src/modules/shared/components/client/ErrorBox.tsx rename to apps/frontend/src/modules/shared/components/client/ErrorBox.tsx diff --git a/web/src/modules/shared/components/client/FormElements.tsx b/apps/frontend/src/modules/shared/components/client/FormElements.tsx similarity index 100% rename from web/src/modules/shared/components/client/FormElements.tsx rename to apps/frontend/src/modules/shared/components/client/FormElements.tsx diff --git a/web/src/modules/shared/components/client/GenericModal.tsx b/apps/frontend/src/modules/shared/components/client/GenericModal.tsx similarity index 100% rename from web/src/modules/shared/components/client/GenericModal.tsx rename to apps/frontend/src/modules/shared/components/client/GenericModal.tsx diff --git a/web/src/modules/shared/components/client/Popover.tsx b/apps/frontend/src/modules/shared/components/client/Popover.tsx similarity index 100% rename from web/src/modules/shared/components/client/Popover.tsx rename to apps/frontend/src/modules/shared/components/client/Popover.tsx diff --git a/web/src/modules/shared/components/client/UserMenuButton.tsx b/apps/frontend/src/modules/shared/components/client/UserMenuButton.tsx similarity index 100% rename from web/src/modules/shared/components/client/UserMenuButton.tsx rename to apps/frontend/src/modules/shared/components/client/UserMenuButton.tsx diff --git a/web/src/modules/shared/components/client/ads/AdSlots.tsx b/apps/frontend/src/modules/shared/components/client/ads/AdSlots.tsx similarity index 100% rename from web/src/modules/shared/components/client/ads/AdSlots.tsx rename to apps/frontend/src/modules/shared/components/client/ads/AdSlots.tsx diff --git a/web/src/modules/shared/components/client/ads/DetectAdBlock.tsx b/apps/frontend/src/modules/shared/components/client/ads/DetectAdBlock.tsx similarity index 100% rename from web/src/modules/shared/components/client/ads/DetectAdBlock.tsx rename to apps/frontend/src/modules/shared/components/client/ads/DetectAdBlock.tsx diff --git a/web/src/modules/shared/components/client/ads/useAdSenseClient.tsx b/apps/frontend/src/modules/shared/components/client/ads/useAdSenseClient.tsx similarity index 100% rename from web/src/modules/shared/components/client/ads/useAdSenseClient.tsx rename to apps/frontend/src/modules/shared/components/client/ads/useAdSenseClient.tsx diff --git a/web/src/modules/shared/components/layout/BlockTab.tsx b/apps/frontend/src/modules/shared/components/layout/BlockTab.tsx similarity index 100% rename from web/src/modules/shared/components/layout/BlockTab.tsx rename to apps/frontend/src/modules/shared/components/layout/BlockTab.tsx diff --git a/web/src/modules/shared/components/layout/CopyrightFooter.tsx b/apps/frontend/src/modules/shared/components/layout/CopyrightFooter.tsx similarity index 100% rename from web/src/modules/shared/components/layout/CopyrightFooter.tsx rename to apps/frontend/src/modules/shared/components/layout/CopyrightFooter.tsx diff --git a/web/src/modules/shared/components/layout/DocumentLayout.tsx b/apps/frontend/src/modules/shared/components/layout/DocumentLayout.tsx similarity index 100% rename from web/src/modules/shared/components/layout/DocumentLayout.tsx rename to apps/frontend/src/modules/shared/components/layout/DocumentLayout.tsx diff --git a/web/src/modules/shared/components/layout/Footer.tsx b/apps/frontend/src/modules/shared/components/layout/Footer.tsx similarity index 100% rename from web/src/modules/shared/components/layout/Footer.tsx rename to apps/frontend/src/modules/shared/components/layout/Footer.tsx diff --git a/web/src/modules/shared/components/layout/Header.tsx b/apps/frontend/src/modules/shared/components/layout/Header.tsx similarity index 100% rename from web/src/modules/shared/components/layout/Header.tsx rename to apps/frontend/src/modules/shared/components/layout/Header.tsx diff --git a/web/src/modules/shared/components/layout/MusicalNote.css b/apps/frontend/src/modules/shared/components/layout/MusicalNote.css similarity index 100% rename from web/src/modules/shared/components/layout/MusicalNote.css rename to apps/frontend/src/modules/shared/components/layout/MusicalNote.css diff --git a/web/src/modules/shared/components/layout/MusicalNote.tsx b/apps/frontend/src/modules/shared/components/layout/MusicalNote.tsx similarity index 100% rename from web/src/modules/shared/components/layout/MusicalNote.tsx rename to apps/frontend/src/modules/shared/components/layout/MusicalNote.tsx diff --git a/web/src/modules/shared/components/layout/NavLinks.tsx b/apps/frontend/src/modules/shared/components/layout/NavLinks.tsx similarity index 100% rename from web/src/modules/shared/components/layout/NavLinks.tsx rename to apps/frontend/src/modules/shared/components/layout/NavLinks.tsx diff --git a/web/src/modules/shared/components/layout/NavbarLayout.tsx b/apps/frontend/src/modules/shared/components/layout/NavbarLayout.tsx similarity index 100% rename from web/src/modules/shared/components/layout/NavbarLayout.tsx rename to apps/frontend/src/modules/shared/components/layout/NavbarLayout.tsx diff --git a/web/src/modules/shared/components/layout/RandomSongButton.tsx b/apps/frontend/src/modules/shared/components/layout/RandomSongButton.tsx similarity index 100% rename from web/src/modules/shared/components/layout/RandomSongButton.tsx rename to apps/frontend/src/modules/shared/components/layout/RandomSongButton.tsx diff --git a/web/src/modules/shared/components/layout/SettingsMenu.tsx b/apps/frontend/src/modules/shared/components/layout/SettingsMenu.tsx similarity index 100% rename from web/src/modules/shared/components/layout/SettingsMenu.tsx rename to apps/frontend/src/modules/shared/components/layout/SettingsMenu.tsx diff --git a/web/src/modules/shared/components/layout/SignOutButton.tsx b/apps/frontend/src/modules/shared/components/layout/SignOutButton.tsx similarity index 100% rename from web/src/modules/shared/components/layout/SignOutButton.tsx rename to apps/frontend/src/modules/shared/components/layout/SignOutButton.tsx diff --git a/web/src/modules/shared/components/layout/SongThumbnail.tsx b/apps/frontend/src/modules/shared/components/layout/SongThumbnail.tsx similarity index 100% rename from web/src/modules/shared/components/layout/SongThumbnail.tsx rename to apps/frontend/src/modules/shared/components/layout/SongThumbnail.tsx diff --git a/web/src/modules/shared/components/layout/UserMenu.tsx b/apps/frontend/src/modules/shared/components/layout/UserMenu.tsx similarity index 100% rename from web/src/modules/shared/components/layout/UserMenu.tsx rename to apps/frontend/src/modules/shared/components/layout/UserMenu.tsx diff --git a/web/src/modules/shared/components/layout/UserMenuLink.tsx b/apps/frontend/src/modules/shared/components/layout/UserMenuLink.tsx similarity index 100% rename from web/src/modules/shared/components/layout/UserMenuLink.tsx rename to apps/frontend/src/modules/shared/components/layout/UserMenuLink.tsx diff --git a/web/src/modules/shared/components/layout/popover.tsx b/apps/frontend/src/modules/shared/components/layout/popover.tsx similarity index 100% rename from web/src/modules/shared/components/layout/popover.tsx rename to apps/frontend/src/modules/shared/components/layout/popover.tsx diff --git a/web/src/modules/shared/components/tooltip.tsx b/apps/frontend/src/modules/shared/components/tooltip.tsx similarity index 100% rename from web/src/modules/shared/components/tooltip.tsx rename to apps/frontend/src/modules/shared/components/tooltip.tsx diff --git a/web/src/modules/shared/util/format.ts b/apps/frontend/src/modules/shared/util/format.ts similarity index 100% rename from web/src/modules/shared/util/format.ts rename to apps/frontend/src/modules/shared/util/format.ts diff --git a/web/src/modules/song-edit/components/client/EditSongPage.tsx b/apps/frontend/src/modules/song-edit/components/client/EditSongPage.tsx similarity index 100% rename from web/src/modules/song-edit/components/client/EditSongPage.tsx rename to apps/frontend/src/modules/song-edit/components/client/EditSongPage.tsx diff --git a/web/src/modules/song-edit/components/client/SongEditForm.tsx b/apps/frontend/src/modules/song-edit/components/client/SongEditForm.tsx similarity index 100% rename from web/src/modules/song-edit/components/client/SongEditForm.tsx rename to apps/frontend/src/modules/song-edit/components/client/SongEditForm.tsx diff --git a/web/src/modules/song-edit/components/client/context/EditSong.context.tsx b/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx similarity index 100% rename from web/src/modules/song-edit/components/client/context/EditSong.context.tsx rename to apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx diff --git a/web/src/modules/song-upload/components/client/SongUploadForm.tsx b/apps/frontend/src/modules/song-upload/components/client/SongUploadForm.tsx similarity index 100% rename from web/src/modules/song-upload/components/client/SongUploadForm.tsx rename to apps/frontend/src/modules/song-upload/components/client/SongUploadForm.tsx diff --git a/web/src/modules/song-upload/components/client/UploadCompleteModal.tsx b/apps/frontend/src/modules/song-upload/components/client/UploadCompleteModal.tsx similarity index 100% rename from web/src/modules/song-upload/components/client/UploadCompleteModal.tsx rename to apps/frontend/src/modules/song-upload/components/client/UploadCompleteModal.tsx diff --git a/web/src/modules/song-upload/components/client/UploadSongPage.tsx b/apps/frontend/src/modules/song-upload/components/client/UploadSongPage.tsx similarity index 100% rename from web/src/modules/song-upload/components/client/UploadSongPage.tsx rename to apps/frontend/src/modules/song-upload/components/client/UploadSongPage.tsx diff --git a/web/src/modules/song-upload/components/client/context/UploadSong.context.tsx b/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx similarity index 100% rename from web/src/modules/song-upload/components/client/context/UploadSong.context.tsx rename to apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx diff --git a/web/src/modules/song/components/SongDetails.tsx b/apps/frontend/src/modules/song/components/SongDetails.tsx similarity index 100% rename from web/src/modules/song/components/SongDetails.tsx rename to apps/frontend/src/modules/song/components/SongDetails.tsx diff --git a/web/src/modules/song/components/SongPage.tsx b/apps/frontend/src/modules/song/components/SongPage.tsx similarity index 100% rename from web/src/modules/song/components/SongPage.tsx rename to apps/frontend/src/modules/song/components/SongPage.tsx diff --git a/web/src/modules/song/components/SongPageButtons.tsx b/apps/frontend/src/modules/song/components/SongPageButtons.tsx similarity index 100% rename from web/src/modules/song/components/SongPageButtons.tsx rename to apps/frontend/src/modules/song/components/SongPageButtons.tsx diff --git a/web/src/modules/song/components/client/DownloadSongModal.tsx b/apps/frontend/src/modules/song/components/client/DownloadSongModal.tsx similarity index 100% rename from web/src/modules/song/components/client/DownloadSongModal.tsx rename to apps/frontend/src/modules/song/components/client/DownloadSongModal.tsx diff --git a/web/src/modules/song/components/client/FileDisplay.tsx b/apps/frontend/src/modules/song/components/client/FileDisplay.tsx similarity index 100% rename from web/src/modules/song/components/client/FileDisplay.tsx rename to apps/frontend/src/modules/song/components/client/FileDisplay.tsx diff --git a/web/src/modules/song/components/client/InstrumentPicker.tsx b/apps/frontend/src/modules/song/components/client/InstrumentPicker.tsx similarity index 100% rename from web/src/modules/song/components/client/InstrumentPicker.tsx rename to apps/frontend/src/modules/song/components/client/InstrumentPicker.tsx diff --git a/web/src/modules/song/components/client/LicenseInfo.tsx b/apps/frontend/src/modules/song/components/client/LicenseInfo.tsx similarity index 100% rename from web/src/modules/song/components/client/LicenseInfo.tsx rename to apps/frontend/src/modules/song/components/client/LicenseInfo.tsx diff --git a/web/src/modules/song/components/client/ShareModal.tsx b/apps/frontend/src/modules/song/components/client/ShareModal.tsx similarity index 100% rename from web/src/modules/song/components/client/ShareModal.tsx rename to apps/frontend/src/modules/song/components/client/ShareModal.tsx diff --git a/web/src/modules/song/components/client/SongCanvas.tsx b/apps/frontend/src/modules/song/components/client/SongCanvas.tsx similarity index 100% rename from web/src/modules/song/components/client/SongCanvas.tsx rename to apps/frontend/src/modules/song/components/client/SongCanvas.tsx diff --git a/web/src/modules/song/components/client/SongForm.tsx b/apps/frontend/src/modules/song/components/client/SongForm.tsx similarity index 100% rename from web/src/modules/song/components/client/SongForm.tsx rename to apps/frontend/src/modules/song/components/client/SongForm.tsx diff --git a/web/src/modules/song/components/client/SongForm.zod.ts b/apps/frontend/src/modules/song/components/client/SongForm.zod.ts similarity index 100% rename from web/src/modules/song/components/client/SongForm.zod.ts rename to apps/frontend/src/modules/song/components/client/SongForm.zod.ts diff --git a/web/src/modules/song/components/client/SongSearchCombo.tsx b/apps/frontend/src/modules/song/components/client/SongSearchCombo.tsx similarity index 100% rename from web/src/modules/song/components/client/SongSearchCombo.tsx rename to apps/frontend/src/modules/song/components/client/SongSearchCombo.tsx diff --git a/web/src/modules/song/components/client/SongSelector.tsx b/apps/frontend/src/modules/song/components/client/SongSelector.tsx similarity index 100% rename from web/src/modules/song/components/client/SongSelector.tsx rename to apps/frontend/src/modules/song/components/client/SongSelector.tsx diff --git a/web/src/modules/song/components/client/SongThumbnailInput.tsx b/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx similarity index 100% rename from web/src/modules/song/components/client/SongThumbnailInput.tsx rename to apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx diff --git a/web/src/modules/song/components/client/ThumbnailRenderer.tsx b/apps/frontend/src/modules/song/components/client/ThumbnailRenderer.tsx similarity index 100% rename from web/src/modules/song/components/client/ThumbnailRenderer.tsx rename to apps/frontend/src/modules/song/components/client/ThumbnailRenderer.tsx diff --git a/web/src/modules/song/components/client/context/Song.context.tsx b/apps/frontend/src/modules/song/components/client/context/Song.context.tsx similarity index 100% rename from web/src/modules/song/components/client/context/Song.context.tsx rename to apps/frontend/src/modules/song/components/client/context/Song.context.tsx diff --git a/web/src/modules/song/util/downloadSong.ts b/apps/frontend/src/modules/song/util/downloadSong.ts similarity index 100% rename from web/src/modules/song/util/downloadSong.ts rename to apps/frontend/src/modules/song/util/downloadSong.ts diff --git a/web/src/modules/song/util/getSoundList.ts b/apps/frontend/src/modules/song/util/getSoundList.ts similarity index 100% rename from web/src/modules/song/util/getSoundList.ts rename to apps/frontend/src/modules/song/util/getSoundList.ts diff --git a/web/src/modules/user/components/UserProfile.tsx b/apps/frontend/src/modules/user/components/UserProfile.tsx similarity index 100% rename from web/src/modules/user/components/UserProfile.tsx rename to apps/frontend/src/modules/user/components/UserProfile.tsx diff --git a/web/src/modules/user/components/client/.gitkeep b/apps/frontend/src/modules/user/components/client/.gitkeep similarity index 100% rename from web/src/modules/user/components/client/.gitkeep rename to apps/frontend/src/modules/user/components/client/.gitkeep diff --git a/web/src/modules/user/features/song.util.ts b/apps/frontend/src/modules/user/features/song.util.ts similarity index 100% rename from web/src/modules/user/features/song.util.ts rename to apps/frontend/src/modules/user/features/song.util.ts diff --git a/web/src/modules/user/features/user.util.ts b/apps/frontend/src/modules/user/features/user.util.ts similarity index 100% rename from web/src/modules/user/features/user.util.ts rename to apps/frontend/src/modules/user/features/user.util.ts diff --git a/web/tailwind.config.js b/apps/frontend/tailwind.config.js similarity index 100% rename from web/tailwind.config.js rename to apps/frontend/tailwind.config.js diff --git a/apps/frontend/tsconfig.json b/apps/frontend/tsconfig.json new file mode 100644 index 00000000..c34b9f86 --- /dev/null +++ b/apps/frontend/tsconfig.json @@ -0,0 +1,48 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "strictPropertyInitialization": false, + "target": "es5", + "downlevelIteration": true, + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "plugins": [ + { + "name": "next" + } + ], + "types": [ + "mdx" + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.mdx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/web/tsconfig.json b/web/tsconfig.json deleted file mode 100644 index c4137dcb..00000000 --- a/web/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "target": "es5", - "downlevelIteration": true, - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "plugins": [ - { - "name": "next" - } - ], - "types": ["mdx"] - }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ".next/types/**/*.ts" - ], - "exclude": ["node_modules"] -} From ff0be9ddd000c7e3b2b4587c158adb39f4bedbeb Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 20:00:02 -0300 Subject: [PATCH 04/17] refactor: restructure project to use workspaces for apps and packages --- bun.lock | 726 ++++++++++++++++++++++++--------------------------- package.json | 6 +- 2 files changed, 338 insertions(+), 394 deletions(-) diff --git a/bun.lock b/bun.lock index a0f2bc58..faa86a0f 100644 --- a/bun.lock +++ b/bun.lock @@ -20,13 +20,76 @@ "prettier": "^2.8.8", }, }, - "server": { - "name": "noteblockworld-server", + "apps/frontend": { + "name": "@nbw/noteblockworld-frontend", + "version": "0.1.0", + "dependencies": { + "@fortawesome/free-brands-svg-icons": "^6.4.2", + "@fortawesome/free-solid-svg-icons": "^6.4.2", + "@fortawesome/react-fontawesome": "^0.2.0", + "@headlessui/react": "^1.7.19", + "@hookform/resolvers": "^3.3.4", + "@mdx-js/loader": "^3.0.1", + "@mdx-js/react": "^3.0.1", + "@next/mdx": "^14.2.6", + "@next/third-parties": "^14.2.5", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-slider": "^1.1.2", + "@radix-ui/react-tooltip": "^1.0.7", + "@types/node": "^20.3.1", + "@types/react": "18.2.18", + "@types/react-dom": "18.2.7", + "autoprefixer": "10.4.14", + "axios": "^1.6.5", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "cmdk": "^1.0.0", + "embla-carousel-react": "^8.1.3", + "gray-matter": "^4.0.3", + "i": "^0.3.7", + "js-confetti": "^0.12.0", + "next": "14.2.26", + "next-recaptcha-v3": "^1.4.1", + "nextjs-toploader": "^1.6.6", + "npm": "^10.5.1", + "postcss": "8.4.27", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-dropzone": "^14.2.3", + "react-hook-form": "^7.49.3", + "react-hot-toast": "^2.4.1", + "react-infinite-scroll-component": "^6.1.0", + "react-loading-skeleton": "^3.4.0", + "react-markdown": "^9.0.1", + "schema-dts": "^1.1.2", + "sharp": "^0.33.4", + "tailwind-merge": "^2.2.1", + "tailwindcss": "3.4.1", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.1.3", + "zod": "^3.24.1", + "zod-validation-error": "^3.4.0", + }, + "devDependencies": { + "@shrutibalasa/tailwind-grid-auto-fit": "^1.1.0", + "@types/mdx": "^2.0.13", + "@types/react-modal": "^3.16.0", + "eslint-config-next": "13.4.12", + "eslint-plugin-mdx": "^3.1.5", + }, + }, + "packages/backend": { + "name": "@nbw/noteblockworld-server", "version": "0.0.1", "dependencies": { "@aws-sdk/client-s3": "3.717.0", "@aws-sdk/s3-request-presigner": "3.717.0", "@encode42/nbs.js": "^5.0.2", + "@nbw/database": "workspace:*", + "@nbw/song": "workspace:*", + "@nbw/sounds": "workspace:*", + "@nbw/thumbnail": "workspace:*", "@nestjs-modules/mailer": "^2.0.2", "@nestjs/common": "^10.4.15", "@nestjs/config": "^3.3.0", @@ -86,97 +149,66 @@ "typescript": "^5.7.2", }, }, - "shared": { - "name": "noteblockworld-shared", - "version": "0.1.0", + "packages/database": { + "name": "@nbw/database", + "dependencies": { + "@nbw/thumbnail": "workspace:*", + "@nestjs/common": "^10.4.15", + "@nestjs/swagger": "^11.1.5", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "mongoose": "^7.8.3", + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "^5", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "packages/song": { + "name": "@nbw/song", "dependencies": { "@encode42/nbs.js": "^5.0.2", - "@napi-rs/canvas": "^0.1.53", - "@nestjs/swagger": "^7.1.1", + "@nbw/database": "workspace:*", "@timohausmann/quadtree-ts": "^2.2.2", - "@types/unidecode": "^0.1.3", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.0", - "express": "^4.18.2", - "jszip": "^3.10.1", - "tailwindcss": "3.4.1", "unidecode": "^1.1.0", }, "devDependencies": { - "@types/bun": "^1.2.10", - "@types/express": "^4.17.17", - "@types/jest": "^29.5.2", - "@types/multer": "^1.4.11", - "@types/node": "^20.3.1", - "jest": "^29.5.0", - "ts-jest": "^29.1.0", - "typescript": "^5.1.3", + "@types/bun": "latest", + "typescript": "^5", + }, + "peerDependencies": { + "typescript": "^5", }, }, - "tests": { - "name": "tests", - "version": "1.0.0", + "packages/sounds": { + "name": "@nbw/sounds", "devDependencies": { - "cypress": "^13.10.0", + "@types/bun": "latest", + "typescript": "^5", + }, + "peerDependencies": { + "typescript": "^5", }, }, - "web": { - "name": "noteblockworld-web", - "version": "0.1.0", + "packages/thumbnail": { + "name": "@nbw/thumbnail", "dependencies": { - "@fortawesome/free-brands-svg-icons": "^6.4.2", - "@fortawesome/free-solid-svg-icons": "^6.4.2", - "@fortawesome/react-fontawesome": "^0.2.0", - "@headlessui/react": "^1.7.19", - "@hookform/resolvers": "^3.3.4", - "@mdx-js/loader": "^3.0.1", - "@mdx-js/react": "^3.0.1", - "@next/mdx": "^14.2.6", - "@next/third-parties": "^14.2.5", - "@radix-ui/react-dialog": "^1.0.5", - "@radix-ui/react-popover": "^1.0.7", - "@radix-ui/react-slider": "^1.1.2", - "@radix-ui/react-tooltip": "^1.0.7", - "@types/node": "^20.3.1", - "@types/react": "18.2.18", - "@types/react-dom": "18.2.7", - "autoprefixer": "10.4.14", - "axios": "^1.6.5", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.0", - "cmdk": "^1.0.0", - "embla-carousel-react": "^8.1.3", - "gray-matter": "^4.0.3", - "i": "^0.3.7", - "js-confetti": "^0.12.0", - "next": "14.2.5", - "next-recaptcha-v3": "^1.4.1", - "nextjs-toploader": "^1.6.6", - "npm": "^10.5.1", - "postcss": "8.4.27", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-dropzone": "^14.2.3", - "react-hook-form": "^7.49.3", - "react-hot-toast": "^2.4.1", - "react-infinite-scroll-component": "^6.1.0", - "react-loading-skeleton": "^3.4.0", - "react-markdown": "^9.0.1", - "schema-dts": "^1.1.2", - "sharp": "^0.33.4", - "tailwind-merge": "^2.2.1", - "tailwindcss": "3.4.1", - "tailwindcss-animate": "^1.0.7", - "typescript": "^5.1.3", - "zod": "^3.24.1", - "zod-validation-error": "^3.4.0", + "@napi-rs/canvas": "^0.1.74", + "@nbw/song": "workspace:*", + "tailwindcss": "^4.1.11", }, "devDependencies": { - "@shrutibalasa/tailwind-grid-auto-fit": "^1.1.0", - "@types/mdx": "^2.0.13", - "@types/react-modal": "^3.16.0", - "eslint-config-next": "13.4.12", - "eslint-plugin-mdx": "^3.1.5", + "@types/bun": "latest", + "@types/tailwindcss": "3.1.0", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", + "typescript": "^5", + }, + "peerDependencies": { + "typescript": "^5", }, }, }, @@ -278,29 +310,31 @@ "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], - "@babel/compat-data": ["@babel/compat-data@7.26.8", "", {}, "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ=="], + "@babel/compat-data": ["@babel/compat-data@7.28.0", "", {}, "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw=="], - "@babel/core": ["@babel/core@7.26.9", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.9", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", "@babel/helpers": "^7.26.9", "@babel/parser": "^7.26.9", "@babel/template": "^7.26.9", "@babel/traverse": "^7.26.9", "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw=="], + "@babel/core": ["@babel/core@7.28.0", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.6", "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ=="], - "@babel/generator": ["@babel/generator@7.26.9", "", { "dependencies": { "@babel/parser": "^7.26.9", "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg=="], + "@babel/generator": ["@babel/generator@7.28.0", "", { "dependencies": { "@babel/parser": "^7.28.0", "@babel/types": "^7.28.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.26.5", "", { "dependencies": { "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA=="], + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw=="], + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.26.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw=="], + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.27.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.25.9", "", {}, "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw=="], + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], - "@babel/helpers": ["@babel/helpers@7.26.9", "", { "dependencies": { "@babel/template": "^7.26.9", "@babel/types": "^7.26.9" } }, "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA=="], + "@babel/helpers": ["@babel/helpers@7.28.2", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw=="], - "@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="], + "@babel/parser": ["@babel/parser@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.0" }, "bin": "./bin/babel-parser.js" }, "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g=="], "@babel/plugin-syntax-async-generators": ["@babel/plugin-syntax-async-generators@7.8.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="], @@ -310,13 +344,13 @@ "@babel/plugin-syntax-class-static-block": ["@babel/plugin-syntax-class-static-block@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="], - "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.26.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A=="], + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww=="], "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], "@babel/plugin-syntax-json-strings": ["@babel/plugin-syntax-json-strings@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="], - "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA=="], + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w=="], "@babel/plugin-syntax-logical-assignment-operators": ["@babel/plugin-syntax-logical-assignment-operators@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="], @@ -334,15 +368,15 @@ "@babel/plugin-syntax-top-level-await": ["@babel/plugin-syntax-top-level-await@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="], - "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ=="], + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ=="], "@babel/runtime": ["@babel/runtime@7.27.1", "", {}, "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog=="], - "@babel/template": ["@babel/template@7.26.9", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/parser": "^7.26.9", "@babel/types": "^7.26.9" } }, "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA=="], + "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - "@babel/traverse": ["@babel/traverse@7.26.9", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.9", "@babel/parser": "^7.26.9", "@babel/template": "^7.26.9", "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg=="], + "@babel/traverse": ["@babel/traverse@7.28.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", "@babel/types": "^7.28.0", "debug": "^4.3.1" } }, "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg=="], - "@babel/types": ["@babel/types@7.26.9", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw=="], + "@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], @@ -372,10 +406,6 @@ "@css-inline/css-inline-win32-x64-msvc": ["@css-inline/css-inline-win32-x64-msvc@0.14.1", "", { "os": "win32", "cpu": "x64" }, "sha512-nzotGiaiuiQW78EzsiwsHZXbxEt6DiMUFcDJ6dhiliomXxnlaPyBfZb6/FMBgRJOf6sknDt/5695OttNmbMYzg=="], - "@cypress/request": ["@cypress/request@3.0.7", "", { "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~4.0.0", "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", "qs": "6.13.1", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" } }, "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg=="], - - "@cypress/xvfb": ["@cypress/xvfb@1.2.4", "", { "dependencies": { "debug": "^3.1.0", "lodash.once": "^4.1.1" } }, "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q=="], - "@emnapi/runtime": ["@emnapi/runtime@1.3.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw=="], "@encode42/nbs.js": ["@encode42/nbs.js@5.0.2", "", {}, "sha512-lbGs1ZGvvUaXt672CG1oQY55QMyl5uTbBgsGpvSN6qJTqZjVxcr/jqzGBiU+JbqImFV3jQ+zQjrxa4QD40Z+lg=="], @@ -516,27 +546,39 @@ "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.2.0", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg=="], - "@napi-rs/canvas": ["@napi-rs/canvas@0.1.67", "", { "optionalDependencies": { "@napi-rs/canvas-android-arm64": "0.1.67", "@napi-rs/canvas-darwin-arm64": "0.1.67", "@napi-rs/canvas-darwin-x64": "0.1.67", "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.67", "@napi-rs/canvas-linux-arm64-gnu": "0.1.67", "@napi-rs/canvas-linux-arm64-musl": "0.1.67", "@napi-rs/canvas-linux-riscv64-gnu": "0.1.67", "@napi-rs/canvas-linux-x64-gnu": "0.1.67", "@napi-rs/canvas-linux-x64-musl": "0.1.67", "@napi-rs/canvas-win32-x64-msvc": "0.1.67" } }, "sha512-VA4Khm/5Kg2bQGx3jXotTC4MloOG8b1Ung80exafUK0k5u6yJmIz3Q2iXeeWZs5weV+LQOEB+CPKsYwEYaGAjw=="], + "@napi-rs/canvas": ["@napi-rs/canvas@0.1.74", "", { "optionalDependencies": { "@napi-rs/canvas-android-arm64": "0.1.74", "@napi-rs/canvas-darwin-arm64": "0.1.74", "@napi-rs/canvas-darwin-x64": "0.1.74", "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.74", "@napi-rs/canvas-linux-arm64-gnu": "0.1.74", "@napi-rs/canvas-linux-arm64-musl": "0.1.74", "@napi-rs/canvas-linux-riscv64-gnu": "0.1.74", "@napi-rs/canvas-linux-x64-gnu": "0.1.74", "@napi-rs/canvas-linux-x64-musl": "0.1.74", "@napi-rs/canvas-win32-x64-msvc": "0.1.74" } }, "sha512-pOIyzuS+5Bz1vAhD7tdhaw5/936mMJZUn4aVajojUdjYOGSWmfpDYSgt0nQLZPZVN5GLgWgutqXPOi7Jsm3k+Q=="], + + "@napi-rs/canvas-android-arm64": ["@napi-rs/canvas-android-arm64@0.1.74", "", { "os": "android", "cpu": "arm64" }, "sha512-aq5ode+9Z/ZR0H485dI2jdRdttg/hl9Ob+iPCt0nj+QFiirpxDrbUHKeTZWQWEtkWyC7vI5R2dMTbDINBfl9eg=="], + + "@napi-rs/canvas-darwin-arm64": ["@napi-rs/canvas-darwin-arm64@0.1.74", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eO5Miz+ef1dEQyUMWDdcbAb1Wr7yMyxD9/CL9d4frQxO4pTTaCiMBUWup8XDPLr/g7XkSkGCZLP47xiXiyXSpQ=="], + + "@napi-rs/canvas-darwin-x64": ["@napi-rs/canvas-darwin-x64@0.1.74", "", { "os": "darwin", "cpu": "x64" }, "sha512-0EkO0IFkps7C3JpKC7lbM3IL+QDUYeUKagHLDbUry4PeQTghxp6JcgccpmU32ZbpFZgPnm7o0tTJO0J1d8S2rA=="], - "@napi-rs/canvas-android-arm64": ["@napi-rs/canvas-android-arm64@0.1.67", "", { "os": "android", "cpu": "arm64" }, "sha512-W+3DFG5h0WU8Vqqb3W5fNmm5/TPH5ECZRinQDK4CAKFSUkc4iZcDwrmyFG9sB4KdHazf1mFVHCpEeVMO6Mk6Zg=="], + "@napi-rs/canvas-linux-arm-gnueabihf": ["@napi-rs/canvas-linux-arm-gnueabihf@0.1.74", "", { "os": "linux", "cpu": "arm" }, "sha512-qAVJEN2JqGayEI1kSpJy1Xr6ZmCFV9QhRyV35yWsS7e9X1jm+T4DAlCxI4PlKIlqVSzYMYhKrxchST20XBSzHg=="], - "@napi-rs/canvas-darwin-arm64": ["@napi-rs/canvas-darwin-arm64@0.1.67", "", { "os": "darwin", "cpu": "arm64" }, "sha512-xzrv7QboI47yhIHR5P5u/9KGswokuOKLiKSukr1Ku03RRJxP6lGuVtrAZAgdRg7F9FsuF2REf2yK53YVb6pMlA=="], + "@napi-rs/canvas-linux-arm64-gnu": ["@napi-rs/canvas-linux-arm64-gnu@0.1.74", "", { "os": "linux", "cpu": "arm64" }, "sha512-lOnop22qy6MYxI94GGunMMjo6D80I//2W/6pqKUfwXaDQtOfvHsTcVVzDu5cFXUTNrb9ZRfMCeol5YEd+9FJvg=="], - "@napi-rs/canvas-darwin-x64": ["@napi-rs/canvas-darwin-x64@0.1.67", "", { "os": "darwin", "cpu": "x64" }, "sha512-SNk9lYBr84N0gW8MZ2IrjygFtbFBILr3SEqMdHzHHuph20SQmssFvJGPZwSSCMEyKAvyqhogbmlew0te5Z4w9Q=="], + "@napi-rs/canvas-linux-arm64-musl": ["@napi-rs/canvas-linux-arm64-musl@0.1.74", "", { "os": "linux", "cpu": "arm64" }, "sha512-tfFqLHGtSEabBigOnPUfZviSTGmW2xHv5tYZYPBWmgGiTkoNJ7lEWFUxHjwvV5HXGqLs8ok/O7g1enSpxO6lmQ=="], - "@napi-rs/canvas-linux-arm-gnueabihf": ["@napi-rs/canvas-linux-arm-gnueabihf@0.1.67", "", { "os": "linux", "cpu": "arm" }, "sha512-qmBlSvUpl567bzH8tNXi82u5FrL4d0qINqd6K9O7GWGGGFmKMJdrgi2/SW3wwCTxqHBasIDdVWc4KSJfwyaoDQ=="], + "@napi-rs/canvas-linux-riscv64-gnu": ["@napi-rs/canvas-linux-riscv64-gnu@0.1.74", "", { "os": "linux", "cpu": "none" }, "sha512-j6H9dHTMtr1y3tu/zGm1ythYIL9vTl4EEv9f6CMx0n3Zn2M+OruUUwh9ylCj4afzSNEK9T8cr6zMnmTPzkpBvQ=="], - "@napi-rs/canvas-linux-arm64-gnu": ["@napi-rs/canvas-linux-arm64-gnu@0.1.67", "", { "os": "linux", "cpu": "arm64" }, "sha512-k3nAPQefkMeFuJ65Rqdnx92KX1JXQhEKjjWeKsCJB+7sIBgQUWtHo9c3etfVLv5pkWJJDFi/Zc2soNkH3E8dRA=="], + "@napi-rs/canvas-linux-x64-gnu": ["@napi-rs/canvas-linux-x64-gnu@0.1.74", "", { "os": "linux", "cpu": "x64" }, "sha512-73DIV4E7Y9CpIJuUXVl9H6+MEQXyRy4VJQoUGA1tOlcKQiStxqhq6UErL4decI28NxjyQXBhtYZKj5q8AJEuOg=="], - "@napi-rs/canvas-linux-arm64-musl": ["@napi-rs/canvas-linux-arm64-musl@0.1.67", "", { "os": "linux", "cpu": "arm64" }, "sha512-lZwHWR1cCP408l86n3Qbs3X1oFeAYMjJIQvQl1VMZh6wo5PfI+jaZSKBUOd8x44TnVllX9yhLY9unNRztk/sUQ=="], + "@napi-rs/canvas-linux-x64-musl": ["@napi-rs/canvas-linux-x64-musl@0.1.74", "", { "os": "linux", "cpu": "x64" }, "sha512-FgDMEFdGIJT3I2xejflRJ82/ZgDphyirS43RgtoLaIXI6zihLiZcQ7rczpqeWgAwlJNjR0He2EustsKe1SkUOg=="], - "@napi-rs/canvas-linux-riscv64-gnu": ["@napi-rs/canvas-linux-riscv64-gnu@0.1.67", "", { "os": "linux", "cpu": "none" }, "sha512-PdBC9p6bLHA1W3OdA0vTHj701SB/kioGQ1uCFBRMs5KBCaMLb/H4aNi8uaIUIEvBWnxeAjoNcLU7//q0FxEosw=="], + "@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.74", "", { "os": "win32", "cpu": "x64" }, "sha512-x6bhwlhn0wU7dfiP46mt5Bi6PowSUH4CJ4PTzGj58LRQ1HVasEIJgoMx7MLC48F738eJpzbfg3WR/D8+e9CeTA=="], - "@napi-rs/canvas-linux-x64-gnu": ["@napi-rs/canvas-linux-x64-gnu@0.1.67", "", { "os": "linux", "cpu": "x64" }, "sha512-kJJX6eWzjipL/LdKOWCJctc88e5yzuXri8+s0V/lN06OwuLGW62TWS3lvi8qlUrGMOfRGabSWWlB4omhASSB8w=="], + "@nbw/database": ["@nbw/database@workspace:packages/database"], - "@napi-rs/canvas-linux-x64-musl": ["@napi-rs/canvas-linux-x64-musl@0.1.67", "", { "os": "linux", "cpu": "x64" }, "sha512-jLKiPWGeN6ZzhnaLG7ex7eexsiHJ1mdtPK1qKvETIcu45dApMXyUIHvdL6XWB5gFFtj5ScHzLUxv1vkfPZsoxA=="], + "@nbw/noteblockworld-frontend": ["@nbw/noteblockworld-frontend@workspace:apps/frontend"], - "@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.67", "", { "os": "win32", "cpu": "x64" }, "sha512-K/JmkOFbc4iRZYUqJhj0jwqfHA/wNQEmTiGNsgZ6d59yF/IBNp5T0D5eg3B8ghjI8GxDYCiSJ6DNX8mC3Oh2EQ=="], + "@nbw/noteblockworld-server": ["@nbw/noteblockworld-server@workspace:packages/backend"], + + "@nbw/song": ["@nbw/song@workspace:packages/song"], + + "@nbw/sounds": ["@nbw/sounds@workspace:packages/sounds"], + + "@nbw/thumbnail": ["@nbw/thumbnail@workspace:packages/thumbnail"], "@nestjs-modules/mailer": ["@nestjs-modules/mailer@2.0.2", "", { "dependencies": { "@css-inline/css-inline": "0.14.1", "glob": "10.3.12" }, "optionalDependencies": { "@types/ejs": "^3.1.5", "@types/mjml": "^4.7.4", "@types/pug": "^2.0.10", "ejs": "^3.1.10", "handlebars": "^4.7.8", "liquidjs": "^10.11.1", "mjml": "^4.15.3", "preview-email": "^3.0.19", "pug": "^3.0.2" }, "peerDependencies": { "@nestjs/common": ">=7.0.9", "@nestjs/core": ">=7.0.9", "nodemailer": ">=6.4.6" } }, "sha512-+z4mADQasg0H1ZaGu4zZTuKv2pu+XdErqx99PLFPzCDNTN/q9U59WPgkxVaHnsvKHNopLj5Xap7G4ZpptduoYw=="], @@ -566,29 +608,29 @@ "@nestjs/throttler": ["@nestjs/throttler@6.4.0", "", { "peerDependencies": { "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "@nestjs/core": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "reflect-metadata": "^0.1.13 || ^0.2.0" } }, "sha512-osL67i0PUuwU5nqSuJjtUJZMkxAnYB4VldgYUMGzvYRJDCqGRFMWbsbzm/CkUtPLRL30I8T74Xgt/OQxnYokiA=="], - "@next/env": ["@next/env@14.2.5", "", {}, "sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA=="], + "@next/env": ["@next/env@14.2.26", "", {}, "sha512-vO//GJ/YBco+H7xdQhzJxF7ub3SUwft76jwaeOyVVQFHCi5DCnkP16WHB+JBylo4vOKPoZBlR94Z8xBxNBdNJA=="], "@next/eslint-plugin-next": ["@next/eslint-plugin-next@13.4.12", "", { "dependencies": { "glob": "7.1.7" } }, "sha512-6rhK9CdxEgj/j1qvXIyLTWEaeFv7zOK8yJMulz3Owel0uek0U9MJCGzmKgYxM3aAUBo3gKeywCZKyQnJKto60A=="], "@next/mdx": ["@next/mdx@14.2.24", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-OfupBYFZXdB+1CypVpRFpIb/V1PgGed20yUbkKTDdssLvlID/emqVfsZ7RVUhI1DGOQPcPwSAy92GHQlEwccdQ=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@14.2.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@14.2.26", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zDJY8gsKEseGAxG+C2hTMT0w9Nk9N1Sk1qV7vXYz9MEiyRoF5ogQX2+vplyUMIfygnjn9/A04I6yrUTRTuRiyQ=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@14.2.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@14.2.26", "", { "os": "darwin", "cpu": "x64" }, "sha512-U0adH5ryLfmTDkahLwG9sUQG2L0a9rYux8crQeC92rPhi3jGQEY47nByQHrVrt3prZigadwj/2HZ1LUUimuSbg=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@14.2.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@14.2.26", "", { "os": "linux", "cpu": "arm64" }, "sha512-SINMl1I7UhfHGM7SoRiw0AbwnLEMUnJ/3XXVmhyptzriHbWvPPbbm0OEVG24uUKhuS1t0nvN/DBvm5kz6ZIqpg=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@14.2.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@14.2.26", "", { "os": "linux", "cpu": "arm64" }, "sha512-s6JaezoyJK2DxrwHWxLWtJKlqKqTdi/zaYigDXUJ/gmx/72CrzdVZfMvUc6VqnZ7YEvRijvYo+0o4Z9DencduA=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@14.2.5", "", { "os": "linux", "cpu": "x64" }, "sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@14.2.26", "", { "os": "linux", "cpu": "x64" }, "sha512-FEXeUQi8/pLr/XI0hKbe0tgbLmHFRhgXOUiPScz2hk0hSmbGiU8aUqVslj/6C6KA38RzXnWoJXo4FMo6aBxjzg=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@14.2.5", "", { "os": "linux", "cpu": "x64" }, "sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@14.2.26", "", { "os": "linux", "cpu": "x64" }, "sha512-BUsomaO4d2DuXhXhgQCVt2jjX4B4/Thts8nDoIruEJkhE5ifeQFtvW5c9JkdOtYvE5p2G0hcwQ0UbRaQmQwaVg=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@14.2.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@14.2.26", "", { "os": "win32", "cpu": "arm64" }, "sha512-5auwsMVzT7wbB2CZXQxDctpWbdEnEW/e66DyXO1DcgHxIyhP06awu+rHKshZE+lPLIGiwtjo7bsyeuubewwxMw=="], - "@next/swc-win32-ia32-msvc": ["@next/swc-win32-ia32-msvc@14.2.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg=="], + "@next/swc-win32-ia32-msvc": ["@next/swc-win32-ia32-msvc@14.2.26", "", { "os": "win32", "cpu": "ia32" }, "sha512-GQWg/Vbz9zUGi9X80lOeGsz1rMH/MtFO/XqigDznhhhTfDlDoynCM6982mPCbSlxJ/aveZcKtTlwfAjwhyxDpg=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@14.2.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@14.2.26", "", { "os": "win32", "cpu": "x64" }, "sha512-2rdB3T1/Gp7bv1eQTTm9d1Y1sv9UuJ2LAwOE0Pe2prHKe32UNscj7YS13fRB37d0GAiGNR+Y7ZcW8YjDI8Ns0w=="], "@next/third-parties": ["@next/third-parties@14.2.24", "", { "dependencies": { "third-party-capital": "1.0.20" }, "peerDependencies": { "next": "^13.0.0 || ^14.0.0", "react": "^18.2.0" } }, "sha512-+tpIUOMKCyk4EHCIz6ICJDhfIVBpAtS65eul1iUkwBO1fS0MYCd+7+R2cD2Cm+LVTylw72EpfHjF/bcSAQSBWA=="], @@ -816,11 +858,11 @@ "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], - "@types/babel__generator": ["@types/babel__generator@7.6.8", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw=="], + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], - "@types/babel__traverse": ["@types/babel__traverse@7.20.6", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg=="], + "@types/babel__traverse": ["@types/babel__traverse@7.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng=="], "@types/bcryptjs": ["@types/bcryptjs@2.4.6", "", {}, "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ=="], @@ -864,8 +906,6 @@ "@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="], - "@types/jest": ["@types/jest@29.5.14", "", { "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ=="], - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], @@ -928,10 +968,6 @@ "@types/serve-static": ["@types/serve-static@1.15.7", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "*" } }, "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw=="], - "@types/sinonjs__fake-timers": ["@types/sinonjs__fake-timers@8.1.1", "", {}, "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g=="], - - "@types/sizzle": ["@types/sizzle@2.3.9", "", {}, "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w=="], - "@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="], "@types/superagent": ["@types/superagent@8.1.9", "", { "dependencies": { "@types/cookiejar": "^2.1.5", "@types/methods": "^1.1.4", "@types/node": "*", "form-data": "^4.0.0" } }, "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ=="], @@ -940,7 +976,7 @@ "@types/supports-color": ["@types/supports-color@8.1.3", "", {}, "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg=="], - "@types/unidecode": ["@types/unidecode@0.1.3", "", {}, "sha512-7R8zgAf8y1qq5Zif6UIXYR07MHvJIjcQM9Ym2am1YXaWdn9zJltLDwO8HpmIIjHiNT4VMGiNAw+UI9S7OM2foA=="], + "@types/tailwindcss": ["@types/tailwindcss@3.1.0", "", { "dependencies": { "tailwindcss": "*" } }, "sha512-JxPzrm609hzvF4nmOI3StLjbBEP3WWQxDDJESqR1nh94h7gyyy3XSl0hn5RBMJ9mPudlLjtaXs5YEBtLw7CnPA=="], "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], @@ -956,8 +992,6 @@ "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], - "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@5.62.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/type-utils": "5.62.0", "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "peerDependencies": { "@typescript-eslint/parser": "^5.0.0", "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag=="], "@typescript-eslint/parser": ["@typescript-eslint/parser@5.62.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA=="], @@ -1020,8 +1054,6 @@ "acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="], - "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], - "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], @@ -1044,8 +1076,6 @@ "append-field": ["append-field@1.0.0", "", {}, "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="], - "arch": ["arch@2.2.0", "", {}, "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ=="], - "arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -1078,16 +1108,10 @@ "asap": ["asap@2.0.6", "", {}, "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="], - "asn1": ["asn1@0.2.6", "", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="], - "assert-never": ["assert-never@1.4.0", "", {}, "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA=="], - "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], - "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="], - "astral-regex": ["astral-regex@2.0.0", "", {}, "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="], - "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], @@ -1096,18 +1120,12 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], - "attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="], "autoprefixer": ["autoprefixer@10.4.14", "", { "dependencies": { "browserslist": "^4.21.5", "caniuse-lite": "^1.0.30001464", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "aws-sign2": ["aws-sign2@0.7.0", "", {}, "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="], - - "aws4": ["aws4@1.13.2", "", {}, "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="], - "axe-core": ["axe-core@4.10.2", "", {}, "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w=="], "axios": ["axios@1.7.9", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw=="], @@ -1134,18 +1152,12 @@ "base64url": ["base64url@3.0.1", "", {}, "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="], - "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="], - "bcryptjs": ["bcryptjs@2.4.3", "", {}, "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ=="], "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], - "blob-util": ["blob-util@2.0.2", "", {}, "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ=="], - - "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], - "body-parser": ["body-parser@1.20.3", "", { "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" } }, "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g=="], "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], @@ -1166,8 +1178,6 @@ "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], - "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], @@ -1178,8 +1188,6 @@ "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "cachedir": ["cachedir@2.4.0", "", {}, "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ=="], - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -1196,8 +1204,6 @@ "caniuse-lite": ["caniuse-lite@1.0.30001700", "", {}, "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ=="], - "caseless": ["caseless@0.12.0", "", {}, "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="], - "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], @@ -1216,8 +1222,6 @@ "chardet": ["chardet@0.7.0", "", {}, "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="], - "check-more-types": ["check-more-types@2.24.0", "", {}, "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA=="], - "cheerio": ["cheerio@1.0.0-rc.12", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "htmlparser2": "^8.0.1", "parse5": "^7.0.0", "parse5-htmlparser2-tree-adapter": "^7.0.0" } }, "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q=="], "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], @@ -1226,7 +1230,7 @@ "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], - "ci-info": ["ci-info@4.1.0", "", {}, "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A=="], + "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="], @@ -1238,16 +1242,12 @@ "clean-css": ["clean-css@4.2.4", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A=="], - "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], - "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], "cli-table3": ["cli-table3@0.6.5", "", { "dependencies": { "string-width": "^4.2.0" }, "optionalDependencies": { "@colors/colors": "1.5.0" } }, "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ=="], - "cli-truncate": ["cli-truncate@2.1.0", "", { "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" } }, "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg=="], - "cli-width": ["cli-width@3.0.0", "", {}, "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="], "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], @@ -1274,8 +1274,6 @@ "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], - "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], @@ -1284,8 +1282,6 @@ "comment-json": ["comment-json@4.2.5", "", { "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", "esprima": "^4.0.1", "has-own-prop": "^2.0.0", "repeat-string": "^1.6.1" } }, "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw=="], - "common-tags": ["common-tags@1.8.2", "", {}, "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA=="], - "component-emitter": ["component-emitter@1.3.1", "", {}, "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ=="], "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], @@ -1332,25 +1328,19 @@ "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], - "cypress": ["cypress@13.17.0", "", { "dependencies": { "@cypress/request": "^3.0.6", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", "check-more-types": "^2.24.0", "ci-info": "^4.0.0", "cli-cursor": "^3.1.0", "cli-table3": "~0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", "debug": "^4.3.4", "enquirer": "^2.3.6", "eventemitter2": "6.4.7", "execa": "4.1.0", "executable": "^4.1.1", "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", "getos": "^3.2.1", "is-installed-globally": "~0.4.0", "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", "minimist": "^1.2.8", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", "semver": "^7.5.3", "supports-color": "^8.1.1", "tmp": "~0.2.3", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, "bin": { "cypress": "bin/cypress" } }, "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA=="], - "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="], - "dashdash": ["dashdash@1.14.1", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g=="], - "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], - "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], - "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], "decode-named-character-reference": ["decode-named-character-reference@1.0.2", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg=="], - "dedent": ["dedent@1.5.3", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ=="], + "dedent": ["dedent@1.6.0", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA=="], "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], @@ -1420,8 +1410,6 @@ "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - "ecc-jsbn": ["ecc-jsbn@0.1.2", "", { "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw=="], - "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], "editorconfig": ["editorconfig@1.0.4", "", { "dependencies": { "@one-ini/wasm": "0.1.1", "commander": "^10.0.0", "minimatch": "9.0.1", "semver": "^7.5.3" }, "bin": { "editorconfig": "bin/editorconfig" } }, "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q=="], @@ -1446,12 +1434,8 @@ "encoding-japanese": ["encoding-japanese@2.2.0", "", {}, "sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A=="], - "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], - "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], - "enquirer": ["enquirer@2.4.1", "", { "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" } }, "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ=="], - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], @@ -1558,13 +1542,9 @@ "event-stream": ["event-stream@3.3.4", "", { "dependencies": { "duplexer": "~0.1.1", "from": "~0", "map-stream": "~0.1.0", "pause-stream": "0.0.11", "split": "0.3", "stream-combiner": "~0.0.4", "through": "~2.3.1" } }, "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g=="], - "eventemitter2": ["eventemitter2@6.4.7", "", {}, "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg=="], - "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "execa": ["execa@4.1.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", "human-signals": "^1.1.1", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.0", "onetime": "^5.1.0", "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" } }, "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA=="], - - "executable": ["executable@4.1.1", "", { "dependencies": { "pify": "^2.2.0" } }, "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg=="], + "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], "exit": ["exit@0.1.2", "", {}, "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ=="], @@ -1580,10 +1560,6 @@ "external-editor": ["external-editor@3.1.0", "", { "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="], - "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], - - "extsprintf": ["extsprintf@1.3.0", "", {}, "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="], - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-diff": ["fast-diff@1.3.0", "", {}, "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="], @@ -1602,8 +1578,6 @@ "fb-watchman": ["fb-watchman@2.0.2", "", { "dependencies": { "bser": "2.1.1" } }, "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA=="], - "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], - "fdir": ["fdir@6.4.3", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw=="], "figures": ["figures@3.2.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="], @@ -1632,8 +1606,6 @@ "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - "forever-agent": ["forever-agent@0.6.1", "", {}, "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="], - "fork-ts-checker-webpack-plugin": ["fork-ts-checker-webpack-plugin@9.0.2", "", { "dependencies": { "@babel/code-frame": "^7.16.7", "chalk": "^4.1.2", "chokidar": "^3.5.3", "cosmiconfig": "^8.2.0", "deepmerge": "^4.2.2", "fs-extra": "^10.0.0", "memfs": "^3.4.1", "minimatch": "^3.0.4", "node-abort-controller": "^3.0.1", "schema-utils": "^3.1.1", "semver": "^7.3.5", "tapable": "^2.2.1" }, "peerDependencies": { "typescript": ">3.6.0", "webpack": "^5.11.0" } }, "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg=="], "form-data": ["form-data@4.0.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" } }, "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w=="], @@ -1648,7 +1620,7 @@ "from": ["from@0.1.7", "", {}, "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g=="], - "fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], "fs-monkey": ["fs-monkey@1.0.6", "", {}, "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg=="], @@ -1676,24 +1648,18 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], "get-tsconfig": ["get-tsconfig@4.10.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A=="], - "getos": ["getos@3.2.1", "", { "dependencies": { "async": "^3.2.0" } }, "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q=="], - - "getpass": ["getpass@0.1.7", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng=="], - "glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], - "global-dirs": ["global-dirs@3.0.1", "", { "dependencies": { "ini": "2.0.0" } }, "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA=="], - "globals": ["globals@13.24.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ=="], "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], @@ -1752,9 +1718,7 @@ "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], - "http-signature": ["http-signature@1.4.0", "", { "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", "sshpk": "^1.18.0" } }, "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg=="], - - "human-signals": ["human-signals@1.1.1", "", {}, "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="], + "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], "i": ["i@0.3.7", "", {}, "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q=="], @@ -1764,8 +1728,6 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], "import-local": ["import-local@3.2.0", "", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA=="], @@ -1774,13 +1736,11 @@ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], - "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - "ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], + "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], "inline-style-parser": ["inline-style-parser@0.2.4", "", {}, "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="], @@ -1842,8 +1802,6 @@ "is-hexadecimal": ["is-hexadecimal@1.0.4", "", {}, "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="], - "is-installed-globally": ["is-installed-globally@0.4.0", "", { "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" } }, "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ=="], - "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], @@ -1872,8 +1830,6 @@ "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], - "is-typedarray": ["is-typedarray@1.0.0", "", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="], - "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], @@ -1888,8 +1844,6 @@ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - "isstream": ["isstream@0.1.2", "", {}, "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="], - "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], "istanbul-lib-instrument": ["istanbul-lib-instrument@6.0.3", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" } }, "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q=="], @@ -1982,14 +1936,10 @@ "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], - "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], - "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], - "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], @@ -1998,14 +1948,10 @@ "jsonwebtoken": ["jsonwebtoken@9.0.2", "", { "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ=="], - "jsprim": ["jsprim@2.0.2", "", { "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" } }, "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ=="], - "jstransformer": ["jstransformer@1.0.0", "", { "dependencies": { "is-promise": "^2.0.0", "promise": "^7.0.1" } }, "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A=="], "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], - "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], - "juice": ["juice@10.0.1", "", { "dependencies": { "cheerio": "1.0.0-rc.12", "commander": "^6.1.0", "mensch": "^0.3.4", "slick": "^1.12.2", "web-resource-inliner": "^6.0.1" }, "bin": { "juice": "bin/juice" } }, "sha512-ZhJT1soxJCkOiO55/mz8yeBKTAJhRzX9WBO+16ZTqNTONnnVlUPyVBIzQ7lDRjaBdTbid+bAnyIon/GM3yp4cA=="], "jwa": ["jwa@1.4.1", "", { "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA=="], @@ -2024,8 +1970,6 @@ "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="], - "lazy-ass": ["lazy-ass@1.6.0", "", {}, "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw=="], - "leac": ["leac@0.6.0", "", {}, "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="], "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], @@ -2040,8 +1984,6 @@ "libqp": ["libqp@2.1.1", "", {}, "sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow=="], - "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], - "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], @@ -2050,8 +1992,6 @@ "liquidjs": ["liquidjs@10.21.0", "", { "dependencies": { "commander": "^10.0.0" }, "bin": { "liquidjs": "bin/liquid.js", "liquid": "bin/liquid.js" } }, "sha512-DouqxNU2jfoZzb1LinVjOc/f6ssitGIxiDJT+kEKyYqPSSSd+WmGOAhtWbVm1/n75svu4aQ+FyQ3ctd3wh1bbw=="], - "listr2": ["listr2@3.14.0", "", { "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", "log-update": "^4.0.0", "p-map": "^4.0.0", "rfdc": "^1.3.0", "rxjs": "^7.5.1", "through": "^2.3.8", "wrap-ansi": "^7.0.0" }, "peerDependencies": { "enquirer": ">= 2.3.0 < 3" }, "optionalPeers": ["enquirer"] }, "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g=="], - "load-plugin": ["load-plugin@6.0.3", "", { "dependencies": { "@npmcli/config": "^8.0.0", "import-meta-resolve": "^4.0.0" } }, "sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w=="], "loader-runner": ["loader-runner@4.3.0", "", {}, "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="], @@ -2080,8 +2020,6 @@ "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], - "log-update": ["log-update@4.0.0", "", { "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", "slice-ansi": "^4.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg=="], - "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], @@ -2310,7 +2248,7 @@ "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], - "next": ["next@14.2.5", "", { "dependencies": { "@next/env": "14.2.5", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "graceful-fs": "^4.2.11", "postcss": "8.4.31", "styled-jsx": "5.1.1" }, "optionalDependencies": { "@next/swc-darwin-arm64": "14.2.5", "@next/swc-darwin-x64": "14.2.5", "@next/swc-linux-arm64-gnu": "14.2.5", "@next/swc-linux-arm64-musl": "14.2.5", "@next/swc-linux-x64-gnu": "14.2.5", "@next/swc-linux-x64-musl": "14.2.5", "@next/swc-win32-arm64-msvc": "14.2.5", "@next/swc-win32-ia32-msvc": "14.2.5", "@next/swc-win32-x64-msvc": "14.2.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA=="], + "next": ["next@14.2.26", "", { "dependencies": { "@next/env": "14.2.26", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "graceful-fs": "^4.2.11", "postcss": "8.4.31", "styled-jsx": "5.1.1" }, "optionalDependencies": { "@next/swc-darwin-arm64": "14.2.26", "@next/swc-darwin-x64": "14.2.26", "@next/swc-linux-arm64-gnu": "14.2.26", "@next/swc-linux-arm64-musl": "14.2.26", "@next/swc-linux-x64-gnu": "14.2.26", "@next/swc-linux-x64-musl": "14.2.26", "@next/swc-win32-arm64-msvc": "14.2.26", "@next/swc-win32-ia32-msvc": "14.2.26", "@next/swc-win32-x64-msvc": "14.2.26" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-b81XSLihMwCfwiUVRRja3LphLo4uBBMZEzBBWMaISbKTwOmq3wPknIETy/8000tr7Gq4WmbuFYPS7jOYIf+ZJw=="], "next-recaptcha-v3": ["next-recaptcha-v3@1.5.2", "", { "peerDependencies": { "next": "^13 || ^14 || ^15", "react": "^18 || ^19" } }, "sha512-CTFQvyWWQLrIuI++NhOFeQKdELUFvTDGfCty+bz6hxU8frS59ycl4TInvWhCn+9eKjAqV6LqQZZGHdwla8t8GQ=="], @@ -2342,12 +2280,6 @@ "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], - "noteblockworld-server": ["noteblockworld-server@workspace:server"], - - "noteblockworld-shared": ["noteblockworld-shared@workspace:shared"], - - "noteblockworld-web": ["noteblockworld-web@workspace:web"], - "npm": ["npm@10.9.2", "", { "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^8.0.0", "@npmcli/config": "^9.0.0", "@npmcli/fs": "^4.0.0", "@npmcli/map-workspaces": "^4.0.2", "@npmcli/package-json": "^6.1.0", "@npmcli/promise-spawn": "^8.0.2", "@npmcli/redact": "^3.0.0", "@npmcli/run-script": "^9.0.1", "@sigstore/tuf": "^3.0.0", "abbrev": "^3.0.0", "archy": "~1.0.0", "cacache": "^19.0.1", "chalk": "^5.3.0", "ci-info": "^4.1.0", "cli-columns": "^4.0.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", "glob": "^10.4.5", "graceful-fs": "^4.2.11", "hosted-git-info": "^8.0.2", "ini": "^5.0.0", "init-package-json": "^7.0.2", "is-cidr": "^5.1.0", "json-parse-even-better-errors": "^4.0.0", "libnpmaccess": "^9.0.0", "libnpmdiff": "^7.0.0", "libnpmexec": "^9.0.0", "libnpmfund": "^6.0.0", "libnpmhook": "^11.0.0", "libnpmorg": "^7.0.0", "libnpmpack": "^8.0.0", "libnpmpublish": "^10.0.1", "libnpmsearch": "^8.0.0", "libnpmteam": "^7.0.0", "libnpmversion": "^7.0.0", "make-fetch-happen": "^14.0.3", "minimatch": "^9.0.5", "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", "node-gyp": "^11.0.0", "nopt": "^8.0.0", "normalize-package-data": "^7.0.0", "npm-audit-report": "^6.0.0", "npm-install-checks": "^7.1.1", "npm-package-arg": "^12.0.0", "npm-pick-manifest": "^10.0.0", "npm-profile": "^11.0.1", "npm-registry-fetch": "^18.0.2", "npm-user-validate": "^3.0.0", "p-map": "^4.0.0", "pacote": "^19.0.1", "parse-conflict-json": "^4.0.0", "proc-log": "^5.0.0", "qrcode-terminal": "^0.12.0", "read": "^4.0.0", "semver": "^7.6.3", "spdx-expression-parse": "^4.0.0", "ssri": "^12.0.0", "supports-color": "^9.4.0", "tar": "^6.2.1", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", "validate-npm-package-name": "^6.0.0", "which": "^5.0.0", "write-file-atomic": "^6.0.0" }, "bin": { "npm": "bin/npm-cli.js", "npx": "bin/npx-cli.js" } }, "sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ=="], "npm-install-checks": ["npm-install-checks@6.3.0", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw=="], @@ -2398,8 +2330,6 @@ "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], - "ospath": ["ospath@1.2.2", "", {}, "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA=="], - "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], "p-event": ["p-event@4.2.0", "", { "dependencies": { "p-timeout": "^3.1.0" } }, "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ=="], @@ -2410,8 +2340,6 @@ "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], - "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - "p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], @@ -2420,15 +2348,13 @@ "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], - "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], - "param-case": ["param-case@2.1.1", "", { "dependencies": { "no-case": "^2.2.0" } }, "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w=="], "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], "parse-entities": ["parse-entities@2.0.0", "", { "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", "character-reference-invalid": "^1.0.0", "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" } }, "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ=="], - "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + "parse-json": ["parse-json@7.1.1", "", { "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", "json-parse-even-better-errors": "^3.0.0", "lines-and-columns": "^2.0.3", "type-fest": "^3.8.0" } }, "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw=="], "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], @@ -2464,7 +2390,7 @@ "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "path-to-regexp": ["path-to-regexp@3.3.0", "", {}, "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="], + "path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="], "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], @@ -2474,13 +2400,9 @@ "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], - "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], - - "performance-now": ["performance-now@2.1.0", "", {}, "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="], - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.1", "", {}, "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg=="], + "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], @@ -2512,16 +2434,12 @@ "prettier-linter-helpers": ["prettier-linter-helpers@1.0.0", "", { "dependencies": { "fast-diff": "^1.1.2" } }, "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="], - "pretty-bytes": ["pretty-bytes@5.6.0", "", {}, "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="], - "pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], "preview-email": ["preview-email@3.1.0", "", { "dependencies": { "ci-info": "^3.8.0", "display-notification": "2.0.0", "fixpack": "^4.0.0", "get-port": "5.1.1", "mailparser": "^3.7.1", "nodemailer": "^6.9.13", "open": "7", "p-event": "4.2.0", "p-wait-for": "3.2.0", "pug": "^3.0.3", "uuid": "^9.0.1" } }, "sha512-ZtV1YrwscEjlrUzYrTSs6Nwo49JM3pXLM4fFOBSC3wSni+bxaWlw9/Qgk75PZO8M7cX2EybmL2iwvaV3vkAttw=="], "proc-log": ["proc-log@4.2.0", "", {}, "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA=="], - "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], - "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], "promise": ["promise@7.3.1", "", { "dependencies": { "asap": "~2.0.3" } }, "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg=="], @@ -2568,8 +2486,6 @@ "pug-walk": ["pug-walk@2.0.0", "", {}, "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="], - "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], @@ -2600,7 +2516,7 @@ "react-infinite-scroll-component": ["react-infinite-scroll-component@6.1.0", "", { "dependencies": { "throttle-debounce": "^2.1.0" }, "peerDependencies": { "react": ">=16.0.0" } }, "sha512-SQu5nCqy8DxQWpnUVLx7V7b7LcA37aM7tvoWjTLZp1dk6EJibM5/4EJKzOnl07/BsM1Y40sKLuqjCwwH/xV0TQ=="], - "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], "react-loading-skeleton": ["react-loading-skeleton@3.5.0", "", { "peerDependencies": { "react": ">=16.8.0" } }, "sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ=="], @@ -2648,8 +2564,6 @@ "repeat-string": ["repeat-string@1.6.1", "", {}, "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w=="], - "request-progress": ["request-progress@3.0.0", "", { "dependencies": { "throttleit": "^1.0.0" } }, "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg=="], - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], @@ -2670,8 +2584,6 @@ "reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="], - "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], - "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], "run-applescript": ["run-applescript@3.2.0", "", { "dependencies": { "execa": "^0.10.0" } }, "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg=="], @@ -2718,8 +2630,6 @@ "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], - "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], "sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "0.33.5", "@img/sharp-linux-x64": "0.33.5", "@img/sharp-linuxmusl-arm64": "0.33.5", "@img/sharp-linuxmusl-x64": "0.33.5", "@img/sharp-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], @@ -2740,7 +2650,7 @@ "sift": ["sift@16.0.1", "", {}, "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="], - "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], @@ -2748,15 +2658,13 @@ "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], - "slice-ansi": ["slice-ansi@3.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ=="], - "slick": ["slick@1.12.2", "", {}, "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A=="], "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], "socks": ["socks@2.8.4", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -2778,8 +2686,6 @@ "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - "sshpk": ["sshpk@1.18.0", "", { "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, "bin": { "sshpk-conv": "bin/sshpk-conv", "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" } }, "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ=="], - "stable-hash": ["stable-hash@0.0.4", "", {}, "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g=="], "stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], @@ -2864,8 +2770,6 @@ "test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], - "tests": ["tests@workspace:tests"], - "text-table": ["text-table@0.2.0", "", {}, "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="], "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], @@ -2876,19 +2780,13 @@ "throttle-debounce": ["throttle-debounce@2.3.0", "", {}, "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ=="], - "throttleit": ["throttleit@1.0.1", "", {}, "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ=="], - "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], "tinyglobby": ["tinyglobby@0.2.12", "", { "dependencies": { "fdir": "^6.4.3", "picomatch": "^4.0.2" } }, "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww=="], "tlds": ["tlds@1.255.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw=="], - "tldts": ["tldts@6.1.78", "", { "dependencies": { "tldts-core": "^6.1.78" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-fSgYrW0ITH0SR/CqKMXIruYIPpNu5aDgUp22UhYoSrnUQwc7SBqifEBFNce7AAcygUPBo6a/gbtcguWdmko4RQ=="], - - "tldts-core": ["tldts-core@6.1.78", "", {}, "sha512-jS0svNsB99jR6AJBmfmEWuKIgz91Haya91Z43PATaeHJ24BkMoNRb/jlaD37VYjb0mYf6gRL/HOnvS1zEnYBiw=="], - - "tmp": ["tmp@0.2.3", "", {}, "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w=="], + "tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], "tmpl": ["tmpl@1.0.5", "", {}, "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw=="], @@ -2898,9 +2796,7 @@ "token-stream": ["token-stream@1.0.0", "", {}, "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg=="], - "tough-cookie": ["tough-cookie@5.1.1", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA=="], - - "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + "tr46": ["tr46@3.0.0", "", { "dependencies": { "punycode": "^2.1.1" } }, "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA=="], "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], @@ -2910,7 +2806,7 @@ "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], - "ts-jest": ["ts-jest@29.2.6", "", { "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", "semver": "^7.7.1", "yargs-parser": "^21.1.1" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", "typescript": ">=4.3 <6" }, "optionalPeers": ["@babel/core", "@jest/transform", "@jest/types", "babel-jest"], "bin": { "ts-jest": "cli.js" } }, "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg=="], + "ts-jest": ["ts-jest@29.4.0", "", { "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", "semver": "^7.7.2", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", "@jest/transform": "^29.0.0 || ^30.0.0", "@jest/types": "^29.0.0 || ^30.0.0", "babel-jest": "^29.0.0 || ^30.0.0", "jest": "^29.0.0 || ^30.0.0", "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "optionalPeers": ["@babel/core", "@jest/transform", "@jest/types", "babel-jest", "jest-util"], "bin": { "ts-jest": "cli.js" } }, "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q=="], "ts-loader": ["ts-loader@9.5.2", "", { "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4", "source-map": "^0.7.4" }, "peerDependencies": { "typescript": "*", "webpack": "^5.0.0" } }, "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw=="], @@ -2926,15 +2822,11 @@ "tsutils": ["tsutils@3.21.0", "", { "dependencies": { "tslib": "^1.8.1" }, "peerDependencies": { "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA=="], - "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], - - "tweetnacl": ["tweetnacl@0.14.5", "", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="], - "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], "type-detect": ["type-detect@4.0.8", "", {}, "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="], - "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], @@ -2986,8 +2878,6 @@ "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - "untildify": ["untildify@4.0.0", "", {}, "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw=="], - "update-browserslist-db": ["update-browserslist-db@1.1.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg=="], "upper-case": ["upper-case@1.1.3", "", {}, "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA=="], @@ -3022,8 +2912,6 @@ "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - "verror": ["verror@1.10.0", "", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw=="], - "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], @@ -3046,7 +2934,7 @@ "web-resource-inliner": ["web-resource-inliner@6.0.1", "", { "dependencies": { "ansi-colors": "^4.1.1", "escape-goat": "^3.0.0", "htmlparser2": "^5.0.0", "mime": "^2.4.6", "node-fetch": "^2.6.0", "valid-data-url": "^3.0.0" } }, "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A=="], - "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], "webpack": ["webpack@5.97.1", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg=="], @@ -3054,7 +2942,7 @@ "webpack-sources": ["webpack-sources@3.2.3", "", {}, "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="], - "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "whatwg-url": ["whatwg-url@11.0.0", "", { "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" } }, "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], @@ -3092,8 +2980,6 @@ "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], - "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], @@ -3104,15 +2990,17 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@ampproject/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + "@ampproject/remapping/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.12", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg=="], + + "@ampproject/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], "@angular-devkit/core/ajv": ["ajv@8.12.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA=="], "@angular-devkit/core/jsonc-parser": ["jsonc-parser@3.2.1", "", {}, "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA=="], - "@angular-devkit/core/rxjs": ["rxjs@7.8.1", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg=="], + "@angular-devkit/core/picomatch": ["picomatch@4.0.1", "", {}, "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg=="], - "@angular-devkit/core/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "@angular-devkit/core/rxjs": ["rxjs@7.8.1", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg=="], "@angular-devkit/schematics/jsonc-parser": ["jsonc-parser@3.2.1", "", {}, "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA=="], @@ -3138,21 +3026,25 @@ "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + "@babel/core/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + "@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.12", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg=="], + + "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + "@babel/helper-module-transforms/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], - "@cypress/request/qs": ["qs@6.13.1", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg=="], + "@babel/template/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - "@cypress/request/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + "@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - "@cypress/xvfb/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], @@ -3168,7 +3060,9 @@ "@istanbuljs/load-nyc-config/resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], - "@jest/core/ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + "@jest/console/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + + "@jest/core/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], "@jest/environment/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], @@ -3176,6 +3070,8 @@ "@jest/reporters/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + "@jest/reporters/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "@jest/reporters/glob": ["glob@7.1.7", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="], "@jest/reporters/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], @@ -3184,27 +3080,37 @@ "@jest/transform/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + "@jest/types/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "@jridgewell/gen-mapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], "@jridgewell/source-map/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], - "@mdx-js/loader/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "@nbw/database/@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@nbw/noteblockworld-server/@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@nbw/song/@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], - "@mdx-js/mdx/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "@nbw/sounds/@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@nbw/thumbnail/@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@nbw/thumbnail/tailwindcss": ["tailwindcss@4.1.11", "", {}, "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA=="], "@nestjs-modules/mailer/glob": ["glob@10.3.12", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.6", "minimatch": "^9.0.1", "minipass": "^7.0.4", "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg=="], "@nestjs/cli/typescript": ["typescript@5.7.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg=="], + "@nestjs/core/path-to-regexp": ["path-to-regexp@3.3.0", "", {}, "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="], + "@nestjs/jwt/@types/jsonwebtoken": ["@types/jsonwebtoken@9.0.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA=="], "@nestjs/platform-express/multer": ["multer@1.4.4-lts.1", "", { "dependencies": { "append-field": "^1.0.0", "busboy": "^1.0.0", "concat-stream": "^1.5.2", "mkdirp": "^0.5.4", "object-assign": "^4.1.1", "type-is": "^1.6.4", "xtend": "^4.0.0" } }, "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg=="], - "@nestjs/swagger/path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="], - "@next/eslint-plugin-next/glob": ["glob@7.1.7", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="], - "@next/mdx/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "@npmcli/config/ci-info": ["ci-info@4.1.0", "", {}, "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A=="], "@npmcli/config/ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], @@ -3222,9 +3128,9 @@ "@types/graceful-fs/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], - "@types/whatwg-url/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "@types/tailwindcss/tailwindcss": ["tailwindcss@4.1.11", "", {}, "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA=="], - "@types/yauzl/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "@types/whatwg-url/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], "@typescript-eslint/utils/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], @@ -3236,10 +3142,10 @@ "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "babel-plugin-istanbul/istanbul-lib-instrument": ["istanbul-lib-instrument@5.2.1", "", { "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg=="], + "babel-walk/@babel/types": ["@babel/types@7.26.9", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw=="], + "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -3252,18 +3158,18 @@ "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "config-chain/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + "constantinople/@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="], - "cypress/commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], + "constantinople/@babel/types": ["@babel/types@7.26.9", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw=="], - "cypress/proxy-from-env": ["proxy-from-env@1.0.0", "", {}, "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A=="], + "cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], "decode-named-character-reference/character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], - "ecc-jsbn/jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], - "editorconfig/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], "editorconfig/minimatch": ["minimatch@9.0.1", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w=="], @@ -3288,16 +3194,16 @@ "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "estree-util-to-js/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "express/path-to-regexp": ["path-to-regexp@0.1.12", "", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="], - "external-editor/tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "fdir/picomatch": ["picomatch@4.0.1", "", {}, "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg=="], + "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], @@ -3306,16 +3212,16 @@ "fixpack/chalk": ["chalk@3.0.0", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg=="], - "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "fork-ts-checker-webpack-plugin/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], - "formidable/qs": ["qs@6.13.1", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg=="], "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "globals/type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + "gray-matter/js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], + "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "html-minifier/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], "html-to-text/htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], @@ -3324,33 +3230,45 @@ "is-expression/acorn": ["acorn@7.4.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="], + "istanbul-lib-instrument/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "jest-changed-files/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], + "istanbul-lib-source-maps/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "jest-circus/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], - "jest-config/ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], - "jest-config/glob": ["glob@7.1.7", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="], + "jest-config/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + "jest-environment-node/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "jest-haste-map/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "jest-haste-map/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], "jest-mock/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "jest-runner/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "jest-runner/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], "jest-runner/source-map-support": ["source-map-support@0.5.13", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w=="], + "jest-runtime/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "jest-runtime/glob": ["glob@7.1.7", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="], "jest-runtime/strip-bom": ["strip-bom@4.0.0", "", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], - "jest-util/ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + "jest-snapshot/@babel/types": ["@babel/types@7.26.9", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw=="], + + "jest-snapshot/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - "jest-util/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "jest-util/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + + "jest-watcher/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], "jest-worker/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], @@ -3360,14 +3278,12 @@ "liquidjs/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], - "listr2/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "log-update/slice-ansi": ["slice-ansi@4.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ=="], - "mailparser/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "mailparser/nodemailer": ["nodemailer@6.9.16", "", {}, "sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ=="], + "make-dir/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "mdast-util-from-markdown/@types/mdast": ["@types/mdast@3.0.15", "", { "dependencies": { "@types/unist": "^2" } }, "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ=="], "mdast-util-from-markdown/unist-util-stringify-position": ["unist-util-stringify-position@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.2" } }, "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g=="], @@ -3384,17 +3300,11 @@ "mdast-util-to-markdown/mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "mjml-cli/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "mongodb-connection-string-url/whatwg-url": ["whatwg-url@11.0.0", "", { "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" } }, "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ=="], - "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], - "noteblockworld-server/@types/bun": ["@types/bun@1.2.11", "", { "dependencies": { "bun-types": "1.2.11" } }, "sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw=="], - - "noteblockworld-shared/@nestjs/swagger": ["@nestjs/swagger@7.4.2", "", { "dependencies": { "@microsoft/tsdoc": "^0.15.0", "@nestjs/mapped-types": "2.0.5", "js-yaml": "4.1.0", "lodash": "4.17.21", "path-to-regexp": "3.3.0", "swagger-ui-dist": "5.17.14" }, "peerDependencies": { "@fastify/static": "^6.0.0 || ^7.0.0", "@nestjs/common": "^9.0.0 || ^10.0.0", "@nestjs/core": "^9.0.0 || ^10.0.0", "class-transformer": "*", "class-validator": "*", "reflect-metadata": "^0.1.12 || ^0.2.0" }, "optionalPeers": ["@fastify/static", "class-transformer", "class-validator"] }, "sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ=="], + "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], "npm/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], @@ -3754,6 +3664,12 @@ "npm/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "parse-json/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], + + "parse-json/lines-and-columns": ["lines-and-columns@2.0.4", "", {}, "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A=="], + + "parse-json/type-fest": ["type-fest@3.13.1", "", {}, "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g=="], + "parse5/entities": ["entities@6.0.0", "", {}, "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw=="], "passport-magic-login/@types/node": ["@types/node@14.18.63", "", {}, "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="], @@ -3764,26 +3680,22 @@ "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], - "preview-email/ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + "pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], - "prop-types/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - - "rc/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], - "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], "read-package-json-fast/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "remark-parse/mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA=="], "resolve-cwd/resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + "restore-cursor/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "rimraf/glob": ["glob@7.1.7", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="], "run-applescript/execa": ["execa@0.10.0", "", { "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^3.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" } }, "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw=="], @@ -3798,7 +3710,7 @@ "send/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], - "sshpk/jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], @@ -3822,7 +3734,7 @@ "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - "ts-loader/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "ts-jest/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], "tsutils/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], @@ -3832,13 +3744,9 @@ "unified-engine/ignore": ["ignore@6.0.2", "", {}, "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A=="], - "unified-engine/parse-json": ["parse-json@7.1.1", "", { "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", "json-parse-even-better-errors": "^3.0.0", "lines-and-columns": "^2.0.3", "type-fest": "^3.8.0" } }, "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw=="], - "uvu/diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="], - "v8-to-istanbul/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], - - "verror/core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], + "v8-to-istanbul/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], "vfile-reporter/string-width": ["string-width@6.1.0", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^10.2.1", "strip-ansi": "^7.0.1" } }, "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ=="], @@ -3850,6 +3758,12 @@ "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "with/@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="], + + "with/@babel/types": ["@babel/types@7.26.9", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw=="], + + "write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "@angular-devkit/core/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "@angular-devkit/schematics-cli/inquirer/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], @@ -3878,6 +3792,12 @@ "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + "@babel/core/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + + "@babel/template/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + + "@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], @@ -3886,11 +3806,27 @@ "@istanbuljs/load-nyc-config/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "@jest/console/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@jest/core/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + "@jest/environment/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], "@jest/fake-timers/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], - "@jest/reporters/jest-worker/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "@jest/reporters/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@jest/types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@nbw/database/@types/bun/bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + + "@nbw/noteblockworld-server/@types/bun/bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + + "@nbw/song/@types/bun/bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + + "@nbw/sounds/@types/bun/bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + + "@nbw/thumbnail/@types/bun/bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], "@nestjs-modules/mailer/glob/jackspeak": ["jackspeak@2.3.6", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ=="], @@ -3908,18 +3844,20 @@ "@types/whatwg-url/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], - "@types/yauzl/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], - "@typescript-eslint/utils/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "babel-plugin-istanbul/istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "babel-walk/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "bun-types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + "constantinople/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + "editorconfig/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], @@ -3936,19 +3874,25 @@ "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - "jest-changed-files/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - - "jest-changed-files/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "jest-circus/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], "jest-environment-node/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], - "jest-haste-map/jest-worker/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "jest-haste-map/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], "jest-mock/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], - "jest-runner/jest-worker/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "jest-runner/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "jest-runner/source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "jest-runtime/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "jest-snapshot/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "jest-util/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "jest-watcher/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], "jest-worker/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], @@ -3986,15 +3930,9 @@ "mjml-cli/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "mongodb-connection-string-url/whatwg-url/tr46": ["tr46@3.0.0", "", { "dependencies": { "punycode": "^2.1.1" } }, "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA=="], - - "mongodb-connection-string-url/whatwg-url/webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], - - "noteblockworld-server/@types/bun/bun-types": ["bun-types@1.2.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA=="], - - "noteblockworld-shared/@nestjs/swagger/@nestjs/mapped-types": ["@nestjs/mapped-types@2.0.5", "", { "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", "class-transformer": "^0.4.0 || ^0.5.0", "class-validator": "^0.13.0 || ^0.14.0", "reflect-metadata": "^0.1.12 || ^0.2.0" }, "optionalPeers": ["class-transformer", "class-validator"] }, "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg=="], + "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], - "noteblockworld-shared/@nestjs/swagger/swagger-ui-dist": ["swagger-ui-dist@5.17.14", "", {}, "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw=="], + "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], "npm/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], @@ -4046,6 +3984,8 @@ "run-applescript/execa/npm-run-path": ["npm-run-path@2.0.2", "", { "dependencies": { "path-key": "^2.0.0" } }, "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw=="], + "run-applescript/execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "terser-webpack-plugin/schema-utils/ajv": ["ajv@8.12.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA=="], @@ -4056,12 +3996,6 @@ "unified-engine/concat-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "unified-engine/parse-json/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], - - "unified-engine/parse-json/lines-and-columns": ["lines-and-columns@2.0.4", "", {}, "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A=="], - - "unified-engine/parse-json/type-fest": ["type-fest@3.13.1", "", {}, "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g=="], - "vfile-reporter/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], "vfile-reporter/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], @@ -4074,6 +4008,8 @@ "webpack/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], + "with/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], @@ -4082,17 +4018,19 @@ "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "@jest/reporters/jest-worker/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + "@nbw/database/@types/bun/bun-types/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], - "@nestjs-modules/mailer/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@nbw/noteblockworld-server/@types/bun/bun-types/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], - "jest-haste-map/jest-worker/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + "@nbw/song/@types/bun/bun-types/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], - "jest-runner/jest-worker/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + "@nbw/sounds/@types/bun/bun-types/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], - "mdast-util-mdx-jsx/parse-entities/is-alphanumerical/is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], + "@nbw/thumbnail/@types/bun/bun-types/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], - "noteblockworld-server/@types/bun/bun-types/@types/node": ["@types/node@22.13.5", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg=="], + "@nestjs-modules/mailer/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "mdast-util-mdx-jsx/parse-entities/is-alphanumerical/is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], "npm/@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], @@ -4142,7 +4080,15 @@ "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - "noteblockworld-server/@types/bun/bun-types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + "@nbw/database/@types/bun/bun-types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@nbw/noteblockworld-server/@types/bun/bun-types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@nbw/song/@types/bun/bun-types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@nbw/sounds/@types/bun/bun-types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "@nbw/thumbnail/@types/bun/bun-types/@types/node/undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], diff --git a/package.json b/package.json index a61fb975..d9958dc2 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,8 @@ "author": "", "license": "ISC", "workspaces": [ - "server", - "web", - "shared", - "tests" + "apps/*", + "packages/*" ], "devDependencies": { "@types/bun": "^1.2.10", From f350b50687519fbc48ede755bafb5118b36f1ebd Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 20:23:29 -0300 Subject: [PATCH 05/17] refactor: clean up database module by removing unused index file and adjusting exports --- packages/database/index.ts | 1 - packages/database/src/index.ts | 6 ++---- packages/database/src/song/entity/song.entity.ts | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) delete mode 100644 packages/database/index.ts diff --git a/packages/database/index.ts b/packages/database/index.ts deleted file mode 100644 index f67b2c64..00000000 --- a/packages/database/index.ts +++ /dev/null @@ -1 +0,0 @@ -console.log("Hello via Bun!"); \ No newline at end of file diff --git a/packages/database/src/index.ts b/packages/database/src/index.ts index 3092ccb4..167da601 100644 --- a/packages/database/src/index.ts +++ b/packages/database/src/index.ts @@ -2,7 +2,6 @@ export * from './common/dto/PageQuery.dto'; export * from './common/dto/types'; export * from './song/constants'; - export * from './song/dto/CustomInstrumentData.dto'; export * from './song/dto/FeaturedSongsDto.dto'; export * from './song/dto/SongPage.dto'; @@ -10,10 +9,9 @@ export * from './song/dto/SongPreview.dto'; export * from './song/dto/SongStats'; export * from './song/dto/SongView.dto'; export * from './song/dto/ThumbnailData.dto'; -export * from './song/dto/types'; export * from './song/dto/UploadSongDto.dto'; export * from './song/dto/UploadSongResponseDto.dto'; - +export * from './song/dto/types'; export * from './song/entity/song.entity'; export * from './user/constants'; @@ -24,5 +22,5 @@ export * from './user/dto/LoginWithEmail.dto'; export * from './user/dto/NewEmailUser.dto'; export * from './user/dto/SingleUsePass.dto'; export * from './user/dto/UpdateUsername.dto'; - +export * from './user/dto/user.dto'; export * from './user/entity/user.entity'; diff --git a/packages/database/src/song/entity/song.entity.ts b/packages/database/src/song/entity/song.entity.ts index 195499e1..22466a5a 100644 --- a/packages/database/src/song/entity/song.entity.ts +++ b/packages/database/src/song/entity/song.entity.ts @@ -17,7 +17,7 @@ import type { CategoryType, LicenseType, VisibilityType } from '../dto/types'; }, }, }) -export default class Song { +export class Song { @Prop({ type: String, required: true, unique: true }) publicId: string; From a2f54b6f518f18fcde31817d7d2dec56c4c0809f Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 20:43:12 -0300 Subject: [PATCH 06/17] refactor: update imports to use centralized database module and remove unused imports across various files --- .../email-login.controller.spec.ts | 1 - .../backend/src/lib/GetRequestUser.spec.ts | 4 +-- packages/backend/src/lib/GetRequestUser.ts | 3 +-- packages/backend/src/lib/parseToken.spec.ts | 2 -- packages/backend/src/lib/parseToken.ts | 1 - packages/backend/src/seed/seed.service.ts | 4 +-- .../song-browser.controller.spec.ts | 5 +--- .../song-browser/song-browser.controller.ts | 5 +--- .../song-browser/song-browser.service.spec.ts | 6 +---- .../src/song-browser/song-browser.service.ts | 16 +++++------ .../song-upload/song-upload.service.spec.ts | 19 ++++++------- .../song/song-upload/song-upload.service.ts | 27 +++++++++++-------- .../song/song-webhook/song-webhook.service.ts | 2 +- packages/backend/src/song/song.module.ts | 4 +-- packages/backend/src/song/song.service.ts | 21 ++++++++------- packages/backend/src/song/song.util.ts | 4 +-- packages/backend/src/user/dto/user.dto.ts | 16 ----------- .../backend/src/user/user.controller.spec.ts | 6 ++--- packages/backend/src/user/user.controller.ts | 8 ++---- packages/backend/src/user/user.module.ts | 3 +-- .../backend/src/user/user.service.spec.ts | 12 +++++---- packages/backend/src/user/user.service.ts | 16 ++++++----- 22 files changed, 76 insertions(+), 109 deletions(-) delete mode 100644 packages/backend/src/user/dto/user.dto.ts diff --git a/packages/backend/src/email-login/email-login.controller.spec.ts b/packages/backend/src/email-login/email-login.controller.spec.ts index 1e8e48a3..53d336aa 100644 --- a/packages/backend/src/email-login/email-login.controller.spec.ts +++ b/packages/backend/src/email-login/email-login.controller.spec.ts @@ -1,5 +1,4 @@ import { Test, TestingModule } from '@nestjs/testing'; - import { EmailLoginController } from './email-login.controller'; import { EmailLoginService } from './email-login.service'; diff --git a/packages/backend/src/lib/GetRequestUser.spec.ts b/packages/backend/src/lib/GetRequestUser.spec.ts index 10844366..f9a9fe5c 100644 --- a/packages/backend/src/lib/GetRequestUser.spec.ts +++ b/packages/backend/src/lib/GetRequestUser.spec.ts @@ -1,7 +1,5 @@ +import type { UserDocument } from '@nbw/database'; import { ExecutionContext, HttpException, HttpStatus } from '@nestjs/common'; - -import type { UserDocument } from '@server/user/entity/user.entity'; - import { GetRequestToken, validateUser } from './GetRequestUser'; describe('GetRequestToken', () => { diff --git a/packages/backend/src/lib/GetRequestUser.ts b/packages/backend/src/lib/GetRequestUser.ts index 47deb055..ab2d581c 100644 --- a/packages/backend/src/lib/GetRequestUser.ts +++ b/packages/backend/src/lib/GetRequestUser.ts @@ -1,3 +1,4 @@ +import type { UserDocument } from '@nbw/database'; import { ExecutionContext, HttpException, @@ -6,8 +7,6 @@ import { } from '@nestjs/common'; import type { Request } from 'express'; -import type { UserDocument } from '@server/user/entity/user.entity'; - export const GetRequestToken = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { const req = ctx diff --git a/packages/backend/src/lib/parseToken.spec.ts b/packages/backend/src/lib/parseToken.spec.ts index 8db755f3..6c6431dc 100644 --- a/packages/backend/src/lib/parseToken.spec.ts +++ b/packages/backend/src/lib/parseToken.spec.ts @@ -1,8 +1,6 @@ import { ExecutionContext } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; - import { AuthService } from '@server/auth/auth.service'; - import { ParseTokenPipe } from './parseToken'; describe('ParseTokenPipe', () => { diff --git a/packages/backend/src/lib/parseToken.ts b/packages/backend/src/lib/parseToken.ts index 0b6d090b..c1d0a534 100644 --- a/packages/backend/src/lib/parseToken.ts +++ b/packages/backend/src/lib/parseToken.ts @@ -5,7 +5,6 @@ import { Injectable, Logger, } from '@nestjs/common'; - import { AuthService } from '@server/auth/auth.service'; @Injectable() diff --git a/packages/backend/src/seed/seed.service.ts b/packages/backend/src/seed/seed.service.ts index d2801b60..5ff7daed 100644 --- a/packages/backend/src/seed/seed.service.ts +++ b/packages/backend/src/seed/seed.service.ts @@ -3,8 +3,10 @@ import { faker } from '@faker-js/faker'; import { CategoryType, LicenseType, + SongDocument, UploadConst, UploadSongDto, + UserDocument, VisibilityType, } from '@nbw/database'; import { @@ -14,9 +16,7 @@ import { Injectable, Logger, } from '@nestjs/common'; -import { SongDocument } from '@server/song/entity/song.entity'; import { SongService } from '@server/song/song.service'; -import { UserDocument } from '@server/user/entity/user.entity'; import { UserService } from '@server/user/user.service'; @Injectable() diff --git a/packages/backend/src/song-browser/song-browser.controller.spec.ts b/packages/backend/src/song-browser/song-browser.controller.spec.ts index d31f48d1..47126ae8 100644 --- a/packages/backend/src/song-browser/song-browser.controller.spec.ts +++ b/packages/backend/src/song-browser/song-browser.controller.spec.ts @@ -1,8 +1,5 @@ +import { FeaturedSongsDto, PageQueryDTO, SongPreviewDto } from '@nbw/database'; import { Test, TestingModule } from '@nestjs/testing'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { FeaturedSongsDto } from '@shared/validation/song/dto/FeaturedSongsDto.dtc'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; - import { SongBrowserController } from './song-browser.controller'; import { SongBrowserService } from './song-browser.service'; diff --git a/packages/backend/src/song-browser/song-browser.controller.ts b/packages/backend/src/song-browser/song-browser.controller.ts index 5950e7e7..63ed92bf 100644 --- a/packages/backend/src/song-browser/song-browser.controller.ts +++ b/packages/backend/src/song-browser/song-browser.controller.ts @@ -1,3 +1,4 @@ +import { FeaturedSongsDto, PageQueryDTO, SongPreviewDto } from '@nbw/database'; import { BadRequestException, Controller, @@ -6,10 +7,6 @@ import { Query, } from '@nestjs/common'; import { ApiOperation, ApiTags } from '@nestjs/swagger'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { FeaturedSongsDto } from '@shared/validation/song/dto/FeaturedSongsDto.dtc'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; - import { SongBrowserService } from './song-browser.service'; @Controller('song-browser') diff --git a/packages/backend/src/song-browser/song-browser.service.spec.ts b/packages/backend/src/song-browser/song-browser.service.spec.ts index 94462d30..b7dd9735 100644 --- a/packages/backend/src/song-browser/song-browser.service.spec.ts +++ b/packages/backend/src/song-browser/song-browser.service.spec.ts @@ -1,12 +1,8 @@ +import { PageQueryDTO, SongPreviewDto, SongWithUser } from '@nbw/database'; import { HttpException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; - import { SongService } from '@server/song/song.service'; - import { SongBrowserService } from './song-browser.service'; -import { SongWithUser } from '../song/entity/song.entity'; const mockSongService = { getSongsForTimespan: jest.fn(), diff --git a/packages/backend/src/song-browser/song-browser.service.ts b/packages/backend/src/song-browser/song-browser.service.ts index c0aa4d6b..10ab2fc2 100644 --- a/packages/backend/src/song-browser/song-browser.service.ts +++ b/packages/backend/src/song-browser/song-browser.service.ts @@ -1,14 +1,14 @@ +import { + BROWSER_SONGS, + FeaturedSongsDto, + PageQueryDTO, + SongPreviewDto, + SongWithUser, + TimespanType, +} from '@nbw/database'; import { HttpException, HttpStatus, Inject, Injectable } from '@nestjs/common'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { BROWSER_SONGS } from '@shared/validation/song/constants'; -import { FeaturedSongsDto } from '@shared/validation/song/dto/FeaturedSongsDto.dtc'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; -import { TimespanType } from '@shared/validation/song/dto/types'; - import { SongService } from '@server/song/song.service'; -import { SongWithUser } from '../song/entity/song.entity'; - @Injectable() export class SongBrowserService { constructor( diff --git a/packages/backend/src/song/song-upload/song-upload.service.spec.ts b/packages/backend/src/song/song-upload/song-upload.service.spec.ts index a4b74621..7c65f907 100644 --- a/packages/backend/src/song/song-upload/song-upload.service.spec.ts +++ b/packages/backend/src/song/song-upload/song-upload.service.spec.ts @@ -1,20 +1,21 @@ import { Instrument, Layer, Note, Song } from '@encode42/nbs.js'; +import type { UserDocument } from '@nbw/database'; +import { + SongDocument, + Song as SongEntity, + ThumbnailData, + UploadSongDto, +} from '@nbw/database'; import { HttpException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; -import { ThumbnailData } from '@shared/validation/song/dto/ThumbnailData.dto'; -import { UploadSongDto } from '@shared/validation/song/dto/UploadSongDto.dto'; -import { beforeEach, describe, expect, it, jest, mock, spyOn } from 'bun:test'; -import { Types } from 'mongoose'; - import { FileService } from '@server/file/file.service'; -import type { UserDocument } from '@server/user/entity/user.entity'; import { UserService } from '@server/user/user.service'; - +import { beforeEach, describe, expect, it, jest, mock, spyOn } from 'bun:test'; +import { Types } from 'mongoose'; import { SongUploadService } from './song-upload.service'; -import { SongDocument, Song as SongEntity } from '../entity/song.entity'; // mock drawToImage function -mock.module('@shared/features/thumbnail', () => ({ +mock.module('@nbw/thumbnail', () => ({ drawToImage: jest.fn().mockResolvedValue(Buffer.from('test-image-buffer')), })); diff --git a/packages/backend/src/song/song-upload/song-upload.service.ts b/packages/backend/src/song/song-upload/song-upload.service.ts index 53fd4127..d449809d 100644 --- a/packages/backend/src/song/song-upload/song-upload.service.ts +++ b/packages/backend/src/song/song-upload/song-upload.service.ts @@ -1,4 +1,19 @@ import { Song, fromArrayBuffer, toArrayBuffer } from '@encode42/nbs.js'; +import { + SongDocument, + Song as SongEntity, + SongStats, + ThumbnailData, + UploadSongDto, + UserDocument, +} from '@nbw/database'; +import { + NoteQuadTree, + SongStatsGenerator, + injectSongFileMetadata, + obfuscateAndPackSong, +} from '@nbw/song'; +import { drawToImage } from '@nbw/thumbnail'; import { HttpException, HttpStatus, @@ -6,19 +21,9 @@ import { Injectable, Logger, } from '@nestjs/common'; -import { injectSongFileMetadata } from '@nbw/song'; -import { NoteQuadTree } from '@nbw/song'; -import { obfuscateAndPackSong } from '@nbw/song'; -import { SongStatsGenerator } from '@nbw/song'; -import { drawToImage } from '@nbw/thumbnail'; -import { SongStats, ThumbnailData, UploadSongDto } from '@nbw/database'; -import { Types } from 'mongoose'; - import { FileService } from '@server/file/file.service'; -import type { UserDocument } from '@server/user/entity/user.entity'; import { UserService } from '@server/user/user.service'; - -import { SongDocument, Song as SongEntity } from '../entity/song.entity'; +import { Types } from 'mongoose'; import { generateSongId, removeExtraSpaces } from '../song.util'; @Injectable() diff --git a/packages/backend/src/song/song-webhook/song-webhook.service.ts b/packages/backend/src/song/song-webhook/song-webhook.service.ts index 8d86d03d..e25a68b0 100644 --- a/packages/backend/src/song/song-webhook/song-webhook.service.ts +++ b/packages/backend/src/song/song-webhook/song-webhook.service.ts @@ -2,7 +2,7 @@ import { Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; -import { Song as SongEntity, SongWithUser } from '../entity/song.entity'; +import { Song as SongEntity, SongWithUser } from '@nbw/database'; import { getUploadDiscordEmbed } from '../song.util'; @Injectable() diff --git a/packages/backend/src/song/song.module.ts b/packages/backend/src/song/song.module.ts index 70ba225e..9bd60afd 100644 --- a/packages/backend/src/song/song.module.ts +++ b/packages/backend/src/song/song.module.ts @@ -1,17 +1,15 @@ +import { Song, SongSchema } from '@nbw/database'; import { Module } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { MongooseModule } from '@nestjs/mongoose'; - import { AuthModule } from '@server/auth/auth.module'; import { FileModule } from '@server/file/file.module'; import { UserModule } from '@server/user/user.module'; - import { MySongsController } from './my-songs/my-songs.controller'; import { SongUploadService } from './song-upload/song-upload.service'; import { SongWebhookService } from './song-webhook/song-webhook.service'; import { SongController } from './song.controller'; import { SongService } from './song.service'; -import Song, { SongSchema } from '@nbw/database'; @Module({ imports: [ diff --git a/packages/backend/src/song/song.service.ts b/packages/backend/src/song/song.service.ts index a73664c6..ebcc6b48 100644 --- a/packages/backend/src/song/song.service.ts +++ b/packages/backend/src/song/song.service.ts @@ -1,3 +1,12 @@ +import { + BROWSER_SONGS, + PageQueryDTO, + SongPageDto, + SongPreviewDto, + SongViewDto, + UploadSongDto, + UploadSongResponseDto, +} from '@nbw/database'; import { HttpException, HttpStatus, @@ -6,19 +15,11 @@ import { Logger, } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { BROWSER_SONGS } from '@shared/validation/song/constants'; -import { SongPageDto } from '@shared/validation/song/dto/SongPageDto'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; -import { SongViewDto } from '@shared/validation/song/dto/SongView.dto'; -import { UploadSongDto } from '@shared/validation/song/dto/UploadSongDto.dto'; -import { UploadSongResponseDto } from '@shared/validation/song/dto/UploadSongResponseDto.dto'; import { Model } from 'mongoose'; +import type { UserDocument } from '@nbw/database'; +import { Song as SongEntity, SongWithUser } from '@nbw/database'; import { FileService } from '@server/file/file.service'; -import type { UserDocument } from '@server/user/entity/user.entity'; - -import { Song as SongEntity, SongWithUser } from './entity/song.entity'; import { SongUploadService } from './song-upload/song-upload.service'; import { SongWebhookService } from './song-webhook/song-webhook.service'; import { removeExtraSpaces } from './song.util'; diff --git a/packages/backend/src/song/song.util.ts b/packages/backend/src/song/song.util.ts index 71013710..de401a82 100644 --- a/packages/backend/src/song/song.util.ts +++ b/packages/backend/src/song/song.util.ts @@ -1,8 +1,6 @@ -import { UploadConst } from '@shared/validation/song/constants'; +import { SongWithUser, UploadConst } from '@nbw/database'; import { customAlphabet } from 'nanoid'; -import { SongWithUser } from './entity/song.entity'; - // TODO: Move to shared export const formatDuration = (totalSeconds: number) => { const minutes = Math.floor(Math.ceil(totalSeconds) / 60); diff --git a/packages/backend/src/user/dto/user.dto.ts b/packages/backend/src/user/dto/user.dto.ts deleted file mode 100644 index a611c20f..00000000 --- a/packages/backend/src/user/dto/user.dto.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { User } from '../entity/user.entity'; - -export class UserDto { - username: string; - publicName: string; - email: string; - static fromEntity(user: User): UserDto { - const userDto: UserDto = { - username: user.username, - publicName: user.publicName, - email: user.email, - }; - - return userDto; - } -} diff --git a/packages/backend/src/user/user.controller.spec.ts b/packages/backend/src/user/user.controller.spec.ts index 52cc71e5..45cf42af 100644 --- a/packages/backend/src/user/user.controller.spec.ts +++ b/packages/backend/src/user/user.controller.spec.ts @@ -1,9 +1,7 @@ +import type { UserDocument } from '@nbw/database'; +import { GetUser, PageQueryDTO } from '@nbw/database'; import { HttpException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { GetUser } from '@shared/validation/user/dto/GetUser.dto'; - -import type { UserDocument } from './entity/user.entity'; import { UserController } from './user.controller'; import { UserService } from './user.service'; diff --git a/packages/backend/src/user/user.controller.ts b/packages/backend/src/user/user.controller.ts index 5780149f..51e1318e 100644 --- a/packages/backend/src/user/user.controller.ts +++ b/packages/backend/src/user/user.controller.ts @@ -1,12 +1,8 @@ +import type { UserDocument } from '@nbw/database'; +import { GetUser, PageQueryDTO, UpdateUsernameDto } from '@nbw/database'; import { Body, Controller, Get, Inject, Patch, Query } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { GetUser } from '@shared/validation/user/dto/GetUser.dto'; -import { UpdateUsernameDto } from '@shared/validation/user/dto/UpdateUsername.dto'; - import { GetRequestToken, validateUser } from '@server/lib/GetRequestUser'; - -import type { UserDocument } from './entity/user.entity'; import { UserService } from './user.service'; @Controller('user') diff --git a/packages/backend/src/user/user.module.ts b/packages/backend/src/user/user.module.ts index d6a89fb9..0add775f 100644 --- a/packages/backend/src/user/user.module.ts +++ b/packages/backend/src/user/user.module.ts @@ -1,7 +1,6 @@ +import { User, UserSchema } from '@nbw/database'; import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; - -import { User, UserSchema } from './entity/user.entity'; import { UserController } from './user.controller'; import { UserService } from './user.service'; diff --git a/packages/backend/src/user/user.service.spec.ts b/packages/backend/src/user/user.service.spec.ts index 8477b011..8779cddc 100644 --- a/packages/backend/src/user/user.service.spec.ts +++ b/packages/backend/src/user/user.service.spec.ts @@ -1,12 +1,14 @@ +import { + CreateUser, + GetUser, + PageQueryDTO, + User, + UserDocument, +} from '@nbw/database'; import { HttpException, HttpStatus } from '@nestjs/common'; import { getModelToken } from '@nestjs/mongoose'; import { Test, TestingModule } from '@nestjs/testing'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { CreateUser } from '@shared/validation/user/dto/CreateUser.dto'; -import { GetUser } from '@shared/validation/user/dto/GetUser.dto'; import { Model } from 'mongoose'; - -import { User, UserDocument } from './entity/user.entity'; import { UserService } from './user.service'; const mockUserModel = { diff --git a/packages/backend/src/user/user.service.ts b/packages/backend/src/user/user.service.ts index 412da11b..60da3521 100644 --- a/packages/backend/src/user/user.service.ts +++ b/packages/backend/src/user/user.service.ts @@ -1,15 +1,17 @@ +import { + CreateUser, + GetUser, + PageQueryDTO, + UpdateUsernameDto, + User, + UserDocument, + UserDto, +} from '@nbw/database'; import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; -import { PageQueryDTO } from '@shared/validation/common/dto/PageQuery.dto'; -import { CreateUser } from '@shared/validation/user/dto/CreateUser.dto'; -import { GetUser } from '@shared/validation/user/dto/GetUser.dto'; -import { UpdateUsernameDto } from '@shared/validation/user/dto/UpdateUsername.dto'; import { validate } from 'class-validator'; import { Model } from 'mongoose'; -import { UserDto } from './dto/user.dto'; -import { User, UserDocument } from './entity/user.entity'; - @Injectable() export class UserService { constructor(@InjectModel(User.name) private userModel: Model) {} From bee7b71168919378ee47001a2015bcef0534183e Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 20:43:18 -0300 Subject: [PATCH 07/17] feat: implement offscreen drawing of notes and canvas swapping functionality --- packages/thumbnail/src/index.ts | 145 ++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) diff --git a/packages/thumbnail/src/index.ts b/packages/thumbnail/src/index.ts index ea31e4b4..1417a48b 100644 --- a/packages/thumbnail/src/index.ts +++ b/packages/thumbnail/src/index.ts @@ -2,3 +2,148 @@ export * from './canvasFactory'; export * from './colors'; export * from './types'; export * from './utils'; +import type { Note } from '@nbw/song'; +import { + createCanvas, + noteBlockImage, + saveToImage, + useFont, +} from './canvasFactory'; +import type { Canvas, DrawParams } from './types'; +import { getKeyText, instrumentColors, isDarkColor, tintImage } from './utils'; + +useFont(); + +export const swap = async (src: Canvas, dst: Canvas) => { + /** + * Run a `drawFunction` that returns a canvas and draw it to the passed `canvas`. + * + * @param drawFunction - Function that draws to a canvas and returns it + * @param canvas - Canvas to draw the output of `drawFunction` to + * + * @returns Nothing + */ + // Get canvas context + const ctx = dst.getContext('2d'); + + if (!ctx) { + throw new Error('Could not get canvas context'); + } + + // Swap the canvas + ctx.drawImage(src, 0, 0); +}; + +export const drawNotesOffscreen = async ({ + notes, + startTick, + startLayer, + zoomLevel, + backgroundColor, + canvasWidth, + //canvasHeight, + imgWidth = 1280, + imgHeight = 768, +}: DrawParams) => { + // Create new offscreen canvas + const canvas = createCanvas(imgWidth, imgHeight); + const ctx = canvas.getContext('2d'); + + if (!ctx) { + throw new Error('Could not get offscreen canvas context'); + } + + // Disable anti-aliasing + ctx.imageSmoothingEnabled = false; + + // Calculate effective zoom level + const zoomFactor = 2 ** (zoomLevel - 1); + + // Set scale to draw image at correct thumbnail size + if (canvasWidth !== undefined) { + const scale = canvasWidth / imgWidth; + ctx.scale(scale, scale); + } + + const width = canvas.width; + const height = canvas.height; + + ctx.clearRect(0, 0, width, height); + + // Draw background + ctx.fillStyle = backgroundColor; + ctx.fillRect(0, 0, width, height); + + // Check if the background color is dark or light + const isDark = isDarkColor(backgroundColor, 90); + + if (isDark) { + ctx.fillStyle = 'rgba(255, 255, 255, 0.15)'; + } else { + ctx.fillStyle = 'rgba(0, 0, 0, 0.4)'; + } + + // Draw vertical lines + for (let i = 0; i < width; i += 8 * zoomFactor) { + ctx.fillRect(i, 0, 1, height); + } + + const loadedNoteBlockImage = await noteBlockImage; + + // Iterate through note blocks and draw them + const endTick = startTick + width / (zoomFactor * 8) - 1; + const endLayer = startLayer + height / (zoomFactor * 8) - 1; + + const visibleNotes = notes.getNotesInRect({ + x1: startTick, + y1: startLayer, + x2: endTick, + y2: endLayer, + }); + + visibleNotes.forEach(async (note: Note) => { + // Calculate position + const x = (note.tick - startTick) * 8 * zoomFactor; + const y = (note.layer - startLayer) * 8 * zoomFactor; + const overlayColor = instrumentColors[note.instrument % 16] ?? '#FF00FF'; + + if (!loadedNoteBlockImage) { + throw new Error('Note block image not loaded'); + } + + // Draw the note block + ctx.drawImage( + tintImage(loadedNoteBlockImage, overlayColor), + x, + y, + 8 * zoomFactor, + 8 * zoomFactor, + ); + + // Draw the key text + const keyText = getKeyText(note.key); + ctx.fillStyle = '#ffffff'; + ctx.font = `${3 * zoomFactor}px Lato`; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillText(keyText, x + 4 * zoomFactor, y + 4 * zoomFactor); + }); + + return canvas; +}; + +export const drawToImage = async (params: DrawParams): Promise => { + let canvas; + const { imgWidth, imgHeight } = params; + + if (!canvas) { + canvas = createCanvas(imgWidth, imgHeight); + } + + const output = await drawNotesOffscreen(params); + const byteArray = await saveToImage(output); + + // Convert to Buffer + const buffer = Buffer.from(byteArray); + return buffer; +}; From baa803cf3ac5ef15c2c0a1d4785c57be2b5da9ac Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 20:43:25 -0300 Subject: [PATCH 08/17] refactor: update imports to use centralized module paths and clean up unused imports across the frontend --- apps/frontend/mdx-components.tsx | 2 +- .../src/app/(content)/(info)/about/about.mdx | 2 +- .../src/app/(content)/(info)/about/page.tsx | 4 ++-- .../src/app/(content)/(info)/blog/[id]/page.tsx | 4 ++-- .../src/app/(content)/(info)/blog/page.tsx | 4 ++-- .../src/app/(content)/(info)/contact/page.tsx | 2 +- .../src/app/(content)/(info)/help/[id]/page.tsx | 4 ++-- .../src/app/(content)/(info)/help/page.tsx | 4 ++-- apps/frontend/src/app/(content)/layout.tsx | 4 ++-- apps/frontend/src/app/(content)/my-songs/page.tsx | 4 ++-- apps/frontend/src/app/(content)/page.tsx | 11 ++++------- .../src/app/(content)/song/[id]/edit/page.tsx | 4 ++-- .../frontend/src/app/(content)/song/[id]/page.tsx | 6 +++--- apps/frontend/src/app/(content)/upload/layout.tsx | 2 +- apps/frontend/src/app/(content)/upload/page.tsx | 7 ++----- .../src/app/(content)/user/[id]/page_disable.tsx | 4 ++-- .../app/(external)/(auth)/login/email/page.tsx | 4 ++-- .../src/app/(external)/(auth)/login/page.tsx | 4 ++-- .../src/app/(external)/(auth)/logout/page.tsx | 2 +- .../app/(external)/(legal)/guidelines/page.tsx | 2 +- .../src/app/(external)/(legal)/layout.tsx | 2 +- .../src/app/(external)/(legal)/privacy/page.tsx | 2 +- .../src/app/(external)/(legal)/terms/page.tsx | 2 +- apps/frontend/src/app/(external)/layout.tsx | 6 +++--- apps/frontend/src/global.d.ts | 2 +- .../modules/auth/components/client/LoginFrom.tsx | 2 +- .../src/modules/auth/components/loginPage.tsx | 2 +- .../src/modules/browse/components/SongCard.tsx | 7 ++----- .../browse/components/client/CategoryButton.tsx | 6 ++---- .../browse/components/client/TimespanButton.tsx | 2 +- .../client/context/FeaturedSongs.context.tsx | 2 +- .../client/context/HomePage.context.tsx | 5 +---- .../client/context/RecentSongs.context.tsx | 4 ++-- .../modules/my-songs/components/MySongsPage.tsx | 9 +++------ .../components/client/DeleteConfirmDialog.tsx | 2 +- .../my-songs/components/client/MySongsButtons.tsx | 4 ++-- .../my-songs/components/client/MySongsTable.tsx | 6 +++--- .../my-songs/components/client/SongRow.tsx | 6 +++--- .../components/client/context/MySongs.context.tsx | 8 ++++---- .../shared/components/NoteBlockWorldLogo.tsx | 2 +- .../shared/components/client/FormElements.tsx | 4 ++-- .../shared/components/client/UserMenuButton.tsx | 2 +- .../shared/components/client/ads/AdSlots.tsx | 2 +- .../modules/shared/components/layout/BlockTab.tsx | 2 +- .../shared/components/layout/CopyrightFooter.tsx | 2 +- .../modules/shared/components/layout/Header.tsx | 5 +---- .../modules/shared/components/layout/NavLinks.tsx | 2 +- .../shared/components/layout/RandomSongButton.tsx | 4 ++-- .../modules/shared/components/layout/UserMenu.tsx | 6 +++--- .../modules/shared/components/layout/popover.tsx | 2 +- .../src/modules/shared/components/tooltip.tsx | 2 +- .../song-edit/components/client/EditSongPage.tsx | 12 ++++++------ .../song-edit/components/client/SongEditForm.tsx | 6 +++--- .../client/context/EditSong.context.tsx | 10 +++++----- .../components/client/SongUploadForm.tsx | 2 +- .../components/client/UploadCompleteModal.tsx | 2 +- .../components/client/UploadSongPage.tsx | 2 +- .../client/context/UploadSong.context.tsx | 15 ++++++--------- .../src/modules/song/components/SongDetails.tsx | 6 +++--- .../src/modules/song/components/SongPage.tsx | 6 +++--- .../modules/song/components/SongPageButtons.tsx | 4 ++-- .../song/components/client/DownloadSongModal.tsx | 6 +++--- .../song/components/client/FileDisplay.tsx | 2 +- .../song/components/client/InstrumentPicker.tsx | 6 +++--- .../song/components/client/LicenseInfo.tsx | 4 ++-- .../modules/song/components/client/ShareModal.tsx | 2 +- .../modules/song/components/client/SongCanvas.tsx | 4 ++-- .../modules/song/components/client/SongForm.tsx | 8 ++++---- .../song/components/client/SongForm.zod.ts | 2 +- .../song/components/client/SongSelector.tsx | 2 +- .../song/components/client/SongThumbnailInput.tsx | 8 ++++---- .../song/components/client/ThumbnailRenderer.tsx | 4 ++-- .../src/modules/song/util/downloadSong.ts | 4 ++-- .../src/modules/user/features/song.util.ts | 2 +- apps/frontend/tsconfig.json | 7 ++++++- 75 files changed, 151 insertions(+), 169 deletions(-) diff --git a/apps/frontend/mdx-components.tsx b/apps/frontend/mdx-components.tsx index d30811c0..92af1be8 100644 --- a/apps/frontend/mdx-components.tsx +++ b/apps/frontend/mdx-components.tsx @@ -16,7 +16,7 @@ import { p, pre, ul, -} from '@web/src/modules/shared/components/CustomMarkdown'; +} from '@web/modules/shared/components/CustomMarkdown'; export function useMDXComponents(components: MDXComponents): MDXComponents { return { diff --git a/apps/frontend/src/app/(content)/(info)/about/about.mdx b/apps/frontend/src/app/(content)/(info)/about/about.mdx index 83cc491b..ac55f36c 100644 --- a/apps/frontend/src/app/(content)/(info)/about/about.mdx +++ b/apps/frontend/src/app/(content)/(info)/about/about.mdx @@ -3,7 +3,7 @@ import Image from 'next/image'; import { Team, TeamMemberCard, -} from '@web/src/modules/shared/components/TeamMemberCard'; +} from '@web/modules/shared/components/TeamMemberCard'; **Note Block World** is the largest public community centered around Minecraft note blocks, developed by the same folks who brought you [Note Block Studio](https://noteblock.studio/). It lets you discover, share and listen to note block music more easily than ever! diff --git a/apps/frontend/src/app/(content)/(info)/about/page.tsx b/apps/frontend/src/app/(content)/(info)/about/page.tsx index 81cc02bb..37916161 100644 --- a/apps/frontend/src/app/(content)/(info)/about/page.tsx +++ b/apps/frontend/src/app/(content)/(info)/about/page.tsx @@ -1,7 +1,7 @@ import type { Metadata } from 'next'; -import BackButton from '@web/src/modules/shared/components/client/BackButton'; -import { NoteBlockWorldLogo } from '@web/src/modules/shared/components/NoteBlockWorldLogo'; +import BackButton from '@web/modules/shared/components/client/BackButton'; +import { NoteBlockWorldLogo } from '@web/modules/shared/components/NoteBlockWorldLogo'; import About from './about.mdx'; diff --git a/apps/frontend/src/app/(content)/(info)/blog/[id]/page.tsx b/apps/frontend/src/app/(content)/(info)/blog/[id]/page.tsx index 9876b8c1..c0d63d05 100644 --- a/apps/frontend/src/app/(content)/(info)/blog/[id]/page.tsx +++ b/apps/frontend/src/app/(content)/(info)/blog/[id]/page.tsx @@ -3,8 +3,8 @@ import Image from 'next/image'; import Link from 'next/link'; import { notFound } from 'next/navigation'; -import { PostType, getPostData } from '@web/src/lib/posts'; -import { CustomMarkdown } from '@web/src/modules/shared/components/CustomMarkdown'; +import { PostType, getPostData } from '@web/lib/posts'; +import { CustomMarkdown } from '@web/modules/shared/components/CustomMarkdown'; type BlogPageProps = { params: { id: string }; diff --git a/apps/frontend/src/app/(content)/(info)/blog/page.tsx b/apps/frontend/src/app/(content)/(info)/blog/page.tsx index 47f890f0..bcadb92c 100644 --- a/apps/frontend/src/app/(content)/(info)/blog/page.tsx +++ b/apps/frontend/src/app/(content)/(info)/blog/page.tsx @@ -4,8 +4,8 @@ import { Metadata } from 'next'; import Image from 'next/image'; import Link from 'next/link'; -import { getSortedPostsData } from '@web/src/lib/posts'; -import type { PostType } from '@web/src/lib/posts'; +import { getSortedPostsData } from '@web/lib/posts'; +import type { PostType } from '@web/lib/posts'; export const metadata: Metadata = { title: 'Blog', diff --git a/apps/frontend/src/app/(content)/(info)/contact/page.tsx b/apps/frontend/src/app/(content)/(info)/contact/page.tsx index c6fc602e..ebd20a1a 100644 --- a/apps/frontend/src/app/(content)/(info)/contact/page.tsx +++ b/apps/frontend/src/app/(content)/(info)/contact/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from 'next'; -import BackButton from '@web/src/modules/shared/components/client/BackButton'; +import BackButton from '@web/modules/shared/components/client/BackButton'; import Contact from './contact.mdx'; diff --git a/apps/frontend/src/app/(content)/(info)/help/[id]/page.tsx b/apps/frontend/src/app/(content)/(info)/help/[id]/page.tsx index a47ec2a9..2507590c 100644 --- a/apps/frontend/src/app/(content)/(info)/help/[id]/page.tsx +++ b/apps/frontend/src/app/(content)/(info)/help/[id]/page.tsx @@ -3,8 +3,8 @@ import Image from 'next/image'; import Link from 'next/link'; import { notFound } from 'next/navigation'; -import { PostType, getPostData } from '@web/src/lib/posts'; -import { CustomMarkdown } from '@web/src/modules/shared/components/CustomMarkdown'; +import { PostType, getPostData } from '@web/lib/posts'; +import { CustomMarkdown } from '@web/modules/shared/components/CustomMarkdown'; type HelpPageProps = { params: { id: string }; diff --git a/apps/frontend/src/app/(content)/(info)/help/page.tsx b/apps/frontend/src/app/(content)/(info)/help/page.tsx index 6f075260..f0984c24 100644 --- a/apps/frontend/src/app/(content)/(info)/help/page.tsx +++ b/apps/frontend/src/app/(content)/(info)/help/page.tsx @@ -4,8 +4,8 @@ import { Metadata } from 'next'; import Image from 'next/image'; import Link from 'next/link'; -import { getSortedPostsData } from '@web/src/lib/posts'; -import type { PostType } from '@web/src/lib/posts'; +import { getSortedPostsData } from '@web/lib/posts'; +import type { PostType } from '@web/lib/posts'; export const metadata: Metadata = { title: 'Help Center', diff --git a/apps/frontend/src/app/(content)/layout.tsx b/apps/frontend/src/app/(content)/layout.tsx index f5b0db72..223b1086 100644 --- a/apps/frontend/src/app/(content)/layout.tsx +++ b/apps/frontend/src/app/(content)/layout.tsx @@ -1,5 +1,5 @@ -import '@web/src/app/globals.css'; -import NavbarLayout from '@web/src/modules/shared/components/layout/NavbarLayout'; +import '@web/app/globals.css'; +import NavbarLayout from '@web/modules/shared/components/layout/NavbarLayout'; export default async function ContentLayout({ children, diff --git a/apps/frontend/src/app/(content)/my-songs/page.tsx b/apps/frontend/src/app/(content)/my-songs/page.tsx index fb87b22a..110df923 100644 --- a/apps/frontend/src/app/(content)/my-songs/page.tsx +++ b/apps/frontend/src/app/(content)/my-songs/page.tsx @@ -1,8 +1,8 @@ import { Metadata } from 'next'; import { redirect } from 'next/navigation'; -import { checkLogin } from '@web/src/modules/auth/features/auth.utils'; -import Page from '@web/src/modules/my-songs/components/MySongsPage'; +import { checkLogin } from '@web/modules/auth/features/auth.utils'; +import Page from '@web/modules/my-songs/components/MySongsPage'; export const metadata: Metadata = { title: 'My songs', diff --git a/apps/frontend/src/app/(content)/page.tsx b/apps/frontend/src/app/(content)/page.tsx index a4d1a03e..ac9ee47c 100644 --- a/apps/frontend/src/app/(content)/page.tsx +++ b/apps/frontend/src/app/(content)/page.tsx @@ -1,12 +1,9 @@ -import { - FeaturedSongsDtoType, - SongPreviewDtoType, -} from '@shared/validation/song/dto/types'; +import { FeaturedSongsDtoType, SongPreviewDtoType } from '@nbw/database'; import { Metadata } from 'next'; -import axiosInstance from '@web/src/lib/axios'; -import { HomePageProvider } from '@web/src/modules/browse/components/client/context/HomePage.context'; -import { HomePageComponent } from '@web/src/modules/browse/components/HomePageComponent'; +import axiosInstance from '@web/lib/axios'; +import { HomePageProvider } from '@web/modules/browse/components/client/context/HomePage.context'; +import { HomePageComponent } from '@web/modules/browse/components/HomePageComponent'; async function fetchRecentSongs() { try { diff --git a/apps/frontend/src/app/(content)/song/[id]/edit/page.tsx b/apps/frontend/src/app/(content)/song/[id]/edit/page.tsx index 6ffb5bf6..8af0f5de 100644 --- a/apps/frontend/src/app/(content)/song/[id]/edit/page.tsx +++ b/apps/frontend/src/app/(content)/song/[id]/edit/page.tsx @@ -1,7 +1,7 @@ import { redirect } from 'next/navigation'; -import { checkLogin } from '@web/src/modules/auth/features/auth.utils'; -import { EditSongPage } from '@web/src/modules/song-edit/components/client/EditSongPage'; +import { checkLogin } from '@web/modules/auth/features/auth.utils'; +import { EditSongPage } from '@web/modules/song-edit/components/client/EditSongPage'; async function Page({ params }: { params: { id: string } }) { const isLogged = await checkLogin(); diff --git a/apps/frontend/src/app/(content)/song/[id]/page.tsx b/apps/frontend/src/app/(content)/song/[id]/page.tsx index fc05b602..198a9c96 100644 --- a/apps/frontend/src/app/(content)/song/[id]/page.tsx +++ b/apps/frontend/src/app/(content)/song/[id]/page.tsx @@ -1,9 +1,9 @@ -import { SongViewDtoType } from '@shared/validation/song/dto/types'; +import { SongViewDtoType } from '@nbw/database'; import type { Metadata } from 'next'; import { cookies } from 'next/headers'; -import axios from '@web/src/lib/axios'; -import { SongPage } from '@web/src/modules/song/components/SongPage'; +import axios from '@web/lib/axios'; +import { SongPage } from '@web/modules/song/components/SongPage'; interface SongPage { params: { diff --git a/apps/frontend/src/app/(content)/upload/layout.tsx b/apps/frontend/src/app/(content)/upload/layout.tsx index 25113b34..39086489 100644 --- a/apps/frontend/src/app/(content)/upload/layout.tsx +++ b/apps/frontend/src/app/(content)/upload/layout.tsx @@ -1,4 +1,4 @@ -import '@web/src/app/enableRecaptchaBadge.css'; +import '@web/app/enableRecaptchaBadge.css'; export default async function UploadLayout({ children, diff --git a/apps/frontend/src/app/(content)/upload/page.tsx b/apps/frontend/src/app/(content)/upload/page.tsx index 84a78f41..bccf0c9d 100644 --- a/apps/frontend/src/app/(content)/upload/page.tsx +++ b/apps/frontend/src/app/(content)/upload/page.tsx @@ -1,11 +1,8 @@ import { Metadata } from 'next'; import { redirect } from 'next/navigation'; -import { - checkLogin, - getUserData, -} from '@web/src/modules/auth/features/auth.utils'; -import { UploadSongPage } from '@web/src/modules/song-upload/components/client/UploadSongPage'; +import { checkLogin, getUserData } from '@web/modules/auth/features/auth.utils'; +import { UploadSongPage } from '@web/modules/song-upload/components/client/UploadSongPage'; export const metadata: Metadata = { title: 'Upload song', diff --git a/apps/frontend/src/app/(content)/user/[id]/page_disable.tsx b/apps/frontend/src/app/(content)/user/[id]/page_disable.tsx index d3680b43..01ca89c7 100644 --- a/apps/frontend/src/app/(content)/user/[id]/page_disable.tsx +++ b/apps/frontend/src/app/(content)/user/[id]/page_disable.tsx @@ -1,5 +1,5 @@ -import UserProfile from '@web/src/modules/user/components/UserProfile'; -import { getUserProfileData } from '@web/src/modules/user/features/user.util'; +import UserProfile from '@web/modules/user/components/UserProfile'; +import { getUserProfileData } from '@web/modules/user/features/user.util'; import Layout from '../../layout'; diff --git a/apps/frontend/src/app/(external)/(auth)/login/email/page.tsx b/apps/frontend/src/app/(external)/(auth)/login/email/page.tsx index aae7d856..be8b80b9 100644 --- a/apps/frontend/src/app/(external)/(auth)/login/email/page.tsx +++ b/apps/frontend/src/app/(external)/(auth)/login/email/page.tsx @@ -1,8 +1,8 @@ import { Metadata } from 'next'; import { redirect } from 'next/navigation'; -import { LoginWithEmailPage } from '@web/src/modules/auth/components/loginWithEmailPage'; -import { checkLogin } from '@web/src/modules/auth/features/auth.utils'; +import { LoginWithEmailPage } from '@web/modules/auth/components/loginWithEmailPage'; +import { checkLogin } from '@web/modules/auth/features/auth.utils'; export const metadata: Metadata = { title: 'Sign in', diff --git a/apps/frontend/src/app/(external)/(auth)/login/page.tsx b/apps/frontend/src/app/(external)/(auth)/login/page.tsx index 388b983e..b8c1de65 100644 --- a/apps/frontend/src/app/(external)/(auth)/login/page.tsx +++ b/apps/frontend/src/app/(external)/(auth)/login/page.tsx @@ -1,8 +1,8 @@ import { Metadata } from 'next'; import { redirect } from 'next/navigation'; -import { LoginPage } from '@web/src/modules/auth/components/loginPage'; -import { checkLogin } from '@web/src/modules/auth/features/auth.utils'; +import { LoginPage } from '@web/modules/auth/components/loginPage'; +import { checkLogin } from '@web/modules/auth/features/auth.utils'; export const metadata: Metadata = { title: 'Sign in', diff --git a/apps/frontend/src/app/(external)/(auth)/logout/page.tsx b/apps/frontend/src/app/(external)/(auth)/logout/page.tsx index cca28be2..f69f55f3 100644 --- a/apps/frontend/src/app/(external)/(auth)/logout/page.tsx +++ b/apps/frontend/src/app/(external)/(auth)/logout/page.tsx @@ -2,7 +2,7 @@ import { toast } from 'react-hot-toast'; -import { useSignOut } from '@web/src/modules/auth/components/client/login.util'; +import { useSignOut } from '@web/modules/auth/components/client/login.util'; function Page() { useSignOut(); diff --git a/apps/frontend/src/app/(external)/(legal)/guidelines/page.tsx b/apps/frontend/src/app/(external)/(legal)/guidelines/page.tsx index 03f3cf45..5ba331fc 100644 --- a/apps/frontend/src/app/(external)/(legal)/guidelines/page.tsx +++ b/apps/frontend/src/app/(external)/(legal)/guidelines/page.tsx @@ -3,7 +3,7 @@ import path from 'path'; import { Metadata } from 'next'; -import { CustomMarkdown } from '@web/src/modules/shared/components/CustomMarkdown'; +import { CustomMarkdown } from '@web/modules/shared/components/CustomMarkdown'; export const metadata: Metadata = { title: 'Community Guidelines', diff --git a/apps/frontend/src/app/(external)/(legal)/layout.tsx b/apps/frontend/src/app/(external)/(legal)/layout.tsx index 1950f07e..5a8dd0dd 100644 --- a/apps/frontend/src/app/(external)/(legal)/layout.tsx +++ b/apps/frontend/src/app/(external)/(legal)/layout.tsx @@ -1,3 +1,3 @@ -import DocumentLayout from '@web/src/modules/shared/components/layout/DocumentLayout'; +import DocumentLayout from '@web/modules/shared/components/layout/DocumentLayout'; export default DocumentLayout; diff --git a/apps/frontend/src/app/(external)/(legal)/privacy/page.tsx b/apps/frontend/src/app/(external)/(legal)/privacy/page.tsx index 741525b7..4ef11c59 100644 --- a/apps/frontend/src/app/(external)/(legal)/privacy/page.tsx +++ b/apps/frontend/src/app/(external)/(legal)/privacy/page.tsx @@ -3,7 +3,7 @@ import path from 'path'; import { Metadata } from 'next'; -import { CustomMarkdown } from '@web/src/modules/shared/components/CustomMarkdown'; +import { CustomMarkdown } from '@web/modules/shared/components/CustomMarkdown'; export const metadata: Metadata = { title: 'Privacy Policy', diff --git a/apps/frontend/src/app/(external)/(legal)/terms/page.tsx b/apps/frontend/src/app/(external)/(legal)/terms/page.tsx index ffcf659a..40290108 100644 --- a/apps/frontend/src/app/(external)/(legal)/terms/page.tsx +++ b/apps/frontend/src/app/(external)/(legal)/terms/page.tsx @@ -3,7 +3,7 @@ import path from 'path'; import { Metadata } from 'next'; -import { CustomMarkdown } from '@web/src/modules/shared/components/CustomMarkdown'; +import { CustomMarkdown } from '@web/modules/shared/components/CustomMarkdown'; export const metadata: Metadata = { title: 'Terms of Service', diff --git a/apps/frontend/src/app/(external)/layout.tsx b/apps/frontend/src/app/(external)/layout.tsx index ab524295..aa9d1eb1 100644 --- a/apps/frontend/src/app/(external)/layout.tsx +++ b/apps/frontend/src/app/(external)/layout.tsx @@ -1,6 +1,6 @@ -import '@web/src/app/globals.css'; -import '@web/src/app/enableRecaptchaBadge.css'; -import '@web/src/app/hideScrollbar.css'; +import '@web/app/globals.css'; +import '@web/app/enableRecaptchaBadge.css'; +import '@web/app/hideScrollbar.css'; export default async function LoginLayout({ children, diff --git a/apps/frontend/src/global.d.ts b/apps/frontend/src/global.d.ts index a1b91970..55348abe 100644 --- a/apps/frontend/src/global.d.ts +++ b/apps/frontend/src/global.d.ts @@ -1,7 +1,7 @@ // https://stackoverflow.com/a/56984941/9045426 // https://stackoverflow.com/a/43523944/9045426 -import type { SoundListType } from '@shared/features/sounds'; +import type { SoundListType } from '@nbw/database'; interface Window { latestVersionSoundList: SoundListType; diff --git a/apps/frontend/src/modules/auth/components/client/LoginFrom.tsx b/apps/frontend/src/modules/auth/components/client/LoginFrom.tsx index 2bd36a90..ab4a701c 100644 --- a/apps/frontend/src/modules/auth/components/client/LoginFrom.tsx +++ b/apps/frontend/src/modules/auth/components/client/LoginFrom.tsx @@ -6,7 +6,7 @@ import { FC, useState } from 'react'; import { useForm } from 'react-hook-form'; import { toast } from 'react-hot-toast'; -import ClientAxios from '@web/src/lib/axios/ClientAxios'; +import ClientAxios from '@web/lib/axios/ClientAxios'; import { Input, diff --git a/apps/frontend/src/modules/auth/components/loginPage.tsx b/apps/frontend/src/modules/auth/components/loginPage.tsx index 1d03fb5f..5551d6d3 100644 --- a/apps/frontend/src/modules/auth/components/loginPage.tsx +++ b/apps/frontend/src/modules/auth/components/loginPage.tsx @@ -6,7 +6,7 @@ import { import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import Link from 'next/link'; -import { baseApiURL } from '@web/src/lib/axios'; +import { baseApiURL } from '@web/lib/axios'; import { CopyrightFooter } from '../../shared/components/layout/CopyrightFooter'; import { NoteBlockWorldLogo } from '../../shared/components/NoteBlockWorldLogo'; diff --git a/apps/frontend/src/modules/browse/components/SongCard.tsx b/apps/frontend/src/modules/browse/components/SongCard.tsx index ef5d4305..d5025023 100644 --- a/apps/frontend/src/modules/browse/components/SongCard.tsx +++ b/apps/frontend/src/modules/browse/components/SongCard.tsx @@ -2,14 +2,11 @@ import { faPlay } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { SongPreviewDtoType } from '@shared/validation/song/dto/types'; +import { SongPreviewDtoType } from '@nbw/database'; import Link from 'next/link'; import Skeleton from 'react-loading-skeleton'; -import { - formatDuration, - formatTimeAgo, -} from '@web/src/modules/shared/util/format'; +import { formatDuration, formatTimeAgo } from '@web/modules/shared/util/format'; import SongThumbnail from '../../shared/components/layout/SongThumbnail'; diff --git a/apps/frontend/src/modules/browse/components/client/CategoryButton.tsx b/apps/frontend/src/modules/browse/components/client/CategoryButton.tsx index b8ebb6c8..9dfe4156 100644 --- a/apps/frontend/src/modules/browse/components/client/CategoryButton.tsx +++ b/apps/frontend/src/modules/browse/components/client/CategoryButton.tsx @@ -1,7 +1,5 @@ 'use client'; - -import { UploadConst } from '@shared/validation/song/constants'; -import { CategoryType } from '@shared/validation/song/dto/types'; +import { CategoryType, UploadConst } from '@nbw/database'; import { Carousel, @@ -9,7 +7,7 @@ import { CarouselItem, CarouselNextSmall, CarouselPreviousSmall, -} from '@web/src/modules/shared/components/client/Carousel'; +} from '@web/modules/shared/components/client/Carousel'; import { useRecentSongsProvider } from './context/RecentSongs.context'; diff --git a/apps/frontend/src/modules/browse/components/client/TimespanButton.tsx b/apps/frontend/src/modules/browse/components/client/TimespanButton.tsx index 9e4403b7..bc50d568 100644 --- a/apps/frontend/src/modules/browse/components/client/TimespanButton.tsx +++ b/apps/frontend/src/modules/browse/components/client/TimespanButton.tsx @@ -4,7 +4,7 @@ import { Tooltip, TooltipContent, TooltipTrigger, -} from '@web/src/modules/shared/components/tooltip'; +} from '@web/modules/shared/components/tooltip'; import { useFeaturedSongsProvider } from './context/FeaturedSongs.context'; diff --git a/apps/frontend/src/modules/browse/components/client/context/FeaturedSongs.context.tsx b/apps/frontend/src/modules/browse/components/client/context/FeaturedSongs.context.tsx index 4e184326..8b32d8a1 100644 --- a/apps/frontend/src/modules/browse/components/client/context/FeaturedSongs.context.tsx +++ b/apps/frontend/src/modules/browse/components/client/context/FeaturedSongs.context.tsx @@ -4,7 +4,7 @@ import { FeaturedSongsDtoType, SongPreviewDtoType, TimespanType, -} from '@shared/validation/song/dto/types'; +} from '@nbw/database'; import { createContext, useContext, useEffect, useState } from 'react'; type FeaturedSongsContextType = { diff --git a/apps/frontend/src/modules/browse/components/client/context/HomePage.context.tsx b/apps/frontend/src/modules/browse/components/client/context/HomePage.context.tsx index f269f48f..c65e7ab1 100644 --- a/apps/frontend/src/modules/browse/components/client/context/HomePage.context.tsx +++ b/apps/frontend/src/modules/browse/components/client/context/HomePage.context.tsx @@ -1,9 +1,6 @@ 'use client'; -import { - FeaturedSongsDtoType, - SongPreviewDtoType, -} from '@shared/validation/song/dto/types'; +import { FeaturedSongsDtoType, SongPreviewDtoType } from '@nbw/database'; import { createContext, useContext } from 'react'; import { FeaturedSongsProvider } from './FeaturedSongs.context'; diff --git a/apps/frontend/src/modules/browse/components/client/context/RecentSongs.context.tsx b/apps/frontend/src/modules/browse/components/client/context/RecentSongs.context.tsx index d701a359..8d7fe9b7 100644 --- a/apps/frontend/src/modules/browse/components/client/context/RecentSongs.context.tsx +++ b/apps/frontend/src/modules/browse/components/client/context/RecentSongs.context.tsx @@ -1,6 +1,6 @@ 'use client'; -import { SongPreviewDtoType } from '@shared/validation/song/dto/types'; +import { SongPreviewDtoType } from '@nbw/database'; import { createContext, useCallback, @@ -9,7 +9,7 @@ import { useState, } from 'react'; -import axiosInstance from '@web/src/lib/axios'; +import axiosInstance from '@web/lib/axios'; type RecentSongsContextType = { recentSongs: (SongPreviewDtoType | null)[]; diff --git a/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx b/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx index 1e81da69..7d44e993 100644 --- a/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx +++ b/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx @@ -1,10 +1,7 @@ -import { MY_SONGS } from '@shared/validation/song/constants'; -import { - SongPageDtoType, - SongsFolder, -} from '@shared/validation/song/dto/types'; +import { MY_SONGS } from '@nbw/database'; +import { SongPageDtoType, SongsFolder } from '@nbw/database'; -import axiosInstance from '@web/src/lib/axios'; +import axiosInstance from '@web/lib/axios'; import { MySongProvider } from './client/context/MySongs.context'; import { MySongsPageComponent } from './client/MySongsTable'; diff --git a/apps/frontend/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx b/apps/frontend/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx index a8629c11..e740bf35 100644 --- a/apps/frontend/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx +++ b/apps/frontend/src/modules/my-songs/components/client/DeleteConfirmDialog.tsx @@ -1,4 +1,4 @@ -import GenericModal from '@web/src/modules/shared/components/client/GenericModal'; +import GenericModal from '@web/modules/shared/components/client/GenericModal'; export default function DeleteConfirmDialog({ isOpen, diff --git a/apps/frontend/src/modules/my-songs/components/client/MySongsButtons.tsx b/apps/frontend/src/modules/my-songs/components/client/MySongsButtons.tsx index f2ba7606..5a609f89 100644 --- a/apps/frontend/src/modules/my-songs/components/client/MySongsButtons.tsx +++ b/apps/frontend/src/modules/my-songs/components/client/MySongsButtons.tsx @@ -12,8 +12,8 @@ import { Tooltip, TooltipContent, TooltipTrigger, -} from '@web/src/modules/shared/components/tooltip'; -import { downloadSongFile } from '@web/src/modules/song/util/downloadSong'; +} from '@web/modules/shared/components/tooltip'; +import { downloadSongFile } from '@web/modules/song/util/downloadSong'; export const DownloadSongButton = ({ song, diff --git a/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx b/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx index d4260cce..6fe54860 100644 --- a/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx +++ b/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx @@ -4,13 +4,13 @@ import { faChevronRight, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { MY_SONGS } from '@shared/validation/song/constants'; -import { SongPageDtoType } from '@shared/validation/song/dto/types'; +import { MY_SONGS } from '@nbw/database'; +import { SongPageDtoType } from '@nbw/database'; import Image from 'next/image'; import Link from 'next/link'; import Skeleton from 'react-loading-skeleton'; -import { ErrorBox } from '@web/src/modules/shared/components/client/ErrorBox'; +import { ErrorBox } from '@web/modules/shared/components/client/ErrorBox'; import { useMySongsProvider } from './context/MySongs.context'; import DeleteConfirmDialog from './DeleteConfirmDialog'; diff --git a/apps/frontend/src/modules/my-songs/components/client/SongRow.tsx b/apps/frontend/src/modules/my-songs/components/client/SongRow.tsx index f0be7b67..7bc60297 100644 --- a/apps/frontend/src/modules/my-songs/components/client/SongRow.tsx +++ b/apps/frontend/src/modules/my-songs/components/client/SongRow.tsx @@ -5,12 +5,12 @@ import { faPlay, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { SongPreviewDtoType } from '@shared/validation/song/dto/types'; +import { SongPreviewDtoType } from '@nbw/database'; import Link from 'next/link'; import Skeleton from 'react-loading-skeleton'; -import SongThumbnail from '@web/src/modules/shared/components/layout/SongThumbnail'; -import { formatDuration } from '@web/src/modules/shared/util/format'; +import SongThumbnail from '@web/modules/shared/components/layout/SongThumbnail'; +import { formatDuration } from '@web/modules/shared/util/format'; import { useMySongsProvider } from './context/MySongs.context'; import { diff --git a/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx b/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx index c79ae133..049829b1 100644 --- a/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx +++ b/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx @@ -1,11 +1,11 @@ 'use client'; -import { MY_SONGS } from '@shared/validation/song/constants'; +import { MY_SONGS } from '@nbw/database'; import { SongPageDtoType, SongPreviewDtoType, SongsFolder, -} from '@shared/validation/song/dto/types'; +} from '@nbw/database'; import { createContext, useCallback, @@ -15,8 +15,8 @@ import { } from 'react'; import { toast } from 'react-hot-toast'; -import axiosInstance from '@web/src/lib/axios'; -import { getTokenLocal } from '@web/src/lib/axios/token.utils'; +import axiosInstance from '@web/lib/axios'; +import { getTokenLocal } from '@web/lib/axios/token.utils'; type MySongsContextType = { page: SongPageDtoType | null; diff --git a/apps/frontend/src/modules/shared/components/NoteBlockWorldLogo.tsx b/apps/frontend/src/modules/shared/components/NoteBlockWorldLogo.tsx index 8ba9cbfc..83c97fd2 100644 --- a/apps/frontend/src/modules/shared/components/NoteBlockWorldLogo.tsx +++ b/apps/frontend/src/modules/shared/components/NoteBlockWorldLogo.tsx @@ -1,6 +1,6 @@ import Image from 'next/image'; -import { cn } from '@web/src/lib/tailwind.utils'; +import { cn } from '@web/lib/tailwind.utils'; export const NoteBlockWorldLogo = ({ size, diff --git a/apps/frontend/src/modules/shared/components/client/FormElements.tsx b/apps/frontend/src/modules/shared/components/client/FormElements.tsx index 87e280b6..b0d964d0 100644 --- a/apps/frontend/src/modules/shared/components/client/FormElements.tsx +++ b/apps/frontend/src/modules/shared/components/client/FormElements.tsx @@ -5,8 +5,8 @@ import { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'; import Skeleton from 'react-loading-skeleton'; import Markdown from 'react-markdown'; -import { cn } from '@web/src/lib/tailwind.utils'; -import { ErrorBalloon } from '@web/src/modules/shared/components/client/ErrorBalloon'; +import { cn } from '@web/lib/tailwind.utils'; +import { ErrorBalloon } from '@web/modules/shared/components/client/ErrorBalloon'; import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip'; diff --git a/apps/frontend/src/modules/shared/components/client/UserMenuButton.tsx b/apps/frontend/src/modules/shared/components/client/UserMenuButton.tsx index 0bc7bb13..23adda59 100644 --- a/apps/frontend/src/modules/shared/components/client/UserMenuButton.tsx +++ b/apps/frontend/src/modules/shared/components/client/UserMenuButton.tsx @@ -2,7 +2,7 @@ import Image from 'next/image'; -import { LoggedUserData } from '@web/src/modules/auth/types/User'; +import { LoggedUserData } from '@web/modules/auth/types/User'; export function UserMenuButton({ userData }: { userData: LoggedUserData }) { return ( diff --git a/apps/frontend/src/modules/shared/components/client/ads/AdSlots.tsx b/apps/frontend/src/modules/shared/components/client/ads/AdSlots.tsx index a8c1f377..9128fba9 100644 --- a/apps/frontend/src/modules/shared/components/client/ads/AdSlots.tsx +++ b/apps/frontend/src/modules/shared/components/client/ads/AdSlots.tsx @@ -5,7 +5,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import Script from 'next/script'; import { useEffect, useState } from 'react'; -import { cn } from '@web/src/lib/tailwind.utils'; +import { cn } from '@web/lib/tailwind.utils'; import useAdSenseClient from './useAdSenseClient'; diff --git a/apps/frontend/src/modules/shared/components/layout/BlockTab.tsx b/apps/frontend/src/modules/shared/components/layout/BlockTab.tsx index b17996ec..55fee59f 100644 --- a/apps/frontend/src/modules/shared/components/layout/BlockTab.tsx +++ b/apps/frontend/src/modules/shared/components/layout/BlockTab.tsx @@ -2,7 +2,7 @@ import { IconDefinition } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import Link from 'next/link'; -import { cn } from '@web/src/lib/tailwind.utils'; +import { cn } from '@web/lib/tailwind.utils'; import { MusicalNote } from './MusicalNote'; diff --git a/apps/frontend/src/modules/shared/components/layout/CopyrightFooter.tsx b/apps/frontend/src/modules/shared/components/layout/CopyrightFooter.tsx index 54a8a01c..239ff47c 100644 --- a/apps/frontend/src/modules/shared/components/layout/CopyrightFooter.tsx +++ b/apps/frontend/src/modules/shared/components/layout/CopyrightFooter.tsx @@ -1,6 +1,6 @@ import Link from 'next/link'; -import { cn } from '@web/src/lib/tailwind.utils'; +import { cn } from '@web/lib/tailwind.utils'; export const CopyrightFooter = ({ className }: { className?: string }) => (

diff --git a/apps/frontend/src/modules/shared/components/layout/Header.tsx b/apps/frontend/src/modules/shared/components/layout/Header.tsx index e59e33fa..c2862739 100644 --- a/apps/frontend/src/modules/shared/components/layout/Header.tsx +++ b/apps/frontend/src/modules/shared/components/layout/Header.tsx @@ -8,10 +8,7 @@ import Image from 'next/image'; import Link from 'next/link'; import { redirect } from 'next/navigation'; -import { - checkLogin, - getUserData, -} from '@web/src/modules/auth/features/auth.utils'; +import { checkLogin, getUserData } from '@web/modules/auth/features/auth.utils'; import { BlockTab } from './BlockTab'; import { NavLinks } from './NavLinks'; diff --git a/apps/frontend/src/modules/shared/components/layout/NavLinks.tsx b/apps/frontend/src/modules/shared/components/layout/NavLinks.tsx index b70c4f9c..6e585a15 100644 --- a/apps/frontend/src/modules/shared/components/layout/NavLinks.tsx +++ b/apps/frontend/src/modules/shared/components/layout/NavLinks.tsx @@ -1,4 +1,4 @@ -import { LoggedUserData } from '@web/src/modules/auth/types/User'; +import { LoggedUserData } from '@web/modules/auth/types/User'; import { SettingsMenu } from './SettingsMenu'; import { SignInButton, UploadButton } from './SignOutButton'; diff --git a/apps/frontend/src/modules/shared/components/layout/RandomSongButton.tsx b/apps/frontend/src/modules/shared/components/layout/RandomSongButton.tsx index edfc2e23..0d91d81d 100644 --- a/apps/frontend/src/modules/shared/components/layout/RandomSongButton.tsx +++ b/apps/frontend/src/modules/shared/components/layout/RandomSongButton.tsx @@ -2,10 +2,10 @@ import { faDice } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; +import { SongPreviewDto } from '@nbw/database'; import { useRouter } from 'next/navigation'; -import axios from '@web/src/lib/axios'; +import axios from '@web/lib/axios'; import { MusicalNote } from './MusicalNote'; diff --git a/apps/frontend/src/modules/shared/components/layout/UserMenu.tsx b/apps/frontend/src/modules/shared/components/layout/UserMenu.tsx index 5fb82ead..1f14f36c 100644 --- a/apps/frontend/src/modules/shared/components/layout/UserMenu.tsx +++ b/apps/frontend/src/modules/shared/components/layout/UserMenu.tsx @@ -8,15 +8,15 @@ import { faSignOutAlt, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { UserConst } from '@shared/validation/user/constants'; +import { UserConst } from '@nbw/database'; import { AxiosError } from 'axios'; import Image from 'next/image'; import { useEffect, useState } from 'react'; import { SubmitHandler, useForm } from 'react-hook-form'; import toast from 'react-hot-toast'; -import ClientAxios from '@web/src/lib/axios/ClientAxios'; -import { LoggedUserData } from '@web/src/modules/auth/types/User'; +import ClientAxios from '@web/lib/axios/ClientAxios'; +import { LoggedUserData } from '@web/modules/auth/types/User'; import { Popover, diff --git a/apps/frontend/src/modules/shared/components/layout/popover.tsx b/apps/frontend/src/modules/shared/components/layout/popover.tsx index 48f76025..237144e2 100644 --- a/apps/frontend/src/modules/shared/components/layout/popover.tsx +++ b/apps/frontend/src/modules/shared/components/layout/popover.tsx @@ -3,7 +3,7 @@ import * as PopoverPrimitive from '@radix-ui/react-popover'; import * as React from 'react'; -import { cn } from '@web/src/lib/tailwind.utils'; +import { cn } from '@web/lib/tailwind.utils'; export const Popover = PopoverPrimitive.Root; diff --git a/apps/frontend/src/modules/shared/components/tooltip.tsx b/apps/frontend/src/modules/shared/components/tooltip.tsx index db934278..59f5f590 100644 --- a/apps/frontend/src/modules/shared/components/tooltip.tsx +++ b/apps/frontend/src/modules/shared/components/tooltip.tsx @@ -3,7 +3,7 @@ import * as TooltipPrimitive from '@radix-ui/react-tooltip'; import { ReactNode, forwardRef } from 'react'; -import { cn } from '@web/src/lib/tailwind.utils'; +import { cn } from '@web/lib/tailwind.utils'; const Tooltip = TooltipPrimitive.Root; diff --git a/apps/frontend/src/modules/song-edit/components/client/EditSongPage.tsx b/apps/frontend/src/modules/song-edit/components/client/EditSongPage.tsx index 379b81e4..b60bd87a 100644 --- a/apps/frontend/src/modules/song-edit/components/client/EditSongPage.tsx +++ b/apps/frontend/src/modules/song-edit/components/client/EditSongPage.tsx @@ -1,16 +1,16 @@ -import { UploadSongDtoType } from '@shared/validation/song/dto/types'; +import { UploadSongDtoType } from '@nbw/database'; -import axiosInstance from '@web/src/lib/axios'; +import axiosInstance from '@web/lib/axios'; import { getTokenServer, getUserData, -} from '@web/src/modules/auth/features/auth.utils'; -import { ErrorBox } from '@web/src/modules/shared/components/client/ErrorBox'; -import { SongProvider } from '@web/src/modules/song/components/client/context/Song.context'; +} from '@web/modules/auth/features/auth.utils'; +import { ErrorBox } from '@web/modules/shared/components/client/ErrorBox'; +import { SongProvider } from '@web/modules/song/components/client/context/Song.context'; import { DownloadFileButton, FileDisplay, -} from '@web/src/modules/song/components/client/FileDisplay'; +} from '@web/modules/song/components/client/FileDisplay'; import { SongEditForm } from './SongEditForm'; diff --git a/apps/frontend/src/modules/song-edit/components/client/SongEditForm.tsx b/apps/frontend/src/modules/song-edit/components/client/SongEditForm.tsx index c0f0d228..1cb2505a 100644 --- a/apps/frontend/src/modules/song-edit/components/client/SongEditForm.tsx +++ b/apps/frontend/src/modules/song-edit/components/client/SongEditForm.tsx @@ -1,10 +1,10 @@ 'use client'; -import { UploadSongDtoType } from '@shared/validation/song/dto/types'; +import { UploadSongDtoType } from '@nbw/database'; import { useEffect } from 'react'; -import { useSongProvider } from '@web/src/modules/song/components/client/context/Song.context'; -import { SongForm } from '@web/src/modules/song/components/client/SongForm'; +import { useSongProvider } from '@web/modules/song/components/client/context/Song.context'; +import { SongForm } from '@web/modules/song/components/client/SongForm'; import { useEditSongProviderType } from './context/EditSong.context'; diff --git a/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx b/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx index c9d3c518..56ae2f80 100644 --- a/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx +++ b/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx @@ -1,9 +1,9 @@ 'use client'; import { zodResolver } from '@hookform/resolvers/zod'; -import { parseSongFromBuffer } from '@shared/features/song/parse'; -import { SongFileType } from '@shared/features/song/types'; -import { UploadSongDtoType } from '@shared/validation/song/dto/types'; +import { parseSongFromBuffer } from '@nbw/song'; +import { SongFileType } from '@nbw/song'; +import { UploadSongDtoType } from '@nbw/database'; import { useRouter } from 'next/navigation'; import { createContext, useCallback, useEffect, useState } from 'react'; import { @@ -15,8 +15,8 @@ import { import toaster from 'react-hot-toast'; import { undefined } from 'zod'; -import axiosInstance from '@web/src/lib/axios'; -import { getTokenLocal } from '@web/src/lib/axios/token.utils'; +import axiosInstance from '@web/lib/axios'; +import { getTokenLocal } from '@web/lib/axios/token.utils'; import { EditSongForm, diff --git a/apps/frontend/src/modules/song-upload/components/client/SongUploadForm.tsx b/apps/frontend/src/modules/song-upload/components/client/SongUploadForm.tsx index 71d7f30a..2952a6c0 100644 --- a/apps/frontend/src/modules/song-upload/components/client/SongUploadForm.tsx +++ b/apps/frontend/src/modules/song-upload/components/client/SongUploadForm.tsx @@ -1,6 +1,6 @@ import { useEffect, useMemo } from 'react'; -import { SongForm } from '@web/src/modules/song/components/client/SongForm'; +import { SongForm } from '@web/modules/song/components/client/SongForm'; import { useUploadSongProviderType } from './context/UploadSong.context'; import { useSongProvider } from '../../../song/components/client/context/Song.context'; diff --git a/apps/frontend/src/modules/song-upload/components/client/UploadCompleteModal.tsx b/apps/frontend/src/modules/song-upload/components/client/UploadCompleteModal.tsx index fef4e17a..66e72bbb 100644 --- a/apps/frontend/src/modules/song-upload/components/client/UploadCompleteModal.tsx +++ b/apps/frontend/src/modules/song-upload/components/client/UploadCompleteModal.tsx @@ -2,7 +2,7 @@ import JSConfetti from 'js-confetti'; import Link from 'next/link'; import { useEffect, useState } from 'react'; -import GenericModal from '@web/src/modules/shared/components/client/GenericModal'; +import GenericModal from '@web/modules/shared/components/client/GenericModal'; export default function UploadCompleteModal({ isOpen, diff --git a/apps/frontend/src/modules/song-upload/components/client/UploadSongPage.tsx b/apps/frontend/src/modules/song-upload/components/client/UploadSongPage.tsx index 24f192fa..df057f10 100644 --- a/apps/frontend/src/modules/song-upload/components/client/UploadSongPage.tsx +++ b/apps/frontend/src/modules/song-upload/components/client/UploadSongPage.tsx @@ -3,7 +3,7 @@ import { ChangeFileButton, FileDisplay, -} from '@web/src/modules/song/components/client/FileDisplay'; +} from '@web/modules/song/components/client/FileDisplay'; import { SongUploadForm } from './SongUploadForm'; import { diff --git a/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx b/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx index e128c2b2..d451c432 100644 --- a/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx +++ b/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx @@ -1,10 +1,10 @@ 'use client'; import { zodResolver } from '@hookform/resolvers/zod'; -import { parseSongFromBuffer } from '@shared/features/song/parse'; -import { SongFileType } from '@shared/features/song/types'; -import { bgColors } from '@shared/features/thumbnail/colors'; -import { ThumbnailConst } from '@shared/validation/song/constants'; +import { parseSongFromBuffer } from '@nbw/song'; +import { SongFileType } from '@nbw/song'; +import { bgColors } from '@nbw/thumbnail'; +import { ThumbnailConst } from '@nbw/database'; import { createContext, useContext, useEffect, useState } from 'react'; import { FieldErrors, @@ -14,11 +14,8 @@ import { } from 'react-hook-form'; import { toast } from 'react-hot-toast'; -import axiosInstance from '@web/src/lib/axios'; -import { - InvalidTokenError, - getTokenLocal, -} from '@web/src/lib/axios/token.utils'; +import axiosInstance from '@web/lib/axios'; +import { InvalidTokenError, getTokenLocal } from '@web/lib/axios/token.utils'; import { UploadSongForm, diff --git a/apps/frontend/src/modules/song/components/SongDetails.tsx b/apps/frontend/src/modules/song/components/SongDetails.tsx index 7fdf96a8..a90f734c 100644 --- a/apps/frontend/src/modules/song/components/SongDetails.tsx +++ b/apps/frontend/src/modules/song/components/SongDetails.tsx @@ -1,12 +1,12 @@ import { faCheck, faClose } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { UploadConst } from '@shared/validation/song/constants'; -import { SongViewDtoType } from '@shared/validation/song/dto/types'; +import { UploadConst } from '@nbw/database'; +import { SongViewDtoType } from '@nbw/database'; import { formatDuration, formatTimeSpent, -} from '@web/src/modules/shared/util/format'; +} from '@web/modules/shared/util/format'; type SongDetailsProps = { song: SongViewDtoType; diff --git a/apps/frontend/src/modules/song/components/SongPage.tsx b/apps/frontend/src/modules/song/components/SongPage.tsx index d8bcfbba..d8f8ac1d 100644 --- a/apps/frontend/src/modules/song/components/SongPage.tsx +++ b/apps/frontend/src/modules/song/components/SongPage.tsx @@ -1,9 +1,9 @@ -import { SongPreviewDto } from '@shared/validation/song/dto/SongPreview.dto'; -import { SongViewDtoType } from '@shared/validation/song/dto/types'; +import { SongPreviewDto } from '@nbw/database'; +import { SongViewDtoType } from '@nbw/database'; import { cookies } from 'next/headers'; import Image from 'next/image'; -import axios from '@web/src/lib/axios'; +import axios from '@web/lib/axios'; import { LicenseInfo } from './client/LicenseInfo'; import { SongDetails } from './SongDetails'; diff --git a/apps/frontend/src/modules/song/components/SongPageButtons.tsx b/apps/frontend/src/modules/song/components/SongPageButtons.tsx index e2c85d73..c3e5c1a5 100644 --- a/apps/frontend/src/modules/song/components/SongPageButtons.tsx +++ b/apps/frontend/src/modules/song/components/SongPageButtons.tsx @@ -11,13 +11,13 @@ import { faShare, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { SongViewDtoType } from '@shared/validation/song/dto/types'; +import { SongViewDtoType } from '@nbw/database'; import Image from 'next/image'; import Link from 'next/link'; import { useEffect, useState } from 'react'; import { toast } from 'react-hot-toast'; -import { getTokenLocal } from '@web/src/lib/axios/token.utils'; +import { getTokenLocal } from '@web/lib/axios/token.utils'; import DownloadSongModal from './client/DownloadSongModal'; import ShareModal from './client/ShareModal'; diff --git a/apps/frontend/src/modules/song/components/client/DownloadSongModal.tsx b/apps/frontend/src/modules/song/components/client/DownloadSongModal.tsx index 65b26d50..79d1a7e6 100644 --- a/apps/frontend/src/modules/song/components/client/DownloadSongModal.tsx +++ b/apps/frontend/src/modules/song/components/client/DownloadSongModal.tsx @@ -1,10 +1,10 @@ 'use client'; -import { SongViewDtoType } from '@shared/validation/song/dto/types'; +import { SongViewDtoType } from '@nbw/database'; import { useState } from 'react'; -import { DownloadPopupAdSlot } from '@web/src/modules/shared/components/client/ads/AdSlots'; -import GenericModal from '@web/src/modules/shared/components/client/GenericModal'; +import { DownloadPopupAdSlot } from '@web/modules/shared/components/client/ads/AdSlots'; +import GenericModal from '@web/modules/shared/components/client/GenericModal'; export default function DownloadSongModal({ isOpen, diff --git a/apps/frontend/src/modules/song/components/client/FileDisplay.tsx b/apps/frontend/src/modules/song/components/client/FileDisplay.tsx index ca4df988..55dcc5d0 100644 --- a/apps/frontend/src/modules/song/components/client/FileDisplay.tsx +++ b/apps/frontend/src/modules/song/components/client/FileDisplay.tsx @@ -3,7 +3,7 @@ import { faDownload, faFile } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { cn } from '@web/src/lib/tailwind.utils'; +import { cn } from '@web/lib/tailwind.utils'; import { downloadSongFile } from '../../util/downloadSong'; diff --git a/apps/frontend/src/modules/song/components/client/InstrumentPicker.tsx b/apps/frontend/src/modules/song/components/client/InstrumentPicker.tsx index f8eac6fd..1cda9ba3 100644 --- a/apps/frontend/src/modules/song/components/client/InstrumentPicker.tsx +++ b/apps/frontend/src/modules/song/components/client/InstrumentPicker.tsx @@ -1,8 +1,8 @@ -import { Instrument } from '@shared/features/song/types'; +import { Instrument } from '@nbw/song'; import { useEffect, useState } from 'react'; -import axiosInstance from '@web/src/lib/axios'; -import { cn } from '@web/src/lib/tailwind.utils'; +import axiosInstance from '@web/lib/axios'; +import { cn } from '@web/lib/tailwind.utils'; import { useSongProvider } from './context/Song.context'; import { SongSearchCombo } from './SongSearchCombo'; diff --git a/apps/frontend/src/modules/song/components/client/LicenseInfo.tsx b/apps/frontend/src/modules/song/components/client/LicenseInfo.tsx index 832683c8..4cbf8d10 100644 --- a/apps/frontend/src/modules/song/components/client/LicenseInfo.tsx +++ b/apps/frontend/src/modules/song/components/client/LicenseInfo.tsx @@ -2,14 +2,14 @@ import { faQuestionCircle } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { UploadConst } from '@shared/validation/song/constants'; +import { UploadConst } from '@nbw/database'; import Markdown from 'react-markdown'; import { Tooltip, TooltipContent, TooltipTrigger, -} from '@web/src/modules/shared/components/tooltip'; +} from '@web/modules/shared/components/tooltip'; export const LicenseTooltip = ({ description }: { description: string }) => { return ( diff --git a/apps/frontend/src/modules/song/components/client/ShareModal.tsx b/apps/frontend/src/modules/song/components/client/ShareModal.tsx index fbb8fd88..057d80de 100644 --- a/apps/frontend/src/modules/song/components/client/ShareModal.tsx +++ b/apps/frontend/src/modules/song/components/client/ShareModal.tsx @@ -2,7 +2,7 @@ import { useState } from 'react'; -import GenericModal from '@web/src/modules/shared/components/client/GenericModal'; +import GenericModal from '@web/modules/shared/components/client/GenericModal'; /* const getTwitterIntentUrl = (songId: string) => { diff --git a/apps/frontend/src/modules/song/components/client/SongCanvas.tsx b/apps/frontend/src/modules/song/components/client/SongCanvas.tsx index df866042..31b1f7ca 100644 --- a/apps/frontend/src/modules/song/components/client/SongCanvas.tsx +++ b/apps/frontend/src/modules/song/components/client/SongCanvas.tsx @@ -1,9 +1,9 @@ 'use client'; -import { SongViewDtoType } from '@shared/validation/song/dto/types'; +import { SongViewDtoType } from '@nbw/database'; import { useEffect, useRef } from 'react'; -import axios from '@web/src/lib/axios'; +import axios from '@web/lib/axios'; export const SongCanvas = ({ song }: { song: SongViewDtoType }) => { const canvasContainerRef = useRef(null); diff --git a/apps/frontend/src/modules/song/components/client/SongForm.tsx b/apps/frontend/src/modules/song/components/client/SongForm.tsx index 02b03be7..f34078ae 100644 --- a/apps/frontend/src/modules/song/components/client/SongForm.tsx +++ b/apps/frontend/src/modules/song/components/client/SongForm.tsx @@ -3,13 +3,13 @@ import { faExternalLink, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { UploadConst } from '@shared/validation/song/constants'; -import { LicenseType } from '@shared/validation/song/dto/types'; +import { UploadConst } from '@nbw/database'; +import { LicenseType } from '@nbw/database'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; -import { ErrorBalloon } from '@web/src/modules/shared/components/client/ErrorBalloon'; -import { ErrorBox } from '@web/src/modules/shared/components/client/ErrorBox'; +import { ErrorBalloon } from '@web/modules/shared/components/client/ErrorBalloon'; +import { ErrorBox } from '@web/modules/shared/components/client/ErrorBox'; import InstrumentPicker from './InstrumentPicker'; import { SongThumbnailInput } from './SongThumbnailInput'; diff --git a/apps/frontend/src/modules/song/components/client/SongForm.zod.ts b/apps/frontend/src/modules/song/components/client/SongForm.zod.ts index 394f02a4..503e176f 100644 --- a/apps/frontend/src/modules/song/components/client/SongForm.zod.ts +++ b/apps/frontend/src/modules/song/components/client/SongForm.zod.ts @@ -1,4 +1,4 @@ -import { ThumbnailConst, UploadConst } from '@shared/validation/song/constants'; +import { ThumbnailConst, UploadConst } from '@nbw/database'; import { z as zod } from 'zod'; export const thumbnailDataSchema = zod.object({ diff --git a/apps/frontend/src/modules/song/components/client/SongSelector.tsx b/apps/frontend/src/modules/song/components/client/SongSelector.tsx index 0ce9d597..0638ff01 100644 --- a/apps/frontend/src/modules/song/components/client/SongSelector.tsx +++ b/apps/frontend/src/modules/song/components/client/SongSelector.tsx @@ -1,6 +1,6 @@ import { faFile, faMusic } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { UploadConst } from '@shared/validation/song/constants'; +import { UploadConst } from '@nbw/database'; import { useCallback } from 'react'; import { useDropzone } from 'react-dropzone'; import { toast } from 'react-hot-toast'; diff --git a/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx b/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx index dfa99524..208aad02 100644 --- a/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx +++ b/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx @@ -1,14 +1,14 @@ -import { bgColorsArray } from '@shared/features/thumbnail'; -import { ThumbnailConst } from '@shared/validation/song/constants'; +import { bgColorsArray } from '@nbw/thumbnail'; +import { ThumbnailConst } from '@nbw/database'; import { useMemo } from 'react'; import { UseFormReturn } from 'react-hook-form'; -import { cn } from '@web/src/lib/tailwind.utils'; +import { cn } from '@web/lib/tailwind.utils'; import { Tooltip, TooltipContent, TooltipTrigger, -} from '@web/src/modules/shared/components/tooltip'; +} from '@web/modules/shared/components/tooltip'; import { useSongProvider } from './context/Song.context'; import { EditSongForm, UploadSongForm } from './SongForm.zod'; diff --git a/apps/frontend/src/modules/song/components/client/ThumbnailRenderer.tsx b/apps/frontend/src/modules/song/components/client/ThumbnailRenderer.tsx index a1429a29..77fc2ee9 100644 --- a/apps/frontend/src/modules/song/components/client/ThumbnailRenderer.tsx +++ b/apps/frontend/src/modules/song/components/client/ThumbnailRenderer.tsx @@ -1,5 +1,5 @@ -import { NoteQuadTree } from '@shared/features/song/notes'; -import { drawNotesOffscreen, swap } from '@shared/features/thumbnail'; +import { NoteQuadTree } from '@nbw/song'; +import { drawNotesOffscreen, swap } from '@nbw/thumbnail'; import { useEffect, useRef, useState } from 'react'; import { UseFormReturn } from 'react-hook-form'; diff --git a/apps/frontend/src/modules/song/util/downloadSong.ts b/apps/frontend/src/modules/song/util/downloadSong.ts index 0e5b1f29..da241576 100644 --- a/apps/frontend/src/modules/song/util/downloadSong.ts +++ b/apps/frontend/src/modules/song/util/downloadSong.ts @@ -2,8 +2,8 @@ import { toast } from 'react-hot-toast'; -import axios from '@web/src/lib/axios'; -import { getTokenLocal } from '@web/src/lib/axios/token.utils'; +import axios from '@web/lib/axios'; +import { getTokenLocal } from '@web/lib/axios/token.utils'; export const downloadSongFile = async (song: { publicId: string; diff --git a/apps/frontend/src/modules/user/features/song.util.ts b/apps/frontend/src/modules/user/features/song.util.ts index 6d299d07..de418f61 100644 --- a/apps/frontend/src/modules/user/features/song.util.ts +++ b/apps/frontend/src/modules/user/features/song.util.ts @@ -1,4 +1,4 @@ -import axiosInstance from '@web/src/lib/axios'; +import axiosInstance from '@web/lib/axios'; export const getUserSongs = async (userId: string) => { const res = await axiosInstance.get('/song/user', { diff --git a/apps/frontend/tsconfig.json b/apps/frontend/tsconfig.json index c34b9f86..0a14f0e5 100644 --- a/apps/frontend/tsconfig.json +++ b/apps/frontend/tsconfig.json @@ -33,7 +33,12 @@ ], "types": [ "mdx" - ] + ], + "paths": { + "@web/*": [ + "./src/*" + ] + } }, "include": [ "next-env.d.ts", From e6834bc07529c23672ef5a800f4495be0b7f0025 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 20:43:31 -0300 Subject: [PATCH 09/17] refactor: tidy up tsconfig.json formatting for improved readability --- tsconfig.json | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 3bd56f00..6c1d2b51 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,15 @@ { - "compilerOptions": { - "baseUrl": ".", - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "incremental": true, - "skipLibCheck": true, - "strictNullChecks": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "strictPropertyInitialization": false, - "paths": { - "@server/*": ["./server/src/*"], - "@web/*": ["./web/*"], - "@shared/*": ["./shared/*"] + "compilerOptions": { + "baseUrl": ".", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "strictPropertyInitialization": false, } - } -} +} \ No newline at end of file From 91b480b1551b9640c6c5cb2be104508e704cce9d Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 21:05:26 -0300 Subject: [PATCH 10/17] refactor: update imports to use centralized database module and clean up unused imports in auth and song services --- .../backend/src/auth/auth.service.spec.ts | 6 ++--- packages/backend/src/auth/auth.service.ts | 8 +++---- .../song/my-songs/my-songs.controller.spec.ts | 7 ++---- .../src/song/my-songs/my-songs.controller.ts | 5 ++-- .../song-webhook/song-webhook.service.spec.ts | 5 ++-- .../backend/src/song/song.controller.spec.ts | 12 ++++------ packages/backend/src/song/song.controller.ts | 24 +++++++++---------- .../backend/src/song/song.service.spec.ts | 22 +++++++---------- 8 files changed, 36 insertions(+), 53 deletions(-) diff --git a/packages/backend/src/auth/auth.service.spec.ts b/packages/backend/src/auth/auth.service.spec.ts index 0d00508a..87d85f87 100644 --- a/packages/backend/src/auth/auth.service.spec.ts +++ b/packages/backend/src/auth/auth.service.spec.ts @@ -1,11 +1,9 @@ +import type { UserDocument } from '@nbw/database'; import { JwtService } from '@nestjs/jwt'; import { Test, TestingModule } from '@nestjs/testing'; +import { UserService } from '@server/user/user.service'; import { beforeEach, describe, expect, it, jest, mock, spyOn } from 'bun:test'; import type { Request, Response } from 'express'; - -import type { UserDocument } from '@server/user/entity/user.entity'; -import { UserService } from '@server/user/user.service'; - import { AuthService } from './auth.service'; import { Profile } from './types/profile'; diff --git a/packages/backend/src/auth/auth.service.ts b/packages/backend/src/auth/auth.service.ts index 333500a7..03a5186b 100644 --- a/packages/backend/src/auth/auth.service.ts +++ b/packages/backend/src/auth/auth.service.ts @@ -1,12 +1,10 @@ +import type { UserDocument } from '@nbw/database'; +import { CreateUser } from '@nbw/database'; import { Inject, Injectable, Logger } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; -import { CreateUser } from '@nbw/database'; +import { UserService } from '@server/user/user.service'; import axios from 'axios'; import type { Request, Response } from 'express'; - -import type { UserDocument } from '@server/user/entity/user.entity'; -import { UserService } from '@server/user/user.service'; - import { DiscordUser } from './types/discordProfile'; import { GithubAccessToken, GithubEmailList } from './types/githubProfile'; import { GoogleProfile } from './types/googleProfile'; diff --git a/packages/backend/src/song/my-songs/my-songs.controller.spec.ts b/packages/backend/src/song/my-songs/my-songs.controller.spec.ts index 6f4c3a10..b474b051 100644 --- a/packages/backend/src/song/my-songs/my-songs.controller.spec.ts +++ b/packages/backend/src/song/my-songs/my-songs.controller.spec.ts @@ -1,11 +1,8 @@ +import type { UserDocument } from '@nbw/database'; +import { PageQueryDTO, SongPageDto } from '@nbw/database'; import { HttpException } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { Test, TestingModule } from '@nestjs/testing'; -import { PageQueryDTO } from '@nbw/database'; -import { SongPageDto } from '@nbw/database'; - -import type { UserDocument } from '@server/user/entity/user.entity'; - import { SongService } from '../song.service'; import { MySongsController } from './my-songs.controller'; diff --git a/packages/backend/src/song/my-songs/my-songs.controller.ts b/packages/backend/src/song/my-songs/my-songs.controller.ts index ff7930af..5a0df65a 100644 --- a/packages/backend/src/song/my-songs/my-songs.controller.ts +++ b/packages/backend/src/song/my-songs/my-songs.controller.ts @@ -1,10 +1,9 @@ +import type { UserDocument } from '@nbw/database'; +import { PageQueryDTO, SongPageDto } from '@nbw/database'; import { Controller, Get, Query, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; -import { PageQueryDTO, SongPageDto } from '@nbw/database'; - import { GetRequestToken, validateUser } from '@server/lib/GetRequestUser'; -import type { UserDocument } from '@server/user/entity/user.entity'; import { SongService } from '../song.service'; diff --git a/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts b/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts index ca09a6a9..0621e7fb 100644 --- a/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts +++ b/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts @@ -1,12 +1,11 @@ +import { Song as SongEntity, SongWithUser } from '@nbw/database'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { getModelToken } from '@nestjs/mongoose'; import { Test, TestingModule } from '@nestjs/testing'; import { beforeEach, describe, expect, it, jest, mock, spyOn } from 'bun:test'; import { Model } from 'mongoose'; - -import { SongWebhookService } from './song-webhook.service'; -import { Song as SongEntity, SongWithUser } from '../entity/song.entity'; import { getUploadDiscordEmbed } from '../song.util'; +import { SongWebhookService } from './song-webhook.service'; mock.module('../song.util', () => ({ getUploadDiscordEmbed: jest.fn(), diff --git a/packages/backend/src/song/song.controller.spec.ts b/packages/backend/src/song/song.controller.spec.ts index 500203cc..86a6dc33 100644 --- a/packages/backend/src/song/song.controller.spec.ts +++ b/packages/backend/src/song/song.controller.spec.ts @@ -1,6 +1,4 @@ -import { HttpStatus, UnauthorizedException } from '@nestjs/common'; -import { AuthGuard } from '@nestjs/passport'; -import { Test, TestingModule } from '@nestjs/testing'; +import type { UserDocument } from '@nbw/database'; import { PageQueryDTO, SongPreviewDto, @@ -8,11 +6,11 @@ import { UploadSongDto, UploadSongResponseDto, } from '@nbw/database'; -import { Response } from 'express'; - +import { HttpStatus, UnauthorizedException } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; +import { Test, TestingModule } from '@nestjs/testing'; import { FileService } from '@server/file/file.service'; -import type { UserDocument } from '@server/user/entity/user.entity'; - +import { Response } from 'express'; import { SongController } from './song.controller'; import { SongService } from './song.service'; diff --git a/packages/backend/src/song/song.controller.ts b/packages/backend/src/song/song.controller.ts index d02510cf..143fe89b 100644 --- a/packages/backend/src/song/song.controller.ts +++ b/packages/backend/src/song/song.controller.ts @@ -1,3 +1,13 @@ +import type { UserDocument } from '@nbw/database'; +import { + PageQueryDTO, + SongPreviewDto, + SongViewDto, + UploadConst, + UploadSongDto, + UploadSongResponseDto, +} from '@nbw/database'; +import type { RawBodyRequest } from '@nestjs/common'; import { Body, Controller, @@ -16,7 +26,6 @@ import { UseGuards, UseInterceptors, } from '@nestjs/common'; -import type { RawBodyRequest } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { FileInterceptor } from '@nestjs/platform-express'; import { MulterOptions } from '@nestjs/platform-express/multer/interfaces/multer-options.interface'; @@ -27,20 +36,9 @@ import { ApiOperation, ApiTags, } from '@nestjs/swagger'; -import { - PageQueryDTO, - SongPreviewDto, - SongViewDto, - UploadSongDto, - UploadSongResponseDto, - UploadConst, -} from '@nbw/database'; -import type { Response } from 'express'; - import { FileService } from '@server/file/file.service'; import { GetRequestToken, validateUser } from '@server/lib/GetRequestUser'; -import type { UserDocument } from '@server/user/entity/user.entity'; - +import type { Response } from 'express'; import { SongService } from './song.service'; // Handles public-facing song routes. diff --git a/packages/backend/src/song/song.service.spec.ts b/packages/backend/src/song/song.service.spec.ts index 015966b0..53be04d0 100644 --- a/packages/backend/src/song/song.service.spec.ts +++ b/packages/backend/src/song/song.service.spec.ts @@ -1,24 +1,20 @@ -import { HttpException } from '@nestjs/common'; -import { getModelToken } from '@nestjs/mongoose'; -import { Test, TestingModule } from '@nestjs/testing'; +import type { UserDocument } from '@nbw/database'; import { + SongDocument, + Song as SongEntity, SongPreviewDto, + SongSchema, SongStats, SongViewDto, + SongWithUser, UploadSongDto, UploadSongResponseDto, } from '@nbw/database'; -import mongoose, { Model } from 'mongoose'; - +import { HttpException } from '@nestjs/common'; +import { getModelToken } from '@nestjs/mongoose'; +import { Test, TestingModule } from '@nestjs/testing'; import { FileService } from '@server/file/file.service'; -import type { UserDocument } from '@server/user/entity/user.entity'; - -import { - SongDocument, - Song as SongEntity, - SongSchema, - SongWithUser, -} from './entity/song.entity'; +import mongoose, { Model } from 'mongoose'; import { SongUploadService } from './song-upload/song-upload.service'; import { SongWebhookService } from './song-webhook/song-webhook.service'; import { SongService } from './song.service'; From f8697f6ec01c413490fbc01a2604cfbd8d559cab Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 21:05:36 -0300 Subject: [PATCH 11/17] refactor: update build and start scripts to reflect new package structure for backend and frontend --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index d9958dc2..99526068 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,9 @@ "main": "index.js", "scripts": { "dev:docker": "docker-compose -f docker-compose-dev.yml up -d && bun run dev && docker-compose down", - "build:server": "bun run build:data && cd server && bun run build", - "build:web": "cd ./web && bun run build", - "start:server": "cd ./server && bun run start", + "build:server": "bun run build:data && cd packages/backend && bun run build", + "build:web": "cd ./apps/frontend && bun run build", + "start:server": "cd ./packages/backend && bun run start", "start:server:prod": "cd ./server && bun run start", "start:web:prod": "cd ./web && bun run start", "dev": "concurrently --success first -n \"server,web\" --prefix-colors \"cyan,magenta\" --prefix \"{name} {time}\" \"bun run dev:server\" \"bun run dev:web\"", From 4e44766660776ef2650485332fe8284e5acf5df7 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 21:08:57 -0300 Subject: [PATCH 12/17] refactor: update ESLint configuration paths to reflect new directory structure --- apps/frontend/.eslintrc.js | 2 +- packages/backend/.eslintrc.json | 2 +- packages/database/.eslintrc.js | 2 +- packages/song/.eslintrc.js | 2 +- packages/sounds/.eslintrc.js | 2 +- packages/thumbnail/.eslintrc.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/frontend/.eslintrc.js b/apps/frontend/.eslintrc.js index db98bda2..686dca3b 100644 --- a/apps/frontend/.eslintrc.js +++ b/apps/frontend/.eslintrc.js @@ -3,7 +3,7 @@ module.exports = { 'plugin:mdx/recommended', 'next', 'next/core-web-vitals', - '../.eslintrc.js', + '../../.eslintrc.js', ], settings: { 'mdx/code-blocks': true, diff --git a/packages/backend/.eslintrc.json b/packages/backend/.eslintrc.json index ea4d134e..a8dde35a 100644 --- a/packages/backend/.eslintrc.json +++ b/packages/backend/.eslintrc.json @@ -1,6 +1,6 @@ { "extends": [ - "../.eslintrc.js" + "../../.eslintrc.js" ], "root": true, "env": { diff --git a/packages/database/.eslintrc.js b/packages/database/.eslintrc.js index 6e4765d0..5a2cc7f1 100644 --- a/packages/database/.eslintrc.js +++ b/packages/database/.eslintrc.js @@ -1,3 +1,3 @@ module.exports = { - extends: ['../.eslintrc.js'], + extends: ['../../.eslintrc.js'], }; diff --git a/packages/song/.eslintrc.js b/packages/song/.eslintrc.js index 6e4765d0..5a2cc7f1 100644 --- a/packages/song/.eslintrc.js +++ b/packages/song/.eslintrc.js @@ -1,3 +1,3 @@ module.exports = { - extends: ['../.eslintrc.js'], + extends: ['../../.eslintrc.js'], }; diff --git a/packages/sounds/.eslintrc.js b/packages/sounds/.eslintrc.js index 6e4765d0..5a2cc7f1 100644 --- a/packages/sounds/.eslintrc.js +++ b/packages/sounds/.eslintrc.js @@ -1,3 +1,3 @@ module.exports = { - extends: ['../.eslintrc.js'], + extends: ['../../.eslintrc.js'], }; diff --git a/packages/thumbnail/.eslintrc.js b/packages/thumbnail/.eslintrc.js index 6e4765d0..5a2cc7f1 100644 --- a/packages/thumbnail/.eslintrc.js +++ b/packages/thumbnail/.eslintrc.js @@ -1,3 +1,3 @@ module.exports = { - extends: ['../.eslintrc.js'], + extends: ['../../.eslintrc.js'], }; From 7928d516466ce5a358e879a93c23af7f7d45cc18 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 21:09:03 -0300 Subject: [PATCH 13/17] refactor: update imports to use new package structure for sounds and add dependency in package.json --- build.ts | 2 +- bun.lock | 1 + package.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build.ts b/build.ts index e53c3f55..35e548b3 100644 --- a/build.ts +++ b/build.ts @@ -1,7 +1,7 @@ import { existsSync, mkdirSync, writeFileSync } from 'fs'; import { resolve } from 'path'; -import { getLatestVersionSoundList } from './shared/features/sounds'; +import { getLatestVersionSoundList } from '@nbw/sounds'; function writeJSONFile( dir: string, diff --git a/bun.lock b/bun.lock index faa86a0f..1cc9456f 100644 --- a/bun.lock +++ b/bun.lock @@ -4,6 +4,7 @@ "": { "name": "note-block-world", "dependencies": { + "@nbw/sounds": "workspace:*", "ts-node": "^10.9.1", }, "devDependencies": { diff --git a/package.json b/package.json index 99526068..d04a62d6 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "prettier": "^2.8.8" }, "dependencies": { + "@nbw/sounds": "workspace:*", "ts-node": "^10.9.1" } } From 4d29bceb03b41648f8d099bc01985248c12544e5 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 21:59:00 -0300 Subject: [PATCH 14/17] refactor: add test script to package.json and update imports for consistency across song components --- apps/frontend/package.json | 3 ++- .../frontend/src/modules/my-songs/components/MySongsPage.tsx | 3 +-- .../src/modules/my-songs/components/client/MySongsTable.tsx | 3 +-- .../my-songs/components/client/context/MySongs.context.tsx | 2 +- .../song-edit/components/client/context/EditSong.context.tsx | 3 +-- .../components/client/context/UploadSong.context.tsx | 5 ++--- apps/frontend/src/modules/song/components/SongDetails.tsx | 3 +-- apps/frontend/src/modules/song/components/SongPage.tsx | 3 +-- .../frontend/src/modules/song/components/client/SongForm.tsx | 3 +-- .../modules/song/components/client/SongThumbnailInput.tsx | 2 +- 10 files changed, 12 insertions(+), 18 deletions(-) diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 6ce8145d..94058fc1 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint --fix" + "lint": "next lint --fix", + "test": "jest" }, "dependencies": { "@fortawesome/free-brands-svg-icons": "^6.4.2", diff --git a/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx b/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx index 7d44e993..2b7e5eac 100644 --- a/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx +++ b/apps/frontend/src/modules/my-songs/components/MySongsPage.tsx @@ -1,5 +1,4 @@ -import { MY_SONGS } from '@nbw/database'; -import { SongPageDtoType, SongsFolder } from '@nbw/database'; +import { MY_SONGS, SongPageDtoType, SongsFolder } from '@nbw/database'; import axiosInstance from '@web/lib/axios'; diff --git a/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx b/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx index 6fe54860..3c2f5a65 100644 --- a/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx +++ b/apps/frontend/src/modules/my-songs/components/client/MySongsTable.tsx @@ -4,8 +4,7 @@ import { faChevronRight, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { MY_SONGS } from '@nbw/database'; -import { SongPageDtoType } from '@nbw/database'; +import { MY_SONGS, SongPageDtoType } from '@nbw/database'; import Image from 'next/image'; import Link from 'next/link'; import Skeleton from 'react-loading-skeleton'; diff --git a/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx b/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx index 049829b1..2f875c12 100644 --- a/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx +++ b/apps/frontend/src/modules/my-songs/components/client/context/MySongs.context.tsx @@ -1,7 +1,7 @@ 'use client'; -import { MY_SONGS } from '@nbw/database'; import { + MY_SONGS, SongPageDtoType, SongPreviewDtoType, SongsFolder, diff --git a/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx b/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx index 56ae2f80..88a7f84c 100644 --- a/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx +++ b/apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx @@ -1,9 +1,8 @@ 'use client'; import { zodResolver } from '@hookform/resolvers/zod'; -import { parseSongFromBuffer } from '@nbw/song'; -import { SongFileType } from '@nbw/song'; import { UploadSongDtoType } from '@nbw/database'; +import { SongFileType, parseSongFromBuffer } from '@nbw/song'; import { useRouter } from 'next/navigation'; import { createContext, useCallback, useEffect, useState } from 'react'; import { diff --git a/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx b/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx index d451c432..47759a3d 100644 --- a/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx +++ b/apps/frontend/src/modules/song-upload/components/client/context/UploadSong.context.tsx @@ -1,10 +1,9 @@ 'use client'; import { zodResolver } from '@hookform/resolvers/zod'; -import { parseSongFromBuffer } from '@nbw/song'; -import { SongFileType } from '@nbw/song'; -import { bgColors } from '@nbw/thumbnail'; import { ThumbnailConst } from '@nbw/database'; +import { SongFileType, parseSongFromBuffer } from '@nbw/song'; +import { bgColors } from '@nbw/thumbnail'; import { createContext, useContext, useEffect, useState } from 'react'; import { FieldErrors, diff --git a/apps/frontend/src/modules/song/components/SongDetails.tsx b/apps/frontend/src/modules/song/components/SongDetails.tsx index a90f734c..08f02347 100644 --- a/apps/frontend/src/modules/song/components/SongDetails.tsx +++ b/apps/frontend/src/modules/song/components/SongDetails.tsx @@ -1,7 +1,6 @@ import { faCheck, faClose } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { UploadConst } from '@nbw/database'; -import { SongViewDtoType } from '@nbw/database'; +import { SongViewDtoType, UploadConst } from '@nbw/database'; import { formatDuration, diff --git a/apps/frontend/src/modules/song/components/SongPage.tsx b/apps/frontend/src/modules/song/components/SongPage.tsx index d8f8ac1d..778268db 100644 --- a/apps/frontend/src/modules/song/components/SongPage.tsx +++ b/apps/frontend/src/modules/song/components/SongPage.tsx @@ -1,5 +1,4 @@ -import { SongPreviewDto } from '@nbw/database'; -import { SongViewDtoType } from '@nbw/database'; +import { SongPreviewDto, SongViewDtoType } from '@nbw/database'; import { cookies } from 'next/headers'; import Image from 'next/image'; diff --git a/apps/frontend/src/modules/song/components/client/SongForm.tsx b/apps/frontend/src/modules/song/components/client/SongForm.tsx index f34078ae..8d704447 100644 --- a/apps/frontend/src/modules/song/components/client/SongForm.tsx +++ b/apps/frontend/src/modules/song/components/client/SongForm.tsx @@ -3,8 +3,7 @@ import { faExternalLink, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { UploadConst } from '@nbw/database'; -import { LicenseType } from '@nbw/database'; +import { LicenseType, UploadConst } from '@nbw/database'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; diff --git a/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx b/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx index 208aad02..e8e6576d 100644 --- a/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx +++ b/apps/frontend/src/modules/song/components/client/SongThumbnailInput.tsx @@ -1,5 +1,5 @@ -import { bgColorsArray } from '@nbw/thumbnail'; import { ThumbnailConst } from '@nbw/database'; +import { bgColorsArray } from '@nbw/thumbnail'; import { useMemo } from 'react'; import { UseFormReturn } from 'react-hook-form'; From 0785bd53be9707bc830f9175db074a5b8b224a93 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 21:59:15 -0300 Subject: [PATCH 15/17] refactor: standardize import statements across multiple files and clean up unused imports in auth, song, and user modules --- packages/backend/src/auth/auth.service.spec.ts | 4 +++- packages/backend/src/auth/auth.service.ts | 4 +++- .../backend/src/email-login/email-login.controller.spec.ts | 1 + packages/backend/src/lib/GetRequestUser.spec.ts | 1 + packages/backend/src/lib/parseToken.spec.ts | 2 ++ packages/backend/src/lib/parseToken.ts | 1 + packages/backend/src/seed/seed.service.ts | 1 + .../src/song-browser/song-browser.controller.spec.ts | 1 + .../backend/src/song-browser/song-browser.controller.ts | 1 + .../backend/src/song-browser/song-browser.service.spec.ts | 2 ++ packages/backend/src/song-browser/song-browser.service.ts | 1 + .../backend/src/song/my-songs/my-songs.controller.spec.ts | 1 + packages/backend/src/song/my-songs/my-songs.controller.ts | 1 + .../src/song/song-upload/song-upload.service.spec.ts | 6 ++++-- .../backend/src/song/song-upload/song-upload.service.ts | 4 +++- .../src/song/song-webhook/song-webhook.service.spec.ts | 1 + .../backend/src/song/song-webhook/song-webhook.service.ts | 2 +- packages/backend/src/song/song.controller.spec.ts | 4 +++- packages/backend/src/song/song.controller.ts | 4 +++- packages/backend/src/song/song.module.ts | 2 ++ packages/backend/src/song/song.service.spec.ts | 4 +++- packages/backend/src/song/song.service.ts | 6 ++++-- packages/backend/src/user/user.controller.spec.ts | 1 + packages/backend/src/user/user.controller.ts | 2 ++ packages/backend/src/user/user.module.ts | 1 + packages/backend/src/user/user.service.spec.ts | 1 + 26 files changed, 48 insertions(+), 11 deletions(-) diff --git a/packages/backend/src/auth/auth.service.spec.ts b/packages/backend/src/auth/auth.service.spec.ts index 87d85f87..311fece9 100644 --- a/packages/backend/src/auth/auth.service.spec.ts +++ b/packages/backend/src/auth/auth.service.spec.ts @@ -1,9 +1,11 @@ import type { UserDocument } from '@nbw/database'; import { JwtService } from '@nestjs/jwt'; import { Test, TestingModule } from '@nestjs/testing'; -import { UserService } from '@server/user/user.service'; import { beforeEach, describe, expect, it, jest, mock, spyOn } from 'bun:test'; import type { Request, Response } from 'express'; + +import { UserService } from '@server/user/user.service'; + import { AuthService } from './auth.service'; import { Profile } from './types/profile'; diff --git a/packages/backend/src/auth/auth.service.ts b/packages/backend/src/auth/auth.service.ts index 03a5186b..b590e003 100644 --- a/packages/backend/src/auth/auth.service.ts +++ b/packages/backend/src/auth/auth.service.ts @@ -2,9 +2,11 @@ import type { UserDocument } from '@nbw/database'; import { CreateUser } from '@nbw/database'; import { Inject, Injectable, Logger } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; -import { UserService } from '@server/user/user.service'; import axios from 'axios'; import type { Request, Response } from 'express'; + +import { UserService } from '@server/user/user.service'; + import { DiscordUser } from './types/discordProfile'; import { GithubAccessToken, GithubEmailList } from './types/githubProfile'; import { GoogleProfile } from './types/googleProfile'; diff --git a/packages/backend/src/email-login/email-login.controller.spec.ts b/packages/backend/src/email-login/email-login.controller.spec.ts index 53d336aa..1e8e48a3 100644 --- a/packages/backend/src/email-login/email-login.controller.spec.ts +++ b/packages/backend/src/email-login/email-login.controller.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; + import { EmailLoginController } from './email-login.controller'; import { EmailLoginService } from './email-login.service'; diff --git a/packages/backend/src/lib/GetRequestUser.spec.ts b/packages/backend/src/lib/GetRequestUser.spec.ts index f9a9fe5c..ebc2e65f 100644 --- a/packages/backend/src/lib/GetRequestUser.spec.ts +++ b/packages/backend/src/lib/GetRequestUser.spec.ts @@ -1,5 +1,6 @@ import type { UserDocument } from '@nbw/database'; import { ExecutionContext, HttpException, HttpStatus } from '@nestjs/common'; + import { GetRequestToken, validateUser } from './GetRequestUser'; describe('GetRequestToken', () => { diff --git a/packages/backend/src/lib/parseToken.spec.ts b/packages/backend/src/lib/parseToken.spec.ts index 6c6431dc..8db755f3 100644 --- a/packages/backend/src/lib/parseToken.spec.ts +++ b/packages/backend/src/lib/parseToken.spec.ts @@ -1,6 +1,8 @@ import { ExecutionContext } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; + import { AuthService } from '@server/auth/auth.service'; + import { ParseTokenPipe } from './parseToken'; describe('ParseTokenPipe', () => { diff --git a/packages/backend/src/lib/parseToken.ts b/packages/backend/src/lib/parseToken.ts index c1d0a534..0b6d090b 100644 --- a/packages/backend/src/lib/parseToken.ts +++ b/packages/backend/src/lib/parseToken.ts @@ -5,6 +5,7 @@ import { Injectable, Logger, } from '@nestjs/common'; + import { AuthService } from '@server/auth/auth.service'; @Injectable() diff --git a/packages/backend/src/seed/seed.service.ts b/packages/backend/src/seed/seed.service.ts index 5ff7daed..d2da973d 100644 --- a/packages/backend/src/seed/seed.service.ts +++ b/packages/backend/src/seed/seed.service.ts @@ -16,6 +16,7 @@ import { Injectable, Logger, } from '@nestjs/common'; + import { SongService } from '@server/song/song.service'; import { UserService } from '@server/user/user.service'; diff --git a/packages/backend/src/song-browser/song-browser.controller.spec.ts b/packages/backend/src/song-browser/song-browser.controller.spec.ts index 47126ae8..0e95d2ff 100644 --- a/packages/backend/src/song-browser/song-browser.controller.spec.ts +++ b/packages/backend/src/song-browser/song-browser.controller.spec.ts @@ -1,5 +1,6 @@ import { FeaturedSongsDto, PageQueryDTO, SongPreviewDto } from '@nbw/database'; import { Test, TestingModule } from '@nestjs/testing'; + import { SongBrowserController } from './song-browser.controller'; import { SongBrowserService } from './song-browser.service'; diff --git a/packages/backend/src/song-browser/song-browser.controller.ts b/packages/backend/src/song-browser/song-browser.controller.ts index 63ed92bf..f9746d1e 100644 --- a/packages/backend/src/song-browser/song-browser.controller.ts +++ b/packages/backend/src/song-browser/song-browser.controller.ts @@ -7,6 +7,7 @@ import { Query, } from '@nestjs/common'; import { ApiOperation, ApiTags } from '@nestjs/swagger'; + import { SongBrowserService } from './song-browser.service'; @Controller('song-browser') diff --git a/packages/backend/src/song-browser/song-browser.service.spec.ts b/packages/backend/src/song-browser/song-browser.service.spec.ts index b7dd9735..f46f98d6 100644 --- a/packages/backend/src/song-browser/song-browser.service.spec.ts +++ b/packages/backend/src/song-browser/song-browser.service.spec.ts @@ -1,7 +1,9 @@ import { PageQueryDTO, SongPreviewDto, SongWithUser } from '@nbw/database'; import { HttpException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; + import { SongService } from '@server/song/song.service'; + import { SongBrowserService } from './song-browser.service'; const mockSongService = { diff --git a/packages/backend/src/song-browser/song-browser.service.ts b/packages/backend/src/song-browser/song-browser.service.ts index 10ab2fc2..6f931ba2 100644 --- a/packages/backend/src/song-browser/song-browser.service.ts +++ b/packages/backend/src/song-browser/song-browser.service.ts @@ -7,6 +7,7 @@ import { TimespanType, } from '@nbw/database'; import { HttpException, HttpStatus, Inject, Injectable } from '@nestjs/common'; + import { SongService } from '@server/song/song.service'; @Injectable() diff --git a/packages/backend/src/song/my-songs/my-songs.controller.spec.ts b/packages/backend/src/song/my-songs/my-songs.controller.spec.ts index b474b051..25b3d33f 100644 --- a/packages/backend/src/song/my-songs/my-songs.controller.spec.ts +++ b/packages/backend/src/song/my-songs/my-songs.controller.spec.ts @@ -3,6 +3,7 @@ import { PageQueryDTO, SongPageDto } from '@nbw/database'; import { HttpException } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { Test, TestingModule } from '@nestjs/testing'; + import { SongService } from '../song.service'; import { MySongsController } from './my-songs.controller'; diff --git a/packages/backend/src/song/my-songs/my-songs.controller.ts b/packages/backend/src/song/my-songs/my-songs.controller.ts index 5a0df65a..986ac5f3 100644 --- a/packages/backend/src/song/my-songs/my-songs.controller.ts +++ b/packages/backend/src/song/my-songs/my-songs.controller.ts @@ -3,6 +3,7 @@ import { PageQueryDTO, SongPageDto } from '@nbw/database'; import { Controller, Get, Query, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + import { GetRequestToken, validateUser } from '@server/lib/GetRequestUser'; import { SongService } from '../song.service'; diff --git a/packages/backend/src/song/song-upload/song-upload.service.spec.ts b/packages/backend/src/song/song-upload/song-upload.service.spec.ts index 7c65f907..c58c0d22 100644 --- a/packages/backend/src/song/song-upload/song-upload.service.spec.ts +++ b/packages/backend/src/song/song-upload/song-upload.service.spec.ts @@ -8,10 +8,12 @@ import { } from '@nbw/database'; import { HttpException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; -import { FileService } from '@server/file/file.service'; -import { UserService } from '@server/user/user.service'; import { beforeEach, describe, expect, it, jest, mock, spyOn } from 'bun:test'; import { Types } from 'mongoose'; + +import { FileService } from '@server/file/file.service'; +import { UserService } from '@server/user/user.service'; + import { SongUploadService } from './song-upload.service'; // mock drawToImage function diff --git a/packages/backend/src/song/song-upload/song-upload.service.ts b/packages/backend/src/song/song-upload/song-upload.service.ts index d449809d..bbf37b9d 100644 --- a/packages/backend/src/song/song-upload/song-upload.service.ts +++ b/packages/backend/src/song/song-upload/song-upload.service.ts @@ -21,9 +21,11 @@ import { Injectable, Logger, } from '@nestjs/common'; +import { Types } from 'mongoose'; + import { FileService } from '@server/file/file.service'; import { UserService } from '@server/user/user.service'; -import { Types } from 'mongoose'; + import { generateSongId, removeExtraSpaces } from '../song.util'; @Injectable() diff --git a/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts b/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts index 0621e7fb..8b09fef1 100644 --- a/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts +++ b/packages/backend/src/song/song-webhook/song-webhook.service.spec.ts @@ -4,6 +4,7 @@ import { getModelToken } from '@nestjs/mongoose'; import { Test, TestingModule } from '@nestjs/testing'; import { beforeEach, describe, expect, it, jest, mock, spyOn } from 'bun:test'; import { Model } from 'mongoose'; + import { getUploadDiscordEmbed } from '../song.util'; import { SongWebhookService } from './song-webhook.service'; diff --git a/packages/backend/src/song/song-webhook/song-webhook.service.ts b/packages/backend/src/song/song-webhook/song-webhook.service.ts index e25a68b0..c40da72f 100644 --- a/packages/backend/src/song/song-webhook/song-webhook.service.ts +++ b/packages/backend/src/song/song-webhook/song-webhook.service.ts @@ -1,8 +1,8 @@ +import { Song as SongEntity, SongWithUser } from '@nbw/database'; import { Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; -import { Song as SongEntity, SongWithUser } from '@nbw/database'; import { getUploadDiscordEmbed } from '../song.util'; @Injectable() diff --git a/packages/backend/src/song/song.controller.spec.ts b/packages/backend/src/song/song.controller.spec.ts index 86a6dc33..f4fc3ac2 100644 --- a/packages/backend/src/song/song.controller.spec.ts +++ b/packages/backend/src/song/song.controller.spec.ts @@ -9,8 +9,10 @@ import { import { HttpStatus, UnauthorizedException } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { Test, TestingModule } from '@nestjs/testing'; -import { FileService } from '@server/file/file.service'; import { Response } from 'express'; + +import { FileService } from '@server/file/file.service'; + import { SongController } from './song.controller'; import { SongService } from './song.service'; diff --git a/packages/backend/src/song/song.controller.ts b/packages/backend/src/song/song.controller.ts index 143fe89b..9581c62e 100644 --- a/packages/backend/src/song/song.controller.ts +++ b/packages/backend/src/song/song.controller.ts @@ -36,9 +36,11 @@ import { ApiOperation, ApiTags, } from '@nestjs/swagger'; +import type { Response } from 'express'; + import { FileService } from '@server/file/file.service'; import { GetRequestToken, validateUser } from '@server/lib/GetRequestUser'; -import type { Response } from 'express'; + import { SongService } from './song.service'; // Handles public-facing song routes. diff --git a/packages/backend/src/song/song.module.ts b/packages/backend/src/song/song.module.ts index 9bd60afd..52218af7 100644 --- a/packages/backend/src/song/song.module.ts +++ b/packages/backend/src/song/song.module.ts @@ -2,9 +2,11 @@ import { Song, SongSchema } from '@nbw/database'; import { Module } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { MongooseModule } from '@nestjs/mongoose'; + import { AuthModule } from '@server/auth/auth.module'; import { FileModule } from '@server/file/file.module'; import { UserModule } from '@server/user/user.module'; + import { MySongsController } from './my-songs/my-songs.controller'; import { SongUploadService } from './song-upload/song-upload.service'; import { SongWebhookService } from './song-webhook/song-webhook.service'; diff --git a/packages/backend/src/song/song.service.spec.ts b/packages/backend/src/song/song.service.spec.ts index 53be04d0..b5445461 100644 --- a/packages/backend/src/song/song.service.spec.ts +++ b/packages/backend/src/song/song.service.spec.ts @@ -13,8 +13,10 @@ import { import { HttpException } from '@nestjs/common'; import { getModelToken } from '@nestjs/mongoose'; import { Test, TestingModule } from '@nestjs/testing'; -import { FileService } from '@server/file/file.service'; import mongoose, { Model } from 'mongoose'; + +import { FileService } from '@server/file/file.service'; + import { SongUploadService } from './song-upload/song-upload.service'; import { SongWebhookService } from './song-webhook/song-webhook.service'; import { SongService } from './song.service'; diff --git a/packages/backend/src/song/song.service.ts b/packages/backend/src/song/song.service.ts index ebcc6b48..67b23190 100644 --- a/packages/backend/src/song/song.service.ts +++ b/packages/backend/src/song/song.service.ts @@ -1,9 +1,12 @@ +import type { UserDocument } from '@nbw/database'; import { BROWSER_SONGS, PageQueryDTO, + Song as SongEntity, SongPageDto, SongPreviewDto, SongViewDto, + SongWithUser, UploadSongDto, UploadSongResponseDto, } from '@nbw/database'; @@ -17,9 +20,8 @@ import { import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; -import type { UserDocument } from '@nbw/database'; -import { Song as SongEntity, SongWithUser } from '@nbw/database'; import { FileService } from '@server/file/file.service'; + import { SongUploadService } from './song-upload/song-upload.service'; import { SongWebhookService } from './song-webhook/song-webhook.service'; import { removeExtraSpaces } from './song.util'; diff --git a/packages/backend/src/user/user.controller.spec.ts b/packages/backend/src/user/user.controller.spec.ts index 45cf42af..b8b94b96 100644 --- a/packages/backend/src/user/user.controller.spec.ts +++ b/packages/backend/src/user/user.controller.spec.ts @@ -2,6 +2,7 @@ import type { UserDocument } from '@nbw/database'; import { GetUser, PageQueryDTO } from '@nbw/database'; import { HttpException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; + import { UserController } from './user.controller'; import { UserService } from './user.service'; diff --git a/packages/backend/src/user/user.controller.ts b/packages/backend/src/user/user.controller.ts index 51e1318e..193551fa 100644 --- a/packages/backend/src/user/user.controller.ts +++ b/packages/backend/src/user/user.controller.ts @@ -2,7 +2,9 @@ import type { UserDocument } from '@nbw/database'; import { GetUser, PageQueryDTO, UpdateUsernameDto } from '@nbw/database'; import { Body, Controller, Get, Inject, Patch, Query } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + import { GetRequestToken, validateUser } from '@server/lib/GetRequestUser'; + import { UserService } from './user.service'; @Controller('user') diff --git a/packages/backend/src/user/user.module.ts b/packages/backend/src/user/user.module.ts index 0add775f..53a58c90 100644 --- a/packages/backend/src/user/user.module.ts +++ b/packages/backend/src/user/user.module.ts @@ -1,6 +1,7 @@ import { User, UserSchema } from '@nbw/database'; import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; + import { UserController } from './user.controller'; import { UserService } from './user.service'; diff --git a/packages/backend/src/user/user.service.spec.ts b/packages/backend/src/user/user.service.spec.ts index 8779cddc..56e07464 100644 --- a/packages/backend/src/user/user.service.spec.ts +++ b/packages/backend/src/user/user.service.spec.ts @@ -9,6 +9,7 @@ import { HttpException, HttpStatus } from '@nestjs/common'; import { getModelToken } from '@nestjs/mongoose'; import { Test, TestingModule } from '@nestjs/testing'; import { Model } from 'mongoose'; + import { UserService } from './user.service'; const mockUserModel = { From e76df8f70cf6eeaa73d80886b600387ebc30537d Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 21:59:21 -0300 Subject: [PATCH 16/17] refactor: add lint and test scripts to package.json for database, song, sounds, and thumbnail packages --- package.json | 31 +++++++++++++++++++------------ packages/database/package.json | 4 +++- packages/song/package.json | 4 +++- packages/sounds/package.json | 4 +++- packages/thumbnail/package.json | 4 +++- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index d04a62d6..e6b5cec0 100644 --- a/package.json +++ b/package.json @@ -8,22 +8,29 @@ "build:server": "bun run build:data && cd packages/backend && bun run build", "build:web": "cd ./apps/frontend && bun run build", "start:server": "cd ./packages/backend && bun run start", - "start:server:prod": "cd ./server && bun run start", - "start:web:prod": "cd ./web && bun run start", + "start:server:prod": "cd ./packages/backend && bun run start", + "start:web:prod": "cd ./apps/frontend && bun run start", "dev": "concurrently --success first -n \"server,web\" --prefix-colors \"cyan,magenta\" --prefix \"{name} {time}\" \"bun run dev:server\" \"bun run dev:web\"", - "dev:web": "cd ./web && bun run dev", - "dev:server": "cd ./server && bun run start:dev", - "lint": "bun run lint:server && bun run lint:web && bun run lint:shared", - "lint:server": "cd ./server && bun run lint", - "lint:web": "cd ./web && bun run lint", - "lint:shared": "cd ./shared && bun run lint", - "test": "bun run test:server && bun run test:shared", - "test:server": "cd ./server && bun run test", - "test:shared": "cd ./shared && bun run test", + "dev:web": "cd ./apps/frontend && bun run dev", + "dev:server": "cd ./packages/backend && bun run start:dev", + "lint": "bun run lint:server && bun run lint:web && bun run lint:database && bun run lint:song && bun run lint:sounds && bun run lint:thumbnail", + "lint:server": "cd ./packages/backend && bun run lint", + "lint:web": "cd ./apps/frontend && bun run lint", + "lint:database": "cd ./packages/database && bun run lint", + "lint:song": "cd ./packages/song && bun run lint", + "lint:sounds": "cd ./packages/sounds && bun run lint", + "lint:thumbnail": "cd ./packages/thumbnail && bun run lint", + "test": "bun run test:server && bun run test:web && bun run test:database && bun run test:song && bun run test:sounds && bun run test:thumbnail", + "test:server": "cd ./packages/backend && bun run test", + "test:web": "cd ./apps/frontend && bun run test", + "test:database": "cd ./packages/database && bun run test", + "test:song": "cd ./packages/song && bun run test", + "test:sounds": "cd ./packages/sounds && bun run test", + "test:thumbnail": "cd ./packages/thumbnail && bun run test", "cy:open": "bun run test:cy", "test:cy": "cd ./tests && bun run cy:open", "prettier": "prettier --write .", - "build:data": "ts-node ./build.ts" + "build:data": "bun ./build.ts" }, "keywords": [], "author": "", diff --git a/packages/database/package.json b/packages/database/package.json index 2154c9a7..4830ef31 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -16,7 +16,9 @@ "build": "bun run clean && bun run build:js && bun run build:types", "build:js": "tsc --project tsconfig.build.json --declaration false --emitDeclarationOnly false", "build:types": "tsc --project tsconfig.build.json --emitDeclarationOnly", - "clean": "rm -rf dist" + "clean": "rm -rf dist", + "lint": "eslint \"src/**/*.ts\" --fix", + "test": "bun test" }, "devDependencies": { "@types/bun": "latest", diff --git a/packages/song/package.json b/packages/song/package.json index cc21ac7e..c44c8fce 100644 --- a/packages/song/package.json +++ b/packages/song/package.json @@ -15,7 +15,9 @@ "scripts": { "build": "bun run clean && bun build src/index.ts --outdir dist --target node && bun run build:types", "build:types": "tsc --project tsconfig.build.json", - "clean": "rm -rf dist" + "clean": "rm -rf dist", + "lint": "eslint \"src/**/*.ts\" --fix", + "test": "bun test" }, "devDependencies": { "@types/bun": "latest", diff --git a/packages/sounds/package.json b/packages/sounds/package.json index 8fdd97c6..c971e5f5 100644 --- a/packages/sounds/package.json +++ b/packages/sounds/package.json @@ -15,7 +15,9 @@ "scripts": { "build": "bun run clean && bun build src/index.ts --outdir dist --target node && bun run build:types", "build:types": "tsc --project tsconfig.build.json", - "clean": "rm -rf dist" + "clean": "rm -rf dist", + "lint": "eslint \"src/**/*.ts\" --fix", + "test": "bun test" }, "devDependencies": { "@types/bun": "latest", diff --git a/packages/thumbnail/package.json b/packages/thumbnail/package.json index 20d73c03..837efd80 100644 --- a/packages/thumbnail/package.json +++ b/packages/thumbnail/package.json @@ -15,7 +15,9 @@ "scripts": { "build": "bun run clean && bun build src/index.ts --outdir dist --target node && bun run build:types", "build:types": "tsc --project tsconfig.build.json", - "clean": "rm -rf dist" + "clean": "rm -rf dist", + "lint": "eslint \"src/**/*.ts\" --fix", + "test": "jest" }, "devDependencies": { "@types/bun": "latest", From 52520ecaa8be34dc2882e9fafea0b544bba20f36 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Fri, 25 Jul 2025 22:17:21 -0300 Subject: [PATCH 17/17] refactor: update test scripts in package.json for backend, database, song, and sounds packages to use glob pattern for improved test discovery --- package.json | 8 +------- packages/backend/package.json | 8 ++++---- packages/database/package.json | 2 +- packages/song/package.json | 2 +- packages/sounds/package.json | 2 +- 5 files changed, 8 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index e6b5cec0..690e2b76 100644 --- a/package.json +++ b/package.json @@ -20,13 +20,7 @@ "lint:song": "cd ./packages/song && bun run lint", "lint:sounds": "cd ./packages/sounds && bun run lint", "lint:thumbnail": "cd ./packages/thumbnail && bun run lint", - "test": "bun run test:server && bun run test:web && bun run test:database && bun run test:song && bun run test:sounds && bun run test:thumbnail", - "test:server": "cd ./packages/backend && bun run test", - "test:web": "cd ./apps/frontend && bun run test", - "test:database": "cd ./packages/database && bun run test", - "test:song": "cd ./packages/song && bun run test", - "test:sounds": "cd ./packages/sounds && bun run test", - "test:thumbnail": "cd ./packages/thumbnail && bun run test", + "test": "bun test **/*.spec.ts --coverage", "cy:open": "bun run test:cy", "test:cy": "cd ./tests && bun run cy:open", "prettier": "prettier --write .", diff --git a/packages/backend/package.json b/packages/backend/package.json index a95891e9..e754c48d 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -15,11 +15,11 @@ "start:debug": "NODE_ENV=development tsc-watch --onSuccess \"bun . --inspect\"", "start:prod": "NODE_ENV=production bun dist/main.js", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", - "test": "bun test", - "test:watch": "bun test --watch", - "test:cov": "bun test --coverage", + "test": "bun test **/*.spec.ts", + "test:watch": "bun test **/*.spec.ts --watch", + "test:cov": "bun test **/*.spec.ts --coverage", "test:debug": "bun --inspect-brk --runInBand", - "test:e2e": "bun test ./test/app.e2e-spec.ts" + "test:e2e": "bun test **/*.spec.ts ./test/app.e2e-spec.ts" }, "dependencies": { "@aws-sdk/client-s3": "3.717.0", diff --git a/packages/database/package.json b/packages/database/package.json index 4830ef31..67a55274 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -18,7 +18,7 @@ "build:types": "tsc --project tsconfig.build.json --emitDeclarationOnly", "clean": "rm -rf dist", "lint": "eslint \"src/**/*.ts\" --fix", - "test": "bun test" + "test": "bun test **/*.spec.ts" }, "devDependencies": { "@types/bun": "latest", diff --git a/packages/song/package.json b/packages/song/package.json index c44c8fce..260524a4 100644 --- a/packages/song/package.json +++ b/packages/song/package.json @@ -17,7 +17,7 @@ "build:types": "tsc --project tsconfig.build.json", "clean": "rm -rf dist", "lint": "eslint \"src/**/*.ts\" --fix", - "test": "bun test" + "test": "bun test **/*.spec.ts" }, "devDependencies": { "@types/bun": "latest", diff --git a/packages/sounds/package.json b/packages/sounds/package.json index c971e5f5..56538195 100644 --- a/packages/sounds/package.json +++ b/packages/sounds/package.json @@ -17,7 +17,7 @@ "build:types": "tsc --project tsconfig.build.json", "clean": "rm -rf dist", "lint": "eslint \"src/**/*.ts\" --fix", - "test": "bun test" + "test": "bun test **/*.spec.ts" }, "devDependencies": { "@types/bun": "latest",