/*
 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
 * All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 *
 * - Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 *
 * - Neither the name of the copyright owner, nor the names of its contributors
 *   may be used to endorse or promote products derived from this software
 *   without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#include "oapv_def.h"

#define NA 255 //never split
#define NB 14  //not reach in current setting of max AR 1:4
#define NC 15  //not reach in current setting of max AR 1:4

// clang-format off
const u8 oapv_tbl_log2[257] = {
    /* 0, 1 */
    0, 0,
    /* 2, 3 */
    1, 1,
    /* 4 ~ 7 */
    2, 2, 2, 2,
    /* 8 ~ 15 */
    3, 3, 3, 3, 3, 3, 3, 3,
    /* 16 ~ 31 */
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    /* 31 ~ 63 */
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    /* 64 ~ 127 */
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    /* 128 ~ 255 */
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    /* 256 */
    8
};

const s8 oapv_tbl_tm8[8][8] = {
    { 64, 64, 64, 64, 64, 64, 64, 64},
    { 89, 75, 50, 18,-18,-50,-75,-89},
    { 84, 35,-35,-84,-84,-35, 35, 84},
    { 75,-18,-89,-50, 50, 89, 18,-75},
    { 64,-64,-64, 64, 64,-64,-64, 64},
    { 50,-89, 18, 75,-75,-18, 89,-50},
    { 35,-84, 84,-35,-35, 84,-84, 35},
    { 18,-50, 75,-89, 89,-75, 50,-18}
};

const int oapv_tbl_dq_scale[6] = {40, 45, 51, 57, 64, 71};

const u16 oapv_tbl_scan[OAPV_BLK_D] = {
    0,    1,    8,    16,   9,    2,    3,   10,
    17,   24,   32,   25,   18,   11,   4,    5,
    12,   19,   26,   33,   40,   48,   41,   34,
    27,   20,   13,   6,    7,    14,   21,   28,
    35,   42,   49,   56,   57,   50,   43,   36,
    29,   22,   15,   23,   30,   37,   44,   51,
    58,   59,   52,   45,   38,   31,   39,   46,
    53,   60,   61,   54,   47,   55,   62,   63
};

