Files
perfect-dark/src/lib/mp3/decoder.c
T
2023-05-06 22:28:50 +10:00

2824 lines
87 KiB
C

#include <ultra64.h>
#include "internal.h"
#include "mp3.h"
#define CHANNELMODE_STEREO 0
#define CHANNELMODE_JOINTSTEREO 1
#define CHANNELMODE_DUALMONO 2
#define CHANNELMODE_SINGLEMONO 3
#define VERSION_2 0x0
#define VERSION_1 0x1
struct mp3decthing {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
u32 unk04;
};
extern const struct mp3decthing var70054b40[];
f32 sine_block[4][36];
struct mp3decfourbytes *var8009c640;
f32 *var8009c644;
f32 *var8009c648;
const struct mp3decthing var70054b40[] = {
{ 0, 0, 1, 0, 1 },
{ 0, 1, 3, 0, 4 },
{ 1, 0, 2, 0, 2 },
{ 1, 1, 3, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70054b68[] = {
{ 0, 0, 1, 0, 1 },
{ 0, 1, 3, 0, 2 },
{ 0, 2, 6, 0, 32 },
{ 1, 0, 3, 0, 6 },
{ 1, 1, 3, 0, 4 },
{ 1, 2, 5, 0, 16 },
{ 2, 0, 5, 0, 24 },
{ 2, 1, 5, 0, 8 },
{ 2, 2, 6, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70054bb8[] = {
{ 0, 0, 2, 0, 3 },
{ 0, 1, 2, 0, 1 },
{ 0, 2, 6, 0, 32 },
{ 1, 0, 3, 0, 4 },
{ 1, 1, 2, 0, 2 },
{ 1, 2, 5, 0, 16 },
{ 2, 0, 5, 0, 24 },
{ 2, 1, 5, 0, 8 },
{ 2, 2, 6, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70054c08[] = {
{ 0, 0, 1, 0, 1 },
{ 0, 1, 3, 0, 2 },
{ 0, 2, 6, 0, 24 },
{ 0, 3, 7, 0, 80 },
{ 1, 0, 3, 0, 6 },
{ 1, 1, 3, 0, 4 },
{ 1, 2, 6, 0, 8 },
{ 1, 3, 7, 0, 16 },
{ 2, 0, 6, 0, 56 },
{ 2, 1, 6, 0, 40 },
{ 2, 2, 7, 0, 112 },
{ 2, 3, 8, 0, 128 },
{ 3, 0, 7, 0, 48 },
{ 3, 1, 6, 0, 32 },
{ 3, 2, 7, 0, 64 },
{ 3, 3, 8, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70054c90[] = {
{ 0, 0, 3, 0, 7 },
{ 0, 1, 3, 0, 6 },
{ 0, 2, 5, 0, 20 },
{ 0, 3, 7, 0, 64 },
{ 1, 0, 3, 0, 3 },
{ 1, 1, 2, 0, 1 },
{ 1, 2, 4, 0, 12 },
{ 1, 3, 5, 0, 8 },
{ 2, 0, 4, 0, 10 },
{ 2, 1, 4, 0, 2 },
{ 2, 2, 5, 0, 4 },
{ 2, 3, 6, 0, 32 },
{ 3, 0, 6, 0, 48 },
{ 3, 1, 5, 0, 24 },
{ 3, 2, 6, 0, 16 },
{ 3, 3, 7, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70054d18[] = {
{ 0, 0, 1, 0, 1 },
{ 0, 1, 3, 0, 2 },
{ 0, 2, 6, 0, 20 },
{ 0, 3, 8, 0, 200 },
{ 0, 4, 8, 0, 8 },
{ 0, 5, 9, 0, 160 },
{ 1, 0, 3, 0, 6 },
{ 1, 1, 4, 0, 12 },
{ 1, 2, 6, 0, 56 },
{ 1, 3, 7, 0, 40 },
{ 1, 4, 7, 0, 80 },
{ 1, 5, 8, 0, 192 },
{ 2, 0, 6, 0, 52 },
{ 2, 1, 5, 0, 4 },
{ 2, 2, 7, 0, 88 },
{ 2, 3, 8, 0, 136 },
{ 2, 4, 8, 0, 16 },
{ 2, 5, 9, 0, 64 },
{ 3, 0, 7, 0, 24 },
{ 3, 1, 7, 0, 104 },
{ 3, 2, 8, 0, 72 },
{ 3, 3, 9, 0, 480 },
{ 3, 4, 9, 0, 416 },
{ 3, 5, 9, 0, 128 },
{ 4, 0, 7, 0, 112 },
{ 4, 1, 7, 0, 48 },
{ 4, 2, 8, 0, 144 },
{ 4, 3, 9, 0, 224 },
{ 4, 4, 9, 0, 384 },
{ 4, 5, 10, 0, 512 },
{ 5, 0, 8, 0, 96 },
{ 5, 1, 8, 0, 32 },
{ 5, 2, 9, 0, 320 },
{ 5, 3, 10, 0, 768 },
{ 5, 4, 10, 0, 256 },
{ 5, 5, 10, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70054e40[] = {
{ 0, 0, 2, 0, 3 },
{ 0, 1, 3, 0, 1 },
{ 0, 2, 6, 0, 24 },
{ 0, 3, 8, 0, 72 },
{ 0, 4, 8, 0, 48 },
{ 0, 5, 9, 0, 320 },
{ 1, 0, 3, 0, 5 },
{ 1, 1, 2, 0, 2 },
{ 1, 2, 4, 0, 4 },
{ 1, 3, 8, 0, 8 },
{ 1, 4, 8, 0, 144 },
{ 1, 5, 8, 0, 192 },
{ 2, 0, 6, 0, 56 },
{ 2, 1, 4, 0, 12 },
{ 2, 2, 6, 0, 40 },
{ 2, 3, 8, 0, 112 },
{ 2, 4, 8, 0, 224 },
{ 2, 5, 9, 0, 384 },
{ 3, 0, 8, 0, 200 },
{ 3, 1, 8, 0, 136 },
{ 3, 2, 8, 0, 240 },
{ 3, 3, 9, 0, 352 },
{ 3, 4, 9, 0, 160 },
{ 3, 5, 10, 0, 128 },
{ 4, 0, 8, 0, 176 },
{ 4, 1, 7, 0, 80 },
{ 4, 2, 8, 0, 16 },
{ 4, 3, 9, 0, 416 },
{ 4, 4, 10, 0, 640 },
{ 4, 5, 10, 0, 512 },
{ 5, 0, 9, 0, 96 },
{ 5, 1, 8, 0, 32 },
{ 5, 2, 9, 0, 64 },
{ 5, 3, 9, 0, 256 },
{ 5, 4, 11, 0, 1024 },
{ 5, 5, 11, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70054f68[] = {
{ 0, 0, 3, 0, 7 },
{ 0, 1, 3, 0, 5 },
{ 0, 2, 5, 0, 18 },
{ 0, 3, 6, 0, 28 },
{ 0, 4, 8, 0, 240 },
{ 0, 5, 9, 0, 448 },
{ 1, 0, 3, 0, 3 },
{ 1, 1, 3, 0, 1 },
{ 1, 2, 4, 0, 10 },
{ 1, 3, 5, 0, 20 },
{ 1, 4, 6, 0, 24 },
{ 1, 5, 8, 0, 224 },
{ 2, 0, 4, 0, 14 },
{ 2, 1, 4, 0, 6 },
{ 2, 2, 5, 0, 2 },
{ 2, 3, 6, 0, 4 },
{ 2, 4, 7, 0, 8 },
{ 2, 5, 8, 0, 160 },
{ 3, 0, 6, 0, 60 },
{ 3, 1, 5, 0, 12 },
{ 3, 2, 6, 0, 36 },
{ 3, 3, 7, 0, 40 },
{ 3, 4, 7, 0, 80 },
{ 3, 5, 8, 0, 128 },
{ 4, 0, 7, 0, 104 },
{ 4, 1, 6, 0, 56 },
{ 4, 2, 7, 0, 72 },
{ 4, 3, 7, 0, 48 },
{ 4, 4, 8, 0, 32 },
{ 4, 5, 9, 0, 256 },
{ 5, 0, 8, 0, 112 },
{ 5, 1, 7, 0, 16 },
{ 5, 2, 8, 0, 96 },
{ 5, 3, 8, 0, 64 },
{ 5, 4, 9, 0, 192 },
{ 5, 5, 9, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70055090[] = {
{ 0, 0, 1, 0, 1 },
{ 0, 1, 3, 0, 2 },
{ 0, 2, 6, 0, 20 },
{ 0, 3, 8, 0, 232 },
{ 0, 4, 9, 0, 392 },
{ 0, 5, 9, 0, 240 },
{ 0, 6, 9, 0, 96 },
{ 0, 7, 10, 0, 544 },
{ 1, 0, 3, 0, 6 },
{ 1, 1, 4, 0, 12 },
{ 1, 2, 6, 0, 4 },
{ 1, 3, 7, 0, 24 },
{ 1, 4, 8, 0, 72 },
{ 1, 5, 9, 0, 336 },
{ 1, 6, 8, 0, 48 },
{ 1, 7, 8, 0, 224 },
{ 2, 0, 6, 0, 52 },
{ 2, 1, 6, 0, 36 },
{ 2, 2, 7, 0, 120 },
{ 2, 3, 8, 0, 168 },
{ 2, 4, 9, 0, 8 },
{ 2, 5, 10, 0, 80 },
{ 2, 6, 9, 0, 400 },
{ 2, 7, 9, 0, 192 },
{ 3, 0, 7, 0, 56 },
{ 3, 1, 7, 0, 88 },
{ 3, 2, 8, 0, 104 },
{ 3, 3, 9, 0, 136 },
{ 3, 4, 10, 0, 464 },
{ 3, 5, 10, 0, 928 },
{ 3, 6, 9, 0, 144 },
{ 3, 7, 10, 0, 896 },
{ 4, 0, 8, 0, 40 },
{ 4, 1, 8, 0, 200 },
{ 4, 2, 9, 0, 264 },
{ 4, 3, 10, 0, 976 },
{ 4, 4, 10, 0, 864 },
{ 4, 5, 10, 0, 416 },
{ 4, 6, 10, 0, 576 },
{ 4, 7, 10, 0, 768 },
{ 5, 0, 9, 0, 496 },
{ 5, 1, 9, 0, 208 },
{ 5, 2, 10, 0, 592 },
{ 5, 3, 10, 0, 352 },
{ 5, 4, 11, 0, 1344 },
{ 5, 5, 11, 0, 320 },
{ 5, 6, 10, 0, 640 },
{ 5, 7, 11, 0, 1536 },
{ 6, 0, 8, 0, 112 },
{ 6, 1, 8, 0, 176 },
{ 6, 2, 9, 0, 160 },
{ 6, 3, 10, 0, 832 },
{ 6, 4, 10, 0, 32 },
{ 6, 5, 10, 0, 384 },
{ 6, 6, 11, 0, 1280 },
{ 6, 7, 11, 0, 1024 },
{ 7, 0, 9, 0, 288 },
{ 7, 1, 8, 0, 16 },
{ 7, 2, 9, 0, 448 },
{ 7, 3, 10, 0, 64 },
{ 7, 4, 10, 0, 128 },
{ 7, 5, 11, 0, 256 },
{ 7, 6, 11, 0, 512 },
{ 7, 7, 11, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70055298[] = {
{ 0, 0, 2, 0, 3 },
{ 0, 1, 3, 0, 1 },
{ 0, 2, 5, 0, 10 },
{ 0, 3, 7, 0, 12 },
{ 0, 4, 8, 0, 68 },
{ 0, 5, 9, 0, 264 },
{ 0, 6, 8, 0, 168 },
{ 0, 7, 9, 0, 480 },
{ 1, 0, 3, 0, 5 },
{ 1, 1, 3, 0, 6 },
{ 1, 2, 4, 0, 2 },
{ 1, 3, 6, 0, 20 },
{ 1, 4, 8, 0, 4 },
{ 1, 5, 8, 0, 136 },
{ 1, 6, 7, 0, 104 },
{ 1, 7, 8, 0, 80 },
{ 2, 0, 5, 0, 26 },
{ 2, 1, 5, 0, 28 },
{ 2, 2, 6, 0, 44 },
{ 2, 3, 7, 0, 36 },
{ 2, 4, 8, 0, 120 },
{ 2, 5, 9, 0, 496 },
{ 2, 6, 8, 0, 40 },
{ 2, 7, 8, 0, 160 },
{ 3, 0, 7, 0, 76 },
{ 3, 1, 6, 0, 52 },
{ 3, 2, 7, 0, 100 },
{ 3, 3, 9, 0, 440 },
{ 3, 4, 8, 0, 216 },
{ 3, 5, 10, 0, 288 },
{ 3, 6, 8, 0, 48 },
{ 3, 7, 9, 0, 320 },
{ 4, 0, 8, 0, 196 },
{ 4, 1, 8, 0, 132 },
{ 4, 2, 8, 0, 248 },
{ 4, 3, 9, 0, 184 },
{ 4, 4, 9, 0, 240 },
{ 4, 5, 10, 0, 32 },
{ 4, 6, 9, 0, 448 },
{ 4, 7, 10, 0, 640 },
{ 5, 0, 8, 0, 56 },
{ 5, 1, 8, 0, 88 },
{ 5, 2, 9, 0, 8 },
{ 5, 3, 10, 0, 800 },
{ 5, 4, 10, 0, 544 },
{ 5, 5, 11, 0, 1920 },
{ 5, 6, 10, 0, 64 },
{ 5, 7, 11, 0, 896 },
{ 6, 0, 8, 0, 112 },
{ 6, 1, 7, 0, 24 },
{ 6, 2, 7, 0, 72 },
{ 6, 3, 8, 0, 176 },
{ 6, 4, 9, 0, 224 },
{ 6, 5, 10, 0, 576 },
{ 6, 6, 10, 0, 128 },
{ 6, 7, 10, 0, 512 },
{ 7, 0, 8, 0, 208 },
{ 7, 1, 7, 0, 16 },
{ 7, 2, 8, 0, 96 },
{ 7, 3, 9, 0, 192 },
{ 7, 4, 10, 0, 384 },
{ 7, 5, 10, 0, 768 },
{ 7, 6, 10, 0, 256 },
{ 7, 7, 10, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var700554a0[] = {
{ 0, 0, 4, 0, 9 },
{ 0, 1, 3, 0, 3 },
{ 0, 2, 5, 0, 1 },
{ 0, 3, 7, 0, 66 },
{ 0, 4, 8, 0, 148 },
{ 0, 5, 9, 0, 456 },
{ 0, 6, 9, 0, 200 },
{ 0, 7, 9, 0, 176 },
{ 1, 0, 3, 0, 7 },
{ 1, 1, 3, 0, 5 },
{ 1, 2, 4, 0, 6 },
{ 1, 3, 5, 0, 18 },
{ 1, 4, 7, 0, 116 },
{ 1, 5, 7, 0, 4 },
{ 1, 6, 8, 0, 88 },
{ 1, 7, 8, 0, 208 },
{ 2, 0, 5, 0, 17 },
{ 2, 1, 4, 0, 14 },
{ 2, 2, 5, 0, 26 },
{ 2, 3, 6, 0, 28 },
{ 2, 4, 7, 0, 84 },
{ 2, 5, 8, 0, 120 },
{ 2, 6, 7, 0, 40 },
{ 2, 7, 8, 0, 224 },
{ 3, 0, 6, 0, 34 },
{ 3, 1, 5, 0, 10 },
{ 3, 2, 6, 0, 60 },
{ 3, 3, 6, 0, 12 },
{ 3, 4, 7, 0, 36 },
{ 3, 5, 8, 0, 56 },
{ 3, 6, 8, 0, 112 },
{ 3, 7, 8, 0, 160 },
{ 4, 0, 7, 0, 2 },
{ 4, 1, 6, 0, 44 },
{ 4, 2, 7, 0, 52 },
{ 4, 3, 7, 0, 100 },
{ 4, 4, 8, 0, 72 },
{ 4, 5, 8, 0, 8 },
{ 4, 6, 8, 0, 144 },
{ 4, 7, 9, 0, 320 },
{ 5, 0, 8, 0, 20 },
{ 5, 1, 7, 0, 68 },
{ 5, 2, 8, 0, 248 },
{ 5, 3, 8, 0, 184 },
{ 5, 4, 8, 0, 136 },
{ 5, 5, 9, 0, 352 },
{ 5, 6, 8, 0, 32 },
{ 5, 7, 9, 0, 128 },
{ 6, 0, 8, 0, 216 },
{ 6, 1, 7, 0, 24 },
{ 6, 2, 7, 0, 104 },
{ 6, 3, 8, 0, 240 },
{ 6, 4, 8, 0, 80 },
{ 6, 5, 9, 0, 448 },
{ 6, 6, 9, 0, 64 },
{ 6, 7, 10, 0, 512 },
{ 7, 0, 9, 0, 432 },
{ 7, 1, 8, 0, 48 },
{ 7, 2, 8, 0, 16 },
{ 7, 3, 9, 0, 96 },
{ 7, 4, 9, 0, 192 },
{ 7, 5, 9, 0, 384 },
{ 7, 6, 9, 0, 256 },
{ 7, 7, 10, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var700556a8[] = {
{ 0, 0, 1, 0, 1 },
{ 0, 1, 4, 0, 10 },
{ 0, 2, 6, 0, 28 },
{ 0, 3, 7, 0, 84 },
{ 0, 4, 8, 0, 68 },
{ 0, 5, 9, 0, 408 },
{ 0, 6, 9, 0, 232 },
{ 0, 7, 10, 0, 904 },
{ 0, 8, 9, 0, 168 },
{ 0, 9, 10, 0, 176 },
{ 0, 10, 11, 0, 272 },
{ 0, 11, 11, 0, 352 },
{ 0, 12, 12, 0, 3104 },
{ 0, 13, 12, 0, 832 },
{ 0, 14, 13, 0, 6784 },
{ 0, 15, 13, 0, 6400 },
{ 1, 0, 3, 0, 6 },
{ 1, 1, 4, 0, 2 },
{ 1, 2, 6, 0, 12 },
{ 1, 3, 7, 0, 100 },
{ 1, 4, 8, 0, 248 },
{ 1, 5, 8, 0, 88 },
{ 1, 6, 9, 0, 104 },
{ 1, 7, 9, 0, 264 },
{ 1, 8, 9, 0, 496 },
{ 1, 9, 9, 0, 48 },
{ 1, 10, 10, 0, 16 },
{ 1, 11, 10, 0, 96 },
{ 1, 12, 11, 0, 1984 },
{ 1, 13, 12, 0, 3136 },
{ 1, 14, 12, 0, 1664 },
{ 1, 15, 12, 0, 1792 },
{ 2, 0, 6, 0, 60 },
{ 2, 1, 6, 0, 44 },
{ 2, 2, 7, 0, 116 },
{ 2, 3, 8, 0, 36 },
{ 2, 4, 9, 0, 440 },
{ 2, 5, 9, 0, 280 },
{ 2, 6, 10, 0, 712 },
{ 2, 7, 10, 0, 520 },
{ 2, 8, 9, 0, 368 },
{ 2, 9, 10, 0, 80 },
{ 2, 10, 10, 0, 480 },
{ 2, 11, 11, 0, 160 },
{ 2, 12, 11, 0, 1728 },
{ 2, 13, 12, 0, 2112 },
{ 2, 14, 13, 0, 2688 },
{ 2, 15, 13, 0, 256 },
{ 3, 0, 7, 0, 52 },
{ 3, 1, 7, 0, 20 },
{ 3, 2, 8, 0, 164 },
{ 3, 3, 9, 0, 376 },
{ 3, 4, 9, 0, 56 },
{ 3, 5, 10, 0, 968 },
{ 3, 6, 10, 0, 584 },
{ 3, 7, 10, 0, 8 },
{ 3, 8, 10, 0, 848 },
{ 3, 9, 11, 0, 400 },
{ 3, 10, 11, 0, 224 },
{ 3, 11, 11, 0, 1312 },
{ 3, 12, 11, 0, 704 },
{ 3, 13, 12, 0, 3968 },
{ 3, 14, 13, 0, 4864 },
{ 3, 15, 13, 0, 3584 },
{ 4, 0, 8, 0, 196 },
{ 4, 1, 7, 0, 4 },
{ 4, 2, 9, 0, 120 },
{ 4, 3, 9, 0, 312 },
{ 4, 4, 10, 0, 536 },
{ 4, 5, 10, 0, 840 },
{ 4, 6, 11, 0, 624 },
{ 4, 7, 11, 0, 1744 },
{ 4, 8, 10, 0, 432 },
{ 4, 9, 11, 0, 1168 },
{ 4, 10, 11, 0, 1888 },
{ 4, 11, 12, 0, 2368 },
{ 4, 12, 12, 0, 192 },
{ 4, 13, 13, 0, 5504 },
{ 4, 14, 13, 0, 7424 },
{ 4, 15, 14, 0, 1536 },
{ 5, 0, 9, 0, 184 },
{ 5, 1, 8, 0, 216 },
{ 5, 2, 9, 0, 152 },
{ 5, 3, 10, 0, 24 },
{ 5, 4, 10, 0, 200 },
{ 5, 5, 10, 0, 392 },
{ 5, 6, 11, 0, 1488 },
{ 5, 7, 11, 0, 336 },
{ 5, 8, 11, 0, 1424 },
{ 5, 9, 11, 0, 736 },
{ 5, 10, 12, 0, 3872 },
{ 5, 11, 11, 0, 1472 },
{ 5, 12, 13, 0, 2624 },
{ 5, 13, 13, 0, 4480 },
{ 5, 14, 14, 0, 9472 },
{ 5, 15, 14, 0, 8704 },
{ 6, 0, 9, 0, 488 },
{ 6, 1, 9, 0, 360 },
{ 6, 2, 10, 0, 456 },
{ 6, 3, 10, 0, 328 },
{ 6, 4, 11, 0, 1648 },
{ 6, 5, 11, 0, 976 },
{ 6, 6, 11, 0, 720 },
{ 6, 7, 11, 0, 1936 },
{ 6, 8, 11, 0, 1296 },
{ 6, 9, 12, 0, 3232 },
{ 6, 10, 12, 0, 3616 },
{ 6, 11, 12, 0, 1216 },
{ 6, 12, 13, 0, 7040 },
{ 6, 13, 13, 0, 3200 },
{ 6, 14, 14, 0, 2304 },
{ 6, 15, 14, 0, 15360 },
{ 7, 0, 10, 0, 72 },
{ 7, 1, 9, 0, 136 },
{ 7, 2, 10, 0, 112 },
{ 7, 3, 11, 0, 2000 },
{ 7, 4, 11, 0, 464 },
{ 7, 5, 11, 0, 1360 },
{ 7, 6, 12, 0, 3488 },
{ 7, 7, 12, 0, 1440 },
{ 7, 8, 12, 0, 1696 },
{ 7, 9, 12, 0, 2336 },
{ 7, 10, 13, 0, 5696 },
{ 7, 11, 13, 0, 4160 },
{ 7, 12, 13, 0, 6528 },
{ 7, 13, 14, 0, 3328 },
{ 7, 14, 16, 0, 54272 },
{ 7, 15, 16, 0, 21504 },
{ 8, 0, 9, 0, 424 },
{ 8, 1, 8, 0, 40 },
{ 8, 2, 9, 0, 240 },
{ 8, 3, 10, 0, 208 },
{ 8, 4, 10, 0, 944 },
{ 8, 5, 11, 0, 912 },
{ 8, 6, 11, 0, 144 },
{ 8, 7, 12, 0, 3744 },
{ 8, 8, 12, 0, 1824 },
{ 8, 9, 12, 0, 3008 },
{ 8, 10, 12, 0, 1856 },
{ 8, 11, 13, 0, 3456 },
{ 8, 12, 13, 0, 5248 },
{ 8, 13, 14, 0, 7680 },
{ 8, 14, 15, 0, 5120 },
{ 8, 15, 15, 0, 1024 },
{ 9, 0, 10, 0, 688 },
{ 9, 1, 9, 0, 304 },
{ 9, 2, 10, 0, 592 },
{ 9, 3, 10, 0, 656 },
{ 9, 4, 11, 0, 416 },
{ 9, 5, 11, 0, 1760 },
{ 9, 6, 11, 0, 864 },
{ 9, 7, 13, 0, 4416 },
{ 9, 8, 12, 0, 1056 },
{ 9, 9, 13, 0, 1600 },
{ 9, 10, 13, 0, 4992 },
{ 9, 11, 14, 0, 6912 },
{ 9, 12, 14, 0, 10496 },
{ 9, 13, 14, 0, 4608 },
{ 9, 14, 16, 0, 58368 },
{ 9, 15, 15, 0, 26624 },
{ 10, 0, 10, 0, 784 },
{ 10, 1, 10, 0, 528 },
{ 10, 2, 10, 0, 992 },
{ 10, 3, 11, 0, 1248 },
{ 10, 4, 11, 0, 672 },
{ 10, 5, 12, 0, 1184 },
{ 10, 6, 12, 0, 288 },
{ 10, 7, 13, 0, 320 },
{ 10, 8, 12, 0, 3904 },
{ 10, 9, 13, 0, 2944 },
{ 10, 10, 14, 0, 15104 },
{ 10, 11, 13, 0, 5376 },
{ 10, 12, 14, 0, 6656 },
{ 10, 13, 15, 0, 11264 },
{ 10, 14, 16, 0, 25600 },
{ 10, 15, 17, 0, 53248 },
{ 11, 0, 11, 0, 1376 },
{ 11, 1, 10, 0, 608 },
{ 11, 2, 10, 0, 928 },
{ 11, 3, 11, 0, 800 },
{ 11, 4, 12, 0, 1568 },
{ 11, 5, 12, 0, 960 },
{ 11, 6, 12, 0, 3264 },
{ 11, 7, 12, 0, 576 },
{ 11, 8, 13, 0, 7552 },
{ 11, 9, 13, 0, 2816 },
{ 11, 10, 13, 0, 2176 },
{ 11, 11, 14, 0, 14848 },
{ 11, 12, 15, 0, 27648 },
{ 11, 13, 15, 0, 14336 },
{ 11, 14, 15, 0, 18432 },
{ 11, 15, 16, 0, 57344 },
{ 12, 0, 11, 0, 544 },
{ 12, 1, 11, 0, 32 },
{ 12, 2, 11, 0, 448 },
{ 12, 3, 12, 0, 3648 },
{ 12, 4, 12, 0, 2240 },
{ 12, 5, 13, 0, 6720 },
{ 12, 6, 12, 0, 1920 },
{ 12, 7, 13, 0, 1408 },
{ 12, 8, 14, 0, 768 },
{ 12, 9, 14, 0, 1280 },
{ 12, 10, 15, 0, 5632 },
{ 12, 11, 15, 0, 7168 },
{ 12, 12, 15, 0, 9216 },
{ 12, 13, 16, 0, 34816 },
{ 12, 14, 16, 0, 36864 },
{ 12, 15, 16, 0, 40960 },
{ 13, 0, 12, 0, 2880 },
{ 13, 1, 11, 0, 1344 },
{ 13, 2, 12, 0, 1088 },
{ 13, 3, 13, 0, 64 },
{ 13, 4, 13, 0, 896 },
{ 13, 5, 13, 0, 2432 },
{ 13, 6, 14, 0, 8960 },
{ 13, 7, 14, 0, 11520 },
{ 13, 8, 14, 0, 15872 },
{ 13, 9, 14, 0, 12800 },
{ 13, 10, 14, 0, 3072 },
{ 13, 11, 15, 0, 30720 },
{ 13, 12, 16, 0, 20480 },
{ 13, 13, 15, 0, 28672 },
{ 13, 14, 16, 0, 24576 },
{ 13, 15, 16, 0, 49152 },
{ 14, 0, 13, 0, 384 },
{ 14, 1, 12, 0, 3712 },
{ 14, 2, 12, 0, 640 },
{ 14, 3, 13, 0, 7296 },
{ 14, 4, 13, 0, 1152 },
{ 14, 5, 13, 0, 6272 },
{ 14, 6, 15, 0, 22016 },
{ 14, 7, 14, 0, 10752 },
{ 14, 8, 14, 0, 512 },
{ 14, 9, 17, 0, 118784 },
{ 14, 10, 15, 0, 22528 },
{ 14, 11, 15, 0, 10240 },
{ 14, 12, 15, 0, 12288 },
{ 14, 13, 17, 0, 65536 },
{ 14, 14, 16, 0, 8192 },
{ 14, 15, 16, 0, 16384 },
{ 15, 0, 12, 0, 128 },
{ 15, 1, 12, 0, 3840 },
{ 15, 2, 13, 0, 4352 },
{ 15, 3, 14, 0, 13824 },
{ 15, 4, 14, 0, 9728 },
{ 15, 5, 14, 0, 2560 },
{ 15, 6, 15, 0, 23552 },
{ 15, 7, 14, 0, 13312 },
{ 15, 8, 15, 0, 17408 },
{ 15, 9, 15, 0, 6144 },
{ 15, 10, 16, 0, 2048 },
{ 15, 11, 16, 0, 4096 },
{ 15, 12, 19, 0, 262144 },
{ 15, 13, 18, 0, 131072 },
{ 15, 14, 19, 0, 0 },
{ 15, 15, 16, 0, 32768 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70055eb0[] = {
{ 0, 0, 3, 0, 7 },
{ 0, 1, 4, 0, 3 },
{ 0, 2, 5, 0, 9 },
{ 0, 3, 7, 0, 86 },
{ 0, 4, 7, 0, 122 },
{ 0, 5, 8, 0, 50 },
{ 0, 6, 9, 0, 124 },
{ 0, 7, 9, 0, 108 },
{ 0, 8, 9, 0, 308 },
{ 0, 9, 10, 0, 888 },
{ 0, 10, 10, 0, 216 },
{ 0, 11, 11, 0, 1904 },
{ 0, 12, 11, 0, 1712 },
{ 0, 13, 11, 0, 1104 },
{ 0, 14, 12, 0, 1504 },
{ 0, 15, 13, 0, 8064 },
{ 1, 0, 4, 0, 11 },
{ 1, 1, 3, 0, 5 },
{ 1, 2, 5, 0, 1 },
{ 1, 3, 6, 0, 54 },
{ 1, 4, 7, 0, 58 },
{ 1, 5, 7, 0, 18 },
{ 1, 6, 8, 0, 188 },
{ 1, 7, 8, 0, 204 },
{ 1, 8, 8, 0, 84 },
{ 1, 9, 9, 0, 196 },
{ 1, 10, 9, 0, 88 },
{ 1, 11, 10, 0, 808 },
{ 1, 12, 10, 0, 520 },
{ 1, 13, 10, 0, 592 },
{ 1, 14, 11, 0, 1760 },
{ 1, 15, 11, 0, 288 },
{ 2, 0, 5, 0, 25 },
{ 2, 1, 5, 0, 17 },
{ 2, 2, 5, 0, 30 },
{ 2, 3, 6, 0, 6 },
{ 2, 4, 7, 0, 74 },
{ 2, 5, 7, 0, 34 },
{ 2, 6, 8, 0, 220 },
{ 2, 7, 8, 0, 12 },
{ 2, 8, 8, 0, 20 },
{ 2, 9, 9, 0, 4 },
{ 2, 10, 9, 0, 152 },
{ 2, 11, 10, 0, 456 },
{ 2, 12, 10, 0, 496 },
{ 2, 13, 11, 0, 80 },
{ 2, 14, 11, 0, 224 },
{ 2, 15, 11, 0, 1056 },
{ 3, 0, 6, 0, 46 },
{ 3, 1, 6, 0, 14 },
{ 3, 2, 6, 0, 38 },
{ 3, 3, 7, 0, 106 },
{ 3, 4, 7, 0, 114 },
{ 3, 5, 8, 0, 252 },
{ 3, 6, 8, 0, 236 },
{ 3, 7, 9, 0, 372 },
{ 3, 8, 9, 0, 100 },
{ 3, 9, 9, 0, 440 },
{ 3, 10, 10, 0, 744 },
{ 3, 11, 10, 0, 72 },
{ 3, 12, 10, 0, 432 },
{ 3, 13, 11, 0, 1680 },
{ 3, 14, 11, 0, 608 },
{ 3, 15, 11, 0, 1472 },
{ 4, 0, 7, 0, 22 },
{ 4, 1, 6, 0, 26 },
{ 4, 2, 7, 0, 42 },
{ 4, 3, 7, 0, 10 },
{ 4, 4, 8, 0, 194 },
{ 4, 5, 8, 0, 156 },
{ 4, 6, 9, 0, 500 },
{ 4, 7, 9, 0, 484 },
{ 4, 8, 9, 0, 36 },
{ 4, 9, 9, 0, 312 },
{ 4, 10, 10, 0, 616 },
{ 4, 11, 10, 0, 648 },
{ 4, 12, 10, 0, 560 },
{ 4, 13, 11, 0, 528 },
{ 4, 14, 11, 0, 928 },
{ 4, 15, 11, 0, 1728 },
{ 5, 0, 8, 0, 178 },
{ 5, 1, 7, 0, 82 },
{ 5, 2, 7, 0, 98 },
{ 5, 3, 8, 0, 66 },
{ 5, 4, 8, 0, 92 },
{ 5, 5, 8, 0, 44 },
{ 5, 6, 9, 0, 436 },
{ 5, 7, 9, 0, 164 },
{ 5, 8, 9, 0, 248 },
{ 5, 9, 9, 0, 24 },
{ 5, 10, 10, 0, 968 },
{ 5, 11, 10, 0, 1008 },
{ 5, 12, 11, 0, 720 },
{ 5, 13, 11, 0, 992 },
{ 5, 14, 11, 0, 160 },
{ 5, 15, 12, 0, 1600 },
{ 6, 0, 9, 0, 380 },
{ 6, 1, 7, 0, 2 },
{ 6, 2, 8, 0, 60 },
{ 6, 3, 8, 0, 28 },
{ 6, 4, 8, 0, 76 },
{ 6, 5, 9, 0, 116 },
{ 6, 6, 9, 0, 228 },
{ 6, 7, 9, 0, 260 },
{ 6, 8, 9, 0, 472 },
{ 6, 9, 10, 0, 936 },
{ 6, 10, 10, 0, 904 },
{ 6, 11, 10, 0, 816 },
{ 6, 12, 11, 0, 1168 },
{ 6, 13, 11, 0, 1632 },
{ 6, 14, 12, 0, 1568 },
{ 6, 15, 12, 0, 1920 },
{ 7, 0, 9, 0, 364 },
{ 7, 1, 8, 0, 172 },
{ 7, 2, 8, 0, 140 },
{ 7, 3, 9, 0, 244 },
{ 7, 4, 9, 0, 52 },
{ 7, 5, 9, 0, 420 },
{ 7, 6, 9, 0, 132 },
{ 7, 7, 10, 0, 376 },
{ 7, 8, 10, 0, 872 },
{ 7, 9, 10, 0, 584 },
{ 7, 10, 10, 0, 112 },
{ 7, 11, 10, 0, 336 },
{ 7, 12, 11, 0, 16 },
{ 7, 13, 11, 0, 416 },
{ 7, 14, 11, 0, 1344 },
{ 7, 15, 12, 0, 2432 },
{ 8, 0, 9, 0, 180 },
{ 8, 1, 8, 0, 212 },
{ 8, 2, 8, 0, 148 },
{ 8, 3, 9, 0, 356 },
{ 8, 4, 9, 0, 292 },
{ 8, 5, 9, 0, 504 },
{ 8, 6, 9, 0, 56 },
{ 8, 7, 10, 0, 232 },
{ 8, 8, 10, 0, 712 },
{ 8, 9, 10, 0, 264 },
{ 8, 10, 10, 0, 976 },
{ 8, 11, 11, 0, 1552 },
{ 8, 12, 11, 0, 96 },
{ 8, 13, 12, 0, 2752 },
{ 8, 14, 12, 0, 576 },
{ 8, 15, 12, 0, 640 },
{ 9, 0, 9, 0, 452 },
{ 9, 1, 8, 0, 68 },
{ 9, 2, 9, 0, 388 },
{ 9, 3, 9, 0, 120 },
{ 9, 4, 9, 0, 184 },
{ 9, 5, 9, 0, 280 },
{ 9, 6, 10, 0, 104 },
{ 9, 7, 10, 0, 200 },
{ 9, 8, 10, 0, 776 },
{ 9, 9, 11, 0, 688 },
{ 9, 10, 11, 0, 1808 },
{ 9, 11, 11, 0, 864 },
{ 9, 12, 11, 0, 800 },
{ 9, 13, 12, 0, 3648 },
{ 9, 14, 12, 0, 3712 },
{ 9, 15, 12, 0, 3840 },
{ 10, 0, 10, 0, 728 },
{ 10, 1, 9, 0, 344 },
{ 10, 2, 9, 0, 408 },
{ 10, 3, 9, 0, 488 },
{ 10, 4, 10, 0, 360 },
{ 10, 5, 10, 0, 296 },
{ 10, 6, 10, 0, 368 },
{ 10, 7, 10, 0, 624 },
{ 10, 8, 10, 0, 48 },
{ 10, 9, 11, 0, 144 },
{ 10, 10, 11, 0, 1248 },
{ 10, 11, 11, 0, 1184 },
{ 10, 12, 11, 0, 1856 },
{ 10, 13, 12, 0, 3456 },
{ 10, 14, 13, 0, 3968 },
{ 10, 15, 12, 0, 2304 },
{ 11, 0, 10, 0, 424 },
{ 11, 1, 9, 0, 168 },
{ 11, 2, 9, 0, 40 },
{ 11, 3, 9, 0, 328 },
{ 11, 4, 10, 0, 392 },
{ 11, 5, 10, 0, 8 },
{ 11, 6, 10, 0, 176 },
{ 11, 7, 10, 0, 848 },
{ 11, 8, 11, 0, 784 },
{ 11, 9, 11, 0, 1888 },
{ 11, 10, 11, 0, 672 },
{ 11, 11, 11, 0, 1216 },
{ 11, 12, 12, 0, 2944 },
{ 11, 13, 12, 0, 1152 },
{ 11, 14, 12, 0, 3328 },
{ 11, 15, 13, 0, 6656 },
{ 12, 0, 11, 0, 880 },
{ 12, 1, 10, 0, 136 },
{ 12, 2, 9, 0, 240 },
{ 12, 3, 10, 0, 944 },
{ 12, 4, 10, 0, 304 },
{ 12, 5, 10, 0, 464 },
{ 12, 6, 11, 0, 656 },
{ 12, 7, 11, 0, 1040 },
{ 12, 8, 11, 0, 1120 },
{ 12, 9, 11, 0, 1824 },
{ 12, 10, 11, 0, 192 },
{ 12, 11, 11, 0, 64 },
{ 12, 12, 12, 0, 1664 },
{ 12, 13, 12, 0, 2816 },
{ 12, 14, 13, 0, 3584 },
{ 12, 15, 13, 0, 7168 },
{ 13, 0, 11, 0, 1744 },
{ 13, 1, 10, 0, 208 },
{ 13, 2, 10, 0, 912 },
{ 13, 3, 10, 0, 400 },
{ 13, 4, 10, 0, 272 },
{ 13, 5, 11, 0, 2016 },
{ 13, 6, 11, 0, 352 },
{ 13, 7, 11, 0, 1440 },
{ 13, 8, 11, 0, 1984 },
{ 13, 9, 12, 0, 704 },
{ 13, 10, 12, 0, 896 },
{ 13, 11, 12, 0, 3200 },
{ 13, 12, 12, 0, 1792 },
{ 13, 13, 12, 0, 256 },
{ 13, 14, 13, 0, 4608 },
{ 13, 15, 13, 0, 6144 },
{ 14, 0, 12, 0, 3552 },
{ 14, 1, 11, 0, 480 },
{ 14, 2, 11, 0, 736 },
{ 14, 3, 11, 0, 1376 },
{ 14, 4, 11, 0, 1952 },
{ 14, 5, 11, 0, 1696 },
{ 14, 6, 11, 0, 32 },
{ 14, 7, 11, 0, 832 },
{ 14, 8, 12, 0, 2624 },
{ 14, 9, 12, 0, 384 },
{ 14, 10, 12, 0, 2176 },
{ 14, 11, 12, 0, 768 },
{ 14, 12, 13, 0, 7680 },
{ 14, 13, 13, 0, 2560 },
{ 14, 14, 12, 0, 1024 },
{ 14, 15, 13, 0, 4096 },
{ 15, 0, 12, 0, 3616 },
{ 15, 1, 11, 0, 1312 },
{ 15, 2, 11, 0, 544 },
{ 15, 3, 11, 0, 960 },
{ 15, 4, 11, 0, 448 },
{ 15, 5, 11, 0, 320 },
{ 15, 6, 11, 0, 1088 },
{ 15, 7, 12, 0, 1408 },
{ 15, 8, 12, 0, 2688 },
{ 15, 9, 12, 0, 128 },
{ 15, 10, 12, 0, 1280 },
{ 15, 11, 12, 0, 1536 },
{ 15, 12, 13, 0, 512 },
{ 15, 13, 13, 0, 3072 },
{ 15, 14, 13, 0, 2048 },
{ 15, 15, 13, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var700566b8[] = {
{ 0, 0, 1, 0, 1 },
{ 0, 1, 4, 0, 10 },
{ 0, 2, 6, 0, 28 },
{ 0, 3, 8, 0, 52 },
{ 0, 4, 9, 0, 164 },
{ 0, 5, 9, 0, 504 },
{ 0, 6, 10, 0, 472 },
{ 0, 7, 10, 0, 744 },
{ 0, 8, 11, 0, 424 },
{ 0, 9, 11, 0, 1352 },
{ 0, 10, 11, 0, 648 },
{ 0, 11, 12, 0, 1264 },
{ 0, 12, 12, 0, 2160 },
{ 0, 13, 12, 0, 3120 },
{ 0, 14, 13, 0, 976 },
{ 0, 15, 9, 0, 272 },
{ 1, 0, 3, 0, 6 },
{ 1, 1, 4, 0, 2 },
{ 1, 2, 6, 0, 12 },
{ 1, 3, 7, 0, 20 },
{ 1, 4, 8, 0, 196 },
{ 1, 5, 9, 0, 248 },
{ 1, 6, 9, 0, 344 },
{ 1, 7, 9, 0, 488 },
{ 1, 8, 10, 0, 808 },
{ 1, 9, 10, 0, 840 },
{ 1, 10, 10, 0, 136 },
{ 1, 11, 11, 0, 1904 },
{ 1, 12, 12, 0, 2352 },
{ 1, 13, 11, 0, 1712 },
{ 1, 14, 12, 0, 3888 },
{ 1, 15, 8, 0, 144 },
{ 2, 0, 6, 0, 60 },
{ 2, 1, 6, 0, 44 },
{ 2, 2, 7, 0, 116 },
{ 2, 3, 8, 0, 100 },
{ 2, 4, 9, 0, 388 },
{ 2, 5, 9, 0, 184 },
{ 2, 6, 10, 0, 920 },
{ 2, 7, 10, 0, 360 },
{ 2, 8, 11, 0, 1064 },
{ 2, 9, 10, 0, 72 },
{ 2, 10, 11, 0, 2032 },
{ 2, 11, 11, 0, 1392 },
{ 2, 12, 11, 0, 944 },
{ 2, 13, 12, 0, 2224 },
{ 2, 14, 12, 0, 1840 },
{ 2, 15, 9, 0, 16 },
{ 3, 0, 8, 0, 180 },
{ 3, 1, 7, 0, 84 },
{ 3, 2, 8, 0, 228 },
{ 3, 3, 9, 0, 324 },
{ 3, 4, 9, 0, 4 },
{ 3, 5, 10, 0, 312 },
{ 3, 6, 10, 0, 792 },
{ 3, 7, 10, 0, 936 },
{ 3, 8, 11, 0, 968 },
{ 3, 9, 11, 0, 392 },
{ 3, 10, 12, 0, 1008 },
{ 3, 11, 12, 0, 688 },
{ 3, 12, 12, 0, 3632 },
{ 3, 13, 13, 0, 6192 },
{ 3, 14, 13, 0, 5840 },
{ 3, 15, 10, 0, 352 },
{ 4, 0, 9, 0, 420 },
{ 4, 1, 8, 0, 36 },
{ 4, 2, 9, 0, 68 },
{ 4, 3, 9, 0, 260 },
{ 4, 4, 10, 0, 824 },
{ 4, 5, 10, 0, 664 },
{ 4, 6, 11, 0, 1640 },
{ 4, 7, 11, 0, 296 },
{ 4, 8, 11, 0, 1736 },
{ 4, 9, 12, 0, 264 },
{ 4, 10, 12, 0, 1776 },
{ 4, 11, 12, 0, 1136 },
{ 4, 12, 13, 0, 6704 },
{ 4, 13, 13, 0, 4048 },
{ 4, 14, 13, 0, 2768 },
{ 4, 15, 9, 0, 288 },
{ 5, 0, 9, 0, 132 },
{ 5, 1, 8, 0, 120 },
{ 5, 2, 9, 0, 440 },
{ 5, 3, 9, 0, 56 },
{ 5, 4, 10, 0, 408 },
{ 5, 5, 11, 0, 1256 },
{ 5, 6, 11, 0, 1448 },
{ 5, 7, 12, 0, 2312 },
{ 5, 8, 11, 0, 904 },
{ 5, 9, 12, 0, 3056 },
{ 5, 10, 12, 0, 368 },
{ 5, 11, 13, 0, 304 },
{ 5, 12, 13, 0, 1072 },
{ 5, 13, 13, 0, 3024 },
{ 5, 14, 14, 0, 12128 },
{ 5, 15, 10, 0, 32 },
{ 6, 0, 10, 0, 984 },
{ 6, 1, 9, 0, 216 },
{ 6, 2, 9, 0, 88 },
{ 6, 3, 10, 0, 152 },
{ 6, 4, 11, 0, 232 },
{ 6, 5, 11, 0, 616 },
{ 6, 6, 11, 0, 40 },
{ 6, 7, 11, 0, 1288 },
{ 6, 8, 12, 0, 2056 },
{ 6, 9, 12, 0, 752 },
{ 6, 10, 12, 0, 624 },
{ 6, 11, 12, 0, 2480 },
{ 6, 12, 13, 0, 4144 },
{ 6, 13, 13, 0, 3792 },
{ 6, 14, 14, 0, 13520 },
{ 6, 15, 10, 0, 320 },
{ 7, 0, 10, 0, 280 },
{ 7, 1, 9, 0, 24 },
{ 7, 2, 10, 0, 872 },
{ 7, 3, 10, 0, 104 },
{ 7, 4, 11, 0, 1320 },
{ 7, 5, 11, 0, 1480 },
{ 7, 6, 11, 0, 328 },
{ 7, 7, 12, 0, 2568 },
{ 7, 8, 12, 0, 496 },
{ 7, 9, 13, 0, 7472 },
{ 7, 10, 13, 0, 5680 },
{ 7, 11, 13, 0, 1488 },
{ 7, 12, 13, 0, 2000 },
{ 7, 13, 15, 0, 20320 },
{ 7, 14, 15, 0, 5984 },
{ 7, 15, 10, 0, 64 },
{ 8, 0, 10, 0, 680 },
{ 8, 1, 10, 0, 168 },
{ 8, 2, 10, 0, 552 },
{ 8, 3, 11, 0, 1992 },
{ 8, 4, 11, 0, 456 },
{ 8, 5, 11, 0, 1928 },
{ 8, 6, 12, 0, 520 },
{ 8, 7, 12, 0, 2544 },
{ 8, 8, 13, 0, 6832 },
{ 8, 9, 13, 0, 4400 },
{ 8, 10, 13, 0, 560 },
{ 8, 11, 13, 0, 8144 },
{ 8, 12, 14, 0, 15056 },
{ 8, 13, 14, 0, 9424 },
{ 8, 14, 14, 0, 2256 },
{ 8, 15, 10, 0, 896 },
{ 9, 0, 11, 0, 712 },
{ 9, 1, 10, 0, 200 },
{ 9, 2, 10, 0, 584 },
{ 9, 3, 11, 0, 1416 },
{ 9, 4, 11, 0, 1544 },
{ 9, 5, 12, 0, 8 },
{ 9, 6, 12, 0, 2800 },
{ 9, 7, 13, 0, 2736 },
{ 9, 8, 13, 0, 3376 },
{ 9, 9, 13, 0, 2608 },
{ 9, 10, 13, 0, 48 },
{ 9, 11, 14, 0, 16080 },
{ 9, 12, 13, 0, 7376 },
{ 9, 13, 14, 0, 6352 },
{ 9, 14, 13, 0, 208 },
{ 9, 15, 11, 0, 1664 },
{ 10, 0, 11, 0, 1672 },
{ 10, 1, 11, 0, 1032 },
{ 10, 2, 10, 0, 776 },
{ 10, 3, 11, 0, 1520 },
{ 10, 4, 12, 0, 3824 },
{ 10, 5, 12, 0, 2416 },
{ 10, 6, 12, 0, 2672 },
{ 10, 7, 12, 0, 3504 },
{ 10, 8, 13, 0, 4656 },
{ 10, 9, 14, 0, 14800 },
{ 10, 10, 14, 0, 8656 },
{ 10, 11, 14, 0, 720 },
{ 10, 12, 15, 0, 22368 },
{ 10, 13, 15, 0, 10080 },
{ 10, 14, 14, 0, 15200 },
{ 10, 15, 10, 0, 128 },
{ 11, 0, 12, 0, 3312 },
{ 11, 1, 11, 0, 240 },
{ 11, 2, 11, 0, 880 },
{ 11, 3, 11, 0, 1648 },
{ 11, 4, 12, 0, 3184 },
{ 11, 5, 12, 0, 4016 },
{ 11, 6, 13, 0, 1584 },
{ 11, 7, 14, 0, 5584 },
{ 11, 8, 14, 0, 6608 },
{ 11, 9, 14, 0, 464 },
{ 11, 10, 14, 0, 8912 },
{ 11, 11, 14, 0, 1232 },
{ 11, 12, 14, 0, 4304 },
{ 11, 13, 13, 0, 8032 },
{ 11, 14, 14, 0, 2912 },
{ 11, 15, 11, 0, 768 },
{ 12, 0, 12, 0, 1328 },
{ 12, 1, 12, 0, 112 },
{ 12, 2, 12, 0, 1968 },
{ 12, 3, 12, 0, 1456 },
{ 12, 4, 12, 0, 432 },
{ 12, 5, 13, 0, 5168 },
{ 12, 6, 13, 0, 2096 },
{ 12, 7, 13, 0, 6096 },
{ 12, 8, 13, 0, 1744 },
{ 12, 9, 15, 0, 3936 },
{ 12, 10, 14, 0, 14176 },
{ 12, 11, 14, 0, 12496 },
{ 12, 12, 14, 0, 1888 },
{ 12, 13, 14, 0, 11104 },
{ 12, 14, 16, 0, 864 },
{ 12, 15, 11, 0, 256 },
{ 13, 0, 14, 0, 13776 },
{ 13, 1, 12, 0, 3248 },
{ 13, 2, 12, 0, 1200 },
{ 13, 3, 12, 0, 176 },
{ 13, 4, 13, 0, 2512 },
{ 13, 5, 13, 0, 7120 },
{ 13, 6, 14, 0, 7888 },
{ 13, 7, 14, 0, 13008 },
{ 13, 8, 14, 0, 5328 },
{ 13, 9, 16, 0, 58208 },
{ 13, 10, 15, 0, 26464 },
{ 13, 11, 15, 0, 23392 },
{ 13, 12, 15, 0, 7008 },
{ 13, 13, 17, 0, 99168 },
{ 13, 14, 15, 0, 17248 },
{ 13, 15, 11, 0, 512 },
{ 14, 0, 13, 0, 5072 },
{ 14, 1, 13, 0, 4560 },
{ 14, 2, 11, 0, 816 },
{ 14, 3, 12, 0, 3536 },
{ 14, 4, 14, 0, 6864 },
{ 14, 5, 14, 0, 4816 },
{ 14, 6, 13, 0, 3280 },
{ 14, 7, 14, 0, 14544 },
{ 14, 8, 14, 0, 10448 },
{ 14, 9, 15, 0, 9056 },
{ 14, 10, 16, 0, 25440 },
{ 14, 11, 15, 0, 29536 },
{ 14, 12, 17, 0, 33632 },
{ 14, 13, 15, 0, 13152 },
{ 14, 14, 14, 0, 4960 },
{ 14, 15, 11, 0, 0 },
{ 15, 0, 9, 0, 96 },
{ 15, 1, 8, 0, 80 },
{ 15, 2, 8, 0, 224 },
{ 15, 3, 9, 0, 416 },
{ 15, 4, 9, 0, 160 },
{ 15, 5, 10, 0, 544 },
{ 15, 6, 10, 0, 832 },
{ 15, 7, 10, 0, 576 },
{ 15, 8, 11, 0, 1408 },
{ 15, 9, 11, 0, 384 },
{ 15, 10, 11, 0, 640 },
{ 15, 11, 11, 0, 1792 },
{ 15, 12, 11, 0, 1280 },
{ 15, 13, 11, 0, 1536 },
{ 15, 14, 11, 0, 1024 },
{ 15, 15, 8, 0, 192 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70056ec0[] = {
{ 0, 0, 4, 0, 15 },
{ 0, 1, 4, 0, 11 },
{ 0, 2, 6, 0, 29 },
{ 0, 3, 7, 0, 5 },
{ 0, 4, 8, 0, 73 },
{ 0, 5, 9, 0, 193 },
{ 0, 6, 9, 0, 62 },
{ 0, 7, 10, 0, 310 },
{ 0, 8, 10, 0, 342 },
{ 0, 9, 11, 0, 1482 },
{ 0, 10, 11, 0, 1418 },
{ 0, 11, 11, 0, 1162 },
{ 0, 12, 11, 0, 1458 },
{ 0, 13, 11, 0, 1282 },
{ 0, 14, 12, 0, 258 },
{ 0, 15, 9, 0, 52 },
{ 1, 0, 4, 0, 7 },
{ 1, 1, 4, 0, 3 },
{ 1, 2, 5, 0, 21 },
{ 1, 3, 6, 0, 25 },
{ 1, 4, 7, 0, 113 },
{ 1, 5, 8, 0, 65 },
{ 1, 6, 8, 0, 94 },
{ 1, 7, 9, 0, 54 },
{ 1, 8, 9, 0, 278 },
{ 1, 9, 9, 0, 198 },
{ 1, 10, 10, 0, 906 },
{ 1, 11, 10, 0, 618 },
{ 1, 12, 10, 0, 1010 },
{ 1, 13, 10, 0, 594 },
{ 1, 14, 10, 0, 930 },
{ 1, 15, 8, 0, 84 },
{ 2, 0, 6, 0, 61 },
{ 2, 1, 5, 0, 13 },
{ 2, 2, 6, 0, 37 },
{ 2, 3, 7, 0, 41 },
{ 2, 4, 7, 0, 17 },
{ 2, 5, 8, 0, 1 },
{ 2, 6, 8, 0, 30 },
{ 2, 7, 9, 0, 374 },
{ 2, 8, 9, 0, 486 },
{ 2, 9, 9, 0, 134 },
{ 2, 10, 9, 0, 218 },
{ 2, 11, 10, 0, 170 },
{ 2, 12, 10, 0, 882 },
{ 2, 13, 10, 0, 914 },
{ 2, 14, 11, 0, 1474 },
{ 2, 15, 7, 0, 36 },
{ 3, 0, 7, 0, 69 },
{ 3, 1, 6, 0, 57 },
{ 3, 2, 7, 0, 105 },
{ 3, 3, 7, 0, 49 },
{ 3, 4, 8, 0, 97 },
{ 3, 5, 8, 0, 190 },
{ 3, 6, 8, 0, 46 },
{ 3, 7, 9, 0, 118 },
{ 3, 8, 9, 0, 102 },
{ 3, 9, 9, 0, 250 },
{ 3, 10, 9, 0, 154 },
{ 3, 11, 10, 0, 650 },
{ 3, 12, 10, 0, 946 },
{ 3, 13, 10, 0, 658 },
{ 3, 14, 10, 0, 962 },
{ 3, 15, 7, 0, 4 },
{ 4, 0, 8, 0, 201 },
{ 4, 1, 7, 0, 9 },
{ 4, 2, 7, 0, 81 },
{ 4, 3, 8, 0, 225 },
{ 4, 4, 8, 0, 254 },
{ 4, 5, 8, 0, 110 },
{ 4, 6, 8, 0, 14 },
{ 4, 7, 9, 0, 150 },
{ 4, 8, 9, 0, 38 },
{ 4, 9, 9, 0, 122 },
{ 4, 10, 10, 0, 26 },
{ 4, 11, 10, 0, 778 },
{ 4, 12, 10, 0, 306 },
{ 4, 13, 10, 0, 738 },
{ 4, 14, 11, 0, 450 },
{ 4, 15, 7, 0, 56 },
{ 5, 0, 9, 0, 449 },
{ 5, 1, 7, 0, 33 },
{ 5, 2, 8, 0, 129 },
{ 5, 3, 8, 0, 126 },
{ 5, 4, 8, 0, 238 },
{ 5, 5, 8, 0, 78 },
{ 5, 6, 9, 0, 214 },
{ 5, 7, 9, 0, 166 },
{ 5, 8, 9, 0, 6 },
{ 5, 9, 9, 0, 90 },
{ 5, 10, 10, 0, 682 },
{ 5, 11, 10, 0, 754 },
{ 5, 12, 10, 0, 722 },
{ 5, 13, 10, 0, 610 },
{ 5, 14, 10, 0, 386 },
{ 5, 15, 7, 0, 24 },
{ 6, 0, 9, 0, 318 },
{ 6, 1, 8, 0, 222 },
{ 6, 2, 8, 0, 158 },
{ 6, 3, 8, 0, 174 },
{ 6, 4, 8, 0, 142 },
{ 6, 5, 9, 0, 470 },
{ 6, 6, 9, 0, 230 },
{ 6, 7, 9, 0, 390 },
{ 6, 8, 9, 0, 314 },
{ 6, 9, 10, 0, 874 },
{ 6, 10, 10, 0, 330 },
{ 6, 11, 10, 0, 178 },
{ 6, 12, 10, 0, 786 },
{ 6, 13, 10, 0, 34 },
{ 6, 14, 11, 0, 130 },
{ 6, 15, 7, 0, 40 },
{ 7, 0, 10, 0, 822 },
{ 7, 1, 8, 0, 206 },
{ 7, 2, 8, 0, 246 },
{ 7, 3, 8, 0, 182 },
{ 7, 4, 9, 0, 406 },
{ 7, 5, 9, 0, 422 },
{ 7, 6, 9, 0, 70 },
{ 7, 7, 9, 0, 442 },
{ 7, 8, 10, 0, 538 },
{ 7, 9, 10, 0, 202 },
{ 7, 10, 10, 0, 626 },
{ 7, 11, 10, 0, 338 },
{ 7, 12, 10, 0, 866 },
{ 7, 13, 11, 0, 1602 },
{ 7, 14, 11, 0, 1524 },
{ 7, 15, 8, 0, 136 },
{ 8, 0, 10, 0, 854 },
{ 8, 1, 9, 0, 86 },
{ 8, 2, 9, 0, 22 },
{ 8, 3, 9, 0, 358 },
{ 8, 4, 9, 0, 294 },
{ 8, 5, 9, 0, 262 },
{ 8, 6, 9, 0, 186 },
{ 8, 7, 9, 0, 282 },
{ 8, 8, 9, 0, 298 },
{ 8, 9, 10, 0, 10 },
{ 8, 10, 10, 0, 978 },
{ 8, 11, 10, 0, 482 },
{ 8, 12, 10, 0, 194 },
{ 8, 13, 11, 0, 514 },
{ 8, 14, 11, 0, 1268 },
{ 8, 15, 8, 0, 8 },
{ 9, 0, 10, 0, 970 },
{ 9, 1, 9, 0, 454 },
{ 9, 2, 9, 0, 326 },
{ 9, 3, 9, 0, 506 },
{ 9, 4, 9, 0, 378 },
{ 9, 5, 9, 0, 346 },
{ 9, 6, 9, 0, 234 },
{ 9, 7, 10, 0, 714 },
{ 9, 8, 10, 0, 522 },
{ 9, 9, 10, 0, 562 },
{ 9, 10, 10, 0, 530 },
{ 9, 11, 10, 0, 802 },
{ 9, 12, 11, 0, 1154 },
{ 9, 13, 11, 0, 1780 },
{ 9, 14, 11, 0, 1652 },
{ 9, 15, 8, 0, 208 },
{ 10, 0, 11, 0, 458 },
{ 10, 1, 9, 0, 58 },
{ 10, 2, 9, 0, 474 },
{ 10, 3, 9, 0, 410 },
{ 10, 4, 9, 0, 490 },
{ 10, 5, 10, 0, 106 },
{ 10, 6, 10, 0, 842 },
{ 10, 7, 10, 0, 370 },
{ 10, 8, 10, 0, 50 },
{ 10, 9, 10, 0, 274 },
{ 10, 10, 10, 0, 674 },
{ 10, 11, 11, 0, 578 },
{ 10, 12, 11, 0, 2036 },
{ 10, 13, 11, 0, 1396 },
{ 10, 14, 11, 0, 948 },
{ 10, 15, 8, 0, 80 },
{ 11, 0, 11, 0, 394 },
{ 11, 1, 10, 0, 362 },
{ 11, 2, 9, 0, 426 },
{ 11, 3, 9, 0, 42 },
{ 11, 4, 9, 0, 74 },
{ 11, 5, 10, 0, 498 },
{ 11, 6, 10, 0, 690 },
{ 11, 7, 10, 0, 850 },
{ 11, 8, 10, 0, 994 },
{ 11, 9, 10, 0, 162 },
{ 11, 10, 10, 0, 898 },
{ 11, 11, 11, 0, 1026 },
{ 11, 12, 11, 0, 1908 },
{ 11, 13, 11, 0, 116 },
{ 11, 14, 11, 0, 692 },
{ 11, 15, 8, 0, 96 },
{ 12, 0, 11, 0, 138 },
{ 12, 1, 10, 0, 266 },
{ 12, 2, 10, 0, 242 },
{ 12, 3, 10, 0, 114 },
{ 12, 4, 10, 0, 818 },
{ 12, 5, 10, 0, 466 },
{ 12, 6, 10, 0, 146 },
{ 12, 7, 10, 0, 226 },
{ 12, 8, 10, 0, 706 },
{ 12, 9, 10, 0, 642 },
{ 12, 10, 11, 0, 2 },
{ 12, 11, 11, 0, 244 },
{ 12, 12, 11, 0, 628 },
{ 12, 13, 11, 0, 436 },
{ 12, 14, 11, 0, 1844 },
{ 12, 15, 8, 0, 32 },
{ 13, 0, 11, 0, 434 },
{ 13, 1, 10, 0, 210 },
{ 13, 2, 10, 0, 82 },
{ 13, 3, 10, 0, 402 },
{ 13, 4, 10, 0, 18 },
{ 13, 5, 10, 0, 354 },
{ 13, 6, 10, 0, 546 },
{ 13, 7, 10, 0, 322 },
{ 13, 8, 11, 0, 1538 },
{ 13, 9, 11, 0, 500 },
{ 13, 10, 11, 0, 884 },
{ 13, 11, 11, 0, 1140 },
{ 13, 12, 11, 0, 1460 },
{ 13, 13, 11, 0, 1204 },
{ 13, 14, 11, 0, 1332 },
{ 13, 15, 8, 0, 64 },
{ 14, 0, 12, 0, 2306 },
{ 14, 1, 10, 0, 98 },
{ 14, 2, 10, 0, 418 },
{ 14, 3, 10, 0, 290 },
{ 14, 4, 10, 0, 834 },
{ 14, 5, 10, 0, 66 },
{ 14, 6, 10, 0, 770 },
{ 14, 7, 11, 0, 1012 },
{ 14, 8, 11, 0, 756 },
{ 14, 9, 11, 0, 372 },
{ 14, 10, 11, 0, 1972 },
{ 14, 11, 11, 0, 1716 },
{ 14, 12, 11, 0, 180 },
{ 14, 13, 11, 0, 820 },
{ 14, 14, 11, 0, 308 },
{ 14, 15, 8, 0, 0 },
{ 15, 0, 8, 0, 212 },
{ 15, 1, 7, 0, 20 },
{ 15, 2, 7, 0, 100 },
{ 15, 3, 7, 0, 68 },
{ 15, 4, 7, 0, 120 },
{ 15, 5, 7, 0, 88 },
{ 15, 6, 7, 0, 104 },
{ 15, 7, 7, 0, 72 },
{ 15, 8, 7, 0, 112 },
{ 15, 9, 7, 0, 48 },
{ 15, 10, 7, 0, 16 },
{ 15, 11, 8, 0, 224 },
{ 15, 12, 8, 0, 160 },
{ 15, 13, 8, 0, 192 },
{ 15, 14, 8, 0, 128 },
{ 15, 15, 4, 0, 12 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var700576c8[] = {
{ 0, 0, 1, 0, 1 },
{ 1, 1, 4, 0, 10 },
{ 2, 2, 4, 0, 2 },
{ 3, 3, 5, 0, 20 },
{ 4, 4, 4, 0, 6 },
{ 5, 5, 6, 0, 40 },
{ 6, 6, 5, 0, 4 },
{ 7, 7, 6, 0, 8 },
{ 8, 8, 4, 0, 14 },
{ 9, 9, 5, 0, 24 },
{ 10, 10, 5, 0, 12 },
{ 11, 11, 6, 0, 0 },
{ 12, 12, 5, 0, 28 },
{ 13, 13, 6, 0, 16 },
{ 14, 14, 6, 0, 48 },
{ 15, 15, 6, 0, 32 },
{ 100, 100, 100, 0, 0 },
};
const struct mp3decthing var70057750[] = {
{ 0, 0, 4, 0, 15 },
{ 1, 1, 4, 0, 7 },
{ 2, 2, 4, 0, 11 },
{ 3, 3, 4, 0, 3 },
{ 4, 4, 4, 0, 13 },
{ 5, 5, 4, 0, 5 },
{ 6, 6, 4, 0, 9 },
{ 7, 7, 4, 0, 1 },
{ 8, 8, 4, 0, 14 },
{ 9, 9, 4, 0, 6 },
{ 10, 10, 4, 0, 10 },
{ 11, 11, 4, 0, 2 },
{ 12, 12, 4, 0, 12 },
{ 13, 13, 4, 0, 4 },
{ 14, 14, 4, 0, 8 },
{ 15, 15, 4, 0, 0 },
{ 100, 100, 100, 0, 0 },
};
struct mp3decthing *var8005f670[] = {
NULL,
(struct mp3decthing *)var70054b40,
(struct mp3decthing *)var70054b68,
(struct mp3decthing *)var70054bb8,
(struct mp3decthing *)var70054c08,
(struct mp3decthing *)var70054c08,
(struct mp3decthing *)var70054c90,
(struct mp3decthing *)var70054d18,
(struct mp3decthing *)var70054e40,
(struct mp3decthing *)var70054f68,
(struct mp3decthing *)var70055090,
(struct mp3decthing *)var70055298,
(struct mp3decthing *)var700554a0,
(struct mp3decthing *)var700556a8,
(struct mp3decthing *)var70055eb0,
(struct mp3decthing *)var70055eb0,
(struct mp3decthing *)var700566b8,
(struct mp3decthing *)var700566b8,
(struct mp3decthing *)var700566b8,
(struct mp3decthing *)var700566b8,
(struct mp3decthing *)var700566b8,
(struct mp3decthing *)var700566b8,
(struct mp3decthing *)var700566b8,
(struct mp3decthing *)var700566b8,
(struct mp3decthing *)var70056ec0,
(struct mp3decthing *)var70056ec0,
(struct mp3decthing *)var70056ec0,
(struct mp3decthing *)var70056ec0,
(struct mp3decthing *)var70056ec0,
(struct mp3decthing *)var70056ec0,
(struct mp3decthing *)var70056ec0,
(struct mp3decthing *)var70056ec0,
(struct mp3decthing *)var700576c8,
(struct mp3decthing *)var70057750,
};
u8 *var8005f6f8 = NULL;
u8 *var8005f6fc = NULL;
const s32 var700577d8[34] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 2, 3, 4,
6, 8, 10, 13, 4, 5, 6, 7, 8, 9,
11, 13, -1, -1,
};
const s16 var70057860[2][3][22] = {
{
{ 5, 11, 17, 23, 29, 35, 43, 53, 65, 79, 95, 115, 139, 167, 199, 237, 283, 335, 395, 463, 521, 575 },
{ 5, 11, 17, 23, 29, 35, 43, 53, 65, 79, 95, 113, 135, 161, 193, 231, 277, 331, 393, 463, 539, 575 },
{ 5, 11, 17, 23, 29, 35, 43, 53, 65, 79, 95, 115, 139, 167, 199, 237, 283, 335, 395, 463, 521, 575 },
}, {
{ 3, 7, 11, 15, 19, 23, 29, 35, 43, 51, 61, 73, 89, 109, 133, 161, 195, 237, 287, 341, 417, 575 },
{ 3, 7, 11, 15, 19, 23, 29, 35, 41, 49, 59, 71, 87, 105, 127, 155, 189, 229, 275, 329, 383, 575 },
{ 3, 7, 11, 15, 19, 23, 29, 35, 43, 53, 65, 81, 101, 125, 155, 193, 239, 295, 363, 447, 549, 575 },
},
};
const u8 var70057968[2][3][13] = {
{
{ 3, 7, 11, 17, 23, 31, 41, 55, 73, 99, 131, 173, 191 },
{ 3, 7, 11, 17, 25, 35, 47, 61, 79, 103, 135, 179, 191 },
{ 3, 7, 11, 17, 25, 35, 47, 61, 79, 103, 133, 173, 191 },
}, {
{ 3, 7, 11, 15, 21, 29, 39, 51, 65, 83, 105, 135, 191 },
{ 3, 7, 11, 15, 21, 27, 37, 49, 63, 79, 99, 125, 191 },
{ 3, 7, 11, 15, 21, 29, 41, 57, 77, 103, 137, 179, 191 },
},
};
struct mp3decthing2 {
s16 unk00[23];
s16 unk2e[14];
};
const struct mp3decthing2 var700579b8[6] = {
{ { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 }, { 0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192 } },
{ { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 330, 394, 464, 540, 576 }, { 0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192 } },
{ { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 }, { 0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192 } },
{ { 0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576 }, { 0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192 } },
{ { 0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576 }, { 0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192 } },
{ { 0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576 }, { 0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192 } },
};
const u8 var70057b74[] = { 0, 6, 11, 16, 21, 0, 6, 12 };
const u8 var70057b7c[2][16] = {
{ 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
{ 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 },
};
const s16 var70057b9c[2][3][576] = {
{
{
0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 4, 5, 18, 19,
10, 11, 24, 25, 16, 17, 30, 31, 20, 21, 22, 23, 26, 27, 28, 29,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 90, 91,
78, 79, 80, 81, 82, 83, 96, 97, 84, 85, 86, 87, 88, 89, 102, 103,
92, 93, 94, 95, 108, 109, 110, 111, 112, 113, 98, 99, 100, 101, 114, 115,
116, 117, 118, 119, 104, 105, 106, 107, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 144, 145, 146, 147, 148, 149, 162, 163, 132, 133, 134, 135,
136, 137, 150, 151, 152, 153, 154, 155, 168, 169, 138, 139, 140, 141, 142, 143,
156, 157, 158, 159, 160, 161, 174, 175, 164, 165, 166, 167, 180, 181, 182, 183,
184, 185, 198, 199, 200, 201, 202, 203, 216, 217, 170, 171, 172, 173, 186, 187,
188, 189, 190, 191, 204, 205, 206, 207, 208, 209, 222, 223, 176, 177, 178, 179,
192, 193, 194, 195, 196, 197, 210, 211, 212, 213, 214, 215, 228, 229, 218, 219,
220, 221, 234, 235, 236, 237, 238, 239, 252, 253, 254, 255, 256, 257, 270, 271,
272, 273, 274, 275, 288, 289, 290, 291, 224, 225, 226, 227, 240, 241, 242, 243,
244, 245, 258, 259, 260, 261, 262, 263, 276, 277, 278, 279, 280, 281, 294, 295,
296, 297, 230, 231, 232, 233, 246, 247, 248, 249, 250, 251, 264, 265, 266, 267,
268, 269, 282, 283, 284, 285, 286, 287, 300, 301, 302, 303, 292, 293, 306, 307,
308, 309, 310, 311, 324, 325, 326, 327, 328, 329, 342, 343, 344, 345, 346, 347,
360, 361, 362, 363, 364, 365, 378, 379, 380, 381, 382, 383, 298, 299, 312, 313,
314, 315, 316, 317, 330, 331, 332, 333, 334, 335, 348, 349, 350, 351, 352, 353,
366, 367, 368, 369, 370, 371, 384, 385, 386, 387, 388, 389, 304, 305, 318, 319,
320, 321, 322, 323, 336, 337, 338, 339, 340, 341, 354, 355, 356, 357, 358, 359,
372, 373, 374, 375, 376, 377, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399,
400, 401, 414, 415, 416, 417, 418, 419, 432, 433, 434, 435, 436, 437, 450, 451,
452, 453, 454, 455, 468, 469, 470, 471, 472, 473, 486, 487, 488, 489, 490, 491,
504, 505, 506, 507, 508, 509, 402, 403, 404, 405, 406, 407, 420, 421, 422, 423,
424, 425, 438, 439, 440, 441, 442, 443, 456, 457, 458, 459, 460, 461, 474, 475,
476, 477, 478, 479, 492, 493, 494, 495, 496, 497, 510, 511, 512, 513, 514, 515,
408, 409, 410, 411, 412, 413, 426, 427, 428, 429, 430, 431, 444, 445, 446, 447,
448, 449, 462, 463, 464, 465, 466, 467, 480, 481, 482, 483, 484, 485, 498, 499,
500, 501, 502, 503, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527,
540, 541, 542, 543, 544, 545, 558, 559, 560, 561, 562, 563, 528, 529, 530, 531,
532, 533, 546, 547, 548, 549, 550, 551, 564, 565, 566, 567, 568, 569, 534, 535,
536, 537, 538, 539, 552, 553, 554, 555, 556, 557, 570, 571, 572, 573, 574, 575,
}, {
0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 4, 5, 18, 19,
10, 11, 24, 25, 16, 17, 30, 31, 20, 21, 22, 23, 26, 27, 28, 29,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 72, 73, 60, 61,
62, 63, 64, 65, 78, 79, 66, 67, 68, 69, 70, 71, 84, 85, 74, 75,
76, 77, 90, 91, 92, 93, 94, 95, 80, 81, 82, 83, 96, 97, 98, 99,
100, 101, 86, 87, 88, 89, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 126, 127, 128, 129, 130, 131, 114, 115, 116, 117, 118, 119, 132, 133,
134, 135, 136, 137, 120, 121, 122, 123, 124, 125, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 162, 163, 164, 165, 166, 167, 180, 181, 150, 151,
152, 153, 154, 155, 168, 169, 170, 171, 172, 173, 186, 187, 156, 157, 158, 159,
160, 161, 174, 175, 176, 177, 178, 179, 192, 193, 182, 183, 184, 185, 198, 199,
200, 201, 202, 203, 216, 217, 218, 219, 220, 221, 234, 235, 188, 189, 190, 191,
204, 205, 206, 207, 208, 209, 222, 223, 224, 225, 226, 227, 240, 241, 194, 195,
196, 197, 210, 211, 212, 213, 214, 215, 228, 229, 230, 231, 232, 233, 246, 247,
236, 237, 238, 239, 252, 253, 254, 255, 256, 257, 270, 271, 272, 273, 274, 275,
288, 289, 290, 291, 292, 293, 306, 307, 242, 243, 244, 245, 258, 259, 260, 261,
262, 263, 276, 277, 278, 279, 280, 281, 294, 295, 296, 297, 298, 299, 312, 313,
248, 249, 250, 251, 264, 265, 266, 267, 268, 269, 282, 283, 284, 285, 286, 287,
300, 301, 302, 303, 304, 305, 318, 319, 308, 309, 310, 311, 324, 325, 326, 327,
328, 329, 342, 343, 344, 345, 346, 347, 360, 361, 362, 363, 364, 365, 378, 379,
380, 381, 382, 383, 396, 397, 398, 399, 314, 315, 316, 317, 330, 331, 332, 333,
334, 335, 348, 349, 350, 351, 352, 353, 366, 367, 368, 369, 370, 371, 384, 385,
386, 387, 388, 389, 402, 403, 404, 405, 320, 321, 322, 323, 336, 337, 338, 339,
340, 341, 354, 355, 356, 357, 358, 359, 372, 373, 374, 375, 376, 377, 390, 391,
392, 393, 394, 395, 408, 409, 410, 411, 400, 401, 414, 415, 416, 417, 418, 419,
432, 433, 434, 435, 436, 437, 450, 451, 452, 453, 454, 455, 468, 469, 470, 471,
472, 473, 486, 487, 488, 489, 490, 491, 504, 505, 506, 507, 508, 509, 522, 523,
524, 525, 526, 527, 406, 407, 420, 421, 422, 423, 424, 425, 438, 439, 440, 441,
442, 443, 456, 457, 458, 459, 460, 461, 474, 475, 476, 477, 478, 479, 492, 493,
494, 495, 496, 497, 510, 511, 512, 513, 514, 515, 528, 529, 530, 531, 532, 533,
412, 413, 426, 427, 428, 429, 430, 431, 444, 445, 446, 447, 448, 449, 462, 463,
464, 465, 466, 467, 480, 481, 482, 483, 484, 485, 498, 499, 500, 501, 502, 503,
516, 517, 518, 519, 520, 521, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543,
544, 545, 558, 559, 560, 561, 562, 563, 546, 547, 548, 549, 550, 551, 564, 565,
566, 567, 568, 569, 552, 553, 554, 555, 556, 557, 570, 571, 572, 573, 574, 575,
}, {
0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 4, 5, 18, 19,
10, 11, 24, 25, 16, 17, 30, 31, 20, 21, 22, 23, 26, 27, 28, 29,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 72, 73, 60, 61,
62, 63, 64, 65, 78, 79, 66, 67, 68, 69, 70, 71, 84, 85, 74, 75,
76, 77, 90, 91, 92, 93, 94, 95, 80, 81, 82, 83, 96, 97, 98, 99,
100, 101, 86, 87, 88, 89, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 126, 127, 128, 129, 130, 131, 114, 115, 116, 117, 118, 119, 132, 133,
134, 135, 136, 137, 120, 121, 122, 123, 124, 125, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 162, 163, 164, 165, 166, 167, 180, 181, 150, 151,
152, 153, 154, 155, 168, 169, 170, 171, 172, 173, 186, 187, 156, 157, 158, 159,
160, 161, 174, 175, 176, 177, 178, 179, 192, 193, 182, 183, 184, 185, 198, 199,
200, 201, 202, 203, 216, 217, 218, 219, 220, 221, 234, 235, 188, 189, 190, 191,
204, 205, 206, 207, 208, 209, 222, 223, 224, 225, 226, 227, 240, 241, 194, 195,
196, 197, 210, 211, 212, 213, 214, 215, 228, 229, 230, 231, 232, 233, 246, 247,
236, 237, 238, 239, 252, 253, 254, 255, 256, 257, 270, 271, 272, 273, 274, 275,
288, 289, 290, 291, 292, 293, 306, 307, 242, 243, 244, 245, 258, 259, 260, 261,
262, 263, 276, 277, 278, 279, 280, 281, 294, 295, 296, 297, 298, 299, 312, 313,
248, 249, 250, 251, 264, 265, 266, 267, 268, 269, 282, 283, 284, 285, 286, 287,
300, 301, 302, 303, 304, 305, 318, 319, 308, 309, 310, 311, 324, 325, 326, 327,
328, 329, 342, 343, 344, 345, 346, 347, 360, 361, 362, 363, 364, 365, 378, 379,
380, 381, 382, 383, 396, 397, 314, 315, 316, 317, 330, 331, 332, 333, 334, 335,
348, 349, 350, 351, 352, 353, 366, 367, 368, 369, 370, 371, 384, 385, 386, 387,
388, 389, 402, 403, 320, 321, 322, 323, 336, 337, 338, 339, 340, 341, 354, 355,
356, 357, 358, 359, 372, 373, 374, 375, 376, 377, 390, 391, 392, 393, 394, 395,
408, 409, 398, 399, 400, 401, 414, 415, 416, 417, 418, 419, 432, 433, 434, 435,
436, 437, 450, 451, 452, 453, 454, 455, 468, 469, 470, 471, 472, 473, 486, 487,
488, 489, 490, 491, 504, 505, 506, 507, 508, 509, 404, 405, 406, 407, 420, 421,
422, 423, 424, 425, 438, 439, 440, 441, 442, 443, 456, 457, 458, 459, 460, 461,
474, 475, 476, 477, 478, 479, 492, 493, 494, 495, 496, 497, 510, 511, 512, 513,
514, 515, 410, 411, 412, 413, 426, 427, 428, 429, 430, 431, 444, 445, 446, 447,
448, 449, 462, 463, 464, 465, 466, 467, 480, 481, 482, 483, 484, 485, 498, 499,
500, 501, 502, 503, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527,
540, 541, 542, 543, 544, 545, 558, 559, 560, 561, 562, 563, 528, 529, 530, 531,
532, 533, 546, 547, 548, 549, 550, 551, 564, 565, 566, 567, 568, 569, 534, 535,
536, 537, 538, 539, 552, 553, 554, 555, 556, 557, 570, 571, 572, 573, 574, 575,
},
}, {
{
0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 4, 5, 18, 19,
10, 11, 24, 25, 16, 17, 30, 31, 20, 21, 22, 23, 26, 27, 28, 29,
32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 48, 49, 50, 51,
40, 41, 54, 55, 56, 57, 46, 47, 60, 61, 62, 63, 52, 53, 66, 67,
68, 69, 58, 59, 72, 73, 74, 75, 76, 77, 64, 65, 78, 79, 80, 81,
82, 83, 70, 71, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
108, 109, 110, 111, 96, 97, 98, 99, 100, 101, 114, 115, 116, 117, 102, 103,
104, 105, 106, 107, 120, 121, 122, 123, 112, 113, 126, 127, 128, 129, 130, 131,
144, 145, 146, 147, 118, 119, 132, 133, 134, 135, 136, 137, 150, 151, 152, 153,
124, 125, 138, 139, 140, 141, 142, 143, 156, 157, 158, 159, 148, 149, 162, 163,
164, 165, 166, 167, 180, 181, 182, 183, 184, 185, 154, 155, 168, 169, 170, 171,
172, 173, 186, 187, 188, 189, 190, 191, 160, 161, 174, 175, 176, 177, 178, 179,
192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 216, 217, 218, 219,
220, 221, 234, 235, 236, 237, 238, 239, 204, 205, 206, 207, 208, 209, 222, 223,
224, 225, 226, 227, 240, 241, 242, 243, 244, 245, 210, 211, 212, 213, 214, 215,
228, 229, 230, 231, 232, 233, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
256, 257, 270, 271, 272, 273, 274, 275, 288, 289, 290, 291, 292, 293, 306, 307,
308, 309, 258, 259, 260, 261, 262, 263, 276, 277, 278, 279, 280, 281, 294, 295,
296, 297, 298, 299, 312, 313, 314, 315, 264, 265, 266, 267, 268, 269, 282, 283,
284, 285, 286, 287, 300, 301, 302, 303, 304, 305, 318, 319, 320, 321, 310, 311,
324, 325, 326, 327, 328, 329, 342, 343, 344, 345, 346, 347, 360, 361, 362, 363,
364, 365, 378, 379, 380, 381, 382, 383, 396, 397, 398, 399, 316, 317, 330, 331,
332, 333, 334, 335, 348, 349, 350, 351, 352, 353, 366, 367, 368, 369, 370, 371,
384, 385, 386, 387, 388, 389, 402, 403, 404, 405, 322, 323, 336, 337, 338, 339,
340, 341, 354, 355, 356, 357, 358, 359, 372, 373, 374, 375, 376, 377, 390, 391,
392, 393, 394, 395, 408, 409, 410, 411, 400, 401, 414, 415, 416, 417, 418, 419,
432, 433, 434, 435, 436, 437, 450, 451, 452, 453, 454, 455, 468, 469, 470, 471,
472, 473, 486, 487, 488, 489, 490, 491, 504, 505, 506, 507, 508, 509, 522, 523,
524, 525, 526, 527, 540, 541, 542, 543, 544, 545, 558, 559, 560, 561, 562, 563,
406, 407, 420, 421, 422, 423, 424, 425, 438, 439, 440, 441, 442, 443, 456, 457,
458, 459, 460, 461, 474, 475, 476, 477, 478, 479, 492, 493, 494, 495, 496, 497,
510, 511, 512, 513, 514, 515, 528, 529, 530, 531, 532, 533, 546, 547, 548, 549,
550, 551, 564, 565, 566, 567, 568, 569, 412, 413, 426, 427, 428, 429, 430, 431,
444, 445, 446, 447, 448, 449, 462, 463, 464, 465, 466, 467, 480, 481, 482, 483,
484, 485, 498, 499, 500, 501, 502, 503, 516, 517, 518, 519, 520, 521, 534, 535,
536, 537, 538, 539, 552, 553, 554, 555, 556, 557, 570, 571, 572, 573, 574, 575,
}, {
0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 4, 5, 18, 19,
10, 11, 24, 25, 16, 17, 30, 31, 20, 21, 22, 23, 26, 27, 28, 29,
32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 48, 49, 50, 51,
40, 41, 54, 55, 56, 57, 46, 47, 60, 61, 62, 63, 52, 53, 66, 67,
68, 69, 58, 59, 72, 73, 74, 75, 64, 65, 78, 79, 80, 81, 70, 71,
84, 85, 86, 87, 76, 77, 90, 91, 92, 93, 94, 95, 108, 109, 82, 83,
96, 97, 98, 99, 100, 101, 114, 115, 88, 89, 102, 103, 104, 105, 106, 107,
120, 121, 110, 111, 112, 113, 126, 127, 128, 129, 130, 131, 144, 145, 116, 117,
118, 119, 132, 133, 134, 135, 136, 137, 150, 151, 122, 123, 124, 125, 138, 139,
140, 141, 142, 143, 156, 157, 146, 147, 148, 149, 162, 163, 164, 165, 166, 167,
180, 181, 182, 183, 152, 153, 154, 155, 168, 169, 170, 171, 172, 173, 186, 187,
188, 189, 158, 159, 160, 161, 174, 175, 176, 177, 178, 179, 192, 193, 194, 195,
184, 185, 198, 199, 200, 201, 202, 203, 216, 217, 218, 219, 220, 221, 234, 235,
190, 191, 204, 205, 206, 207, 208, 209, 222, 223, 224, 225, 226, 227, 240, 241,
196, 197, 210, 211, 212, 213, 214, 215, 228, 229, 230, 231, 232, 233, 246, 247,
236, 237, 238, 239, 252, 253, 254, 255, 256, 257, 270, 271, 272, 273, 274, 275,
288, 289, 290, 291, 242, 243, 244, 245, 258, 259, 260, 261, 262, 263, 276, 277,
278, 279, 280, 281, 294, 295, 296, 297, 248, 249, 250, 251, 264, 265, 266, 267,
268, 269, 282, 283, 284, 285, 286, 287, 300, 301, 302, 303, 292, 293, 306, 307,
308, 309, 310, 311, 324, 325, 326, 327, 328, 329, 342, 343, 344, 345, 346, 347,
360, 361, 362, 363, 364, 365, 298, 299, 312, 313, 314, 315, 316, 317, 330, 331,
332, 333, 334, 335, 348, 349, 350, 351, 352, 353, 366, 367, 368, 369, 370, 371,
304, 305, 318, 319, 320, 321, 322, 323, 336, 337, 338, 339, 340, 341, 354, 355,
356, 357, 358, 359, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
396, 397, 398, 399, 400, 401, 414, 415, 416, 417, 418, 419, 432, 433, 434, 435,
436, 437, 450, 451, 452, 453, 454, 455, 468, 469, 470, 471, 472, 473, 486, 487,
488, 489, 490, 491, 504, 505, 506, 507, 508, 509, 522, 523, 524, 525, 526, 527,
540, 541, 542, 543, 544, 545, 558, 559, 560, 561, 562, 563, 384, 385, 386, 387,
388, 389, 402, 403, 404, 405, 406, 407, 420, 421, 422, 423, 424, 425, 438, 439,
440, 441, 442, 443, 456, 457, 458, 459, 460, 461, 474, 475, 476, 477, 478, 479,
492, 493, 494, 495, 496, 497, 510, 511, 512, 513, 514, 515, 528, 529, 530, 531,
532, 533, 546, 547, 548, 549, 550, 551, 564, 565, 566, 567, 568, 569, 390, 391,
392, 393, 394, 395, 408, 409, 410, 411, 412, 413, 426, 427, 428, 429, 430, 431,
444, 445, 446, 447, 448, 449, 462, 463, 464, 465, 466, 467, 480, 481, 482, 483,
484, 485, 498, 499, 500, 501, 502, 503, 516, 517, 518, 519, 520, 521, 534, 535,
536, 537, 538, 539, 552, 553, 554, 555, 556, 557, 570, 571, 572, 573, 574, 575,
}, {
0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 4, 5, 18, 19,
10, 11, 24, 25, 16, 17, 30, 31, 20, 21, 22, 23, 26, 27, 28, 29,
32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 48, 49, 50, 51,
40, 41, 54, 55, 56, 57, 46, 47, 60, 61, 62, 63, 52, 53, 66, 67,
68, 69, 58, 59, 72, 73, 74, 75, 76, 77, 64, 65, 78, 79, 80, 81,
82, 83, 70, 71, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
108, 109, 110, 111, 112, 113, 96, 97, 98, 99, 100, 101, 114, 115, 116, 117,
118, 119, 102, 103, 104, 105, 106, 107, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 144, 145, 146, 147, 148, 149, 162, 163, 164, 165, 132, 133,
134, 135, 136, 137, 150, 151, 152, 153, 154, 155, 168, 169, 170, 171, 138, 139,
140, 141, 142, 143, 156, 157, 158, 159, 160, 161, 174, 175, 176, 177, 166, 167,
180, 181, 182, 183, 184, 185, 198, 199, 200, 201, 202, 203, 216, 217, 218, 219,
220, 221, 172, 173, 186, 187, 188, 189, 190, 191, 204, 205, 206, 207, 208, 209,
222, 223, 224, 225, 226, 227, 178, 179, 192, 193, 194, 195, 196, 197, 210, 211,
212, 213, 214, 215, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
252, 253, 254, 255, 256, 257, 270, 271, 272, 273, 274, 275, 288, 289, 290, 291,
292, 293, 306, 307, 240, 241, 242, 243, 244, 245, 258, 259, 260, 261, 262, 263,
276, 277, 278, 279, 280, 281, 294, 295, 296, 297, 298, 299, 312, 313, 246, 247,
248, 249, 250, 251, 264, 265, 266, 267, 268, 269, 282, 283, 284, 285, 286, 287,
300, 301, 302, 303, 304, 305, 318, 319, 308, 309, 310, 311, 324, 325, 326, 327,
328, 329, 342, 343, 344, 345, 346, 347, 360, 361, 362, 363, 364, 365, 378, 379,
380, 381, 382, 383, 396, 397, 398, 399, 400, 401, 314, 315, 316, 317, 330, 331,
332, 333, 334, 335, 348, 349, 350, 351, 352, 353, 366, 367, 368, 369, 370, 371,
384, 385, 386, 387, 388, 389, 402, 403, 404, 405, 406, 407, 320, 321, 322, 323,
336, 337, 338, 339, 340, 341, 354, 355, 356, 357, 358, 359, 372, 373, 374, 375,
376, 377, 390, 391, 392, 393, 394, 395, 408, 409, 410, 411, 412, 413, 414, 415,
416, 417, 418, 419, 432, 433, 434, 435, 436, 437, 450, 451, 452, 453, 454, 455,
468, 469, 470, 471, 472, 473, 486, 487, 488, 489, 490, 491, 504, 505, 506, 507,
508, 509, 522, 523, 524, 525, 526, 527, 420, 421, 422, 423, 424, 425, 438, 439,
440, 441, 442, 443, 456, 457, 458, 459, 460, 461, 474, 475, 476, 477, 478, 479,
492, 493, 494, 495, 496, 497, 510, 511, 512, 513, 514, 515, 528, 529, 530, 531,
532, 533, 426, 427, 428, 429, 430, 431, 444, 445, 446, 447, 448, 449, 462, 463,
464, 465, 466, 467, 480, 481, 482, 483, 484, 485, 498, 499, 500, 501, 502, 503,
516, 517, 518, 519, 520, 521, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543,
544, 545, 558, 559, 560, 561, 562, 563, 546, 547, 548, 549, 550, 551, 564, 565,
566, 567, 568, 569, 552, 553, 554, 555, 556, 557, 570, 571, 572, 573, 574, 575,
},
},
};
const f32 var7005969c[] = {
-0.51449573040009,
-0.47173196077347,
-0.31337743997574,
-0.18191319704056,
-0.094574190676212,
-0.040965583175421,
-0.01419856864959,
-0.0036999746225774,
};
const f32 var700596bc[] = {
0.85749292373657,
0.88174200057983,
0.94962865114212,
0.9833145737648,
0.99551779031754,
0.99916058778763,
0.99989920854568,
0.99999314546585,
};
const u32 var700596dc[2][15] = {
{ 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000 },
{ 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000 },
};
const u32 var70059754[2][4] = {
{ 22050, 24000, 16000, 22050 },
{ 44100, 48000, 32000, 44100 },
};
extern struct mp3decfourbytes *var8009c650[];
extern f32 *var8009c6d8;
extern f32 *var8009c6dc;
bool mp3decInit(void)
{
s32 i;
s32 sp268;
s32 sp264;
s32 sp260 = 1;
s32 sp25c;
u8 *sp258;
struct mp3decthing *sp254;
struct mp3decfourbytes *sp250;
const u8 sp248[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
s32 sp244;
u8 sp243;
s32 sp23c;
s32 sp238;
s32 sp234;
s32 sp230;
s32 sp22c;
s32 sp228;
s16 sp28[256];
s32 sp24;
sp234 = 0;
for (i = 0; i < 36; i++) {
sine_block[0][i] = sinf((i + 0.5f) * 0.087266460061073f);
}
for (i = 0; i < 18; i++) {
sine_block[1][i] = sinf((i + 0.5f) * 0.087266460061073f);
}
for (i = 18; i < 24; i++) {
sine_block[1][i] = 1.0f;
}
for (i = 24; i < 30; i++) {
sine_block[1][i] = sinf((i + 0.5f - 18.0f) * 0.26179939508438f);
}
for (i = 30; i < 36; i++) {
sine_block[1][i] = 0.0f;
}
for (i = 0; i < 6; i++) {
sine_block[3][i] = 0.0f;
}
for (i = 6; i < 12; i++) {
sine_block[3][i] = sinf((i + 0.5f - 6.0f) * 0.26179939508438f);
}
for (i = 12; i < 18; i++) {
sine_block[3][i] = 1.0f;
}
for (i = 18; i < 36; i++) {
sine_block[3][i] = sinf((i + 0.5f) * 0.087266460061073f);
}
if (var8009c640 == NULL) {
return false;
}
bzero(var8009c640, 10500 * sizeof(struct mp3decfourbytes));
for (sp264 = 0; sp264 < 34; sp264++) {
sp254 = var8005f670[sp264];
if (sp254 == NULL) {
var8009c650[sp264] = NULL;
continue;
}
var8009c650[sp264] = &var8009c640[sp234];
sp250 = var8009c650[sp264];
for (sp268 = 0; sp268 < 10500; sp268++) {
sp250[sp268].unk02 = -1;
sp250[sp268].unk03 = -1;
}
sp230 = 1;
sp228 = 1;
bzero(sp28, sizeof(sp28));
sp260 = 1;
while (sp228) {
sp228 = 0;
for (sp22c = 0, sp254 = var8005f670[sp264]; sp254->unk00 != 100; sp254++, sp22c++) {
sp25c = sp28[sp22c];
if (sp230 <= sp254->unk02) {
sp258 = &sp250[sp25c].bytes[sp254->unk04 & 1 << (sp230 - 1) ? 1 : 0];
if (*sp258) {
sp25c = sp28[sp22c] + *sp258;
} else {
*sp258 = sp260 - sp25c;
sp25c = sp260++;
}
if (sp254->unk02 == sp230) {
sp250[sp25c].unk02 = sp254->unk00;
sp250[sp25c].unk03 = sp254->unk01;
} else {
sp228++;
}
sp28[sp22c] = sp25c;
}
}
sp230++;
}
sp234 += sp260;
for (sp254 = var8005f670[sp264]; sp254->unk00 != 100; sp254++) {
sp244 = sp254->unk02 < 8 ? sp254->unk02 : 8;
sp243 = 0;
for (i = 0; i < sp244; i++) {
if (sp254->unk04 & (1 << i)) {
sp243 |= sp248[i];
}
}
if (sp254->unk02 >= 9) {
var8005f6fc[sp264 * 256 + sp243] = 0;
continue;
}
sp23c = 256 >> sp244;
sp238 = (sp254->unk01 * 16) | sp254->unk00;
for (i = 0; i < sp23c; i++) {
sp24 = sp243 | i;
var8005f6f8[((sp264 * 256) + (sp243 | i))] = sp238;
var8005f6fc[((sp264 * 256) + (sp243 | i))] = sp244;
}
}
}
var8009c648 = var8009c644;
if (var8009c648 == NULL) {
return false;
}
for (i = 0; i < 8192; i++) {
var8009c648[i] = func00045ed0(i, 1.3333333730698f);
}
for (i = 0; i < 256; i++) {
var8009c6d8[i] = func00045ed0(2.0f, i * -0.5f);
var8009c6dc[i] = func00045ed0(2.0f, i * -2.0f);
}
return true;
}
bool mp3dec00040164(struct asistream *stream, u32 gr, u32 ch)
{
s32 sp1bc;
s32 sp1b8;
s32 sp1b4;
s32 sp1b0;
const s32 sp158[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0,
};
f32 sp100[22];
f32 sp64[3][13];
f32 sp60;
s32 sfb;
s32 sp58;
s32 scale;
s32 sp50;
s32 sp4c;
s32 sp48;
s32 sp44;
f32 *sp40;
s16 *sp3c;
u8 *sp38;
s32 sp34;
s32 sp30;
s32 window_switching;
s32 sp28;
f32 *sp24;
sp1bc = stream->samplerateindex + stream->version * 3;
if (stream->window_switching[gr][ch] && stream->block_type[gr][ch] == 2) {
if (stream->mixed_block_flag[gr][ch]) {
sp1b8 = var700579b8[sp1bc].unk00[1];
} else {
sp1b8 = var700579b8[sp1bc].unk2e[1] * 3;
sp1b0 = var700579b8[sp1bc].unk2e[1];
sp1b4 = 0;
}
} else {
sp1b8 = var700579b8[sp1bc].unk00[1];
}
sp60 = func00045ed0(2, (stream->global_gain[gr][ch] - 210.0f) * 0.25f);
scale = stream->scalefac_scale[gr][ch];
for (sfb = 0; sfb < 22; sfb++) {
sp4c = (stream->scalefac[gr][ch].l[sfb] + stream->preflag[gr][ch] * sp158[sfb]) * (scale + 1);
sp100[sfb] = var8009c6d8[sp4c] * sp60;
}
for (sp58 = 0; sp58 < 3; sp58++) {
for (sfb = 0; sfb < 13; sfb++) {
sp50 = stream->subblock_gain[gr][ch][sp58];
sp4c = stream->scalefac[gr][ch].s[sp58][sfb] * (scale + 1);
sp64[sp58][sfb] = sp60 * var8009c6dc[sp50] * var8009c6d8[sp4c];
}
}
sfb = 0;
sp48 = 0;
sp44 = stream->unk465c[ch];
sp40 = stream->unk4664[ch][0].unk00;
sp3c = stream->unk3f94[ch];
sp38 = stream->unk4418[ch];
sp34 = stream->block_type[gr][ch] == 2 && stream->mixed_block_flag[gr][ch] == 0;
sp30 = stream->block_type[gr][ch] == 2 && stream->mixed_block_flag[gr][ch] != 0;
window_switching = stream->window_switching[gr][ch];
while (sp48 < sp44) {
if (sp1b8 > sp44) {
sp1b8 = sp44;
}
if (window_switching) {
if (sp34 || (sp30 && sp48 >= 36)) {
sp58 = (sp48 - sp1b4) / sp1b0;
sp28 = sp1b4 + sp1b0;
}
}
while (sp48 < sp1b8) {
if (window_switching && (sp34 || (sp30 && sp48 >= 36))) {
if (sp48 >= sp28) {
sp28 += sp1b0;
sp58++;
}
sp24 = sp64[sp58];
if (*sp38++) {
*sp40++ = -(var8009c648[*sp3c++] * sp24[sfb]);
} else {
*sp40++ = var8009c648[*sp3c++] * sp24[sfb];
}
} else {
if (*sp38++) {
*sp40++ = -(var8009c648[*sp3c++] * sp100[sfb]);
} else {
*sp40++ = var8009c648[*sp3c++] * sp100[sfb];
}
}
sp48++;
}
if (stream->window_switching[gr][ch] && stream->block_type[gr][ch] == 2) {
if (stream->mixed_block_flag[gr][ch]) {
if (var700579b8[sp1bc].unk00[8] == sp48) {
sp1b8 = var700579b8[sp1bc].unk2e[4] * 3;
sfb = 3;
sp1b0 = var700579b8[sp1bc].unk2e[sfb + 1] - var700579b8[sp1bc].unk2e[sfb];
sp1b4 = var700579b8[sp1bc].unk2e[sfb] * 3;
} else if (sp48 < var700579b8[sp1bc].unk00[8]) {
sp1b8 = var700579b8[sp1bc].unk00[++sfb + 1];
} else {
sp1b8 = var700579b8[sp1bc].unk2e[++sfb + 1] * 3;
sp1b0 = var700579b8[sp1bc].unk2e[sfb + 1] - var700579b8[sp1bc].unk2e[sfb];
sp1b4 = var700579b8[sp1bc].unk2e[sfb] * 3;
}
} else {
sp1b8 = var700579b8[sp1bc].unk2e[++sfb + 1] * 3;
sp1b0 = var700579b8[sp1bc].unk2e[sfb + 1] - var700579b8[sp1bc].unk2e[sfb];
sp1b4 = var700579b8[sp1bc].unk2e[sfb] * 3;
}
} else {
sp1b8 = var700579b8[sp1bc].unk00[++sfb + 1];
}
}
if (sp48 < 576) {
bzero(sp40, stream->unk4660[ch] * 4);
return true;
}
return true;
}
bool mp3decUnpackScaleFac(struct asistream *stream, u32 gr, u32 ch)
{
s32 i;
s32 sfb;
s32 window;
if (stream->window_switching[gr][ch] != 0 && stream->block_type[gr][ch] == 2) {
if (stream->mixed_block_flag[gr][ch] != 0) {
for (sfb = 0; sfb < 8; sfb++) {
stream->scalefac[gr][ch].l[sfb] =
var70057b7c[0][stream->scalefac_compress[gr][ch]]
? mp3utilGetBits(stream->unk1c, &stream->unk2020, var70057b7c[0][stream->scalefac_compress[gr][ch]])
: 0;
}
for (sfb = 3; sfb < 6; sfb++) {
for (window = 0; window < 3; window++) {
stream->scalefac[gr][ch].s[window][sfb] =
var70057b7c[0][stream->scalefac_compress[gr][ch]]
? mp3utilGetBits(stream->unk1c, &stream->unk2020, var70057b7c[0][stream->scalefac_compress[gr][ch]])
: 0;
}
}
for (sfb = 6; sfb < 12; sfb++) {
for (window = 0; window < 3; window++) {
stream->scalefac[gr][ch].s[window][sfb] =
var70057b7c[1][stream->scalefac_compress[gr][ch]]
? mp3utilGetBits(stream->unk1c, &stream->unk2020, var70057b7c[1][stream->scalefac_compress[gr][ch]])
: 0;
}
}
} else {
for (i = 0; i < 2; i++) {
for (sfb = var70057b74[5 + i]; sfb < var70057b74[6 + i]; sfb++) {
for (window = 0; window < 3; window++) {
stream->scalefac[gr][ch].s[window][sfb] =
var70057b7c[i][stream->scalefac_compress[gr][ch]]
? mp3utilGetBits(stream->unk1c, &stream->unk2020, var70057b7c[i][stream->scalefac_compress[gr][ch]])
: 0;
}
}
}
}
for (window = 0; window < 3; window++) {
stream->scalefac[gr][ch].s[window][12] = 0;
}
} else {
for (i = 0; i < 4; i++) {
if (stream->scfsi[ch][i] == 0 || gr == 0) {
for (sfb = var70057b74[i]; sfb < var70057b74[i + 1]; sfb++) {
stream->scalefac[gr][ch].l[sfb] =
var70057b7c[i < 2 ? 0 : 1][stream->scalefac_compress[gr][ch]]
? mp3utilGetBits(stream->unk1c, &stream->unk2020, var70057b7c[i < 2 ? 0 : 1][stream->scalefac_compress[gr][ch]])
: 0;
}
} else {
for (sfb = var70057b74[i]; sfb < var70057b74[1 + i]; sfb++) {
stream->scalefac[1][ch].l[sfb] = stream->scalefac[0][ch].l[sfb];
}
}
}
stream->scalefac[gr][ch].unk3d60 = 0;
}
return true;
}
bool mp3dec00041600(struct asistream *stream, u32 gr, u32 ch)
{
const s32 sp70[2][3][3][4] = {
{
{ { 6, 5, 5, 5 }, { 9, 9, 9, 9 }, { 6, 9, 9, 9 } },
{ { 6, 5, 7, 3 }, { 9, 9, 12, 6 }, { 6, 9, 12, 6 } },
{ { 11, 10, 0, 0 }, { 18, 18, 0, 0 }, { 15, 18, 0, 0 } },
}, {
{ { 7, 7, 7, 0 }, { 12, 12, 12, 0 }, { 6, 15, 12, 0 } },
{ { 6, 6, 6, 3 }, { 12, 9, 9, 6 }, { 6, 12, 9, 6 } },
{ { 8, 8, 5, 0 }, { 15, 12, 9, 0 }, { 6, 18, 9, 0 } },
},
};
s32 sp60[4];
s32 compress;
u32 *preflag;
s32 mixed;
s32 block_type;
s32 window_switching;
s32 sp48;
s32 sp44;
s32 i;
s32 j;
s32 sp38;
s32 sp28[4];
s32 sfb;
s32 sp20;
s32 sp1c;
compress = stream->scalefac_compress[0][ch];
preflag = &stream->preflag[0][ch];
mixed = stream->mixed_block_flag[0][ch];
block_type = stream->block_type[0][ch];
window_switching = stream->window_switching[0][ch];
if ((stream->unk3bc4 != 1 && stream->unk3bc4 != 3) || ch != 1) {
sp48 = 0;
if (compress < 400) {
sp60[0] = (compress >> 4) / 5;
sp60[1] = (compress >> 4) % 5;
sp60[2] = (compress % 16) >> 2;
sp60[3] = compress % 4;
*preflag = 0;
sp44 = 0;
} else if (compress >= 400 && compress < 500) {
sp60[0] = ((compress - 400) >> 2) / 5;
sp60[1] = ((compress - 400) >> 2) % 5;
sp60[2] = (compress - 400) % 4;
sp60[3] = 0;
*preflag = 0;
sp44 = 1;
} else if (compress >= 500 && compress < 512) {
sp60[0] = (compress - 500) / 3;
sp60[1] = (compress - 500) % 3;
sp60[2] = 0;
sp60[3] = 0;
*preflag = 1;
sp44 = 2;
}
}
if (stream->unk3bc4 == 1 || stream->unk3bc4 == 3) {
if (ch == 1) {
stream->unk3ef8 = compress % 2;
sp38 = compress >> 1;
sp48 = 1;
if (sp38 < 180) {
sp60[0] = sp38 / 36;
sp60[1] = (sp38 % 36) / 6;
sp60[2] = (sp38 % 36) % 6;
sp60[3] = 0;
*preflag = 0;
sp44 = 0;
} else if (sp38 >= 180 && sp38 < 244) {
sp60[0] = ((sp38 - 180) % 64) >> 4;
sp60[1] = ((sp38 - 180) % 16) >> 2;
sp60[2] = (sp38 - 180) % 4;
sp60[3] = 0;
*preflag = 0;
sp44 = 1;
} else if (sp38 >= 244 && sp38 < 255) {
sp60[0] = (sp38 - 244) / 3;
sp60[1] = (sp38 - 244) % 3;
sp60[2] = 0;
sp60[3] = 0;
*preflag = 0;
sp44 = 2;
}
}
}
if (window_switching && block_type == 2) {
bcopy(sp70[sp48][sp44][mixed + 1], sp28, 0x10);
} else {
bcopy(sp70[sp48][sp44][0], sp28, 0x10);
}
sfb = 0;
if (!window_switching || (window_switching && block_type != 2)) {
for (i = 0; i < 4; i++) {
sp20 = sp60[i];
sp1c = (1 << sp20) - 1;
for (j = 0; j < sp28[i]; j++) {
stream->scalefac[0][ch].l[sfb] = sp20 ? mp3utilGetBits(stream->unk1c, &stream->unk2020, sp20) : 0;
if (ch != 0) {
stream->unk3efc[sfb] = sp1c;
}
sfb++;
}
}
} else if (block_type == 2) {
if (mixed == 0) {
for (i = 0; i < 4; i++) {
sp20 = sp60[i];
sp1c = (1 << sp20) - 1;
for (j = 0; j < sp28[i]; j += 3) {
stream->scalefac[0][ch].s[0][sfb] = sp20 ? mp3utilGetBits(stream->unk1c, &stream->unk2020, sp20) : 0;
stream->scalefac[0][ch].s[1][sfb] = sp20 ? mp3utilGetBits(stream->unk1c, &stream->unk2020, sp20) : 0;
stream->scalefac[0][ch].s[2][sfb] = sp20 ? mp3utilGetBits(stream->unk1c, &stream->unk2020, sp20) : 0;
if (ch != 0) {
stream->unk3f14[sfb] = sp1c;
}
sfb++;
}
}
} else {
sp20 = sp60[0];
sp1c = (1 << sp20) - 1;
for (j = 0; j < 6; j++) {
stream->scalefac[0][ch].l[sfb] = sp20 ? mp3utilGetBits(stream->unk1c, &stream->unk2020, sp20) : 0;
if (ch != 0) {
stream->unk3efc[sfb] = sp1c;
}
sfb++;
}
sp28[0] -= 6;
sfb = 3;
for (i = 0; i < 4; i++) {
sp20 = sp60[i];
sp1c = (1 << sp20) - 1;
for (j = 0; j < sp28[i]; j += 3) {
stream->scalefac[0][ch].s[0][sfb] = sp20 ? mp3utilGetBits(stream->unk1c, &stream->unk2020, sp20) : 0;
stream->scalefac[0][ch].s[1][sfb] = sp20 ? mp3utilGetBits(stream->unk1c, &stream->unk2020, sp20) : 0;
stream->scalefac[0][ch].s[2][sfb] = sp20 ? mp3utilGetBits(stream->unk1c, &stream->unk2020, sp20) : 0;
if (ch != 0) {
stream->unk3f14[sfb] = sp1c;
}
sfb++;
}
}
}
}
return true;
}
bool mp3dec00042238(struct asistream *stream, u32 gr, u32 ch)
{
s32 sp64 = stream->unk2020;
s32 sp60;
s32 sp54[3];
const s16 *sp50;
const u8 *sp4c;
s32 sp48;
s16 *sp44;
u8 *sp40;
s32 i;
u32 sp38;
s32 sp34;
s32 sp30;
s32 sp2c;
s32 sp28;
if (stream->version != VERSION_2) {
mp3decUnpackScaleFac(stream, gr, ch);
} else {
mp3dec00041600(stream, gr, ch);
}
sp60 = stream->big_value[gr][ch] * 2;
sp50 = var70057860[stream->version][stream->samplerateindex];
sp4c = var70057968[stream->version][stream->samplerateindex];
if (stream->window_switching[gr][ch] == 0 && stream->block_type[gr][ch] == 0) {
sp54[0] = sp50[stream->region0_count[gr][ch]] + 1;
if (sp54[0] > sp60) {
sp54[0] = sp54[1] = sp60;
} else {
sp54[1] = sp50[stream->region0_count[gr][ch] + stream->region1_count[gr][ch] + 1] + 1;
if (sp54[1] > sp60) {
sp54[1] = sp60;
}
}
} else {
if (stream->block_type[gr][ch] == 2 && stream->mixed_block_flag[gr][ch] == 0) {
sp54[0] = sp4c[2] * 3 + 3;
} else {
sp54[0] = sp50[7] + 1;
}
if (sp54[0] > sp60) {
sp54[0] = sp60;
}
sp54[1] = sp60;
}
sp54[2] = sp60;
sp48 = 0;
sp44 = stream->unk3f94[ch];
sp40 = stream->unk4418[ch];
for (i = 0; i < 3; i++) {
sp38 = stream->table_select[gr][ch][i];
sp34 = var700577d8[sp38];
sp30 = sp54[i];
if (var8009c650[sp38] == NULL) {
sp2c = sp30 - sp48;
bzero(sp44, sp2c * 2);
sp44 += sp2c;
sp40 += sp2c;
sp48 = sp30;
} else {
sp48 = mp3util000462f8(stream->unk1c, &stream->unk2020, sp38, sp48, sp34, sp30, &sp44, &sp40);
}
}
sp38 = stream->count1table_select[gr][ch] + 32;
sp28 = stream->part2_3_length[gr][ch] + sp64;
sp48 = mp3util000464a8(stream->unk1c, &stream->unk2020, sp38, sp48, sp28, &sp44, &sp40);
stream->unk2020 = sp28;
if (sp48 > 576) {
stream->unk465c[ch] = 576;
} else {
stream->unk465c[ch] = sp48;
}
if (sp48 < 576) {
stream->unk4660[ch] = 576 - sp48;
bzero(sp44, stream->unk4660[ch] * 2);
} else {
stream->unk4660[ch] = 0;
}
return true;
}
bool mp3dec000427d8(struct asistream *stream, u32 gr)
{
const s16 *sp14 = var70057b9c[stream->version][stream->samplerateindex];
f32 *sp10 = stream->unk4f64[0][0].unk00;
f32 *sp0c = stream->unk4664[0][0].unk00;
s32 i = 0;
if (stream->window_switching[gr][0] && stream->window_switching[gr][2] == 2) {
if (stream->window_switching[gr][4]) {
while (i++ < 36) {
*(sp10++) = *(sp0c++);
}
}
while (i < 576) {
sp10[sp14[i++]] = *(sp0c++);
}
} else {
while (i++ < 576) {
*(sp10++) = *(sp0c++);
}
}
return true;
}
bool mp3decReduceAliases(struct asistream *stream, u32 gr, u32 ch)
{
s32 i;
if (stream->window_switching[gr][ch] && stream->block_type[gr][ch] == 2) {
return true;
}
for (i = 1; i < 32; i++) {
struct asistream_4f64 *sp08 = &stream->unk4f64[ch][i];
f32 sp04;
f32 sp00;
sp04 = sp08->unk00[0];
sp00 = sp08->unk00[-1];
sp08->unk00[-1] = sp00 * var700596bc[0] - var7005969c[0] * sp04;
sp08->unk00[0] = sp04 * var700596bc[0] + var7005969c[0] * sp00;
sp04 = sp08->unk00[1];
sp00 = sp08->unk00[-2];
sp08->unk00[-2] = sp00 * var700596bc[1] - var7005969c[1] * sp04;
sp08->unk00[1] = sp04 * var700596bc[1] + var7005969c[1] * sp00;
sp04 = sp08->unk00[2];
sp00 = sp08->unk00[-3];
sp08->unk00[-3] = sp00 * var700596bc[2] - var7005969c[2] * sp04;
sp08->unk00[2] = sp04 * var700596bc[2] + var7005969c[2] * sp00;
sp04 = sp08->unk00[3];
sp00 = sp08->unk00[-4];
sp08->unk00[-4] = sp00 * var700596bc[3] - var7005969c[3] * sp04;
sp08->unk00[3] = sp04 * var700596bc[3] + var7005969c[3] * sp00;
sp04 = sp08->unk00[4];
sp00 = sp08->unk00[-5];
sp08->unk00[-5] = sp00 * var700596bc[4] - var7005969c[4] * sp04;
sp08->unk00[4] = sp04 * var700596bc[4] + var7005969c[4] * sp00;
sp04 = sp08->unk00[5];
sp00 = sp08->unk00[-6];
sp08->unk00[-6] = sp00 * var700596bc[5] - var7005969c[5] * sp04;
sp08->unk00[5] = sp04 * var700596bc[5] + var7005969c[5] * sp00;
sp04 = sp08->unk00[6];
sp00 = sp08->unk00[-7];
sp08->unk00[-7] = sp00 * var700596bc[6] - var7005969c[6] * sp04;
sp08->unk00[6] = sp04 * var700596bc[6] + var7005969c[6] * sp00;
sp04 = sp08->unk00[7];
sp00 = sp08->unk00[-8];
sp08->unk00[-8] = sp00 * var700596bc[7] - var7005969c[7] * sp04;
sp08->unk00[7] = sp04 * var700596bc[7] + var7005969c[7] * sp00;
}
return true;
}
bool mp3decSetSideInfo(struct asistream *stream)
{
s32 sp34;
s32 ch;
s32 scfsi_band;
s32 sp28;
s32 gr;
s32 region;
s32 window;
if (stream->version != VERSION_2) {
stream->unk206c = stream->channelmode == CHANNELMODE_SINGLEMONO ? 17 : 32;
} else {
stream->unk206c = stream->channelmode == CHANNELMODE_SINGLEMONO ? 9 : 17;
}
sp34 = stream->unk04(stream->unk00, &stream->buffer[stream->unk2068], stream->unk206c, -1);
if (stream->unk206c != sp34) {
return false;
}
stream->unk18 += stream->unk206c;
stream->numchannels = stream->channelmode == CHANNELMODE_SINGLEMONO ? 1 : 2;
stream->numgranules = stream->version != VERSION_2 ? 2 : 1;
if (stream->version != VERSION_2) {
stream->main_data_begin = mp3utilGetBits(stream->buffer, &stream->count, 9);
// skip private bits
stream->numchannels == 1
? mp3utilGetBits(stream->buffer, &stream->count, 5)
: mp3utilGetBits(stream->buffer, &stream->count, 3);
} else {
stream->main_data_begin = mp3utilGetBits(stream->buffer, &stream->count, 8);
stream->numchannels == 1
? mp3utilGetBits(stream->buffer, &stream->count, 1)
: mp3utilGetBits(stream->buffer, &stream->count, 2);
}
if (stream->version != VERSION_2) {
for (ch = 0; ch < stream->numchannels; ch++) {
for (scfsi_band = 0; scfsi_band < 4; scfsi_band++) {
stream->scfsi[ch][scfsi_band] = mp3utilGetBits(stream->buffer, &stream->count, 1);
}
}
}
if (stream->version != VERSION_2) {
sp28 = 4;
} else {
sp28 = 9;
}
for (gr = 0; gr < stream->numgranules; gr++) {
for (ch = 0; ch < stream->numchannels; ch++) {
stream->part2_3_length[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 12);
stream->big_value[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 9);
stream->global_gain[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 8);
stream->scalefac_compress[gr][ch] = sp28 ? mp3utilGetBits(stream->buffer, &stream->count, sp28) : 0;
stream->window_switching[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 1);
if (stream->window_switching[gr][ch]) {
stream->block_type[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 2);
stream->mixed_block_flag[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 1);
for (region = 0; region < 2; region++) {
stream->table_select[gr][ch][region] = mp3utilGetBits(stream->buffer, &stream->count, 5);
}
stream->table_select[gr][ch][2] = 0;
for (window = 0; window < 3; window++) {
stream->subblock_gain[gr][ch][window] = mp3utilGetBits(stream->buffer, &stream->count, 3);
}
} else {
stream->block_type[gr][ch] = 0;
stream->mixed_block_flag[gr][ch] = false;
for (region = 0; region < 3; region++) {
stream->table_select[gr][ch][region] = mp3utilGetBits(stream->buffer, &stream->count, 5);
}
stream->region0_count[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 4);
stream->region1_count[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 3);
}
if (stream->version != VERSION_2) {
stream->preflag[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 1);
}
stream->scalefac_scale[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 1);
stream->count1table_select[gr][ch] = mp3utilGetBits(stream->buffer, &stream->count, 1);
}
}
stream->unk3f7c = var700596dc[stream->version][stream->bitrateindex];
stream->unk3f80 = var70059754[stream->version][stream->samplerateindex];
if (stream->version != VERSION_2) {
stream->unk3f84 = stream->unk3f7c * 144 / stream->unk3f80;
} else {
stream->unk3f84 = stream->unk3f7c * 72 / stream->unk3f80;
}
stream->unk3f88 = (stream->unk3f84 + stream->haspadding) - (stream->unk2068 + stream->unk206c);
return true;
}
bool mp3decDecodeFrame(struct asistream *stream)
{
s32 sp954;
s32 gr = 0;
s32 ch;
s32 sp948;
s32 sp944;
s32 sp940;
s32 i;
s32 j;
u16 *sp934;
struct asistream_4f64 sp34[32];
f32 sp30;
f32 sp2c;
f32 sp28;
s32 sp24;
s32 sp20;
sp934 = stream->unk2070[stream->unk3ba0].unk00;
sp954 = mp3main00043dd0(stream);
if (sp954 == -1) {
return false;
}
stream->unk2020 = (sp954 - stream->main_data_begin) * 8;
if (stream->unk2020 < 0) {
return true;
}
for (ch = 0; ch < stream->numchannels; ch++) {
mp3dec00042238(stream, gr, ch);
mp3dec00040164(stream, gr, ch);
}
mp3dec000427d8(stream, gr);
if (stream->window_switching[gr][0] != 0 && stream->block_type[gr][0] == 2) {
sp948 = 32;
} else {
sp944 = (stream->unk465c[0] - 1) / 18 + 1;
sp948 = sp944;
}
for (ch = 0; ch < stream->numchannels; ch++) {
mp3decReduceAliases(stream, gr, ch);
if (stream->window_switching[gr][ch] != 0
&& stream->block_type[gr][ch] == 2
&& stream->mixed_block_flag[gr][ch] != 0) {
sp940 = 0;
} else if (stream->window_switching[gr][ch] == 0) {
sp940 = 0;
} else {
sp940 = stream->block_type[gr][ch];
}
if (sp940 == 2) {
for (i = 0; i < 2; i++) {
func00047550(&stream->unk4f64[ch][i], i, &sp34[i], &stream->unk6a64[ch][i]);
}
} else {
for (i = 0; i < 2; i++) {
func00046650(&stream->unk4f64[ch][i], i, &sp34[i], &stream->unk6a64[ch][i], sine_block[sp940]);
}
}
if (stream->window_switching[gr][ch]
&& stream->block_type[gr][ch] == 2
&& stream->mixed_block_flag[gr][ch]) {
sp940 = 2;
}
if (sp940 == 2) {
for (i = 2; i < sp948; i++) {
func00047550(&stream->unk4f64[ch][i], i, &sp34[i], &stream->unk6a64[ch][i]);
}
} else {
for (i = 2; i < sp948; i++) {
func00046650(&stream->unk4f64[ch][i], i, &sp34[i], &stream->unk6a64[ch][i], sine_block[sp940]);
}
}
while (i < 32) {
bcopy(&stream->unk6a64[ch][i], &sp34[i], sizeof(struct asistream_4f64));
bzero(&stream->unk6a64[ch][i], sizeof(struct asistream_4f64));
i++;
}
sp30 = 65536;
sp28 = 1;
sp20 = sp30 * sp28 * 16;
*sp934 = sp20 >> 16;
sp934++;
*sp934 = sp20 & 0xffff;
sp934++;
sp20 = -sp20;
*sp934 = sp20 >> 16;
sp934++;
*sp934 = sp20 & 0xffff;
sp934++;
sp2c = 2048 / sp28;
for (j = 0; j < 18; j++) {
for (i = 0; i < 32; i++) {
sp24 = sp34[i].unk00[j] * sp2c;
*sp934 = sp24;
sp934++;
}
}
}
return true;
}