diff --git a/src/strategies/generic/dct-generic.c b/src/strategies/generic/dct-generic.c index a7e96408..fb1f5aae 100644 --- a/src/strategies/generic/dct-generic.c +++ b/src/strategies/generic/dct-generic.c @@ -31,80 +31,155 @@ const int16_t kvz_g_dst_4[4][4] = { 55, -84, 74, -29 } }; +const int16_t kvz_g_dct_2[2][2] = +{ + {256, 256, }, + {256, -256, }, +}; + const int16_t kvz_g_dct_4[4][4] = { - { 64, 64, 64, 64 }, - { 83, 36, -36, -83 }, - { 64, -64, -64, 64 }, - { 36, -83, 83, -36 } + {256, 256, 256, 256, }, + {334, 139, -139, -334, }, + {256, -256, -256, 256, }, + {139, -334, 334, -139, }, }; + const int16_t kvz_g_dct_8[8][8] = { - { 64, 64, 64, 64, 64, 64, 64, 64 }, - { 89, 75, 50, 18, -18, -50, -75, -89 }, - { 83, 36, -36, -83, -83, -36, 36, 83 }, - { 75, -18, -89, -50, 50, 89, 18, -75 }, - { 64, -64, -64, 64, 64, -64, -64, 64 }, - { 50, -89, 18, 75, -75, -18, 89, -50 }, - { 36, -83, 83, -36, -36, 83, -83, 36 }, - { 18, -50, 75, -89, 89, -75, 50, -18 } + {256, 256, 256, 256, 256, 256, 256, 256, }, + {355, 301, 201, 71, -71, -201, -301, -355, }, + {334, 139, -139, -334, -334, -139, 139, 334, }, + {301, -71, -355, -201, 201, 355, 71, -301, }, + {256, -256, -256, 256, 256, -256, -256, 256, }, + {201, -355, 71, 301, -301, -71, 355, -201, }, + {139, -334, 334, -139, -139, 334, -334, 139, }, + { 71, -201, 301, -355, 355, -301, 201, -71, }, }; const int16_t kvz_g_dct_16[16][16] = { - { 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 }, - { 90, 87, 80, 70, 57, 43, 25, 9, -9, -25, -43, -57, -70, -80, -87, -90 }, - { 89, 75, 50, 18, -18, -50, -75, -89, -89, -75, -50, -18, 18, 50, 75, 89 }, - { 87, 57, 9, -43, -80, -90, -70, -25, 25, 70, 90, 80, 43, -9, -57, -87 }, - { 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83 }, - { 80, 9, -70, -87, -25, 57, 90, 43, -43, -90, -57, 25, 87, 70, -9, -80 }, - { 75, -18, -89, -50, 50, 89, 18, -75, -75, 18, 89, 50, -50, -89, -18, 75 }, - { 70, -43, -87, 9, 90, 25, -80, -57, 57, 80, -25, -90, -9, 87, 43, -70 }, - { 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64 }, - { 57, -80, -25, 90, -9, -87, 43, 70, -70, -43, 87, 9, -90, 25, 80, -57 }, - { 50, -89, 18, 75, -75, -18, 89, -50, -50, 89, -18, -75, 75, 18, -89, 50 }, - { 43, -90, 57, 25, -87, 70, 9, -80, 80, -9, -70, 87, -25, -57, 90, -43 }, - { 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36 }, - { 25, -70, 90, -80, 43, 9, -57, 87, -87, 57, -9, -43, 80, -90, 70, -25 }, - { 18, -50, 75, -89, 89, -75, 50, -18, -18, 50, -75, 89, -89, 75, -50, 18 }, - { 9, -25, 43, -57, 70, -80, 87, -90, 90, -87, 80, -70, 57, -43, 25, -9 } + {256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, }, + {360, 346, 319, 280, 230, 171, 105, 35, -35, -105, -171, -230, -280, -319, -346, -360, }, + {355, 301, 201, 71, -71, -201, -301, -355, -355, -301, -201, -71, 71, 201, 301, 355, }, + {346, 230, 35, -171, -319, -360, -280, -105, 105, 280, 360, 319, 171, -35, -230, -346, }, + {334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, }, + {319, 35, -280, -346, -105, 230, 360, 171, -171, -360, -230, 105, 346, 280, -35, -319, }, + {301, -71, -355, -201, 201, 355, 71, -301, -301, 71, 355, 201, -201, -355, -71, 301, }, + {280, -171, -346, 35, 360, 105, -319, -230, 230, 319, -105, -360, -35, 346, 171, -280, }, + {256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, }, + {230, -319, -105, 360, -35, -346, 171, 280, -280, -171, 346, 35, -360, 105, 319, -230, }, + {201, -355, 71, 301, -301, -71, 355, -201, -201, 355, -71, -301, 301, 71, -355, 201, }, + {171, -360, 230, 105, -346, 280, 35, -319, 319, -35, -280, 346, -105, -230, 360, -171, }, + {139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, }, + {105, -280, 360, -319, 171, 35, -230, 346, -346, 230, -35, -171, 319, -360, 280, -105, }, + { 71, -201, 301, -355, 355, -301, 201, -71, -71, 201, -301, 355, -355, 301, -201, 71, }, + { 35, -105, 171, -230, 280, -319, 346, -360, 360, -346, 319, -280, 230, -171, 105, -35, }, }; const int16_t kvz_g_dct_32[32][32] = { - { 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 }, - { 90, 90, 88, 85, 82, 78, 73, 67, 61, 54, 46, 38, 31, 22, 13, 4, -4, -13, -22, -31, -38, -46, -54, -61, -67, -73, -78, -82, -85, -88, -90, -90 }, - { 90, 87, 80, 70, 57, 43, 25, 9, -9, -25, -43, -57, -70, -80, -87, -90, -90, -87, -80, -70, -57, -43, -25, -9, 9, 25, 43, 57, 70, 80, 87, 90 }, - { 90, 82, 67, 46, 22, -4, -31, -54, -73, -85, -90, -88, -78, -61, -38, -13, 13, 38, 61, 78, 88, 90, 85, 73, 54, 31, 4, -22, -46, -67, -82, -90 }, - { 89, 75, 50, 18, -18, -50, -75, -89, -89, -75, -50, -18, 18, 50, 75, 89, 89, 75, 50, 18, -18, -50, -75, -89, -89, -75, -50, -18, 18, 50, 75, 89 }, - { 88, 67, 31, -13, -54, -82, -90, -78, -46, -4, 38, 73, 90, 85, 61, 22, -22, -61, -85, -90, -73, -38, 4, 46, 78, 90, 82, 54, 13, -31, -67, -88 }, - { 87, 57, 9, -43, -80, -90, -70, -25, 25, 70, 90, 80, 43, -9, -57, -87, -87, -57, -9, 43, 80, 90, 70, 25, -25, -70, -90, -80, -43, 9, 57, 87 }, - { 85, 46, -13, -67, -90, -73, -22, 38, 82, 88, 54, -4, -61, -90, -78, -31, 31, 78, 90, 61, 4, -54, -88, -82, -38, 22, 73, 90, 67, 13, -46, -85 }, - { 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83 }, - { 82, 22, -54, -90, -61, 13, 78, 85, 31, -46, -90, -67, 4, 73, 88, 38, -38, -88, -73, -4, 67, 90, 46, -31, -85, -78, -13, 61, 90, 54, -22, -82 }, - { 80, 9, -70, -87, -25, 57, 90, 43, -43, -90, -57, 25, 87, 70, -9, -80, -80, -9, 70, 87, 25, -57, -90, -43, 43, 90, 57, -25, -87, -70, 9, 80 }, - { 78, -4, -82, -73, 13, 85, 67, -22, -88, -61, 31, 90, 54, -38, -90, -46, 46, 90, 38, -54, -90, -31, 61, 88, 22, -67, -85, -13, 73, 82, 4, -78 }, - { 75, -18, -89, -50, 50, 89, 18, -75, -75, 18, 89, 50, -50, -89, -18, 75, 75, -18, -89, -50, 50, 89, 18, -75, -75, 18, 89, 50, -50, -89, -18, 75 }, - { 73, -31, -90, -22, 78, 67, -38, -90, -13, 82, 61, -46, -88, -4, 85, 54, -54, -85, 4, 88, 46, -61, -82, 13, 90, 38, -67, -78, 22, 90, 31, -73 }, - { 70, -43, -87, 9, 90, 25, -80, -57, 57, 80, -25, -90, -9, 87, 43, -70, -70, 43, 87, -9, -90, -25, 80, 57, -57, -80, 25, 90, 9, -87, -43, 70 }, - { 67, -54, -78, 38, 85, -22, -90, 4, 90, 13, -88, -31, 82, 46, -73, -61, 61, 73, -46, -82, 31, 88, -13, -90, -4, 90, 22, -85, -38, 78, 54, -67 }, - { 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64 }, - { 61, -73, -46, 82, 31, -88, -13, 90, -4, -90, 22, 85, -38, -78, 54, 67, -67, -54, 78, 38, -85, -22, 90, 4, -90, 13, 88, -31, -82, 46, 73, -61 }, - { 57, -80, -25, 90, -9, -87, 43, 70, -70, -43, 87, 9, -90, 25, 80, -57, -57, 80, 25, -90, 9, 87, -43, -70, 70, 43, -87, -9, 90, -25, -80, 57 }, - { 54, -85, -4, 88, -46, -61, 82, 13, -90, 38, 67, -78, -22, 90, -31, -73, 73, 31, -90, 22, 78, -67, -38, 90, -13, -82, 61, 46, -88, 4, 85, -54 }, - { 50, -89, 18, 75, -75, -18, 89, -50, -50, 89, -18, -75, 75, 18, -89, 50, 50, -89, 18, 75, -75, -18, 89, -50, -50, 89, -18, -75, 75, 18, -89, 50 }, - { 46, -90, 38, 54, -90, 31, 61, -88, 22, 67, -85, 13, 73, -82, 4, 78, -78, -4, 82, -73, -13, 85, -67, -22, 88, -61, -31, 90, -54, -38, 90, -46 }, - { 43, -90, 57, 25, -87, 70, 9, -80, 80, -9, -70, 87, -25, -57, 90, -43, -43, 90, -57, -25, 87, -70, -9, 80, -80, 9, 70, -87, 25, 57, -90, 43 }, - { 38, -88, 73, -4, -67, 90, -46, -31, 85, -78, 13, 61, -90, 54, 22, -82, 82, -22, -54, 90, -61, -13, 78, -85, 31, 46, -90, 67, 4, -73, 88, -38 }, - { 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36 }, - { 31, -78, 90, -61, 4, 54, -88, 82, -38, -22, 73, -90, 67, -13, -46, 85, -85, 46, 13, -67, 90, -73, 22, 38, -82, 88, -54, -4, 61, -90, 78, -31 }, - { 25, -70, 90, -80, 43, 9, -57, 87, -87, 57, -9, -43, 80, -90, 70, -25, -25, 70, -90, 80, -43, -9, 57, -87, 87, -57, 9, 43, -80, 90, -70, 25 }, - { 22, -61, 85, -90, 73, -38, -4, 46, -78, 90, -82, 54, -13, -31, 67, -88, 88, -67, 31, 13, -54, 82, -90, 78, -46, 4, 38, -73, 90, -85, 61, -22 }, - { 18, -50, 75, -89, 89, -75, 50, -18, -18, 50, -75, 89, -89, 75, -50, 18, 18, -50, 75, -89, 89, -75, 50, -18, -18, 50, -75, 89, -89, 75, -50, 18 }, - { 13, -38, 61, -78, 88, -90, 85, -73, 54, -31, 4, 22, -46, 67, -82, 90, -90, 82, -67, 46, -22, -4, 31, -54, 73, -85, 90, -88, 78, -61, 38, -13 }, - { 9, -25, 43, -57, 70, -80, 87, -90, 90, -87, 80, -70, 57, -43, 25, -9, -9, 25, -43, 57, -70, 80, -87, 90, -90, 87, -80, 70, -57, 43, -25, 9 }, - { 4, -13, 22, -31, 38, -46, 54, -61, 67, -73, 78, -82, 85, -88, 90, -90, 90, -90, 88, -85, 82, -78, 73, -67, 61, -54, 46, -38, 31, -22, 13, -4 } + {256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, }, + {362, 358, 351, 341, 327, 311, 291, 268, 243, 216, 186, 155, 122, 88, 53, 18, -18, -53, -88, -122, -155, -186, -216, -243, -268, -291, -311, -327, -341, -351, -358, -362, }, + {360, 346, 319, 280, 230, 171, 105, 35, -35, -105, -171, -230, -280, -319, -346, -360, -360, -346, -319, -280, -230, -171, -105, -35, 35, 105, 171, 230, 280, 319, 346, 360, }, + {358, 327, 268, 186, 88, -18, -122, -216, -291, -341, -362, -351, -311, -243, -155, -53, 53, 155, 243, 311, 351, 362, 341, 291, 216, 122, 18, -88, -186, -268, -327, -358, }, + {355, 301, 201, 71, -71, -201, -301, -355, -355, -301, -201, -71, 71, 201, 301, 355, 355, 301, 201, 71, -71, -201, -301, -355, -355, -301, -201, -71, 71, 201, 301, 355, }, + {351, 268, 122, -53, -216, -327, -362, -311, -186, -18, 155, 291, 358, 341, 243, 88, -88, -243, -341, -358, -291, -155, 18, 186, 311, 362, 327, 216, 53, -122, -268, -351, }, + {346, 230, 35, -171, -319, -360, -280, -105, 105, 280, 360, 319, 171, -35, -230, -346, -346, -230, -35, 171, 319, 360, 280, 105, -105, -280, -360, -319, -171, 35, 230, 346, }, + {341, 186, -53, -268, -362, -291, -88, 155, 327, 351, 216, -18, -243, -358, -311, -122, 122, 311, 358, 243, 18, -216, -351, -327, -155, 88, 291, 362, 268, 53, -186, -341, }, + {334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, }, + {327, 88, -216, -362, -243, 53, 311, 341, 122, -186, -358, -268, 18, 291, 351, 155, -155, -351, -291, -18, 268, 358, 186, -122, -341, -311, -53, 243, 362, 216, -88, -327, }, + {319, 35, -280, -346, -105, 230, 360, 171, -171, -360, -230, 105, 346, 280, -35, -319, -319, -35, 280, 346, 105, -230, -360, -171, 171, 360, 230, -105, -346, -280, 35, 319, }, + {311, -18, -327, -291, 53, 341, 268, -88, -351, -243, 122, 358, 216, -155, -362, -186, 186, 362, 155, -216, -358, -122, 243, 351, 88, -268, -341, -53, 291, 327, 18, -311, }, + {301, -71, -355, -201, 201, 355, 71, -301, -301, 71, 355, 201, -201, -355, -71, 301, 301, -71, -355, -201, 201, 355, 71, -301, -301, 71, 355, 201, -201, -355, -71, 301, }, + {291, -122, -362, -88, 311, 268, -155, -358, -53, 327, 243, -186, -351, -18, 341, 216, -216, -341, 18, 351, 186, -243, -327, 53, 358, 155, -268, -311, 88, 362, 122, -291, }, + {280, -171, -346, 35, 360, 105, -319, -230, 230, 319, -105, -360, -35, 346, 171, -280, -280, 171, 346, -35, -360, -105, 319, 230, -230, -319, 105, 360, 35, -346, -171, 280, }, + {268, -216, -311, 155, 341, -88, -358, 18, 362, 53, -351, -122, 327, 186, -291, -243, 243, 291, -186, -327, 122, 351, -53, -362, -18, 358, 88, -341, -155, 311, 216, -268, }, + {256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, }, + {243, -291, -186, 327, 122, -351, -53, 362, -18, -358, 88, 341, -155, -311, 216, 268, -268, -216, 311, 155, -341, -88, 358, 18, -362, 53, 351, -122, -327, 186, 291, -243, }, + {230, -319, -105, 360, -35, -346, 171, 280, -280, -171, 346, 35, -360, 105, 319, -230, -230, 319, 105, -360, 35, 346, -171, -280, 280, 171, -346, -35, 360, -105, -319, 230, }, + {216, -341, -18, 351, -186, -243, 327, 53, -358, 155, 268, -311, -88, 362, -122, -291, 291, 122, -362, 88, 311, -268, -155, 358, -53, -327, 243, 186, -351, 18, 341, -216, }, + {201, -355, 71, 301, -301, -71, 355, -201, -201, 355, -71, -301, 301, 71, -355, 201, 201, -355, 71, 301, -301, -71, 355, -201, -201, 355, -71, -301, 301, 71, -355, 201, }, + {186, -362, 155, 216, -358, 122, 243, -351, 88, 268, -341, 53, 291, -327, 18, 311, -311, -18, 327, -291, -53, 341, -268, -88, 351, -243, -122, 358, -216, -155, 362, -186, }, + {171, -360, 230, 105, -346, 280, 35, -319, 319, -35, -280, 346, -105, -230, 360, -171, -171, 360, -230, -105, 346, -280, -35, 319, -319, 35, 280, -346, 105, 230, -360, 171, }, + {155, -351, 291, -18, -268, 358, -186, -122, 341, -311, 53, 243, -362, 216, 88, -327, 327, -88, -216, 362, -243, -53, 311, -341, 122, 186, -358, 268, 18, -291, 351, -155, }, + {139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, }, + {122, -311, 358, -243, 18, 216, -351, 327, -155, -88, 291, -362, 268, -53, -186, 341, -341, 186, 53, -268, 362, -291, 88, 155, -327, 351, -216, -18, 243, -358, 311, -122, }, + {105, -280, 360, -319, 171, 35, -230, 346, -346, 230, -35, -171, 319, -360, 280, -105, -105, 280, -360, 319, -171, -35, 230, -346, 346, -230, 35, 171, -319, 360, -280, 105, }, + { 88, -243, 341, -358, 291, -155, -18, 186, -311, 362, -327, 216, -53, -122, 268, -351, 351, -268, 122, 53, -216, 327, -362, 311, -186, 18, 155, -291, 358, -341, 243, -88, }, + { 71, -201, 301, -355, 355, -301, 201, -71, -71, 201, -301, 355, -355, 301, -201, 71, 71, -201, 301, -355, 355, -301, 201, -71, -71, 201, -301, 355, -355, 301, -201, 71, }, + { 53, -155, 243, -311, 351, -362, 341, -291, 216, -122, 18, 88, -186, 268, -327, 358, -358, 327, -268, 186, -88, -18, 122, -216, 291, -341, 362, -351, 311, -243, 155, -53, }, + { 35, -105, 171, -230, 280, -319, 346, -360, 360, -346, 319, -280, 230, -171, 105, -35, -35, 105, -171, 230, -280, 319, -346, 360, -360, 346, -319, 280, -230, 171, -105, 35, }, + { 18, -53, 88, -122, 155, -186, 216, -243, 268, -291, 311, -327, 341, -351, 358, -362, 362, -358, 351, -341, 327, -311, 291, -268, 243, -216, 186, -155, 122, -88, 53, -18, }, +}; + +const int16_t kvz_g_dct_64[64][64] = +{ + {256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, }, + {362, 361, 359, 357, 353, 349, 344, 338, 331, 323, 315, 306, 296, 285, 274, 262, 250, 236, 223, 208, 194, 178, 163, 147, 130, 114, 97, 79, 62, 44, 27, 9, -9, -27, -44, -62, -79, -97, -114, -130, -147, -163, -178, -194, -208, -223, -236, -250, -262, -274, -285, -296, -306, -315, -323, -331, -338, -344, -349, -353, -357, -359, -361, -362, }, + {362, 358, 351, 341, 327, 311, 291, 268, 243, 216, 186, 155, 122, 88, 53, 18, -18, -53, -88, -122, -155, -186, -216, -243, -268, -291, -311, -327, -341, -351, -358, -362, -362, -358, -351, -341, -327, -311, -291, -268, -243, -216, -186, -155, -122, -88, -53, -18, 18, 53, 88, 122, 155, 186, 216, 243, 268, 291, 311, 327, 341, 351, 358, 362, }, + {361, 353, 338, 315, 285, 250, 208, 163, 114, 62, 9, -44, -97, -147, -194, -236, -274, -306, -331, -349, -359, -362, -357, -344, -323, -296, -262, -223, -178, -130, -79, -27, 27, 79, 130, 178, 223, 262, 296, 323, 344, 357, 362, 359, 349, 331, 306, 274, 236, 194, 147, 97, 44, -9, -62, -114, -163, -208, -250, -285, -315, -338, -353, -361, }, + {360, 346, 319, 280, 230, 171, 105, 35, -35, -105, -171, -230, -280, -319, -346, -360, -360, -346, -319, -280, -230, -171, -105, -35, 35, 105, 171, 230, 280, 319, 346, 360, 360, 346, 319, 280, 230, 171, 105, 35, -35, -105, -171, -230, -280, -319, -346, -360, -360, -346, -319, -280, -230, -171, -105, -35, 35, 105, 171, 230, 280, 319, 346, 360, }, + {359, 338, 296, 236, 163, 79, -9, -97, -178, -250, -306, -344, -361, -357, -331, -285, -223, -147, -62, 27, 114, 194, 262, 315, 349, 362, 353, 323, 274, 208, 130, 44, -44, -130, -208, -274, -323, -353, -362, -349, -315, -262, -194, -114, -27, 62, 147, 223, 285, 331, 357, 361, 344, 306, 250, 178, 97, 9, -79, -163, -236, -296, -338, -359, }, + {358, 327, 268, 186, 88, -18, -122, -216, -291, -341, -362, -351, -311, -243, -155, -53, 53, 155, 243, 311, 351, 362, 341, 291, 216, 122, 18, -88, -186, -268, -327, -358, -358, -327, -268, -186, -88, 18, 122, 216, 291, 341, 362, 351, 311, 243, 155, 53, -53, -155, -243, -311, -351, -362, -341, -291, -216, -122, -18, 88, 186, 268, 327, 358, }, + {357, 315, 236, 130, 9, -114, -223, -306, -353, -359, -323, -250, -147, -27, 97, 208, 296, 349, 361, 331, 262, 163, 44, -79, -194, -285, -344, -362, -338, -274, -178, -62, 62, 178, 274, 338, 362, 344, 285, 194, 79, -44, -163, -262, -331, -361, -349, -296, -208, -97, 27, 147, 250, 323, 359, 353, 306, 223, 114, -9, -130, -236, -315, -357, }, + {355, 301, 201, 71, -71, -201, -301, -355, -355, -301, -201, -71, 71, 201, 301, 355, 355, 301, 201, 71, -71, -201, -301, -355, -355, -301, -201, -71, 71, 201, 301, 355, 355, 301, 201, 71, -71, -201, -301, -355, -355, -301, -201, -71, 71, 201, 301, 355, 355, 301, 201, 71, -71, -201, -301, -355, -355, -301, -201, -71, 71, 201, 301, 355, }, + {353, 285, 163, 9, -147, -274, -349, -357, -296, -178, -27, 130, 262, 344, 359, 306, 194, 44, -114, -250, -338, -361, -315, -208, -62, 97, 236, 331, 362, 323, 223, 79, -79, -223, -323, -362, -331, -236, -97, 62, 208, 315, 361, 338, 250, 114, -44, -194, -306, -359, -344, -262, -130, 27, 178, 296, 357, 349, 274, 147, -9, -163, -285, -353, }, + {351, 268, 122, -53, -216, -327, -362, -311, -186, -18, 155, 291, 358, 341, 243, 88, -88, -243, -341, -358, -291, -155, 18, 186, 311, 362, 327, 216, 53, -122, -268, -351, -351, -268, -122, 53, 216, 327, 362, 311, 186, 18, -155, -291, -358, -341, -243, -88, 88, 243, 341, 358, 291, 155, -18, -186, -311, -362, -327, -216, -53, 122, 268, 351, }, + {349, 250, 79, -114, -274, -357, -338, -223, -44, 147, 296, 361, 323, 194, 9, -178, -315, -362, -306, -163, 27, 208, 331, 359, 285, 130, -62, -236, -344, -353, -262, -97, 97, 262, 353, 344, 236, 62, -130, -285, -359, -331, -208, -27, 163, 306, 362, 315, 178, -9, -194, -323, -361, -296, -147, 44, 223, 338, 357, 274, 114, -79, -250, -349, }, + {346, 230, 35, -171, -319, -360, -280, -105, 105, 280, 360, 319, 171, -35, -230, -346, -346, -230, -35, 171, 319, 360, 280, 105, -105, -280, -360, -319, -171, 35, 230, 346, 346, 230, 35, -171, -319, -360, -280, -105, 105, 280, 360, 319, 171, -35, -230, -346, -346, -230, -35, 171, 319, 360, 280, 105, -105, -280, -360, -319, -171, 35, 230, 346, }, + {344, 208, -9, -223, -349, -338, -194, 27, 236, 353, 331, 178, -44, -250, -357, -323, -163, 62, 262, 359, 315, 147, -79, -274, -361, -306, -130, 97, 285, 362, 296, 114, -114, -296, -362, -285, -97, 130, 306, 361, 274, 79, -147, -315, -359, -262, -62, 163, 323, 357, 250, 44, -178, -331, -353, -236, -27, 194, 338, 349, 223, 9, -208, -344, }, + {341, 186, -53, -268, -362, -291, -88, 155, 327, 351, 216, -18, -243, -358, -311, -122, 122, 311, 358, 243, 18, -216, -351, -327, -155, 88, 291, 362, 268, 53, -186, -341, -341, -186, 53, 268, 362, 291, 88, -155, -327, -351, -216, 18, 243, 358, 311, 122, -122, -311, -358, -243, -18, 216, 351, 327, 155, -88, -291, -362, -268, -53, 186, 341, }, + {338, 163, -97, -306, -357, -223, 27, 262, 362, 274, 44, -208, -353, -315, -114, 147, 331, 344, 178, -79, -296, -359, -236, 9, 250, 361, 285, 62, -194, -349, -323, -130, 130, 323, 349, 194, -62, -285, -361, -250, -9, 236, 359, 296, 79, -178, -344, -331, -147, 114, 315, 353, 208, -44, -274, -362, -262, -27, 223, 357, 306, 97, -163, -338, }, + {334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, 334, 139, -139, -334, -334, -139, 139, 334, }, + {331, 114, -178, -353, -296, -44, 236, 362, 250, -27, -285, -357, -194, 97, 323, 338, 130, -163, -349, -306, -62, 223, 361, 262, -9, -274, -359, -208, 79, 315, 344, 147, -147, -344, -315, -79, 208, 359, 274, 9, -262, -361, -223, 62, 306, 349, 163, -130, -338, -323, -97, 194, 357, 285, 27, -250, -362, -236, 44, 296, 353, 178, -114, -331, }, + {327, 88, -216, -362, -243, 53, 311, 341, 122, -186, -358, -268, 18, 291, 351, 155, -155, -351, -291, -18, 268, 358, 186, -122, -341, -311, -53, 243, 362, 216, -88, -327, -327, -88, 216, 362, 243, -53, -311, -341, -122, 186, 358, 268, -18, -291, -351, -155, 155, 351, 291, 18, -268, -358, -186, 122, 341, 311, 53, -243, -362, -216, 88, 327, }, + {323, 62, -250, -359, -178, 147, 353, 274, -27, -306, -338, -97, 223, 362, 208, -114, -344, -296, -9, 285, 349, 130, -194, -361, -236, 79, 331, 315, 44, -262, -357, -163, 163, 357, 262, -44, -315, -331, -79, 236, 361, 194, -130, -349, -285, 9, 296, 344, 114, -208, -362, -223, 97, 338, 306, 27, -274, -353, -147, 178, 359, 250, -62, -323, }, + {319, 35, -280, -346, -105, 230, 360, 171, -171, -360, -230, 105, 346, 280, -35, -319, -319, -35, 280, 346, 105, -230, -360, -171, 171, 360, 230, -105, -346, -280, 35, 319, 319, 35, -280, -346, -105, 230, 360, 171, -171, -360, -230, 105, 346, 280, -35, -319, -319, -35, 280, 346, 105, -230, -360, -171, 171, 360, 230, -105, -346, -280, 35, 319, }, + {315, 9, -306, -323, -27, 296, 331, 44, -285, -338, -62, 274, 344, 79, -262, -349, -97, 250, 353, 114, -236, -357, -130, 223, 359, 147, -208, -361, -163, 194, 362, 178, -178, -362, -194, 163, 361, 208, -147, -359, -223, 130, 357, 236, -114, -353, -250, 97, 349, 262, -79, -344, -274, 62, 338, 285, -44, -331, -296, 27, 323, 306, -9, -315, }, + {311, -18, -327, -291, 53, 341, 268, -88, -351, -243, 122, 358, 216, -155, -362, -186, 186, 362, 155, -216, -358, -122, 243, 351, 88, -268, -341, -53, 291, 327, 18, -311, -311, 18, 327, 291, -53, -341, -268, 88, 351, 243, -122, -358, -216, 155, 362, 186, -186, -362, -155, 216, 358, 122, -243, -351, -88, 268, 341, 53, -291, -327, -18, 311, }, + {306, -44, -344, -250, 130, 361, 178, -208, -357, -97, 274, 331, 9, -323, -285, 79, 353, 223, -163, -362, -147, 236, 349, 62, -296, -315, 27, 338, 262, -114, -359, -194, 194, 359, 114, -262, -338, -27, 315, 296, -62, -349, -236, 147, 362, 163, -223, -353, -79, 285, 323, -9, -331, -274, 97, 357, 208, -178, -361, -130, 250, 344, 44, -306, }, + {301, -71, -355, -201, 201, 355, 71, -301, -301, 71, 355, 201, -201, -355, -71, 301, 301, -71, -355, -201, 201, 355, 71, -301, -301, 71, 355, 201, -201, -355, -71, 301, 301, -71, -355, -201, 201, 355, 71, -301, -301, 71, 355, 201, -201, -355, -71, 301, 301, -71, -355, -201, 201, 355, 71, -301, -301, 71, 355, 201, -201, -355, -71, 301, }, + {296, -97, -361, -147, 262, 323, -44, -353, -194, 223, 344, 9, -338, -236, 178, 357, 62, -315, -274, 130, 362, 114, -285, -306, 79, 359, 163, -250, -331, 27, 349, 208, -208, -349, -27, 331, 250, -163, -359, -79, 306, 285, -114, -362, -130, 274, 315, -62, -357, -178, 236, 338, -9, -344, -223, 194, 353, 44, -323, -262, 147, 361, 97, -296, }, + {291, -122, -362, -88, 311, 268, -155, -358, -53, 327, 243, -186, -351, -18, 341, 216, -216, -341, 18, 351, 186, -243, -327, 53, 358, 155, -268, -311, 88, 362, 122, -291, -291, 122, 362, 88, -311, -268, 155, 358, 53, -327, -243, 186, 351, 18, -341, -216, 216, 341, -18, -351, -186, 243, 327, -53, -358, -155, 268, 311, -88, -362, -122, 291, }, + {285, -147, -357, -27, 344, 194, -250, -315, 97, 362, 79, -323, -236, 208, 338, -44, -359, -130, 296, 274, -163, -353, -9, 349, 178, -262, -306, 114, 361, 62, -331, -223, 223, 331, -62, -361, -114, 306, 262, -178, -349, 9, 353, 163, -274, -296, 130, 359, 44, -338, -208, 236, 323, -79, -362, -97, 315, 250, -194, -344, 27, 357, 147, -285, }, + {280, -171, -346, 35, 360, 105, -319, -230, 230, 319, -105, -360, -35, 346, 171, -280, -280, 171, 346, -35, -360, -105, 319, 230, -230, -319, 105, 360, 35, -346, -171, 280, 280, -171, -346, 35, 360, 105, -319, -230, 230, 319, -105, -360, -35, 346, 171, -280, -280, 171, 346, -35, -360, -105, 319, 230, -230, -319, 105, 360, 35, -346, -171, 280, }, + {274, -194, -331, 97, 359, 9, -357, -114, 323, 208, -262, -285, 178, 338, -79, -361, -27, 353, 130, -315, -223, 250, 296, -163, -344, 62, 362, 44, -349, -147, 306, 236, -236, -306, 147, 349, -44, -362, -62, 344, 163, -296, -250, 223, 315, -130, -353, 27, 361, 79, -338, -178, 285, 262, -208, -323, 114, 357, -9, -359, -97, 331, 194, -274, }, + {268, -216, -311, 155, 341, -88, -358, 18, 362, 53, -351, -122, 327, 186, -291, -243, 243, 291, -186, -327, 122, 351, -53, -362, -18, 358, 88, -341, -155, 311, 216, -268, -268, 216, 311, -155, -341, 88, 358, -18, -362, -53, 351, 122, -327, -186, 291, 243, -243, -291, 186, 327, -122, -351, 53, 362, 18, -358, -88, 341, 155, -311, -216, 268, }, + {262, -236, -285, 208, 306, -178, -323, 147, 338, -114, -349, 79, 357, -44, -361, 9, 362, 27, -359, -62, 353, 97, -344, -130, 331, 163, -315, -194, 296, 223, -274, -250, 250, 274, -223, -296, 194, 315, -163, -331, 130, 344, -97, -353, 62, 359, -27, -362, -9, 361, 44, -357, -79, 349, 114, -338, -147, 323, 178, -306, -208, 285, 236, -262, }, + {256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, 256, -256, -256, 256, }, + {250, -274, -223, 296, 194, -315, -163, 331, 130, -344, -97, 353, 62, -359, -27, 362, -9, -361, 44, 357, -79, -349, 114, 338, -147, -323, 178, 306, -208, -285, 236, 262, -262, -236, 285, 208, -306, -178, 323, 147, -338, -114, 349, 79, -357, -44, 361, 9, -362, 27, 359, -62, -353, 97, 344, -130, -331, 163, 315, -194, -296, 223, 274, -250, }, + {243, -291, -186, 327, 122, -351, -53, 362, -18, -358, 88, 341, -155, -311, 216, 268, -268, -216, 311, 155, -341, -88, 358, 18, -362, 53, 351, -122, -327, 186, 291, -243, -243, 291, 186, -327, -122, 351, 53, -362, 18, 358, -88, -341, 155, 311, -216, -268, 268, 216, -311, -155, 341, 88, -358, -18, 362, -53, -351, 122, 327, -186, -291, 243, }, + {236, -306, -147, 349, 44, -362, 62, 344, -163, -296, 250, 223, -315, -130, 353, 27, -361, 79, 338, -178, -285, 262, 208, -323, -114, 357, 9, -359, 97, 331, -194, -274, 274, 194, -331, -97, 359, -9, -357, 114, 323, -208, -262, 285, 178, -338, -79, 361, -27, -353, 130, 315, -223, -250, 296, 163, -344, -62, 362, -44, -349, 147, 306, -236, }, + {230, -319, -105, 360, -35, -346, 171, 280, -280, -171, 346, 35, -360, 105, 319, -230, -230, 319, 105, -360, 35, 346, -171, -280, 280, 171, -346, -35, 360, -105, -319, 230, 230, -319, -105, 360, -35, -346, 171, 280, -280, -171, 346, 35, -360, 105, 319, -230, -230, 319, 105, -360, 35, 346, -171, -280, 280, 171, -346, -35, 360, -105, -319, 230, }, + {223, -331, -62, 361, -114, -306, 262, 178, -349, -9, 353, -163, -274, 296, 130, -359, 44, 338, -208, -236, 323, 79, -362, 97, 315, -250, -194, 344, 27, -357, 147, 285, -285, -147, 357, -27, -344, 194, 250, -315, -97, 362, -79, -323, 236, 208, -338, -44, 359, -130, -296, 274, 163, -353, 9, 349, -178, -262, 306, 114, -361, 62, 331, -223, }, + {216, -341, -18, 351, -186, -243, 327, 53, -358, 155, 268, -311, -88, 362, -122, -291, 291, 122, -362, 88, 311, -268, -155, 358, -53, -327, 243, 186, -351, 18, 341, -216, -216, 341, 18, -351, 186, 243, -327, -53, 358, -155, -268, 311, 88, -362, 122, 291, -291, -122, 362, -88, -311, 268, 155, -358, 53, 327, -243, -186, 351, -18, -341, 216, }, + {208, -349, 27, 331, -250, -163, 359, -79, -306, 285, 114, -362, 130, 274, -315, -62, 357, -178, -236, 338, 9, -344, 223, 194, -353, 44, 323, -262, -147, 361, -97, -296, 296, 97, -361, 147, 262, -323, -44, 353, -194, -223, 344, -9, -338, 236, 178, -357, 62, 315, -274, -130, 362, -114, -285, 306, 79, -359, 163, 250, -331, -27, 349, -208, }, + {201, -355, 71, 301, -301, -71, 355, -201, -201, 355, -71, -301, 301, 71, -355, 201, 201, -355, 71, 301, -301, -71, 355, -201, -201, 355, -71, -301, 301, 71, -355, 201, 201, -355, 71, 301, -301, -71, 355, -201, -201, 355, -71, -301, 301, 71, -355, 201, 201, -355, 71, 301, -301, -71, 355, -201, -201, 355, -71, -301, 301, 71, -355, 201, }, + {194, -359, 114, 262, -338, 27, 315, -296, -62, 349, -236, -147, 362, -163, -223, 353, -79, -285, 323, 9, -331, 274, 97, -357, 208, 178, -361, 130, 250, -344, 44, 306, -306, -44, 344, -250, -130, 361, -178, -208, 357, -97, -274, 331, -9, -323, 285, 79, -353, 223, 163, -362, 147, 236, -349, 62, 296, -315, -27, 338, -262, -114, 359, -194, }, + {186, -362, 155, 216, -358, 122, 243, -351, 88, 268, -341, 53, 291, -327, 18, 311, -311, -18, 327, -291, -53, 341, -268, -88, 351, -243, -122, 358, -216, -155, 362, -186, -186, 362, -155, -216, 358, -122, -243, 351, -88, -268, 341, -53, -291, 327, -18, -311, 311, 18, -327, 291, 53, -341, 268, 88, -351, 243, 122, -358, 216, 155, -362, 186, }, + {178, -362, 194, 163, -361, 208, 147, -359, 223, 130, -357, 236, 114, -353, 250, 97, -349, 262, 79, -344, 274, 62, -338, 285, 44, -331, 296, 27, -323, 306, 9, -315, 315, -9, -306, 323, -27, -296, 331, -44, -285, 338, -62, -274, 344, -79, -262, 349, -97, -250, 353, -114, -236, 357, -130, -223, 359, -147, -208, 361, -163, -194, 362, -178, }, + {171, -360, 230, 105, -346, 280, 35, -319, 319, -35, -280, 346, -105, -230, 360, -171, -171, 360, -230, -105, 346, -280, -35, 319, -319, 35, 280, -346, 105, 230, -360, 171, 171, -360, 230, 105, -346, 280, 35, -319, 319, -35, -280, 346, -105, -230, 360, -171, -171, 360, -230, -105, 346, -280, -35, 319, -319, 35, 280, -346, 105, 230, -360, 171, }, + {163, -357, 262, 44, -315, 331, -79, -236, 361, -194, -130, 349, -285, -9, 296, -344, 114, 208, -362, 223, 97, -338, 306, -27, -274, 353, -147, -178, 359, -250, -62, 323, -323, 62, 250, -359, 178, 147, -353, 274, 27, -306, 338, -97, -223, 362, -208, -114, 344, -296, 9, 285, -349, 130, 194, -361, 236, 79, -331, 315, -44, -262, 357, -163, }, + {155, -351, 291, -18, -268, 358, -186, -122, 341, -311, 53, 243, -362, 216, 88, -327, 327, -88, -216, 362, -243, -53, 311, -341, 122, 186, -358, 268, 18, -291, 351, -155, -155, 351, -291, 18, 268, -358, 186, 122, -341, 311, -53, -243, 362, -216, -88, 327, -327, 88, 216, -362, 243, 53, -311, 341, -122, -186, 358, -268, -18, 291, -351, 155, }, + {147, -344, 315, -79, -208, 359, -274, 9, 262, -361, 223, 62, -306, 349, -163, -130, 338, -323, 97, 194, -357, 285, -27, -250, 362, -236, -44, 296, -353, 178, 114, -331, 331, -114, -178, 353, -296, 44, 236, -362, 250, 27, -285, 357, -194, -97, 323, -338, 130, 163, -349, 306, -62, -223, 361, -262, -9, 274, -359, 208, 79, -315, 344, -147, }, + {139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, 139, -334, 334, -139, -139, 334, -334, 139, }, + {130, -323, 349, -194, -62, 285, -361, 250, -9, -236, 359, -296, 79, 178, -344, 331, -147, -114, 315, -353, 208, 44, -274, 362, -262, 27, 223, -357, 306, -97, -163, 338, -338, 163, 97, -306, 357, -223, -27, 262, -362, 274, -44, -208, 353, -315, 114, 147, -331, 344, -178, -79, 296, -359, 236, 9, -250, 361, -285, 62, 194, -349, 323, -130, }, + {122, -311, 358, -243, 18, 216, -351, 327, -155, -88, 291, -362, 268, -53, -186, 341, -341, 186, 53, -268, 362, -291, 88, 155, -327, 351, -216, -18, 243, -358, 311, -122, -122, 311, -358, 243, -18, -216, 351, -327, 155, 88, -291, 362, -268, 53, 186, -341, 341, -186, -53, 268, -362, 291, -88, -155, 327, -351, 216, 18, -243, 358, -311, 122, }, + {114, -296, 362, -285, 97, 130, -306, 361, -274, 79, 147, -315, 359, -262, 62, 163, -323, 357, -250, 44, 178, -331, 353, -236, 27, 194, -338, 349, -223, 9, 208, -344, 344, -208, -9, 223, -349, 338, -194, -27, 236, -353, 331, -178, -44, 250, -357, 323, -163, -62, 262, -359, 315, -147, -79, 274, -361, 306, -130, -97, 285, -362, 296, -114, }, + {105, -280, 360, -319, 171, 35, -230, 346, -346, 230, -35, -171, 319, -360, 280, -105, -105, 280, -360, 319, -171, -35, 230, -346, 346, -230, 35, 171, -319, 360, -280, 105, 105, -280, 360, -319, 171, 35, -230, 346, -346, 230, -35, -171, 319, -360, 280, -105, -105, 280, -360, 319, -171, -35, 230, -346, 346, -230, 35, 171, -319, 360, -280, 105, }, + { 97, -262, 353, -344, 236, -62, -130, 285, -359, 331, -208, 27, 163, -306, 362, -315, 178, 9, -194, 323, -361, 296, -147, -44, 223, -338, 357, -274, 114, 79, -250, 349, -349, 250, -79, -114, 274, -357, 338, -223, 44, 147, -296, 361, -323, 194, -9, -178, 315, -362, 306, -163, -27, 208, -331, 359, -285, 130, 62, -236, 344, -353, 262, -97, }, + { 88, -243, 341, -358, 291, -155, -18, 186, -311, 362, -327, 216, -53, -122, 268, -351, 351, -268, 122, 53, -216, 327, -362, 311, -186, 18, 155, -291, 358, -341, 243, -88, -88, 243, -341, 358, -291, 155, 18, -186, 311, -362, 327, -216, 53, 122, -268, 351, -351, 268, -122, -53, 216, -327, 362, -311, 186, -18, -155, 291, -358, 341, -243, 88, }, + { 79, -223, 323, -362, 331, -236, 97, 62, -208, 315, -361, 338, -250, 114, 44, -194, 306, -359, 344, -262, 130, 27, -178, 296, -357, 349, -274, 147, 9, -163, 285, -353, 353, -285, 163, -9, -147, 274, -349, 357, -296, 178, -27, -130, 262, -344, 359, -306, 194, -44, -114, 250, -338, 361, -315, 208, -62, -97, 236, -331, 362, -323, 223, -79, }, + { 71, -201, 301, -355, 355, -301, 201, -71, -71, 201, -301, 355, -355, 301, -201, 71, 71, -201, 301, -355, 355, -301, 201, -71, -71, 201, -301, 355, -355, 301, -201, 71, 71, -201, 301, -355, 355, -301, 201, -71, -71, 201, -301, 355, -355, 301, -201, 71, 71, -201, 301, -355, 355, -301, 201, -71, -71, 201, -301, 355, -355, 301, -201, 71, }, + { 62, -178, 274, -338, 362, -344, 285, -194, 79, 44, -163, 262, -331, 361, -349, 296, -208, 97, 27, -147, 250, -323, 359, -353, 306, -223, 114, 9, -130, 236, -315, 357, -357, 315, -236, 130, -9, -114, 223, -306, 353, -359, 323, -250, 147, -27, -97, 208, -296, 349, -361, 331, -262, 163, -44, -79, 194, -285, 344, -362, 338, -274, 178, -62, }, + { 53, -155, 243, -311, 351, -362, 341, -291, 216, -122, 18, 88, -186, 268, -327, 358, -358, 327, -268, 186, -88, -18, 122, -216, 291, -341, 362, -351, 311, -243, 155, -53, -53, 155, -243, 311, -351, 362, -341, 291, -216, 122, -18, -88, 186, -268, 327, -358, 358, -327, 268, -186, 88, 18, -122, 216, -291, 341, -362, 351, -311, 243, -155, 53, }, + { 44, -130, 208, -274, 323, -353, 362, -349, 315, -262, 194, -114, 27, 62, -147, 223, -285, 331, -357, 361, -344, 306, -250, 178, -97, 9, 79, -163, 236, -296, 338, -359, 359, -338, 296, -236, 163, -79, -9, 97, -178, 250, -306, 344, -361, 357, -331, 285, -223, 147, -62, -27, 114, -194, 262, -315, 349, -362, 353, -323, 274, -208, 130, -44, }, + { 35, -105, 171, -230, 280, -319, 346, -360, 360, -346, 319, -280, 230, -171, 105, -35, -35, 105, -171, 230, -280, 319, -346, 360, -360, 346, -319, 280, -230, 171, -105, 35, 35, -105, 171, -230, 280, -319, 346, -360, 360, -346, 319, -280, 230, -171, 105, -35, -35, 105, -171, 230, -280, 319, -346, 360, -360, 346, -319, 280, -230, 171, -105, 35, }, + { 27, -79, 130, -178, 223, -262, 296, -323, 344, -357, 362, -359, 349, -331, 306, -274, 236, -194, 147, -97, 44, 9, -62, 114, -163, 208, -250, 285, -315, 338, -353, 361, -361, 353, -338, 315, -285, 250, -208, 163, -114, 62, -9, -44, 97, -147, 194, -236, 274, -306, 331, -349, 359, -362, 357, -344, 323, -296, 262, -223, 178, -130, 79, -27, }, + { 18, -53, 88, -122, 155, -186, 216, -243, 268, -291, 311, -327, 341, -351, 358, -362, 362, -358, 351, -341, 327, -311, 291, -268, 243, -216, 186, -155, 122, -88, 53, -18, -18, 53, -88, 122, -155, 186, -216, 243, -268, 291, -311, 327, -341, 351, -358, 362, -362, 358, -351, 341, -327, 311, -291, 268, -243, 216, -186, 155, -122, 88, -53, 18, }, + { 9, -27, 44, -62, 79, -97, 114, -130, 147, -163, 178, -194, 208, -223, 236, -250, 262, -274, 285, -296, 306, -315, 323, -331, 338, -344, 349, -353, 357, -359, 361, -362, 362, -361, 359, -357, 353, -349, 344, -338, 331, -323, 315, -306, 296, -285, 274, -262, 250, -236, 223, -208, 194, -178, 163, -147, 130, -114, 97, -79, 62, -44, 27, -9, }, }; const int16_t kvz_g_dst_4_t[4][4] = @@ -115,80 +190,155 @@ const int16_t kvz_g_dst_4_t[4][4] = { 84, -74, 55, -29 } }; +const int16_t kvz_g_dct_2_t[2][2] = +{ + {256, 256, }, + {256, -256, }, +}; + const int16_t kvz_g_dct_4_t[4][4] = { - { 64, 83, 64, 36, }, - { 64, 36, -64, -83, }, - { 64, -36, -64, 83, }, - { 64, -83, 64, -36 } + {256, 334, 256, 139, }, + {256, 139, -256, -334, }, + {256, -139, -256, 334, }, + {256, -334, 256, -139, }, }; const int16_t kvz_g_dct_8_t[8][8] = { - { 64, 89, 83, 75, 64, 50, 36, 18, }, - { 64, 75, 36, -18, -64, -89, -83, -50, }, - { 64, 50, -36, -89, -64, 18, 83, 75, }, - { 64, 18, -83, -50, 64, 75, -36, -89, }, - { 64, -18, -83, 50, 64, -75, -36, 89, }, - { 64, -50, -36, 89, -64, -18, 83, -75, }, - { 64, -75, 36, 18, -64, 89, -83, 50, }, - { 64, -89, 83, -75, 64, -50, 36, -18 } + {256, 355, 334, 301, 256, 201, 139, 71, }, + {256, 301, 139, -71, -256, -355, -334, -201, }, + {256, 201, -139, -355, -256, 71, 334, 301, }, + {256, 71, -334, -201, 256, 301, -139, -355, }, + {256, -71, -334, 201, 256, -301, -139, 355, }, + {256, -201, -139, 355, -256, -71, 334, -301, }, + {256, -301, 139, 71, -256, 355, -334, 201, }, + {256, -355, 334, -301, 256, -201, 139, -71, }, }; const int16_t kvz_g_dct_16_t[16][16] = + { - { 64, 90, 89, 87, 83, 80, 75, 70, 64, 57, 50, 43, 36, 25, 18, 9, }, - { 64, 87, 75, 57, 36, 9, -18, -43, -64, -80, -89, -90, -83, -70, -50, -25, }, - { 64, 80, 50, 9, -36, -70, -89, -87, -64, -25, 18, 57, 83, 90, 75, 43, }, - { 64, 70, 18, -43, -83, -87, -50, 9, 64, 90, 75, 25, -36, -80, -89, -57, }, - { 64, 57, -18, -80, -83, -25, 50, 90, 64, -9, -75, -87, -36, 43, 89, 70, }, - { 64, 43, -50, -90, -36, 57, 89, 25, -64, -87, -18, 70, 83, 9, -75, -80, }, - { 64, 25, -75, -70, 36, 90, 18, -80, -64, 43, 89, 9, -83, -57, 50, 87, }, - { 64, 9, -89, -25, 83, 43, -75, -57, 64, 70, -50, -80, 36, 87, -18, -90, }, - { 64, -9, -89, 25, 83, -43, -75, 57, 64, -70, -50, 80, 36, -87, -18, 90, }, - { 64, -25, -75, 70, 36, -90, 18, 80, -64, -43, 89, -9, -83, 57, 50, -87, }, - { 64, -43, -50, 90, -36, -57, 89, -25, -64, 87, -18, -70, 83, -9, -75, 80, }, - { 64, -57, -18, 80, -83, 25, 50, -90, 64, 9, -75, 87, -36, -43, 89, -70, }, - { 64, -70, 18, 43, -83, 87, -50, -9, 64, -90, 75, -25, -36, 80, -89, 57, }, - { 64, -80, 50, -9, -36, 70, -89, 87, -64, 25, 18, -57, 83, -90, 75, -43, }, - { 64, -87, 75, -57, 36, -9, -18, 43, -64, 80, -89, 90, -83, 70, -50, 25, }, - { 64, -90, 89, -87, 83, -80, 75, -70, 64, -57, 50, -43, 36, -25, 18, -9 } + {256, 360, 355, 346, 334, 319, 301, 280, 256, 230, 201, 171, 139, 105, 71, 35, }, + {256, 346, 301, 230, 139, 35, -71, -171, -256, -319, -355, -360, -334, -280, -201, -105, }, + {256, 319, 201, 35, -139, -280, -355, -346, -256, -105, 71, 230, 334, 360, 301, 171, }, + {256, 280, 71, -171, -334, -346, -201, 35, 256, 360, 301, 105, -139, -319, -355, -230, }, + {256, 230, -71, -319, -334, -105, 201, 360, 256, -35, -301, -346, -139, 171, 355, 280, }, + {256, 171, -201, -360, -139, 230, 355, 105, -256, -346, -71, 280, 334, 35, -301, -319, }, + {256, 105, -301, -280, 139, 360, 71, -319, -256, 171, 355, 35, -334, -230, 201, 346, }, + {256, 35, -355, -105, 334, 171, -301, -230, 256, 280, -201, -319, 139, 346, -71, -360, }, + {256, -35, -355, 105, 334, -171, -301, 230, 256, -280, -201, 319, 139, -346, -71, 360, }, + {256, -105, -301, 280, 139, -360, 71, 319, -256, -171, 355, -35, -334, 230, 201, -346, }, + {256, -171, -201, 360, -139, -230, 355, -105, -256, 346, -71, -280, 334, -35, -301, 319, }, + {256, -230, -71, 319, -334, 105, 201, -360, 256, 35, -301, 346, -139, -171, 355, -280, }, + {256, -280, 71, 171, -334, 346, -201, -35, 256, -360, 301, -105, -139, 319, -355, 230, }, + {256, -319, 201, -35, -139, 280, -355, 346, -256, 105, 71, -230, 334, -360, 301, -171, }, + {256, -346, 301, -230, 139, -35, -71, 171, -256, 319, -355, 360, -334, 280, -201, 105, }, + {256, -360, 355, -346, 334, -319, 301, -280, 256, -230, 201, -171, 139, -105, 71, -35, }, }; const int16_t kvz_g_dct_32_t[32][32] = { - { 64, 90, 90, 90, 89, 88, 87, 85, 83, 82, 80, 78, 75, 73, 70, 67, 64, 61, 57, 54, 50, 46, 43, 38, 36, 31, 25, 22, 18, 13, 9, 4, }, - { 64, 90, 87, 82, 75, 67, 57, 46, 36, 22, 9, -4, -18, -31, -43, -54, -64, -73, -80, -85, -89, -90, -90, -88, -83, -78, -70, -61, -50, -38, -25, -13, }, - { 64, 88, 80, 67, 50, 31, 9, -13, -36, -54, -70, -82, -89, -90, -87, -78, -64, -46, -25, -4, 18, 38, 57, 73, 83, 90, 90, 85, 75, 61, 43, 22, }, - { 64, 85, 70, 46, 18, -13, -43, -67, -83, -90, -87, -73, -50, -22, 9, 38, 64, 82, 90, 88, 75, 54, 25, -4, -36, -61, -80, -90, -89, -78, -57, -31, }, - { 64, 82, 57, 22, -18, -54, -80, -90, -83, -61, -25, 13, 50, 78, 90, 85, 64, 31, -9, -46, -75, -90, -87, -67, -36, 4, 43, 73, 89, 88, 70, 38, }, - { 64, 78, 43, -4, -50, -82, -90, -73, -36, 13, 57, 85, 89, 67, 25, -22, -64, -88, -87, -61, -18, 31, 70, 90, 83, 54, 9, -38, -75, -90, -80, -46, }, - { 64, 73, 25, -31, -75, -90, -70, -22, 36, 78, 90, 67, 18, -38, -80, -90, -64, -13, 43, 82, 89, 61, 9, -46, -83, -88, -57, -4, 50, 85, 87, 54, }, - { 64, 67, 9, -54, -89, -78, -25, 38, 83, 85, 43, -22, -75, -90, -57, 4, 64, 90, 70, 13, -50, -88, -80, -31, 36, 82, 87, 46, -18, -73, -90, -61, }, - { 64, 61, -9, -73, -89, -46, 25, 82, 83, 31, -43, -88, -75, -13, 57, 90, 64, -4, -70, -90, -50, 22, 80, 85, 36, -38, -87, -78, -18, 54, 90, 67, }, - { 64, 54, -25, -85, -75, -4, 70, 88, 36, -46, -90, -61, 18, 82, 80, 13, -64, -90, -43, 38, 89, 67, -9, -78, -83, -22, 57, 90, 50, -31, -87, -73, }, - { 64, 46, -43, -90, -50, 38, 90, 54, -36, -90, -57, 31, 89, 61, -25, -88, -64, 22, 87, 67, -18, -85, -70, 13, 83, 73, -9, -82, -75, 4, 80, 78, }, - { 64, 38, -57, -88, -18, 73, 80, -4, -83, -67, 25, 90, 50, -46, -90, -31, 64, 85, 9, -78, -75, 13, 87, 61, -36, -90, -43, 54, 89, 22, -70, -82, }, - { 64, 31, -70, -78, 18, 90, 43, -61, -83, 4, 87, 54, -50, -88, -9, 82, 64, -38, -90, -22, 75, 73, -25, -90, -36, 67, 80, -13, -89, -46, 57, 85, }, - { 64, 22, -80, -61, 50, 85, -9, -90, -36, 73, 70, -38, -89, -4, 87, 46, -64, -78, 25, 90, 18, -82, -57, 54, 83, -13, -90, -31, 75, 67, -43, -88, }, - { 64, 13, -87, -38, 75, 61, -57, -78, 36, 88, -9, -90, -18, 85, 43, -73, -64, 54, 80, -31, -89, 4, 90, 22, -83, -46, 70, 67, -50, -82, 25, 90, }, - { 64, 4, -90, -13, 89, 22, -87, -31, 83, 38, -80, -46, 75, 54, -70, -61, 64, 67, -57, -73, 50, 78, -43, -82, 36, 85, -25, -88, 18, 90, -9, -90, }, - { 64, -4, -90, 13, 89, -22, -87, 31, 83, -38, -80, 46, 75, -54, -70, 61, 64, -67, -57, 73, 50, -78, -43, 82, 36, -85, -25, 88, 18, -90, -9, 90, }, - { 64, -13, -87, 38, 75, -61, -57, 78, 36, -88, -9, 90, -18, -85, 43, 73, -64, -54, 80, 31, -89, -4, 90, -22, -83, 46, 70, -67, -50, 82, 25, -90, }, - { 64, -22, -80, 61, 50, -85, -9, 90, -36, -73, 70, 38, -89, 4, 87, -46, -64, 78, 25, -90, 18, 82, -57, -54, 83, 13, -90, 31, 75, -67, -43, 88, }, - { 64, -31, -70, 78, 18, -90, 43, 61, -83, -4, 87, -54, -50, 88, -9, -82, 64, 38, -90, 22, 75, -73, -25, 90, -36, -67, 80, 13, -89, 46, 57, -85, }, - { 64, -38, -57, 88, -18, -73, 80, 4, -83, 67, 25, -90, 50, 46, -90, 31, 64, -85, 9, 78, -75, -13, 87, -61, -36, 90, -43, -54, 89, -22, -70, 82, }, - { 64, -46, -43, 90, -50, -38, 90, -54, -36, 90, -57, -31, 89, -61, -25, 88, -64, -22, 87, -67, -18, 85, -70, -13, 83, -73, -9, 82, -75, -4, 80, -78, }, - { 64, -54, -25, 85, -75, 4, 70, -88, 36, 46, -90, 61, 18, -82, 80, -13, -64, 90, -43, -38, 89, -67, -9, 78, -83, 22, 57, -90, 50, 31, -87, 73, }, - { 64, -61, -9, 73, -89, 46, 25, -82, 83, -31, -43, 88, -75, 13, 57, -90, 64, 4, -70, 90, -50, -22, 80, -85, 36, 38, -87, 78, -18, -54, 90, -67, }, - { 64, -67, 9, 54, -89, 78, -25, -38, 83, -85, 43, 22, -75, 90, -57, -4, 64, -90, 70, -13, -50, 88, -80, 31, 36, -82, 87, -46, -18, 73, -90, 61, }, - { 64, -73, 25, 31, -75, 90, -70, 22, 36, -78, 90, -67, 18, 38, -80, 90, -64, 13, 43, -82, 89, -61, 9, 46, -83, 88, -57, 4, 50, -85, 87, -54, }, - { 64, -78, 43, 4, -50, 82, -90, 73, -36, -13, 57, -85, 89, -67, 25, 22, -64, 88, -87, 61, -18, -31, 70, -90, 83, -54, 9, 38, -75, 90, -80, 46, }, - { 64, -82, 57, -22, -18, 54, -80, 90, -83, 61, -25, -13, 50, -78, 90, -85, 64, -31, -9, 46, -75, 90, -87, 67, -36, -4, 43, -73, 89, -88, 70, -38, }, - { 64, -85, 70, -46, 18, 13, -43, 67, -83, 90, -87, 73, -50, 22, 9, -38, 64, -82, 90, -88, 75, -54, 25, 4, -36, 61, -80, 90, -89, 78, -57, 31, }, - { 64, -88, 80, -67, 50, -31, 9, 13, -36, 54, -70, 82, -89, 90, -87, 78, -64, 46, -25, 4, 18, -38, 57, -73, 83, -90, 90, -85, 75, -61, 43, -22, }, - { 64, -90, 87, -82, 75, -67, 57, -46, 36, -22, 9, 4, -18, 31, -43, 54, -64, 73, -80, 85, -89, 90, -90, 88, -83, 78, -70, 61, -50, 38, -25, 13, }, - { 64, -90, 90, -90, 89, -88, 87, -85, 83, -82, 80, -78, 75, -73, 70, -67, 64, -61, 57, -54, 50, -46, 43, -38, 36, -31, 25, -22, 18, -13, 9, -4 } + {256, 362, 360, 358, 355, 351, 346, 341, 334, 327, 319, 311, 301, 291, 280, 268, 256, 243, 230, 216, 201, 186, 171, 155, 139, 122, 105, 88, 71, 53, 35, 18, }, + {256, 358, 346, 327, 301, 268, 230, 186, 139, 88, 35, -18, -71, -122, -171, -216, -256, -291, -319, -341, -355, -362, -360, -351, -334, -311, -280, -243, -201, -155, -105, -53, }, + {256, 351, 319, 268, 201, 122, 35, -53, -139, -216, -280, -327, -355, -362, -346, -311, -256, -186, -105, -18, 71, 155, 230, 291, 334, 358, 360, 341, 301, 243, 171, 88, }, + {256, 341, 280, 186, 71, -53, -171, -268, -334, -362, -346, -291, -201, -88, 35, 155, 256, 327, 360, 351, 301, 216, 105, -18, -139, -243, -319, -358, -355, -311, -230, -122, }, + {256, 327, 230, 88, -71, -216, -319, -362, -334, -243, -105, 53, 201, 311, 360, 341, 256, 122, -35, -186, -301, -358, -346, -268, -139, 18, 171, 291, 355, 351, 280, 155, }, + {256, 311, 171, -18, -201, -327, -360, -291, -139, 53, 230, 341, 355, 268, 105, -88, -256, -351, -346, -243, -71, 122, 280, 358, 334, 216, 35, -155, -301, -362, -319, -186, }, + {256, 291, 105, -122, -301, -362, -280, -88, 139, 311, 360, 268, 71, -155, -319, -358, -256, -53, 171, 327, 355, 243, 35, -186, -334, -351, -230, -18, 201, 341, 346, 216, }, + {256, 268, 35, -216, -355, -311, -105, 155, 334, 341, 171, -88, -301, -358, -230, 18, 256, 362, 280, 53, -201, -351, -319, -122, 139, 327, 346, 186, -71, -291, -360, -243, }, + {256, 243, -35, -291, -355, -186, 105, 327, 334, 122, -171, -351, -301, -53, 230, 362, 256, -18, -280, -358, -201, 88, 319, 341, 139, -155, -346, -311, -71, 216, 360, 268, }, + {256, 216, -105, -341, -301, -18, 280, 351, 139, -186, -360, -243, 71, 327, 319, 53, -256, -358, -171, 155, 355, 268, -35, -311, -334, -88, 230, 362, 201, -122, -346, -291, }, + {256, 186, -171, -362, -201, 155, 360, 216, -139, -358, -230, 122, 355, 243, -105, -351, -256, 88, 346, 268, -71, -341, -280, 53, 334, 291, -35, -327, -301, 18, 319, 311, }, + {256, 155, -230, -351, -71, 291, 319, -18, -334, -268, 105, 358, 201, -186, -360, -122, 256, 341, 35, -311, -301, 53, 346, 243, -139, -362, -171, 216, 355, 88, -280, -327, }, + {256, 122, -280, -311, 71, 358, 171, -243, -334, 18, 346, 216, -201, -351, -35, 327, 256, -155, -360, -88, 301, 291, -105, -362, -139, 268, 319, -53, -355, -186, 230, 341, }, + {256, 88, -319, -243, 201, 341, -35, -358, -139, 291, 280, -155, -355, -18, 346, 186, -256, -311, 105, 362, 71, -327, -230, 216, 334, -53, -360, -122, 301, 268, -171, -351, }, + {256, 53, -346, -155, 301, 243, -230, -311, 139, 351, -35, -362, -71, 341, 171, -291, -256, 216, 319, -122, -355, 18, 360, 88, -334, -186, 280, 268, -201, -327, 105, 358, }, + {256, 18, -360, -53, 355, 88, -346, -122, 334, 155, -319, -186, 301, 216, -280, -243, 256, 268, -230, -291, 201, 311, -171, -327, 139, 341, -105, -351, 71, 358, -35, -362, }, + {256, -18, -360, 53, 355, -88, -346, 122, 334, -155, -319, 186, 301, -216, -280, 243, 256, -268, -230, 291, 201, -311, -171, 327, 139, -341, -105, 351, 71, -358, -35, 362, }, + {256, -53, -346, 155, 301, -243, -230, 311, 139, -351, -35, 362, -71, -341, 171, 291, -256, -216, 319, 122, -355, -18, 360, -88, -334, 186, 280, -268, -201, 327, 105, -358, }, + {256, -88, -319, 243, 201, -341, -35, 358, -139, -291, 280, 155, -355, 18, 346, -186, -256, 311, 105, -362, 71, 327, -230, -216, 334, 53, -360, 122, 301, -268, -171, 351, }, + {256, -122, -280, 311, 71, -358, 171, 243, -334, -18, 346, -216, -201, 351, -35, -327, 256, 155, -360, 88, 301, -291, -105, 362, -139, -268, 319, 53, -355, 186, 230, -341, }, + {256, -155, -230, 351, -71, -291, 319, 18, -334, 268, 105, -358, 201, 186, -360, 122, 256, -341, 35, 311, -301, -53, 346, -243, -139, 362, -171, -216, 355, -88, -280, 327, }, + {256, -186, -171, 362, -201, -155, 360, -216, -139, 358, -230, -122, 355, -243, -105, 351, -256, -88, 346, -268, -71, 341, -280, -53, 334, -291, -35, 327, -301, -18, 319, -311, }, + {256, -216, -105, 341, -301, 18, 280, -351, 139, 186, -360, 243, 71, -327, 319, -53, -256, 358, -171, -155, 355, -268, -35, 311, -334, 88, 230, -362, 201, 122, -346, 291, }, + {256, -243, -35, 291, -355, 186, 105, -327, 334, -122, -171, 351, -301, 53, 230, -362, 256, 18, -280, 358, -201, -88, 319, -341, 139, 155, -346, 311, -71, -216, 360, -268, }, + {256, -268, 35, 216, -355, 311, -105, -155, 334, -341, 171, 88, -301, 358, -230, -18, 256, -362, 280, -53, -201, 351, -319, 122, 139, -327, 346, -186, -71, 291, -360, 243, }, + {256, -291, 105, 122, -301, 362, -280, 88, 139, -311, 360, -268, 71, 155, -319, 358, -256, 53, 171, -327, 355, -243, 35, 186, -334, 351, -230, 18, 201, -341, 346, -216, }, + {256, -311, 171, 18, -201, 327, -360, 291, -139, -53, 230, -341, 355, -268, 105, 88, -256, 351, -346, 243, -71, -122, 280, -358, 334, -216, 35, 155, -301, 362, -319, 186, }, + {256, -327, 230, -88, -71, 216, -319, 362, -334, 243, -105, -53, 201, -311, 360, -341, 256, -122, -35, 186, -301, 358, -346, 268, -139, -18, 171, -291, 355, -351, 280, -155, }, + {256, -341, 280, -186, 71, 53, -171, 268, -334, 362, -346, 291, -201, 88, 35, -155, 256, -327, 360, -351, 301, -216, 105, 18, -139, 243, -319, 358, -355, 311, -230, 122, }, + {256, -351, 319, -268, 201, -122, 35, 53, -139, 216, -280, 327, -355, 362, -346, 311, -256, 186, -105, 18, 71, -155, 230, -291, 334, -358, 360, -341, 301, -243, 171, -88, }, + {256, -358, 346, -327, 301, -268, 230, -186, 139, -88, 35, 18, -71, 122, -171, 216, -256, 291, -319, 341, -355, 362, -360, 351, -334, 311, -280, 243, -201, 155, -105, 53, }, + {256, -362, 360, -358, 355, -351, 346, -341, 334, -327, 319, -311, 301, -291, 280, -268, 256, -243, 230, -216, 201, -186, 171, -155, 139, -122, 105, -88, 71, -53, 35, -18, }, +}; + +const int16_t kvz_g_dct_64_t[64][64] = +{ + {256, 362, 362, 361, 360, 359, 358, 357, 355, 353, 351, 349, 346, 344, 341, 338, 334, 331, 327, 323, 319, 315, 311, 306, 301, 296, 291, 285, 280, 274, 268, 262, 256, 250, 243, 236, 230, 223, 216, 208, 201, 194, 186, 178, 171, 163, 155, 147, 139, 130, 122, 114, 105, 97, 88, 79, 71, 62, 53, 44, 35, 27, 18, 9, }, + {256, 361, 358, 353, 346, 338, 327, 315, 301, 285, 268, 250, 230, 208, 186, 163, 139, 114, 88, 62, 35, 9, -18, -44, -71, -97, -122, -147, -171, -194, -216, -236, -256, -274, -291, -306, -319, -331, -341, -349, -355, -359, -362, -362, -360, -357, -351, -344, -334, -323, -311, -296, -280, -262, -243, -223, -201, -178, -155, -130, -105, -79, -53, -27, }, + {256, 359, 351, 338, 319, 296, 268, 236, 201, 163, 122, 79, 35, -9, -53, -97, -139, -178, -216, -250, -280, -306, -327, -344, -355, -361, -362, -357, -346, -331, -311, -285, -256, -223, -186, -147, -105, -62, -18, 27, 71, 114, 155, 194, 230, 262, 291, 315, 334, 349, 358, 362, 360, 353, 341, 323, 301, 274, 243, 208, 171, 130, 88, 44, }, + {256, 357, 341, 315, 280, 236, 186, 130, 71, 9, -53, -114, -171, -223, -268, -306, -334, -353, -362, -359, -346, -323, -291, -250, -201, -147, -88, -27, 35, 97, 155, 208, 256, 296, 327, 349, 360, 361, 351, 331, 301, 262, 216, 163, 105, 44, -18, -79, -139, -194, -243, -285, -319, -344, -358, -362, -355, -338, -311, -274, -230, -178, -122, -62, }, + {256, 353, 327, 285, 230, 163, 88, 9, -71, -147, -216, -274, -319, -349, -362, -357, -334, -296, -243, -178, -105, -27, 53, 130, 201, 262, 311, 344, 360, 359, 341, 306, 256, 194, 122, 44, -35, -114, -186, -250, -301, -338, -358, -361, -346, -315, -268, -208, -139, -62, 18, 97, 171, 236, 291, 331, 355, 362, 351, 323, 280, 223, 155, 79, }, + {256, 349, 311, 250, 171, 79, -18, -114, -201, -274, -327, -357, -360, -338, -291, -223, -139, -44, 53, 147, 230, 296, 341, 361, 355, 323, 268, 194, 105, 9, -88, -178, -256, -315, -351, -362, -346, -306, -243, -163, -71, 27, 122, 208, 280, 331, 358, 359, 334, 285, 216, 130, 35, -62, -155, -236, -301, -344, -362, -353, -319, -262, -186, -97, }, + {256, 344, 291, 208, 105, -9, -122, -223, -301, -349, -362, -338, -280, -194, -88, 27, 139, 236, 311, 353, 360, 331, 268, 178, 71, -44, -155, -250, -319, -357, -358, -323, -256, -163, -53, 62, 171, 262, 327, 359, 355, 315, 243, 147, 35, -79, -186, -274, -334, -361, -351, -306, -230, -130, -18, 97, 201, 285, 341, 362, 346, 296, 216, 114, }, + {256, 338, 268, 163, 35, -97, -216, -306, -355, -357, -311, -223, -105, 27, 155, 262, 334, 362, 341, 274, 171, 44, -88, -208, -301, -353, -358, -315, -230, -114, 18, 147, 256, 331, 362, 344, 280, 178, 53, -79, -201, -296, -351, -359, -319, -236, -122, 9, 139, 250, 327, 361, 346, 285, 186, 62, -71, -194, -291, -349, -360, -323, -243, -130, }, + {256, 331, 243, 114, -35, -178, -291, -353, -355, -296, -186, -44, 105, 236, 327, 362, 334, 250, 122, -27, -171, -285, -351, -357, -301, -194, -53, 97, 230, 323, 362, 338, 256, 130, -18, -163, -280, -349, -358, -306, -201, -62, 88, 223, 319, 361, 341, 262, 139, -9, -155, -274, -346, -359, -311, -208, -71, 79, 216, 315, 360, 344, 268, 147, }, + {256, 323, 216, 62, -105, -250, -341, -359, -301, -178, -18, 147, 280, 353, 351, 274, 139, -27, -186, -306, -360, -338, -243, -97, 71, 223, 327, 362, 319, 208, 53, -114, -256, -344, -358, -296, -171, -9, 155, 285, 355, 349, 268, 130, -35, -194, -311, -361, -334, -236, -88, 79, 230, 331, 362, 315, 201, 44, -122, -262, -346, -357, -291, -163, }, + {256, 315, 186, 9, -171, -306, -362, -323, -201, -27, 155, 296, 360, 331, 216, 44, -139, -285, -358, -338, -230, -62, 122, 274, 355, 344, 243, 79, -105, -262, -351, -349, -256, -97, 88, 250, 346, 353, 268, 114, -71, -236, -341, -357, -280, -130, 53, 223, 334, 359, 291, 147, -35, -208, -327, -361, -301, -163, 18, 194, 319, 362, 311, 178, }, + {256, 306, 155, -44, -230, -344, -351, -250, -71, 130, 291, 361, 319, 178, -18, -208, -334, -357, -268, -97, 105, 274, 358, 331, 201, 9, -186, -323, -360, -285, -122, 79, 256, 353, 341, 223, 35, -163, -311, -362, -301, -147, 53, 236, 346, 349, 243, 62, -139, -296, -362, -315, -171, 27, 216, 338, 355, 262, 88, -114, -280, -359, -327, -194, }, + {256, 296, 122, -97, -280, -361, -311, -147, 71, 262, 358, 323, 171, -44, -243, -353, -334, -194, 18, 223, 346, 344, 216, 9, -201, -338, -351, -236, -35, 178, 327, 357, 256, 62, -155, -315, -360, -274, -88, 130, 301, 362, 291, 114, -105, -285, -362, -306, -139, 79, 268, 359, 319, 163, -53, -250, -355, -331, -186, 27, 230, 349, 341, 208, }, + {256, 285, 88, -147, -319, -357, -243, -27, 201, 344, 341, 194, -35, -250, -358, -315, -139, 97, 291, 362, 280, 79, -155, -323, -355, -236, -18, 208, 346, 338, 186, -44, -256, -359, -311, -130, 105, 296, 362, 274, 71, -163, -327, -353, -230, -9, 216, 349, 334, 178, -53, -262, -360, -306, -122, 114, 301, 361, 268, 62, -171, -331, -351, -223, }, + {256, 274, 53, -194, -346, -331, -155, 97, 301, 359, 243, 9, -230, -357, -311, -114, 139, 323, 351, 208, -35, -262, -362, -285, -71, 178, 341, 338, 171, -79, -291, -361, -256, -27, 216, 353, 319, 130, -122, -315, -355, -223, 18, 250, 360, 296, 88, -163, -334, -344, -186, 62, 280, 362, 268, 44, -201, -349, -327, -147, 105, 306, 358, 236, }, + {256, 262, 18, -236, -360, -285, -53, 208, 355, 306, 88, -178, -346, -323, -122, 147, 334, 338, 155, -114, -319, -349, -186, 79, 301, 357, 216, -44, -280, -361, -243, 9, 256, 362, 268, 27, -230, -359, -291, -62, 201, 353, 311, 97, -171, -344, -327, -130, 139, 331, 341, 163, -105, -315, -351, -194, 71, 296, 358, 223, -35, -274, -362, -250, }, + {256, 250, -18, -274, -360, -223, 53, 296, 355, 194, -88, -315, -346, -163, 122, 331, 334, 130, -155, -344, -319, -97, 186, 353, 301, 62, -216, -359, -280, -27, 243, 362, 256, -9, -268, -361, -230, 44, 291, 357, 201, -79, -311, -349, -171, 114, 327, 338, 139, -147, -341, -323, -105, 178, 351, 306, 71, -208, -358, -285, -35, 236, 362, 262, }, + {256, 236, -53, -306, -346, -147, 155, 349, 301, 44, -243, -362, -230, 62, 311, 344, 139, -163, -351, -296, -35, 250, 362, 223, -71, -315, -341, -130, 171, 353, 291, 27, -256, -361, -216, 79, 319, 338, 122, -178, -355, -285, -18, 262, 360, 208, -88, -323, -334, -114, 186, 357, 280, 9, -268, -359, -201, 97, 327, 331, 105, -194, -358, -274, }, + {256, 223, -88, -331, -319, -62, 243, 361, 201, -114, -341, -306, -35, 262, 358, 178, -139, -349, -291, -9, 280, 353, 155, -163, -355, -274, 18, 296, 346, 130, -186, -359, -256, 44, 311, 338, 105, -208, -362, -236, 71, 323, 327, 79, -230, -362, -216, 97, 334, 315, 53, -250, -360, -194, 122, 344, 301, 27, -268, -357, -171, 147, 351, 285, }, + {256, 208, -122, -349, -280, 27, 311, 331, 71, -250, -358, -163, 171, 359, 243, -79, -334, -306, -18, 285, 346, 114, -216, -362, -201, 130, 351, 274, -35, -315, -327, -62, 256, 357, 155, -178, -360, -236, 88, 338, 301, 9, -291, -344, -105, 223, 362, 194, -139, -353, -268, 44, 319, 323, 53, -262, -355, -147, 186, 361, 230, -97, -341, -296, }, + {256, 194, -155, -359, -230, 114, 351, 262, -71, -338, -291, 27, 319, 315, 18, -296, -334, -62, 268, 349, 105, -236, -358, -147, 201, 362, 186, -163, -360, -223, 122, 353, 256, -79, -341, -285, 35, 323, 311, 9, -301, -331, -53, 274, 346, 97, -243, -357, -139, 208, 362, 178, -171, -361, -216, 130, 355, 250, -88, -344, -280, 44, 327, 306, }, + {256, 178, -186, -362, -171, 194, 362, 163, -201, -361, -155, 208, 360, 147, -216, -359, -139, 223, 358, 130, -230, -357, -122, 236, 355, 114, -243, -353, -105, 250, 351, 97, -256, -349, -88, 262, 346, 79, -268, -344, -71, 274, 341, 62, -280, -338, -53, 285, 334, 44, -291, -331, -35, 296, 327, 27, -301, -323, -18, 306, 319, 9, -311, -315, }, + {256, 163, -216, -357, -105, 262, 341, 44, -301, -315, 18, 331, 280, -79, -351, -236, 139, 361, 186, -194, -360, -130, 243, 349, 71, -285, -327, -9, 319, 296, -53, -344, -256, 114, 358, 208, -171, -362, -155, 223, 355, 97, -268, -338, -35, 306, 311, -27, -334, -274, 88, 353, 230, -147, -362, -178, 201, 359, 122, -250, -346, -62, 291, 323, }, + {256, 147, -243, -344, -35, 315, 291, -79, -355, -208, 186, 359, 105, -274, -327, 9, 334, 262, -122, -361, -171, 223, 351, 62, -301, -306, 53, 349, 230, -163, -362, -130, 256, 338, 18, -323, -280, 97, 358, 194, -201, -357, -88, 285, 319, -27, -341, -250, 139, 362, 155, -236, -346, -44, 311, 296, -71, -353, -216, 178, 360, 114, -268, -331, }, + {256, 130, -268, -323, 35, 349, 216, -194, -355, -62, 311, 285, -105, -361, -155, 250, 334, -9, -341, -236, 171, 359, 88, -296, -301, 79, 358, 178, -230, -344, -18, 331, 256, -147, -362, -114, 280, 315, -53, -353, -201, 208, 351, 44, -319, -274, 122, 362, 139, -262, -327, 27, 346, 223, -186, -357, -71, 306, 291, -97, -360, -163, 243, 338, }, + {256, 114, -291, -296, 105, 362, 122, -285, -301, 97, 362, 130, -280, -306, 88, 361, 139, -274, -311, 79, 360, 147, -268, -315, 71, 359, 155, -262, -319, 62, 358, 163, -256, -323, 53, 357, 171, -250, -327, 44, 355, 178, -243, -331, 35, 353, 186, -236, -334, 27, 351, 194, -230, -338, 18, 349, 201, -223, -341, 9, 346, 208, -216, -344, }, + {256, 97, -311, -262, 171, 353, 18, -344, -201, 236, 327, -62, -360, -130, 291, 285, -139, -359, -53, 331, 230, -208, -341, 27, 355, 163, -268, -306, 105, 362, 88, -315, -256, 178, 351, 9, -346, -194, 243, 323, -71, -361, -122, 296, 280, -147, -358, -44, 334, 223, -216, -338, 35, 357, 155, -274, -301, 114, 362, 79, -319, -250, 186, 349, }, + {256, 79, -327, -223, 230, 323, -88, -362, -71, 331, 216, -236, -319, 97, 362, 62, -334, -208, 243, 315, -105, -361, -53, 338, 201, -250, -311, 114, 360, 44, -341, -194, 256, 306, -122, -359, -35, 344, 186, -262, -301, 130, 358, 27, -346, -178, 268, 296, -139, -357, -18, 349, 171, -274, -291, 147, 355, 9, -351, -163, 280, 285, -155, -353, }, + {256, 62, -341, -178, 280, 274, -186, -338, 71, 362, 53, -344, -171, 285, 268, -194, -334, 79, 362, 44, -346, -163, 291, 262, -201, -331, 88, 361, 35, -349, -155, 296, 256, -208, -327, 97, 360, 27, -351, -147, 301, 250, -216, -323, 105, 359, 18, -353, -139, 306, 243, -223, -319, 114, 358, 9, -355, -130, 311, 236, -230, -315, 122, 357, }, + {256, 44, -351, -130, 319, 208, -268, -274, 201, 323, -122, -353, 35, 362, 53, -349, -139, 315, 216, -262, -280, 194, 327, -114, -355, 27, 362, 62, -346, -147, 311, 223, -256, -285, 186, 331, -105, -357, 18, 361, 71, -344, -155, 306, 230, -250, -291, 178, 334, -97, -358, 9, 360, 79, -341, -163, 301, 236, -243, -296, 171, 338, -88, -359, }, + {256, 27, -358, -79, 346, 130, -327, -178, 301, 223, -268, -262, 230, 296, -186, -323, 139, 344, -88, -357, 35, 362, 18, -359, -71, 349, 122, -331, -171, 306, 216, -274, -256, 236, 291, -194, -319, 147, 341, -97, -355, 44, 362, 9, -360, -62, 351, 114, -334, -163, 311, 208, -280, -250, 243, 285, -201, -315, 155, 338, -105, -353, 53, 361, }, + {256, 9, -362, -27, 360, 44, -358, -62, 355, 79, -351, -97, 346, 114, -341, -130, 334, 147, -327, -163, 319, 178, -311, -194, 301, 208, -291, -223, 280, 236, -268, -250, 256, 262, -243, -274, 230, 285, -216, -296, 201, 306, -186, -315, 171, 323, -155, -331, 139, 338, -122, -344, 105, 349, -88, -353, 71, 357, -53, -359, 35, 361, -18, -362, }, + {256, -9, -362, 27, 360, -44, -358, 62, 355, -79, -351, 97, 346, -114, -341, 130, 334, -147, -327, 163, 319, -178, -311, 194, 301, -208, -291, 223, 280, -236, -268, 250, 256, -262, -243, 274, 230, -285, -216, 296, 201, -306, -186, 315, 171, -323, -155, 331, 139, -338, -122, 344, 105, -349, -88, 353, 71, -357, -53, 359, 35, -361, -18, 362, }, + {256, -27, -358, 79, 346, -130, -327, 178, 301, -223, -268, 262, 230, -296, -186, 323, 139, -344, -88, 357, 35, -362, 18, 359, -71, -349, 122, 331, -171, -306, 216, 274, -256, -236, 291, 194, -319, -147, 341, 97, -355, -44, 362, -9, -360, 62, 351, -114, -334, 163, 311, -208, -280, 250, 243, -285, -201, 315, 155, -338, -105, 353, 53, -361, }, + {256, -44, -351, 130, 319, -208, -268, 274, 201, -323, -122, 353, 35, -362, 53, 349, -139, -315, 216, 262, -280, -194, 327, 114, -355, -27, 362, -62, -346, 147, 311, -223, -256, 285, 186, -331, -105, 357, 18, -361, 71, 344, -155, -306, 230, 250, -291, -178, 334, 97, -358, -9, 360, -79, -341, 163, 301, -236, -243, 296, 171, -338, -88, 359, }, + {256, -62, -341, 178, 280, -274, -186, 338, 71, -362, 53, 344, -171, -285, 268, 194, -334, -79, 362, -44, -346, 163, 291, -262, -201, 331, 88, -361, 35, 349, -155, -296, 256, 208, -327, -97, 360, -27, -351, 147, 301, -250, -216, 323, 105, -359, 18, 353, -139, -306, 243, 223, -319, -114, 358, -9, -355, 130, 311, -236, -230, 315, 122, -357, }, + {256, -79, -327, 223, 230, -323, -88, 362, -71, -331, 216, 236, -319, -97, 362, -62, -334, 208, 243, -315, -105, 361, -53, -338, 201, 250, -311, -114, 360, -44, -341, 194, 256, -306, -122, 359, -35, -344, 186, 262, -301, -130, 358, -27, -346, 178, 268, -296, -139, 357, -18, -349, 171, 274, -291, -147, 355, -9, -351, 163, 280, -285, -155, 353, }, + {256, -97, -311, 262, 171, -353, 18, 344, -201, -236, 327, 62, -360, 130, 291, -285, -139, 359, -53, -331, 230, 208, -341, -27, 355, -163, -268, 306, 105, -362, 88, 315, -256, -178, 351, -9, -346, 194, 243, -323, -71, 361, -122, -296, 280, 147, -358, 44, 334, -223, -216, 338, 35, -357, 155, 274, -301, -114, 362, -79, -319, 250, 186, -349, }, + {256, -114, -291, 296, 105, -362, 122, 285, -301, -97, 362, -130, -280, 306, 88, -361, 139, 274, -311, -79, 360, -147, -268, 315, 71, -359, 155, 262, -319, -62, 358, -163, -256, 323, 53, -357, 171, 250, -327, -44, 355, -178, -243, 331, 35, -353, 186, 236, -334, -27, 351, -194, -230, 338, 18, -349, 201, 223, -341, -9, 346, -208, -216, 344, }, + {256, -130, -268, 323, 35, -349, 216, 194, -355, 62, 311, -285, -105, 361, -155, -250, 334, 9, -341, 236, 171, -359, 88, 296, -301, -79, 358, -178, -230, 344, -18, -331, 256, 147, -362, 114, 280, -315, -53, 353, -201, -208, 351, -44, -319, 274, 122, -362, 139, 262, -327, -27, 346, -223, -186, 357, -71, -306, 291, 97, -360, 163, 243, -338, }, + {256, -147, -243, 344, -35, -315, 291, 79, -355, 208, 186, -359, 105, 274, -327, -9, 334, -262, -122, 361, -171, -223, 351, -62, -301, 306, 53, -349, 230, 163, -362, 130, 256, -338, 18, 323, -280, -97, 358, -194, -201, 357, -88, -285, 319, 27, -341, 250, 139, -362, 155, 236, -346, 44, 311, -296, -71, 353, -216, -178, 360, -114, -268, 331, }, + {256, -163, -216, 357, -105, -262, 341, -44, -301, 315, 18, -331, 280, 79, -351, 236, 139, -361, 186, 194, -360, 130, 243, -349, 71, 285, -327, 9, 319, -296, -53, 344, -256, -114, 358, -208, -171, 362, -155, -223, 355, -97, -268, 338, -35, -306, 311, 27, -334, 274, 88, -353, 230, 147, -362, 178, 201, -359, 122, 250, -346, 62, 291, -323, }, + {256, -178, -186, 362, -171, -194, 362, -163, -201, 361, -155, -208, 360, -147, -216, 359, -139, -223, 358, -130, -230, 357, -122, -236, 355, -114, -243, 353, -105, -250, 351, -97, -256, 349, -88, -262, 346, -79, -268, 344, -71, -274, 341, -62, -280, 338, -53, -285, 334, -44, -291, 331, -35, -296, 327, -27, -301, 323, -18, -306, 319, -9, -311, 315, }, + {256, -194, -155, 359, -230, -114, 351, -262, -71, 338, -291, -27, 319, -315, 18, 296, -334, 62, 268, -349, 105, 236, -358, 147, 201, -362, 186, 163, -360, 223, 122, -353, 256, 79, -341, 285, 35, -323, 311, -9, -301, 331, -53, -274, 346, -97, -243, 357, -139, -208, 362, -178, -171, 361, -216, -130, 355, -250, -88, 344, -280, -44, 327, -306, }, + {256, -208, -122, 349, -280, -27, 311, -331, 71, 250, -358, 163, 171, -359, 243, 79, -334, 306, -18, -285, 346, -114, -216, 362, -201, -130, 351, -274, -35, 315, -327, 62, 256, -357, 155, 178, -360, 236, 88, -338, 301, -9, -291, 344, -105, -223, 362, -194, -139, 353, -268, -44, 319, -323, 53, 262, -355, 147, 186, -361, 230, 97, -341, 296, }, + {256, -223, -88, 331, -319, 62, 243, -361, 201, 114, -341, 306, -35, -262, 358, -178, -139, 349, -291, 9, 280, -353, 155, 163, -355, 274, 18, -296, 346, -130, -186, 359, -256, -44, 311, -338, 105, 208, -362, 236, 71, -323, 327, -79, -230, 362, -216, -97, 334, -315, 53, 250, -360, 194, 122, -344, 301, -27, -268, 357, -171, -147, 351, -285, }, + {256, -236, -53, 306, -346, 147, 155, -349, 301, -44, -243, 362, -230, -62, 311, -344, 139, 163, -351, 296, -35, -250, 362, -223, -71, 315, -341, 130, 171, -353, 291, -27, -256, 361, -216, -79, 319, -338, 122, 178, -355, 285, -18, -262, 360, -208, -88, 323, -334, 114, 186, -357, 280, -9, -268, 359, -201, -97, 327, -331, 105, 194, -358, 274, }, + {256, -250, -18, 274, -360, 223, 53, -296, 355, -194, -88, 315, -346, 163, 122, -331, 334, -130, -155, 344, -319, 97, 186, -353, 301, -62, -216, 359, -280, 27, 243, -362, 256, 9, -268, 361, -230, -44, 291, -357, 201, 79, -311, 349, -171, -114, 327, -338, 139, 147, -341, 323, -105, -178, 351, -306, 71, 208, -358, 285, -35, -236, 362, -262, }, + {256, -262, 18, 236, -360, 285, -53, -208, 355, -306, 88, 178, -346, 323, -122, -147, 334, -338, 155, 114, -319, 349, -186, -79, 301, -357, 216, 44, -280, 361, -243, -9, 256, -362, 268, -27, -230, 359, -291, 62, 201, -353, 311, -97, -171, 344, -327, 130, 139, -331, 341, -163, -105, 315, -351, 194, 71, -296, 358, -223, -35, 274, -362, 250, }, + {256, -274, 53, 194, -346, 331, -155, -97, 301, -359, 243, -9, -230, 357, -311, 114, 139, -323, 351, -208, -35, 262, -362, 285, -71, -178, 341, -338, 171, 79, -291, 361, -256, 27, 216, -353, 319, -130, -122, 315, -355, 223, 18, -250, 360, -296, 88, 163, -334, 344, -186, -62, 280, -362, 268, -44, -201, 349, -327, 147, 105, -306, 358, -236, }, + {256, -285, 88, 147, -319, 357, -243, 27, 201, -344, 341, -194, -35, 250, -358, 315, -139, -97, 291, -362, 280, -79, -155, 323, -355, 236, -18, -208, 346, -338, 186, 44, -256, 359, -311, 130, 105, -296, 362, -274, 71, 163, -327, 353, -230, 9, 216, -349, 334, -178, -53, 262, -360, 306, -122, -114, 301, -361, 268, -62, -171, 331, -351, 223, }, + {256, -296, 122, 97, -280, 361, -311, 147, 71, -262, 358, -323, 171, 44, -243, 353, -334, 194, 18, -223, 346, -344, 216, -9, -201, 338, -351, 236, -35, -178, 327, -357, 256, -62, -155, 315, -360, 274, -88, -130, 301, -362, 291, -114, -105, 285, -362, 306, -139, -79, 268, -359, 319, -163, -53, 250, -355, 331, -186, -27, 230, -349, 341, -208, }, + {256, -306, 155, 44, -230, 344, -351, 250, -71, -130, 291, -361, 319, -178, -18, 208, -334, 357, -268, 97, 105, -274, 358, -331, 201, -9, -186, 323, -360, 285, -122, -79, 256, -353, 341, -223, 35, 163, -311, 362, -301, 147, 53, -236, 346, -349, 243, -62, -139, 296, -362, 315, -171, -27, 216, -338, 355, -262, 88, 114, -280, 359, -327, 194, }, + {256, -315, 186, -9, -171, 306, -362, 323, -201, 27, 155, -296, 360, -331, 216, -44, -139, 285, -358, 338, -230, 62, 122, -274, 355, -344, 243, -79, -105, 262, -351, 349, -256, 97, 88, -250, 346, -353, 268, -114, -71, 236, -341, 357, -280, 130, 53, -223, 334, -359, 291, -147, -35, 208, -327, 361, -301, 163, 18, -194, 319, -362, 311, -178, }, + {256, -323, 216, -62, -105, 250, -341, 359, -301, 178, -18, -147, 280, -353, 351, -274, 139, 27, -186, 306, -360, 338, -243, 97, 71, -223, 327, -362, 319, -208, 53, 114, -256, 344, -358, 296, -171, 9, 155, -285, 355, -349, 268, -130, -35, 194, -311, 361, -334, 236, -88, -79, 230, -331, 362, -315, 201, -44, -122, 262, -346, 357, -291, 163, }, + {256, -331, 243, -114, -35, 178, -291, 353, -355, 296, -186, 44, 105, -236, 327, -362, 334, -250, 122, 27, -171, 285, -351, 357, -301, 194, -53, -97, 230, -323, 362, -338, 256, -130, -18, 163, -280, 349, -358, 306, -201, 62, 88, -223, 319, -361, 341, -262, 139, 9, -155, 274, -346, 359, -311, 208, -71, -79, 216, -315, 360, -344, 268, -147, }, + {256, -338, 268, -163, 35, 97, -216, 306, -355, 357, -311, 223, -105, -27, 155, -262, 334, -362, 341, -274, 171, -44, -88, 208, -301, 353, -358, 315, -230, 114, 18, -147, 256, -331, 362, -344, 280, -178, 53, 79, -201, 296, -351, 359, -319, 236, -122, -9, 139, -250, 327, -361, 346, -285, 186, -62, -71, 194, -291, 349, -360, 323, -243, 130, }, + {256, -344, 291, -208, 105, 9, -122, 223, -301, 349, -362, 338, -280, 194, -88, -27, 139, -236, 311, -353, 360, -331, 268, -178, 71, 44, -155, 250, -319, 357, -358, 323, -256, 163, -53, -62, 171, -262, 327, -359, 355, -315, 243, -147, 35, 79, -186, 274, -334, 361, -351, 306, -230, 130, -18, -97, 201, -285, 341, -362, 346, -296, 216, -114, }, + {256, -349, 311, -250, 171, -79, -18, 114, -201, 274, -327, 357, -360, 338, -291, 223, -139, 44, 53, -147, 230, -296, 341, -361, 355, -323, 268, -194, 105, -9, -88, 178, -256, 315, -351, 362, -346, 306, -243, 163, -71, -27, 122, -208, 280, -331, 358, -359, 334, -285, 216, -130, 35, 62, -155, 236, -301, 344, -362, 353, -319, 262, -186, 97, }, + {256, -353, 327, -285, 230, -163, 88, -9, -71, 147, -216, 274, -319, 349, -362, 357, -334, 296, -243, 178, -105, 27, 53, -130, 201, -262, 311, -344, 360, -359, 341, -306, 256, -194, 122, -44, -35, 114, -186, 250, -301, 338, -358, 361, -346, 315, -268, 208, -139, 62, 18, -97, 171, -236, 291, -331, 355, -362, 351, -323, 280, -223, 155, -79, }, + {256, -357, 341, -315, 280, -236, 186, -130, 71, -9, -53, 114, -171, 223, -268, 306, -334, 353, -362, 359, -346, 323, -291, 250, -201, 147, -88, 27, 35, -97, 155, -208, 256, -296, 327, -349, 360, -361, 351, -331, 301, -262, 216, -163, 105, -44, -18, 79, -139, 194, -243, 285, -319, 344, -358, 362, -355, 338, -311, 274, -230, 178, -122, 62, }, + {256, -359, 351, -338, 319, -296, 268, -236, 201, -163, 122, -79, 35, 9, -53, 97, -139, 178, -216, 250, -280, 306, -327, 344, -355, 361, -362, 357, -346, 331, -311, 285, -256, 223, -186, 147, -105, 62, -18, -27, 71, -114, 155, -194, 230, -262, 291, -315, 334, -349, 358, -362, 360, -353, 341, -323, 301, -274, 243, -208, 171, -130, 88, -44, }, + {256, -361, 358, -353, 346, -338, 327, -315, 301, -285, 268, -250, 230, -208, 186, -163, 139, -114, 88, -62, 35, -9, -18, 44, -71, 97, -122, 147, -171, 194, -216, 236, -256, 274, -291, 306, -319, 331, -341, 349, -355, 359, -362, 362, -360, 357, -351, 344, -334, 323, -311, 296, -280, 262, -243, 223, -201, 178, -155, 130, -105, 79, -53, 27, }, + {256, -362, 362, -361, 360, -359, 358, -357, 355, -353, 351, -349, 346, -344, 341, -338, 334, -331, 327, -323, 319, -315, 311, -306, 301, -296, 291, -285, 280, -274, 268, -262, 256, -250, 243, -236, 230, -223, 216, -208, 201, -194, 186, -178, 171, -163, 155, -147, 139, -130, 122, -114, 105, -97, 88, -79, 71, -62, 53, -44, 35, -27, 18, -9, }, }; /** @@ -568,8 +718,8 @@ static void partial_butterfly_inverse_32_generic(const int16_t *src, int16_t *ds static void dct_ ## n ## x ## n ## _generic(int8_t bitdepth, const int16_t *input, int16_t *output) { \ \ int16_t tmp[ n * n ]; \ - int32_t shift_1st = kvz_g_convert_to_bit[ n ] + 1 + (bitdepth - 8); \ - int32_t shift_2nd = kvz_g_convert_to_bit[ n ] + 8; \ + int32_t shift_1st = kvz_g_convert_to_bit[ n ] + 1 + (bitdepth - 8) + 2; \ + int32_t shift_2nd = kvz_g_convert_to_bit[ n ] + 8 + 2; \ \ partial_butterfly_ ## n ## _generic(input, tmp, shift_1st); \ partial_butterfly_ ## n ## _generic(tmp, output, shift_2nd); \ @@ -579,8 +729,8 @@ static void dct_ ## n ## x ## n ## _generic(int8_t bitdepth, const int16_t *inpu static void idct_ ## n ## x ## n ## _generic(int8_t bitdepth, const int16_t *input, int16_t *output) { \ \ int16_t tmp[ n * n ]; \ - int32_t shift_1st = 7; \ - int32_t shift_2nd = 12 - (bitdepth - 8); \ + int32_t shift_1st = 7 + 2; \ + int32_t shift_2nd = 12 - (bitdepth - 8) + 2; \ \ partial_butterfly_inverse_ ## n ## _generic(input, tmp, shift_1st); \ partial_butterfly_inverse_ ## n ## _generic(tmp, output, shift_2nd); \