UNPKG

icqq

Version:

QQ protocol for NodeJS!

233 lines 58.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sign = exports.state = void 0; // copy from https://github.com/takayama-lily/oicq/pull/518 const crypto = require("crypto"); //go-cqhttp的encryption_amd64.s const keyTable = "$%&()+,-456789:?ABCDEEFGHIJabcdefghijkopqrstuvwxyz"; const table2 = "!#$%&)+.0123456789:=>?@ABCDEFGKMNabcdefghijkopqrst"; const key1 = Buffer.from('a$(eT7*@'); const key2 = Buffer.from('&O9!>6X)'); const tab = Uint32Array.from([0, 31158534, 40735498, 62317068, 81470997, 83908371, 112637215, 124634137, 141376813, 2607071920, 167816743, 198958881, 213261112, 225274430, 249268274, 251722036, 282753626, 285281116, 314042704, 325883990, 335633487, 366619977, 376229701, 397917763, 414664567, 426522225, 450548861, 453092731, 476864866, 498536548, 503444072, 534414190, 544179635, 565507253, 570562233, 601450431, 615818150, 628085408, 651767980, 654459306, 671266974, 702138776, 711928724, 733239954, 752459403, 755167117, 783551873, 795835527, 817233897, 829329135, 853044451, 855842277, 879679996, 901097722, 906185462, 936918000, 953729732, 956543938, 984961486, 997073096, 1006888145, 1037604311, 1047427035, 1068828381, 1088359270, 1090812512, 1119000684, 1131014506, 1141124467, 1172266101, 1181335161, 1202900863, 1219638859, 1231636301, 1256170817, 1258607687, 1281953886, 1303535960, 1308918612, 1340076626, 1342533948, 1373503546, 1382605366, 1404277552, 1423857449, 1426400815, 1454621731, 1466479909, 1483230225, 1504918807, 1510334235, 1541320221, 1555261956, 1567103746, 1591671054, 1594198024, 1622183637, 1634467795, 1658658271, 1661365465, 1684777152, 1706088902, 1711684554, 1742555852, 1759359992, 1762050814, 1789927666, 1802195444, 1812370925, 1843258603, 1852507879, 1873836001, 1886057615, 1907459465, 1913087877, 1943803523, 1957810842, 1969922972, 1994146192, 1996959894, 2013776290, 2044508324, 2053790376, 2075208622, 2094854071, 2097651377, 2125561021, 2137656763, 2154129355, 2176718541, 2181625025, 2211677639, 2227061214, 2238001368, 2262029012, 2265490386, 2282248934, 2312317920, 2321926636, 2344532202, 2362670323, 2366115317, 2394877945, 2405801727, 2428444049, 2439277719, 2463272603, 2466906013, 2489596804, 2512341634, 2517215374, 2547177864, 2563907772, 2567524794, 2596254646, 2607071920, 2617837225, 2647816111, 2657392035, 2680153253, 2685067896, 2714866558, 2724688242, 2747007092, 2765210733, 2768942443, 2797360999, 2808555105, 2825379669, 2847714899, 2852801631, 2882616665, 2898065728, 2909243462, 2932959818, 2936675148, 2966460450, 2970347812, 2998733608, 3009837614, 3020668471, 3050360625, 3060149565, 3082640443, 3099436303, 3110523913, 3134207493, 3138078467, 3160834842, 3183342108, 3188396048, 3218104598, 3233442989, 3244367275, 3268935591, 3272380065, 3294710456, 3317316542, 3322730930, 3352799412, 3369554304, 3373015174, 3401237130, 3412177804, 3423369109, 3453421203, 3462522015, 3485111705, 3495958263, 3518719985, 3524101629, 3554079995, 3569037538, 3579855332, 3604390888, 3608007406, 3624741850, 3654703836, 3663771856, 3686517206, 3705015759, 3708648649, 3736837829, 3747672003, 3772115230, 3775830040, 3803740692, 3814918930, 3826175755, 3855990285, 3865271297, 3887607047, 3904427059, 3915621685, 3939845945, 3943577151, 3965973030, 3988292384, 3993919788, 4023717930, 4027552580, 4057260610, 4066508878, 4089016648, 4107580753, 4111451223, 4139329115, 4150417245, 4167216745, 4189708143, 4195302755, 4224994405, 4240017532, 4251122042, 4275313526, 4279200368]); const ts = { encode: [[2, 5, 0, 14, 15, 3, 10, 1, 13, 12, 7, 11, 6, 8, 4, 9], [14, 13, 12, 5, 7, 15, 10, 11, 4, 6, 2, 3, 0, 8, 9, 1], [10, 5, 6, 13, 15, 3, 11, 8, 2, 9, 0, 14, 12, 4, 7, 1], [6, 14, 3, 0, 9, 10, 8, 13, 4, 11, 15, 5, 2, 1, 12, 7], [2, 6, 11, 12, 15, 7, 5, 8, 1, 13, 4, 0, 3, 14, 9, 10], [14, 0, 6, 3, 2, 12, 4, 15, 8, 1, 5, 9, 10, 7, 11, 13], [10, 7, 0, 13, 2, 4, 1, 15, 5, 12, 14, 6, 8, 9, 11, 3], [5, 1, 15, 7, 2, 10, 11, 12, 13, 0, 14, 6, 3, 4, 8, 9], [2, 7, 5, 10, 14, 3, 1, 12, 4, 11, 9, 6, 15, 0, 13, 8], [13, 2, 6, 7, 9, 1, 5, 4, 8, 10, 12, 15, 0, 14, 11, 3], [9, 10, 6, 15, 2, 12, 5, 13, 0, 3, 1, 8, 7, 11, 14, 4], [5, 3, 11, 15, 8, 14, 1, 9, 6, 0, 4, 7, 13, 2, 12, 10], [1, 11, 5, 6, 15, 8, 7, 13, 2, 4, 9, 14, 3, 12, 0, 10], [13, 3, 15, 14, 7, 0, 2, 5, 12, 8, 4, 10, 9, 6, 1, 11], [9, 12, 10, 5, 15, 2, 7, 13, 4, 11, 3, 14, 6, 1, 0, 8], [5, 4, 1, 13, 7, 2, 12, 8, 14, 0, 3, 11, 9, 15, 10, 6], [1, 12, 15, 5, 2, 0, 10, 7, 14, 8, 3, 4, 13, 9, 6, 11], [13, 5, 9, 12, 7, 4, 14, 10, 3, 0, 2, 8, 11, 6, 1, 15], [9, 13, 3, 4, 15, 1, 14, 0, 5, 11, 10, 8, 7, 12, 6, 2], [5, 0, 14, 11, 7, 10, 2, 9, 4, 6, 3, 1, 15, 8, 12, 13], [1, 14, 8, 3, 0, 6, 10, 7, 9, 15, 2, 5, 11, 13, 4, 12], [13, 6, 3, 10, 1, 15, 9, 0, 7, 12, 2, 8, 5, 14, 4, 11], [9, 14, 13, 2, 15, 5, 4, 11, 0, 6, 1, 12, 8, 10, 3, 7], [4, 9, 14, 7, 8, 12, 2, 5, 10, 13, 3, 6, 0, 1, 11, 15], [0, 1, 9, 15, 12, 11, 4, 14, 5, 10, 6, 8, 3, 7, 13, 2], [12, 9, 3, 7, 8, 1, 10, 6, 11, 0, 5, 2, 13, 4, 14, 15], [8, 2, 13, 14, 5, 15, 3, 7, 10, 4, 6, 11, 12, 1, 0, 9], [4, 10, 8, 6, 2, 5, 15, 9, 14, 0, 13, 7, 3, 12, 1, 11], [0, 2, 1, 13, 15, 11, 10, 4, 7, 9, 14, 8, 3, 6, 5, 12], [12, 11, 13, 5, 7, 0, 15, 6, 4, 3, 2, 10, 8, 1, 9, 14], [8, 3, 7, 12, 15, 9, 0, 1, 14, 5, 4, 2, 13, 11, 10, 6], [3, 14, 8, 2, 0, 1, 11, 6, 15, 12, 13, 10, 9, 4, 7, 5]], decode: [[11, 0, 9, 6, 14, 8, 4, 1, 2, 7, 10, 3, 15, 12, 13, 5], [11, 9, 3, 2, 6, 15, 5, 13, 12, 4, 10, 14, 8, 0, 7, 1], [12, 10, 14, 7, 2, 13, 11, 5, 0, 3, 1, 15, 4, 6, 8, 9], [8, 13, 1, 15, 0, 7, 11, 6, 14, 5, 3, 10, 4, 12, 2, 9], [0, 13, 3, 12, 9, 11, 7, 6, 2, 5, 1, 15, 4, 14, 10, 8], [12, 2, 10, 1, 5, 7, 14, 9, 8, 6, 4, 11, 0, 15, 13, 3], [13, 11, 14, 10, 8, 5, 4, 3, 0, 15, 9, 1, 12, 2, 7, 6], [15, 6, 12, 1, 0, 10, 13, 14, 2, 11, 4, 7, 5, 8, 3, 9], [0, 6, 2, 8, 9, 10, 3, 7, 12, 5, 11, 15, 1, 13, 14, 4], [2, 7, 10, 5, 1, 9, 12, 15, 13, 6, 4, 8, 0, 3, 14, 11], [15, 14, 7, 12, 13, 3, 6, 2, 0, 4, 8, 10, 1, 9, 5, 11], [14, 9, 7, 11, 0, 1, 4, 13, 15, 3, 5, 12, 2, 10, 8, 6], [0, 8, 12, 11, 3, 14, 15, 13, 7, 4, 10, 9, 2, 1, 6, 5], [3, 5, 11, 9, 12, 1, 2, 8, 14, 4, 13, 15, 0, 6, 7, 10], [9, 10, 2, 14, 6, 4, 8, 13, 0, 12, 5, 3, 11, 7, 1, 15], [13, 8, 3, 11, 0, 14, 1, 12, 7, 4, 5, 2, 10, 6, 15, 9], [0, 14, 6, 4, 3, 2, 9, 10, 8, 5, 13, 11, 15, 7, 1, 12], [10, 4, 6, 9, 12, 7, 15, 1, 3, 2, 13, 5, 0, 14, 11, 8], [6, 9, 12, 10, 5, 8, 15, 11, 0, 7, 2, 14, 13, 4, 3, 1], [2, 6, 8, 4, 0, 12, 15, 1, 9, 3, 10, 14, 7, 5, 11, 13], [0, 2, 10, 6, 12, 8, 11, 7, 3, 4, 13, 9, 5, 15, 1, 14], [5, 14, 7, 11, 6, 2, 9, 10, 4, 3, 1, 0, 8, 15, 12, 13], [7, 11, 1, 12, 9, 4, 6, 0, 5, 10, 2, 8, 14, 15, 3, 13], [9, 10, 3, 0, 14, 2, 7, 6, 8, 11, 4, 1, 12, 15, 5, 13], [2, 9, 4, 1, 6, 11, 13, 8, 10, 14, 12, 15, 5, 3, 7, 0], [1, 6, 4, 8, 3, 14, 13, 9, 15, 12, 2, 0, 5, 11, 7, 10], [5, 2, 9, 8, 1, 12, 10, 0, 4, 7, 6, 11, 3, 15, 14, 13], [8, 11, 0, 9, 5, 2, 10, 6, 4, 15, 3, 7, 12, 14, 1, 13], [5, 14, 8, 11, 9, 4, 15, 1, 7, 3, 10, 12, 6, 13, 0, 2], [2, 5, 3, 4, 9, 15, 8, 11, 6, 10, 0, 14, 12, 7, 13, 1], [14, 15, 8, 6, 2, 10, 0, 1, 3, 13, 5, 11, 7, 9, 4, 12], [15, 6, 0, 8, 7, 13, 12, 9, 10, 14, 3, 4, 5, 11, 1, 2]] }; const encrypt = { tableA: [[[[8, 11, 1, 7, 3, 9, 6, 15, 10, 0, 5, 2, 4, 12, 13, 14], [9, 3, 15, 6, 11, 8, 7, 1, 12, 4, 14, 13, 0, 10, 2, 5], [1, 7, 8, 11, 6, 15, 3, 9, 5, 2, 10, 0, 13, 14, 4, 12], [15, 6, 9, 3, 7, 1, 11, 8, 14, 13, 12, 4, 2, 5, 0, 10], [4, 12, 13, 14, 10, 0, 5, 2, 3, 9, 6, 15, 8, 11, 1, 7], [7, 1, 11, 8, 15, 6, 9, 3, 2, 5, 0, 10, 14, 13, 12, 4], [13, 14, 4, 12, 5, 2, 10, 0, 6, 15, 3, 9, 1, 7, 8, 11], [10, 0, 5, 2, 4, 12, 13, 14, 8, 11, 1, 7, 3, 9, 6, 15], [14, 13, 12, 4, 2, 5, 0, 10, 15, 6, 9, 3, 7, 1, 11, 8], [12, 4, 14, 13, 0, 10, 2, 5, 9, 3, 15, 6, 11, 8, 7, 1], [3, 9, 6, 15, 8, 11, 1, 7, 4, 12, 13, 14, 10, 0, 5, 2], [0, 10, 2, 5, 12, 4, 14, 13, 11, 8, 7, 1, 9, 3, 15, 6], [2, 5, 0, 10, 14, 13, 12, 4, 7, 1, 11, 8, 15, 6, 9, 3], [5, 2, 10, 0, 13, 14, 4, 12, 1, 7, 8, 11, 6, 15, 3, 9], [11, 8, 7, 1, 9, 3, 15, 6, 0, 10, 2, 5, 12, 4, 14, 13], [6, 15, 3, 9, 1, 7, 8, 11, 13, 14, 4, 12, 5, 2, 10, 0]], [[8, 7, 11, 5, 12, 1, 10, 0, 9, 6, 4, 14, 13, 15, 3, 2], [5, 11, 7, 8, 0, 10, 1, 12, 14, 4, 6, 9, 2, 3, 15, 13], [10, 0, 12, 1, 11, 5, 8, 7, 3, 2, 13, 15, 4, 14, 9, 6], [0, 10, 1, 12, 5, 11, 7, 8, 2, 3, 15, 13, 14, 4, 6, 9], [12, 1, 10, 0, 8, 7, 11, 5, 13, 15, 3, 2, 9, 6, 4, 14], [2, 3, 15, 13, 14, 4, 6, 9, 0, 10, 1, 12, 5, 11, 7, 8], [1, 12, 0, 10, 7, 8, 5, 11, 15, 13, 2, 3, 6, 9, 14, 4], [9, 6, 4, 14, 13, 15, 3, 2, 8, 7, 11, 5, 12, 1, 10, 0], [7, 8, 5, 11, 1, 12, 0, 10, 6, 9, 14, 4, 15, 13, 2, 3], [11, 5, 8, 7, 10, 0, 12, 1, 4, 14, 9, 6, 3, 2, 13, 15], [4, 14, 9, 6, 3, 2, 13, 15, 11, 5, 8, 7, 10, 0, 12, 1], [14, 4, 6, 9, 2, 3, 15, 13, 5, 11, 7, 8, 0, 10, 1, 12], [3, 2, 13, 15, 4, 14, 9, 6, 10, 0, 12, 1, 11, 5, 8, 7], [15, 13, 2, 3, 6, 9, 14, 4, 1, 12, 0, 10, 7, 8, 5, 11], [13, 15, 3, 2, 9, 6, 4, 14, 12, 1, 10, 0, 8, 7, 11, 5], [6, 9, 14, 4, 15, 13, 2, 3, 7, 8, 5, 11, 1, 12, 0, 10]]], [[[1, 6, 14, 15, 2, 11, 0, 5, 4, 9, 8, 10, 13, 3, 12, 7], [11, 2, 5, 0, 6, 1, 15, 14, 3, 13, 7, 12, 9, 4, 10, 8], [14, 15, 1, 6, 0, 5, 2, 11, 8, 10, 4, 9, 12, 7, 13, 3], [7, 12, 3, 13, 10, 8, 9, 4, 5, 0, 11, 2, 15, 14, 6, 1], [5, 0, 11, 2, 15, 14, 6, 1, 7, 12, 3, 13, 10, 8, 9, 4], [10, 8, 9, 4, 7, 12, 3, 13, 15, 14, 6, 1, 5, 0, 11, 2], [4, 9, 8, 10, 13, 3, 12, 7, 1, 6, 14, 15, 2, 11, 0, 5], [2, 11, 0, 5, 1, 6, 14, 15, 13, 3, 12, 7, 4, 9, 8, 10], [3, 13, 7, 12, 9, 4, 10, 8, 11, 2, 5, 0, 6, 1, 15, 14], [15, 14, 6, 1, 5, 0, 11, 2, 10, 8, 9, 4, 7, 12, 3, 13], [8, 10, 4, 9, 12, 7, 13, 3, 14, 15, 1, 6, 0, 5, 2, 11], [13, 3, 12, 7, 4, 9, 8, 10, 2, 11, 0, 5, 1, 6, 14, 15], [0, 5, 2, 11, 14, 15, 1, 6, 12, 7, 13, 3, 8, 10, 4, 9], [9, 4, 10, 8, 3, 13, 7, 12, 6, 1, 15, 14, 11, 2, 5, 0], [6, 1, 15, 14, 11, 2, 5, 0, 9, 4, 10, 8, 3, 13, 7, 12], [12, 7, 13, 3, 8, 10, 4, 9, 0, 5, 2, 11, 14, 15, 1, 6]], [[10, 14, 2, 4, 5, 7, 9, 12, 6, 11, 15, 0, 3, 8, 1, 13], [1, 13, 3, 8, 15, 0, 6, 11, 9, 12, 5, 7, 2, 4, 10, 14], [13, 1, 8, 3, 0, 15, 11, 6, 12, 9, 7, 5, 4, 2, 14, 10], [14, 10, 4, 2, 7, 5, 12, 9, 11, 6, 0, 15, 8, 3, 13, 1], [0, 15, 11, 6, 13, 1, 8, 3, 4, 2, 14, 10, 12, 9, 7, 5], [6, 11, 15, 0, 3, 8, 1, 13, 10, 14, 2, 4, 5, 7, 9, 12], [4, 2, 14, 10, 12, 9, 7, 5, 0, 15, 11, 6, 13, 1, 8, 3], [3, 8, 1, 13, 6, 11, 15, 0, 5, 7, 9, 12, 10, 14, 2, 4], [7, 5, 12, 9, 14, 10, 4, 2, 8, 3, 13, 1, 11, 6, 0, 15], [12, 9, 7, 5, 4, 2, 14, 10, 13, 1, 8, 3, 0, 15, 11, 6], [9, 12, 5, 7, 2, 4, 10, 14, 1, 13, 3, 8, 15, 0, 6, 11], [15, 0, 6, 11, 1, 13, 3, 8, 2, 4, 10, 14, 9, 12, 5, 7], [8, 3, 13, 1, 11, 6, 0, 15, 7, 5, 12, 9, 14, 10, 4, 2], [5, 7, 9, 12, 10, 14, 2, 4, 3, 8, 1, 13, 6, 11, 15, 0], [2, 4, 10, 14, 9, 12, 5, 7, 15, 0, 6, 11, 1, 13, 3, 8], [11, 6, 0, 15, 8, 3, 13, 1, 14, 10, 4, 2, 7, 5, 12, 9]]], [[[5, 14, 4, 15, 11, 13, 1, 3, 2, 8, 10, 0, 6, 7, 9, 12], [15, 4, 14, 5, 3, 1, 13, 11, 0, 10, 8, 2, 12, 9, 7, 6], [0, 10, 8, 2, 12, 9, 7, 6, 15, 4, 14, 5, 3, 1, 13, 11], [3, 1, 13, 11, 15, 4, 14, 5, 12, 9, 7, 6, 0, 10, 8, 2], [14, 5, 15, 4, 13, 11, 3, 1, 8, 2, 0, 10, 7, 6, 12, 9], [7, 6, 12, 9, 8, 2, 0, 10, 13, 11, 3, 1, 14, 5, 15, 4], [10, 0, 2, 8, 9, 12, 6, 7, 4, 15, 5, 14, 1, 3, 11, 13], [9, 12, 6, 7, 10, 0, 2, 8, 1, 3, 11, 13, 4, 15, 5, 14], [6, 7, 9, 12, 2, 8, 10, 0, 11, 13, 1, 3, 5, 14, 4, 15], [13, 11, 3, 1, 14, 5, 15, 4, 7, 6, 12, 9, 8, 2, 0, 10], [11, 13, 1, 3, 5, 14, 4, 15, 6, 7, 9, 12, 2, 8, 10, 0], [8, 2, 0, 10, 7, 6, 12, 9, 14, 5, 15, 4, 13, 11, 3, 1], [2, 8, 10, 0, 6, 7, 9, 12, 5, 14, 4, 15, 11, 13, 1, 3], [4, 15, 5, 14, 1, 3, 11, 13, 10, 0, 2, 8, 9, 12, 6, 7], [1, 3, 11, 13, 4, 15, 5, 14, 9, 12, 6, 7, 10, 0, 2, 8], [12, 9, 7, 6, 0, 10, 8, 2, 3, 1, 13, 11, 15, 4, 14, 5]], [[3, 12, 15, 1, 4, 10, 5, 9, 7, 8, 11, 2, 14, 0, 13, 6], [7, 8, 11, 2, 14, 0, 13, 6, 3, 12, 15, 1, 4, 10, 5, 9], [10, 4, 9, 5, 12, 3, 1, 15, 0, 14, 6, 13, 8, 7, 2, 11], [15, 1, 3, 12, 5, 9, 4, 10, 11, 2, 7, 8, 13, 6, 14, 0], [9, 5, 10, 4, 1, 15, 12, 3, 6, 13, 0, 14, 2, 11, 8, 7], [2, 11, 8, 7, 6, 13, 0, 14, 1, 15, 12, 3, 9, 5, 10, 4], [1, 15, 12, 3, 9, 5, 10, 4, 2, 11, 8, 7, 6, 13, 0, 14], [14, 0, 13, 6, 7, 8, 11, 2, 4, 10, 5, 9, 3, 12, 15, 1], [8, 7, 2, 11, 0, 14, 6, 13, 12, 3, 1, 15, 10, 4, 9, 5], [11, 2, 7, 8, 13, 6, 14, 0, 15, 1, 3, 12, 5, 9, 4, 10], [0, 14, 6, 13, 8, 7, 2, 11, 10, 4, 9, 5, 12, 3, 1, 15], [6, 13, 0, 14, 2, 11, 8, 7, 9, 5, 10, 4, 1, 15, 12, 3], [4, 10, 5, 9, 3, 12, 15, 1, 14, 0, 13, 6, 7, 8, 11, 2], [13, 6, 14, 0, 11, 2, 7, 8, 5, 9, 4, 10, 15, 1, 3, 12], [12, 3, 1, 15, 10, 4, 9, 5, 8, 7, 2, 11, 0, 14, 6, 13], [5, 9, 4, 10, 15, 1, 3, 12, 13, 6, 14, 0, 11, 2, 7, 8]]], [[[13, 7, 8, 11, 15, 14, 6, 5, 3, 1, 4, 10, 2, 9, 12, 0], [15, 14, 6, 5, 13, 7, 8, 11, 2, 9, 12, 0, 3, 1, 4, 10], [6, 5, 15, 14, 8, 11, 13, 7, 12, 0, 2, 9, 4, 10, 3, 1], [9, 2, 0, 12, 1, 3, 10, 4, 14, 15, 5, 6, 7, 13, 11, 8], [5, 6, 14, 15, 11, 8, 7, 13, 0, 12, 9, 2, 10, 4, 1, 3], [4, 10, 3, 1, 12, 0, 2, 9, 8, 11, 13, 7, 6, 5, 15, 14], [1, 3, 10, 4, 9, 2, 0, 12, 7, 13, 11, 8, 14, 15, 5, 6], [11, 8, 7, 13, 5, 6, 14, 15, 10, 4, 1, 3, 0, 12, 9, 2], [12, 0, 2, 9, 4, 10, 3, 1, 6, 5, 15, 14, 8, 11, 13, 7], [0, 12, 9, 2, 10, 4, 1, 3, 5, 6, 14, 15, 11, 8, 7, 13], [8, 11, 13, 7, 6, 5, 15, 14, 4, 10, 3, 1, 12, 0, 2, 9], [2, 9, 12, 0, 3, 1, 4, 10, 15, 14, 6, 5, 13, 7, 8, 11], [10, 4, 1, 3, 0, 12, 9, 2, 11, 8, 7, 13, 5, 6, 14, 15], [7, 13, 11, 8, 14, 15, 5, 6, 1, 3, 10, 4, 9, 2, 0, 12], [3, 1, 4, 10, 2, 9, 12, 0, 13, 7, 8, 11, 15, 14, 6, 5], [14, 15, 5, 6, 7, 13, 11, 8, 9, 2, 0, 12, 1, 3, 10, 4]], [[15, 13, 9, 5, 6, 2, 0, 7, 3, 4, 14, 8, 12, 10, 11, 1], [3, 4, 14, 8, 12, 10, 11, 1, 15, 13, 9, 5, 6, 2, 0, 7], [10, 12, 1, 11, 4, 3, 8, 14, 2, 6, 7, 0, 13, 15, 5, 9], [2, 6, 7, 0, 13, 15, 5, 9, 10, 12, 1, 11, 4, 3, 8, 14], [6, 2, 0, 7, 15, 13, 9, 5, 12, 10, 11, 1, 3, 4, 14, 8], [4, 3, 8, 14, 10, 12, 1, 11, 13, 15, 5, 9, 2, 6, 7, 0], [9, 5, 15, 13, 0, 7, 6, 2, 14, 8, 3, 4, 11, 1, 12, 10], [14, 8, 3, 4, 11, 1, 12, 10, 9, 5, 15, 13, 0, 7, 6, 2], [7, 0, 2, 6, 5, 9, 13, 15, 1, 11, 10, 12, 8, 14, 4, 3], [0, 7, 6, 2, 9, 5, 15, 13, 11, 1, 12, 10, 14, 8, 3, 4], [12, 10, 11, 1, 3, 4, 14, 8, 6, 2, 0, 7, 15, 13, 9, 5], [1, 11, 10, 12, 8, 14, 4, 3, 7, 0, 2, 6, 5, 9, 13, 15], [11, 1, 12, 10, 14, 8, 3, 4, 0, 7, 6, 2, 9, 5, 15, 13], [13, 15, 5, 9, 2, 6, 7, 0, 4, 3, 8, 14, 10, 12, 1, 11], [5, 9, 13, 15, 7, 0, 2, 6, 8, 14, 4, 3, 1, 11, 10, 12], [8, 14, 4, 3, 1, 11, 10, 12, 5, 9, 13, 15, 7, 0, 2, 6]]], [[[13, 8, 11, 14, 4, 3, 10, 5, 9, 15, 7, 1, 12, 0, 6, 2], [1, 7, 15, 9, 2, 6, 0, 12, 14, 11, 8, 13, 5, 10, 3, 4], [0, 12, 2, 6, 15, 9, 1, 7, 3, 4, 5, 10, 8, 13, 14, 11], [9, 15, 7, 1, 12, 0, 6, 2, 13, 8, 11, 14, 4, 3, 10, 5], [3, 4, 5, 10, 8, 13, 14, 11, 0, 12, 2, 6, 15, 9, 1, 7], [2, 6, 0, 12, 1, 7, 15, 9, 5, 10, 3, 4, 14, 11, 8, 13], [10, 5, 4, 3, 11, 14, 13, 8, 6, 2, 12, 0, 7, 1, 9, 15], [12, 0, 6, 2, 9, 15, 7, 1, 4, 3, 10, 5, 13, 8, 11, 14], [11, 14, 13, 8, 10, 5, 4, 3, 7, 1, 9, 15, 6, 2, 12, 0], [5, 10, 3, 4, 14, 11, 8, 13, 2, 6, 0, 12, 1, 7, 15, 9], [6, 2, 12, 0, 7, 1, 9, 15, 10, 5, 4, 3, 11, 14, 13, 8], [4, 3, 10, 5, 13, 8, 11, 14, 12, 0, 6, 2, 9, 15, 7, 1], [7, 1, 9, 15, 6, 2, 12, 0, 11, 14, 13, 8, 10, 5, 4, 3], [14, 11, 8, 13, 5, 10, 3, 4, 1, 7, 15, 9, 2, 6, 0, 12], [15, 9, 1, 7, 0, 12, 2, 6, 8, 13, 14, 11, 3, 4, 5, 10], [8, 13, 14, 11, 3, 4, 5, 10, 15, 9, 1, 7, 0, 12, 2, 6]], [[6, 8, 14, 7, 11, 5, 2, 15, 10, 3, 9, 1, 12, 4, 0, 13], [3, 10, 1, 9, 4, 12, 13, 0, 8, 6, 7, 14, 5, 11, 15, 2], [4, 12, 13, 0, 3, 10, 1, 9, 5, 11, 15, 2, 8, 6, 7, 14], [7, 14, 8, 6, 15, 2, 5, 11, 1, 9, 3, 10, 13, 0, 4, 12], [1, 9, 3, 10, 13, 0, 4, 12, 7, 14, 8, 6, 15, 2, 5, 11], [9, 1, 10, 3, 0, 13, 12, 4, 14, 7, 6, 8, 2, 15, 11, 5], [0, 13, 12, 4, 9, 1, 10, 3, 2, 15, 11, 5, 14, 7, 6, 8], [13, 0, 4, 12, 1, 9, 3, 10, 15, 2, 5, 11, 7, 14, 8, 6], [11, 5, 2, 15, 6, 8, 14, 7, 12, 4, 0, 13, 10, 3, 9, 1], [10, 3, 9, 1, 12, 4, 0, 13, 6, 8, 14, 7, 11, 5, 2, 15], [5, 11, 15, 2, 8, 6, 7, 14, 4, 12, 13, 0, 3, 10, 1, 9], [14, 7, 6, 8, 2, 15, 11, 5, 9, 1, 10, 3, 0, 13, 12, 4], [2, 15, 11, 5, 14, 7, 6, 8, 0, 13, 12, 4, 9, 1, 10, 3], [12, 4, 0, 13, 10, 3, 9, 1, 11, 5, 2, 15, 6, 8, 14, 7], [8, 6, 7, 14, 5, 11, 15, 2, 3, 10, 1, 9, 4, 12, 13, 0], [15, 2, 5, 11, 7, 14, 8, 6, 13, 0, 4, 12, 1, 9, 3, 10]]], [[[10, 13, 11, 15, 3, 4, 1, 0, 8, 12, 7, 5, 9, 14, 6, 2], [11, 15, 10, 13, 1, 0, 3, 4, 7, 5, 8, 12, 6, 2, 9, 14], [9, 14, 6, 2, 8, 12, 7, 5, 3, 4, 1, 0, 10, 13, 11, 15], [13, 10, 15, 11, 4, 3, 0, 1, 12, 8, 5, 7, 14, 9, 2, 6], [0, 1, 4, 3, 15, 11, 13, 10, 2, 6, 14, 9, 5, 7, 12, 8], [6, 2, 9, 14, 7, 5, 8, 12, 1, 0, 3, 4, 11, 15, 10, 13], [7, 5, 8, 12, 6, 2, 9, 14, 11, 15, 10, 13, 1, 0, 3, 4], [3, 4, 1, 0, 10, 13, 11, 15, 9, 14, 6, 2, 8, 12, 7, 5], [15, 11, 13, 10, 0, 1, 4, 3, 5, 7, 12, 8, 2, 6, 14, 9], [8, 12, 7, 5, 9, 14, 6, 2, 10, 13, 11, 15, 3, 4, 1, 0], [12, 8, 5, 7, 14, 9, 2, 6, 13, 10, 15, 11, 4, 3, 0, 1], [4, 3, 0, 1, 13, 10, 15, 11, 14, 9, 2, 6, 12, 8, 5, 7], [14, 9, 2, 6, 12, 8, 5, 7, 4, 3, 0, 1, 13, 10, 15, 11], [2, 6, 14, 9, 5, 7, 12, 8, 0, 1, 4, 3, 15, 11, 13, 10], [1, 0, 3, 4, 11, 15, 10, 13, 6, 2, 9, 14, 7, 5, 8, 12], [5, 7, 12, 8, 2, 6, 14, 9, 15, 11, 13, 10, 0, 1, 4, 3]], [[1, 14, 3, 13, 7, 11, 8, 0, 5, 4, 9, 12, 10, 6, 2, 15], [15, 2, 6, 10, 12, 9, 4, 5, 0, 8, 11, 7, 13, 3, 14, 1], [7, 11, 8, 0, 1, 14, 3, 13, 10, 6, 2, 15, 5, 4, 9, 12], [5, 4, 9, 12, 10, 6, 2, 15, 1, 14, 3, 13, 7, 11, 8, 0], [13, 3, 14, 1, 0, 8, 11, 7, 12, 9, 4, 5, 15, 2, 6, 10], [4, 5, 12, 9, 6, 10, 15, 2, 14, 1, 13, 3, 11, 7, 0, 8], [14, 1, 13, 3, 11, 7, 0, 8, 4, 5, 12, 9, 6, 10, 15, 2], [3, 13, 1, 14, 8, 0, 7, 11, 9, 12, 5, 4, 2, 15, 10, 6], [6, 10, 15, 2, 4, 5, 12, 9, 11, 7, 0, 8, 14, 1, 13, 3], [2, 15, 10, 6, 9, 12, 5, 4, 8, 0, 7, 11, 3, 13, 1, 14], [8, 0, 7, 11, 3, 13, 1, 14, 2, 15, 10, 6, 9, 12, 5, 4], [12, 9, 4, 5, 15, 2, 6, 10, 13, 3, 14, 1, 0, 8, 11, 7], [0, 8, 11, 7, 13, 3, 14, 1, 15, 2, 6, 10, 12, 9, 4, 5], [11, 7, 0, 8, 14, 1, 13, 3, 6, 10, 15, 2, 4, 5, 12, 9], [10, 6, 2, 15, 5, 4, 9, 12, 7, 11, 8, 0, 1, 14, 3, 13], [9, 12, 5, 4, 2, 15, 10, 6, 3, 13, 1, 14, 8, 0, 7, 11]]], [[[5, 6, 2, 7, 10, 3, 1, 11, 14, 8, 9, 15, 12, 4, 0, 13], [0, 13, 12, 4, 9, 15, 14, 8, 1, 11, 10, 3, 2, 7, 5, 6], [1, 11, 10, 3, 2, 7, 5, 6, 0, 13, 12, 4, 9, 15, 14, 8], [2, 7, 5, 6, 1, 11, 10, 3, 9, 15, 14, 8, 0, 13, 12, 4], [11, 1, 3, 10, 7, 2, 6, 5, 13, 0, 4, 12, 15, 9, 8, 14], [12, 4, 0, 13, 14, 8, 9, 15, 10, 3, 1, 11, 5, 6, 2, 7], [4, 12, 13, 0, 8, 14, 15, 9, 3, 10, 11, 1, 6, 5, 7, 2], [14, 8, 9, 15, 12, 4, 0, 13, 5, 6, 2, 7, 10, 3, 1, 11], [15, 9, 8, 14, 13, 0, 4, 12, 7, 2, 6, 5, 11, 1, 3, 10], [10, 3, 1, 11, 5, 6, 2, 7, 12, 4, 0, 13, 14, 8, 9, 15], [6, 5, 7, 2, 3, 10, 11, 1, 8, 14, 15, 9, 4, 12, 13, 0], [13, 0, 4, 12, 15, 9, 8, 14, 11, 1, 3, 10, 7, 2, 6, 5], [7, 2, 6, 5, 11, 1, 3, 10, 15, 9, 8, 14, 13, 0, 4, 12], [8, 14, 15, 9, 4, 12, 13, 0, 6, 5, 7, 2, 3, 10, 11, 1], [3, 10, 11, 1, 6, 5, 7, 2, 4, 12, 13, 0, 8, 14, 15, 9], [9, 15, 14, 8, 0, 13, 12, 4, 2, 7, 5, 6, 1, 11, 10, 3]], [[1, 9, 14, 13, 5, 12, 0, 6, 10, 4, 11, 8, 3, 7, 2, 15], [8, 11, 4, 10, 15, 2, 7, 3, 13, 14, 9, 1, 6, 0, 12, 5], [13, 14, 9, 1, 6, 0, 12, 5, 8, 11, 4, 10, 15, 2, 7, 3], [5, 12, 0, 6, 1, 9, 14, 13, 3, 7, 2, 15, 10, 4, 11, 8], [15, 2, 7, 3, 8, 11, 4, 10, 6, 0, 12, 5, 13, 14, 9, 1], [14, 13, 1, 9, 0, 6, 5, 12, 11, 8, 10, 4, 2, 15, 3, 7], [10, 4, 11, 8, 3, 7, 2, 15, 1, 9, 14, 13, 5, 12, 0, 6], [9, 1, 13, 14, 12, 5, 6, 0, 4, 10, 8, 11, 7, 3, 15, 2], [3, 7, 2, 15, 10, 4, 11, 8, 5, 12, 0, 6, 1, 9, 14, 13], [4, 10, 8, 11, 7, 3, 15, 2, 9, 1, 13, 14, 12, 5, 6, 0], [2, 15, 3, 7, 11, 8, 10, 4, 0, 6, 5, 12, 14, 13, 1, 9], [11, 8, 10, 4, 2, 15, 3, 7, 14, 13, 1, 9, 0, 6, 5, 12], [7, 3, 15, 2, 4, 10, 8, 11, 12, 5, 6, 0, 9, 1, 13, 14], [12, 5, 6, 0, 9, 1, 13, 14, 7, 3, 15, 2, 4, 10, 8, 11], [0, 6, 5, 12, 14, 13, 1, 9, 2, 15, 3, 7, 11, 8, 10, 4], [6, 0, 12, 5, 13, 14, 9, 1, 15, 2, 7, 3, 8, 11, 4, 10]]], [[[3, 15, 9, 7, 1, 12, 6, 0, 4, 13, 5, 10, 2, 11, 8, 14], [7, 9, 15, 3, 0, 6, 12, 1, 10, 5, 13, 4, 14, 8, 11, 2], [10, 5, 13, 4, 14, 8, 11, 2, 7, 9, 15, 3, 0, 6, 12, 1], [1, 12, 6, 0, 3, 15, 9, 7, 2, 11, 8, 14, 4, 13, 5, 10], [6, 0, 1, 12, 9, 7, 3, 15, 8, 14, 2, 11, 5, 10, 4, 13], [11, 2, 14, 8, 13, 4, 10, 5, 12, 1, 0, 6, 15, 3, 7, 9], [9, 7, 3, 15, 6, 0, 1, 12, 5, 10, 4, 13, 8, 14, 2, 11], [4, 13, 5, 10, 2, 11, 8, 14, 3, 15, 9, 7, 1, 12, 6, 0], [15, 3, 7, 9, 12, 1, 0, 6, 13, 4, 10, 5, 11, 2, 14, 8], [8, 14, 2, 11, 5, 10, 4, 13, 6, 0, 1, 12, 9, 7, 3, 15], [2, 11, 8, 14, 4, 13, 5, 10, 1, 12, 6, 0, 3, 15, 9, 7], [0, 6, 12, 1, 7, 9, 15, 3, 14, 8, 11, 2, 10, 5, 13, 4], [14, 8, 11, 2, 10, 5, 13, 4, 0, 6, 12, 1, 7, 9, 15, 3], [13, 4, 10, 5, 11, 2, 14, 8, 15, 3, 7, 9, 12, 1, 0, 6], [12, 1, 0, 6, 15, 3, 7, 9, 11, 2, 14, 8, 13, 4, 10, 5], [5, 10, 4, 13, 8, 14, 2, 11, 9, 7, 3, 15, 6, 0, 1, 12]], [[15, 1, 3, 12, 0, 7, 14, 5, 6, 4, 2, 11, 10, 9, 8, 13], [11, 2, 4, 6, 13, 8, 9, 10, 12, 3, 1, 15, 5, 14, 7, 0], [10, 9, 8, 13, 6, 4, 2, 11, 0, 7, 14, 5, 15, 1, 3, 12], [12, 3, 1, 15, 5, 14, 7, 0, 11, 2, 4, 6, 13, 8, 9, 10], [6, 4, 2, 11, 10, 9, 8, 13, 15, 1, 3, 12, 0, 7, 14, 5], [4, 6, 11, 2, 9, 10, 13, 8, 1, 15, 12, 3, 7, 0, 5, 14], [14, 5, 0, 7, 3, 12, 15, 1, 8, 13, 10, 9, 2, 11, 6, 4], [9, 10, 13, 8, 4, 6, 11, 2, 7, 0, 5, 14, 1, 15, 12, 3], [8, 13, 10, 9, 2, 11, 6, 4, 14, 5, 0, 7, 3, 12, 15, 1], [7, 0, 5, 14, 1, 15, 12, 3, 9, 10, 13, 8, 4, 6, 11, 2], [5, 14, 7, 0, 12, 3, 1, 15, 13, 8, 9, 10, 11, 2, 4, 6], [3, 12, 15, 1, 14, 5, 0, 7, 2, 11, 6, 4, 8, 13, 10, 9], [13, 8, 9, 10, 11, 2, 4, 6, 5, 14, 7, 0, 12, 3, 1, 15], [2, 11, 6, 4, 8, 13, 10, 9, 3, 12, 15, 1, 14, 5, 0, 7], [1, 15, 12, 3, 7, 0, 5, 14, 4, 6, 11, 2, 9, 10, 13, 8], [0, 7, 14, 5, 15, 1, 3, 12, 10, 9, 8, 13, 6, 4, 2, 11]]], [[[9, 3, 13, 2, 14, 0, 4, 5, 10, 15, 12, 1, 6, 8, 11, 7], [0, 14, 5, 4, 3, 9, 2, 13, 8, 6, 7, 11, 15, 10, 1, 12], [3, 9, 2, 13, 0, 14, 5, 4, 15, 10, 1, 12, 8, 6, 7, 11], [7, 11, 8, 6, 1, 12, 15, 10, 5, 4, 0, 14, 2, 13, 3, 9], [11, 7, 6, 8, 12, 1, 10, 15, 4, 5, 14, 0, 13, 2, 9, 3], [4, 5, 14, 0, 13, 2, 9, 3, 11, 7, 6, 8, 12, 1, 10, 15], [1, 12, 15, 10, 7, 11, 8, 6, 2, 13, 3, 9, 5, 4, 0, 14], [13, 2, 9, 3, 4, 5, 14, 0, 12, 1, 10, 15, 11, 7, 6, 8], [6, 8, 11, 7, 10, 15, 12, 1, 14, 0, 4, 5, 9, 3, 13, 2], [10, 15, 12, 1, 6, 8, 11, 7, 9, 3, 13, 2, 14, 0, 4, 5], [2, 13, 3, 9, 5, 4, 0, 14, 1, 12, 15, 10, 7, 11, 8, 6], [12, 1, 10, 15, 11, 7, 6, 8, 13, 2, 9, 3, 4, 5, 14, 0], [14, 0, 4, 5, 9, 3, 13, 2, 6, 8, 11, 7, 10, 15, 12, 1], [15, 10, 1, 12, 8, 6, 7, 11, 3, 9, 2, 13, 0, 14, 5, 4], [8, 6, 7, 11, 15, 10, 1, 12, 0, 14, 5, 4, 3, 9, 2, 13], [5, 4, 0, 14, 2, 13, 3, 9, 7, 11, 8, 6, 1, 12, 15, 10]], [[3, 15, 14, 0, 10, 4, 6, 13, 7, 12, 8, 9, 11, 1, 5, 2], [13, 6, 4, 10, 0, 14, 15, 3, 2, 5, 1, 11, 9, 8, 12, 7], [0, 14, 15, 3, 13, 6, 4, 10, 9, 8, 12, 7, 2, 5, 1, 11], [15, 3, 0, 14, 4, 10, 13, 6, 12, 7, 9, 8, 1, 11, 2, 5], [11, 1, 5, 2, 7, 12, 8, 9, 10, 4, 6, 13, 3, 15, 14, 0], [7, 12, 8, 9, 11, 1, 5, 2, 3, 15, 14, 0, 10, 4, 6, 13], [10, 4, 6, 13, 3, 15, 14, 0, 11, 1, 5, 2, 7, 12, 8, 9], [1, 11, 2, 5, 12, 7, 9, 8, 4, 10, 13, 6, 15, 3, 0, 14], [14, 0, 3, 15, 6, 13, 10, 4, 8, 9, 7, 12, 5, 2, 11, 1], [9, 8, 12, 7, 2, 5, 1, 11, 0, 14, 15, 3, 13, 6, 4, 10], [5, 2, 11, 1, 8, 9, 7, 12, 6, 13, 10, 4, 14, 0, 3, 15], [4, 10, 13, 6, 15, 3, 0, 14, 1, 11, 2, 5, 12, 7, 9, 8], [8, 9, 7, 12, 5, 2, 11, 1, 14, 0, 3, 15, 6, 13, 10, 4], [12, 7, 9, 8, 1, 11, 2, 5, 15, 3, 0, 14, 4, 10, 13, 6], [2, 5, 1, 11, 9, 8, 12, 7, 13, 6, 4, 10, 0, 14, 15, 3], [6, 13, 10, 4, 14, 0, 3, 15, 5, 2, 11, 1, 8, 9, 7, 12]]], [[[9, 0, 4, 13, 14, 10, 15, 8, 6, 11, 12, 2, 7, 3, 1, 5], [4, 13, 9, 0, 15, 8, 14, 10, 12, 2, 6, 11, 1, 5, 7, 3], [6, 11, 12, 2, 7, 3, 1, 5, 9, 0, 4, 13, 14, 10, 15, 8], [10, 14, 8, 15, 0, 9, 13, 4, 3, 7, 5, 1, 11, 6, 2, 12], [14, 10, 15, 8, 9, 0, 4, 13, 7, 3, 1, 5, 6, 11, 12, 2], [5, 1, 3, 7, 2, 12, 11, 6, 8, 15, 10, 14, 13, 4, 0, 9], [11, 6, 2, 12, 3, 7, 5, 1, 0, 9, 13, 4, 10, 14, 8, 15], [2, 12, 11, 6, 5, 1, 3, 7, 13, 4, 0, 9, 8, 15, 10, 14], [7, 3, 1, 5, 6, 11, 12, 2, 14, 10, 15, 8, 9, 0, 4, 13], [8, 15, 10, 14, 13, 4, 0, 9, 5, 1, 3, 7, 2, 12, 11, 6], [3, 7, 5, 1, 11, 6, 2, 12, 10, 14, 8, 15, 0, 9, 13, 4], [1, 5, 7, 3, 12, 2, 6, 11, 15, 8, 14, 10, 4, 13, 9, 0], [12, 2, 6, 11, 1, 5, 7, 3, 4, 13, 9, 0, 15, 8, 14, 10], [15, 8, 14, 10, 4, 13, 9, 0, 1, 5, 7, 3, 12, 2, 6, 11], [0, 9, 13, 4, 10, 14, 8, 15, 11, 6, 2, 12, 3, 7, 5, 1], [13, 4, 0, 9, 8, 15, 10, 14, 2, 12, 11, 6, 5, 1, 3, 7]], [[7, 4, 9, 0, 13, 3, 12, 1, 8, 2, 14, 10, 15, 5, 6, 11], [14, 10, 8, 2, 6, 11, 15, 5, 9, 0, 7, 4, 12, 1, 13, 3], [1, 12, 3, 13, 0, 9, 4, 7, 11, 6, 5, 15, 10, 14, 2, 8], [10, 14, 2, 8, 11, 6, 5, 15, 0, 9, 4, 7, 1, 12, 3, 13], [2, 8, 10, 14, 5, 15, 11, 6, 4, 7, 0, 9, 3, 13, 1, 12], [4, 7, 0, 9, 3, 13, 1, 12, 2, 8, 10, 14, 5, 15, 11, 6], [8, 2, 14, 10, 15, 5, 6, 11, 7, 4, 9, 0, 13, 3, 12, 1], [3, 13, 1, 12, 4, 7, 0, 9, 5, 15, 11, 6, 2, 8, 10, 14], [15, 5, 6, 11, 8, 2, 14, 10, 13, 3, 12, 1, 7, 4, 9, 0], [12, 1, 13, 3, 9, 0, 7, 4, 6, 11, 15, 5, 14, 10, 8, 2], [13, 3, 12, 1, 7, 4, 9, 0, 15, 5, 6, 11, 8, 2, 14, 10], [9, 0, 7, 4, 12, 1, 13, 3, 14, 10, 8, 2, 6, 11, 15, 5], [11, 6, 5, 15, 10, 14, 2, 8, 1, 12, 3, 13, 0, 9, 4, 7], [6, 11, 15, 5, 14, 10, 8, 2, 12, 1, 13, 3, 9, 0, 7, 4], [0, 9, 4, 7, 1, 12, 3, 13, 10, 14, 2, 8, 11, 6, 5, 15], [5, 15, 11, 6, 2, 8, 10, 14, 3, 13, 1, 12, 4, 7, 0, 9]]], [[[9, 12, 3, 7, 0, 14, 1, 8, 4, 10, 15, 13, 5, 11, 2, 6], [0, 14, 1, 8, 9, 12, 3, 7, 5, 11, 2, 6, 4, 10, 15, 13], [2, 6, 5, 11, 15, 13, 4, 10, 1, 8, 0, 14, 3, 7, 9, 12], [8, 1, 14, 0, 7, 3, 12, 9, 6, 2, 11, 5, 13, 15, 10, 4], [15, 13, 4, 10, 2, 6, 5, 11, 3, 7, 9, 12, 1, 8, 0, 14], [6, 2, 11, 5, 13, 15, 10, 4, 8, 1, 14, 0, 7, 3, 12, 9], [12, 9, 7, 3, 14, 0, 8, 1, 10, 4, 13, 15, 11, 5, 6, 2], [7, 3, 12, 9, 8, 1, 14, 0, 13, 15, 10, 4, 6, 2, 11, 5], [1, 8, 0, 14, 3, 7, 9, 12, 2, 6, 5, 11, 15, 13, 4, 10], [5, 11, 2, 6, 4, 10, 15, 13, 0, 14, 1, 8, 9, 12, 3, 7], [3, 7, 9, 12, 1, 8, 0, 14, 15, 13, 4, 10, 2, 6, 5, 11], [4, 10, 15, 13, 5, 11, 2, 6, 9, 12, 3, 7, 0, 14, 1, 8], [13, 15, 10, 4, 6, 2, 11, 5, 7, 3, 12, 9, 8, 1, 14, 0], [10, 4, 13, 15, 11, 5, 6, 2, 12, 9, 7, 3, 14, 0, 8, 1], [14, 0, 8, 1, 12, 9, 7, 3, 11, 5, 6, 2, 10, 4, 13, 15], [11, 5, 6, 2, 10, 4, 13, 15, 14, 0, 8, 1, 12, 9, 7, 3]], [[2, 4, 0, 8, 9, 5, 10, 11, 13, 1, 15, 14, 3, 7, 6, 12], [8, 0, 4, 2, 11, 10, 5, 9, 14, 15, 1, 13, 12, 6, 7, 3], [7, 3, 12, 6, 1, 13, 14, 15, 5, 9, 11, 10, 4, 2, 8, 0], [5, 9, 11, 10, 4, 2, 8, 0, 7, 3, 12, 6, 1, 13, 14, 15], [1, 13, 14, 15, 7, 3, 12, 6, 4, 2, 8, 0, 5, 9, 11, 10], [14, 15, 1, 13, 12, 6, 7, 3, 8, 0, 4, 2, 11, 10, 5, 9], [10, 11, 9, 5, 0, 8, 2, 4, 6, 12, 3, 7, 15, 14, 13, 1], [12, 6, 7, 3, 14, 15, 1, 13, 11, 10, 5, 9, 8, 0, 4, 2], [3, 7, 6, 12, 13, 1, 15, 14, 9, 5, 10, 11, 2, 4, 0, 8], [4, 2, 8, 0, 5, 9, 11, 10, 1, 13, 14, 15, 7, 3, 12, 6], [9, 5, 10, 11, 2, 4, 0, 8, 3, 7, 6, 12, 13, 1, 15, 14], [13, 1, 15, 14, 3, 7, 6, 12, 2, 4, 0, 8, 9, 5, 10, 11], [6, 12, 3, 7, 15, 14, 13, 1, 10, 11, 9, 5, 0, 8, 2, 4], [11, 10, 5, 9, 8, 0, 4, 2, 12, 6, 7, 3, 14, 15, 1, 13], [15, 14, 13, 1, 6, 12, 3, 7, 0, 8, 2, 4, 10, 11, 9, 5], [0, 8, 2, 4, 10, 11, 9, 5, 15, 14, 13, 1, 6, 12, 3, 7]]], [[[11, 4, 9, 1, 3, 15, 12, 13, 7, 2, 10, 14, 5, 8, 6, 0], [9, 1, 11, 4, 12, 13, 3, 15, 10, 14, 7, 2, 6, 0, 5, 8], [14, 10, 2, 7, 0, 6, 8, 5, 1, 9, 4, 11, 13, 12, 15, 3], [12, 13, 3, 15, 9, 1, 11, 4, 6, 0, 5, 8, 10, 14, 7, 2], [6, 0, 5, 8, 10, 14, 7, 2, 12, 13, 3, 15, 9, 1, 11, 4], [8, 5, 0, 6, 2, 7, 14, 10, 15, 3, 13, 12, 4, 11, 1, 9], [4, 11, 1, 9, 15, 3, 13, 12, 2, 7, 14, 10, 8, 5, 0, 6], [13, 12, 15, 3, 1, 9, 4, 11, 0, 6, 8, 5, 14, 10, 2, 7], [3, 15, 12, 13, 11, 4, 9, 1, 5, 8, 6, 0, 7, 2, 10, 14], [7, 2, 10, 14, 5, 8, 6, 0, 11, 4, 9, 1, 3, 15, 12, 13], [15, 3, 13, 12, 4, 11, 1, 9, 8, 5, 0, 6, 2, 7, 14, 10], [0, 6, 8, 5, 14, 10, 2, 7, 13, 12, 15, 3, 1, 9, 4, 11], [1, 9, 4, 11, 13, 12, 15, 3, 14, 10, 2, 7, 0, 6, 8, 5], [10, 14, 7, 2, 6, 0, 5, 8, 9, 1, 11, 4, 12, 13, 3, 15], [2, 7, 14, 10, 8, 5, 0, 6, 4, 11, 1, 9, 15, 3, 13, 12], [5, 8, 6, 0, 7, 2, 10, 14, 3, 15, 12, 13, 11, 4, 9, 1]], [[12, 15, 4, 13, 8, 0, 1, 9, 10, 14, 7, 6, 3, 11, 5, 2], [15, 12, 13, 4, 0, 8, 9, 1, 14, 10, 6, 7, 11, 3, 2, 5], [7, 6, 10, 14, 5, 2, 3, 11, 4, 13, 12, 15, 1, 9, 8, 0], [1, 9, 8, 0, 4, 13, 12, 15, 5, 2, 3, 11, 7, 6, 10, 14], [3, 11, 5, 2, 10, 14, 7, 6, 8, 0, 1, 9, 12, 15, 4, 13], [6, 7, 14, 10, 2, 5, 11, 3, 13, 4, 15, 12, 9, 1, 0, 8], [9, 1, 0, 8, 13, 4, 15, 12, 2, 5, 11, 3, 6, 7, 14, 10], [2, 5, 11, 3, 6, 7, 14, 10, 9, 1, 0, 8, 13, 4, 15, 12], [10, 14, 7, 6, 3, 11, 5, 2, 12, 15, 4, 13, 8, 0, 1, 9], [11, 3, 2, 5, 14, 10, 6, 7, 0, 8, 9, 1, 15, 12, 13, 4], [8, 0, 1, 9, 12, 15, 4, 13, 3, 11, 5, 2, 10, 14, 7, 6], [4, 13, 12, 15, 1, 9, 8, 0, 7, 6, 10, 14, 5, 2, 3, 11], [14, 10, 6, 7, 11, 3, 2, 5, 15, 12, 13, 4, 0, 8, 9, 1], [0, 8, 9, 1, 15, 12, 13, 4, 11, 3, 2, 5, 14, 10, 6, 7], [5, 2, 3, 11, 7, 6, 10, 14, 1, 9, 8, 0, 4, 13, 12, 15], [13, 4, 15, 12, 9, 1, 0, 8, 6, 7, 14, 10, 2, 5, 11, 3]]], [[[15, 3, 0, 13, 2, 12, 4, 14, 7, 1, 8, 5, 10, 6, 9, 11], [3, 15, 13, 0, 12, 2, 14, 4, 1, 7, 5, 8, 6, 10, 11, 9], [11, 9, 6, 10, 5, 8, 1, 7, 14, 4, 12, 2, 13, 0, 3, 15], [10, 6, 9, 11, 7, 1, 8, 5, 2, 12, 4, 14, 15, 3, 0, 13], [4, 14, 2, 12, 0, 13, 15, 3, 9, 11, 10, 6, 8, 5, 7, 1], [7, 1, 8, 5, 10, 6, 9, 11, 15, 3, 0, 13, 2, 12, 4, 14], [8, 5, 7, 1, 9, 11, 10, 6, 0, 13, 15, 3, 4, 14, 2, 12], [6, 10, 11, 9, 1, 7, 5, 8, 12, 2, 14, 4, 3, 15, 13, 0], [5, 8, 1, 7, 11, 9, 6, 10, 13, 0, 3, 15, 14, 4, 12, 2], [0, 13, 15, 3, 4, 14, 2, 12, 8, 5, 7, 1, 9, 11, 10, 6], [1, 7, 5, 8, 6, 10, 11, 9, 3, 15, 13, 0, 12, 2, 14, 4], [12, 2, 14, 4, 3, 15, 13, 0, 6, 10, 11, 9, 1, 7, 5, 8], [2, 12, 4, 14, 15, 3, 0, 13, 10, 6, 9, 11, 7, 1, 8, 5], [9, 11, 10, 6, 8, 5, 7, 1, 4, 14, 2, 12, 0, 13, 15, 3], [14, 4, 12, 2, 13, 0, 3, 15, 11, 9, 6, 10, 5, 8, 1, 7], [13, 0, 3, 15, 14, 4, 12, 2, 5, 8, 1, 7, 11, 9, 6, 10]], [[7, 3, 13, 15, 6, 9, 8, 5, 0, 11, 4, 10, 12, 2, 14, 1], [12, 2, 14, 1, 0, 11, 4, 10, 6, 9, 8, 5, 7, 3, 13, 15], [13, 15, 7, 3, 8, 5, 6, 9, 4, 10, 0, 11, 14, 1, 12, 2], [10, 4, 11, 0, 1, 14, 2, 12, 15, 13, 3, 7, 5, 8, 9, 6], [6, 9, 8, 5, 7, 3, 13, 15, 12, 2, 14, 1, 0, 11, 4, 10], [15, 13, 3, 7, 5, 8, 9, 6, 10, 4, 11, 0, 1, 14, 2, 12], [14, 1, 12, 2, 4, 10, 0, 11, 8, 5, 6, 9, 13, 15, 7, 3], [4, 10, 0, 11, 14, 1, 12, 2, 13, 15, 7, 3, 8, 5, 6, 9], [2, 12, 1, 14, 11, 0, 10, 4, 9, 6, 5, 8, 3, 7, 15, 13], [0, 11, 4, 10, 12, 2, 14, 1, 7, 3, 13, 15, 6, 9, 8, 5], [1, 14, 2, 12, 10, 4, 11, 0, 5, 8, 9, 6, 15, 13, 3, 7], [3, 7, 15, 13, 9, 6, 5, 8, 11, 0, 10, 4, 2, 12, 1, 14], [11, 0, 10, 4, 2, 12, 1, 14, 3, 7, 15, 13, 9, 6, 5, 8], [9, 6, 5, 8, 3, 7, 15, 13, 2, 12, 1, 14, 11, 0, 10, 4], [5, 8, 9, 6, 15, 13, 3, 7, 1, 14, 2, 12, 10, 4, 11, 0], [8, 5, 6, 9, 13, 15, 7, 3, 14, 1, 12, 2, 4, 10, 0, 11]]], [[[14, 13, 5, 15, 6, 11, 3, 2, 10, 9, 8, 0, 1, 12, 7, 4], [15, 5, 13, 14, 2, 3, 11, 6, 0, 8, 9, 10, 4, 7, 12, 1], [4, 7, 12, 1, 0, 8, 9, 10, 2, 3, 11, 6, 15, 5, 13, 14], [10, 9, 8, 0, 1, 12, 7, 4, 14, 13, 5, 15, 6, 11, 3, 2], [2, 3, 11, 6, 15, 5, 13, 14, 4, 7, 12, 1, 0, 8, 9, 10], [8, 0, 10, 9, 7, 4, 1, 12, 5, 15, 14, 13, 3, 2, 6, 11], [6, 11, 3, 2, 14, 13, 5, 15, 1, 12, 7, 4, 10, 9, 8, 0], [9, 10, 0, 8, 12, 1, 4, 7, 13, 14, 15, 5, 11, 6, 2, 3], [7, 4, 1, 12, 8, 0, 10, 9, 3, 2, 6, 11, 5, 15, 14, 13], [13, 14, 15, 5, 11, 6, 2, 3, 9, 10, 0, 8, 12, 1, 4, 7], [3, 2, 6, 11, 5, 15, 14, 13, 7, 4, 1, 12, 8, 0, 10, 9], [11, 6, 2, 3, 13, 14, 15, 5, 12, 1, 4, 7, 9, 10, 0, 8], [5, 15, 14, 13, 3, 2, 6, 11, 8, 0, 10, 9, 7, 4, 1, 12], [1, 12, 7, 4, 10, 9, 8, 0, 6, 11, 3, 2, 14, 13, 5, 15], [12, 1, 4, 7, 9, 10, 0, 8, 11, 6, 2, 3, 13, 14, 15, 5], [0, 8, 9, 10, 4, 7, 12, 1, 15, 5, 13, 14, 2, 3, 11, 6]], [[3, 0, 1, 6, 15, 12, 9, 13, 14, 2, 10, 5, 4, 8, 11, 7], [13, 9, 12, 15, 6, 1, 0, 3, 7, 11, 8, 4, 5, 10, 2, 14], [8, 4, 7, 11, 2, 14, 5, 10, 12, 15, 13, 9, 0, 3, 6, 1], [12, 15, 13, 9, 0, 3, 6, 1, 8, 4, 7, 11, 2, 14, 5, 10], [2, 14, 5, 10, 8, 4, 7, 11, 0, 3, 6, 1, 12, 15, 13, 9], [4, 8, 11, 7, 14, 2, 10, 5, 15, 12, 9, 13, 3, 0, 1, 6], [10, 5, 14, 2, 11, 7, 4, 8, 1, 6, 3, 0, 9, 13, 15, 12], [1, 6, 3, 0, 9, 13, 15, 12, 10, 5, 14, 2, 11, 7, 4, 8], [5, 10, 2, 14, 7, 11, 8, 4, 6, 1, 0, 3, 13, 9, 12, 15], [11, 7, 4, 8, 10, 5, 14, 2, 9, 13, 15, 12, 1, 6, 3, 0], [14, 2, 10, 5, 4, 8, 11, 7, 3, 0, 1, 6, 15, 12, 9, 13], [9, 13, 15, 12, 1, 6, 3, 0, 11, 7, 4, 8, 10, 5, 14, 2], [15, 12, 9, 13, 3, 0, 1, 6, 4, 8, 11, 7, 14, 2, 10, 5], [6, 1, 0, 3, 13, 9, 12, 15, 5, 10, 2, 14, 7, 11, 8, 4], [0, 3, 6, 1, 12, 15, 13, 9, 2, 14, 5, 10, 8, 4, 7, 11], [7, 11, 8, 4, 5, 10, 2, 14, 13, 9, 12, 15, 6, 1, 0, 3]]], [[[14, 7, 15, 9, 5, 0, 12, 8, 2, 4, 10, 3, 11, 13, 1, 6], [15, 9, 14, 7, 12, 8, 5, 0, 10, 3, 2, 4, 1, 6, 11, 13], [7, 14, 9, 15, 0, 5, 8, 12, 4, 2, 3, 10, 13, 11, 6, 1], [11, 13, 1, 6, 2, 4, 10, 3, 5, 0, 12, 8, 14, 7, 15, 9], [8, 12, 0, 5, 9, 15, 7, 14, 6, 1, 13, 11, 3, 10, 4, 2], [1, 6, 11, 13, 10, 3, 2, 4, 12, 8, 5, 0, 15, 9, 14, 7], [13, 11, 6, 1, 4, 2, 3, 10, 0, 5, 8, 12, 7, 14, 9, 15], [2, 4, 10, 3, 11, 13, 1, 6, 14, 7, 15, 9, 5, 0, 12, 8], [3, 10, 4, 2, 6, 1, 13, 11, 9, 15, 7, 14, 8, 12, 0, 5], [4, 2, 3, 10, 13, 11, 6, 1, 7, 14, 9, 15, 0, 5, 8, 12], [12, 8, 5, 0, 15, 9, 14, 7, 1, 6, 11, 13, 10, 3, 2, 4], [0, 5, 8, 12, 7, 14, 9, 15, 13, 11, 6, 1, 4, 2, 3, 10], [6, 1, 13, 11, 3, 10, 4, 2, 8, 12, 0, 5, 9, 15, 7, 14], [9, 15, 7, 14, 8, 12, 0, 5, 3, 10, 4, 2, 6, 1, 13, 11], [10, 3, 2, 4, 1, 6, 11, 13, 15, 9, 14, 7, 12, 8, 5, 0], [5, 0, 12, 8, 14, 7, 15, 9, 11, 13, 1, 6, 2, 4, 10, 3]], [[1, 3, 13, 8, 15, 10, 2, 0, 14, 12, 5, 11, 4, 6, 7, 9], [14, 12, 5, 11, 4, 6, 7, 9, 1, 3, 13, 8, 15, 10, 2, 0], [9, 7, 6, 4, 11, 5, 12, 14, 0, 2, 10, 15, 8, 13, 3, 1], [4, 6, 7, 9, 14, 12, 5, 11, 15, 10, 2, 0, 1, 3, 13, 8], [6, 4, 9, 7, 12, 14, 11, 5, 10, 15, 0, 2, 3, 1, 8, 13], [2, 0, 15, 10, 13, 8, 1, 3, 7, 9, 4, 6, 5, 11, 14, 12], [13, 8, 1, 3, 2, 0, 15, 10, 5, 11, 14, 12, 7, 9, 4, 6], [3, 1, 8, 13, 10, 15, 0, 2, 12, 14, 11, 5, 6, 4, 9, 7], [12, 14, 11, 5, 6, 4, 9, 7, 3, 1, 8, 13, 10, 15, 0, 2], [11, 5, 12, 14, 9, 7, 6, 4, 8, 13, 3, 1, 0, 2, 10, 15], [7, 9, 4, 6, 5, 11, 14, 12, 2, 0, 15, 10, 13, 8, 1, 3], [15, 10, 2, 0, 1, 3, 13, 8, 4, 6, 7, 9, 14, 12, 5, 11], [10, 15, 0, 2, 3, 1, 8, 13, 6, 4, 9, 7, 12, 14, 11, 5], [0, 2, 10, 15, 8, 13, 3, 1, 9, 7, 6, 4, 11, 5, 12, 14], [5, 11, 14, 12, 7, 9, 4, 6, 13, 8, 1, 3, 2, 0, 15, 10], [8, 13, 3, 1, 0, 2, 10, 15, 11, 5, 12, 14, 9, 7, 6, 4]]], [[[3, 12, 14, 10, 4, 8, 6, 7, 0, 1, 15, 9, 5, 11, 2, 13], [12, 3, 10, 14, 8, 4, 7, 6, 1, 0, 9, 15, 11, 5, 13, 2], [11, 5, 13, 2, 1, 0, 9, 15, 8, 4, 7, 6, 12, 3, 10, 14], [7, 6, 8, 4, 10, 14, 12, 3, 13, 2, 11, 5, 9, 15, 1, 0], [5, 11, 2, 13, 0, 1, 15, 9, 4, 8, 6, 7, 3, 12, 14, 10], [13, 2, 11, 5, 9, 15, 1, 0, 7, 6, 8, 4, 10, 14, 12, 3], [1, 0, 9, 15, 11, 5, 13, 2, 12, 3, 10, 14, 8, 4, 7, 6], [4, 8, 6, 7, 3, 12, 14, 10, 5, 11, 2, 13, 0, 1, 15, 9], [6, 7, 4, 8, 14, 10, 3, 12, 2, 13, 5, 11, 15, 9, 0, 1], [10, 14, 12, 3, 7, 6, 8, 4, 9, 15, 1, 0, 13, 2, 11, 5], [0, 1, 15, 9, 5, 11, 2, 13, 3, 12, 14, 10, 4, 8, 6, 7], [9, 15, 1, 0, 13, 2, 11, 5, 10, 14, 12, 3, 7, 6, 8, 4], [8, 4, 7, 6, 12, 3, 10, 14, 11, 5, 13, 2, 1, 0, 9, 15], [15, 9, 0, 1, 2, 13, 5, 11, 14, 10, 3, 12, 6, 7, 4, 8], [2, 13, 5, 11, 15, 9, 0, 1, 6, 7, 4, 8, 14, 10, 3, 12], [14, 10, 3, 12, 6, 7, 4, 8, 15, 9, 0, 1, 2, 13, 5, 11]], [[11, 12, 1, 4, 2, 14, 15, 10, 6, 5, 9, 0, 3, 7, 8, 13], [12, 11, 4, 1, 14, 2, 10, 15, 5, 6, 0, 9, 7, 3, 13, 8], [10, 15, 14, 2, 4, 1, 12, 11, 13, 8, 7, 3, 0, 9, 5, 6], [2, 14, 15, 10, 11, 12, 1, 4, 3, 7, 8, 13, 6, 5, 9, 0], [5, 6, 0, 9, 7, 3, 13, 8, 12, 11, 4, 1, 14, 2, 10, 15], [0, 9, 5, 6, 13, 8, 7, 3, 4, 1, 12, 11, 10, 15, 14, 2], [4, 1, 12, 11, 10, 15, 14, 2, 0, 9, 5, 6, 13, 8, 7, 3], [9, 0, 6, 5, 8, 13, 3, 7, 1, 4, 11, 12, 15, 10, 2, 14], [15, 10, 2, 14, 1, 4, 11, 12, 8, 13, 3, 7, 9, 0, 6, 5], [6, 5, 9, 0, 3, 7, 8, 13, 11, 12, 1, 4, 2, 14, 15, 10], [13, 8, 7, 3, 0, 9, 5, 6, 10, 15, 14, 2, 4, 1, 12, 11], [1, 4, 11, 12, 15, 10, 2, 14, 9, 0, 6, 5, 8, 13, 3, 7], [7, 3, 13, 8, 5, 6, 0, 9, 14, 2, 10, 15, 12, 11, 4, 1], [8, 13, 3, 7, 9, 0, 6, 5, 15, 10, 2, 14, 1, 4, 11, 12], [14, 2, 10, 15, 12, 11, 4, 1, 7, 3, 13, 8, 5, 6, 0, 9], [3, 7, 8, 13, 6, 5, 9, 0, 2, 14, 15, 10, 11, 12, 1, 4]]]], tableB: [ [99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118], [202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192], [183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21], [4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117], [9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132], [83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207], [208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168], [81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210], [205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115], [96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219], [224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121], [231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8], [186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138], [112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158], [225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223], [140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22], ], tableC: [ [0, 0, 0, 0, 0, 0], [2, 3, 9, 11, 13, 14], [4, 6, 18, 22, 26, 28], [6, 5, 27, 29, 23, 18], [8, 12, 36, 44, 52, 56], [10, 15, 45, 39, 57, 54], [12, 10, 54, 58, 46, 36], [14, 9, 63, 49, 35, 42], [16, 24, 72, 88, 104, 112], [18, 27, 65, 83, 101, 126], [20, 30, 90, 78, 114, 108], [22, 29, 83, 69, 127, 98], [24, 20, 108, 116, 92, 72], [26, 23, 101, 127, 81, 70], [28, 18, 126, 98, 70, 84], [30, 17, 119, 105, 75, 90], [32, 48, 144, 176, 208, 224], [34, 51, 153, 187, 221, 238], [36, 54, 130, 166, 202, 252], [38, 53, 139, 173, 199, 242], [40, 60, 180, 156, 228, 216], [42, 63, 189, 151, 233, 214], [44, 58, 166, 138, 254, 196], [46, 57, 175, 129, 243, 202], [48, 40, 216, 232, 184, 144], [50, 43, 209, 227, 181, 158], [52, 46, 202, 254, 162, 140], [54, 45, 195, 245, 175, 130], [56, 36, 252, 196, 140, 168], [58, 39, 245, 207, 129, 166], [60, 34, 238, 210, 150, 180], [62, 33, 231, 217, 155, 186], [64, 96, 59, 123, 187, 219], [66, 99, 50, 112, 182, 213], [68, 102, 41, 109, 161, 199], [70, 101, 32, 102, 172, 201], [72, 108, 31, 87, 143, 227], [74, 111, 22, 92, 130, 237], [76, 106, 13, 65, 149, 255], [78, 105, 4, 74, 152, 241], [80, 120, 115, 35, 211, 171], [82, 123, 122, 40, 222, 165], [84, 126, 97, 53, 201, 183], [86, 125, 104, 62, 196, 185], [88, 116, 87, 15, 231, 147], [90, 119, 94, 4, 234, 157], [92, 114, 69, 25, 253, 143], [94, 113, 76, 18, 240, 129], [96, 80, 171, 203, 107, 59], [98, 83, 162, 192, 102, 53], [100, 86, 185, 221, 113, 39], [102, 85, 176, 214, 124, 41], [104, 92, 143, 231, 95, 3], [106, 95, 134, 236, 82, 13], [108, 90, 157, 241, 69, 31], [110, 89, 148, 250, 72, 17], [112, 72, 227, 147, 3, 75], [114, 75, 234, 152, 14, 69], [116, 78, 241, 133, 25, 87], [118, 77, 248, 142, 20, 89], [120, 68, 199, 191, 55, 115], [122, 71, 206, 180, 58, 125], [124, 66, 213, 169, 45, 111], [126, 65, 220, 162, 32, 97], [128, 192, 118, 246, 109, 173], [130, 195, 127, 253, 96, 163], [132, 198, 100, 224, 119, 177], [134, 197, 109, 235, 122, 191], [136, 204, 82, 218, 89, 149], [138, 207, 91, 209, 84, 155], [140, 202, 64, 204, 67, 137], [142, 201, 73, 199, 78, 135], [144, 216, 62, 174, 5, 221], [146, 219, 55, 165, 8, 211], [148, 222, 44, 184, 31, 193], [150, 221, 37, 179, 18, 207], [152, 212, 26, 130, 49, 229], [154, 215, 19, 137, 60, 235], [156, 210, 8, 148, 43, 249], [158, 209, 1, 159, 38, 247], [160, 240, 230, 70, 189, 77], [162, 243, 239, 77, 176, 67], [164, 246, 244, 80, 167, 81], [166, 245, 253, 91, 170, 95], [168, 252, 194, 106, 137, 117], [170, 255, 203, 97, 132, 123], [172, 250, 208, 124, 147, 105], [174, 249, 217, 119, 158, 103], [176, 232, 174, 30, 213, 61], [178, 235, 167, 21, 216, 51], [180, 238, 188, 8, 207, 33], [182, 237, 181, 3, 194, 47], [184, 228, 138, 50, 225, 5], [186, 231, 131, 57, 236, 11], [188, 226, 152, 36, 251, 25], [190, 225, 145, 47, 246, 23], [192, 160, 77, 141, 214, 118], [194, 163, 68, 134, 219, 120], [196, 166, 95, 155, 204, 106], [198, 165, 86, 144, 193, 100], [200, 172, 105, 161, 226, 78], [202, 175, 96, 170, 239, 64], [204, 170, 123, 183, 248, 82], [206, 169, 114, 188, 245, 92], [208, 184, 5, 213, 190, 6], [210, 187, 12, 222, 179, 8], [212, 190, 23, 195, 164, 26], [214, 189, 30, 200, 169, 20], [216, 180, 33, 249, 138, 62], [218, 183, 40, 242, 135, 48], [220, 178, 51, 239, 144, 34], [222, 177, 58, 228, 157, 44], [224, 144, 221, 61, 6, 150], [226, 147, 212, 54, 11, 152], [228, 150, 207, 43, 28, 138], [230, 149, 198, 32, 17, 132], [232, 156, 249, 17, 50, 174], [234, 159, 240, 26, 63, 160], [236, 154, 235, 7, 40, 178], [238, 153, 226, 12, 37, 188], [240, 136, 149, 101, 110, 230], [242, 139, 156, 110, 99, 232], [244, 142, 135, 115, 116, 250], [246, 141, 142, 120, 121, 244], [248, 132, 177, 73, 90, 222], [250, 135, 184, 66, 87, 208], [252, 130, 163, 95, 64, 194], [254, 129, 170, 84, 77, 204], [27, 155, 236, 247, 218, 65], [25, 152, 229, 252, 215, 79], [31, 157, 254, 225, 192, 93], [29, 158, 247, 234, 205, 83], [19, 151, 200, 219, 238, 121], [17, 148, 193, 208, 227, 119], [23, 145, 218, 205, 244, 101], [21, 146, 211, 198, 249, 107], [11, 131, 164, 175, 178, 49], [9, 128, 173, 164, 191, 63], [15, 133, 182, 185, 168, 45], [13, 134, 191, 178, 165, 35], [3, 143, 128, 131, 134, 9], [1, 140, 137, 136, 139, 7], [7, 137, 146, 149, 156, 21], [5, 138, 155, 158, 145, 27], [59, 171, 124, 71, 10, 161], [57, 168, 117, 76, 7, 175], [63, 173, 110, 81, 16, 189], [61, 174, 103, 90, 29, 179], [51, 167, 88, 107, 62, 153], [49, 164, 81, 96, 51, 151], [55, 161, 74, 125, 36, 133], [53, 162, 67, 118, 41, 139], [43, 179, 52, 31, 98, 209], [41, 176, 61, 20, 111, 223], [47, 181, 38, 9, 120, 205], [45, 182, 47, 2, 117, 195], [35, 191, 16, 51, 86, 233], [33, 188, 25, 56, 91, 231], [39, 185, 2, 37, 76, 245], [37, 186, 11, 46, 65, 251], [91, 251, 215, 140, 97, 154], [89, 248, 222, 135, 108, 148], [95, 253, 197, 154, 123, 134], [93, 254, 204, 145, 118, 136], [83, 247, 243, 160, 85, 162], [81, 244, 250, 171, 88, 172], [87, 241, 225, 182, 79, 190], [85, 242, 232, 189, 66, 176], [75, 227, 159, 212, 9, 234], [73, 224, 150, 223, 4, 228], [79, 229, 141, 194, 19, 246], [77, 230, 132, 201, 30, 248], [67, 239, 187, 248, 61, 210], [65, 236, 178, 243, 48, 220], [71, 233, 169, 238, 39, 206], [69, 234, 160, 229, 42, 192], [123, 203, 71, 60, 177, 122], [121, 200, 78, 55, 188, 116], [127, 205, 85, 42, 171, 102], [125, 206, 92, 33, 166, 104], [115, 199, 99, 16, 133, 66], [113, 196, 106, 27, 136, 76], [119, 193, 113, 6, 159, 94], [117, 194, 120, 13, 146, 80], [107, 211, 15, 100, 217, 10], [105, 208, 6, 111, 212, 4], [111, 213, 29, 114, 195, 22], [109, 214, 20, 121, 206, 24], [99, 223, 43, 72, 237, 50], [97, 220, 34, 67, 224, 60], [103, 217, 57, 94, 247, 46], [101, 218, 48, 85, 250, 32], [155, 91, 154, 1, 183, 236], [153, 88, 147, 10, 186, 226], [159, 93, 136, 23, 173, 240], [157, 94, 129, 28, 160, 254], [147, 87, 190, 45, 131, 212], [145, 84, 183, 38, 142, 218], [151, 81, 172, 59, 153, 200], [149, 82, 165, 48, 148, 198], [139, 67, 210, 89, 223, 156], [137, 64, 219, 82, 210, 146], [143, 69, 192, 79, 197, 128], [141, 70, 201, 68, 200, 142], [131, 79, 246, 117, 235, 164], [129, 76, 255, 126, 230, 170], [135, 73, 228, 99, 241, 184], [133, 74, 237, 104, 252, 182], [187, 107, 10, 177, 103, 12], [185, 104, 3, 186, 106, 2], [191, 109, 24, 167, 125, 16], [189, 110, 17, 172, 112, 30], [179, 103, 46, 157, 83, 52], [177, 100, 39, 150, 94, 58], [183, 97, 60, 139, 73, 40], [181, 98, 53, 128, 68, 38], [171, 115, 66, 233, 15, 124], [169, 112, 75, 226, 2, 114], [175, 117, 80, 255, 21, 96], [173, 118, 89, 244, 24, 110], [163, 127, 102, 197, 59, 68], [161, 124, 111, 206, 54, 74], [167, 121, 116, 211, 33, 88], [165, 122, 125, 216, 44, 86], [219, 59, 161, 122, 12, 55], [217, 56, 168, 113, 1, 57], [223, 61, 179, 108, 22, 43], [221, 62, 186, 103, 27, 37], [211, 55, 133, 86, 56, 15], [209, 52, 140, 93, 53, 1], [215, 49, 151, 64, 34, 19], [213, 50, 158, 75, 47, 29], [203, 35, 233, 34, 100, 71], [201, 32, 224, 41, 105, 73], [207, 37, 251, 52, 126, 91], [205, 38, 242, 63, 115, 85], [195, 47, 205, 14, 80, 127], [193, 44, 196, 5, 93, 113], [199, 41, 223, 24, 74, 99], [197, 42, 214, 19, 71, 109], [251, 11, 49, 202, 220, 215], [249, 8, 56, 193, 209, 217], [255, 13, 35, 220, 198, 203], [253, 14, 42, 215, 203, 197], [243, 7, 21, 230, 232, 239], [241, 4, 28, 237, 229, 225], [247, 1, 7, 240, 242, 243], [245, 2, 14, 251, 255, 253], [235, 19, 121, 146, 180, 167], [233, 16, 112, 153, 185, 169], [239, 21, 107, 132, 174, 187], [237, 22, 98, 143, 163, 181], [227, 31, 93, 190, 128, 159], [225, 28, 84, 181, 141, 145], [231, 25, 79, 168, 154, 131], [229, 26, 70, 163, 151, 141], ], tableD: Uint8Array.from([0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11]), tableE: Uint8Array.from([76, 194, 211, 188, 170, 232, 82, 177, 242, 178, 245, 7, 58, 71, 250, 180]), tableF: Uint32Array.from([16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 452984832, 905969664, 1811939328, 3623878656, 2868903936, 1291845632, 2583691264]) }; class state { constructor(a, b, c, d) { this.state = a; this.orgState = b; this.nr = c; this.p = d; } init(a, b, c, d) { this.nr = d; this.p = 0; initState(this, a, b, c); } encrypt(data) { let bp = 0; let dataLen = data.length & 0xffffffff; while (dataLen > 0) { if (this.p === 0) { refreshState(this); } let sb = Buffer.allocUnsafe(64); this.state.forEach((v, i) => { sb.writeUint32LE(v, i * 4); }); while (this.p != 64 && dataLen != 0) { data[bp] ^= sb[this.p]; this.p++; bp++; dataLen--; } if (this.p >= 64) { this.p = 0; this.orgState[12]++; this.state = this.orgState; } } } } exports.state = state; function sub_a(a, b) { let byteB = toBytes(b); let seq = [3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12]; seq.forEach((v, i) => { a[i] = a[i] ^ byteB[seq[i]]; }); } function sub_b(a, b) { let byteB = toBytes(b); let seq = [3, 6, 9, 12, 7, 10, 13, 0, 11, 14, 1, 4, 15, 2, 5, 8]; seq.forEach((v, i) => { a[i] = a[i] ^ byteB[seq[i]]; }); } function sub_c(a, b) { for (let i = 0; i < 16; i++) { let t = b[i]; t = t & 0xffffffff; t = (t & 15) + ((t >>> 4) << 4); b[i] = a[Math.floor(t / 16)][t % 16]; } } function sub_d(a, b) { let tb = [...b]; a.forEach((v, i) => { b[i] = tb[v]; }); } function sub_e(DI, p) { for (let i = 4; i > 0; i--) { let [a, b, c, d] = [p[4 * i - 4], p[4 * i - 3], p[4 * i - 2], p[4 * i - 1]]; p[4 * i - 4] = (c ^ d) ^ (DI[a][0] ^ DI[b][1]); p[4 * i - 3] = (a ^ d) ^ (DI[b][0] ^ DI[c][1]); p[4 * i - 2] = (a ^ b) ^ (DI[d][1] ^ DI[c][0]); p[4 * i - 1] = (b ^ c) ^ (DI[a][1] ^ DI[d][0]); } } function sub_ab(a, b) { let ia = ((b >>> 28) << 4) + ((b >>> 24) & 15); let AX = a[Math.floor(ia / 16)][ia % 16] & 0xffffffff; let ib = b & 0xff; let BX = a[Math.floor(ib / 16)][ib % 16] & 0xffffffff; let ic = ((b >>> 8) & 15) + ((b >>> 8) & 240); let CX = a[Math.floor(ic / 16)][ic % 16] & 0xffffffff; let id = ((b >>> 16) & 15) + ((b >>> 16) & 240); let DX = a[Math.floor(id / 16)][id % 16] & 0xffffffff; return (AX << 24) | BX | (CX << 8) | (DX << 16); } function sub_f(a, b, c) { let w = new Uint32Array(44); w[0] = (a[0] & 0xffffffff) << 24 | (a[1] & 0xffffffff) << 16 | (a[2] & 0xffffffff) << 8 | (a[3] & 0xffffffff); w[1] = (a[4] & 0xffffffff) << 24 | (a[5] & 0xffffffff) << 16 | (a[6] & 0xffffffff) << 8 | (a[7] & 0xffffffff); w[2] = (a[8] & 0xffffffff) << 24 | (a[9] & 0xffffffff) << 16 | (a[10] & 0xffffffff) << 8 | (a[11] & 0xffffffff); w[3] = (a[12] & 0xffffffff) << 24 | (a[13] & 0xffffffff) << 16 | (a[14] & 0xffffffff) << 8 | (a[15] & 0xffffffff); let ax; for (let bx = 4; bx < 44; bx++) { ax = w[bx - 1] >>> 0; if (bx % 4 == 0) { ax = (ax << 8) | ((ax >>> 24) & 0xff); ax = sub_ab(c, ax); let dx = bx - 1; dx = dx >>> 2; ax = ax ^ b[dx]; } ax = ax ^ w[bx - 4]; w[bx] = ax; } return w; } function sub_aa(a, b, c, d) { let dx = ((a & 15) << 9) + ((d[a] & 15) << 4); let di = (c[a & 15] >>> 4) & 15; let ax = (((d[a] >>> 4) & 15) << 4) + ((a & 15) << 9) + di; let res = b[Math.floor(ax / 512)][Math.floor(ax % 512 / 256)][Math.floor(ax % 512 % 256 / 16)][ax % 512 % 256 % 16 % 16]; res = res << 4; dx = dx + (c[a & 15] & 15) + 256; res = res | b[Math.floor(dx / 512)][Math.floor(dx % 512 / 256)][Math.floor(dx % 512 % 256 / 16)][dx % 512 % 256 % 16 % 16]; return res; } function transformInner(a, b) { let si = 0; for (let cnt = 1; cnt < 43;) { let ai = (((cnt - 1) & 31) << 4) + (a[si] >>> 4); let bi = ((cnt & 31) << 4) + (a[si] & 15); a[si] = (b[Math.floor(ai / 16)][ai % 16] << 4) | b[Math.floor(bi / 16)][bi % 16]; si++; cnt = cnt + 2; } } function initState(