我想从一个数据包HTTP / 1.1 200 OK嗅探超文本。
为此,我编写了以下代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <stdbool.h>
#include "lib/socket/socket.h"
#define ETH_P_ALL 0x0003
FILE *logfile;
int i;
int Set_Packet (unsigned char* data , int Size);
int main()
{
logfile=fopen("log.txt","w");
struct ether_header *eptr;
u_char *ptr;
int saddr_size , data_size;
struct sockaddr saddr;
unsigned char *buffer = (unsigned char *) malloc(65536i);
printf("Starting...\n");
int sock_raw = socket( AF_PACKET , SOCK_RAW , htons(ETH_P_ALL));
setsockopt(sock_raw , SOL_SOCKET , SO_BINDTODEVICE , "wlan0" , strlen("wlan0")+ 1 );
if(sock_raw < 0)
{
perror("Socket Error");
return 1;
}
while(1)
{
saddr_size = sizeof saddr;
data_size = recvfrom(sock_raw , buffer , 6553600 , 0 , &saddr , (socklen_t*)&saddr_size);
Set_Packet(buffer,data_size);
}
}
int Set_Packet (unsigned char* data , int Size){
if(data[35]==80) {
fprintf(logfile,"%d\n",Size);
for(i=0 ; i < Size ; i++){
fprintf(logfile,"%02X",data[i]);
}
fprintf(logfile,"\n\n");
}
}
但是此代码无法正常工作。只能获得2725字节的超文本。
例如:
我的程序的超文本(2725字节)
1f8b0800000000000003ec3cdb92db3696cf99aaf90784296f774f28ead6ea8bd4d26cecb6934c25e34c2e93c9b85c5b107128a205026c00d4a5b5aada7fd8cfd987fd97fd81fd85ad03921229a9edae9e919f368e2ddc7170ee000e78f3f9eddb573ffff6c36b12db448c7effbb1bfc2582cac9d003e98d7effbbcf6e62a00c139fdd2460290963aa0dd8a197d9a871e5556a244d60e8cd38cc53a5ad4742252d483bf4e69cd978c860c64368b88c4fb8e49653d1302115306ce3386e24cbad80d1af3036dc0251a9e5097fa0962b49a8a46269b821ff4e6edf7eef720f10842ab969e6bd7641616042cd53ec5c81e62b4ba85c92099f8124a9e2d2fa64a93232e74290884b46a82502a8b1a47de977da57fec5658f842a4935c4200d9f01826ff824b65126c8bc8035051d299d501902d180283038521dd480fc1c734352adee20b4442a4b94144ba2a208b421360622a80563c9149673a5994fc6349c0a2ea78650c96ab32460350f8d4fc699250950c9e524ca844fe22ca1b231d7dc5a9025ac865043e620844f123ae5724254a6379002354b6215c924036d2c4e15294d60067aa924041e69962432762980d8650a43cfc2c2364363bc11e3339f479a26e0c75d3feef963a1c2e97da62cf821b7e0f364e273697c63359f02fe2839f16754fb633ff399f595f043eaa8e5dbb1624bdf22ebf936f6211903f3233ec934f8915216b48f75f833d12a4bfd0464e6abcca699f575365efa34635cf933ce40f956fbd6fac8da3ef7a763e69b6cecc76d3fa472468d6f71449f45d2372995bef1259df98626a9cf84cfc0522e8c4f0d67e0a73ef51d68545b1e0af019083f0489008df9c4a7692ac0faa162e00b3a06e1471c0433607dcbfc7bdf20a8544ffdb8e3d3f158fb264b12aa973e0db592cbc4cf84afc6c81abee509f80642878f5483cf988f94f7e30bdf2454085f7044c90665742cc087c4a78c6930c6173001c9fcf87c9552c6b89cf45ba91d24544fb8ecb720198c9566a0fbad41a4a46d18fe00fd76abf5c265fb5cc6a0b91dcc00574a45830a3e91fd313520b884c13a4748899e922839351081057d1c612a60962b2a8859e071c5b849055df61dd30cd688e315ced3880179b7df1eac11356225b8b10dc7817da9108efb0aa3addcbfa6a8d996f7c710290dfe7d9f468e54db9abce0be68b12ab4443182c3e92ac753c3a434ccb1b82850d70895103435d02f1383f51f8a11ff50cef987d5582d10bbd8b7e837568b4123510f8d47aae6309e72fb486d8e9c928e8466560d9c52dd52af11d1848b65dffb06c40c907ee4cf9081e7934d814fbed29c0a9f182a4dc380e651de759e23bcd36a0d6a04087a03d4444860c970e54af7f5644c4f3bbd9e4f3abd2efed3f349fbace0b1c65859ab927ee7c5206ffdc565eff2f2f2aa60b782843aa162805aa4c12054da69fa1cfb15aeeca48b7250ab521c719db3d70e1adc3839a3e642392858df75ebbed8640bd0ba2f066bba3a387b6581bd4b9fe0f27a6db7ba35edc76a067aaf9f539d4e38369d4f5b7ebb7de9b7ce06eb745559d0f976410528bd745105ff2e339647cb0dc00222a449bad894e8824ce9a2148d7a4df7a2d2d8757725ebac2a430dd4e27dc64d3858c7ed1cc219d59c4adb774aa611d2d494f46bb55aed567b8066692b0d411b9281006bab2212b47a90d459f115c56915f9fe67cf273f50412d97aac6908f70627b87135bc1758e291353a6e6fd4eba20dd74412ed20571f46af9f827685f9d5578a8d7d943798ebbb84d0a82fa98fc10377cd16a5df65aadc13abe40051e9f3b4b77beda67e85dc9d932c4d5b94fae7af87723275bda1e9cbb6855a577dcd9307eba2881eb5e777bddee00571209356fcc354dfb630d74da408a5570d139778374ab1c79e58aceb7e3dac1c66c94a4cc5b5e94805a4da54193d4cfd214744851ffc5bdd54edb757cb1aa2b80030cb4231b8f31e23ad6ab8dd9aaa8239ed009f411eb5437269a320ed29e5a451cd6fc922f48f1ffd95e4970d9db2f3c3b2b15ab437b45039d63bea4ef1e63b9da75eee0acaaac3c56820dd66e3d1ba3dceea50bd24a17a44c5471d1fe002ef6955d6e934b7b8570a2e6244609ce484d1b454251db77c8297a9174477f20d5d792ce56fbf3ec22a2aa646b3aaa266892ce08dd2c1bcb48fd9fc7b9aaae7fd6c182d2f8dc770316ba78cb0bb9cec6759276fbda27ed4ecba9ed8f6979345e68c5f017b53c97696683fb6e6b396e57a42d3734050fb637d82d55437579550aa18c57672b2881336dadbd231b326f669c3dd82fa9c830b246e1431c6cf52cbd9bb37baff5a25c7f183f18d3aba2d7e1ad58bf4b57bdcb30d346e9bedb55811efc3341abda54e2c8dbaa6bd0ee0e82ceb7182cf8704b2ec76429d5206d7da5253bd500c7953d36d2c626e41ef0016959070fc2f4e8640e3bde4ae9f372e9cc45e1fa06d2a89d86bbe2842bab3bcc75e8cef7a0dbe5c475003adaca227668e19fc16108f3492a83149a23584edbab5c97b861eba6ea45c14e97c84e4116b7ba0f4cacf2b2cec58b9a12aa99c217358de2bcbf75104faf2ec4e52a1440757fac6c8ca812d79df3e95695ee684fc701077dd62eea85aed3f27bfeaa335a5b6eeb745a7ea77d8d07016755cd97dbb6020442573b2e503be8ed396bbdadb1be7d75fbf2f6abba7fd6ab0d5870620590aa9fbdafcfb6dee73a5061c941a89f9d75291387cc46b0d0d384cf0f735daea95bb99a6e55771a8746ba4f1ed2deac5dd9722e7678eaf14d4445fb1e1ada86f76112cd6909e6aec75fbacc55a68bdbabd21feaef6e9412ba285db4ce15c2398fb9054740e8a71a1a3932f33d6089ce8b129d45a23ae0dae261c56a67c76c55ba2bc03947dbb894853a2e9d24ed78f98e352c2b3a9cbbc9700754db2377aef261813262e3d5cefea960bcde79afd7eb0dd6ee84059b7dcce8161df6247267f8aa9b7381fab09880adf67a56fd93aa7b72c86a6f86e9475c1bdb5091dbb2ecee759c83b1692ae881964ec450936fdbe1c9db2323a2f753ef89ee50305bd4c73ba08a772877bee1918b0364c611c986ae8e43f3a21c44bde7dd34aa8ae9caef742efd4e17b797ae57bc83a5c7a62ba5335761b305a1153d830aa6d031eb60ac578f6e2836158b12f2795bf6f8aa2a475261afc1fa5f13609c9ea2cc6d24a6952ece56e9e3e33befb3b2cfd9f1207b7ba8df73b5f78d3653d642c16d9dd6a5df6975dcdf768e42bf90762e1b55c176d6f2904e425bfd21355881be66a4f609b3d16eb579678bcd10353fabaae2dd807577b53a46cd8fab0151f7991f73ab9c5b97ab82376fdedcbe7953557975fc57ac636f0b53ddb1aacf5951fb67bb9becd263f09d97513de1727e437e4297ef78b668fe9c27789e4da5ad36dbe183ce9e7f543d5cead546d93932a857d6363e87ab0e77fcd0166d4385f53ac8584fc0bc66f19037e3cdc9c8dede137791d5e5b472a7a2d53ebf6fddd507daefb76988770681906137ed76ab34fbe2f5f5ebabd7af72fee592e15169e3fafafaba228b357736de58841d5b592ced9f3d517b6fa24735cf0108fc12e1a545ed39f4ad83bbb4a56d798ad1baba7cd9eae21226adf3eeaaba3945b6a58be9ea206e673d42f78f033e768ab89d6e91b2adcfbe75d5773dde7590f5b26eddeea2f5aafaae071ce5a21ba1be9ba86a12e869dbbfeafaf9beb8a825c5fd4d991daf3ee49086f3d6551a999aeedef3bf769562dd73db0c42e2ce01c35656a6abca3abbbb47a01579c9f3959e99f0376925aac3b47b3b0e8e235ce5268241c8f1d8af3a1811bc3a1e117cb57fe2bb0ee61793793c9f4eabf35dba9a8d86af1da35435552edbf7f36b46bb77b3ada71b73c6400eb656acdbca9bcecfdb8f5d06ad8314ec7deba10227cee15ccab2aaea0a9740d574676bdb36d5b0da71a86b9bff50659a832612e63e499454ae198acf437491c5bd7d1217824cb6927c8ecb2267ab0d0a487986edd8badba9e9dcf53a5053ae76b5cc57af5fe2ac62dc33828bd5a37a2498c44b71beaa29b42d28ddc7f4ce21706b23e53aa6d80914fae6a6e9f8ca5d68177f6f3e6f34def188084bbe7d4daedfbbabf9fc7abb7a157b4767342ff588d1e1d08bad4d4dbfd90c99bc33412854c62241b5bb8c6ed23bba680a3e364dbc1ced9998cf9adde032e86ef3c19df14637cd7ccc7ff2a41a4caa240bee4cb31d9c079d4d41c2e5febc9fbf03c978f4bed1c82fa237ffdf34cb10851b749bcb6b6ac6672414d498a157f24711ad90df1db974ad59794e9337c386edb24a1ae58d6e28893544f9fafacd265349e56abfe96dc2167e7afd967c55442bdc8cf5e85bd9b885d4c6374d3aba69c6edcdf817e5f8a0236ff4bab883dfc41ab04d7081b1d472637988e391e608efe7b96c301c75131811906f25aa628c16b869c617c50a9b8ccf8a247ad0c58cf979ca1316f58d4a20a51340e0c9475ad3b1ca6c2333dee82b4cb90803462d7d4adf4873904c2c1b457084f1466f5c11462d10ab33639f324caaf98c86cb06620c1290d61bfd4423b0cb3c7c22af7dca401340cfa3615516c6dee86bb0844be27279efa6a4b3d16705f715ec54e27a8f01f3fd0029b57dc1889516a5ff5ff01e0ef1bffff5df79acc5e88befbbddce65f7f227270d3f2a655f75baddf3d6395955dc4152a8f9adf640a5415ea92455395b5aaa2d71f2e3a6e66ce83d3632c2418aff761bffa04128ca0eb4fc4e51342e4110b87e053636e36ca499ecfc771a65d2c5059c9eadeab533aac9ed50c29cdc520ba7673e1b32156648587f3c3c41813ff143189e841aa885d7c2d1fcc4a7e1f084a62948f62ae6829df8c60e4f1c5e4e7c668627851379e2cbe109ee114efc091f9e4cc01623bc5c7ecb4e7c910e592054e83c9a20d5caaa50097f9e0e451aa05bba781b9d9e20ff9c9c0d87ad3f8ab47f922bbf93c1fe3af890bd0be1fde9491e27737236e0ef8c7dff8e99f7433960ef26fcfde9e304397b47c3f7a7fc6c60f572e5869b0f7950042cfcca2553f3a044cd80cf0395823c3dc31406028190a7de4d6cbd2fbd448c6ec6cafbd263cbd14d739b2a2b3dd72914cac0e9d900670a877cfe6efc7eb0aeaf29a4368c4fe1ac8486158d3fba92c11a1bb2190eeb10c2f8ece46cc06681e3b2afffeddb5b6fc06655e4cc022e25e86f7efefebb613ecc20740861b3b303a8369ba1739e3b391b98809aa544b6c09f9381091844a08727ee07f36568db890b6dc312b466f3f44bafd9bc3361904c3873aa8135d58eb6087298823bf3473bf4bebc0d26607f03aa4fcff2f4f74adab8ccfcf2f3ab9c9937d96f54a6cde959b1247336589f9d96cbaa18c152a076e4fab564a4b08a18c2d719fd1a2f89b150580ca7f83460601e192fc94deeb98f7663e88ae23fde34e30ece918e7e0511aa04d0247da4d3e7e43b3e059260609de109175497316ec647f54d7982c3a45a614856116f676317f0962863090dc34c530b072cde36f0af0c56b331b5386a486540be51738c52f349260502e1c67d04126e093779d45da671d70d64a2a840d0301e90fccf7ffc27511106cd15e174028c71a545ac9dc3e5180853b29889dbdcec32c65d94a2556e51332a327497f7e3f8f0560bed918fb75051c4c3bdb8be72bd0e732e2c710f6f79dc1530f41550e0a95e220a559252b9c4d83ea0614c54e46099c2925093220ab0280ffb437640e4a51065422c2b319063200e72ab8a70480dd4608e270807124c03060c72ec5620a4ece140d0e0e6adae49453881268eb60e47d496f071c93263710533d07482e19313aa99c33d77fd4e34108a5888c018ae24062e294dc630715ac1395cb04841dbe0a6996efc43948537b8849f70d6b7d560d21f1d020a5effec261dfdac7019a9068387782c473325881c7f8bee923b7758d2475e4bc592b823af4d2bd411dcf186766b916eb906a80e63e22203fb39b8755f4085dec6f5bf410c22f7c58a0dbd5419eb11ea4ce5e31e5beeebe5a0e46e7a3ea557c4c55e8c43c6aeaed915b4e945189e9f775a2d08afbb2d08a1771e75bd8ddbe28e133d920a1a42ac04033df45ee319e76689bffcf89de7981d865e1e23ba3777364eb8dd8c991f076efaa05f65d02f0186dd3f2b56ddc465e774dcf8afb96e73a4fca1c2593fe64a61abb67e043c87154be45e6ee20ad5904d0e09da46b18454221744b83b2cc9152921d41c650a77fcfd92bf0eb877dea85a38d6dee8c66d99cb92d982b833162c775b961bab31b9d93720796e9a367685bfa48c22232a991735b171b3ece8763a797ff6311f3ee50b0e18d41d283df146b56cbe25c131f06f057c7796ef8d3aadf655e34f54363add9c10796307ccd366bfa3d3986b8a696f54c93c69e637306eb43acf9c3981090d358d6c20c17aa35af6e9eb7eeeecdca4b94a32ce4190a937da2b3a3e0e34bda392265300c940c43c27c3a1d2a763e4f21fa087b1b1ca26b10dc6424d4caa6c60e739690ed53c1da6d63361bab70157dec8fd3c79b6ee73674b3a9d9c0045e2e9ebbb78e68c549a39682e2706b47b7f91c65c5006228d7921931f6df26428dbd7cfd5112a96124f912c86ed6f3920d7198f573e5d7e9eabbd26a0294f382b04a7967d3a5e9e2b3161a72d4daebd36c9e3af39bf9d4a95c8ed452d7b7c191903cdecb2c16518842ab84bbdd16ec9f1f16e326aa91c7319b34cc9493093de68bfecf870c4dc501d8c27dea84c3d1dffede7ae9d0b1e2a39a342c0520365266783c3e54fe7c6f367c293da4c36c654de519d50c36530510167dee870f9f1fd9954cd413724d887808137aa653f017562aa192c029d79a36dfaf854307c2271f7615a9d00f7b3b85132b94e7cb4eae9b478363668048247f9110c4594d40b8e0f81a4773430536f54249eae132e9e6d910c9ecab0000cdaa34de6f8567aa2149b3e148670937e3a8e9fcb7b54a0b76ab3721351cf1fdf6f0d61c683b9f14645e2f87b07ab41b2e5d2d82c8a8264696295f26899affef1baa773c0d573e5cd703ce0c92c686059712c5ef7d63edae4f832697157a3433cb792782f1f2b93724b4581bf0fd43e1db6e762509a90c9656e51b7e9e3cbaea133a597f84e317f805910eb40e92790274197e5df1c8edd92e34b189ed71a2595e0b4c0c56ec9f1f79e5acda95474aa32cb94d2c5d67cbff0f814d120f0c80c8cb9b8b808f0a53ec533e542a43f547bfc1dacc90cee475d6865aab981d2ed38587e7cff6f9681b0948a3118ba2c2cd27ed9f1f70689927cbacc0c24544e28dbea58f44a3f50797c1d97597c482ff37d6b25737c4f019f1d2d52ad8234f64695ccf1fdf294ba07202a0a630003395b1c28fc04672934c2c782268c55b983df2b3abed462b846634293525aebf9e39f228830a4f814c7d2b0b06b01d5dee860f1f1774f8ce3f51d6e94f004239bbacf65d44a8eefbbe1b6680e54d8fc230d39590e141e9f376c0ca1caa4d54b739f710d89b2503a678f551dffd40bd25085026cbcdcf1681fa9383ed7d818387e8a659c09fc1a88a94d1f58edd0f5c116c7bf5fb8378b2094de28ff3d3e95cc9c4e2a577829c5cb142e23e58d1ead3abe37996abc930de98c33eaf6e53b05c7f725edac91d2e9140236f54695ccf1fd109ef049964bca26797c7b6b13d9a0d2c4bc7033eaf9e35bd9389945a52edfa68fef5b713b9e049079a322717c4b0a536aa9509380cb20a3dea89e3f3ea633c9a728c5398b5573c7d736898ae5586490c08e4d78a4e2f8721e89888b044caa21e1595257f8a8793ed2e0e938eb3df7848351a01838551c7254b3c7c70f4da92e5865933cfefed9857934522596e8260890c506e070f9d3e1e93dfb3e7506320f32481678835ac91edf1a02d031175c699a2a53bfb00d302ae6c3f5c73f1f9c4a6e1bb2116a15c65008f47ed9d325e5d97707cae2a37549a55c5a4d39061c56b1e18ccb131a7d8a3b4113e056012f7bf2d4f1a934510f94ea806bbc6c2892c7f76650a987d918aca633b7f370443854fa09f6d0777318979bc4076f54cf1fdff20a2a175c4e18b526b0f8e1a162cf78a8f813dc89a8b42139e82c8c55a24cc8835478a343a5c7c70c97a19a486e55c37de8067dfd59a1f21fadfa04188a01df24e0a307905683b1d4c554677ab3b9fe40fdf1e1136052818fb858c148b5fcf1ad22a466d96b77da1115a2d36ab782399f72f7eed0943bfd0f36383e5f2554325186bd54329f2056323390250dca66dc945711fb659f00035c0346bae4006c33c7e74e06d684b1a092f5b6f635056ff448c5f17dd910422b021a065ce2ddf32673fc9913b59c827641269be4f12d3e03293144566b2e23f72dbfc2397ba4e2f87830d9039512c66a0e32e2566e635e0e571cdf13a309c50fc2d2c56e14ce2315c7f79818a5ac6140c2848a3d8dfa81cae3530f1f9c684829d7a51fb75bf2096c32b04542a7f814a9b4c23b259f206e87cf80cee9d250c926023f0a5e80f248c5f12d71eaded65ad05ce98253f68a8ecf1f532a536e68c0ad37daa6ff91139266f12e233f101895f5f86ff5217625957f3670fb3cbb48fdffa3ec673dca76cfddb758dc3c7cffecc67d3875f3d0a6f6b8b0f6f80e9febff4ba8d2e560e7cbfd04e98eb55f09417ecc3fa8ff2360c83cb09b663e7c3ed76775526f28fcfbdf95df4ec81fa27aeea7f2c984031ec0c2e29352c358b218fee9bc9bde5fcffff6e7bfdecf04bdfb61f2c3cbacfbf6564e60f1f5edddc5eb573479f8ebf4d7e86bfaa2f3e6f2f2e1faedf9c584fe769bbe39bffecbd7f72f3a2fff6aafdb17af54f6f7ae7de884cbbf9c4f27dfcfae93bf9b7b78d179f9eb2f6f5f745e5e3edcbee8bc7cbd78f91d9d4e5fff0df8adf9feb797bffe7617fef6a27beb91fcd1ace77e6a5f68704fb58a0f30dcb80f488cfe0f0000ffff0300b4deef4360620000
Wireshar的超文本(12731)
1F8B0800000000000003EC3CDB92DB3696CF99AAF90784296F774F28EAD6EA8BD4D26CECB6934C25E34C2E93C9B85C5B107128A205026C00D4A5B5AADA7FD8CFD987FD97FD81FD85AD03921229A9EDAE9E919F368E2DDC7170EE000E78F3F9EDDB573FFFF6C36B12DB448C7EFFBB1BFC2582CAC9D003E98D7EFFBBCF6E62A00C139FDD2460290963AA0DD8A197D9A871E5556A244D60E8CD38CC53A5AD4742252D483BF4E69CD978C860C64368B88C4FB8E49653D1302115306CE3386E24CBAD80D1AF3036DC0251A9E5097FA0962B49A8A46269B821FF4E6EDF7EEF720F10842AB969E6BD7641616042CD53EC5C81E62B4BA85C92099F8124A9E2D2FA64A93232E74290884B46A82502A8B1A47DE977DA57FEC5658F842A4935C4200D9F01826FF824B65126C8BC8035051D299D501902D180283038521DD480FC1C734352ADEE20B4442A4B94144BA2A208B421360622A80563C9149673A5994FC6349C0A2EA78650C96AB32460350F8D4FC699250950C9E524CA844FE22CA1B231D7DC5A9025AC865043E620844F123AE5724254A6379002354B6215C924036D2C4E15294D60067AA924041E69962432762980D8650A43CFC2C2364363BC11E3339F479A26E0C75D3FEEF963A1C2E97DA62CF821B7E0F364E273697C63359F02FE2839F16754FB633FF399F595F043EAA8E5DBB1624BDF22EBF936F6211903F3233EC934F8915216B48F75F833D12A4BFD0464E6ABCCA699F575365EFA34635CF933CE40F956FBD6FAC8DA3EF7A763E69B6CECC76D3FA472468D6F71449F45D2372995BEF1259DF98626A9CF84CFC0522E8C4F0D67E0A73EF51D68545B1E0AF019083F0489008DF9C4A7692AC0FAA162E00B3A06E1471C0433607DCBFC7BDF20A8544FFDB8E3D3F158FB264B12AA973E0DB592CBC4CF84AFC6C81ABEE509F80642878F5483CF988F94F7E30BDF2454085F7044C90665742CC087C4A78C6930C6173001C9FCF87C9552C6B89CF45BA91D24544FB8ECB720198C9566A0FBAD41A4A46D18FE00FD76ABF5C265FB5CC6A0B91DCC00574A45830A3E91FD313520B884C13A4748899E922839351081057D1C612A60962B2A8859E071C5B849055DF61DD30CD688E315CED3880179B7DF1EAC11356225B8B10DC7817DA9108EFB0AA3ADDCBFA6A8D996F7C710290DFE7D9F468E54DB9ABCE0BE68B12AB4443182C3E92AC753C3A434CCB1B82850D70895103435D02F1383F51F8A11FF50CEF987D5582D10BBD8B7E837568B4123510F8D47AAE6309E72FB486D8E9C928E8466560D9C52DD52AF11D1848B65DFFB06C40C907EE4CF9081E7934D814FBED29C0A9F182A4DC380E651DE759E23BCD36A0D6A04087A03D4444860C970E54AF7F5644C4F3BBD9E4F3ABD2EFED3F349FBACE0B1C65859AB927EE7C5206FFDC565EFF2F2F2AA60B782843AA162805AA4C12054DA69FA1CFB15AEECA48B7250AB521C719DB3D70E1ADC3839A3E642392858DF75EBBED8640BD0BA2F066BBA3A387B6581BD4B9FE0F27A6DB7BA35EDC76A067AAF9F539D4E38369D4F5B7EBB7DE9B7CE06EB745559D0F976410528BD745105FF2E339647CB0DC00222A449BAD894E8824CE9A2148D7A4DF7A2D2D8757725EBAC2A430DD4E27DC64D3858C7ED1CC219D59C4ADB774AA611D2D494F46BB55AED567B8066692B0D411B9281006BAB2212B47A90D459F115C56915F9FE67CF273F50412D97AAC6908F70627B87135BC1758E291353A6E6FD4EBA20DD74412ED20571F46AF9F827685F9D5578A8D7D943798EBBB84D0A82FA98FC10377CD16A5DF65AADC13ABE40051E9F3B4B77BEDA67E85DC9D932C4D5B94FAE7AF87723275BDA1E9CBB6855A577DCD9307EBA2881EB5E777BDDEE00571209356FCC354DFB630D74DA408A5570D139778374AB1C