Files

342 lines
18 KiB
C

/*
* ford_immo.c
*
* Created on: Nov 21, 2025
* Author: herli
*/
#include "ford_immo.h"
#include "timeouts.h"
//Detected prefix length = 622
//Detected cycle length = 440
// To get v[n] for n >= 622:
uint32_t fieona_counter = 0;
uint16_t FIEONA_FIRSTWORD = 0x2001;
uint16_t FIEONA_SECONDWORD = 0x2000;
uint16_t FIEONA_advance()
{
fieona_counter++;
/*if(fieona_counter >= FIRSTWORD_PREFIX_LEN + FIRSTWORD_PERIOD){
fieona_counter = FIRSTWORD_PREFIX_LEN;
}*/
/*if(fieona_counter >= FIRSTWORD_PREFIX_LEN){
fieona_counter = FIRSTWORD_PREFIX_LEN + fieona_counter % FIRSTWORD_PERIOD;
}*/
uint32_t n = fieona_counter;
if (n < FIRSTWORD_PREFIX_LEN){
FIEONA_FIRSTWORD = firstword_prefix[n];
}else{
n -= FIRSTWORD_PREFIX_LEN;
FIEONA_FIRSTWORD = firstword_cycle[n % FIRSTWORD_PERIOD];
}
FIEONA_SECONDWORD = FIEONA_FIRSTWORD & 0xFF00;
//FIEONA_SECONDWORD = FIEONA_FIRSTWORD ;
return FIEONA_FIRSTWORD;
}
static uint16_t last_send4_tick = 0; // last tick for this timeout
extern uint8_t count;
uint8_t booted = 0;
void Fieona_SEND4_Handler(
const struct CanMessageDef *msg,
const uint8_t in_data[8],
CanTxFn tx
)
{
if(count > 1){
last_send4_tick = TIM16->CNT;
/*if(!booted){
last_send4_tick-=1200;
booted++;
Timeout_ResetByIndex(20, last_send4_tick); // deberia mejorarlo bastante esto, en vez de
}*/
}
//
// Extract first word (little endian)
uint16_t first_word = (uint16_t)in_data[0] | ((uint16_t)in_data[1] << 8);
// Check if it matches 0x2001
if (first_word == 0x2001) { // || first_word == 0x4801
FIEONA_set_counter_cycle();
}else if(first_word == 0x4801){
//FIEONA_reset_counter();
}
}
void FIEONA_set_counter_cycle(){
fieona_counter = FIRSTWORD_PREFIX_LEN;
FIEONA_FIRSTWORD = firstword_prefix[fieona_counter];
FIEONA_SECONDWORD = FIEONA_FIRSTWORD & 0xFF00;
}
void FIEONA_reset_counter(){
fieona_counter = 0;
FIEONA_FIRSTWORD = firstword_prefix[fieona_counter];
FIEONA_SECONDWORD = FIEONA_FIRSTWORD & 0xFF00;
}
//extern uint8_t count;
void FIEONA_Poll(){
//Timeout_ResetByIndex(20, last_send4_tick); // deberia mejorarlo bastante esto, en vez de
if(last_send4_tick){
uint16_t newtick = last_send4_tick - 250;
Timeout_ResetByIndex(20, newtick); // deberia mejorarlo bastante esto, en vez de
last_send4_tick = 0;
}
}
static const uint16_t firstword_prefix[FIRSTWORD_PREFIX_LEN] = {
0x2001, 0xA201, 0x3421, 0x3523, 0x4525, 0x88AC, 0xCC07, 0xAC90,
0x2419, 0xE62E, 0xAFD4, 0x6FFA, 0xAB8C, 0x6D85, 0xCAC2, 0x01FD,
0xC562, 0xF7C7, 0x852C, 0x338F, 0x5BC1, 0x657D, 0xE85A, 0x7992,
0x1BAA, 0x4EB7, 0xDCA3, 0xE09D, 0x471C, 0xE3C6, 0x9B3E, 0x165D,
0x6CD8, 0xE6C1, 0xFD2D, 0x40DD, 0x13C0, 0x663C, 0x72A8, 0xA89E,
0x9F23, 0x87C5, 0x5646, 0x6C26, 0x6114, 0xEBAE, 0xA7EC, 0xB85B,
0x3BBC, 0x8E40, 0xBDE4, 0xD5F3, 0x67E2, 0x836F, 0xE2CF, 0x7895,
0x39BB, 0x4D72, 0xBA88, 0xA53C, 0x6918, 0x0945, 0x299E, 0xB3B3,
0x98BE, 0x30F5, 0xFF11, 0x8092, 0xB71A, 0x72FE, 0x88B9, 0xA238,
0xDAF7, 0x1107, 0xF760, 0x8EB6, 0xDE65, 0x21A0, 0x155A, 0x4E62,
0xF757, 0xD3FD, 0xDF82, 0x7089, 0x4305, 0x3D5A, 0x20E2, 0xA5FF,
0x7760, 0x86B6, 0xC1E5, 0xA818, 0x4E35, 0x58C5, 0x6AD6, 0x56D7,
0x0AB5, 0xDD4D, 0x4C2F, 0x7C7B, 0x085E, 0x36FF, 0x37F0, 0x8BCF,
0x60A5, 0x5AA4, 0xE79F, 0xF1EA, 0x341B, 0xF638, 0xDC37, 0x4B3B,
0x920A, 0x81DD, 0xB650, 0x4735, 0xD1D5, 0x862F, 0x6F1B, 0x74E8,
0x1202, 0xB731, 0x5B34, 0x5220, 0xEE62, 0xA157, 0x9F9D, 0x6C8C,
0x6915, 0xBD83, 0x232B, 0x2089, 0x9E05, 0x4D8A, 0xBD95, 0x058B,
0x260F, 0xB6A9, 0xADE7, 0x765E, 0x2CDF, 0x059E, 0xAF73, 0x657A,
0xC3E4, 0xFD53, 0xB898, 0x8ABD, 0x08CE, 0x924E, 0x82A6, 0xC83C,
0x03C8, 0x3110, 0x0561, 0x1E77, 0x1DFF, 0x72E0, 0x9C6E, 0xF0D8,
0x8B01, 0x0FB1, 0x3E3C, 0x5428, 0xC836, 0xF33D, 0x5496, 0xC193,
0xF2DC, 0x1322, 0x93E3, 0x7891, 0xEAAA, 0xFFA7, 0xE95A, 0xE3A2,
0xB06B, 0x9C1D, 0x7994, 0x2F76, 0x6211, 0xD3C2, 0x458D, 0x30D3,
0x9DD0, 0xF0AD, 0xADD5, 0xEDEF, 0x8737, 0x716B, 0x8B2D, 0xC0BD,
0x632E, 0x6424, 0x2DF7, 0xFDB7, 0x4D13, 0x4994, 0x5476, 0xE5E1,
0x30FF, 0x3A90, 0x48F9, 0x8D3C, 0x6398, 0xEA6D, 0x9351, 0x6E96,
0xC633, 0x5DE6, 0x77D0, 0x624D, 0xFAFF, 0xA230, 0x20F3, 0x4492,
0xA75A, 0xEB82, 0x1549, 0x81D1, 0xFEFE, 0xB779, 0xF024, 0xE4B7,
0x5D03, 0x8023, 0x7BD5, 0x6FCF, 0x74E5, 0x25C8, 0x4D30, 0xF5A3,
0x982D, 0x580D, 0x853B, 0xB7AA, 0x6877, 0x0B9F, 0x222A, 0x811F,
0x38C2, 0x92DD, 0x7DE0, 0x311E, 0x35EB, 0x68F5, 0xF691, 0x748A,
0xF805, 0x962A, 0x385F, 0xFE96, 0xC733, 0x9DF6, 0xD7B9, 0xCF28,
0x82E6, 0x59A0, 0x78DA, 0x739A, 0x23C6, 0xAF3E, 0xA19D, 0x39AC,
0x0297, 0x0AD1, 0xC68E, 0x638A, 0x0EF5, 0xB1F1, 0x1020, 0x8242,
0x4BF5, 0x7D41, 0xC715, 0x1063, 0xDB59, 0xBBA2, 0x15EB, 0xC6F5,
0x3171, 0x2E98, 0xCC1D, 0xF494, 0x60A6, 0x731C, 0x0886, 0xCCAA,
0x55C7, 0x120C, 0x0CAD, 0xAD95, 0xAC8B, 0x817F, 0xFB58, 0xF929,
0x010F, 0xC4D9, 0x003A, 0x2110, 0xE461, 0x7B67, 0x4DF6, 0x3AB9,
0x6D58, 0x6E49, 0xE961, 0x50B7, 0x61C3, 0xD2EF, 0x9107, 0x3F60,
0xE336, 0x1B6D, 0x36E1, 0xF70F, 0xF539, 0x5100, 0x1510, 0x6BA1,
0x181B, 0x9878, 0x621B, 0x0718, 0x0525, 0x64AC, 0x8BC7, 0xB86C,
0xAB23, 0x9085, 0x2372, 0x3DE8, 0xD792, 0xC78A, 0x7535, 0x71B5,
0x8A3D, 0x2F86, 0x5D9A, 0xF666, 0x9618, 0x7F15, 0x9FE3, 0xA151,
0xF176, 0xF531, 0x1914, 0xA32E, 0x4824, 0x1637, 0xEFDB, 0x2EB4,
0xC118, 0xF6C5, 0x85B6, 0x1655, 0x0137, 0xBA0B, 0x5CD7, 0x1215,
0x6593, 0x1D1C, 0xD226, 0x8074, 0x1214, 0x533E, 0x2DDD, 0x2F10,
0x3141, 0xA655, 0x6237, 0x329B, 0x90A0, 0xA84A, 0xE241, 0xBE65,
0xEFA0, 0x1A3A, 0x3EB0, 0x65BB, 0xAC32, 0x4234, 0x7C10, 0x2811,
0x6A22, 0xBA53, 0x1868, 0x0BBA, 0xFAC8, 0xAB80, 0x5EB8, 0xC03F,
0x60E4, 0xC3A3, 0x490D, 0x98CB, 0x7703, 0x95C3, 0x1E2F, 0xEC9B,
0x5640, 0xFA64, 0x96FB, 0x9686, 0xB28A, 0x8BE5, 0x67B8, 0xBBCF,
0x2BA5, 0x55D4, 0xA55A, 0x7762, 0x80E7, 0x6D0E, 0x7232, 0x0494,
0x99A6, 0x0C2C, 0x447F, 0x3608, 0xE274, 0x8934, 0xFC00, 0x0FC0,
0x85FC, 0xCA44, 0xB269, 0x1B23, 0xE785, 0xE562, 0xD9C7, 0x8C4C,
0xD431, 0x2404, 0x7D65, 0x4810, 0x9CD1, 0xCDAE, 0xC30C, 0xAF3D,
0x4656, 0x52CF, 0xD795, 0xCE2B, 0x4439, 0x5DF0, 0x922F, 0x51DB,
0x16D4, 0x0DEA, 0x95DB, 0xFF14, 0xBC8E, 0x49EA, 0xC99B, 0x6110,
0x6861, 0x77A7, 0x5CDA, 0xD9DA, 0xF3AA, 0xBC37, 0x393B, 0xF6EA,
0x286B, 0x7B9D, 0x004C, 0x7171, 0xB298, 0x505D, 0x9978, 0xDD2B,
0x4A29, 0x741F, 0x2A72, 0x0D58, 0x4849, 0x9B01, 0x60B1, 0xB64C,
0x11D1, 0xA7FE, 0x5E89, 0x8DE5, 0x2ED8, 0x70E1, 0x94AF, 0xBFC3,
0x04CF, 0x5DB5, 0x1AFD, 0xF572, 0x2D08, 0xE4E4, 0xA5E3, 0xD5B1,
0xFC9C, 0xDF5E, 0x7BEF, 0xED17, 0x15B9, 0xB308, 0x8B44, 0xE0F9,
0x56BC, 0x6C70, 0xD617, 0xE6C9, 0x55E9, 0x765B, 0x859C, 0xAD6E,
0xD868, 0xD7BA, 0xCF88, 0xCF8C, 0xDDC5, 0x10A6, 0xF61C, 0x3D36,
0x9C0D, 0x5B7B, 0x694E, 0x5196, 0x5AE3, 0x1701, 0x8471, 0x14C8,
0xCF20, 0xCA32, 0xA214, 0x243E, 0x536D, 0x5661, 0x2487, 0x4C58,
0x2539, 0x0400, 0x0040, 0x0504, 0x15F5, 0x60E1, 0x83AF, 0x2933,
0x3416, 0x6FCB, 0x8D73, 0x335A, 0xDC42, 0xEF95, 0x73AB, 0x7711,
0x4012, 0xA892, 0xC19A, 0x44A6, 0x475C, 0x8B2A, 0x73AF, 0xD033,
0x7E86, 0x2D0A, 0x038D, 0x13B3, 0x4EBE, 0x0755, 0xA1C7, 0x8CCC,
0xABF9, 0xD36C, 0xE353, 0x0EF8, 0xB503, 0x35A3, 0x4C2D, 0x6D4D,
0x4D2F, 0xCA0B, 0x8DD7, 0x53A5, 0xA454, 0x8B82, 0x6F49, 0xFB71,
0x6938, 0xBC67, 0xF286, 0x524A, 0xBCE1, 0x256F, 0xD7EF, 0xACD7,
0x9F15, 0x51E3, 0x3871, 0x0C08, 0xCDD4, 0x48DA, 0x109A, 0x4796,
0x4F43, 0x8CC7, 0x34FC, 0x87B4, 0x8B28, 0x1AA6, 0x65BC, 0x87E0,
0xA9BE, 0x6A85, 0x0412, 0x58D2, 0x20DE, 0xCAC7, 0x7FDC, 0x0F72,
0x08A8, 0x27FE, 0x9689, 0xC165, 0x7A50, 0x0B75,
};
static const uint16_t firstword_cycle[440] = {
0x4801, 0x6C81, 0x7949, 0x9011, 0x08A2, 0x55BB, 0x5B32, 0xFC24,
0x1377, 0xE9CF, 0xB385, 0xDC22, 0x7F73, 0xA27A, 0xEDB4, 0xF488,
0x2ADC, 0xDAA2, 0xE0DB, 0x56C4, 0xDE71, 0xF868, 0x79BA, 0x75A8,
0x53CE, 0x1A7E, 0xC6F1, 0x5870, 0x9CD7, 0xF615, 0x49D3, 0x2360,
0x1176, 0x9731, 0x3934, 0x4F00, 0x14F0, 0xF79F, 0x2AEA, 0xEBAB,
0xA691, 0x7F8A, 0x30B5, 0x30AD, 0x41D5, 0x252F, 0xEB8B, 0x1E6F,
0x40FF, 0x3390, 0xA289, 0x7A25, 0xBD7C, 0xEAFC, 0x5C14, 0x24DE,
0xDD07, 0xDA20, 0x16E2, 0x8F5F, 0xCC86, 0xEEEA, 0x07EB, 0xFC15,
0x5333, 0xD6B6, 0x1EE5, 0x7368, 0x5C6A, 0x50C3, 0x37DF, 0x14CE,
0xD10E, 0xF272, 0xA1D8, 0x8D11, 0x8B72, 0xAC68, 0xE8FA, 0xF11C,
0x3D66, 0x3D08, 0xF5E4, 0x4573, 0xAEDA, 0x12FA, 0x4FBC, 0xDD80,
0x81D8, 0x2B11, 0x4752, 0xAC46, 0x6A86, 0x1DCA, 0x0599, 0x3E46,
0xA6A6, 0x407C, 0x03AC, 0x8237, 0x049B, 0x9FC0, 0x0EFC, 0x9454,
0x4282, 0xCFB9, 0x8EA8, 0xA65E, 0x07DF, 0xE9CE, 0xCADE, 0xB267,
0x8CE6, 0x9940, 0x0694, 0x82C6, 0xAFAE, 0x5E2C, 0x889F, 0x2F7A,
0x4C84, 0x452D, 0x195D, 0x9888, 0x991C, 0xB3E6, 0x8E30, 0x87B3,
0x55FE, 0xE069, 0xD203, 0x9173, 0x539A, 0x61C6, 0x881E, 0xBADB,
0x7E64, 0xE93B, 0x31EA, 0xE81B, 0x7578, 0x8EEB, 0x9985, 0x9782,
0x5409, 0x683D, 0x0866, 0x7238, 0x87F7, 0x3457, 0x244D, 0x001F,
0x4D32, 0x2D44, 0xF019, 0x22EE, 0xCB80, 0x60B8, 0x665F, 0xF276,
0x38C1, 0x3C4D, 0x2D9F, 0x5B4A, 0x9D71, 0x1958, 0xDD09, 0x2ACD,
0xE9C7, 0x154C, 0xA041, 0x6045, 0x738E, 0x5EDA, 0x2DFA, 0xEB6C,
0x78D3, 0x8250, 0x5BF5, 0x9641, 0x1DA5, 0x93F4, 0x610C, 0xDA1D,
0xF074, 0x1114, 0xBEAE, 0xA09C, 0x2F9E, 0xBF13, 0x08B4, 0x3BB8,
0xB50F, 0x3E19, 0xCFCE, 0x783E, 0x82AD, 0xCFF5, 0xBB81, 0x8939,
0xAA40, 0x9FA4, 0x146F, 0x495F, 0x0326, 0xAD04, 0x4475, 0x5B89,
0x1FB5, 0x021D, 0x26F4, 0x23BC, 0x48C0, 0xF18C, 0xAEE5, 0xF468,
0xB57A, 0x28E4, 0x1423, 0x6D15, 0x43C3, 0x650F, 0xC119, 0xB3FE,
0x4549, 0x24D1, 0x7E2E, 0x4554, 0x7212, 0x75B2, 0xFC4C, 0xA331,
0x9DF4, 0x06AC, 0x7CE7, 0xAACE, 0x016E, 0x0FA8, 0x376E, 0x6208,
0x8134, 0xF780, 0xA378, 0x8BCB, 0x3333, 0x14B6, 0x3BC5, 0x7786,
0xEE1A, 0x646E, 0xC158, 0x3F89, 0x85F5, 0xCFE1, 0x799F, 0xEA0A,
0x875D, 0xBA68, 0x37DA, 0xD58A, 0xC615, 0xFED3, 0x02B0, 0x19FB,
0xB5B6, 0x0155, 0x2867, 0x1F46, 0xBA36, 0x515D, 0x0808, 0x3994,
0x8B76, 0xA9D1, 0xD97E, 0x8A61, 0x9BC7, 0x416C, 0x6B33, 0x1836,
0x803D, 0x05E6, 0x6E50, 0xB2B5, 0x03CD, 0x47D7, 0xA845, 0x940E,
0xD622, 0xB513, 0xB014, 0xE41E, 0x3E9B, 0x5D60, 0xED16, 0x06DB,
0x1F24, 0x3127, 0x0D32, 0x2944, 0x25D9, 0x424A, 0xFBE1, 0x685F,
0x2996, 0xEC63, 0xF119, 0xF6FE, 0x72F9, 0x2FDC, 0x1272, 0x73D8,
0x0831, 0x3344, 0xBF79, 0x30A4, 0x63FF, 0x1440, 0xA644, 0x1629,
0x18DF, 0xDE5E, 0xC75F, 0x5406, 0x78A2, 0xECBB, 0xD7A2, 0x9BAB,
0xF191, 0x093A, 0x67A0, 0x71BA, 0xC528, 0x0846, 0x9A46, 0x6666,
0xF518, 0x8605, 0x580A, 0x6E3D, 0x47C6, 0xF77E, 0xEB41, 0x23F5,
0x9EC1, 0x10AD, 0xEFD5, 0xC50F, 0x5719, 0x855E, 0xE14F, 0x3A3D,
0x6286, 0x714A, 0xBED1, 0xBDCE, 0x7A1E, 0x2AFB, 0x53C6, 0xFA3E,
0x6BCD, 0x6257, 0x922D, 0x54AD, 0xD615, 0x57D3, 0x7C40, 0xECC4,
0xFED1, 0x81CE, 0x405E, 0xF67F, 0x8828, 0x5F76, 0x0D11, 0x4372,
0x5FE8, 0xDBB2, 0xC8AC, 0x3007, 0x64D0, 0xEB1D, 0xA004, 0x5B25,
0x470C, 0xE57D, 0xB05A, 0x8612, 0x7AF2, 0x6AE0, 0xBBEE, 0xBF90,
0xE349, 0xEAB1, 0x7CEC, 0xD72B, 0xE7C9, 0xB7F9, 0x142C, 0x60FF,
0x2590, 0xB5A9, 0x3FD7, 0x73C5, 0x5F06, 0x9DD2, 0xAE2E, 0x4054,
0xE342, 0x8D05, 0x4CFA, 0x5F5C, 0xF0AA, 0x0807, 0xAE50, 0xF6B5,
0xFE0D, 0x2A9B, 0xC820, 0x6DC2, 0x3D2D, 0xD4DD, 0x3F00, 0x13F0,
0xF18F, 0x94A1, 0x5BAB, 0x6D91, 0x84FA, 0xB2DC, 0x2F22, 0x59A3,
0x666D, 0x2911, 0xE932, 0x1304, 0x89D5, 0x55AF, 0x7953, 0xA058,
};
/*static const uint16_t firstword_cycle[FIRSTWORD_PERIOD] = {
0x2001, 0xA201, 0x3421, 0x3523, 0x4525, 0x88AC, 0xCC07, 0xAC90,
0x2419, 0xE62E, 0xAFD4, 0x6FFA, 0xAB8C, 0x6D85, 0xCAC2, 0x01FD,
0xC562, 0xF7C7, 0x852C, 0x338F, 0x5BC1, 0x657D, 0xE85A, 0x7992,
0x1BAA, 0x4EB7, 0xDCA3, 0xE09D, 0x471C, 0xE3C6, 0x9B3E, 0x165D,
0x6CD8, 0xE6C1, 0xFD2D, 0x40DD, 0x13C0, 0x663C, 0x72A8, 0xA89E,
0x9F23, 0x87C5, 0x5646, 0x6C26, 0x6114, 0xEBAE, 0xA7EC, 0xB85B,
0x3BBC, 0x8E40, 0xBDE4, 0xD5F3, 0x67E2, 0x836F, 0xE2CF, 0x7895,
0x39BB, 0x4D72, 0xBA88, 0xA53C, 0x6918, 0x0945, 0x299E, 0xB3B3,
0x98BE, 0x30F5, 0xFF11, 0x8092, 0xB71A, 0x72FE, 0x88B9, 0xA238,
0xDAF7, 0x1107, 0xF760, 0x8EB6, 0xDE65, 0x21A0, 0x155A, 0x4E62,
0xF757, 0xD3FD, 0xDF82, 0x7089, 0x4305, 0x3D5A, 0x20E2, 0xA5FF,
0x7760, 0x86B6, 0xC1E5, 0xA818, 0x4E35, 0x58C5, 0x6AD6, 0x56D7,
0x0AB5, 0xDD4D, 0x4C2F, 0x7C7B, 0x085E, 0x36FF, 0x37F0, 0x8BCF,
0x60A5, 0x5AA4, 0xE79F, 0xF1EA, 0x341B, 0xF638, 0xDC37, 0x4B3B,
0x920A, 0x81DD, 0xB650, 0x4735, 0xD1D5, 0x862F, 0x6F1B, 0x74E8,
0x1202, 0xB731, 0x5B34, 0x5220, 0xEE62, 0xA157, 0x9F9D, 0x6C8C,
0x6915, 0xBD83, 0x232B, 0x2089, 0x9E05, 0x4D8A, 0xBD95, 0x058B,
0x260F, 0xB6A9, 0xADE7, 0x765E, 0x2CDF, 0x059E, 0xAF73, 0x657A,
0xC3E4, 0xFD53, 0xB898, 0x8ABD, 0x08CE, 0x924E, 0x82A6, 0xC83C,
0x03C8, 0x3110, 0x0561, 0x1E77, 0x1DFF, 0x72E0, 0x9C6E, 0xF0D8,
0x8B01, 0x0FB1, 0x3E3C, 0x5428, 0xC836, 0xF33D, 0x5496, 0xC193,
0xF2DC, 0x1322, 0x93E3, 0x7891, 0xEAAA, 0xFFA7, 0xE95A, 0xE3A2,
0xB06B, 0x9C1D, 0x7994, 0x2F76, 0x6211, 0xD3C2, 0x458D, 0x30D3,
0x9DD0, 0xF0AD, 0xADD5, 0xEDEF, 0x8737, 0x716B, 0x8B2D, 0xC0BD,
0x632E, 0x6424, 0x2DF7, 0xFDB7, 0x4D13, 0x4994, 0x5476, 0xE5E1,
0x30FF, 0x3A90, 0x48F9, 0x8D3C, 0x6398, 0xEA6D, 0x9351, 0x6E96,
0xC633, 0x5DE6, 0x77D0, 0x624D, 0xFAFF, 0xA230, 0x20F3, 0x4492,
0xA75A, 0xEB82, 0x1549, 0x81D1, 0xFEFE, 0xB779, 0xF024, 0xE4B7,
0x5D03, 0x8023, 0x7BD5, 0x6FCF, 0x74E5, 0x25C8, 0x4D30, 0xF5A3,
0x982D, 0x580D, 0x853B, 0xB7AA, 0x6877, 0x0B9F, 0x222A, 0x811F,
0x38C2, 0x92DD, 0x7DE0, 0x311E, 0x35EB, 0x68F5, 0xF691, 0x748A,
0xF805, 0x962A, 0x385F, 0xFE96, 0xC733, 0x9DF6, 0xD7B9, 0xCF28,
0x82E6, 0x59A0, 0x78DA, 0x739A, 0x23C6, 0xAF3E, 0xA19D, 0x39AC,
0x0297, 0x0AD1, 0xC68E, 0x638A, 0x0EF5, 0xB1F1, 0x1020, 0x8242,
0x4BF5, 0x7D41, 0xC715, 0x1063, 0xDB59, 0xBBA2, 0x15EB, 0xC6F5,
0x3171, 0x2E98, 0xCC1D, 0xF494, 0x60A6, 0x731C, 0x0886, 0xCCAA,
0x55C7, 0x120C, 0x0CAD, 0xAD95, 0xAC8B, 0x817F, 0xFB58, 0xF929,
0x010F, 0xC4D9, 0x003A, 0x2110, 0xE461, 0x7B67, 0x4DF6, 0x3AB9,
0x6D58, 0x6E49, 0xE961, 0x50B7, 0x61C3, 0xD2EF, 0x9107, 0x3F60,
0xE336, 0x1B6D, 0x36E1, 0xF70F, 0xF539, 0x5100, 0x1510, 0x6BA1,
0x181B, 0x9878, 0x621B, 0x0718, 0x0525, 0x64AC, 0x8BC7, 0xB86C,
0xAB23, 0x9085, 0x2372, 0x3DE8, 0xD792, 0xC78A, 0x7535, 0x71B5,
0x8A3D, 0x2F86, 0x5D9A, 0xF666, 0x9618, 0x7F15, 0x9FE3, 0xA151,
0xF176, 0xF531, 0x1914, 0xA32E, 0x4824, 0x1637, 0xEFDB, 0x2EB4,
0xC118, 0xF6C5, 0x85B6, 0x1655, 0x0137, 0xBA0B, 0x5CD7, 0x1215,
0x6593, 0x1D1C, 0xD226, 0x8074, 0x1214, 0x533E, 0x2DDD, 0x2F10,
0x3141, 0xA655, 0x6237, 0x329B, 0x90A0, 0xA84A, 0xE241, 0xBE65,
0xEFA0, 0x1A3A, 0x3EB0, 0x65BB, 0xAC32, 0x4234, 0x7C10, 0x2811,
0x6A22, 0xBA53, 0x1868, 0x0BBA, 0xFAC8, 0xAB80, 0x5EB8, 0xC03F,
0x60E4, 0xC3A3, 0x490D, 0x98CB, 0x7703, 0x95C3, 0x1E2F, 0xEC9B,
0x5640, 0xFA64, 0x96FB, 0x9686, 0xB28A, 0x8BE5, 0x67B8, 0xBBCF,
0x2BA5, 0x55D4, 0xA55A, 0x7762, 0x80E7, 0x6D0E, 0x7232, 0x0494,
0x99A6, 0x0C2C, 0x447F, 0x3608, 0xE274, 0x8934, 0xFC00, 0x0FC0,
0x85FC, 0xCA44, 0xB269, 0x1B23, 0xE785, 0xE562, 0xD9C7, 0x8C4C,
0xD431, 0x2404, 0x7D65, 0x4810, 0x9CD1, 0xCDAE, 0xC30C, 0xAF3D,
0x4656, 0x4801, 0x6C81, 0x7949, 0x9011, 0x08A2, 0x55BB, 0x5B32,
0xFC24, 0x1377, 0xE9CF, 0xB385, 0xDC22, 0x7F73, 0xA27A, 0xEDB4,
0xF488, 0x2ADC, 0xDAA2, 0xE0DB, 0x56C4, 0xDE71, 0xF868, 0x79BA,
0x75A8, 0x53CE, 0x1A7E, 0xC6F1, 0x5870, 0x9CD7, 0xF615, 0x49D3,
0x2360, 0x1176, 0x9731, 0x3934, 0x4F00, 0x14F0, 0xF79F, 0x2AEA,
0xEBAB, 0xA691, 0x7F8A, 0x30B5, 0x30AD, 0x41D5, 0x252F, 0xEB8B,
0x1E6F, 0x40FF, 0x3390, 0xA289, 0x7A25, 0xBD7C, 0xEAFC, 0x5C14,
0x24DE, 0xDD07, 0xDA20, 0x16E2, 0x8F5F, 0xCC86, 0xEEEA, 0x07EB,
0xFC15, 0x5333, 0xD6B6, 0x1EE5, 0x7368, 0x5C6A, 0x50C3, 0x37DF,
0x14CE, 0xD10E, 0xF272, 0xA1D8, 0x8D11, 0x8B72, 0xAC68, 0xE8FA,
0xF11C, 0x3D66, 0x3D08, 0xF5E4, 0x4573, 0xAEDA, 0x12FA, 0x4FBC,
0xDD80, 0x81D8, 0x2B11, 0x4752, 0xAC46, 0x6A86, 0x1DCA, 0x0599,
0x3E46, 0xA6A6, 0x407C, 0x03AC, 0x8237, 0x049B, 0x9FC0, 0x0EFC,
0x9454, 0x4282, 0xCFB9, 0x8EA8, 0xA65E, 0x07DF, 0xE9CE, 0xCADE,
0xB267, 0x8CE6, 0x9940, 0x0694, 0x82C6, 0xAFAE, 0x5E2C, 0x889F,
0x2F7A, 0x4C84, 0x452D, 0x195D, 0x9888, 0x991C, 0xB3E6, 0x8E30,
0x87B3, 0x55FE, 0xE069, 0xD203, 0x9173, 0x539A, 0x61C6, 0x881E,
0xBADB, 0x7E64, 0xE93B, 0x31EA, 0xE81B, 0x7578, 0x8EEB, 0x9985,
0x9782, 0x5409, 0x683D, 0x0866, 0x7238, 0x87F7, 0x3457, 0x244D,
0x001F, 0x4D32, 0x2D44, 0xF019, 0x22EE, 0xCB80, 0x60B8, 0x665F,
0xF276, 0x38C1, 0x3C4D, 0x2D9F, 0x5B4A, 0x9D71, 0x1958, 0xDD09,
0x2ACD, 0xE9C7, 0x154C, 0xA041, 0x6045, 0x738E, 0x5EDA, 0x2DFA,
0xEB6C, 0x78D3, 0x8250, 0x5BF5, 0x9641, 0x1DA5, 0x93F4, 0x610C,
0xDA1D, 0xF074, 0x1114, 0xBEAE, 0xA09C, 0x2F9E, 0xBF13, 0x08B4,
0x3BB8, 0xB50F, 0x3E19, 0xCFCE, 0x783E, 0x82AD, 0xCFF5, 0xBB81,
0x8939, 0xAA40, 0x9FA4, 0x146F, 0x495F, 0x0326, 0xAD04, 0x4475,
0x5B89, 0x1FB5, 0x021D, 0x26F4, 0x23BC, 0x48C0, 0xF18C, 0xAEE5,
0xF468, 0xB57A, 0x28E4, 0x1423, 0x6D15, 0x43C3, 0x650F, 0xC119,
0xB3FE, 0x4549, 0x24D1, 0x7E2E, 0x4554, 0x7212, 0x75B2, 0xFC4C,
0xA331, 0x9DF4, 0x06AC, 0x7CE7, 0xAACE, 0x016E, 0x0FA8, 0x376E,
0x6208, 0x8134, 0xF780, 0xA378, 0x8BCB, 0x3333, 0x14B6, 0x3BC5,
0x7786, 0xEE1A, 0x646E, 0xC158, 0x3F89, 0x85F5, 0xCFE1, 0x799F,
0xEA0A, 0x875D, 0xBA68, 0x37DA, 0xD58A, 0xC615, 0xFED3, 0x02B0,
0x19FB, 0xB5B6, 0x0155, 0x2867, 0x1F46, 0xBA36, 0x515D, 0x0808,
0x3994, 0x8B76, 0xA9D1, 0xD97E, 0x8A61, 0x9BC7, 0x416C, 0x6B33,
0x1836, 0x803D, 0x05E6, 0x6E50, 0xB2B5, 0x03CD, 0x47D7, 0xA845,
0x940E, 0xD622, 0xB513, 0xB014, 0xE41E, 0x3E9B, 0x5D60, 0xED16,
0x06DB, 0x1F24, 0x3127, 0x0D32, 0x2944, 0x25D9, 0x424A, 0xFBE1,
0x685F, 0x2996, 0xEC63, 0xF119, 0xF6FE, 0x72F9, 0x2FDC, 0x1272,
0x73D8, 0x0831, 0x3344, 0xBF79, 0x30A4, 0x63FF, 0x1440, 0xA644,
0x1629, 0x18DF, 0xDE5E, 0xC75F, 0x5406, 0x78A2, 0xECBB, 0xD7A2,
0x9BAB, 0xF191, 0x093A, 0x67A0, 0x71BA, 0xC528, 0x0846, 0x9A46,
0x6666, 0xF518, 0x8605, 0x580A, 0x6E3D, 0x47C6, 0xF77E, 0xEB41,
0x23F5, 0x9EC1, 0x10AD, 0xEFD5, 0xC50F, 0x5719, 0x855E, 0xE14F,
0x3A3D, 0x6286, 0x714A, 0xBED1, 0xBDCE, 0x7A1E, 0x2AFB, 0x53C6,
0xFA3E, 0x6BCD, 0x6257, 0x922D, 0x54AD, 0xD615, 0x57D3, 0x7C40,
0xECC4, 0xFED1, 0x81CE, 0x405E, 0xF67F, 0x8828, 0x5F76, 0x0D11,
0x4372, 0x5FE8, 0xDBB2, 0xC8AC, 0x3007, 0x64D0, 0xEB1D, 0xA004,
0x5B25, 0x470C, 0xE57D, 0xB05A, 0x8612, 0x7AF2, 0x6AE0, 0xBBEE,
0xBF90, 0xE349, 0xEAB1, 0x7CEC, 0xD72B, 0xE7C9, 0xB7F9, 0x142C,
0x60FF, 0x2590, 0xB5A9, 0x3FD7, 0x73C5, 0x5F06, 0x9DD2, 0xAE2E,
0x4054, 0xE342, 0x8D05, 0x4CFA, 0x5F5C, 0xF0AA, 0x0807, 0xAE50,
0xF6B5, 0xFE0D, 0x2A9B, 0xC820, 0x6DC2, 0x3D2D, 0xD4DD, 0x3F00,
0x13F0, 0xF18F, 0x94A1, 0x5BAB, 0x6D91, 0x84FA, 0xB2DC, 0x2F22,
0x59A3, 0x666D, 0x2911, 0xE932, 0x1304, 0x89D5, 0x55AF, 0x7953,
0xA058,
};*/