const u32 CODE_LUT_100[100][5][2] = {
    {{ 2147483648,  1}, { 2147483648,  2}, { 2147483648,  3}, { 2147483648,  4}, { 2147483648,  5}},
    {{          0,  2}, { 3221225472,  2}, { 2684354560,  3}, { 2415919104,  4}, { 2281701376,  5}},
    {{ 1610612736,  3}, {          0,  3}, { 3221225472,  3}, { 2684354560,  4}, { 2415919104,  5}},
    {{ 1342177280,  5}, {  536870912,  3}, { 3758096384,  3}, { 2952790016,  4}, { 2550136832,  5}},
    {{ 1476395008,  5}, { 1610612736,  4}, {          0,  4}, { 3221225472,  4}, { 2684354560,  5}},
    {{ 1207959552,  7}, { 1879048192,  4}, {  268435456,  4}, { 3489660928,  4}, { 2818572288,  5}},
    {{ 1241513984,  7}, { 1342177280,  6}, {  536870912,  4}, { 3758096384,  4}, { 2952790016,  5}},
    {{ 1275068416,  7}, { 1409286144,  6}, {  805306368,  4}, { 4026531840,  4}, { 3087007744,  5}},
    {{ 1308622848,  7}, { 1476395008,  6}, { 1610612736,  5}, {          0,  5}, { 3221225472,  5}},
    {{ 1140850688,  9}, { 1543503872,  6}, { 1744830464,  5}, {  134217728,  5}, { 3355443200,  5}},
    {{ 1149239296,  9}, { 1207959552,  8}, { 1879048192,  5}, {  268435456,  5}, { 3489660928,  5}},
    {{ 1157627904,  9}, { 1224736768,  8}, { 2013265920,  5}, {  402653184,  5}, { 3623878656,  5}},
    {{ 1166016512,  9}, { 1241513984,  8}, { 1342177280,  7}, {  536870912,  5}, { 3758096384,  5}},
    {{ 1174405120,  9}, { 1258291200,  8}, { 1375731712,  7}, {  671088640,  5}, { 3892314112,  5}},
    {{ 1182793728,  9}, { 1275068416,  8}, { 1409286144,  7}, {  805306368,  5}, { 4026531840,  5}},
    {{ 1191182336,  9}, { 1291845632,  8}, { 1442840576,  7}, {  939524096,  5}, { 4160749568,  5}},
    {{ 1199570944,  9}, { 1308622848,  8}, { 1476395008,  7}, { 1610612736,  6}, {          0,  6}},
    {{ 1107296256, 11}, { 1325400064,  8}, { 1509949440,  7}, { 1677721600,  6}, {   67108864,  6}},
    {{ 1109393408, 11}, { 1140850688, 10}, { 1543503872,  7}, { 1744830464,  6}, {  134217728,  6}},
    {{ 1111490560, 11}, { 1145044992, 10}, { 1577058304,  7}, { 1811939328,  6}, {  201326592,  6}},
    {{ 1113587712, 11}, { 1149239296, 10}, { 1207959552,  9}, { 1879048192,  6}, {  268435456,  6}},
    {{ 1115684864, 11}, { 1153433600, 10}, { 1216348160,  9}, { 1946157056,  6}, {  335544320,  6}},
    {{ 1117782016, 11}, { 1157627904, 10}, { 1224736768,  9}, { 2013265920,  6}, {  402653184,  6}},
    {{ 1119879168, 11}, { 1161822208, 10}, { 1233125376,  9}, { 2080374784,  6}, {  469762048,  6}},
    {{ 1121976320, 11}, { 1166016512, 10}, { 1241513984,  9}, { 1342177280,  8}, {  536870912,  6}},
    {{ 1124073472, 11}, { 1170210816, 10}, { 1249902592,  9}, { 1358954496,  8}, {  603979776,  6}},
    {{ 1126170624, 11}, { 1174405120, 10}, { 1258291200,  9}, { 1375731712,  8}, {  671088640,  6}},
    {{ 1128267776, 11}, { 1178599424, 10}, { 1266679808,  9}, { 1392508928,  8}, {  738197504,  6}},
    {{ 1130364928, 11}, { 1182793728, 10}, { 1275068416,  9}, { 1409286144,  8}, {  805306368,  6}},
    {{ 1132462080, 11}, { 1186988032, 10}, { 1283457024,  9}, { 1426063360,  8}, {  872415232,  6}},
    {{ 1134559232, 11}, { 1191182336, 10}, { 1291845632,  9}, { 1442840576,  8}, {  939524096,  6}},
    {{ 1136656384, 11}, { 1195376640, 10}, { 1300234240,  9}, { 1459617792,  8}, { 1006632960,  6}},
    {{ 1138753536, 11}, { 1199570944, 10}, { 1308622848,  9}, { 1476395008,  8}, { 1610612736,  7}},
    {{ 1090519040, 13}, { 1203765248, 10}, { 1317011456,  9}, { 1493172224,  8}, { 1644167168,  7}},
    {{ 1091043328, 13}, { 1107296256, 12}, { 1325400064,  9}, { 1509949440,  8}, { 1677721600,  7}},
    {{ 1091567616, 13}, { 1108344832, 12}, { 1333788672,  9}, { 1526726656,  8}, { 1711276032,  7}},
    {{ 1092091904, 13}, { 1109393408, 12}, { 1140850688, 11}, { 1543503872,  8}, { 1744830464,  7}},
    {{ 1092616192, 13}, { 1110441984, 12}, { 1142947840, 11}, { 1560281088,  8}, { 1778384896,  7}},
    {{ 1093140480, 13}, { 1111490560, 12}, { 1145044992, 11}, { 1577058304,  8}, { 1811939328,  7}},
    {{ 1093664768, 13}, { 1112539136, 12}, { 1147142144, 11}, { 1593835520,  8}, { 1845493760,  7}},
    {{ 1094189056, 13}, { 1113587712, 12}, { 1149239296, 11}, { 1207959552, 10}, { 1879048192,  7}},
    {{ 1094713344, 13}, { 1114636288, 12}, { 1151336448, 11}, { 1212153856, 10}, { 1912602624,  7}},
    {{ 1095237632, 13}, { 1115684864, 12}, { 1153433600, 11}, { 1216348160, 10}, { 1946157056,  7}},
    {{ 1095761920, 13}, { 1116733440, 12}, { 1155530752, 11}, { 1220542464, 10}, { 1979711488,  7}},
    {{ 1096286208, 13}, { 1117782016, 12}, { 1157627904, 11}, { 1224736768, 10}, { 2013265920,  7}},
    {{ 1096810496, 13}, { 1118830592, 12}, { 1159725056, 11}, { 1228931072, 10}, { 2046820352,  7}},
    {{ 1097334784, 13}, { 1119879168, 12}, { 1161822208, 11}, { 1233125376, 10}, { 2080374784,  7}},
    {{ 1097859072, 13}, { 1120927744, 12}, { 1163919360, 11}, { 1237319680, 10}, { 2113929216,  7}},
    {{ 1098383360, 13}, { 1121976320, 12}, { 1166016512, 11}, { 1241513984, 10}, { 1342177280,  9}},
    {{ 1098907648, 13}, { 1123024896, 12}, { 1168113664, 11}, { 1245708288, 10}, { 1350565888,  9}},
    {{ 1099431936, 13}, { 1124073472, 12}, { 1170210816, 11}, { 1249902592, 10}, { 1358954496,  9}},
    {{ 1099956224, 13}, { 1125122048, 12}, { 1172307968, 11}, { 1254096896, 10}, { 1367343104,  9}},
    {{ 1100480512, 13}, { 1126170624, 12}, { 1174405120, 11}, { 1258291200, 10}, { 1375731712,  9}},
    {{ 1101004800, 13}, { 1127219200, 12}, { 1176502272, 11}, { 1262485504, 10}, { 1384120320,  9}},
    {{ 1101529088, 13}, { 1128267776, 12}, { 1178599424, 11}, { 1266679808, 10}, { 1392508928,  9}},
    {{ 1102053376, 13}, { 1129316352, 12}, { 1180696576, 11}, { 1270874112, 10}, { 1400897536,  9}},
    {{ 1102577664, 13}, { 1130364928, 12}, { 1182793728, 11}, { 1275068416, 10}, { 1409286144,  9}},
    {{ 1103101952, 13}, { 1131413504, 12}, { 1184890880, 11}, { 1279262720, 10}, { 1417674752,  9}},
    {{ 1103626240, 13}, { 1132462080, 12}, { 1186988032, 11}, { 1283457024, 10}, { 1426063360,  9}},
    {{ 1104150528, 13}, { 1133510656, 12}, { 1189085184, 11}, { 1287651328, 10}, { 1434451968,  9}},
    {{ 1104674816, 13}, { 1134559232, 12}, { 1191182336, 11}, { 1291845632, 10}, { 1442840576,  9}},
    {{ 1105199104, 13}, { 1135607808, 12}, { 1193279488, 11}, { 1296039936, 10}, { 1451229184,  9}},
    {{ 1105723392, 13}, { 1136656384, 12}, { 1195376640, 11}, { 1300234240, 10}, { 1459617792,  9}},
    {{ 1106247680, 13}, { 1137704960, 12}, { 1197473792, 11}, { 1304428544, 10}, { 1468006400,  9}},
    {{ 1106771968, 13}, { 1138753536, 12}, { 1199570944, 11}, { 1308622848, 10}, { 1476395008,  9}},
    {{ 1082130432, 15}, { 1139802112, 12}, { 1201668096, 11}, { 1312817152, 10}, { 1484783616,  9}},
    {{ 1082261504, 15}, { 1090519040, 14}, { 1203765248, 11}, { 1317011456, 10}, { 1493172224,  9}},
    {{ 1082392576, 15}, { 1090781184, 14}, { 1205862400, 11}, { 1321205760, 10}, { 1501560832,  9}},
    {{ 1082523648, 15}, { 1091043328, 14}, { 1107296256, 13}, { 1325400064, 10}, { 1509949440,  9}},
    {{ 1082654720, 15}, { 1091305472, 14}, { 1107820544, 13}, { 1329594368, 10}, { 1518338048,  9}},
    {{ 1082785792, 15}, { 1091567616, 14}, { 1108344832, 13}, { 1333788672, 10}, { 1526726656,  9}},
    {{ 1082916864, 15}, { 1091829760, 14}, { 1108869120, 13}, { 1337982976, 10}, { 1535115264,  9}},
    {{ 1083047936, 15}, { 1092091904, 14}, { 1109393408, 13}, { 1140850688, 12}, { 1543503872,  9}},
    {{ 1083179008, 15}, { 1092354048, 14}, { 1109917696, 13}, { 1141899264, 12}, { 1551892480,  9}},
    {{ 1083310080, 15}, { 1092616192, 14}, { 1110441984, 13}, { 1142947840, 12}, { 1560281088,  9}},
    {{ 1083441152, 15}, { 1092878336, 14}, { 1110966272, 13}, { 1143996416, 12}, { 1568669696,  9}},
    {{ 1083572224, 15}, { 1093140480, 14}, { 1111490560, 13}, { 1145044992, 12}, { 1577058304,  9}},
    {{ 1083703296, 15}, { 1093402624, 14}, { 1112014848, 13}, { 1146093568, 12}, { 1585446912,  9}},
    {{ 1083834368, 15}, { 1093664768, 14}, { 1112539136, 13}, { 1147142144, 12}, { 1593835520,  9}},
    {{ 1083965440, 15}, { 1093926912, 14}, { 1113063424, 13}, { 1148190720, 12}, { 1602224128,  9}},
    {{ 1084096512, 15}, { 1094189056, 14}, { 1113587712, 13}, { 1149239296, 12}, { 1207959552, 11}},
    {{ 1084227584, 15}, { 1094451200, 14}, { 1114112000, 13}, { 1150287872, 12}, { 1210056704, 11}},
    {{ 1084358656, 15}, { 1094713344, 14}, { 1114636288, 13}, { 1151336448, 12}, { 1212153856, 11}},
    {{ 1084489728, 15}, { 1094975488, 14}, { 1115160576, 13}, { 1152385024, 12}, { 1214251008, 11}},
    {{ 1084620800, 15}, { 1095237632, 14}, { 1115684864, 13}, { 1153433600, 12}, { 1216348160, 11}},
    {{ 1084751872, 15}, { 1095499776, 14}, { 1116209152, 13}, { 1154482176, 12}, { 1218445312, 11}},
    {{ 1084882944, 15}, { 1095761920, 14}, { 1116733440, 13}, { 1155530752, 12}, { 1220542464, 11}},
    {{ 1085014016, 15}, { 1096024064, 14}, { 1117257728, 13}, { 1156579328, 12}, { 1222639616, 11}},
    {{ 1085145088, 15}, { 1096286208, 14}, { 1117782016, 13}, { 1157627904, 12}, { 1224736768, 11}},
    {{ 1085276160, 15}, { 1096548352, 14}, { 1118306304, 13}, { 1158676480, 12}, { 1226833920, 11}},
    {{ 1085407232, 15}, { 1096810496, 14}, { 1118830592, 13}, { 1159725056, 12}, { 1228931072, 11}},
    {{ 1085538304, 15}, { 1097072640, 14}, { 1119354880, 13}, { 1160773632, 12}, { 1231028224, 11}},
    {{ 1085669376, 15}, { 1097334784, 14}, { 1119879168, 13}, { 1161822208, 12}, { 1233125376, 11}},
    {{ 1085800448, 15}, { 1097596928, 14}, { 1120403456, 13}, { 1162870784, 12}, { 1235222528, 11}},
    {{ 1085931520, 15}, { 1097859072, 14}, { 1120927744, 13}, { 1163919360, 12}, { 1237319680, 11}},
    {{ 1086062592, 15}, { 1098121216, 14}, { 1121452032, 13}, { 1164967936, 12}, { 1239416832, 11}},
    {{ 1086193664, 15}, { 1098383360, 14}, { 1121976320, 13}, { 1166016512, 12}, { 1241513984, 11}},
    {{ 1086324736, 15}, { 1098645504, 14}, { 1122500608, 13}, { 1167065088, 12}, { 1243611136, 11}},
    {{ 1086455808, 15}, { 1098907648, 14}, { 1123024896, 13}, { 1168113664, 12}, { 1245708288, 11}},
    {{ 1086586880, 15}, { 1099169792, 14}, { 1123549184, 13}, { 1169162240, 12}, { 1247805440, 11}}
};

