I can receive the base64 correctly, but i can't save the image correctly, it gets corrupted.
And I open the file jpg create and he not presents all the string converted
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <string>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <vector>
//g++ -std=c++11 -static main.cpp -o test.exe
//./-Server.run 50007
using namespace std;
using namespace cv;
#define SERVER_PORT htons(50007)
static const char* B64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const int B64index[256] =
{
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, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 62, 62, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0,
0, 0, 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, 0, 0, 0, 0, 63,
0, 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
};
const std::string b64encode(const void* data, const size_t &len)
{
std::string result((len + 2) / 3 * 4, '=');
char *p = (char*) data, *str = &result[0];
size_t j = 0, pad = len % 3;
const size_t last = len - pad;
for (size_t i = 0; i < last; i += 3)
{
int n = int(p[i]) << 16 | int(p[i + 1]) << 8 | p[i + 2];
str[j++] = B64chars[n >> 18];
str[j++] = B64chars[n >> 12 & 0x3F];
str[j++] = B64chars[n >> 6 & 0x3F];
str[j++] = B64chars[n & 0x3F];
}
if (pad) /// set padding
{
int n = --pad ? int(p[last]) << 8 | p[last + 1] : p[last];
str[j++] = B64chars[pad ? n >> 10 & 0x3F : n >> 2];
str[j++] = B64chars[pad ? n >> 4 & 0x03F : n << 4 & 0x3F];
str[j++] = pad ? B64chars[n << 2 & 0x3F] : '=';
}
return result;
}
const std::string b64decode(const void* data, const size_t &len)
{
if (len == 0) return "";
unsigned char *p = (unsigned char*) data;
size_t j = 0,
pad1 = len % 4 || p[len - 1] == '=',
pad2 = pad1 && (len % 4 > 2 || p[len - 2] != '=');
const size_t last = (len - pad1) / 4 << 2;
std::string result(last / 4 * 3 + pad1 + pad2, '\0');
unsigned char *str = (unsigned char*) &result[0];
for (size_t i = 0; i < last; i += 4)
{
int n = B64index[p[i]] << 18 | B64index[p[i + 1]] << 12 | B64index[p[i + 2]] << 6 | B64index[p[i + 3]];
str[j++] = n >> 16;
str[j++] = n >> 8 & 0xFF;
str[j++] = n & 0xFF;
}
if (pad1)
{
int n = B64index[p[last]] << 18 | B64index[p[last + 1]] << 12;
str[j++] = n >> 16;
if (pad2)
{
n |= B64index[p[last + 2]] << 6;
str[j++] = n >> 8 & 0xFF;
}
}
return result;
}
std::string b64encode(const std::string& str)
{
return b64encode(str.c_str(), str.size());
}
std::string b64decode(const std::string& str64)
{
return b64decode(str64.c_str(), str64.size());
}
int main() {
char buffer[20883];
int serverSock=socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = SERVER_PORT;
serverAddr.sin_addr.s_addr = INADDR_ANY;
bind(serverSock, (struct sockaddr*)&serverAddr, sizeof(struct sockaddr));
listen(serverSock,1);
sockaddr_in clientAddr;
socklen_t sin_size=sizeof(struct sockaddr_in);
int clientSock=accept(serverSock,(struct sockaddr*)&clientAddr, (socklen_t*)&sin_size);
bzero(buffer, 20883); // Zerando o buffer
FILE *output;
output = fopen("test.jpg", "w");
unsigned int readBytes = 0;
string decoded_string;
int rec = recv(clientSock, buffer, sizeof(buffer), 0);
cout << (buffer) << endl;
decoded_string = b64decode(buffer);
cout << decoded_string << endl;
fwrite(&decoded_string, sizeof(char), sizeof(decoded_string), output);
//vector<uchar> data(decoded_string.begin(), decoded_string.end());
//fwrite(&data, sizeof(data), readBytes, output);
fclose( output );
return 0;
close(serverSock);
}
O5jXENxGYnPvnj+Qrq7eUSIOaYiyPmUg96z1zFP1PXt3q6jEGq90uJAwJA74pIRbVuKjurSG9hMUyBgRjmmwPkY4qfnFIDnomuvDEmx90+nMeCOWh/+tXQwzR3ESyxOrowyGByCKGVZUKOAykYINYr28/h+Uz2qtLYucyQjqnuv+FHxeotjdPIrk7jwPYxeOh4vt1Ed5LafY7kAcSgMCrH3GCPcY9K6e2u4byFZoHDow4Ip7AMKlaMYKMAUp4GaFIxz1HWmht5z2HSmAMQq8/jVdVSYCQYIPQ+tTvyPWoLE7oDls4ZufxNMCWOMRRhR2GKceayNZfV1nj/sxd2UO7zAnlqQR15DEkZxjjOM0xv7cl0nZm2jvxJkOpyhUHIyMcZACn65pXK5etzWfgVU3ISzkgY6tnGBXOa7rGraZZTrcSwxvMFW2eNcsG3EsSOmAu0VjPdz3cBa+uiYW+YjOAfwrKpiIw0e50UsLKevQ6u78X6Hp6nz9RiIXO4plgPqRxVDRPH3h3xBqx0/TL7z5ypYDy2UMB1xkc1yAjiupTBptm9wTwQikgfX0rqfB/g+PQ3kvZLaCG4lGMRoMqPc96wp16tSSstDtlQw1KlLnvzdNV+KsdC8QEhx3riPHXw6sfEmlvbh2imDl4ZCAfLYgYHT7vHT3JrvCuTuqteLuQ46giu48iSPz0z717v+zHeJI+tacxG4+XKo9fvA/wAhXgwau++CviQeHfHdoZG2xXam3b0ycFf1AH41nHcctj6F1jS/suqSEDCTjH/AhWz4UuCI2gY8ocVo6zZJqdms8eC2AwI9axdOLWt8r4wH4P1q7WYkzoNbsBc2zEDtVfwVqBhlksZDgg5XNbURWaHHUVzmqWsml36X0OQAecdxQ9HcaO+xke9KvAA9a5PxXrerx+E21Dw8YmulKFtwDYXPPB4rkvD3xO8USvs1XS4H28EgFD/Uf56VhUxEYS5JHo0MuqVqDrwasul9fuPSNe0sanZMigCZRujb0YdKq6Le+dbRkjaccj0PcfhT9K8T6fq21d3ky945OD+B71G1r9j1Fwo2w3DFl9FbuPx6/ifStozUldM4ZwcXaSNlWyM0sq74+B0rMW/NnciGfhX+63Y1rRnevHIqiCrCSjVeBDKCKpldrEelTwP1U0MRLS8YwelIeaQmlYDGu7C40qdr3Tl3RtzLb9m9x71o6fqMGow+ZC3I4ZDwyn0Iq0Dms6+0qNpDdWshtrkfxL0b2Yd6N9wLsvQ9vWnLwgrH0/XRcStZ3iiG6XjGflf3FaobMa/QUwFJzTYlSJCqjGTnHvS0g7miwCs4A6VFLL5cTMeAOcmiRq5bxhrXl250+InzJVyxB6D0/H+Q96ic1FczNKVNzkoowLzUxrl+93KT5CtshX1GeD9TWX4lhuphFCEktoXcKsoYYBz04zyegz6+tRanYzXqRrZStB5UqzBgfvFSCB9DV9tbtJbN7LVYmhkkXyyrA9+6n8+a8pyU23Lc9m0qaXJsM0/T2toVUvJEAflKsR+NW7lI5YTHLqEpUjkGU8/rWbfXN3dRJC7ELjbuU4L+h46Ullo0BODas5HXzZnO7/vkioTvpcuUftP9CnLNqOm28h0TVGt7pDmM5BVvZgcg/lXY+ANR8S6rpM8niOOHzBKBDLGADIvfIHHX0rCayNtKpi0ywjOeTsZ//QmNUr3xz460icQw6bpl1aKflZYSvy+hw4x+VaUakacryk7djZ0pYqm6MIxTet3ZP5M+Q6sWAla9txAxWYyKEI6hsjH61WBrS8OSJF4g0x5PuLdxFvpvFektz5tn2P4N1xZI/sFy+WXhSe4q9q+ni3l81B8pOeK83N1LaTJNGSGXnIr0Xw94httesvs87BZgMc1cXdaktWNrSphJEufSrd3apcxFJACCMVm2MMlnMYXzjOQR0IrZxkA1TGjn7IS6HcPFKvm2cvDAjIOao634MuYCb7QWWaEjcbZmwR/uE/yP59q6m4t0nRlYH68Z/lUlgDbRiL5tq9AecVlOnGatI2pVp03eLPOLDU4V3xXURilU7XR1wyH0I7Vpw6neRMI4LtjETlVf5lH09PwrpvEei6DrUAOoSxW86jCXCSiOVPoe474OQe4NeeX6x6Dci2XUorxf4ZYSDx23gfd+vQ/njgnSnSd4s9GFanVXvq35HX32ute2flXdsYpFwRKhyv19v1rd8Oan9phCMwZgMZFee2viEPGiSbZFOAcHkfUdulTS31vHNmKQhsc7TWkMVKOkkZSwsJ/Az0+Y4kz60iPhga4HTfEVzZuCzySxd0Zs/l6V1Njr9lfAKsnlv/dk4P8A9euqnXjP1OWrhpQ80bxakLDNRI+5FPtSF62Rz2JDLgcVGS0h68VE74pqPKWwi/nVCK2raMl0nnL8sqfMGHWrunSNLZxs/UDBp6s2NrOGz6CooMxwhBxjP86lO+wyyzYpobr6YqL6tTJJURWO4dKbAr6jfx2VtJcSnCoM+59h9a8v1G+mvbpriXl5G+YDoAOw/Gt3xFrX26+NtGSYbY8gfxuf8On1J9Ko6X4U1O+IkMPkKeQZeP06152Im6kuSPQ9PDRjSjzz6jbd2bbgAKo5J6A0+SxbVZUXy2u5EbdHHjOD6+31rqtJ8GwWnN1Mbp89CuFH4d66OC2jgAEcagDsBilDBt6yFVxyT9xHBr4d1GHDXMHljGcIQ2B+tQXthHAgPLbjjHXNehsikk8k55rLuvD9rcMx/eQ7jktG5Dfn2/CtZYNP4WZRxr+0jz7QvB2o22vi9n1G6OksWP2XeSMkdOTwAeeOeK7u30i1ikDQWlurKeGkBcj8Savm0jSERRoFRRgCnxKDEPXGD9ehrelh4U1oiMTjauIac3sraaf8OfnRTlcowYHBByDTM0A5NI5j6V8PXqa/otnfAg+dErN7Njkfgc1a8u70yYT27MpXkYrz34MeI1FtPpMz8xN5kYP909R+B/8AQq9mt4IruMZAPFUl1Qrmj4e+IEFwqW+pLhhwH9Peuym1cR6ZLdWULX7KuVihxlvavMrzwos+Xiyj9iKq2za74ckEgV5YRzuj6j8Kpt2sxx0dzdTxx4nvnuPO0uXSo4jhfMt2Vm4zn5vr2pYbvUr8K1zeyup7FuPy6VuaB4t/tKEbJAXH3lPUfh+FbJu4ZP8Aj4s4pPdkBrllh5veZ3fW6d/dppf15nCXNuFbkg7j3qKzvdA0zVb2fVGdB5EKKUZ8PuMmUZV4YEDjPTt1rtb/AErw3eLvu7Fo8c7omdMf98kVyWseFPCkq3l9Fqt8FEXzRGPeAFDZx90kkE9Say9hKDu7FyrqpBxSZieGtSsdQvhHaWqJbzwBsuuWz1x7eo9h+FdA1jBuOECHvmuL8LKt5eXdvYX0gigkV+DtLg92AJ5zkY3ECu2e3kK9RkjHJrGo7s1wseWOj3HpHE0atGduOCOtJtcEkAfhSWsO2Pbk8HnmrSopxuyB6is2dMixYeIb7TsLvMkf9x+QPx7VtQeLrSVQJlkgb1xuH6f4VzpRRz5mVPrVd1QNk4FaQxNSHmc88PTn0sdrFrunS8i8iA/2jt/nU0mtadHEf+JhAD22tn+VcEyoRgKeKjMXYAmtnjm1axj9Rj3Op1Lxvp2lwvdO000calm2IxI/DGfyrNPxP0a48uO3unUyQC6DiFmBiOcMCOOSD78Guc1mRbTS55JNqqFxljxzxzVP4fwaXPbWjmSKQSRusUkpGzMZCKD/ALPB6dGJP1ujiJS0sY4ihCmk0zq9J+IPhbXo3aw1CbUJoziSMHayH/dOP0zUt74l8yJo7eB1zxktWJPrNvo17Bo2rql1dR8zSJHiP5+VCHqQAeccE9OlS2xjlupYcYZOVUnJ28d/xH59+tOvVqJXiLDKnN8s9zU8Ma1pNlcxWU1kthczHEczMXWZvTeeQT6Hr2zXdKhYY/SvObnSIb62kt503RyDHuPcH1rb8C+JZ55pvD2pybtRslDLK3/LzD0D/wC8OAfwPejC4jm92S1NMVh7e/A7FEAp5GKUEbeKaTxXaeeNcAAkDmq5JJxVgnIqHiqAQcDmoPM8mQqR8jcg+hqR3wOtVZpN2RQB+d1FJmjNc5Ze0jVrjRtRhvbc4eM5I7MO4P1r6P8ABniqHUrGC5ifdHIMj1HqD7jpXzFXY/DjxV/YeqLaXMmLO4YDJPCP2P0PQ/hVRYmfV+n3cNwg+YVt21tClu8k0Yww4z2rzu1F1HClzatuBGcetdLpfioSW7xzKRIRgqR1NXcQ/XofDukwJe3cy2c4XeDGcOxzx/k1nJ4vnuLMPalNnUPwzEevp/OvLvHlp4o1zVmvZ7KfyGby0xlkXBOOmccYra8MaB4gj0kW/wBkeNFG5p5j5cajPXJ5x+FebUr1XNwjGyPfhgsLDDQqyqJye67HXyatLewMzzu59C2QPwrJOpiNZklON6Hj8c/y/rXK6Xq4vdVFiuob97Eb4VIU492Gf0rtLHRLD54Zo4pd4wzSZc8+zEgflXOpc2tzerh5UNJRtfXsch4J8banBZwW2s6LY2ENvEYoprWAie4Yt/EFznAXqR9O9dmut3N2oeKwvFU95I9nH41FFpljo7GLT7aKBSQSUTk8dz+FakdxHJDlztUDqxpzk5O5z06cacbBZzSzNlgVJFaMaOFw3PvWXHqNsDmN1Y57VqRHzUDMVAPoaQTkhxQHAzipDCrLgnIP6U1ljHQ0hbA4amZc6HfZF6AilFmqnlqqS3ghPLAfjVO41sD5VYZ9aVhqRe1awF3YSwxMqThcxsem4dM+1c74H0C140XV4TJAZJJLWeGU4cEjzIjn7rBgCVPXccE4yZDeCZjumIx6GvMpvFGsad4n1XSrGNr+O9j85IXG9VkXjJH+0uVz1B2ntW9BpSszDE0+aF10PWZJbaDUXkvI4bTWYIkWK5k5t8DAwRg7gEbAOOTnPUYbp6Q2+srDEyMkMXMkZ+Vxxg/ju47HaSMjGPKZrS68UeHoptT1m6XVbUy+VZmQu8kitgBTJ+8BLKAcZ6V1Hw903Wbfw1HPqd5Mb27keeZZSxKknAX5uRhVXitcQ0onNhafNUuel/bU+6MDtWBqupR6L4p0PXidsMUpgnbpiNwV59gSD+FQbLqP+PdWb4jjkvdLmhkG4EGuKMrSTR6vKmrM95jkV1DA5BGaCw7kivM/g543/tzSP7JvZM3+n4ibceXT+Fv6H6e9ekl69yMlJKSPCnBwk4sUkEVBLJsyexp0sm1SaozSnyiwGTngVdiGxzzHNV5Jtoy31wKjCzMM/dH+f8KjlwvA546+nNID8/c0maSiucsdS03NKTQB718H/GV1L4fEOpMZI4ZTDHKeuAAQD+ePwr01Et7oiWMgH2rw7wdDJa+ELNRlTPI8pHrzgH8gK9C8La4IWW2uXK9lYnrWiZB6ZpvmfKAWbHTgnH04NWtb0o69otzpskrRpPGULIcEDH9P85JrKspgCCCpB9ea6G1nDqCOnHI5/wDrfQCmNOx5RpXwm1rR7gtAtjLJkgTs7KxH0wcH6V1dt4F11sM9/axE9dqlv8K7pPTjGO3+f88mpAT0FYRwlJbI7KmYYiprOV/U5WDwFIQv2jVpj6hFAB/nWhJ8PtGvLJ7a4WWQNyXMhB/MVuqjNyelSM5Vdo/lWqowWyMJVpy3ZwifCqJLOVbLU7uKRT8m/DAj0ORmsuTwz4msZkjLRTRnjeCV5+nNep2a7YyoHXmpbhBIgXGSDmoeHg+hSxNRdTzAaJ4qiX5rAtx95HUj+ef0qhejXLWETyQmOLcA7d1BPJ/CvYFO1ADWfq1nFdabcRFFIaMrjFT9ViUsTIwbHwErxK9zds5YZ+UY/Wkuvhlo9whVoyxPcsTXU2W+3sYIZG3SJGqsR3IAzU6nca1VKK2RjKpKW7PAPiD4CXw5tlh1C/sLTGfPhLOI2zxuQH5gc9OvpWTot/4T8PL9ptLq7vdRlG2W8uoXQ444A8pxjPsPqa9y+IWnJfeG51dNwBQn2+YV5Zb+EzftstrbcB1OMAfU1zVZOM0oq510IRnTbnJoxb7x3pKXC/ZrK4eY4Y3EdsgUE9R8yhj9cKaYfiLpcMiwy3fkvj7jKcj64yBWxqvgpoY/Ij5lbjKDGKxx8IkjhMskZLHkmqdGVT4xKtCnpTNK18W2t5gQXUMpPZHBP5VYm1aOWFlbGfSvN9d8N3Hhq8iubfchjcMrDsa9X8Myaf4v0JL4Rx+YvyTR90cdR9OhHsan6knsxrHNbo87tNZufCniaLWbLI2tiRBxvTPI/wA+1fTul6vb6vplnqNtIJIbmISIw7g14F4k8OWdxeRWkPmo8jBeGPTNek+Dnn07SYbVnCLAuwQ4+XHqK6aFOVP3XsYYirGp7y3O2uJvMOxTUM11HHJHErDO4Z/OsO61v7ONifPOei54X3NcRrXxU0LQpnhnnlv7jOJFt8HHtnoP510aHLc9Kv8AXLW2fy1YySf3Ixk1kzT6ndguqx2cf9+U5OPp/wDXryS++PJhjMei6FDAT/y0uH3H8h/jXCa/4+8ReJdw1DUpmiP/ACxj+SP6YHX8c1DkkFzybNKDmm07Nc5qLS00c1PaR+ddQxDq7qv5mgR7bZWottPsrbGPJgRPxCirkESzuIj3yM/hTJWUkkdBTbe6S3uopJCdgbn6UyTsfCOqzBPs00hYocc9RXo2nTLJt+YZx2JLH256fWvMYdONteRX1pKssMnXB7V3ukSrJECGz6jJ/lVpjOqhXIHIP06VZjQDk1mwXO0dc1Y+2jqDVgXmfAwKiJHtVGTUVUHmqj30s7Hy1JzTA1/tqQd81DJrar6D3rPjsLu5OTkD2qynhtmGZCT9TQIrXviqC3Qlmzj0o8N61Nr7TTKrJaRNtBb+Nv8AAVna34eaci3gxljt4HA+tdJpOnwaVYw2VuMRxjHuT3NO4F+NWZs1YVdoyajR1UZzTHnABPb+dICHVLePUYDbSgmLILAH72O1U5IIbW1WGCNU7AKKvIsjAF/wAo+zI0m8jOPWklrcq+ljKtNEQsZpVyx9aL6zR12Itas0uPkXrTRAMZPWqSJep5r4v8KxX1mVKDIPpXjXg7xjcfDzxFqSS27XNjMRG8QOCGXoy+/Ue+a+jPF17a6Rplxe3JxHEpOB1Y9gPUk4ryy2+FjeJV+3ahG9ssuXEa8MCecn/CnJdUSbmk+IvDXiO2uNa+2QWnkKv/HywRkfdnBz/ujp1rn/ABZ8YNLspTFoEAupSPmm5WMH27n+VcJ4/wDh9eeB7qJmcz2NxkRTY5DDqre/865LdWfP5AdHrHjzXdYVo5bxoYX6xw/KD9T1P4mucLc0hNNzUNt7gOLU3dTSeaTdUgcbRRRSNRR1q5pQJ1SzAGT56cevzCiimtxPY90EBDvGeg5rOuQQSCKKKZI6y1m7084hkbZn7hPFdl4Z8ZhXCTkID60UVSeoHfafrcN2VCuCfrWskc9wQEU49aKK0A0bbQujTNWjHa2tuOFBP0oopoCXzmH+rQKPVqoarrFrpcBmvrrap4CjjJ/CiinHViexjJ4geZ9yxoIz9zZ6fXvV2LUTJgc/Wiih6CLcUrN/Eas2482TnovP40UUMaLxXioLh/JH+90ooqVuMZbwljvfrUkrBVLE4AHU0UVXUDi00+TxdqiahdIRpds+60iYf65h/wAtSPT+7+fpXSSPBZREvtCqKKKonofPvx38aNqV9H4ehh229uy3DyEfefaQAPYBjn3+leS7uaKK55vUQhbNJuooqRjSaYTRRQB//9k
����JFIF��;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 82
��C
!'"#%%%),($+!$%$��C $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$��h�"��
���}!1AQa"q2��#B��R��$3br�
�G�GE���v���g������Kٽ�iq@��q�q]<6��.=�:�0`c�Z���`z�t{iAW�[=r*e�����q�ջ&+nP����iM�qz����`0�oH�E|���x'^�U��hdc���}S|w"��⾃��{�
���#�)rHr��3�v��P��7Uq����W��L��9G���{lm?���c�w�q�yM�1��z�����&D���V���q�i�fy���1�Y�����J4&�S������I�Ӆ0pQ֤�70QL�ٌ�8��JM���VH����sSX�1�)���(2)���"��@����������������^Z�Gʸ�^�������������������������������������
��"�<WW ?����Q�Q�AF3N�P��R⍴iq�1K�) r-�>����
Z`��)q�1�i�R��"Ih��9�p^���/����u�p}�?A^l��B���Zt��x�����O>���|;裠�"�t9�I�`�q�J�*��O���Q�c"����= M"�i1�CFi�T�E5��NZh�ހ�)q����@������֘���fy���-�.��0�9�ft�_c_N����HX�YZu��E\{��@<WDZH�I�T���Y:���X�uU|Aw� �A��*[I�&(H��CQ���m �� �s^T��;�f���/��nf�����~�5Ȥ;ߖ��k��4A$Fh݃����B1[��5VXF9��h����?�%FȘlu 8�~����~R��J�5>Г�gz��J�2�F?�fx����7�`O�uxq�O��Ѹ��4���n����>�ꓻ9k��"�$BM6H&�NM)���(�E�F�������T�z�����x�Mx�Cz�I�)�=t���N��E�&�P)phFi�MS�(�M�e�2Ǔ�CK�4� ��zS�0�z��)A��p��p�N��✦�8-�5wNM��RQZ:y��qӟ����eCsN�� ��[L�H�z�����}��(�ʱǏ��皃��yڊ��9��k�Ӵ9��$���9���?�k���Q�I��U�?(��y�u.4$�H�k���wn<�����=4���H7��t�炧�`R0��WT�s[?�Xp�4��:��ZhE���x����3�W���}��\p[�oQ�z�}Ep�/��4�b�c�r���]G��Gc�E��Tg��M�P�iE�p��9{�?����#ӂ�q��I1&Jq�ޕ���������ܹl�9o�O�ҿh'f�]c����#K�x��9eS��zP���wդ�o�����.�Hn�7�A")fhSo+�������8]cM{
�:��Gj���v���ԓۧ-ks��G��Lt��|+ԓQk���P�����x�=��լ�����K�\�g��2W�����8�x���X��@O\I���V����H���KY�G�n�=�\����j��%�y�|��z˸�FФL+SM+@���L+Sm��ϭ""�jGZaa���HG4�
p��p4�������)�pk&��7Z��$E[�.|���1�����<sߦ=k�A[VrJ���F��%�g�����>e��p�`��u�2I������k�����FX�Qx���VZ'����H������vS�
îq��\�����Euae�� �LWt�&q���l��l5%�m�
J��?�F�5 9�B�Z�`0���fkWG������|!�b���a8��Z�
Ғ���x^2���t��S��Y��~���� ����o�A���B�]�pk���?�i�����巩�RZ��7!��xrr�~n+�4w�fS�צh`9�P����Uc��(�P���ȷf�^8�,��F2Յ�nT�+;v�,� �����a˭���5�$Q��k��B��F��9�A Ec��[ַ���8��?��*Vf�����5�����v֣�2:{U���qQ_\��u��g��y�.>���R��F'=��p�httT���N�v�SI�H��\2��Cx�ݓ��V���v�'�|�\
�/C<R\�!�(�N��L��P�q��rw2�db1��x��%>�W���_�z����+��ȿ�[8�<��3��l4��É��(�ң#��X�M�i�
`0�i��i�@
ja�ژz�4x5j�O�%�* i�@2en�"��pqR@�����|��$�8�9���+��=��k�+@��#d���ʛG�Y�z``Z�>"�WK�c�;X��vk���-��.6�qﴲ����|J���#�����g�~��
...
��G��(��n1���;߭I+R����EWP8����v������>�H��a�-H�����]$��D�Ъ(����Ͽ�hڕ�~�����!y����}��仹�����B�&�(��i��E��
Aucun commentaire:
Enregistrer un commentaire