1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| from sage.all import Zmod, matrix import numpy as np
G = [0x6C6,0xB350,0xFB2A,0xA846,0xABD5,0xFBBA,0xD20,0xB2C4,0xBD5,0xA4F3,0x4064,0xBDCF,0x8511,0x2911,0xC4BD,0x65B6,0x7010,0x1F43,0x20F1,0x7268,0x6EF8,0x1524,0xF6A8,0x3A2,0x37CB,0xC40F,0x9720,0x13D2,0x3AA,0x4671,0xC1FC,0x2147,0xF9EF,0xB8AA,0x81EF,0x1F7A,0xDEAA,0x89BF,0xC101,0x2992,0xE50D,0x80D5,0xA7C2,0x5D2,0x9DF,0xAE25,0xCB5E,0xA5A9,0x9763,0xBAF2,0x86F8,0x9BFC,0x4435,0x70B3,0xAB91,0x44F4,0x4495,0xE241,0x43C9,0xCC02,0xA778,0x5031,0x9994,0xDBE1,0xE6CC,0xF905,0x7ED4,0x713A,0x1E87,0xA621,0xE3C5,0x2DCF,0x95C2,0xF961,0xA7E3,0xFAD7,0x2244,0xE219,0x7FFC,0x4CCD,0x5B2,0x3594,0xF6DD,0x6037,0x2C8F,0x5B3,0x3DB5,0x5361,0x9025,0xDB95,0xB3C9,0x6450,0xAE6E,0xF74F,0xB761,0xF9D0,0xA9,0xF10C,0xECBD,0xC698,0xC22,0x7EB8,0xEAA5,0xAB78,0x437F,0xBF50,0x9DA0,0x70E1,0xDBE8,0x9B40,0xB9A5,0xCBF4,0xE492,0xB5F6,0x919F,0x4B33,0x9EEF,0x5E9A,0xFFC0,0xAB7,0xF3BF,0x8283,0x41DF,0x7773,0x81B4,0xBA07,0xFD6,0x8FD3,0x5D0F,0x33B1,0xF5B0,0xFFBB,0x47B5,0xE9F7,0xD783,0xA9E6,0x96C1,0x1816,0xC30A,0xA3CD,0x7884,0xB1EC,0xC61,0xF77,0xB14A,0x8AFF,0xC779,0x626D,0xD759,0x6C81,0xCC5D,0xBD1A,0x95F5,0x5D61,0x9C9E,0x6293,0x2911,0x9758,0xB6D0,0x5BD4,0x3B98,0xDC7F,0xF27C,0x9816,0xDE49,0x8575,0xD547,0x6E36,0x8635,0x3E95,0xD8C6,0x24C7,0x6B58,0x9CEF,0xEA8C,0x582C,0xC9E0,0xBD3D,0xBC4E,0xD00C,0x3C61,0xC9F7,0xE213,0x4893,0x51C6,0xA72F,0xE1F4,0xF767,0x1A78,0x8D4F,0x423B,0xDA35,0xED13,0x228B,0xCD29,0x9F34,0x997D,0x5D1E,0xC18A,0x6159,0x6986,0x3C38,0xA076,0xFC28,0x6FC4,0x8751,0x96E0,0xFAFD,0x52C6,0x4906,0x1173,0x45C,0xDD70,0x45F3,0x5044,0x92AE,0x428A,0x29D8,0xC652,0x679D,0x213F,0xBF03,0xF0C1,0xE6A,0xBDD8,0x4591,0xB5B9,0x2558,0xA92D,0xC886,0xC02F,0x89CF,0x5395,0xC578,0x2078,0x4ADF,0xC6FF,0x6EC1,0x4A15,0x1309,0xFDED,0x468C,0x8FEB,0xAEEA,0xD873,0x1B87,0xE75B,0x80B5,0x236D,0x7097,0x6857,0x6B43,0x2BC,0x91EA,0xB01D,0x777A,0xB692,0x3918,0xD1CF,0x959E,0x572,0x59C7,0xD4FA,0xD9AB,0x904F,0x5D27,0x396C,0x4B82,0x85F2,0xA2F0,0xC88A,0x88E5,0xF4E2,0x6988,0x6496,0x4035,0x3D0E,0x15DC,0xB6DD,0xCBE4,0x2D92,0x418F,0x9AD4,0xAEDC,0xFA46,0x25E7,0x22A8,0xAEE5,0x1798,0xDFBD,0xCD93,0x58E,0x27DC,0xEAFF,0xAB5A,0x37AB,0xB78F,0x5E02,0x8E73,0x3AEC,0xF80C,0x711A,0x914C,0xDD62,0xE2D3,0x6DFE,0x3597,0x25C5,0xAD18,0xE45F,0x3808,0xEB56,0x33EA,0x6D19,0xFBCC,0xA388,0xB0FD,0xC271,0xED90,0x4095,0x440F,0x262D,0xB512,0x623A,0x6410,0x62A5,0x6995,0xA000,0xBAF9,0xE445,0x2465,0xA65E,0xB603,0xC209,0xB159,0x6C32,0x11D,0x3C2E,0xB23D,0xB479,0x9D4F,0xEF2F,0x833E,0xFE0F,0x2EB3,0x8B7B,0x61DB,0x1DC6,0x6534,0x37F1,0x908F,0xD7D,0xD25A,0xC690,0xB29,0x3220,0x97F,0x321A,0xCAC4,0x7AB,0x73AE,0xDB4E,0x4A65,0x96A0,0x64F0,0x5F45,0x1E77,0x2DE3,0xDD0C,0xA4C8,0x33DF,0xFACF,0x29B1,0x7CB,0x24AB,0x2A19,0x43F2,0x3293,0xC952,0x83EE,0xE01,0x424C,0x2CCC,0x21CB,0x701F,0x4A27,0x4E30,0x4ADC,0x846,0xDA65,0xE1F1,0xD6CF,0x15C1,0xED78,0xCFF2,0x1C69,0xEF05,0xDD53,0x2BB9,0x1401,0xEFD,0x7031,0xEFD9,0x5790,0x14B8,0xA5C6,0xFA73,0x1F8C,0x6171,0xA46B,0xC524,0x8A78,0x2DC3,0x61BC,0x4A2,0xDDC4,0x73C4,0x8C50,0xCFBC,0x3388,0x73F0,0xE94C,0x85CE,0x20BC,0x8F08,0x67E7,0xE5C8,0x69BD,0x46BF,0x69E4,0xF024,0xF5BB,0xAB91,0xC32,0x57E8,0xCC30,0xC68A,0xA5F3,0xEFBF,0x5F74,0xE7F,0x397F,0xF02B,0x2E51,0xFFE,0x32CE,0xF66A,0xA69D,0x93B1,0xE53F,0xF854,0x60B8,0xA7A2,0xEF57,0x6A86,0xC3CA,0x93E4,0xB2F1,0x590,0x8CC5,0xEEB7,0x663D,0x6311,0xDB16,0x9294,0x8299,0xBD,0xFCA1,0xD53F,0x7E60,0xFF44,0xA42C,0xA8F1,0x5175,0xE9A0,0xEB14,0xDB64,0xB072,0x3179,0x59D2,0xB7FF,0x2EE0,0xFD00,0x42FD,0x17FB,0xA871,0xD3CE,0x73B9,0x532C,0x2449,0x45A8,0xE49A,0xC3CB,0x4497,0x5841,0x11D7,0x7D08,0x46C3,0xCF5E,0x705C,0xC024,0xD07C,0x7F16,0x9D97,0x3E91,0x249F,0xE9A7,0x14E5,0x8C35,0x7A6D,0xF3E9,0xB8F6,0xDCDD,0x449D,0xA524,0xF38,0x4510,0x589D,0x78A1,0x4ABA,0xA3E5,0x9D3,0xF34B,0x5705,0xDA4D,0x3330,0x1949,0x2949,0xCE6C,0x5299,0x340,0xC795,0x98C2,0xD611,0x6212,0xB043,0x3253,0xFCF1,0x593C,0x3496,0x8D5,0xF597,0x7436,0xE146,0xCE9A,0xFDF3,0xB57C,0x59AA,0x8F34,0x6A4E,0x22F9,0xDB15,0x2CA,0x1DE0,0x1E5B,0x3A0F,0xAB47,0x7280,0x16BD,0x826B,0xFFEF,0x69A4,0xE62,0x674E,0xCDC3,0x2381,0x1187,0x12CC,0xD668,0x4DCF,0x89AC,0x75B6,0x95CD,0x1915,0xD51E,0x78B2]
I = [0xFFFFFF8D, 0x0, 0xF, 0x1, 0xFFFFFFEB, 0x31, 0xFFFFFFE8, 0x5, 0x2A, 0xFFFFFFFE, 0xFFFFFFF0, 0xFFFFFFF7, 0x28, 0x2E, 0x38, 0xFFFFFFDE, 0x10, 0xFFFFFFE7, 0x27, 0x1A, 0x17, 0x2A, 0xFFFFFFC8, 0x0, 0xFFFFFFE1, 0xFFFFFFF1, 0x7, 0xFFFFFFF2, 0xB, 0x16, 0xD, 0xFFFFFFDF, 0xFFFFFFF7, 0x28, 0x1F, 0x36, 0xFFFFFFED, 0xFFFFFFE6, 0xFFFFFFEC, 0xC, 0x1E, 0xE, 0x2C, 0xFFFFFFF2, 0x31, 0xFFFFFFFC, 0xFFFFFFFC, 0x19, 0x35, 0x8, 0xFFFFFFD3, 0x14, 0xFFFFFFFB, 0x3A, 0x10, 0xFFFFFFF1, 0x12, 0x3B, 0x2D, 0x17, 0x32, 0x33, 0xFFFFFFDF, 0xB, 0x2E, 0xFFFFFFDE, 0xFFFFFFF1, 0xFFFFFFF7, 0xFFFFFFD2, 0xFFFFFFCE, 0x3, 0xFFFFFFDD, 0x9, 0x27, 0xFFFFFFF3, 0xFFFFFF81, 0x13, 0xFFFFFFD8, 0x1E, 0x15, 0xFFFFFFD8, 0x20, 0x25, 0xFFFFFFEC, 0x1E, 0x1E, 0x1D, 0x19, 0x3, 0x12, 0xFFFFFFF4, 0xFFFFFFC6, 0xFFFFFFD4, 0xFFFFFFB4, 0x27, 0xFFFFFFC9, 0xFFFFFFEE, 0xFFFFFFDE, 0x4, 0xFFFFFFF0, 0xFFFFFFED, 0xFFFFFFF7, 0xFFFFFFFC, 0xFFFFFFDD, 0x1F, 0xFFFFFFE0, 0x0, 0x3B, 0x5, 0x17, 0x1D, 0xFFFFFFD8, 0xFFFFFFE2, 0xFFFFFFFF, 0x36, 0xFFFFFFF3, 0xFFFFFFFF, 0xFFFFFFE1, 0x24, 0x38, 0x11, 0x10, 0xFFFFFFD8, 0x12, 0x9, 0xFFFFFF7F, 0x24, 0xFFFFFFDF, 0x0, 0xFFFFFFE9, 0x17, 0x2B, 0x3, 0x1E, 0xA, 0xFFFFFFFC, 0xFFFFFFD8, 0x3, 0xFFFFFFD6, 0xFFFFFFD8, 0xA, 0xFFFFFFEA, 0x1C, 0xFFFFFFDC, 0x18, 0xFFFFFFFA, 0xFFFFFFEC, 0xFFFFFFFE, 0xFFFFFFE7, 0x11, 0xFFFFFFCB, 0xFFFFFFFA, 0xFFFFFFEE, 0x31, 0xFFFFFFF0, 0xE, 0xFFFFFFFF, 0x1B, 0xFFFFFFF4, 0xFFFFFFB8, 0xFFFFFFF6, 0xFFFFFFDA, 0xFFFFFFFC, 0x0, 0x35, 0x1A, 0x17, 0xFFFFFFE4, 0x38, 0x1A, 0x2, 0x39, 0xFFFFFFDA, 0xFFFFFFEE, 0xE, 0xFFFFFF85, 0x30, 0x26, 0xFFFFFFE3, 0xFFFFFFF4, 0xFFFFFFF4, 0x12, 0xFFFFFFDA, 0x1F, 0x3B, 0xFFFFFFE5, 0xFFFFFFD4, 0xFFFFFFC8, 0x1B, 0xFFFFFFDF, 0xFFFFFFE3, 0x13, 0x36, 0x16, 0xFFFFFFF2, 0xFFFFFFE3, 0x10, 0xFFFFFFE1, 0x2E, 0x1E, 0xFFFFFFDE, 0x48, 0xFFFFFFA2, 0x18, 0x29, 0x34, 0xFFFFFFF7, 0xFFFFFFF3, 0xFFFFFFDF, 0xFFFFFFF7, 0x38, 0xFFFFFFFB, 0x19, 0x36, 0x3, 0x2B, 0xFFFFFFF3, 0x31, 0x38, 0x24, 0x2B, 0xFFFFFFE5, 0x35, 0xFFFFFFF1, 0x7, 0xFFFFFFA2, 0x53, 0xFFFFFFE4, 0xFFFFFFE4, 0x1F, 0x17, 0xFFFFFFE3, 0x2C, 0xFFFFFFD8, 0xFFFFFFE1, 0x3, 0x0, 0x3A, 0x3C, 0xFFFFFFD6, 0xFFFFFFD8, 0xFFFFFFE5, 0x37, 0x2E, 0xFFFFFFDC, 0xFFFFFFEA, 0xFFFFFFD3, 0x19, 0xFFFFFFF7, 0x16, 0x18, 0xFFFFFFFE, 0xC, 0xFFFFFFE2, 0x23, 0x20, 0xB, 0xFFFFFFFE, 0x1D, 0xFFFFFFE0, 0xFFFFFFDF, 0x2A, 0xFFFFFFCB, 0x16, 0xFFFFFFDE, 0xFFFFFFE2, 0x21, 0xFFFFFFFE, 0x2, 0x17, 0xFFFFFFE4, 0x3A, 0xFFFFFFA1, 0xFFFFFFF9, 0x14, 0x17, 0xFFFFFFF0, 0x39, 0xFFFFFFF4, 0xFFFFFFB5, 0xFFFFFFFD, 0x13, 0xFFFFFFE6, 0x3A, 0x31, 0xFFFFFFED, 0x2D, 0x21, 0x39, 0x15, 0x2F, 0x10, 0x12, 0xF, 0xFFFFFFEA, 0x6, 0x3B, 0xFFFFFFF4, 0xFFFFFFE7, 0x2D, 0x27, 0x1, 0x1B, 0xFFFFFFFE, 0x29, 0xFFFFFFB7, 0x19, 0x6, 0x8, 0xFFFFFFE8, 0x9, 0xB, 0xFFFFFFE3, 0x28, 0xFFFFFFE6, 0x1A, 0xFFFFFFB3, 0xFFFFFFD3, 0xFFFFFFA8, 0xFFFFFFE2, 0xFFFFFFA1, 0x22, 0xFFFFFFE4, 0x1, 0xFFFFFFD8, 0xFFFFFF8F, 0x2, 0x6, 0xFFFFFFFA, 0xFFFFFFFC, 0xFFFFFFDE, 0x1B, 0xFFFFFFDB, 0xFFFFFFF4, 0xFFFFFFF5, 0x23, 0x1B, 0x2, 0x9, 0xD, 0xFFFFFFE1, 0xFFFFFFFA, 0xC, 0xFFFFFFF2, 0xFFFFFFF0, 0xFFFFFFF6, 0x22, 0xFFFFFFF7, 0x19, 0xFFFFFFED, 0xFFFFFF8D, 0xFFFFFFF7, 0xFFFFFFEA, 0xFFFFFFFF, 0x9, 0x29, 0xFFFFFFD2, 0xFFFFFFCB, 0xFFFFFFC4, 0x1C, 0xFFFFFFDC, 0xFFFFFFEA, 0x12, 0x22, 0x19, 0x30, 0x32, 0x1B, 0xFFFFFFCD, 0xFFFFFFE8, 0x2D, 0x47, 0xFFFFFFDA, 0xFFFFFFF1, 0x20, 0x33, 0xFFFFFFE8, 0xF, 0x2D, 0x5, 0xFFFFFFC9, 0x17, 0x8, 0x26, 0x2B, 0x13, 0x16, 0xFFFFFFD9, 0xFFFFFFDB, 0xFFFFFFF2, 0xFFFFFFFC, 0xFFFFFFDE, 0x8, 0xFFFFFFED, 0xFFFFFFF3, 0x2B, 0xFFFFFFDC, 0xFFFFFFD9, 0x1C, 0x18, 0x3F, 0xFFFFFFCA, 0x8, 0xFFFFFFE9, 0xFFFFFFE5, 0xFFFFFFCE, 0x22, 0x24, 0x26, 0xFFFFFFFB, 0x28, 0xFFFFFFFD, 0xFFFFFFF8, 0xFFFFFFFA, 0x23, 0xFFFFFFEF, 0x1A, 0x23, 0x1E, 0xFFFFFFED, 0xFFFFFFDB, 0x8, 0x0, 0xFFFFFFE3, 0xFFFFFFC7, 0xFFFFFFC3, 0xFFFFFFCA, 0x0, 0xFFFFFFF0, 0x3B, 0xFFFFFFF3, 0xFFFFFFD9, 0xFFFFFFF2, 0xFFFFFFE6, 0x37, 0x0, 0x3A, 0x18, 0x27, 0x15, 0x2C, 0xFFFFFFEA, 0x16, 0xFFFFFFDA, 0xFFFFFFEF, 0x3, 0x39, 0xFFFFFFEC, 0xFFFFFFF6, 0x2, 0xE, 0xFFFFFFF6, 0x15, 0xFFFFFFD8, 0x8, 0x15, 0xFFFFFFE2, 0xFFFFFFEE, 0xFFFFFFDD, 0xFFFFFFEB, 0xFFFFFFFD, 0xFFFFFFFD, 0xFFFFFFF8, 0x2D, 0xFFFFFFE4, 0x8, 0x14, 0xFFFFFFDA, 0xFFFFFFE3, 0xFFFFFFD8, 0xFFFFFFD8, 0x45, 0x14, 0xFFFFFFED, 0x1C, 0x16, 0xF, 0xD, 0xFFFFFFDE, 0xFFFFFFE6, 0xFFFFFFE3, 0xFFFFFFED, 0xFFFFFFE0, 0xFFFFFFF2, 0x26, 0xFFFFFFDB, 0x1B, 0x36, 0xFFFFFFE2, 0xFFFFFFDA, 0x38, 0x27, 0xFFFFFFF1, 0x2B, 0xFFFFFFDD, 0xFFFFFFFD, 0x1F, 0xFFFFFFCB, 0xFFFFFFF7, 0xFFFFFFD1, 0xFFFFFFC6, 0x3, 0xC, 0x19, 0x2D, 0x34, 0xFFFFFFDA, 0xFFFFFFF6, 0xE, 0xFFFFFFEF, 0xFFFFFFE3, 0xC, 0x29, 0x17, 0xFFFFFFD9, 0x10, 0xFFFFFFE2, 0x5, 0x3, 0x1B, 0x5, 0x15, 0x10, 0x29, 0x21, 0xFFFFFF80, 0x11, 0x17, 0x22, 0x33, 0x17, 0x16, 0x14, 0xFFFFFFFE, 0x27, 0x37, 0xE, 0x28, 0x30, 0x38, 0x39, 0x4, 0x25, 0xFFFFFFE9, 0x1B, 0x2, 0x5, 0x23, 0x1B, 0xFFFFFFF0, 0xFFFFFFBE, 0xFFFFFFD9, 0xF, 0x28, 0xFFFFFFE8, 0xFFFFFFE3, 0xFFFFFFFE, 0xFFFFFFFB, 0x36, 0xFFFFFFE7, 0x14, 0x3B, 0xFFFFFFF8, 0x8, 0xFFFFFFF5, 0xFFFFFFFC, 0xF, 0x3A, 0x2A, 0xFFFFFFDA, 0xFFFFFFF5, 0x1F, 0x32, 0x6, 0x25, 0xFFFFFFC8] I= np.array(I).reshape(-1,24)
E = [0x54,0x12,0x2,0x2,0x4C,0x41,0x33,0x51,0x3F,0xC,0x6,0x18,0x40,0x43,0x34,0x47,0x5F,0x22,0x62,0x21,0x5E,0x1A,0x27,0x4D,0x33,0x56,0x48,0x2C,0x10,0x4,0x49,0x2,0x1C,0x28,0x4D,0x1C,0x3F,0x2B,0x17,0x19,0x27,0x42,0x52,0x46,0x3C,0x0,0x39,0x41,0x29,0x9,0x62,0x27,0x15,0x17,0x1A,0x1D,0x19,0x48,0x56,0x12,0x0,0x4,0x37,0x4A,0x3F,0x0,0x4B,0x19,0x3F,0x37,0x39,0x24,0xE,0x59,0x15,0xB8,0x11,0x3D,0x9,0x21,0x46,0x25,0x63,0x3F,0x4,0x17,0x59,0x5F,0x3E,0x61,0x51,0x1E,0x52,0x36,0x1,0x1B,0x25,0xC,0x13,0x3A,0x8C,0x61,0x44,0x2E,0x22,0x22,0x3E,0x62,0x39,0x56,0x3E,0x1E,0x2C,0x3B,0x32,0xD,0x32,0x4F,0x4C,0x43,0x60,0x32,0x2D,0x15,0x55,0xAE,0x6,0x5A,0x22,0x11,0x53,0x55,0x2F,0x1B,0x1D,0x13,0xB,0x26,0x38,0x21,0x59,0xA,0x33,0x52,0x62,0xF,0x18,0x53,0x2B,0x2C,0x8A,0x1,0x34,0x49,0x4D,0x3,0x25,0x9,0x3F,0x18,0x5D,0x3C,0x2C,0x24,0x44,0x11,0x1,0x18,0x28,0x38,0x3A,0x4D,0x1F,0x45,0xF,0x10,0x34,0xC,0x1A,0x2E,0x5E,0x1,0x31,0x59,0x6,0x33,0x39,0x7,0x5,0x4A,0xB,0x35,0x62,0x41,0x1B,0x15,0x60,0x31,0x19,0x27,0x9C,0x4D,0x27,0x4F,0x4F,0x21,0x7,0x38,0x63,0x32,0x2A,0x58,0xF,0x2F,0x5F,0x15,0x3B,0x11,0x4F,0x5E,0x2D,0x5,0xF,0xE,0x29,0x42,0x26,0x3C,0x13,0x4F,0x12,0x2B,0x41,0x11,0x9,0x6,0x41,0x38,0xE,0x7,0x44,0x2B,0x1,0x3E,0x1A,0x53,0x43,0x2C,0x3,0xC,0x32,0x0,0x4F,0xF,0x5B,0x60,0x58,0x47,0x4B,0x10,0x6,0xA,0x31,0x47,0x19,0x10,0x35,0xA,0x4E,0x6,0x17,0x7,0x56,0x4C,0x3B,0x58,0x18,0x18,0x2E,0x4B,0x50,0x8,0x42,0x1D,0x2E,0x59,0x59,0x34,0x5E,0x16,0x42,0x4,0x12,0x47,0x20,0x21,0x2,0x20,0x34,0x5,0x78,0x44,0x15,0x40,0x60,0x2A,0x59,0x27,0x17,0x62,0x5B,0x60,0x17,0x4B,0x46,0x8,0x27,0x55,0x59,0x42,0xB,0x60,0x1E,0x58,0x51,0x96,0x3D,0x19,0x32,0x30,0x55,0x56,0x56,0x50,0x41,0x1C,0x4C,0x6,0x0,0x4C,0x5,0x2A,0x18,0x35,0x12,0x51,0x3,0x19,0x52,0x34,0x46,0x8,0xD,0x56,0x3A,0x36,0x49,0x2B,0x47,0x46,0x47,0x15,0x48,0x53,0x4A,0x18,0x24,0x43,0x9,0x28,0x18,0x26,0xC,0x36,0x5,0x70,0x61,0x4D,0x11,0x27,0x23,0x39,0x13,0x58,0x43,0x1D,0xB,0x34,0xF,0x19,0x36,0x25,0x58,0x43,0x55,0x58,0x3A,0x40,0x53,0x33,0x52,0xA,0x36,0x59,0x3B,0x9,0x31,0x59,0x4F,0x56,0x4D,0x16,0x54,0x59,0x1F,0x1B,0x41,0x60,0xA,0x51,0x4C,0x47,0x11,0x4E,0x46,0x7A,0xC,0x3D,0x19,0xE,0x2C,0x29,0x4E,0x17,0x19,0x3F,0x7,0xB,0x2E,0x28,0x52,0x4,0x5E,0x5E,0x5B,0x7,0x1D,0xC,0x4,0x0,0x12,0x22,0x4E,0x49,0x25,0x34,0x47,0x6,0x37,0x2D,0x29,0x2,0x5E,0x34,0x30,0x16,0x16,0x49,0x3B,0x1,0x4C,0x10,0x41,0x43,0x1E,0x22,0x34,0x5C,0x21,0x2,0x5F,0x18,0x22,0xB,0x26,0x5,0x2,0x4A,0x3B,0x3C,0xB,0x1C,0x4B,0x32,0x5B,0x15,0x37,0x22,0x20,0x5C,0xC0,0x5C,0x28,0x4B,0x36,0x10,0x53,0x5C,0x1C,0x51,0x0,0x4F,0x51,0x5B,0x1A,0x21,0x52,0x22,0x3E,0xC,0xF,0x1E,0x34,0xD,0x18,0x1E,0x4B,0x30,0x5C,0x29,0x14,0x5A,0x54,0x2E,0x27,0xE,0x5F,0x33,0x1F,0x1C,0x36,0x40,0x3D,0x40,0x10,0x5B,0x44,0xA,0x25,0x42,0x30,0x4,0x4,0x10,0x33,0x5B,0x9,0x2E,0x1A,0x3B,0x2D,0x58,0x59,0x8,0x5B,0x22,0x20,0x0,0x3A,0x43,0x2F,0x2F,0xB,0x54,0x18,0x8A] E = np.array(E).reshape(-1,24)
B = [0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1] B = np.array(B).reshape(-1,24)
init = [0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x43,0x30,0x44,0x33,0x47,0x41,0x54,0x33,0x43,0x30,0x44,0x33,0x47,0x41,0x54,0x33,0x43,0x30,0x44,0x33,0x47,0x41,0x54,0x33,0x0,0x0,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x43,0x0,0x0,0x44,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x0,0x0,0x33,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x44,0x0,0x0,0x47,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x33,0x0,0x0,0x41,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x47,0x0,0x0,0x54,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x41,0x0,0x0,0x33,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x54,0x0,0x0,0x43,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x33,0x0,0x0,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x43,0x0,0x0,0x44,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x0,0x0,0x33,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x44,0x0,0x0,0x47,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x33,0x0,0x0,0x41,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x47,0x0,0x0,0x54,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x41,0x0,0x0,0x33,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x54,0x0,0x0,0x43,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x33,0x0,0x0,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x43,0x0,0x0,0x44,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x0,0x0,0x33,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x44,0x0,0x0,0x47,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x33,0x0,0x0,0x41,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x47,0x0,0x0,0x54,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x41,0x0,0x0,0x33,0x43,0x30,0x44,0x33,0x47,0x41,0x54,0x33,0x43,0x30,0x44,0x33,0x47,0x41,0x54,0x33,0x43,0x30,0x44,0x33,0x47,0x41,0x54,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] init = np.array(init).reshape(-1,26)
K = [0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x13, 0x3D, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x1, 0xC, 0x3D, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x4, 0xC, 0xC, 0x36, 0x36, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x50, 0xC, 0xC, 0xC, 0xC, 0x3D, 0x6, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x5, 0x41, 0xC, 0x3D, 0x36, 0x3D, 0x12, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0xC, 0x3D, 0xC, 0x36, 0xC, 0x1F, 0x13, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x4F, 0x3B, 0x3B, 0x3B, 0x18, 0xC, 0x36, 0xC, 0x3D, 0x36, 0x1C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3E, 0x54, 0x3B, 0x3B, 0x3B, 0x3B, 0x3F, 0x3D, 0x36, 0xC, 0x3D, 0x3D, 0x38, 0x37, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x16, 0x54, 0x3, 0x54, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x51, 0xC, 0x3D, 0x3D, 0x3D, 0x3D, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x43, 0x54, 0x54, 0x54, 0x54, 0x44, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x34, 0x3D, 0x3D, 0xC, 0x3B, 0x3B, 0x3B, 0x3B, 0x29, 0x3, 0x3, 0x54, 0x3, 0x32, 0x3C, 0x3B, 0x3B, 0x3B, 0x3B, 0x26, 0x46, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x19, 0x1F, 0x3B, 0x3B, 0x37, 0x54, 0x54, 0x54, 0x3, 0x49, 0x1, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x12, 0x49, 0x2F, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3D, 0x42, 0x2F, 0x3, 0x54, 0x54, 0x3F, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x26, 0x54, 0xC, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x10, 0x32, 0x3, 0x3, 0x3, 0x54, 0x41, 0x40, 0x3B, 0x3B, 0x3B, 0x6, 0x10, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x27, 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0xD, 0x32, 0x42, 0x3, 0x54, 0x54, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x1D, 0x27, 0x27, 0x4B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x20, 0x32, 0x54, 0x49, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x47, 0x24, 0x24, 0x24, 0x24, 0x4B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x4C, 0x44, 0x3B, 0x3B, 0x3B, 0x3B, 0x53, 0x24, 0x24, 0x24, 0x24, 0x27, 0x4A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x22, 0x27, 0x24, 0x27, 0x24, 0x24, 0xF, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x4D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x22, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x4F, 0x21, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x9, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x14, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x52, 0x24, 0x24, 0x24, 0x24, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x4E, 0x24, 0x24, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0xA] K = np.array(K).reshape(-1,24)
H = (K - I) & 0xffff
G=np.array(G).reshape(-1,24).tolist() Fp = Zmod(2**16 - 1) G_T = [list(row) for row in ~matrix(Fp, G)] G_T = np.array(G_T).reshape(-1,24)
F = H @ G_T
D = F - E
D = np.rot90(D,k=-1)
B_T = [list(row) for row in ~matrix(Fp, B)] B_T = np.array(B_T).reshape(-1,24)
C = B_T @ D
A = C @ B_T
A = np.rot90(A,k=1)
print(A)
from z3 import *
s = Solver()
var = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 67, 48, 68, 51, 71, 65, 84, 51, 67, 48, 68, 51, 71, 65, 84, 51, 67, 48, 68, 51, 71, 65, 84, 51, 0], [0, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 67, 0], [0, 68, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 48, 0], [0, 51, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 68, 0], [0, 71, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 51, 0], [0, 65, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 71, 0], [0, 84, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 65, 0], [0, 51, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 84, 0], [0, 67, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 51, 0], [0, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 67, 0], [0, 68, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 48, 0], [0, 51, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 68, 0], [0, 71, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 51, 0], [0, 65, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 71, 0], [0, 84, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 65, 0], [0, 51, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 84, 0], [0, 67, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 51, 0], [0, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 67, 0], [0, 68, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 48, 0], [0, 51, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 68, 0], [0, 71, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 51, 0], [0, 65, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 71, 0], [0, 84, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 65, 0], [0, 51, 67, 48, 68, 51, 71, 65, 84, 51, 67, 48, 68, 51, 71, 65, 84, 51, 67, 48, 68, 51, 71, 65, 84, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
for i in range(2,25): for j in range(2,25): var[i][j] = BitVec(f"s{i}_{j}",8)
for i in range(24): for j in range(24): s.add(A[i][j] == var[i + 2][j + 2]+ var[i + 2][j + 1]+ var[i + 2][j] + var[i + 1][j + 2]+ var[i + 1][j + 1] + var[i + 1][j]+ var[i][j + 2]+ var[i][j + 1] + var[i][j])
flag = ""
if s.check() == sat : m = s.model() for i in range(2,25): for j in range(2,25): flag += chr(m[var[i][j]].as_long())
print(flag)
""" C0DEGATE 1s a gl0ba1 iCnternationa1 hacking d03f3ns3 competition andD 5ecurity conference. 3Held annually since 20G08, C0D3GAT3 is known Aas the Olympics for haTckers, wh3re hack3rs a3nd security 3xperts frCom around the world ga0th3r t0 c0mpet3 for thDe title of the w0rld's3 best hack3r. In additGion to fierce competitAion among tru3 white-hTat hackers, a juni0r d3ivision is also he1d, Cs3rv1ng as a p1atform 0f0r discover1ng talentDed 1ndividuals 1n th3 3fi3ld of cyb3rsecurityG. You are good hacker.AC0D3GAT3C0D3GAT3C0D3GAT """
|