int oapv_itrans_diff[64][64] = {
    {
         16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
         16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748,
         16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748,
         16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748,
         16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
         16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
         16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
         16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748
    },
    {
         23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
         22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
         23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
         23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
         22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
         22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
         22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
         22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277
    },
    {
         22573,   22573,   22573,   22573,   22573,   22573,   22573,   22573,
         19660,   19660,   19660,   19660,   19660,   19660,   19660,   19660,
         13107,   13107,   13107,   13107,   13107,   13107,   13107,   13107,
         5097,    5097,    5097,    5097,    5097,    5097,    5097,    5097,
         -5097,   -5097,   -5097,   -5097,   -5097,   -5097,   -5097,   -5097,
         -13107,  -13107,  -13107,  -13107,  -13107,  -13107,  -13107,  -13107,
         -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,
         -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573
    },
    {
         21117,   21117,   21117,   21117,   21117,   21117,   21117,   21117,
         9466,    9466,    9466,    9466,    9466,    9466,    9466,    9466,
         -8738,   -8738,   -8738,   -8738,   -8738,   -8738,   -8738,   -8738,
         -21117,  -21117,  -21117,  -21117,  -21117,  -21117,  -21117,  -21117,
         -21845,  -21845,  -21845,  -21845,  -21845,  -21845,  -21845,  -21845,
         -9466,   -9466,   -9466,   -9466,   -9466,   -9466,   -9466,   -9466,
         8738,    8738,    8738,    8738,    8738,    8738,    8738,    8738,
         21845,   21845,   21845,   21845,   21845,   21845,   21845,   21845
    },
    {
         32403,   27306,   18204,    6553,   -6553,  -18204,  -27306,  -32403,
         26328,   22186,   14791,    5324,   -5324,  -14791,  -22186,  -26328,
         18227,   15360,   10240,    3686,   -3686,  -10240,  -15360,  -18227,
         6075,    5120,    3413,    1228,   -1228,   -3413,   -5120,   -6075,
         -6075,   -5120,   -3413,   -1228,    1228,    3413,    5120,    6075,
         -18227,  -15360,  -10240,   -3686,    3686,   10240,   15360,   18227,
         -26328,  -22186,  -14791,   -5324,    5324,   14791,   22186,   26328,
         -32403,  -27306,  -18204,   -6553,    6553,   18204,   27306,   32403
    },
    {
         21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981,
         21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
         21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
         21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
         21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
         21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981,
         21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981,
         21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981
    },
    {
         18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
         18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
         19626,   -4710,  -23290,  -13084,   13084,   23290,    4710,  -19626,
         18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
         18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
         19626,   -4710,  -23290,  -13084,   13084,   23290,    4710,  -19626,
         18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
         19626,   -4710,  -23290,  -13084,   13084,   23290,    4710,  -19626
    },
    {
         30583,   12743,  -12743,  -30583,  -30583,  -12743,   12743,   30583,
         24849,   10353,  -10353,  -24849,  -24849,  -10353,   10353,   24849,
         16247,    6769,   -6769,  -16247,  -16247,   -6769,    6769,   16247,
         5734,    2389,   -2389,   -5734,   -5734,   -2389,    2389,    5734,
         -6690,   -2787,    2787,    6690,    6690,    2787,   -2787,   -6690,
         -16247,   -6769,    6769,   16247,   16247,    6769,   -6769,  -16247,
         -24849,  -10353,   10353,   24849,   24849,   10353,  -10353,  -24849,
         -29627,  -12344,   12344,   29627,   29627,   12344,  -12344,  -29627
    },
    {
         30378,   25600,   17066,    6144,   -6144,  -17066,  -25600,  -30378,
         12151,   10240,    6826,    2457,   -2457,   -6826,  -10240,  -12151,
         -12151,  -10240,   -6826,   -2457,    2457,    6826,   10240,   12151,
         -29366,  -24746,  -16497,   -5939,    5939,   16497,   24746,   29366,
         -30378,  -25600,  -17066,   -6144,    6144,   17066,   25600,   30378,
         -13164,  -11093,   -7395,   -2662,    2662,    7395,   11093,   13164,
         12151,   10240,    6826,    2457,   -2457,   -6826,  -10240,  -12151,
         29366,   24746,   16497,    5939,   -5939,  -16497,  -24746,  -29366
    },
    {
         18932,   18932,   18932,   18932,   18932,   18932,   18932,   18932,
         -4369,   -4369,   -4369,   -4369,   -4369,   -4369,   -4369,   -4369,
         -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,
         -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,
         12379,   12379,   12379,   12379,   12379,   12379,   12379,   12379,
         22573,   22573,   22573,   22573,   22573,   22573,   22573,   22573,
         4369,    4369,    4369,    4369,    4369,    4369,    4369,    4369,
         -18932,  -18932,  -18932,  -18932,  -18932,  -18932,  -18932,  -18932
    },
    {
         16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
         -16019,  -16019,  -16019,  -16019,  -16019,  -16019,  -16019,  -16019,
         -16019,  -16019,  -16019,  -16019,  -16019,  -16019,  -16019,  -16019,
         16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748,
         16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
         -16748,  -16748,  -16748,  -16748,  -16748,  -16748,  -16748,  -16748,
         -16748,  -16748,  -16748,  -16748,  -16748,  -16748,  -16748,  -16748,
         16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748
    },
    {
         27340,   23040,   15360,    5529,   -5529,  -15360,  -23040,  -27340,
         -6075,   -5120,   -3413,   -1228,    1228,    3413,    5120,    6075,
         -31391,  -26453,  -17635,   -6348,    6348,   17635,   26453,   31391,
         -17214,  -14506,   -9671,   -3481,    3481,    9671,   14506,   17214,
         17214,   14506,    9671,    3481,   -3481,   -9671,  -14506,  -17214,
         31391,   26453,   17635,    6348,   -6348,  -17635,  -26453,  -31391,
         6075,    5120,    3413,    1228,   -1228,   -3413,   -5120,   -6075,
         -27340,  -23040,  -15360,   -5529,    5529,   15360,   23040,   27340
    },
    {
         28672,   11946,  -11946,  -28672,  -28672,  -11946,   11946,   28672,
         11468,    4778,   -4778,  -11468,  -11468,   -4778,    4778,   11468,
         -12424,   -5176,    5176,   12424,   12424,    5176,   -5176,  -12424,
         -28672,  -11946,   11946,   28672,   28672,   11946,  -11946,  -28672,
         -28672,  -11946,   11946,   28672,   28672,   11946,  -11946,  -28672,
         -11468,   -4778,    4778,   11468,   11468,    4778,   -4778,  -11468,
         12424,    5176,   -5176,  -12424,  -12424,   -5176,    5176,   12424,
         28672,   11946,  -11946,  -28672,  -28672,  -11946,   11946,   28672
    },
    {
         26453,   -6348,  -31391,  -17635,   17635,   31391,    6348,  -26453,
         22186,   -5324,  -26328,  -14791,   14791,   26328,    5324,  -22186,
         15360,   -3686,  -18227,  -10240,   10240,   18227,    3686,  -15360,
         5120,   -1228,   -6075,   -3413,    3413,    6075,    1228,   -5120,
         -5973,    1433,    7088,    3982,   -3982,   -7088,   -1433,    5973,
         -14506,    3481,   17214,    9671,   -9671,  -17214,   -3481,   14506,
         -23040,    5529,   27340,   15360,  -15360,  -27340,   -5529,   23040,
         -26453,    6348,   31391,   17635,  -17635,  -31391,   -6348,   26453
    },
    {
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
         16019,  -16019,  -16019,   16019,   16019,  -16019,  -16019,   16019,
         16019,  -16019,  -16019,   16019,   16019,  -16019,  -16019,   16019,
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748
    },
    {
         12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
         13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084,
         13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084,
         12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
         13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084,
         12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
         12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
         13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084
    },
    {
         23301,  -23301,  -23301,   23301,   23301,  -23301,  -23301,   23301,
         18932,  -18932,  -18932,   18932,   18932,  -18932,  -18932,   18932,
         12379,  -12379,  -12379,   12379,   12379,  -12379,  -12379,   12379,
         4369,   -4369,   -4369,    4369,    4369,   -4369,   -4369,    4369,
         -4369,    4369,    4369,   -4369,   -4369,    4369,    4369,   -4369,
         -12379,   12379,   12379,  -12379,  -12379,   12379,   12379,  -12379,
         -18932,   18932,   18932,  -18932,  -18932,   18932,   18932,  -18932,
         -22573,   22573,   22573,  -22573,  -22573,   22573,   22573,  -22573
    },
    {
         24746,   -5939,  -29366,  -16497,   16497,   29366,    5939,  -24746,
         10240,   -2457,  -12151,   -6826,    6826,   12151,    2457,  -10240,
         -10240,    2457,   12151,    6826,   -6826,  -12151,   -2457,   10240,
         -25600,    6144,   30378,   17066,  -17066,  -30378,   -6144,   25600,
         -25600,    6144,   30378,   17066,  -17066,  -30378,   -6144,   25600,
         -10240,    2457,   12151,    6826,   -6826,  -12151,   -2457,   10240,
         10240,   -2457,  -12151,   -6826,    6826,   12151,    2457,  -10240,
         25600,   -6144,  -30378,  -17066,   17066,   30378,    6144,  -25600
    },
    {
         25804,   10752,  -10752,  -25804,  -25804,  -10752,   10752,   25804,
         -5734,   -2389,    2389,    5734,    5734,    2389,   -2389,   -5734,
         -30583,  -12743,   12743,   30583,   30583,   12743,  -12743,  -30583,
         -17203,   -7168,    7168,   17203,   17203,    7168,   -7168,  -17203,
         16247,    6769,   -6769,  -16247,  -16247,   -6769,    6769,   16247,
         29627,   12344,  -12344,  -29627,  -29627,  -12344,   12344,   29627,
         6690,    2787,   -2787,   -6690,   -6690,   -2787,    2787,    6690,
         -24849,  -10353,   10353,   24849,   24849,   10353,  -10353,  -24849
    },
    {
         23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
         -23290,  -19626,  -13084,   -4710,    4710,   13084,   19626,   23290,
         -22277,  -18773,  -12515,   -4505,    4505,   12515,   18773,   22277,
         23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
         22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
         -23290,  -19626,  -13084,   -4710,    4710,   13084,   19626,   23290,
         -23290,  -19626,  -13084,   -4710,    4710,   13084,   19626,   23290,
         22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277
    },
    {
         12379,   12379,   12379,   12379,   12379,   12379,   12379,   12379,
         -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,
         5097,    5097,    5097,    5097,    5097,    5097,    5097,    5097,
         19660,   19660,   19660,   19660,   19660,   19660,   19660,   19660,
         -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,
         -5097,   -5097,   -5097,   -5097,   -5097,   -5097,   -5097,   -5097,
         22573,   22573,   22573,   22573,   22573,   22573,   22573,   22573,
         -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379
    },
    {
         8738,    8738,    8738,    8738,    8738,    8738,    8738,    8738,
         -21117,  -21117,  -21117,  -21117,  -21117,  -21117,  -21117,  -21117,
         21845,   21845,   21845,   21845,   21845,   21845,   21845,   21845,
         -8738,   -8738,   -8738,   -8738,   -8738,   -8738,   -8738,   -8738,
         -9466,   -9466,   -9466,   -9466,   -9466,   -9466,   -9466,   -9466,
         21117,   21117,   21117,   21117,   21117,   21117,   21117,   21117,
         -21845,  -21845,  -21845,  -21845,  -21845,  -21845,  -21845,  -21845,
         9466,    9466,    9466,    9466,    9466,    9466,    9466,    9466
    },
    {
         18227,   15360,   10240,    3686,   -3686,  -10240,  -15360,  -18227,
         -31391,  -26453,  -17635,   -6348,    6348,   17635,   26453,   31391,
         7088,    5973,    3982,    1433,   -1433,   -3982,   -5973,   -7088,
         26328,   22186,   14791,    5324,   -5324,  -14791,  -22186,  -26328,
         -26328,  -22186,  -14791,   -5324,    5324,   14791,   22186,   26328,
         -7088,   -5973,   -3982,   -1433,    1433,    3982,    5973,    7088,
         31391,   26453,   17635,    6348,   -6348,  -17635,  -26453,  -31391,
         -18227,  -15360,  -10240,   -3686,    3686,   10240,   15360,   18227
    },
    {
         21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981,
         -21981,   -9159,    9159,   21981,   21981,    9159,   -9159,  -21981,
         -21981,   -9159,    9159,   21981,   21981,    9159,   -9159,  -21981,
         21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
         21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
         -21026,   -8760,    8760,   21026,   21026,    8760,   -8760,  -21026,
         -21026,   -8760,    8760,   21026,   21026,    8760,   -8760,  -21026,
         21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981
    },
    {
         22186,   -5324,  -26328,  -14791,   14791,   26328,    5324,  -22186,
         -5120,    1228,    6075,    3413,   -3413,   -6075,   -1228,    5120,
         -26453,    6348,   31391,   17635,  -17635,  -31391,   -6348,   26453,
         -15360,    3686,   18227,   10240,  -10240,  -18227,   -3686,   15360,
         14506,   -3481,  -17214,   -9671,    9671,   17214,    3481,  -14506,
         27306,   -6553,  -32403,  -18204,   18204,   32403,    6553,  -27306,
         5120,   -1228,   -6075,   -3413,    3413,    6075,    1228,   -5120,
         -22186,    5324,   26328,   14791,  -14791,  -26328,   -5324,   22186
    },
    {
         21845,  -21845,  -21845,   21845,   21845,  -21845,  -21845,   21845,
         8738,   -8738,   -8738,    8738,    8738,   -8738,   -8738,    8738,
         -9466,    9466,    9466,   -9466,   -9466,    9466,    9466,   -9466,
         -21117,   21117,   21117,  -21117,  -21117,   21117,   21117,  -21117,
         -21117,   21117,   21117,  -21117,  -21117,   21117,   21117,  -21117,
         -8738,    8738,    8738,   -8738,   -8738,    8738,    8738,   -8738,
         9466,   -9466,   -9466,    9466,    9466,   -9466,   -9466,    9466,
         21845,  -21845,  -21845,   21845,   21845,  -21845,  -21845,   21845
    },
    {
         17635,  -31391,    6348,   26453,  -26453,   -6348,   31391,  -17635,
         15360,  -27340,    5529,   23040,  -23040,   -5529,   27340,  -15360,
         10240,  -18227,    3686,   15360,  -15360,   -3686,   18227,  -10240,
         3413,   -6075,    1228,    5120,   -5120,   -1228,    6075,   -3413,
         -3413,    6075,   -1228,   -5120,    5120,    1228,   -6075,    3413,
         -10240,   18227,   -3686,  -15360,   15360,    3686,  -18227,   10240,
         -15360,   27340,   -5529,  -23040,   23040,    5529,  -27340,   15360,
         -17635,   31391,   -6348,  -26453,   26453,    6348,  -31391,   17635
    },
    {
         8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
         9159,  -21981,   21981,   -9159,   -9159,   21981,  -21981,    9159,
         8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
         8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
         8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
         8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
         9159,  -21981,   21981,   -9159,   -9159,   21981,  -21981,    9159,
         9159,  -21981,   21981,   -9159,   -9159,   21981,  -21981,    9159
    },
    {
         4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
         4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710,
         4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
         4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
         4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710,
         4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710,
         4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
         4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710
    },
    {
         12344,  -29627,   29627,  -12344,  -12344,   29627,  -29627,   12344,
         10752,  -25804,   25804,  -10752,  -10752,   25804,  -25804,   10752,
         6769,  -16247,   16247,   -6769,   -6769,   16247,  -16247,    6769,
         2389,   -5734,    5734,   -2389,   -2389,    5734,   -5734,    2389,
         -2389,    5734,   -5734,    2389,    2389,   -5734,    5734,   -2389,
         -7168,   17203,  -17203,    7168,    7168,  -17203,   17203,   -7168,
         -10353,   24849,  -24849,   10353,   10353,  -24849,   24849,  -10353,
         -12344,   29627,  -29627,   12344,   12344,  -29627,   29627,  -12344
    },
    {
         16497,  -29366,    5939,   24746,  -24746,   -5939,   29366,  -16497,
         7395,  -13164,    2662,   11093,  -11093,   -2662,   13164,   -7395,
         -6826,   12151,   -2457,  -10240,   10240,    2457,  -12151,    6826,
         -17066,   30378,   -6144,  -25600,   25600,    6144,  -30378,   17066,
         -16497,   29366,   -5939,  -24746,   24746,    5939,  -29366,   16497,
         -7395,   13164,   -2662,  -11093,   11093,    2662,  -13164,    7395,
         6826,  -12151,    2457,   10240,  -10240,   -2457,   12151,   -6826,
         17066,  -30378,    6144,   25600,  -25600,   -6144,   30378,  -17066
    },
    {
         19660,  -19660,  -19660,   19660,   19660,  -19660,  -19660,   19660,
         -5097,    5097,    5097,   -5097,   -5097,    5097,    5097,   -5097,
         -23301,   23301,   23301,  -23301,  -23301,   23301,   23301,  -23301,
         -12379,   12379,   12379,  -12379,  -12379,   12379,   12379,  -12379,
         13107,  -13107,  -13107,   13107,   13107,  -13107,  -13107,   13107,
         23301,  -23301,  -23301,   23301,   23301,  -23301,  -23301,   23301,
         5097,   -5097,   -5097,    5097,    5097,   -5097,   -5097,    5097,
         -18932,   18932,   18932,  -18932,  -18932,   18932,   18932,  -18932
    },
    {
         18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
         -19626,    4710,   23290,   13084,  -13084,  -23290,   -4710,   19626,
         -18773,    4505,   22277,   12515,  -12515,  -22277,   -4505,   18773,
         18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
         18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
         -18773,    4505,   22277,   12515,  -12515,  -22277,   -4505,   18773,
         -19626,    4710,   23290,   13084,  -13084,  -23290,   -4710,   19626,
         19626,   -4710,  -23290,  -13084,   13084,   23290,    4710,  -19626
    },
    {
         17203,    7168,   -7168,  -17203,  -17203,   -7168,    7168,   17203,
         -29627,  -12344,   12344,   29627,   29627,   12344,  -12344,  -29627,
         5734,    2389,   -2389,   -5734,   -5734,   -2389,    2389,    5734,
         24849,   10353,  -10353,  -24849,  -24849,  -10353,   10353,   24849,
         -25804,  -10752,   10752,   25804,   25804,   10752,  -10752,  -25804,
         -5734,   -2389,    2389,    5734,    5734,    2389,   -2389,   -5734,
         29627,   12344,  -12344,  -29627,  -29627,  -12344,   12344,   29627,
         -17203,   -7168,    7168,   17203,   17203,    7168,   -7168,  -17203
    },
    {
         13164,   11093,    7395,    2662,   -2662,   -7395,  -11093,  -13164,
         -30378,  -25600,  -17066,   -6144,    6144,   17066,   25600,   30378,
         30378,   25600,   17066,    6144,   -6144,  -17066,  -25600,  -30378,
         -12151,  -10240,   -6826,   -2457,    2457,    6826,   10240,   12151,
         -12151,  -10240,   -6826,   -2457,    2457,    6826,   10240,   12151,
         29366,   24746,   16497,    5939,   -5939,  -16497,  -24746,  -29366,
         -30378,  -25600,  -17066,   -6144,    6144,   17066,   25600,   30378,
         12151,   10240,    6826,    2457,   -2457,   -6826,  -10240,  -12151
    },
    {
         4369,    4369,    4369,    4369,    4369,    4369,    4369,    4369,
         -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,
         19660,   19660,   19660,   19660,   19660,   19660,   19660,   19660,
         -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,
         22573,   22573,   22573,   22573,   22573,   22573,   22573,   22573,
         -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,
         12379,   12379,   12379,   12379,   12379,   12379,   12379,   12379,
         -4369,   -4369,   -4369,   -4369,   -4369,   -4369,   -4369,   -4369
    },
    {
         7088,    5973,    3982,    1433,   -1433,   -3982,   -5973,   -7088,
         -18227,  -15360,  -10240,   -3686,    3686,   10240,   15360,   18227,
         27340,   23040,   15360,    5529,   -5529,  -15360,  -23040,  -27340,
         -31391,  -26453,  -17635,   -6348,    6348,   17635,   26453,   31391,
         31391,   26453,   17635,    6348,   -6348,  -17635,  -26453,  -31391,
         -27340,  -23040,  -15360,   -5529,    5529,   15360,   23040,   27340,
         18227,   15360,   10240,    3686,   -3686,  -10240,  -15360,  -18227,
         -7088,   -5973,   -3982,   -1433,    1433,    3982,    5973,    7088
    },
    {
         12424,    5176,   -5176,  -12424,  -12424,   -5176,    5176,   12424,
         -28672,  -11946,   11946,   28672,   28672,   11946,  -11946,  -28672,
         27716,   11548,  -11548,  -27716,  -27716,  -11548,   11548,   27716,
         -11468,   -4778,    4778,   11468,   11468,    4778,   -4778,  -11468,
         -12424,   -5176,    5176,   12424,   12424,    5176,   -5176,  -12424,
         28672,   11946,  -11946,  -28672,  -28672,  -11946,   11946,   28672,
         -27716,  -11548,   11548,   27716,   27716,   11548,  -11548,  -27716,
         11468,    4778,   -4778,  -11468,  -11468,   -4778,    4778,   11468
    },
    {
         14506,   -3481,  -17214,   -9671,    9671,   17214,    3481,  -14506,
         -26453,    6348,   31391,   17635,  -17635,  -31391,   -6348,   26453,
         5973,   -1433,   -7088,   -3982,    3982,    7088,    1433,   -5973,
         22186,   -5324,  -26328,  -14791,   14791,   26328,    5324,  -22186,
         -23040,    5529,   27340,   15360,  -15360,  -27340,   -5529,   23040,
         -5120,    1228,    6075,    3413,   -3413,   -6075,   -1228,    5120,
         26453,   -6348,  -31391,  -17635,   17635,   31391,    6348,  -26453,
         -14506,    3481,   17214,    9671,   -9671,  -17214,   -3481,   14506
    },
    {
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
         -16748,   16748,   16748,  -16748,  -16748,   16748,   16748,  -16748,
         -16748,   16748,   16748,  -16748,  -16748,   16748,   16748,  -16748,
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
         -16019,   16019,   16019,  -16019,  -16019,   16019,   16019,  -16019,
         -16019,   16019,   16019,  -16019,  -16019,   16019,   16019,  -16019,
         16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748
    },
    {
         14791,  -26328,    5324,   22186,  -22186,   -5324,   26328,  -14791,
         -3413,    6075,   -1228,   -5120,    5120,    1228,   -6075,    3413,
         -17635,   31391,   -6348,  -26453,   26453,    6348,  -31391,   17635,
         -10240,   18227,   -3686,  -15360,   15360,    3686,  -18227,   10240,
         10240,  -18227,    3686,   15360,  -15360,   -3686,   18227,  -10240,
         17635,  -31391,    6348,   26453,  -26453,   -6348,   31391,  -17635,
         3413,   -6075,    1228,    5120,   -5120,   -1228,    6075,   -3413,
         -14791,   26328,   -5324,  -22186,   22186,    5324,  -26328,   14791
    },
    {
         11548,  -27716,   27716,  -11548,  -11548,   27716,  -27716,   11548,
         5176,  -12424,   12424,   -5176,   -5176,   12424,  -12424,    5176,
         -5176,   12424,  -12424,    5176,    5176,  -12424,   12424,   -5176,
         -11946,   28672,  -28672,   11946,   11946,  -28672,   28672,  -11946,
         -11946,   28672,  -28672,   11946,   11946,  -28672,   28672,  -11946,
         -5176,   12424,  -12424,    5176,    5176,  -12424,   12424,   -5176,
         4778,  -11468,   11468,   -4778,   -4778,   11468,  -11468,    4778,
         11946,  -28672,   28672,  -11946,  -11946,   28672,  -28672,   11946
    },
    {
         6348,  -17635,   26453,  -31391,   31391,  -26453,   17635,   -6348,
         5529,  -15360,   23040,  -27340,   27340,  -23040,   15360,   -5529,
         3481,   -9671,   14506,  -17214,   17214,  -14506,    9671,   -3481,
         1228,   -3413,    5120,   -6075,    6075,   -5120,    3413,   -1228,
         -1228,    3413,   -5120,    6075,   -6075,    5120,   -3413,    1228,
         -3481,    9671,  -14506,   17214,  -17214,   14506,   -9671,    3481,
         -5324,   14791,  -22186,   26328,  -26328,   22186,  -14791,    5324,
         -6348,   17635,  -26453,   31391,  -31391,   26453,  -17635,    6348
    },
    {
         5939,  -16497,   24746,  -29366,   29366,  -24746,   16497,   -5939,
         2662,   -7395,   11093,  -13164,   13164,  -11093,    7395,   -2662,
         -2662,    7395,  -11093,   13164,  -13164,   11093,   -7395,    2662,
         -6144,   17066,  -25600,   30378,  -30378,   25600,  -17066,    6144,
         -5939,   16497,  -24746,   29366,  -29366,   24746,  -16497,    5939,
         -2457,    6826,  -10240,   12151,  -12151,   10240,   -6826,    2457,
         2457,   -6826,   10240,  -12151,   12151,  -10240,    6826,   -2457,
         6144,  -17066,   25600,  -30378,   30378,  -25600,   17066,   -6144
    },
    {
         10353,  -24849,   24849,  -10353,  -10353,   24849,  -24849,   10353,
         -2389,    5734,   -5734,    2389,    2389,   -5734,    5734,   -2389,
         -12743,   30583,  -30583,   12743,   12743,  -30583,   30583,  -12743,
         -7168,   17203,  -17203,    7168,    7168,  -17203,   17203,   -7168,
         7168,  -17203,   17203,   -7168,   -7168,   17203,  -17203,    7168,
         12344,  -29627,   29627,  -12344,  -12344,   29627,  -29627,   12344,
         2389,   -5734,    5734,   -2389,   -2389,    5734,   -5734,    2389,
         -10353,   24849,  -24849,   10353,   10353,  -24849,   24849,  -10353
    },
    {
         12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
         -12515,   22277,   -4505,  -18773,   18773,    4505,  -22277,   12515,
         -12515,   22277,   -4505,  -18773,   18773,    4505,  -22277,   12515,
         12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
         13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084,
         -13084,   23290,   -4710,  -19626,   19626,    4710,  -23290,   13084,
         -13084,   23290,   -4710,  -19626,   19626,    4710,  -23290,   13084,
         13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084
    },
    {
         13107,  -13107,  -13107,   13107,   13107,  -13107,  -13107,   13107,
         -23301,   23301,   23301,  -23301,  -23301,   23301,   23301,  -23301,
         4369,   -4369,   -4369,    4369,    4369,   -4369,   -4369,    4369,
         19660,  -19660,  -19660,   19660,   19660,  -19660,  -19660,   19660,
         -18932,   18932,   18932,  -18932,  -18932,   18932,   18932,  -18932,
         -4369,    4369,    4369,   -4369,   -4369,    4369,    4369,   -4369,
         23301,  -23301,  -23301,   23301,   23301,  -23301,  -23301,   23301,
         -12379,   12379,   12379,  -12379,  -12379,   12379,   12379,  -12379
    },
    {
         10240,   -2457,  -12151,   -6826,    6826,   12151,    2457,  -10240,
         -25600,    6144,   30378,   17066,  -17066,  -30378,   -6144,   25600,
         25600,   -6144,  -30378,  -17066,   17066,   30378,    6144,  -25600,
         -11093,    2662,   13164,    7395,   -7395,  -13164,   -2662,   11093,
         -11093,    2662,   13164,    7395,   -7395,  -13164,   -2662,   11093,
         25600,   -6144,  -30378,  -17066,   17066,   30378,    6144,  -25600,
         -25600,    6144,   30378,   17066,  -17066,  -30378,   -6144,   25600,
         10240,   -2457,  -12151,   -6826,    6826,   12151,    2457,  -10240
    },
    {
         6690,    2787,   -2787,   -6690,   -6690,   -2787,    2787,    6690,
         -17203,   -7168,    7168,   17203,   17203,    7168,   -7168,  -17203,
         24849,   10353,  -10353,  -24849,  -24849,  -10353,   10353,   24849,
         -29627,  -12344,   12344,   29627,   29627,   12344,  -12344,  -29627,
         29627,   12344,  -12344,  -29627,  -29627,  -12344,   12344,   29627,
         -24849,  -10353,   10353,   24849,   24849,   10353,  -10353,  -24849,
         17203,    7168,   -7168,  -17203,  -17203,   -7168,    7168,   17203,
         -5734,   -2389,    2389,    5734,    5734,    2389,   -2389,   -5734
    },
    {
         5120,   -1228,   -6075,   -3413,    3413,    6075,    1228,   -5120,
         -15360,    3686,   18227,   10240,  -10240,  -18227,   -3686,   15360,
         23040,   -5529,  -27340,  -15360,   15360,   27340,    5529,  -23040,
         -27306,    6553,   32403,   18204,  -18204,  -32403,   -6553,   27306,
         26453,   -6348,  -31391,  -17635,   17635,   31391,    6348,  -26453,
         -22186,    5324,   26328,   14791,  -14791,  -26328,   -5324,   22186,
         14506,   -3481,  -17214,   -9671,    9671,   17214,    3481,  -14506,
         -5120,    1228,    6075,    3413,   -3413,   -6075,   -1228,    5120
    },
    {
         9466,   -9466,   -9466,    9466,    9466,   -9466,   -9466,    9466,
         -21845,   21845,   21845,  -21845,  -21845,   21845,   21845,  -21845,
         21117,  -21117,  -21117,   21117,   21117,  -21117,  -21117,   21117,
         -8738,    8738,    8738,   -8738,   -8738,    8738,    8738,   -8738,
         -8738,    8738,    8738,   -8738,   -8738,    8738,    8738,   -8738,
         21845,  -21845,  -21845,   21845,   21845,  -21845,  -21845,   21845,
         -21117,   21117,   21117,  -21117,  -21117,   21117,   21117,  -21117,
         9466,   -9466,   -9466,    9466,    9466,   -9466,   -9466,    9466
    },
    {
         9671,  -17214,    3481,   14506,  -14506,   -3481,   17214,   -9671,
         -17635,   31391,   -6348,  -26453,   26453,    6348,  -31391,   17635,
         3982,   -7088,    1433,    5973,   -5973,   -1433,    7088,   -3982,
         14791,  -26328,    5324,   22186,  -22186,   -5324,   26328,  -14791,
         -14791,   26328,   -5324,  -22186,   22186,    5324,  -26328,   14791,
         -3982,    7088,   -1433,   -5973,    5973,    1433,   -7088,    3982,
         17635,  -31391,    6348,   26453,  -26453,   -6348,   31391,  -17635,
         -9671,   17214,   -3481,  -14506,   14506,    3481,  -17214,    9671
    },
    {
         8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
         -8760,   21026,  -21026,    8760,    8760,  -21026,   21026,   -8760,
         -9159,   21981,  -21981,    9159,    9159,  -21981,   21981,   -9159,
         8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
         8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
         -9159,   21981,  -21981,    9159,    9159,  -21981,   21981,   -9159,
         -8760,   21026,  -21026,    8760,    8760,  -21026,   21026,   -8760,
         9159,  -21981,   21981,   -9159,   -9159,   21981,  -21981,    9159
    },
    {
         5324,  -14791,   22186,  -26328,   26328,  -22186,   14791,   -5324,
         -1228,    3413,   -5120,    6075,   -6075,    5120,   -3413,    1228,
         -6553,   18204,  -27306,   32403,  -32403,   27306,  -18204,    6553,
         -3686,   10240,  -15360,   18227,  -18227,   15360,  -10240,    3686,
         3686,  -10240,   15360,  -18227,   18227,  -15360,   10240,   -3686,
         6348,  -17635,   26453,  -31391,   31391,  -26453,   17635,   -6348,
         1228,   -3413,    5120,   -6075,    6075,   -5120,    3413,   -1228,
         -5324,   14791,  -22186,   26328,  -26328,   22186,  -14791,    5324
    },
    {
         4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
         -4505,   12515,  -18773,   22277,  -22277,   18773,  -12515,    4505,
         -4710,   13084,  -19626,   23290,  -23290,   19626,  -13084,    4710,
         4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
         4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710,
         -4505,   12515,  -18773,   22277,  -22277,   18773,  -12515,    4505,
         -4710,   13084,  -19626,   23290,  -23290,   19626,  -13084,    4710,
         4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710
    },
    {
         6769,  -16247,   16247,   -6769,   -6769,   16247,  -16247,    6769,
         -12344,   29627,  -29627,   12344,   12344,  -29627,   29627,  -12344,
         2389,   -5734,    5734,   -2389,   -2389,    5734,   -5734,    2389,
         10353,  -24849,   24849,  -10353,  -10353,   24849,  -24849,   10353,
         -10353,   24849,  -24849,   10353,   10353,  -24849,   24849,  -10353,
         -2787,    6690,   -6690,    2787,    2787,   -6690,    6690,   -2787,
         12344,  -29627,   29627,  -12344,  -12344,   29627,  -29627,   12344,
         -6769,   16247,  -16247,    6769,    6769,  -16247,   16247,   -6769
    },
    {
         6826,  -12151,    2457,   10240,  -10240,   -2457,   12151,   -6826,
         -16497,   29366,   -5939,  -24746,   24746,    5939,  -29366,   16497,
         17066,  -30378,    6144,   25600,  -25600,   -6144,   30378,  -17066,
         -7395,   13164,   -2662,  -11093,   11093,    2662,  -13164,    7395,
         -6826,   12151,   -2457,  -10240,   10240,    2457,  -12151,    6826,
         16497,  -29366,    5939,   24746,  -24746,   -5939,   29366,  -16497,
         -17066,   30378,   -6144,  -25600,   25600,    6144,  -30378,   17066,
         6826,  -12151,    2457,   10240,  -10240,   -2457,   12151,   -6826
    },
    {
         5097,   -5097,   -5097,    5097,    5097,   -5097,   -5097,    5097,
         -13107,   13107,   13107,  -13107,  -13107,   13107,   13107,  -13107,
         18932,  -18932,  -18932,   18932,   18932,  -18932,  -18932,   18932,
         -22573,   22573,   22573,  -22573,  -22573,   22573,   22573,  -22573,
         23301,  -23301,  -23301,   23301,   23301,  -23301,  -23301,   23301,
         -18932,   18932,   18932,  -18932,  -18932,   18932,   18932,  -18932,
         13107,  -13107,  -13107,   13107,   13107,  -13107,  -13107,   13107,
         -4369,    4369,    4369,   -4369,   -4369,    4369,    4369,   -4369
    },
    {
         3413,   -6075,    1228,    5120,   -5120,   -1228,    6075,   -3413,
         -9671,   17214,   -3481,  -14506,   14506,    3481,  -17214,    9671,
         15360,  -27340,    5529,   23040,  -23040,   -5529,   27340,  -15360,
         -18204,   32403,   -6553,  -27306,   27306,    6553,  -32403,   18204,
         18204,  -32403,    6553,   27306,  -27306,   -6553,   32403,  -18204,
         -15360,   27340,   -5529,  -23040,   23040,    5529,  -27340,   15360,
         9671,  -17214,    3481,   14506,  -14506,   -3481,   17214,   -9671,
         -3413,    6075,   -1228,   -5120,    5120,    1228,   -6075,    3413
    },
    {
         4778,  -11468,   11468,   -4778,   -4778,   11468,  -11468,    4778,
         -11548,   27716,  -27716,   11548,   11548,  -27716,   27716,  -11548,
         11548,  -27716,   27716,  -11548,  -11548,   27716,  -27716,   11548,
         -4778,   11468,  -11468,    4778,    4778,  -11468,   11468,   -4778,
         -4778,   11468,  -11468,    4778,    4778,  -11468,   11468,   -4778,
         11548,  -27716,   27716,  -11548,  -11548,   27716,  -27716,   11548,
         -11548,   27716,  -27716,   11548,   11548,  -27716,   27716,  -11548,
         5176,  -12424,   12424,   -5176,   -5176,   12424,  -12424,    5176
    },
    {
         3481,   -9671,   14506,  -17214,   17214,  -14506,    9671,   -3481,
         -6348,   17635,  -26453,   31391,  -31391,   26453,  -17635,    6348,
         1228,   -3413,    5120,   -6075,    6075,   -5120,    3413,   -1228,
         5324,  -14791,   22186,  -26328,   26328,  -22186,   14791,   -5324,
         -5324,   14791,  -22186,   26328,  -26328,   22186,  -14791,    5324,
         -1228,    3413,   -5120,    6075,   -6075,    5120,   -3413,    1228,
         6348,  -17635,   26453,  -31391,   31391,  -26453,   17635,   -6348,
         -3481,    9671,  -14506,   17214,  -17214,   14506,   -9671,    3481
    },
    {
         2457,   -6826,   10240,  -12151,   12151,  -10240,    6826,   -2457,
         -5939,   16497,  -24746,   29366,  -29366,   24746,  -16497,    5939,
         5939,  -16497,   24746,  -29366,   29366,  -24746,   16497,   -5939,
         -2662,    7395,  -11093,   13164,  -13164,   11093,   -7395,    2662,
         -2457,    6826,  -10240,   12151,  -12151,   10240,   -6826,    2457,
         6144,  -17066,   25600,  -30378,   30378,  -25600,   17066,   -6144,
         -6144,   17066,  -25600,   30378,  -30378,   25600,  -17066,    6144,
         2662,   -7395,   11093,  -13164,   13164,  -11093,    7395,   -2662
    },
    {
         2389,   -5734,    5734,   -2389,   -2389,    5734,   -5734,    2389,
         -6769,   16247,  -16247,    6769,    6769,  -16247,   16247,   -6769,
         10353,  -24849,   24849,  -10353,  -10353,   24849,  -24849,   10353,
         -12344,   29627,  -29627,   12344,   12344,  -29627,   29627,  -12344,
         12344,  -29627,   29627,  -12344,  -12344,   29627,  -29627,   12344,
         -10752,   25804,  -25804,   10752,   10752,  -25804,   25804,  -10752,
         7168,  -17203,   17203,   -7168,   -7168,   17203,  -17203,    7168,
         -2389,    5734,   -5734,    2389,    2389,   -5734,    5734,   -2389
    },
    {
         1228,   -3413,    5120,   -6075,    6075,   -5120,    3413,   -1228,
         -3481,    9671,  -14506,   17214,  -17214,   14506,   -9671,    3481,
         5324,  -14791,   22186,  -26328,   26328,  -22186,   14791,   -5324,
         -6553,   18204,  -27306,   32403,  -32403,   27306,  -18204,    6553,
         6553,  -18204,   27306,  -32403,   32403,  -27306,   18204,   -6553,
         -5324,   14791,  -22186,   26328,  -26328,   22186,  -14791,    5324,
         3481,   -9671,   14506,  -17214,   17214,  -14506,    9671,   -3481,
         -1228,    3413,   -5120,    6075,   -6075,    5120,   -3413,    1228
    }
};
// clang-format on