From ae9a50328098c343910b032c837fd79002ea92ce Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 29 Jun 2026 14:15:58 +0200 Subject: [PATCH] minor style, feedback --- client/src/frame_data.h | 64 +++++++++++++++ client/src/mifare/mifare4.c | 150 +++++++++++++++++++++++++----------- 2 files changed, 168 insertions(+), 46 deletions(-) create mode 100644 client/src/frame_data.h diff --git a/client/src/frame_data.h b/client/src/frame_data.h new file mode 100644 index 000000000..dbe60e967 --- /dev/null +++ b/client/src/frame_data.h @@ -0,0 +1,64 @@ +//----------------------------------------------------------------------------- +// Copyright (C) Proxmark3 contributors. See AUTHORS.md for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// See LICENSE.txt for the text of the license. +//----------------------------------------------------------------------------- +// Frame data values +//----------------------------------------------------------------------------- + + +#ifndef FRAME_DATA_H +#define FRAME_DATA_H + +#define FW 91 +#define FH 33 + +typedef struct { unsigned char ch, has, r, g, b, fire; } Cell; + +static const Cell FRAME[FH][FW] = { + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{38,1,117,45,47,0},{38,1,114,45,45,0},{38,1,79,25,22,0},{88,1,84,57,41,0},{36,1,111,80,67,0},{38,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{32,1,102,82,75,0},{46,1,60,144,255,1},{43,1,51,152,255,1},{43,1,81,169,255,1},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,200,91,75,0},{38,1,131,50,45,0},{38,1,52,46,49,0},{38,1,72,27,30,0},{88,1,184,12,2,0},{43,1,230,1,0,0},{120,1,200,20,16,0},{36,1,114,41,30,0},{36,1,101,58,33,0},{43,1,127,71,39,0},{38,1,99,64,48,0},{38,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{32,1,84,84,86,0},{43,1,55,142,255,1},{32,1,55,142,255,0},{32,1,55,142,255,0},{59,1,76,177,255,1},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{120,1,190,155,123,0},{120,1,215,187,147,0},{120,1,232,215,177,0},{88,1,222,208,169,0},{88,1,209,189,150,0},{59,1,209,179,138,0},{38,1,137,105,82,0},{38,1,59,53,53,0},{38,1,50,53,56,0},{58,1,255,171,102,0},{38,1,102,46,30,0},{88,1,195,43,19,0},{36,1,104,34,29,0},{36,1,107,22,14,0},{38,1,81,30,26,0},{36,1,87,52,31,0},{38,1,51,51,51,0},{38,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{32,1,86,93,95,0},{59,1,71,156,255,1},{58,1,102,190,255,1},{58,1,115,200,255,1},{58,1,83,173,255,1},{32,1,83,173,255,0},{32,1,83,173,255,0},{32,1,83,173,255,0},{59,1,56,146,255,1},{32,1,56,146,255,0},{46,1,167,232,255,1},{43,1,92,180,255,1},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{120,1,187,151,116,0},{59,1,236,210,163,0},{58,1,255,239,188,0},{32,1,255,239,188,0},{32,1,255,239,188,0},{32,1,255,239,188,0},{32,1,255,239,188,0},{32,1,255,239,188,0},{120,1,237,212,164,0},{88,1,204,141,99,0},{38,1,117,71,54,0},{58,1,197,127,72,0},{59,1,255,171,103,0},{58,1,255,212,132,0},{36,1,140,119,97,0},{43,1,125,45,38,0},{88,1,137,25,20,0},{38,1,61,37,39,0},{36,1,54,60,67,0},{38,1,107,112,116,0},{32,1,107,112,116,0},{32,1,107,112,116,0},{32,1,107,112,116,0},{32,1,107,112,116,0},{32,1,107,112,116,0},{32,1,107,112,116,0},{88,1,187,110,72,0},{43,1,167,95,50,0},{59,1,220,134,78,0},{88,1,161,99,55,0},{32,1,161,99,55,0},{32,1,161,99,55,0},{32,1,161,99,55,0},{32,1,161,99,55,0},{32,1,161,99,55,0},{32,1,161,99,55,0},{32,1,161,99,55,0},{32,1,161,99,55,0},{32,1,161,99,55,0},{43,1,63,163,255,1},{43,1,61,161,255,1},{32,1,61,161,255,0},{32,1,61,161,255,0},{32,1,61,161,255,0},{59,1,64,137,255,1},{58,1,53,145,255,1},{32,1,53,145,255,0},{46,1,157,226,255,1},{43,1,59,145,255,1},{32,1,59,145,255,0},{32,1,59,145,255,0},{32,1,59,145,255,0},{59,1,52,154,255,1},{32,1,52,154,255,0},{58,1,155,223,255,1},{43,1,65,162,255,1},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,192,158,140,0},{59,1,195,160,122,0},{46,1,255,245,194,0},{46,1,176,150,111,0},{88,1,152,83,50,0},{120,1,211,117,69,0},{43,1,255,174,100,0},{46,1,255,204,117,0},{46,1,255,218,123,0},{58,1,255,209,119,0},{43,1,255,179,104,0},{32,1,255,179,104,0},{43,1,185,101,59,0},{36,1,139,77,41,0},{58,1,234,140,89,0},{58,1,255,168,101,0},{43,1,211,141,81,0},{58,1,172,103,59,0},{32,1,172,103,59,0},{36,1,114,107,105,0},{32,1,114,107,105,0},{32,1,114,107,105,0},{32,1,114,107,105,0},{32,1,114,107,105,0},{32,1,114,107,105,0},{32,1,114,107,105,0},{32,1,114,107,105,0},{36,1,89,58,37,0},{43,1,151,82,44,0},{88,1,192,126,69,0},{88,1,155,84,46,0},{88,1,141,95,69,0},{46,1,176,117,92,0},{32,1,176,117,92,0},{32,1,176,117,92,0},{32,1,176,117,92,0},{32,1,176,117,92,0},{32,1,176,117,92,0},{32,1,176,117,92,0},{32,1,176,117,92,0},{43,1,41,118,252,1},{58,1,76,172,255,1},{32,1,76,172,255,0},{58,1,133,216,255,1},{32,1,133,216,255,0},{32,1,133,216,255,0},{32,1,133,216,255,0},{59,1,79,145,255,1},{58,1,103,187,255,1},{32,1,103,187,255,0},{59,1,115,206,255,1},{43,1,81,168,255,1},{32,1,81,168,255,0},{32,1,81,168,255,0},{43,1,46,130,255,1},{46,1,108,194,255,1},{32,1,108,194,255,0},{59,1,109,203,255,1},{43,1,1,94,246,1},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,192,160,140,0},{58,1,220,188,144,0},{32,1,220,188,144,0},{36,1,121,82,51,0},{59,1,250,137,84,0},{58,1,255,181,106,0},{58,1,255,160,98,0},{58,1,255,166,99,0},{46,1,255,176,105,0},{46,1,255,181,106,0},{58,1,255,168,100,0},{59,1,255,156,93,0},{59,1,255,187,107,0},{59,1,255,205,115,0},{58,1,255,201,115,0},{43,1,255,182,107,0},{88,1,220,136,84,0},{120,1,181,99,61,0},{88,1,186,103,56,0},{58,1,172,107,66,0},{46,1,191,118,82,0},{120,1,239,151,86,0},{59,1,255,192,111,0},{59,1,255,191,109,0},{59,1,255,179,106,0},{32,1,255,179,106,0},{58,1,131,95,82,0},{38,1,49,52,57,0},{59,1,252,187,108,0},{58,1,224,164,98,0},{88,1,174,104,65,0},{43,1,234,156,101,0},{32,1,234,156,101,0},{32,1,234,156,101,0},{32,1,234,156,101,0},{43,1,79,155,255,1},{32,1,79,155,255,0},{58,1,156,227,255,1},{43,1,50,137,255,1},{32,1,50,137,255,0},{32,1,50,137,255,0},{43,1,71,156,255,1},{58,1,84,185,255,1},{32,1,84,185,255,0},{58,1,87,185,255,1},{43,1,47,133,255,1},{32,1,47,133,255,0},{32,1,47,133,255,0},{43,1,64,154,255,1},{46,1,126,207,255,1},{32,1,126,207,255,0},{58,1,89,184,255,1},{59,1,49,123,255,1},{32,1,49,123,255,0},{32,1,49,123,255,0},{59,1,26,137,255,1},{32,1,26,137,255,0},{32,1,26,137,255,0},{43,1,36,147,255,1},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,192,158,140,0},{58,1,217,187,143,0},{32,1,217,187,143,0},{36,1,121,82,49,0},{59,1,255,141,88,0},{58,1,255,179,105,0},{46,1,255,189,110,0},{58,1,255,179,106,0},{58,1,255,163,97,0},{58,1,255,159,95,0},{43,1,239,138,78,0},{58,1,255,155,92,0},{46,1,255,195,111,0},{46,1,255,195,112,0},{32,1,255,195,112,0},{46,1,255,214,120,0},{58,1,255,201,114,0},{120,1,245,158,97,0},{88,1,165,93,57,0},{120,1,177,102,59,0},{120,1,226,142,85,0},{59,1,255,163,93,0},{59,1,222,129,73,0},{59,1,222,129,81,0},{43,1,200,113,73,0},{38,1,101,67,54,0},{88,1,86,55,34,0},{38,1,52,52,49,0},{58,1,145,99,69,0},{46,1,255,192,112,0},{58,1,252,160,101,0},{58,1,229,159,111,0},{58,1,162,96,69,0},{32,1,162,96,69,0},{32,1,162,96,69,0},{43,1,102,165,255,1},{32,1,102,165,255,0},{32,1,102,165,255,0},{58,1,173,235,255,1},{32,1,173,235,255,0},{32,1,173,235,255,0},{32,1,173,235,255,0},{59,1,31,133,255,1},{32,1,31,133,255,0},{32,1,31,133,255,0},{58,1,37,161,255,1},{32,1,37,161,255,0},{32,1,37,161,255,0},{32,1,37,161,255,0},{58,1,80,165,255,1},{32,1,80,165,255,0},{32,1,80,165,255,0},{59,1,33,120,255,1},{32,1,33,120,255,0},{32,1,33,120,255,0},{59,1,37,148,255,1},{32,1,37,148,255,0},{32,1,37,148,255,0},{59,1,28,148,255,1},{58,1,51,127,255,1},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,192,158,140,0},{59,1,186,150,113,0},{32,1,186,150,113,0},{36,1,135,96,64,0},{43,1,169,92,55,0},{58,1,255,169,100,0},{59,1,255,156,94,0},{59,1,195,106,59,0},{43,1,154,85,43,0},{43,1,161,86,49,0},{43,1,186,101,54,0},{43,1,220,120,70,0},{43,1,235,128,74,0},{43,1,242,132,78,0},{59,1,237,128,77,0},{58,1,237,136,77,0},{58,1,250,153,88,0},{58,1,255,155,92,0},{46,1,255,178,103,0},{46,1,255,206,116,0},{46,1,255,211,119,0},{46,1,255,218,123,0},{46,1,255,218,123,0},{46,1,255,213,119,0},{43,1,255,188,110,0},{88,1,151,99,67,0},{38,1,57,55,55,0},{38,1,99,108,110,0},{38,1,98,105,107,0},{36,1,86,95,100,0},{36,1,105,112,116,0},{32,1,105,112,116,0},{32,1,105,112,116,0},{32,1,105,112,116,0},{32,1,105,112,116,0},{32,1,105,112,116,0},{59,1,60,170,255,1},{32,1,60,170,255,0},{32,1,60,170,255,0},{59,1,28,147,255,1},{32,1,28,147,255,0},{32,1,28,147,255,0},{32,1,28,147,255,0},{32,1,28,147,255,0},{32,1,28,147,255,0},{58,1,33,158,255,1},{32,1,33,158,255,0},{32,1,33,158,255,0},{32,1,33,158,255,0},{59,1,24,141,255,1},{32,1,24,141,255,0},{32,1,24,141,255,0},{58,1,58,176,255,1},{32,1,58,176,255,0},{32,1,58,176,255,0},{46,1,16,124,255,1},{32,1,16,124,255,0},{32,1,16,124,255,0},{59,1,28,148,255,1},{58,1,51,127,255,1},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,192,160,140,0},{59,1,194,157,121,0},{32,1,194,157,121,0},{59,1,255,239,189,0},{36,1,144,110,76,0},{43,1,166,92,55,0},{58,1,219,129,73,0},{120,1,199,110,59,0},{120,1,190,103,56,0},{36,1,147,91,59,0},{36,1,186,158,119,0},{88,1,165,124,86,0},{43,1,159,98,59,0},{59,1,180,110,74,0},{59,1,185,116,81,0},{43,1,182,107,66,0},{59,1,201,110,64,0},{43,1,245,146,87,0},{43,1,240,143,79,0},{58,1,250,155,88,0},{58,1,254,155,90,0},{32,1,254,155,90,0},{46,1,255,169,100,0},{46,1,255,173,103,0},{88,1,201,151,96,0},{120,1,76,54,44,0},{38,1,106,64,43,0},{38,1,54,51,51,0},{32,1,54,51,51,0},{32,1,54,51,51,0},{32,1,54,51,51,0},{32,1,54,51,51,0},{32,1,54,51,51,0},{32,1,54,51,51,0},{32,1,54,51,51,0},{32,1,54,51,51,0},{58,1,52,163,255,1},{32,1,52,163,255,0},{32,1,52,163,255,0},{59,1,36,150,255,1},{32,1,36,150,255,0},{32,1,36,150,255,0},{32,1,36,150,255,0},{32,1,36,150,255,0},{32,1,36,150,255,0},{59,1,33,158,255,1},{32,1,33,158,255,0},{32,1,33,158,255,0},{32,1,33,158,255,0},{59,1,24,141,255,1},{32,1,24,141,255,0},{32,1,24,141,255,0},{58,1,55,169,255,1},{32,1,55,169,255,0},{32,1,55,169,255,0},{58,1,24,139,255,1},{46,1,121,197,255,1},{32,1,121,197,255,0},{58,1,28,148,255,1},{58,1,51,127,255,1},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,206,176,152,0},{58,1,242,227,179,0},{59,1,246,228,181,0},{58,1,240,216,167,0},{32,1,240,216,167,0},{36,1,209,181,144,0},{88,1,140,87,59,0},{43,1,154,97,62,0},{88,1,196,162,127,0},{32,1,196,162,127,0},{32,1,196,162,127,0},{58,1,255,247,196,0},{59,1,255,237,185,0},{59,1,227,200,154,0},{32,1,227,200,154,0},{59,1,244,198,155,0},{120,1,174,126,85,0},{59,1,184,137,100,0},{58,1,224,160,118,0},{58,1,214,132,81,0},{59,1,237,144,89,0},{59,1,240,145,89,0},{59,1,222,119,75,0},{59,1,211,115,69,0},{88,1,157,93,64,0},{38,1,30,42,49,0},{36,1,51,51,48,0},{38,1,190,135,86,0},{58,1,255,204,117,0},{43,1,245,156,89,0},{46,1,236,171,101,0},{32,1,236,171,101,0},{32,1,236,171,101,0},{32,1,236,171,101,0},{32,1,236,171,101,0},{32,1,236,171,101,0},{59,1,87,185,255,1},{32,1,87,185,255,0},{32,1,87,185,255,0},{32,1,87,185,255,0},{32,1,87,185,255,0},{32,1,87,185,255,0},{43,1,36,133,255,1},{32,1,36,133,255,0},{32,1,36,133,255,0},{58,1,42,151,255,1},{32,1,42,151,255,0},{32,1,42,151,255,0},{32,1,42,151,255,0},{59,1,91,181,255,1},{32,1,91,181,255,0},{32,1,91,181,255,0},{59,1,32,112,252,1},{32,1,32,112,252,0},{32,1,32,112,252,0},{46,1,38,148,255,1},{32,1,38,148,255,0},{32,1,38,148,255,0},{59,1,28,148,255,1},{58,1,49,125,255,1},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{58,1,215,187,159,0},{32,1,215,187,159,0},{32,1,215,187,159,0},{59,1,255,245,194,0},{32,1,255,245,194,0},{58,1,255,244,193,0},{32,1,255,244,193,0},{32,1,255,244,193,0},{32,1,255,244,193,0},{58,1,255,251,201,0},{58,1,255,255,205,0},{32,1,255,255,205,0},{32,1,255,255,205,0},{58,1,255,249,204,0},{59,1,247,222,170,0},{32,1,247,222,170,0},{43,1,132,98,70,0},{32,1,132,98,70,0},{32,1,132,98,70,0},{88,1,211,165,149,0},{88,1,246,213,201,0},{120,1,227,190,176,0},{88,1,197,147,129,0},{88,1,246,215,201,0},{36,1,226,206,198,0},{38,1,191,193,195,0},{38,1,65,70,77,0},{32,1,65,70,77,0},{32,1,65,70,77,0},{43,1,140,78,47,0},{88,1,154,85,53,0},{32,1,154,85,53,0},{32,1,154,85,53,0},{32,1,154,85,53,0},{32,1,154,85,53,0},{43,1,84,156,255,1},{32,1,84,156,255,0},{32,1,84,156,255,0},{58,1,61,139,255,1},{32,1,61,139,255,0},{32,1,61,139,255,0},{32,1,61,139,255,0},{59,1,108,200,255,1},{32,1,108,200,255,0},{32,1,108,200,255,0},{43,1,48,123,255,1},{32,1,48,123,255,0},{32,1,48,123,255,0},{32,1,48,123,255,0},{46,1,127,210,255,1},{32,1,127,210,255,0},{58,1,67,171,255,1},{59,1,53,127,255,1},{32,1,53,127,255,0},{32,1,53,127,255,0},{59,1,42,147,255,1},{32,1,42,147,255,0},{32,1,42,147,255,0},{59,1,28,134,255,1},{58,1,177,197,255,1},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,217,189,165,0},{58,1,175,142,113,0},{32,1,175,142,113,0},{32,1,175,142,113,0},{58,1,255,251,202,0},{58,1,255,247,196,0},{32,1,255,247,196,0},{32,1,255,247,196,0},{32,1,255,247,196,0},{32,1,255,247,196,0},{32,1,255,247,196,0},{32,1,255,247,196,0},{32,1,255,247,196,0},{32,1,255,247,196,0},{58,1,250,224,171,0},{58,1,230,206,162,0},{43,1,170,149,114,0},{58,1,171,144,105,0},{32,1,171,144,105,0},{32,1,171,144,105,0},{32,1,171,144,105,0},{32,1,171,144,105,0},{32,1,171,144,105,0},{32,1,171,144,105,0},{32,1,171,144,105,0},{32,1,171,144,105,0},{38,1,121,80,56,0},{43,1,150,81,41,0},{46,1,151,84,42,0},{36,1,179,103,60,0},{36,1,126,81,51,0},{43,1,229,175,147,0},{32,1,229,175,147,0},{32,1,229,175,147,0},{32,1,229,175,147,0},{32,1,229,175,147,0},{120,1,93,156,255,1},{43,1,94,157,255,1},{32,1,94,157,255,0},{32,1,94,157,255,0},{43,1,23,106,250,1},{58,1,51,172,255,1},{32,1,51,172,255,0},{32,1,51,172,255,0},{43,1,98,160,255,1},{32,1,98,160,255,0},{32,1,98,160,255,0},{32,1,98,160,255,0},{43,1,91,186,255,1},{32,1,91,186,255,0},{32,1,91,186,255,0},{43,1,83,154,255,1},{32,1,83,154,255,0},{32,1,83,154,255,0},{32,1,83,154,255,0},{58,1,112,200,255,1},{32,1,112,200,255,0},{32,1,112,200,255,0},{43,1,26,110,252,1},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{120,1,199,185,148,0},{59,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{32,1,90,78,71,0},{58,1,237,214,162,0},{58,1,230,210,162,0},{43,1,161,138,103,0},{59,1,147,131,107,0},{32,1,147,131,107,0},{32,1,147,131,107,0},{32,1,147,131,107,0},{32,1,147,131,107,0},{32,1,147,131,107,0},{32,1,147,131,107,0},{32,1,147,131,107,0},{32,1,147,131,107,0},{36,1,126,87,61,0},{43,1,151,82,49,0},{36,1,161,89,49,0},{36,1,215,127,75,0},{36,1,155,96,57,0},{43,1,255,187,131,0},{32,1,255,187,131,0},{32,1,255,187,131,0},{32,1,255,187,131,0},{32,1,255,187,131,0},{32,1,255,187,131,0},{32,1,255,187,131,0},{32,1,255,187,131,0},{32,1,255,187,131,0},{43,1,51,122,254,1},{58,1,67,156,255,1},{32,1,67,156,255,0},{43,1,41,134,255,1},{32,1,41,134,255,0},{32,1,41,134,255,0},{32,1,41,134,255,0},{43,1,58,165,255,1},{58,1,196,245,255,1},{32,1,196,245,255,0},{59,1,49,141,255,1},{43,1,160,187,255,1},{32,1,160,187,255,0},{32,1,160,187,255,0},{43,1,59,167,255,1},{46,1,209,251,255,0},{32,1,209,251,255,0},{59,1,50,137,255,1},{43,1,255,255,255,1},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{59,1,222,210,169,0},{32,1,222,210,169,0},{43,1,231,207,160,0},{38,1,221,211,171,0},{120,1,127,131,114,0},{58,1,72,67,62,0},{58,1,112,97,75,0},{58,1,154,129,99,0},{32,1,154,129,99,0},{32,1,154,129,99,0},{32,1,154,129,99,0},{32,1,154,129,99,0},{32,1,154,129,99,0},{32,1,154,129,99,0},{32,1,154,129,99,0},{59,1,175,156,122,0},{58,1,161,142,116,0},{120,1,176,164,143,0},{32,1,176,164,143,0},{32,1,176,164,143,0},{32,1,176,164,143,0},{32,1,176,164,143,0},{32,1,176,164,143,0},{32,1,176,164,143,0},{32,1,176,164,143,0},{32,1,176,164,143,0},{32,1,176,164,143,0},{88,1,255,255,255,0},{88,1,140,104,81,0},{43,1,176,121,98,0},{59,1,145,105,80,0},{36,1,192,138,117,0},{46,1,255,255,255,1},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{59,1,255,255,255,1},{59,1,255,255,255,1},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{59,1,73,164,255,1},{58,1,87,184,255,1},{32,1,87,184,255,0},{46,1,69,158,255,1},{59,1,59,145,255,1},{32,1,59,145,255,0},{32,1,59,145,255,0},{43,1,68,171,255,1},{59,1,189,243,255,1},{32,1,189,243,255,0},{58,1,76,166,255,1},{43,1,45,125,255,1},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{46,1,170,143,112,0},{43,1,180,155,115,0},{59,1,211,183,137,0},{59,1,231,209,175,0},{46,1,255,246,205,0},{43,1,242,219,169,0},{32,1,242,219,169,0},{120,1,219,191,149,0},{38,1,237,229,184,0},{36,1,171,165,130,0},{88,1,107,105,90,0},{120,1,53,56,56,0},{43,1,66,69,66,0},{59,1,71,79,71,0},{58,1,71,71,69,0},{59,1,52,57,57,0},{88,1,130,126,102,0},{88,1,152,119,96,0},{43,1,255,238,188,0},{58,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{32,1,255,241,193,0},{59,1,255,255,255,1},{58,1,71,138,255,1},{59,1,72,140,255,1},{46,1,255,255,255,1},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{58,1,141,219,255,1},{32,1,141,219,255,0},{46,1,66,156,255,1},{43,1,90,152,255,1},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{120,1,182,146,111,0},{43,1,255,235,179,0},{58,1,241,217,166,0},{58,1,231,207,174,0},{32,1,231,207,174,0},{58,1,255,248,202,0},{43,1,255,238,185,0},{43,1,240,214,165,0},{46,1,212,180,138,0},{58,1,186,152,115,0},{59,1,140,117,91,0},{38,1,32,41,50,0},{38,1,109,93,77,0},{38,1,102,89,75,0},{38,1,35,44,50,0},{38,1,167,147,116,0},{59,1,214,184,140,0},{120,1,249,223,172,0},{58,1,214,186,144,0},{58,1,249,237,193,0},{59,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{32,1,255,255,209,0},{43,1,134,179,255,1},{32,1,134,179,255,0},{32,1,134,179,255,0},{59,1,73,138,255,1},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,147,116,86,0},{120,1,226,200,152,0},{59,1,255,231,179,0},{58,1,255,253,207,0},{58,1,250,232,183,0},{58,1,192,160,126,0},{32,1,192,160,126,0},{32,1,192,160,126,0},{58,1,255,249,207,0},{58,1,255,248,202,0},{58,1,255,242,191,0},{59,1,255,242,190,0},{120,1,172,156,121,0},{38,1,32,44,50,0},{88,1,109,93,77,0},{36,1,135,107,77,0},{38,1,64,61,53,0},{120,1,174,153,118,0},{58,1,214,184,140,0},{58,1,206,174,132,0},{120,1,255,236,183,0},{32,1,255,236,183,0},{32,1,255,236,183,0},{32,1,255,236,183,0},{32,1,255,236,183,0},{58,1,255,255,217,0},{59,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{32,1,255,255,211,0},{120,1,255,255,255,1},{43,1,255,255,255,1},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{36,1,172,140,105,0},{120,1,245,223,174,0},{58,1,255,233,179,0},{58,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{120,1,255,244,201,0},{58,1,250,234,185,0},{32,1,250,234,185,0},{32,1,250,234,185,0},{32,1,250,234,185,0},{32,1,250,234,185,0},{32,1,250,234,185,0},{58,1,101,88,65,0},{38,1,32,44,50,0},{43,1,86,72,60,0},{88,1,105,82,60,0},{38,1,57,57,55,0},{59,1,190,170,133,0},{120,1,255,235,179,0},{59,1,255,244,193,0},{58,1,255,244,193,0},{46,1,255,249,198,0},{32,1,255,249,198,0},{32,1,255,249,198,0},{32,1,255,249,198,0},{32,1,255,249,198,0},{32,1,255,249,198,0},{32,1,255,249,198,0},{32,1,255,249,198,0},{43,1,255,253,214,0},{46,1,252,237,187,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,162,131,96,0},{59,1,235,209,159,0},{58,1,255,249,208,0},{58,1,255,255,207,0},{32,1,255,255,207,0},{32,1,255,255,207,0},{32,1,255,255,207,0},{32,1,255,255,207,0},{46,1,253,255,213,0},{59,1,253,255,208,0},{120,1,255,247,196,0},{120,1,255,243,192,0},{120,1,222,200,161,0},{120,1,187,161,120,0},{88,1,67,65,52,0},{38,1,32,44,50,0},{36,1,89,72,60,0},{88,1,81,71,59,0},{38,1,29,41,50,0},{58,1,177,157,122,0},{58,1,195,163,122,0},{32,1,195,163,122,0},{32,1,195,163,122,0},{32,1,195,163,122,0},{46,1,255,251,201,0},{32,1,255,251,201,0},{32,1,255,251,201,0},{32,1,255,251,201,0},{32,1,255,251,201,0},{32,1,255,251,201,0},{32,1,255,251,201,0},{32,1,255,251,201,0},{58,1,255,245,197,0},{120,1,195,160,122,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{59,1,135,107,77,0},{59,1,222,196,149,0},{58,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{32,1,255,249,200,0},{46,1,132,117,96,0},{88,1,27,39,49,0},{38,1,32,44,50,0},{88,1,112,101,86,0},{36,1,104,92,81,0},{38,1,32,41,50,0},{58,1,141,116,90,0},{59,1,217,191,145,0},{120,1,235,217,169,0},{120,1,209,179,138,0},{46,1,191,163,124,0},{32,1,191,163,124,0},{58,1,239,217,169,0},{58,1,255,244,193,0},{32,1,255,244,193,0},{32,1,255,244,193,0},{58,1,255,236,185,0},{32,1,255,236,185,0},{32,1,255,236,185,0},{46,1,250,232,181,0},{120,1,184,149,116,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,204,171,131,0},{88,1,199,164,126,0},{58,1,255,246,194,0},{32,1,255,246,194,0},{32,1,255,246,194,0},{32,1,255,246,194,0},{32,1,255,246,194,0},{32,1,255,246,194,0},{32,1,255,246,194,0},{32,1,255,246,194,0},{46,1,155,122,94,0},{59,1,142,121,98,0},{120,1,167,155,136,0},{88,1,255,255,255,0},{88,1,255,255,255,0},{88,1,210,216,216,0},{38,1,45,53,61,0},{38,1,32,41,50,0},{43,1,76,80,87,0},{36,1,46,54,62,0},{38,1,32,41,50,0},{59,1,100,93,84,0},{58,1,112,92,66,0},{32,1,112,92,66,0},{58,1,130,102,76,0},{58,1,120,92,63,0},{43,1,172,135,105,0},{58,1,207,175,133,0},{32,1,207,175,133,0},{32,1,207,175,133,0},{32,1,207,175,133,0},{58,1,255,238,194,0},{32,1,255,238,194,0},{32,1,255,238,194,0},{58,1,221,191,147,0},{120,1,165,126,101,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{120,1,255,229,177,0},{120,1,251,229,178,0},{59,1,255,246,198,0},{120,1,244,220,167,0},{59,1,225,199,149,0},{32,1,225,199,149,0},{32,1,225,199,149,0},{32,1,225,199,149,0},{32,1,225,199,149,0},{32,1,225,199,149,0},{32,1,225,199,149,0},{32,1,225,199,149,0},{58,1,154,131,110,0},{43,1,166,154,135,0},{36,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{38,1,118,122,129,0},{38,1,90,97,104,0},{58,1,86,88,95,0},{36,1,55,60,70,0},{38,1,76,83,87,0},{36,1,157,160,164,0},{36,1,255,255,255,0},{36,1,255,255,255,0},{120,1,231,223,211,0},{88,1,171,146,122,0},{58,1,201,175,135,0},{59,1,255,239,187,0},{58,1,255,239,186,0},{32,1,255,239,186,0},{58,1,255,233,182,0},{58,1,253,255,222,0},{32,1,253,255,222,0},{32,1,253,255,222,0},{43,1,197,163,125,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{120,1,246,222,169,0},{59,1,255,231,177,0},{58,1,255,242,190,0},{59,1,255,253,211,0},{58,1,255,246,220,0},{58,1,255,233,177,0},{58,1,255,231,178,0},{32,1,255,231,178,0},{32,1,255,231,178,0},{32,1,255,231,178,0},{32,1,255,231,178,0},{32,1,255,231,178,0},{58,1,162,144,121,0},{59,1,190,180,164,0},{88,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{36,1,255,255,255,0},{58,1,255,255,255,0},{36,1,255,255,255,0},{36,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{88,1,200,166,129,0},{120,1,255,237,184,0},{58,1,232,209,163,0},{32,1,232,209,163,0},{59,1,255,233,177,0},{58,1,255,249,206,0},{32,1,255,249,206,0},{32,1,255,249,206,0},{58,1,247,230,178,0},{43,1,191,159,128,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{43,1,246,222,169,0},{58,1,255,242,188,0},{58,1,255,253,203,0},{58,1,253,255,208,0},{46,1,253,255,217,0},{32,1,253,255,217,0},{58,1,255,253,211,0},{58,1,255,247,194,0},{32,1,255,247,194,0},{32,1,255,247,194,0},{32,1,255,247,194,0},{32,1,255,247,194,0},{59,1,204,192,175,0},{88,1,255,253,251,0},{59,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{58,1,166,125,96,0},{46,1,210,180,138,0},{58,1,246,222,171,0},{59,1,255,242,188,0},{58,1,255,249,207,0},{46,1,255,253,228,0},{32,1,255,253,228,0},{32,1,255,253,228,0},{58,1,254,242,193,0},{43,1,191,159,138,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{59,1,201,167,129,0},{58,1,255,242,189,0},{58,1,255,253,207,0},{32,1,255,253,207,0},{32,1,255,253,207,0},{32,1,255,253,207,0},{32,1,255,253,207,0},{32,1,255,253,207,0},{46,1,206,176,132,0},{59,1,167,139,106,0},{59,1,141,120,95,0},{43,1,225,215,203,0},{88,1,255,255,255,0},{58,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{43,1,184,149,118,0},{59,1,239,217,169,0},{58,1,255,237,191,0},{58,1,241,213,182,0},{32,1,241,213,182,0},{32,1,241,213,182,0},{32,1,241,213,182,0},{58,1,254,230,181,0},{58,1,200,168,131,0},{46,1,200,170,149,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{120,1,169,105,82,0},{43,1,226,125,71,0},{46,1,255,183,108,0},{59,1,255,179,106,0},{120,1,164,89,58,0},{59,1,179,130,95,0},{58,1,252,235,193,0},{32,1,252,235,193,0},{32,1,252,235,193,0},{32,1,252,235,193,0},{32,1,252,235,193,0},{32,1,252,235,193,0},{46,1,199,176,134,0},{59,1,177,161,130,0},{120,1,139,122,98,0},{88,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{43,1,201,153,133,0},{58,1,164,97,73,0},{32,1,164,97,73,0},{32,1,164,97,73,0},{32,1,164,97,73,0},{32,1,164,97,73,0},{58,1,187,130,108,0},{58,1,255,255,255,0},{43,1,255,255,255,0},{46,1,255,255,255,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,182,109,74,0},{59,1,255,155,93,0},{58,1,255,216,122,0},{58,1,255,215,121,0},{120,1,255,192,107,0},{59,1,190,113,74,0},{32,1,190,113,74,0},{32,1,190,113,74,0},{32,1,190,113,74,0},{32,1,190,113,74,0},{58,1,216,190,144,0},{59,1,157,139,105,0},{59,1,175,163,144,0},{43,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{59,1,205,120,70,0},{88,1,255,163,95,0},{88,1,255,164,98,0},{88,1,237,136,77,0},{88,1,199,124,88,0},{88,1,255,255,255,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,216,118,70,0},{43,1,255,173,102,0},{32,1,255,173,102,0},{46,1,255,216,121,0},{43,1,255,202,114,0},{120,1,235,171,134,0},{58,1,255,255,255,0},{32,1,255,255,255,0},{59,1,255,255,255,0},{59,1,255,255,255,0},{58,1,255,255,255,0},{58,1,255,255,255,0},{43,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{88,1,255,178,105,0},{43,1,255,182,107,0},{58,1,255,201,114,0},{59,1,255,193,106,0},{43,1,255,164,111,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,197,149,131,0},{43,1,215,117,69,0},{58,1,255,163,98,0},{46,1,255,159,97,0},{32,1,255,159,97,0},{58,1,236,141,79,0},{46,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{32,1,246,183,124,0},{120,1,237,154,87,0},{58,1,255,193,111,0},{58,1,255,171,101,0},{59,1,255,196,112,0},{43,1,255,210,120,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,252,239,235,0},{59,1,210,160,136,0},{58,1,255,199,138,0},{32,1,255,199,138,0},{46,1,242,191,136,0},{46,1,170,123,102,0},{58,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{32,1,227,168,124,0},{120,1,255,251,249,0},{59,1,236,212,204,0},{46,1,236,214,204,0},{58,1,236,214,204,0},{46,1,214,164,142,0},{46,1,216,148,118,0},{59,1,230,166,130,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,255,255,255,0},{43,1,255,255,255,0},{59,1,255,255,255,0},{59,1,253,255,255,0},{59,1,255,255,255,0},{43,1,255,255,255,0},{58,1,255,255,255,0},{59,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{88,1,255,255,255,0},{59,1,255,255,255,0},{58,1,255,255,255,0},{59,1,255,255,255,0},{32,1,255,255,255,0},{46,1,255,255,255,0},{32,1,255,255,255,0},{46,1,255,255,255,0},{58,1,255,255,255,0},{46,1,255,255,255,0},{43,1,255,255,255,0},{120,1,255,255,255,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, + {{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{88,1,255,255,255,0},{43,1,255,255,255,0},{36,1,255,255,255,0},{43,1,255,255,255,0},{36,1,255,255,255,0},{43,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{32,1,255,255,255,0},{88,1,255,255,255,0},{88,1,255,255,255,0},{88,1,255,255,255,0},{88,1,255,255,255,0},{88,1,255,255,255,0},{88,1,255,255,255,0},{88,1,255,255,255,0},{88,1,255,255,255,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},{32,0,0,0,0,0},}, +}; + +#endif diff --git a/client/src/mifare/mifare4.c b/client/src/mifare/mifare4.c index 0e686c5c2..4f20a6602 100644 --- a/client/src/mifare/mifare4.c +++ b/client/src/mifare/mifare4.c @@ -18,12 +18,13 @@ #include "mifare4.h" #include -#include "commonutil.h" // ARRAYLEN -#include "comms.h" // DropField +#include "commonutil.h" // ARRAYLEN +#include "comms.h" // DropField #include "cmdhf14a.h" -#include "cmdhfmfp.h" // mfp_data_crypt +#include "cmdhfmfp.h" // mfp_data_crypt #include "ui.h" #include "crypto/libpcrypto.h" +#include "mifaredefault.h" // MFBLOCK_SIZE static bool g_verbose_mode = false; void mfpSetVerboseMode(bool verbose) { @@ -45,9 +46,11 @@ static const PlusErrorsElm_t PlusErrors[] = { }; const char *mfpGetErrorDescription(uint8_t errorCode) { - for (int i = 0; i < ARRAYLEN(PlusErrors); i++) - if (errorCode == PlusErrors[i].Code) + for (int i = 0; i < ARRAYLEN(PlusErrors); i++) { + if (errorCode == PlusErrors[i].Code) { return PlusErrors[i].Description; + } + } return PlusErrors[0].Description; } @@ -93,9 +96,13 @@ bool mfReadOnlyAccessConditions(uint8_t blockn, const uint8_t *data) { uint8_t cond = (d1 & 0x01) << 2 | (d2 & 0x01) << 1 | (d3 & 0x01); if (blockn == 3) { - if ((cond == 0x02) || (cond == 0x06) || (cond == 0x07)) return true; + if ((cond == 0x02) || (cond == 0x06) || (cond == 0x07)) { + return true; + } } else { - if ((cond == 0x02) || (cond == 0x05)) return true; + if ((cond == 0x02) || (cond == 0x05)) { + return true; + } } return false; } @@ -108,16 +115,18 @@ const char *mfGetAccessConditionsDesc(uint8_t blockn, const uint8_t *data) { uint8_t cond = (d1 & 0x01) << 2 | (d2 & 0x01) << 1 | (d3 & 0x01); if (blockn == 3) { - for (int i = 0; i < ARRAYLEN(MFAccessConditionsTrailer); i++) + for (int i = 0; i < ARRAYLEN(MFAccessConditionsTrailer); i++) { if (MFAccessConditionsTrailer[i].cond == cond) { return MFAccessConditionsTrailer[i].description; } + } } else { - for (int i = 0; i < ARRAYLEN(MFAccessConditions); i++) + for (int i = 0; i < ARRAYLEN(MFAccessConditions); i++) { if (MFAccessConditions[i].cond == cond) { return MFAccessConditions[i].description; } - }; + } + } static char none[] = "none"; return none; @@ -157,20 +166,23 @@ static int CalculateEncIVResponse(mf4Session *mf4session, uint8_t *iv, bool verb */ int CalculateMAC(mf4Session_t *mf4session, MACType_t mtype, uint8_t blockNum, uint8_t blockCount, uint8_t *data, int datalen, uint8_t *mac, bool verbose) { - if (!mf4session || !mf4session->Authenticated || !mac || !data || !datalen) + if (!mf4session || !mf4session->Authenticated || !mac || !data || !datalen) { return 1; + } memset(mac, 0x00, 8); uint16_t ctr = mf4session->R_Ctr; switch (mtype) { case mtypWriteCmd: - case mtypWriteResp: + case mtypWriteResp: { ctr = mf4session->W_Ctr; break; + } case mtypReadCmd: - case mtypReadResp: + case mtypReadResp: { break; + } } uint8_t macdata[2049] = {data[0], (ctr & 0xFF), (ctr >> 8), 0}; @@ -178,40 +190,48 @@ int CalculateMAC(mf4Session_t *mf4session, MACType_t mtype, uint8_t blockNum, ui memcpy(&macdata[3], mf4session->TI, 4); switch (mtype) { - case mtypReadCmd: + case mtypReadCmd: { memcpy(&macdata[7], &data[1], datalen - 1); macdatalen = datalen + 6; break; - case mtypReadResp: + } + case mtypReadResp: { macdata[7] = blockNum; macdata[8] = 0; macdata[9] = blockCount; memcpy(&macdata[10], &data[1], datalen - 1); macdatalen = datalen + 9; break; - case mtypWriteCmd: + } + case mtypWriteCmd: { memcpy(&macdata[7], &data[1], datalen - 1); macdatalen = datalen + 6; break; - case mtypWriteResp: + } + case mtypWriteResp: { macdatalen = 1 + 6; break; + } } - if (verbose) + if (verbose) { PrintAndLogEx(INFO, "MAC data[%d]: %s", macdatalen, sprint_hex(macdata, macdatalen)); + } return aes_cmac8(NULL, mf4session->Kmac, macdata, mac, macdatalen); } int MifareAuth4(mf4Session_t *mf4session, const uint8_t *keyn, uint8_t *key, bool nonfirst, bool activateField, bool leaveSignalON, bool dropFieldIfError, bool verbose, bool silentMode) { + uint8_t data[257] = {0}; int datalen = 0; + if (nonfirst && memcmp(mf4session->Kmac, data, 16) == 0) { // compiler abuse PrintAndLogEx(WARNING, "Function invocation error: cannot do non-first authentication yet"); PrintAndLogEx(HINT, "Try to do first authentication"); return PM3_EINVARG; } // While TI maybe could be rolled as a zero, MACing key absolutely won't be. Don't tell me it'll happen, it won't, the chances are effectively zero. + uint8_t RndA[17] = {0x50, 0x4D, 0x33, 0x20, 0x52, 0x52, 0x47, 0x20, 0x32, 0x30, 0x32, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t RndB[17] = {0}; @@ -224,8 +244,17 @@ int MifareAuth4(mf4Session_t *mf4session, const uint8_t *keyn, uint8_t *key, boo } uint8_t cmd1[4]; - if (nonfirst) { cmd1[0] = 0x76; cmd1[1] = keyn[1]; cmd1[2] = keyn[0]; } - else { cmd1[0] = 0x70; cmd1[1] = keyn[1]; cmd1[2] = keyn[0]; cmd1[3] = 0x00; } + if (nonfirst) { + cmd1[0] = 0x76; + cmd1[1] = keyn[1]; + cmd1[2] = keyn[0]; + } else { + cmd1[0] = 0x70; + cmd1[1] = keyn[1]; + cmd1[2] = keyn[0]; + cmd1[3] = 0x00; + } + int res = ExchangeRAW14a(cmd1, nonfirst ? 3 : 4, activateField, true, data, sizeof(data), &datalen, silentMode); if (res != PM3_SUCCESS) { @@ -322,6 +351,7 @@ int MifareAuth4(mf4Session_t *mf4session, const uint8_t *keyn, uint8_t *key, boo if (verbose) { PrintAndLogEx(INFO, ">phase2: %s", sprint_hex(cmd2, 33)); } + } else { aes_decode(NULL, key, &data[1], RndB, 16); RndB[16] = RndB[0]; @@ -365,8 +395,11 @@ int MifareAuth4(mf4Session_t *mf4session, const uint8_t *keyn, uint8_t *key, boo return PM3_EWRONGANSWER; } - if (nonfirst) { aes_decode(IVR, key, &data[1], raw, 16); } - else { aes_decode(NULL, key, &data[1], raw, 32); } + if (nonfirst) { + aes_decode(IVR, key, &data[1], raw, 16); + } else { + aes_decode(NULL, key, &data[1], raw, 32); + } if (verbose) { if (nonfirst) { @@ -428,7 +461,8 @@ int MifareAuth4(mf4Session_t *mf4session, const uint8_t *keyn, uint8_t *key, boo memmove(mf4session->Key, key, 16); memmove(mf4session->Kenc, kenc, 16); memmove(mf4session->Kmac, kmac, 16); - if (!nonfirst) { + + if (nonfirst == false) { mf4session->R_Ctr = 0; mf4session->W_Ctr = 0; memmove(mf4session->TI, raw, 4); @@ -458,20 +492,23 @@ static int intExchangeRAW14aPlus(uint8_t *datain, int datainlen, bool activateFi } int MFPWritePerso(const uint8_t *keyNum, const uint8_t *key, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen) { - uint8_t rcmd[3 + 16] = {0xa8, keyNum[1], keyNum[0], 0x00}; + // iceman: defines? A8 + uint8_t rcmd[3 + 16] = {0xA8, keyNum[1], keyNum[0], 0x00}; memmove(&rcmd[3], key, 16); return intExchangeRAW14aPlus(rcmd, sizeof(rcmd), activateField, leaveSignalON, dataout, maxdataoutlen, dataoutlen); } int MFPCommitPerso(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen) { - uint8_t rcmd[1] = {0xaa}; + // iceman: defines? AA + uint8_t rcmd[1] = {0xAA}; return intExchangeRAW14aPlus(rcmd, sizeof(rcmd), activateField, leaveSignalON, dataout, maxdataoutlen, dataoutlen); } int MFPReadBlock(mf4Session_t *mf4session, bool plain, bool nomaccmd, bool nomacres, uint8_t blockNum, uint8_t blockCount, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac) { + // iceman: defines? 31 int cmdb = 0x31; if (nomacres) { cmdb = cmdb ^ 0x01; // If we do not want MAC in reply, remove 0x01 @@ -515,6 +552,8 @@ int MFPReadBlock(mf4Session_t *mf4session, bool plain, bool nomaccmd, bool nomac } int MFPWriteBlock(mf4Session_t *mf4session, bool plain, bool nomacres, uint8_t blockNum, uint8_t blockHdr, const uint8_t *data, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, uint8_t *mac) { + + // iceman: defines? A1 int cmdb = 0xA1; if (nomacres) { cmdb = cmdb ^ 0x01; // If we do not want MAC in reply, remove 0x01 @@ -547,43 +586,50 @@ int MFPWriteBlock(mf4Session_t *mf4session, bool plain, bool nomacres, uint8_t b } int mfpReadSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, uint8_t *dataout, bool verbose) { - uint8_t keyn[2] = {0}; - bool plain = false; + // 0x4000 is the base for MFP KEY ID's. See datasheet uint16_t uKeyNum = 0x4000 + sectorNo * 2 + (keyType ? 1 : 0); + uint8_t keyn[2] = {0}; keyn[0] = uKeyNum >> 8; keyn[1] = uKeyNum & 0xff; + if (verbose) { PrintAndLogEx(INFO, "--sector[%u]:%02x key:%04x", mfNumBlocksPerSector(sectorNo), sectorNo, uKeyNum); } mf4Session_t _session; int res = MifareAuth4(&_session, keyn, key, false, true, true, true, verbose, false); - if (res) { + if (res != PM3_SUCCESS) { PrintAndLogEx(ERR, "Sector %u authentication error: %d", sectorNo, res); return res; } + bool plain = false; uint8_t data[250] = {0}; int datalen = 0; uint8_t mac[8] = {0}; uint8_t firstBlockNo = mfFirstBlockOfSector(sectorNo); + for (int n = firstBlockNo; n < firstBlockNo + mfNumBlocksPerSector(sectorNo); n++) { + res = MFPReadBlock(&_session, plain, false, false, n & 0xff, 1, false, true, data, sizeof(data), &datalen, mac); if (res) { - PrintAndLogEx(ERR, "Sector %u read error: %d", sectorNo, res); + PrintAndLogEx(ERR, "Sector "_YELLOW_("%u") " read error: %d", sectorNo, res); DropField(); return res; } if (datalen && data[0] != 0x90) { - PrintAndLogEx(ERR, "Sector %u card read error: %02x %s", sectorNo, data[0], mfpGetErrorDescription(data[0])); + PrintAndLogEx(ERR, "Sector " _YELLOW_("%u")" card read error: %02x %s", sectorNo, data[0], mfpGetErrorDescription(data[0])); DropField(); + // iceman: these custom return codes should use the PM3_E* defines return 5; } + if (datalen != 1 + 16 + 8 + 2) { - PrintAndLogEx(ERR, "Sector %u error returned data length:%d", sectorNo, datalen); + PrintAndLogEx(ERR, "Sector " _YELLOW_("%u") " error returned data length:%d", sectorNo, datalen); DropField(); + // iceman: these custom return codes should use the PM3_E* defines return 6; } @@ -592,8 +638,9 @@ int mfpReadSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, uint8_t *data memcpy(&dataout[(n - firstBlockNo) * 16], &data[1], 16); - if (verbose) + if (verbose) { PrintAndLogEx(INFO, "data[%03d]: %s", n, sprint_hex(&data[1], 16)); + } if (memcmp(&data[1 + 16], mac, 8)) { PrintAndLogEx(WARNING, "WARNING: mac on block %d not equal...", n); @@ -601,6 +648,7 @@ int mfpReadSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, uint8_t *data PrintAndLogEx(WARNING, "MAC reader: %s", sprint_hex(mac, 8)); if (verbose == false) { + // iceman: these custom return codes should use the PM3_E* defines return 7; } } else { @@ -615,18 +663,19 @@ int mfpReadSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, uint8_t *data } int mfpWriteSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, const uint8_t *datain, bool verbose) { - uint8_t keyn[2] = {0}; uint16_t uKeyNum = 0x4000 + sectorNo * 2 + (keyType ? 1 : 0); + uint8_t keyn[2] = {0}; keyn[0] = uKeyNum >> 8; keyn[1] = uKeyNum & 0xff; + if (verbose) { PrintAndLogEx(INFO, "--sector[%u]:%02x key:%04x", mfNumBlocksPerSector(sectorNo), sectorNo, uKeyNum); } mf4Session_t _session; int res = MifareAuth4(&_session, keyn, key, false, true, true, true, verbose, false); - if (res) { + if (res != PM3_SUCCESS) { PrintAndLogEx(ERR, "Sector %u authentication error: %d", sectorNo, res); return res; } @@ -637,30 +686,31 @@ int mfpWriteSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, const uint8_ for (int n = 0; n < numDataBlocks; n++) { uint8_t blockNo = firstBlockNo + n; - uint8_t block[16]; - memcpy(block, datain + (n * 16), 16); + uint8_t block[MFBLOCK_SIZE]; + memcpy(block, datain + (n * 16), sizeof(block)); + mfp_data_crypt(&_session, block, block, false, 1); uint8_t data[250] = {0}; int datalen = 0; uint8_t mac[8] = {0}; - res = MFPWriteBlock(&_session, false, false, blockNo & 0xff, 0x00, block, - false, true, data, sizeof(data), &datalen, mac); - if (res) { + + res = MFPWriteBlock(&_session, false, false, blockNo & 0xff, 0x00, block, false, true, data, sizeof(data), &datalen, mac); + if (res != PM3_SUCCESS) { PrintAndLogEx(ERR, "Sector %u block %d write error: %d", sectorNo, blockNo, res); DropField(); return res; } if (datalen && data[0] != 0x90) { - PrintAndLogEx(ERR, "Sector %u block %d card write error: %02x %s", - sectorNo, blockNo, data[0], mfpGetErrorDescription(data[0])); + PrintAndLogEx(ERR, "Sector %u block %d card write error: %02x %s", sectorNo, blockNo, data[0], mfpGetErrorDescription(data[0])); DropField(); return PM3_ESOFT; } - if (verbose) + if (verbose) { PrintAndLogEx(INFO, "wrote block %d: %s", blockNo, sprint_hex(datain + (n * 16), 16)); + } } DropField(); @@ -668,15 +718,21 @@ int mfpWriteSector(uint8_t sectorNo, uint8_t keyType, uint8_t *key, const uint8_ } int MFPGetSignature(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen) { + + // iceman: use define? 3C uint8_t c[] = {0x3c, 0x00}; return intExchangeRAW14aPlus(c, sizeof(c), activateField, leaveSignalON, dataout, maxdataoutlen, dataoutlen); } int MFPGetVersion(bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen) { + uint8_t tmp[20] = {0}; + + // iceman: use defines? 60 uint8_t c[] = {0x60}; + int res = intExchangeRAW14aPlus(c, sizeof(c), activateField, true, tmp, maxdataoutlen, dataoutlen); - if (res != 0) { + if (res != PM3_SUCCESS) { DropField(); *dataoutlen = 0; return res; @@ -687,7 +743,9 @@ int MFPGetVersion(bool activateField, bool leaveSignalON, uint8_t *dataout, int *dataoutlen = 0; // MFDES_ADDITIONAL_FRAME if (tmp[0] == 0xAF) { + c[0] = 0xAF; + res = intExchangeRAW14aPlus(c, sizeof(c), false, true, tmp, maxdataoutlen, dataoutlen); if (res == PM3_SUCCESS) { @@ -751,11 +809,11 @@ bool mfIsSectorTrailer(uint16_t blockNo) { // assumes blockno is 0-255.. uint8_t mfSectorNum(uint16_t blockNo) { - if (blockNo < 32 * 4) + if (blockNo < 32 * 4) { return (blockNo / 4); - else + } else { return (32 + (blockNo - 32 * 4) / 16); - + } } bool mfIsSectorTrailerBasedOnBlocks(uint8_t sectorno, uint16_t blockno) {