diff options
| author | Alexander Tkachev | 2016-06-18 13:17:36 +0600 | 
|---|---|---|
| committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 | 
| commit | 5e70f64e108a3b155fc14f5087a7747e5c89f581 (patch) | |
| tree | 3aafb7d6a69db0a20d0ea951f8cd00a7aa55f618 /backends/networking/curl | |
| parent | a56c7a3bd608d310cf0a3c3b534a20e826ecf8f0 (diff) | |
| download | scummvm-rg350-5e70f64e108a3b155fc14f5087a7747e5c89f581.tar.gz scummvm-rg350-5e70f64e108a3b155fc14f5087a7747e5c89f581.tar.bz2 scummvm-rg350-5e70f64e108a3b155fc14f5087a7747e5c89f581.zip  | |
CLOUD: Embed cloud icons as byte arrays
Diffstat (limited to 'backends/networking/curl')
| -rw-r--r-- | backends/networking/curl/cloudicon.cpp | 53 | ||||
| -rw-r--r-- | backends/networking/curl/cloudicon.h | 2 | ||||
| -rw-r--r-- | backends/networking/curl/cloudicon_data.h | 111 | ||||
| -rw-r--r-- | backends/networking/curl/cloudicon_disabled_data.h | 117 | 
4 files changed, 254 insertions, 29 deletions
diff --git a/backends/networking/curl/cloudicon.cpp b/backends/networking/curl/cloudicon.cpp index 8971d44665..554fc79a3f 100644 --- a/backends/networking/curl/cloudicon.cpp +++ b/backends/networking/curl/cloudicon.cpp @@ -22,11 +22,10 @@  #include "backends/networking/curl/cloudicon.h"  #include "backends/cloud/cloudmanager.h" +#include "common/memstream.h"  #include "gui/ThemeEngine.h"  #include "gui/gui-manager.h"  #include "image/png.h" -#include <common/file.h> -#include <backends/graphics/surfacesdl/surfacesdl-graphics.h>  namespace Networking { @@ -100,37 +99,35 @@ void CloudIcon::showDisabled() {  	_disabledFrames = 20 * 3; //3 seconds 20 fps  } +#include "backends/networking/curl/cloudicon_data.h" +#include "backends/networking/curl/cloudicon_disabled_data.h" +  void CloudIcon::initIcons() {  	if (_iconsInited) return; -	loadIcon(_icon, "cloudicon.png"); -	loadIcon(_disabledIcon, "cloudicon_disabled.png"); +	loadIcon(_icon, cloudicon_data, ARRAYSIZE(cloudicon_data)); +	loadIcon(_disabledIcon, cloudicon_disabled_data, ARRAYSIZE(cloudicon_disabled_data));  	_iconsInited = true;  } -void CloudIcon::loadIcon(Graphics::TransparentSurface &icon, const char *filename) { -	Image::PNGDecoder decoder; -	Common::ArchiveMemberList members; -	Common::File file; -	if (!file.open(filename)) warning("CloudIcon::loadIcon: unable to open %s", filename); -	Common::SeekableReadStream *stream = &file; -	if (stream) { -		if (!decoder.loadStream(*stream)) -			error("CloudIcon::loadIcon: error decoding PNG"); - -		Graphics::TransparentSurface *s = new Graphics::TransparentSurface(*decoder.getSurface(), true); -		if (s) { -			Graphics::PixelFormat f = g_system->getOSDFormat(); -			if (f != s->format) { -				Graphics::TransparentSurface *s2 = s->convertTo(f); -				if (s2) icon.copyFrom(*s2); -				else warning("CloudIcon::loadIcon: failed converting TransparentSurface"); -				delete s2; -			} else { -				icon.copyFrom(*s); -			} -			delete s; -		} else warning("CloudIcon::loadIcon: failed reading TransparentSurface from PNGDecoder"); -	} +void CloudIcon::loadIcon(Graphics::TransparentSurface &icon, byte *data, uint32 size) {	 +	Image::PNGDecoder decoder;	 +	Common::MemoryReadStream stream(data, size); +	if (!decoder.loadStream(stream)) +		error("CloudIcon::loadIcon: error decoding PNG"); + +	Graphics::TransparentSurface *s = new Graphics::TransparentSurface(*decoder.getSurface(), true); +	if (s) { +		Graphics::PixelFormat f = g_system->getOSDFormat(); +		if (f != s->format) { +			Graphics::TransparentSurface *s2 = s->convertTo(f); +			if (s2) icon.copyFrom(*s2); +			else warning("CloudIcon::loadIcon: failed converting TransparentSurface"); +			delete s2; +		} else { +			icon.copyFrom(*s); +		} +		delete s; +	} else warning("CloudIcon::loadIcon: failed reading TransparentSurface from PNGDecoder");  }  void CloudIcon::makeAlphaIcon(Graphics::TransparentSurface &icon, float alpha) { diff --git a/backends/networking/curl/cloudicon.h b/backends/networking/curl/cloudicon.h index e007f952bd..7e4d7387a3 100644 --- a/backends/networking/curl/cloudicon.h +++ b/backends/networking/curl/cloudicon.h @@ -37,7 +37,7 @@ class CloudIcon {  	int _disabledFrames;  	void initIcons(); -	void loadIcon(Graphics::TransparentSurface &icon, const char *filename); +	void loadIcon(Graphics::TransparentSurface &icon, byte *data, uint32 size);  	void makeAlphaIcon(Graphics::TransparentSurface &icon, float alpha);  public: diff --git a/backends/networking/curl/cloudicon_data.h b/backends/networking/curl/cloudicon_data.h new file mode 100644 index 0000000000..a924dc84d2 --- /dev/null +++ b/backends/networking/curl/cloudicon_data.h @@ -0,0 +1,111 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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 2 + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// This is a PNG file dumped into array. +// $ recode data..d1 <dists/cloudicon.png >cloudicon_data.h +// The tool is from https://github.com/pinard/Recode + +byte cloudicon_data[] = { +137,  80,  78,  71,  13,  10,  26,  10,   0,   0,   0,  13,  73,  72,  68, + 82,   0,   0,   0,  32,   0,   0,   0,  32,   8,   6,   0,   0,   0, 115, +122, 122, 244,   0,   0,   0,   4, 115,  66,  73,  84,   8,   8,   8,   8, +124,   8, 100, 136,   0,   0,   0,   9, 112,  72,  89, 115,   0,   0,  11, + 18,   0,   0,  11,  18,   1, 210, 221, 126, 252,   0,   0,   0,  22, 116, + 69,  88, 116,  67, 114, 101,  97, 116, 105, 111, 110,  32,  84, 105, 109, +101,   0,  48,  54,  47,  48,  51,  47,  49,  54, 159, 192, 233, 192,   0, +  0,   0,  28, 116,  69,  88, 116,  83, 111, 102, 116, 119,  97, 114, 101, +  0,  65, 100, 111,  98, 101,  32,  70, 105, 114, 101, 119, 111, 114, 107, +115,  32,  67,  83,  54, 232, 188, 178, 140,   0,   0,   4,  50,  73,  68, + 65,  84,  88, 133, 197, 151, 109, 104, 150, 101,  20, 199, 127, 247, 227, +179, 105,  51,  23,  65, 181, 150, 224, 154, 214, 132, 194, 249,  33, 165, + 22, 189, 231, 194, 210, 250,  16, 171, 180,  55,  42, 152,  68,  65, 100, + 52, 233,   5, 146, 144, 144,  26, 249, 169,  62, 164,  80,  89, 152,  25, + 18, 226,  42,  49,  87,  88, 180,  94,  96,  96, 246, 234, 180,  70,  50, + 66, 214,  55, 247,  22, 133, 247, 255, 244, 225,  58, 247, 158, 107, 143, +219, 243,  60, 186, 192,   3, 135, 251, 220, 215, 117, 223, 231, 127, 238, +235, 252, 239, 235,  58,  39, 105, 250, 206,  56, 147, 146,  55,  85, 252, +108,  13, 112,  59, 176,  12,  88,   2, 204,   7, 230, 248, 220,  48, 208, + 15, 244,   2, 221,  64,  23,  48,  86, 137, 211, 228, 146, 158, 178,  43, + 80,   7, 172,   3, 218, 129, 179,  43, 241,   9, 140,   0, 155, 129,  87, +128, 193, 146,  15,  47, 248, 178, 100,   0, 237,  64,  39, 112,  14,  96, +174,  20, 217, 153, 228, 162,   0,  50,  25,   2,  58, 128,  45,  83,   1, +228,  53, 121,  10, 170, 129, 183, 128, 213, 126,  47, 215,  49, 224,  39, +224,  19, 160,   7,  56,   2, 204,   0, 154, 128,  27, 128, 229, 110, 215, +120,  64, 181, 132, 149, 184,  30, 120,   4, 248, 183,  24,  40, 185, 248, +243, 147,  86, 160, 154, 144, 195,  91, 252,  43,   5, 140,   2,  31,   2, + 27, 129, 195,  83, 125, 141,  75,  19, 240,   2, 129,  47, 179,  61, 144, +  4, 216,   7, 172,  44,  14,  34, 105, 232,  62,  41, 128, 109, 192, 189, + 14, 126,   2,  24,   0,  30,   3, 246, 150,   1,  46, 150,  54,  15, 184, +  1, 200, 251, 216, 123, 192, 253,  19,   2, 152, 183, 119,  66,   0, 237, +192,  27, 110, 159,   0, 250, 128, 187, 128,  67, 167,   8, 158, 201,  98, +224,   3, 160, 209, 131,  72, 128,  53,  68, 156, 200, 153, 192, 181, 206, + 68, 167, 219,  50,  49,  96, 226,  78,  19, 135, 162, 103, 138, 117, 169, +137,  46,  19, 163,  38,  82,  19,  63, 152, 120, 220, 196,  12, 159,  63, +104,  98, 149, 137,  99, 238, 211,  28, 163,  46, 243, 145, 147, 192, 117, +157,  68, 173, 219, 195,  18, 143,  74,  28, 137, 230, 139, 181,  77, 162, + 71,  98, 165,  68, 141,  68,  78,  98, 145, 196, 107,  18,  59, 252,  30, +137,   3,  18, 207,  72, 140, 249, 125, 173,  99,  33,  65, 114, 209, 110, +131, 192, 218,  65,   2, 105,   4, 108, 245, 165,  74, 125, 165, 206,   5, +214,   2, 151,   3,   7, 128, 119, 128,  95, 253, 189, 169, 228, 105, 224, + 85, 183, 171, 128,  29, 192,  29,   4,  82, 142,  18, 246, 151, 177, 164, +126, 151,   1, 220,   3, 188,  79,  32, 222,  40,  97, 167, 235, 243, 151, +207,   2, 190,   5, 154,  35, 231, 223,   0,  45, 101, 242, 127,  12, 152, + 75,  97, 191,  88,  12, 124, 237, 254,  18,  96,  21, 176,  35, 227, 192, + 50, 207,  15,  38, 126,  49, 113,  56, 202, 243, 221,  38, 154, 139, 114, +223,  82, 130,  23, 153, 214, 155,  88,  20, 221, 255, 104, 226, 104, 116, +223, 106,  42, 144, 112, 169, 137, 196, 131, 248,  56,  10, 166, 222, 196, +141,  21, 128,  77, 165, 223, 155, 120,  42,  34, 246, 158, 200, 247,  18, + 19, 228,  21, 178,  60, 223, 151,  41,   1, 190, 112, 251,  60, 224, 171, +104, 238, 116,  36,  33, 240, 224,  32, 240,  25, 176,  31, 120, 194, 199, + 27, 161, 112,  26, 102, 167, 154,   1, 127, 186, 253,  98,   9, 240,  81, +  2,  97,  43, 149, 231,  61, 128, 129, 104, 108,  78,  28,  64,  44,  25, +105, 218,  74,  56, 156,  13, 252,  76, 248,  43,  42, 145, 140, 176, 249, +226, 137, 188, 133,  20,  12, 123,  68,   9, 225, 171, 127,   7,  46,  40, +227, 180,  82, 112, 128, 153, 126, 189, 148, 194, 105,  57,  12,   5,  18, +246,  71,  68, 185, 214, 237, 191, 166,  65, 190,  98, 237, 243, 235, 205, +209,  88, 127, 188,  19, 246, 250,  53,  39, 177, 194, 237, 157,  37, 118, +193,  83, 213, 183,  37, 102,  73,  92,  39, 145, 196, 152,  57,  75, 193, + 82, 246, 249,  21,  75,  89, 104,  41, 205, 150, 178, 222,  82, 250, 163, +241, 211, 213, 253, 150, 178, 201,  82, 174, 180, 148, 185, 150, 146, 248, +120, 183, 165, 133,  20, 116, 153,  24, 113, 123, 150, 137, 103,  77,  28, + 55, 113, 141, 137, 173,  38, 134,  60,  61, 167, 178, 236,   3,  38,  54, +152, 184, 213, 255, 253,  39, 221,  55, 142, 213, 101,  42, 252,   5,  99, +132, 202, 101,  45,  97, 175,  94,  14, 172,   0, 118,   1,  15, 185,  78, + 71,  86,  19, 138, 217, 196, 117, 179,  99, 146, 204, 126, 125, 188,  30, +168,  35, 236, 255, 181, 132,   3, 233,  15, 224,  54, 202,  87,  64, 229, +164,   5, 216,   9,  92, 232, 224,  67, 192,  66, 188,  88, 205,  69, 185, + 26, 180, 148,  14, 207,  81, 206,  82, 230,  89, 202, 110,  75, 185, 108, + 26, 249, 191, 202,  82, 222, 181, 148, 243, 163, 220, 119,  56,  22, 150, + 78, 172,   7, 144, 216,  34, 177, 205, 237, 188, 196,   2, 137,  61,  18, + 15, 158,   6, 243,  31, 144, 216,  37, 209, 224, 190,  18, 137, 237, 142, + 49, 254,  92,  50, 115, 211, 164,  69, 233,  71,  64,  43, 140,  23, 165, +127,  19,  26, 142, 231,   8, 117, 192,  84,  82,  69,  56, 118, 215,   3, + 55,  17,  54, 160, 172,  40, 253, 148,  80, 168,  78,  44,  74, 171,  59, + 39, 237,  11, 170, 129,  55, 129, 251,  40, 108, 205,   2, 254,   1, 126, +243,  96, 122, 129, 163,  62, 223,   0,  92, 237, 160, 141,  17, 112,  38, +219, 129, 135, 139, 193,   1, 146, 170, 151,  43, 106,  76, 106, 139, 198, +229, 192,  73,  20,  96,  12, 152, 177, 253,  56, 101,  26, 147,  36, 191, +177, 226, 214, 108,  13, 133, 214, 172, 220,  75,  35,  14,  90, 190,  53, +203, 189,  84, 113, 119, 156,  53, 167, 173, 192,  21, 252,  95, 205, 105, +178, 225, 204, 182, 231, 255,   1, 200,  91, 112, 221, 160, 249,  68,  42, +  0,   0,   0,   0,  73,  69,  78,  68, 174,  66,  96, 130 +}; diff --git a/backends/networking/curl/cloudicon_disabled_data.h b/backends/networking/curl/cloudicon_disabled_data.h new file mode 100644 index 0000000000..fc1638cf97 --- /dev/null +++ b/backends/networking/curl/cloudicon_disabled_data.h @@ -0,0 +1,117 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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 2 + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// This is a PNG file dumped into array. +// $ recode data..d1 <dists/cloudicon_disabled.png >cloudicon_disabled_data.h +// The tool is from https://github.com/pinard/Recode + +byte cloudicon_disabled_data[] = { +137,  80,  78,  71,  13,  10,  26,  10,   0,   0,   0,  13,  73,  72,  68, + 82,   0,   0,   0,  32,   0,   0,   0,  32,   8,   6,   0,   0,   0, 115, +122, 122, 244,   0,   0,   0,   4, 115,  66,  73,  84,   8,   8,   8,   8, +124,   8, 100, 136,   0,   0,   0,   9, 112,  72,  89, 115,   0,   0,  11, + 18,   0,   0,  11,  18,   1, 210, 221, 126, 252,   0,   0,   0,  22, 116, + 69,  88, 116,  67, 114, 101,  97, 116, 105, 111, 110,  32,  84, 105, 109, +101,   0,  48,  54,  47,  48,  51,  47,  49,  54, 159, 192, 233, 192,   0, +  0,   0,  28, 116,  69,  88, 116,  83, 111, 102, 116, 119,  97, 114, 101, +  0,  65, 100, 111,  98, 101,  32,  70, 105, 114, 101, 119, 111, 114, 107, +115,  32,  67,  83,  54, 232, 188, 178, 140,   0,   0,   4, 139,  73,  68, + 65,  84,  88, 133, 197, 215,  91, 168,  86,  69,  20,   7, 240, 223, 254, +244, 120, 236, 120,  57,  26,  94,  10,  31,  34,  35,  11,  36, 203,  74, +212, 160, 204, 212, 110, 166, 248, 208, 205, 172, 151, 144, 136, 158,  82, + 80, 168,  32, 233, 165, 160,  32, 130, 236, 165,  34, 204,  74,  18,  52, + 36, 169, 232,  34,  24, 221, 243, 218, 133,  74,  77, 195,  44, 200,  91, +122, 188, 156, 172, 102, 159, 221, 195, 204, 246, 219, 126, 231, 226,  17, +138,  22,  12, 123, 246, 236, 153, 245,  95, 107, 205, 127, 205, 172, 157, + 21, 254,  95, 233,  27, 122,  63, 183,   5, 179,  48,  13,  87,  98,  52, +  6, 167, 111,  71, 176,  11,  27, 177,  14, 107, 209, 222,  27, 165, 217, +137, 211, 207,  25, 137, 197, 152, 143,  65, 189, 209, 137, 163, 120,   1, + 79,  98, 111, 143, 147, 143, 247, 172, 108,  62, 158, 194,  16,  20, 169, +105, 232, 151,  82, 171,  24,  80,  74,  27,  22, 225, 197, 110,  13, 104, +235, 122, 188,  31,  94, 194,  93,  21, 192,  14,  49, 172, 223, 226, 109, +124, 130,  29, 232, 131,  49, 184,  22,  55, 166, 126,  75, 131,  65, 175, +225,  94, 252, 213, 201, 128, 131,  93, 131, 191, 137,  27,  42, 192, 199, +241,   6, 158, 192, 246, 238, 188,  73,  50,   6, 143,  98,  78,  50, 164, +140, 200, 123,  34, 135,  78,  49,  34, 219, 215,  89, 193, 171, 152, 151, +192,   3, 246, 224,   1, 188, 123,  26, 224, 170,  92, 134, 143,  49, 160, + 50,  86,  96,   5, 238, 174,  78, 108, 204, 130, 249,  98, 216,  75, 240, +109, 184,  13,  63, 156,   1, 248,  68,  44,  21, 189,  47, 165,  67, 140, +196,  60, 172,  87, 225,  68, 182, 167,  62, 105, 100,   2, 106,  77,  11, +118, 139, 123, 186, 163,  59, 164,  53,  76,  16, 195, 125,  29, 250,  15, +227, 167,  73,  12, 237,  27,  73,  91,  75, 142,  28,  21, 185,  51,  60, +141, 181, 225,  98,  41,  59, 106,  33, 185,  26,  88,  28, 104,  77, 253, +163, 129, 251,   3,  59,  42, 223,  79, 105, 171, 184,  53, 240,  73, 224, +150,  64, 203,  32, 106,  99, 185, 160, 224, 236,  16, 245, 118,   4,  54, +  5, 166,   4,  22,   6, 218, 211, 218, 214, 132,  37,  32,  75, 238, 181, +224,  55,  12,  76, 222, 191, 140, 251, 144,  39,  79, 135,  98,   1, 198, + 98,  11, 150, 227, 251,  50, 204,  67, 113, 121,  90, 156,  57, 185, 127, +135, 154, 184,   9,  95, 160,   9,  43,  49,  59,  69, 225,  24, 206,  65, +123, 150,  54, 247,  14, 188, 158, 214,  30,  23,  79, 186, 109,   9, 252, + 44, 124, 142, 113, 149, 232, 127, 134, 201, 196,  88,  79,  66, 115,   5, +252,  24, 182, 114, 224,  32,  35, 230, 212, 207, 139,  75, 241, 169, 168, + 47, 195, 157,  88,  89, 110, 193, 180,  64, 145, 250, 223,   5, 182,  87, +194, 125, 123,  96,  92, 195,  22,  76,  14, 201, 227, 177, 226,  65, 144, +227, 111,  28, 198, 151, 113, 131, 135,   5,  46, 169, 172, 249,  38, 176, +187, 242,  62,  35, 160, 150, 199, 197,  19, 114, 178, 156,  34, 231, 173, +244, 180, 154, 115, 115, 166, 166,  57, 167, 180, 193,  34,   3,   7, 165, + 61,  11, 137, 105,  27, 112, 160,  62, 111, 235, 106,  22, 166, 126,  71, +206,  59, 165, 238, 156,  43, 114, 100, 155,  98, 120, 218, 146, 206,   2, + 83, 241, 225,  26, 134, 165, 253,  27, 173,  65, 134, 138, 137, 222, 154, +222, 139, 228, 249,  87, 233, 217, 133,  76, 159,  19,  47, 169,  89, 226, +129, 214,  71, 188, 192, 134, 148, 231,  64, 121, 171,  21, 248,  85, 244, +232, 177,  30, 192,  59,  90,  82,   6, 193,   9, 108, 234,  30,  28,  30, +  9, 209, 128,  74, 214,  71, 204, 190, 121, 231, 201,   5, 228, 220, 218, +248,  97, 136, 200, 246, 102, 106,  29, 234,  73, 190,   5, 135, 186,   7, +135, 201,   9, 167, 111, 227, 135,  50,   2,  71, 146,  69, 153, 232, 245, +206, 192, 136, 234, 196,  86,  49,  13, 154, 162, 113,  39, 211, 101,  51, +126, 239,  25,  28, 154,  19, 206, 133, 234, 119, 195,  17, 234,  36, 220, + 85,  33, 202, 213, 169, 191, 175,  36,  92, 139, 152, 106,   3, 212,   9, +119,  76, 100, 251, 126, 157,   9, 218,  69, 219, 150, 158, 211,  42,  99, +187, 114, 245, 147, 112,  83, 122, 214,   2,  51,  83, 127,  85,  16,  89, + 62,  94,  60,  61, 202,  20,  58,  36,  38, 244, 126,  93, 159, 146,  93, +180, 101, 129, 254, 129, 107,   2,  89,  26, 219,  24,  42,   6, 188,  95, +153, 124,  81, 202, 251,  37,   3, 249, 101, 188, 120, 114, 148, 223, 219, +197, 212,  56, 208, 123, 240, 245, 129, 167,   3,  19,   3, 163,  42,   6, +172,  11, 234,  36,  92,  43, 242, 105,  32, 250, 227, 161,  89,  44,  45, + 98, 196, 139,  14, 178, 146, 112,  27, 210, 179,  23, 178,   7, 203, 240, +248, 156, 152, 251,  15,  38, 221, 146, 138, 181, 212,  73, 216,  46, 214, +112,  11,  82, 180, 103, 138,  71, 237,  40, 145,  52,  29, 216, 221, 194, +220,  41,  49,   0, 103,  36, 129, 185, 152, 158, 116, 101,   9, 171,  29, +178,  85, 245, 121, 213, 235, 184,  90, 215, 229, 248,  89, 172, 112, 190, + 62,  83, 112, 209, 145,  85, 226, 229, 147, 105, 188, 142,  43, 172, 220, +155, 179,  40,  29, 201,  85,   6, 239, 204, 153, 155, 243, 117,  47, 216, +222, 216,  38, 229, 188, 146,  51, 188, 162, 119,  81, 194,  82, 205, 130, +178, 189,  24, 120, 173,  97, 108,  80,  34, 102, 111,  73,  87, 182, 123, +  2, 107,   2, 231, 133, 184, 213,  89,  96,  69, 194,  56,  57,  47,  91, +222,  57, 100, 253,  68, 130,  92, 175,  94, 148, 254, 129,  15, 240, 176, + 88,   7, 116,  39,  77, 226, 181, 187,  68, 172, 146, 154,  69,  78, 101, + 98,  77,  57,  91,  99,  81, 250,  82, 215, 138, 202, 178, 188,  44,  78, + 37,  67, 254, 196, 143, 201, 152, 141,  98, 217,  86, 224,  60,  92, 149, + 64, 207, 175,   0, 151, 178,  66, 119, 101, 249, 243,  61, 184, 163, 254, + 99, 210, 218,  48,  94,  94,   5, 101,  13, 162,   1, 176, 100, 251,  97, +167, 249,  49, 233, 115, 179, 250, 111,  78,  23, 109, 115, 193, 178, 130, + 62,   5, 151,  20,  52,  23, 241,  76, 200,  10, 106, 149, 103, 173,  50, +158,  21,  28,  45, 120, 174,  96, 110, 193,  71,  61, 232, 151,  61, 219, +115,   4, 170,  82, 254, 156, 206,  16,  47, 197, 127, 231, 231, 244, 153, +222,  27, 240, 159, 200,  63, 153, 185,  24, 191, 162, 246,  71, 153,   0, +  0,   0,   0,  73,  69,  78,  68, 174,  66,  96, 130 +};  | 
