nget-0.27.1/0002775000175000017500000000000010162001761013040 5ustar donutdonut00000000000000nget-0.27.1/FAQ0000644000175000017500000000544410063540446013405 0ustar donutdonut00000000000000nget Frequently Asked Questions Index: 1. Why doesn't -G somegroup -r "*.png" work? 2. Whats a regexp? I'm too lazy to read a man page. 3. Whats this "unequal line count" error? 4. I have maxconnections set at 10 but only one article is being downloaded at a time. Why? 5. -r with --no-autopar (or things that imply it: -T/-M/-U/-K) still doesn't match par files. 6. After download, some files have weird names like foo.bar.293874837.283747324 Answers: 1. Why doesn't nget -G somegroup -r "*.png" work? nget uses regular expressions, not glob style matching. So what you really meant was -r ".*\.png" (or really -r "\.png", since regexps aren't "anchored" by default.) For regexp info see grep(1) or regex(7) or if you are using --with-pcre, see perlre(1). 2. Whats a regexp? I'm too lazy to read the man pages. Simple description: take your glob expression, replace: . with \. ? with . * with .* See the manpages for more complicated stuff ;) 3. Whats this "unequal line count" error? (Starting with nget 0.15, this is only an error if unequal_line_error=1 in your .ngetrc. Otherwise it is just a warning.) If its always the same difference, its likely that your news server just counts the lines differently. You can use the linelenience option to accept this, the man page has more info but you can add a line like: linelenience=0,1 to the server section of your .ngetrc (Assuming the server returns 1 above normal) The main reason this check is in there is to catch any possible download corruption, but in a case like this its just the server and nget disagree on the method of counting. pan most likely just doesn't care if the line count is different. 4. I have maxconnections set at 10 but only one article is being downloaded at a time. Why? The maxconnections setting allows connections to multiple servers to be left open simultaneously, so that when retrieving posts that are not all available on one server, it doesn't have to keep reconnecting each time it needs to change server. Support for retrieving multiple articles at once (either from the same server or seperate ones) is not currently implemented, though it is on my todo. 5. -r with --no-autopar (or things that imply it: -T/-M/-U/-K) still doesn't match par files. Order of arguments matters. These args must appear before the -r/-R in order for the -r/-R to know not to treat par files specially. 6. After download, some files have weird names like foo.bar.293874837.283747324 When nget downloads an incomplete or broken file, it will change the filename in order to avoid the dupechecking algorithm thinking you have a correct copy already. In addition, when par2 files are present and autopar is on, nget may purposely download incomplete files even when you don't specify -i, in order to aquire enough data for par2 to repair the set. nget-0.27.1/myregex.cc0000644000175000017500000001335110056212766015041 0ustar donutdonut00000000000000/* myregex.* - regex() wrapper class Copyright (C) 1999-2003 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "myregex.h" static string regex_match_word_beginning_safe_str; static string regex_match_word_beginning_str; static string regex_match_word_end_str; static bool regex_initialized=0; static string regex_test_op(const char **ops, const char *pat, const char *match1, const char *match2){ char buf[100]; for (; *ops; ops++) { sprintf(buf, pat, *ops); try { c_regex_nosub rx(buf, REG_EXTENDED); if (match1==rx && match2==rx) return *ops; } catch (RegexEx &e) { //ignore any errors here, since they just would just mean that op didn't work, so go on and try the next one. } } return ""; } static void regex_init(void) { const char *wbeg_ops[]={"\\<", "\\b", "[[:<:]]", "(^|[^A-Za-z0-9])", NULL}; regex_match_word_beginning_str = regex_test_op(wbeg_ops, "%sfoo", "a fooa", "fooa"); if (!regex_match_word_beginning_str.empty() && regex_match_word_beginning_str[0]!='(') regex_match_word_beginning_safe_str = regex_match_word_beginning_str; if (regex_match_word_beginning_safe_str.empty()) { PERROR("\nWARNING: your regex library is not sufficient for nget's internal use."); if (regex_match_word_beginning_str.empty()) PERROR("It doesn't seem possible to match the beginning or end of a word.\n"); else PERROR("It can match the beginning or ending of a word, but with an ugly hack\n" "which can't be used in some cases due to the use of grouping."); PERROR("Please consider compiling nget with a better regex library, such as PCRE.\n" "If your library does support word boundary matching, please let me know the\n" "proper codes for it, so it may be supported in a future version.\n"); } const char *wend_ops[]={"\\>", "\\b", "[[:>:]]", "($|[^A-Za-z0-9])", NULL}; regex_match_word_end_str = regex_test_op(wend_ops, "foo%s", "afoo a", "afoo"); PDEBUG(DEBUG_MIN,"regex_init regex_match_word_beginning:%s regex_match_word_end:%s",regex_match_word_beginning_str.c_str(), regex_match_word_end_str.c_str()); regex_initialized=true; } const string& regex_match_word_beginning_safe(void) { if (!regex_initialized) regex_init(); return regex_match_word_beginning_safe_str; } const string& regex_match_word_beginning(void) { if (!regex_initialized) regex_init(); return regex_match_word_beginning_str; } const string& regex_match_word_end(void){ if (!regex_initialized) regex_init(); return regex_match_word_end_str; } void regex_escape_string(const string &s, string &buf){ for (string::const_iterator cp=s.begin(); cp!=s.end(); ++cp) { if (strchr("{}()|[]\\.+*?^$",*cp)) buf+='\\';//escape special chars buf+=*cp; } } c_regex_base::c_regex_base(const char * pattern,int cflags){ if (!pattern) pattern=""; int re_err; if ((re_err=regcomp(®ex,pattern,cflags))){ char buf[256]; regerror(re_err,®ex,buf,256); regfree(®ex); throw RegexEx(Ex_INIT, "regcomp: %s", buf); } } c_regex_base::~c_regex_base(){ regfree(®ex); } c_regex_nosub::c_regex_nosub(const char * pattern,int cflags):c_regex_base(pattern,cflags|REG_NOSUB){ } int c_regex_subs::doregex(regex_t *regex,const char *str){ if ((re_err=regexec(regex,str,nregmatch,regmatch,0))) return re_err; freesub(); rnsub=regex->re_nsub; assert(nregmatch>=rnsub); if (rnsub>=0 && nregmatch){ int i; //rsub=new (string*)[rnsub+1]; rsub=new string[rnsub+1]; for (i=0;i<=rnsub;i++){ assert(regmatch[i].rm_eo>=regmatch[i].rm_so); // printf("doregex: i=%i/%i so=%i eo=%i\n",i,rnsub,regmatch[i].rm_so, regmatch[i].rm_eo); // if (regmatch[i].rm_so>=0) rsub[i].assign(str+regmatch[i].rm_so,regmatch[i].rm_eo-regmatch[i].rm_so); } } return 0; } void c_regex_subs::setnregmatch(int num){ if (nregmatch!=num){ if (regmatch) delete [] regmatch; nregmatch=num; if (nregmatch>0) regmatch=new regmatch_t[nregmatch+1]; else regmatch=NULL; } } c_regex_subs::c_regex_subs(int nregm):nregmatch(-1){ regmatch=NULL; setnregmatch(nregm); rsub=NULL; rnsub=-1; } c_regex_subs::~c_regex_subs(){ freesub(); if (regmatch){ delete [] regmatch; // free(regmatch); } } void c_regex_subs::freesub(void){ if (rsub){ // for (int i=0;i<=rnsub;i++){ // delete rsub[i]; // } delete [] rsub; } rsub=NULL; rnsub=-1; } int c_regex_r::match(const char *str,c_regex_subs*subs){ subs->setnregmatch(nregmatch); return subs->doregex(®ex,str); } c_regex_subs * c_regex_r::match(const char *str){ c_regex_subs *subs=new c_regex_subs(nregmatch); // subs->doregex(regex,str,nregmatch); match(str,subs); return subs; } c_regex_r::c_regex_r(const char * pattern,int cflags):c_regex_base(pattern,cflags){ if (cflags®_NOSUB){ nregmatch=0; }else{ nregmatch=1; for (;*pattern!=0;pattern++){ if (*pattern=='(')//this could give more regmatches than we need, considering nregmatch++;//escaping and such, but its a lot better than a static number } //pcre needs more matching space for something? #ifdef HAVE_PKG_pcre //nregmatch=nregmatch*15/10; nregmatch=nregmatch*2; #endif } } nget-0.27.1/TODO0000644000175000017500000000460507561332531013544 0ustar donutdonut00000000000000* Some sort of scripting interface? * Should doarticle_show_multi be an option? (always/auto(default)/never) (longness/shortness optional too?) * Some sort of hierarchical organization for .ngetrc, so that you could set some options for abunch of hosts or a bunch of groups at once... * A "connectiongroup" or something so that you can set a maxconnections within a certain set of servers should uu_msg(1) (Note) be a decode error? This should be handled: uu_msg(1):Note: No encoded data found in ec3317e3-71cf792d.011 1 decoding errors occured, keeping temp files. *create .ngetrc on first run from NNTPSERVER or -h if specified instead. (and add new servers not seen before when used with -h? need to keep comments somehow though...) *derr on uulib messages - file already exists derr.. is the current hack good enough? *redo byte lenience? *store d/l path in -w files (for -W) *make -W switch to read in -w files and decode it all. (also if downloading any, update the file ) definataly gonna do: *make MID_INFO_MIN_KEEP, etc config options *fix EINTR (should try read again, not err (also should keep the same timeout within multiple tries?)) *add log output ability *fix tempfiledir mixup where -w to write doesn't use the tempfile dir and such misses parts we already have might do eventually: * cross post detection/mark downloaded in all groups somehow?? Hm, actually it might not be that hard.. since mids are globally unique, it could just use the same midinfo for _all_ groups? sound good/bad? * ditch/fix uulib? Are there any alternatives? * per group (.ngetrc) config setting for "base directory", then -p/-P could be relative of that. (maybe if you put / or ./ in front, it would be relative to root/current instead of base) * allow searching based upon date/author/lines etc. ideally, something like: nget -r (date > 03/04/1999 && (author = bob && subject = file\.) || (subject = blah)).. DONE, but uses postfix method.. might be nice to add infix type. * threaded (background) decoding only considering: * should the midinfo files only store the mid for the first part, like now, or the mid of all parts of the post? not gonna do: * test libc5/old gcc (forget it. ngetlite is their only hope. upgrade.) Misc info: rfc977 "Network News Transfer Protocol" rfc1036 "Standard for Interchange of USENET Messages" various other rfcs/drafts: http://www.tin.org/docs.html nget-0.27.1/par2/0002755000175000017500000000000010162001761013702 5ustar donutdonut00000000000000nget-0.27.1/par2/diskfile.h0000644000175000017500000000571507737475663015711 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __DISKFILE_H__ #define __DISKFILE_H__ // A disk file can be any type of file that par2cmdline needs // to read or write data from or to. class DiskFile { public: DiskFile(void); ~DiskFile(void); // Open the file bool Open(void); bool Open(string filename); bool Open(string filename, u64 filesize); // Check to see if the file is open #ifdef WIN32 bool IsOpen(void) const {return hFile != INVALID_HANDLE_VALUE;} #else bool IsOpen(void) const {return file != 0;} #endif // Read some data from the file bool Read(u64 offset, void *buffer, size_t length); // Close the file void Close(void); // Get the size of the file u64 FileSize(void) const {return filesize;} // Get the name of the file string FileName(void) const {return filename;} // Does the file exist bool Exists(void) const {return exists;} public: static string GetCanonicalPathname(string filename); static void SplitFilename(string filename, string &path, string &name); static string TranslateFilename(string filename); static bool FileExists(string filename); static u64 GetFileSize(string filename); // Search the specified path for files which match the specified wildcard // and return their names in a list. static list* FindFiles(string path, string wildcard); protected: string filename; u64 filesize; // OS file handle #ifdef WIN32 HANDLE hFile; #else FILE *file; #endif // Current offset within the file u64 offset; // Does the file exist bool exists; protected: #ifdef WIN32 static string ErrorMessage(DWORD error); #endif }; // This class keeps track of which DiskFile objects exist // and which file on disk they are associated with. // It is used to avoid a file being processed twice. class DiskFileMap { public: DiskFileMap(void); ~DiskFileMap(void); bool Insert(DiskFile *diskfile); void Remove(DiskFile *diskfile); DiskFile* Find(string filename) const; protected: map diskfilemap; // Map from filename to DiskFile }; #endif // __DISKFILE_H__ nget-0.27.1/par2/recoverypacket.cpp0000644000175000017500000000430207711146273017447 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif RecoveryPacket::RecoveryPacket(void) { diskfile = NULL; offset = 0; packetcontext = NULL; } RecoveryPacket::~RecoveryPacket(void) { delete packetcontext; } // Load the recovery packet from disk. // // The header of the packet will already have been read from disk. The only // thing that actually needs to be read is the exponent value. // The recovery data is not read from disk at this point. Its location // is recovered in the DataBlock object. bool RecoveryPacket::Load(DiskFile *_diskfile, u64 _offset, PACKET_HEADER &_header) { diskfile = _diskfile; offset = _offset; // Is the packet actually large enough if (_header.length <= sizeof(packet)) { return false; } // Save the fixed header packet.header = _header; // Set the data block to immediatly follow the header on disk datablock.SetLocation(diskfile, offset + sizeof(packet)); datablock.SetLength(packet.header.length - sizeof(packet)); // Read the rest of the packet header return diskfile->Read(offset + sizeof(packet.header), &packet.exponent, sizeof(packet)-sizeof(packet.header)); } nget-0.27.1/par2/crc.cpp0000644000175000017500000000375707664453143015211 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif // The one and only CCITT CRC32 lookup table crc32table ccitttable(0xEDB88320L); // Construct the CRC32 lookup table from the specified polynomial void GenerateCRC32Table(u32 polynomial, u32 (&table)[256]) { for (u32 i = 0; i <= 255 ; i++) { u32 crc = i; for (u32 j = 0; j < 8; j++) { crc = (crc >> 1) ^ ((crc & 1) ? polynomial : 0); } table[i] = crc; } } // Construct a CRC32 lookup table for windowing void GenerateWindowTable(u64 window, u32 (&target)[256]) { for (u32 i=0; i<=255; i++) { u32 crc = ccitttable.table[i]; for (u64 j=0; j> 8) & 0x00ffffffL) ^ ccitttable.table[(u8)crc]; } target[i] = crc; } } // Construct the mask value to apply to the CRC when windowing u32 ComputeWindowMask(u64 window) { u32 result = ~0; while (window > 0) { result = CRCUpdateChar(result, (char)0); window--; } result ^= ~0; return result; } nget-0.27.1/par2/ROADMAP0000644000175000017500000001441207664453174014736 0ustar donutdonut00000000000000commandline.h / commandline.cpp class CommandLine; This class is used to process the command line arguments passed to par2cmdline. Basic verification is done to ensure that invalid combinations of options are not used and that files exist. crc.h / crc.cpp u32 CRCUpdateChar(u32 crc, u8 ch); u32 CRCUpdateBlock(u32 crc, size_t length, const void *buffer); u32 CRCUpdateBlock(u32 crc, size_t length); void GenerateWindowTable(u64 window, u32 (&windowtable)[256]); u32 ComputeWindowMask(u64 window); u32 CRCSlideChar(u32 crc, u8 chNew, u8 chOld, const u32 (&windowtable)[256]); These functions are used to calculate and verify the CCITT CRC32 values for blocks of data in data files. The latter three functions allow the rapid computation of the crc for data in a sliding window. creatorpacket.h / creatorpacket.cpp class CreatorPacket; This class is used to read and write "Creator Packets" to a recovery file. criticalpacket.h / criticalpacket.cpp class CriticalPacket; class CriticalPacketEntry; CriticalPacket is the base class for DesriptionPacket, VerificationPacket, MainPacket, and CreatorPacket. CriticalPacket encapsulates memory allocation for the packet, computation of the packet hash and writing the packet to disk. CriticalPacketEntry is used to record that a copy of a specific critical packet will be written to a particular file at a specific offset. datablock.h / datablock.cpp class DataBlock; Objects of this type are used to track blocks of data that belong to different files. When data is read from or written to a datablock, it calculates the correct file offset and length to use. descriptionpacket.h / descriptionpacket.cpp class DescriptionPacket; This class is used to read and write "File Description Packets" to a recovery file. The class can compute the file id for the file when creating recovery files and will verify that the packet is ok when it is loaded from a recovery file. diskfile.h / diskfile.cpp class DiskFile; class DiskFileMap; The DiskFile class encapsulates all file access. Each object of this type represents on file that par2cmdline is using, and references to it are used in any other object that needs to refer to a file. The DiskFileMap class is used to track which files have been processed. filechecksummer.h / filechecksummer.cpp class FileCheckSummer; The FileCheckSummer is used to compute the CRC and HASH of a sliding window onto a data file. The CRC is updated continuously as the window is slid allong the file, and the HASH is only calculated when it is needed. galois.h / galois.cpp class Galois; class GaloisTable; class GaloisLongMultiplyTable; The Galois object is used for galois arithmetic. GaloisTable encapsulates the log and antilog tables used for fast multiplation and division, and GaloisLongMultiplyTable is used by the ReedSolomon object to allow rapid multiplication of a block of data by the same value. mainpacket.h / mainpacket.cpp class MainPacket; The MainPacket is used to read and write a "Main Packet" to and from a recovery file. md5.h / md5.cpp class MD5Hash; class MD5Context; MD5Context objects are used to calculate the hash of a block of data. The resulting hash value is then stored in an MD5Hash object. par2cmdline.h / par2cmdline.cpp int main(int argc, char *argv[]); par2cmdline.cpp defines the main() function which is responsible for creating a CommandLine object to parse the command line parameters, and then to create either a Par2Creator or a Par2Repairer to either create recovery files or use them to verify and repair data files. par2cmdline.h contains #include lines for all required header files, as well as a number of type definitions. par2creator.h / par2creator.cpp class Par2Creator; This class encapsulates all of the procedures required to create recovery files from a set of data files. par2creatorsourcefile.h / par2creatorsourcefile.cpp class Par2CreatorSourceFile; Each object of this type represent one of the data files for which recovery files are to be created. It handles creation of a DescriptionPacket and a VerificationPacket, computation of the full file hash and 16k hash values and the calculation and recording of the crc and hash values for each data block withint the file. par2fileformat.h / par2fileformat.cpp struct PACKET_HEADER; struct FILEVERIFICATIONPACKET; struct FILEDESCRIPTIONPACKET; struct MAINPACKET; struct CREATORPACKET; struct RECOVERYBLOCKPACKET; These structures define the exact format used to store the various packets in a recovery file. par2repairer.h / par2repairer.cpp class Par2Repairer; This class encapsulates all of the procedures required to use a set of recovery files to verify and repair the data files for which they were created. par2repairersourcefile.h / par2repairersourcefile.cpp class Par2RepairerSourceFile; Each object of this class represents one of the data files that is being verified and repaired. It has a copy of the description packet and verification packet from the recovery files, and keeps track of exactly which disk files contain data blocks that belong to it. recoverypacket.h / recoverypacket.cpp class RecoveryPacket; This class is used to read and write the header of a Recovery Packet. If contains a DataBlock object which is used to read and write data to or from the rest of the recovery packet. verificationhashtable.h / verificationhashtable.cpp class VerificationHashTable; class VerificationHashEntry; The VerificationHashTable is to store details obtained from all of the verification packets. It is used to check whether or not the crc and hash values calculated by the FileCheckSummer match any of the data blocks from the data files. verificationpacket.h / verificationpacket.cpp class VerificationPacket; This class is used to read a write Verification Packets to and from recovery files. letype.h class leu32; class leu64; These two types are used by fileformat.h and are used to handle the type conversion between little endian and big endian numerical formats. nget-0.27.1/par2/par1repairer.h0000644000175000017500000000665707737475663016522 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __PAR1REPAIRER_H__ #define __PAR1REPAIRER_H__ class Par1Repairer { public: Par1Repairer(void); ~Par1Repairer(void); Result Process(const CommandLine &commandline, bool dorepair); protected: // Load the main PAR file bool LoadRecoveryFile(string filename); // Load other PAR files related to the main PAR file bool LoadOtherRecoveryFiles(string filename); // Load any extra PAR files specified on the command line bool LoadExtraRecoveryFiles(const list &extrafiles); // Check for the existence of and verify each of the source files bool VerifySourceFiles(void); // Check any other files specified on the command line to see if they are // actually copies of the source files that have the wrong filename bool VerifyExtraFiles(const list &extrafiles); // Attempt to match the data in the DiskFile with the source file bool VerifyDataFile(DiskFile *diskfile, Par1RepairerSourceFile *sourcefile); // Determine how many files are missing, damaged etc. void UpdateVerificationResults(void); // Check the verification results and report the details bool CheckVerificationResults(void); protected: string searchpath; // Where to find files on disk DiskFileMap diskfilemap; // Map from filename to DiskFile map recoveryblocks; // The recovery data (mapped by exponent) unsigned char *filelist; u32 filelistsize; u64 blocksize; // The size of recovery and data blocks u64 chunksize; // How much of a block can be processed. vector sourcefiles; vector extrafiles; u32 completefilecount; u32 renamedfilecount; u32 damagedfilecount; u32 missingfilecount; list verifylist; vector inputblocks; // Which DataBlocks will be read from disk vector outputblocks; // Which DataBlocks have to calculated using RS u64 progress; // How much data has been processed. u64 totaldata; // Total amount of data to be processed. bool ignore16kfilehash; // The 16k file hash values may be invalid }; #endif // __PAR1REPAIRER_H__ nget-0.27.1/par2/datablock.cpp0000644000175000017500000000446407711146273016356 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif // Open the file associated with the data block if is not already open bool DataBlock::Open(void) { if (diskfile == 0) return false; if (diskfile->IsOpen()) return true; return diskfile->Open(); } // Read some data at a specified position within a data block // into a buffer in memory bool DataBlock::ReadData(u64 position, // Position within the block size_t size, // Size of the memory buffer void *buffer) // Pointer to memory buffer { assert(diskfile != 0); // Check to see if the position from which data is to be read // is within the bounds of the data block if (length > position) { // Compute the file offset and how much data to physically read from disk u64 fileoffset = offset + position; size_t want = (size_t)min((u64)size, length - position); // Read the data from the file into the buffer if (!diskfile->Read(fileoffset, buffer, want)) return false; // If the read extends beyond the end of the data block, // then the rest of the buffer is zeroed. if (want < size) { memset(&((u8*)buffer)[want], 0, size-want); } } else { // Zero the whole buffer memset(buffer, 0, size); } return true; } nget-0.27.1/par2/crc.h0000644000175000017500000000655007737475663014664 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __CRC_H__ #define __CRC_H__ // These global functions are used to compute the CCITT CRC32 checksum of // blocks of data. // The CRC for a block of data may be computed piecemeal be repeatedly // calling CRCUpdateChar, and CRCUpdateBlock. // Given the CRC for a block of data in a buffer, CRCSlideChar may be used // to quickly compute the CRC for the block of data in the buffer that is the // same size but offset one character later in the buffer. // Construct the CRC32 lookup table from the specified polynomial void GenerateCRC32Table(u32 polynomial, u32 (&table)[256]); // A CRC32 lookup table struct crc32table { crc32table(u32 polynomial) { GenerateCRC32Table(polynomial, table); } u32 table[256]; }; // The one and only CCITT CRC32 lookup table extern crc32table ccitttable; // Update the CRC using one character inline u32 CRCUpdateChar(u32 crc, u8 ch) { return ((crc >> 8) & 0x00ffffffL) ^ ccitttable.table[(u8)crc ^ ch]; } // Update the CRC using a block of characters in a buffer inline u32 CRCUpdateBlock(u32 crc, size_t length, const void *buffer) { const unsigned char *current = (const unsigned char *)buffer; while (length-- > 0) { crc = ((crc >> 8) & 0x00ffffffL) ^ ccitttable.table[(u8)crc ^ (*current++)]; } return crc; } // Update the CRC using a block of 0s. inline u32 CRCUpdateBlock(u32 crc, size_t length) { while (length-- > 0) { crc = ((crc >> 8) & 0x00ffffffL) ^ ccitttable.table[(u8)crc]; } return crc; } // Construct a CRC32 lookup table for windowing void GenerateWindowTable(u64 window, u32 (&windowtable)[256]); // Construct the mask value to apply to the CRC when windowing u32 ComputeWindowMask(u64 window); // Slide the CRC along a buffer by one character (removing the old and adding the new). // The new character is added using the main CCITT CRC32 table, and the old character // is removed using the windowtable. inline u32 CRCSlideChar(u32 crc, u8 chNew, u8 chOld, const u32 (&windowtable)[256]) { return ((crc >> 8) & 0x00ffffffL) ^ ccitttable.table[(u8)crc ^ chNew] ^ windowtable[chOld]; } /* char *buffer; u64 window; //... u32 windowtable[256]; GenerateWindowTable(window, windowtable); u32 windowmask = ComputeWindowMask(window); u32 crc = ~0 ^ CRCUpdateBlock(~0, window, buffer); crc = windowmask ^ CRCSlideChar(windowmask ^ crc, buffer[window], buffer[0], windowtable); assert(crc == ~0 ^ CRCUpdateBlock(~0, window, buffer+1)); */ #endif // __CRC_H__ nget-0.27.1/par2/md5.h0000644000175000017500000000763410063426011014547 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __MD5_H__ #define __MD5_H__ // This file defines the MD5Hash and MD5Context objects which are used // to compute and manipulate the MD5 Hash values for a block of data. // Usage: // // MD5Context context; // context.Update(buffer, length); // // MD5Hash hash; // context.Final(hash); // MD5 Hash value #ifdef WIN32 #pragma pack(push, 1) #ifndef PACKED #define PACKED #endif #else #define PACKED __attribute__ ((packed)) #endif class MD5Hash { public: // Constructor does not initialise the value MD5Hash(void) {}; // Comparison operators bool operator==(const MD5Hash &other) const; bool operator!=(const MD5Hash &other) const; bool operator<(const MD5Hash &other) const; bool operator>=(const MD5Hash &other) const; bool operator>(const MD5Hash &other) const; bool operator<=(const MD5Hash &other) const; // Convert value to hex friend ostream& operator<<(ostream &s, const MD5Hash &hash); string print(void) const; // Copy and assignment MD5Hash(const MD5Hash &other); MD5Hash& operator=(const MD5Hash &other); public: u8 hash[16]; // 16 byte MD5 Hash value } PACKED; #ifdef WIN32 #pragma pack(pop) #endif #undef PACKED // Intermediate computation state class MD5State { public: MD5State(void); void Reset(void); public: void UpdateState(const u32 (&block)[16]); protected: u32 state[4]; // 16 byte MD5 computation state }; // MD5 computation context with 64 byte buffer class MD5Context : public MD5State { public: MD5Context(void); ~MD5Context(void) {}; void Reset(void); // Process data from a buffer void Update(const void *buffer, size_t length); // Process 0 bytes void Update(size_t length); // Compute the final hash value void Final(MD5Hash &output); // Get the Hash value and the total number of bytes processed. MD5Hash Hash(void) const; u64 Bytes(void) const {return bytes;} friend ostream& operator<<(ostream &s, const MD5Context &context); string print(void) const; protected: enum {buffersize = 64}; unsigned char block[buffersize]; size_t used; u64 bytes; }; // Compare hash values inline bool MD5Hash::operator==(const MD5Hash &other) const { return (0==memcmp(&hash, &other.hash, sizeof(hash))); } inline bool MD5Hash::operator!=(const MD5Hash &other) const { return !operator==(other); } inline bool MD5Hash::operator<(const MD5Hash &other) const { size_t index = 15; while (index > 0 && hash[index] == other.hash[index]) { index--; } return hash[index] < other.hash[index]; } inline bool MD5Hash::operator>=(const MD5Hash &other) const { return !operator<(other); } inline bool MD5Hash::operator>(const MD5Hash &other) const { return other.operator<(*this); } inline bool MD5Hash::operator<=(const MD5Hash &other) const { return !other.operator<(*this); } inline MD5Hash::MD5Hash(const MD5Hash &other) { memcpy(&hash, &other.hash, sizeof(hash)); } inline MD5Hash& MD5Hash::operator=(const MD5Hash &other) { memcpy(&hash, &other.hash, sizeof(hash)); return *this; } #endif // __MD5_H__ nget-0.27.1/par2/recoverypacket.h0000644000175000017500000000521507737475663017140 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __RECOVERYPACKET_H__ #define __RECOVERYPACKET_H__ // The RecoveryPacket object is used to access a specific recovery // packet within a recovery file (for when creating them, or using // them during a repair operation). // Because the actual recovery data for the packet may be large, the // RecoveryPacket object only contains a copy of packet header and // exponent value for the block and uses a DataBlock object for // all accesses to the actual recovery data in the packet. class RecoveryPacket { public: RecoveryPacket(void); ~RecoveryPacket(void); public: // Load a recovery packet from a specified file bool Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); public: // Get the lenght of the packet. u64 PacketLength(void) const; // The the exponent of the packet. u32 Exponent(void) const; // The length of the recovery data u64 BlockSize(void) const; // The data block DataBlock* GetDataBlock(void); protected: DiskFile *diskfile; // The specific file that this packet is stored in u64 offset; // The offset at which the packet is stored RECOVERYBLOCKPACKET packet; // The packet (excluding the actual recovery data) MD5Context *packetcontext; // MD5 Context used to compute the packet hash DataBlock datablock; // The recovery data block. }; inline u64 RecoveryPacket::PacketLength(void) const { return packet.header.length; } inline u32 RecoveryPacket::Exponent(void) const { return packet.exponent; } inline u64 RecoveryPacket::BlockSize(void) const { return packet.header.length - sizeof(packet); } inline DataBlock* RecoveryPacket::GetDataBlock(void) { return &datablock; } #endif // __RECOVERYPACKET_H__ nget-0.27.1/par2/verificationhashtable.cpp0000644000175000017500000000641007664453175020772 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif VerificationHashTable::VerificationHashTable(void) { hashmask = 0; hashtable = 0; } VerificationHashTable::~VerificationHashTable(void) { // Destroy the hash table if (hashtable) { for (unsigned int entry=0; entry<=hashmask; entry++) { delete hashtable[entry]; } } delete [] hashtable; } // Allocate the hash table with a reasonable size void VerificationHashTable::SetLimit(u32 limit) { // Pick a good size for the hash table hashmask = 256; while (hashmask < limit && hashmask < 65536) { hashmask <<= 1; } // Allocate and clear the hash table hashtable = new VerificationHashEntry*[hashmask]; memset(hashtable, 0, hashmask * sizeof(hashtable[0])); hashmask--; } // Load data from a verification packet void VerificationHashTable::Load(Par2RepairerSourceFile *sourcefile, u64 blocksize) { VerificationHashEntry *preventry = 0; // Get information from the sourcefile VerificationPacket *verificationpacket = sourcefile->GetVerificationPacket(); u32 blockcount = verificationpacket->BlockCount(); // Iterate throught the data blocks for the source file and the verification // entries in the verification packet. vector::iterator sourceblocks = sourcefile->SourceBlocks(); const FILEVERIFICATIONENTRY *verificationentry = verificationpacket->VerificationEntry(0); u32 blocknumber = 0; while (blocknumberInsert(&hashtable[entry->Checksum() & hashmask]); // Make the previous entry point forwards to this one if (preventry) { preventry->Next(entry); } preventry = entry; ++blocknumber; ++sourceblocks; ++verificationentry; } } nget-0.27.1/par2/par2cmdline.h0000644000175000017500000001477207737475663016322 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __PARCMDLINE_H__ #define __PARCMDLINE_H__ // Windows includes #ifdef WIN32 #define WIN32_LEAN_AND_MEAN #include #endif // STL includes #include #include #include #include #include #include #include #include #include // System includes #ifdef _MSC_VER #include #include #include #include #include #include #include #include #include #define snprintf _snprintf #define stat _stat #define __LITTLE_ENDIAN 1234 #define __BIG_ENDIAN 4321 #define __PDP_ENDIAN 3412 #define __BYTE_ORDER __LITTLE_ENDIAN typedef unsigned char u8; typedef unsigned short u16; typedef unsigned long u32; typedef unsigned __int64 u64; #ifndef _SIZE_T_DEFINED # ifdef _WIN64 typedef unsigned __int64 size_t; # else typedef unsigned int size_t; # endif # define _SIZE_T_DEFINED #endif #else // WIN32 #ifdef HAVE_CONFIG_H #include "../config.h" #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STDIO_H # include #endif #if HAVE_DIRENT_H # include # define NAMELEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMELEN(dirent) (dirent)->d_namelen # if HAVE_SYS_NDIR_H # include # endif # if HAVE_SYS_DIR_H # include # endif # if HAVE_NDIR_H # include # endif #endif #if STDC_HEADERS # include #else # if !HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # if !HAVE_MEMCPY # define memcpy(d, s, n) bcopy((s), (d), (n)) # define memove(d, s, n) bcopy((s), (d), (n)) # endif #endif #if HAVE_MEMORY_H # include #endif #if !HAVE_STRICMP # if HAVE_STRCASECMP # define stricmp strcasecmp # endif #endif #if HAVE_INTTYPES_H # include #endif #if HAVE_STDINT_H # include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; #else typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; typedef unsigned long long u64; #endif #if HAVE_SYS_STAT_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_ENDIAN_H # include # ifndef __LITTLE_ENDIAN # ifdef _LITTLE_ENDIAN # define __LITTLE_ENDIAN _LITTLE_ENDIAN # define __LITTLE_ENDIAN _LITTLE_ENDIAN # define __BIG_ENDIAN _BIG_ENDIAN # define __PDP_ENDIAN _PDP_ENDIAN # else # error does not define __LITTLE_ENDIAN etc. # endif # endif #else # define __LITTLE_ENDIAN 1234 # define __BIG_ENDIAN 4321 # define __PDP_ENDIAN 3412 # if WORDS_BIGENDIAN # define __BYTE_ORDER __BIG_ENDIAN # else # define __BYTE_ORDER __LITTLE_ENDIAN # endif #endif #else // HAVE_CONFIG_H #include #include #include #include #include #include #include #include #include #include #include #define stricmp strcasecmp #define _stat stat typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; typedef unsigned long long u64; #endif #endif using namespace std; #ifdef offsetof #undef offsetof #endif #define offsetof(TYPE, MEMBER) ((size_t) ((char*)(&((TYPE *)1)->MEMBER) - (char*)1)) #ifdef WIN32 #define SPATHSEP "\\" #define ALTPATHSEP "/" #else #define SPATHSEP "/" #define ALTPATHSEP "\\" #endif // Return type of par2cmdline typedef enum Result { eSuccess = 0, eRepairPossible = 1, // Data files are damaged and there is // enough recovery data available to // repair them. eRepairNotPossible = 2, // Data files are damaged and there is // insufficient recovery data available // to be able to repair them. eInvalidCommandLineArguments = 3, // There was something wrong with the // command line arguments eInsufficientCriticalData = 4, // The PAR2 files did not contain sufficient // information about the data files to be able // to verify them. eRepairFailed = 5, // Repair completed but the data files // still appear to be damaged. eFileIOError = 6, // An error occured when accessing files eLogicError = 7, // In internal error occurred eMemoryError = 8, // Out of memory } Result; #define LONGMULTIPLY // par2cmdline includes #include "letype.h" #include "crc.h" #include "md5.h" #include "par2fileformat.h" #include "commandline.h" #include "diskfile.h" #include "datablock.h" #include "criticalpacket.h" #include "mainpacket.h" #include "creatorpacket.h" #include "descriptionpacket.h" #include "verificationpacket.h" #include "recoverypacket.h" #include "par2repairersourcefile.h" #include "filechecksummer.h" #include "verificationhashtable.h" #include "par2repairer.h" #include "par1fileformat.h" #include "par1repairersourcefile.h" #include "par1repairer.h" // Heap checking #ifdef _MSC_VER #define _CRTDBG_MAP_ALLOC #include #define DEBUG_NEW new(_NORMAL_BLOCK, THIS_FILE, __LINE__) #endif #endif // __PARCMDLINE_H__ nget-0.27.1/par2/md5.cpp0000644000175000017500000002353207664453157015125 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif // Convert hash values to hex ostream& operator<<(ostream &result, const MD5Hash &h) { char buffer[33]; sprintf(buffer, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", h.hash[15], h.hash[14], h.hash[13], h.hash[12], h.hash[11], h.hash[10], h.hash[9], h.hash[8], h.hash[7], h.hash[6], h.hash[5], h.hash[4], h.hash[3], h.hash[2], h.hash[1], h.hash[0]); return result << buffer; } string MD5Hash::print(void) const { char buffer[33]; sprintf(buffer, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", hash[15], hash[14], hash[13], hash[12], hash[11], hash[10], hash[9], hash[8], hash[7], hash[6], hash[5], hash[4], hash[3], hash[2], hash[1], hash[0]); return buffer; } MD5State::MD5State(void) { Reset(); } // Initialise the 16 byte state void MD5State::Reset(void) { state[0] = 0x67452301; state[1] = 0xefcdab89; state[2] = 0x98badcfe; state[3] = 0x10325476; } // Update the state using 64 bytes of new data void MD5State::UpdateState(const u32 (&block)[16]) { // Primitive operations #define F1(x,y,z) ( ((x) & (y)) | ((~(x)) & (z)) ) #define F2(x,y,z) ( ((x) & (z)) | ((~(z)) & (y)) ) #define F3(x,y,z) ( (x) ^ (y) ^ (z) ) #define F4(x,y,z) ( (y) ^ ( (x) | ~(z) ) ) // The first version of ROL does not work on an Alpha CPU! //#define ROL(x,y) ( ((x) << (y)) | (((unsigned int)x) >> (32-y)) ) #define ROL(x,y) ( ((x) << (y)) | (((x) >> (32-y)) & ((1< 0) { size_t size = min(buffersize-used, length); Update(wordblock, size); length -= size; } // Update as many whole buffers as possible while (length >= buffersize) { Update(wordblock, buffersize); length -= buffersize; } // Update any remainder if (length > 0) { Update(wordblock, length); } } // Update using data from a buffer void MD5Context::Update(const void *buffer, size_t length) { const unsigned char *current = (const unsigned char *)buffer; // Update the total amount of data processed. bytes += length; // Process any whole blocks while (used + length >= buffersize) { size_t have = buffersize - used; memcpy(&block[used], current, have); current += have; length -= have; u32 wordblock[16]; for (int i=0; i<16; i++) { // Convert source data from little endian format to internal format if different wordblock[i] = ( ((u32)block[i*4+3]) << 24 ) | ( ((u32)block[i*4+2]) << 16 ) | ( ((u32)block[i*4+1]) << 8 ) | ( ((u32)block[i*4+0]) << 0 ); } MD5State::UpdateState(wordblock); used = 0; } // Store any remainder if (length > 0) { memcpy(&block[used], current, length); used += length; } } // Finalise the computation and extract the Hash value void MD5Context::Final(MD5Hash &output) { // Temporary work buffer u8 buffer[64]; // How many bits were processed u64 bits = bytes << 3; // Pad as much as needed so that there are exactly 8 bytes needed to fill the buffer size_t padding; if (used >= buffersize-8) { padding = buffersize-8 + buffersize - used; } else { padding = buffersize-8 - used; } memset(buffer, 0, padding); buffer[0] = 0x80; Update(buffer, padding); // Pad with an additional 8 bytes containing the bit count in little endian format buffer[7] = (unsigned char)((bits >> 56) & 0xFF); buffer[6] = (unsigned char)((bits >> 48) & 0xFF); buffer[5] = (unsigned char)((bits >> 40) & 0xFF); buffer[4] = (unsigned char)((bits >> 32) & 0xFF); buffer[3] = (unsigned char)((bits >> 24) & 0xFF); buffer[2] = (unsigned char)((bits >> 16) & 0xFF); buffer[1] = (unsigned char)((bits >> 8) & 0xFF); buffer[0] = (unsigned char)((bits >> 0) & 0xFF); Update(buffer, 8); for (int i = 0; i < 4; i++) { // Read out the state and convert it from internal format to little endian format output.hash[4*i+3] = (u8)((MD5State::state[i] >> 24) & 0xFF); output.hash[4*i+2] = (u8)((MD5State::state[i] >> 16) & 0xFF); output.hash[4*i+1] = (u8)((MD5State::state[i] >> 8) & 0xFF); output.hash[4*i+0] = (u8)((MD5State::state[i] >> 0) & 0xFF); } } // Return the Hash value MD5Hash MD5Context::Hash(void) const { MD5Hash output; for (unsigned int i = 0; i < 4; i++) { // Read out the state and convert it from internal format to little endian format output.hash[4*i+3] = (unsigned char)((MD5State::state[i] >> 24) & 0xFF); output.hash[4*i+2] = (unsigned char)((MD5State::state[i] >> 16) & 0xFF); output.hash[4*i+1] = (unsigned char)((MD5State::state[i] >> 8) & 0xFF); output.hash[4*i+0] = (unsigned char)((MD5State::state[i] >> 0) & 0xFF); } return output; } ostream& operator<<(ostream &result, const MD5Context &c) { char buffer[50]; sprintf(buffer, "%08X%08X%08X%08X:%08X%08X", c.state[3],c.state[2],c.state[1],c.state[0], (u32)((c.bytes >> 32) & 0xffffffff), (u32)(c.bytes & 0xffffffff)); return result << buffer; } string MD5Context::print(void) const { char buffer[50]; sprintf(buffer, "%08X%08X%08X%08X:%08X%08X", state[3],state[2],state[1],state[0], (u32)((bytes >> 32) & 0xffffffff), (u32)(bytes & 0xffffffff)); return buffer; } nget-0.27.1/par2/descriptionpacket.h0000644000175000017500000000634007737475663017625 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __DESCRIPTIONPACKET_H__ #define __DESCRIPTIONPACKET_H__ // The description packet records details about a file (including its name, // size, and the Hash of both the whole file and the first 16k of the file). class DescriptionPacket : public CriticalPacket { public: // Construct the packet DescriptionPacket(void) {}; ~DescriptionPacket(void) {}; public: // Store the computed Hash values in the packet. void Hash16k(const MD5Hash &hash); void HashFull(const MD5Hash &hash); // Compute and return the file id hash from information in the packet void ComputeFileId(void); const MD5Hash& FileId(void) const; // Return the size of the file u64 FileSize(void) const; public: // Load a description packet from a specified file bool Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); // Return the name of the file string FileName(void) const; // Get the Hash values from the packet const MD5Hash& HashFull(void) const; const MD5Hash& Hash16k(void) const; }; // Get the file id from the packet inline const MD5Hash& DescriptionPacket::FileId(void) const { assert(packetdata != 0); return ((const FILEDESCRIPTIONPACKET*)packetdata)->fileid; } // Get the size of the file from the packet inline u64 DescriptionPacket::FileSize(void) const { assert(packetdata != 0); return ((const FILEDESCRIPTIONPACKET*)packetdata)->length; } // Get the name of the file from the packet // NB whilst the file format does not guarantee that the name will have a NULL // termination character, par2cmdline always allocates a little extra data // and fills it with NULLs to allow the filename to be directly read out of // the packet. inline string DescriptionPacket::FileName(void) const { assert(packetdata != 0); // return (char*)((const FILEDESCRIPTIONPACKET*)packetdata)->name(); return (char*)((const FILEDESCRIPTIONPACKET*)packetdata)->name; } // Get the full file hash value from the packet inline const MD5Hash& DescriptionPacket::HashFull(void) const { assert(packetdata != 0); return ((const FILEDESCRIPTIONPACKET*)packetdata)->hashfull; } // The the hash of the first 16k of the file from the packet inline const MD5Hash& DescriptionPacket::Hash16k(void) const { assert(packetdata != 0); return ((const FILEDESCRIPTIONPACKET*)packetdata)->hash16k; } #endif // __DESCRIPTIONPACKET_H__ nget-0.27.1/par2/par1repairersourcefile.cpp0000644000175000017500000000600107722242036021071 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif Par1RepairerSourceFile::Par1RepairerSourceFile(PAR1FILEENTRY *fileentry, string searchpath) { targetexists = false; targetfile = 0; completefile = 0; hashfull = fileentry->hashfull; hash16k = fileentry->hash16k; filesize = fileentry->filesize; u32 namelen = (u32)((fileentry->entrysize - offsetof(PAR1FILEENTRY, name)) / 2); for (u32 index=0; indexname[index]; if (ch >= 256) { // Convert the Unicode character to two characters filename += ch && 255; filename += ch >> 8; } else { filename += ch & 255; } } // Translate any characters the OS does not like; filename = DiskFile::TranslateFilename(filename); // Strip the path from the filename string::size_type where; if (string::npos != (where = filename.find_last_of('\\')) || string::npos != (where = filename.find_last_of('/')) #ifdef WIN32 || string::npos != (where = filename.find_last_of(':')) #endif ) { filename = filename.substr(where+1); } filename = searchpath + filename; } Par1RepairerSourceFile::~Par1RepairerSourceFile(void) { } void Par1RepairerSourceFile::SetTargetFile(DiskFile *diskfile) { targetfile = diskfile; } DiskFile* Par1RepairerSourceFile::GetTargetFile(void) const { return targetfile; } void Par1RepairerSourceFile::SetTargetExists(bool exists) { targetexists = exists; } bool Par1RepairerSourceFile::GetTargetExists(void) const { return targetexists; } void Par1RepairerSourceFile::SetCompleteFile(DiskFile *diskfile) { completefile = diskfile; sourceblock.SetLocation(diskfile, 0); sourceblock.SetLength(diskfile ? diskfile->FileSize() : 0); } DiskFile* Par1RepairerSourceFile::GetCompleteFile(void) const { return completefile; } void Par1RepairerSourceFile::SetTargetBlock(DiskFile *diskfile) { targetblock.SetLocation(diskfile, 0); targetblock.SetLength(diskfile->FileSize()); } nget-0.27.1/par2/descriptionpacket.cpp0000644000175000017500000000531307711076264020141 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif void DescriptionPacket::Hash16k(const MD5Hash &hash) { ((FILEDESCRIPTIONPACKET *)packetdata)->hash16k = hash; } void DescriptionPacket::HashFull(const MD5Hash &hash) { ((FILEDESCRIPTIONPACKET *)packetdata)->hashfull = hash; } void DescriptionPacket::ComputeFileId(void) { FILEDESCRIPTIONPACKET *packet = ((FILEDESCRIPTIONPACKET *)packetdata); // Compute the fileid from the hash, length, and name fields in the packet. MD5Context context; context.Update(&packet->hash16k, sizeof(FILEDESCRIPTIONPACKET)-offsetof(FILEDESCRIPTIONPACKET,hash16k) +strlen((const char*)packet->name)); context.Final(packet->fileid); } // Load a description packet from a specified file bool DescriptionPacket::Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { // Is the packet big enough if (header.length <= sizeof(FILEDESCRIPTIONPACKET)) { return false; } // Is the packet too large (what is the longest permissible filename) if (header.length - sizeof(FILEDESCRIPTIONPACKET) > 100000) { return false; } // Allocate the packet (with a little extra so we will have NULLs after the filename) FILEDESCRIPTIONPACKET *packet = (FILEDESCRIPTIONPACKET *)AllocatePacket((size_t)header.length, 4); packet->header = header; // Read the rest of the packet from disk if (!diskfile->Read(offset + sizeof(PACKET_HEADER), &packet->fileid, (size_t)packet->header.length - sizeof(PACKET_HEADER))) return false; // Are the file and 16k hashes consistent if (packet->length <= 16384 && packet->hash16k != packet->hashfull) { return false; } return true; } nget-0.27.1/par2/par1repairer.cpp0000644000175000017500000005707207722242036017026 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif static u32 smartpar11 = 0x03000101; Par1Repairer::Par1Repairer(void) { filelist = 0; filelistsize = 0; blocksize = 0; completefilecount = 0; renamedfilecount = 0; damagedfilecount = 0; missingfilecount = 0; } Par1Repairer::~Par1Repairer(void) { map::iterator i = recoveryblocks.begin(); while (i != recoveryblocks.end()) { DataBlock *datablock = i->second; delete datablock; ++i; } vector::iterator sourceiterator = sourcefiles.begin(); while (sourceiterator != sourcefiles.end()) { Par1RepairerSourceFile *sourcefile = *sourceiterator; delete sourcefile; ++sourceiterator; } sourceiterator = extrafiles.begin(); while (sourceiterator != extrafiles.end()) { Par1RepairerSourceFile *sourcefile = *sourceiterator; delete sourcefile; ++sourceiterator; } delete [] filelist; } Result Par1Repairer::Process(const CommandLine &commandline, bool dorepair) { // Get filesnames from the command line string par1filename = commandline.GetParFilename(); const list &extrafiles = commandline.GetExtraFiles(); // Determine the searchpath from the location of the main PAR file string name; DiskFile::SplitFilename(par1filename, searchpath, name); // Load the main PAR file if (!LoadRecoveryFile(searchpath + name)) return eLogicError; // Load other PAR files related to the main PAR file if (!LoadOtherRecoveryFiles(par1filename)) return eLogicError; // Load any extra PAR files specified on the command line if (!LoadExtraRecoveryFiles(extrafiles)) return eLogicError; //cout << endl << "Verifying source files:" << endl << endl; // Check for the existence of and verify each of the source files if (!VerifySourceFiles()) return eFileIOError; if (completefilecountOpen(filename)) { // If we could not open the file, ignore the error and // proceed to the next file delete diskfile; return true; } { string path; string name; DiskFile::SplitFilename(filename, path, name); //cout << "Loading \"" << name << "\"." << endl; } bool havevolume = false; u32 volumenumber = 0; // How big is the file u64 filesize = diskfile->FileSize(); if (filesize >= sizeof(PAR1FILEHEADER)) { // Allocate a buffer to read data into size_t buffersize = (size_t)min((u64)1048576, filesize); u8 *buffer = new u8[buffersize]; do { PAR1FILEHEADER fileheader; if (!diskfile->Read(0, &fileheader, sizeof(fileheader))) break; // Is this really a PAR file? if (fileheader.magic != par1_magic) break; // Is the version number correct? if (fileheader.fileversion != 0x00010000) break; ignore16kfilehash = (fileheader.programversion == smartpar11); // Prepare to carry out MD5 Hash check of the Control Hash MD5Context context; u64 offset = offsetof(PAR1FILEHEADER, sethash); // Process until the end of the file is reached while (offset < filesize) { // How much data should we read? size_t want = (size_t)min((u64)buffersize, filesize-offset); if (!diskfile->Read(offset, buffer, want)) break; context.Update(buffer, want); offset += want; } // Did we read the whole file if (offset < filesize) break; // Compute the hash value MD5Hash hash; context.Final(hash); // Is it correct? if (hash != fileheader.controlhash) break; // Check that the volume number is ok if (fileheader.volumenumber >= 256) break; // Are there any files? if (fileheader.numberoffiles == 0 || fileheader.filelistoffset < sizeof(PAR1FILEHEADER) || fileheader.filelistsize == 0) break; // Verify that the file list and data offsets are ok if ((fileheader.filelistoffset + fileheader.filelistsize > filesize) || (fileheader.datasize && (fileheader.dataoffset < sizeof(fileheader) || fileheader.dataoffset + fileheader.datasize > filesize)) || (fileheader.datasize && (fileheader.filelistoffset <= fileheader.dataoffset && fileheader.dataoffset < fileheader.filelistoffset+fileheader.filelistsize || fileheader.dataoffset <= fileheader.filelistoffset && fileheader.filelistoffset < fileheader.dataoffset + fileheader.datasize))) break; // Check the size of the file list if (fileheader.filelistsize > 200000) break; // If we already have a copy of the file list, make sure this one has the same size if (filelist != 0 && filelistsize != fileheader.filelistsize) break; // Allocate a buffer to hold a copy of the file list unsigned char *temp = new unsigned char[(size_t)fileheader.filelistsize]; // Read the file list into the buffer if (!diskfile->Read(fileheader.filelistoffset, temp, (size_t)fileheader.filelistsize)) { delete [] temp; break; } // If we already have a copy of the file list, make sure this copy is identical if (filelist != 0) { bool match = (0 == memcmp(filelist, temp, filelistsize)); delete [] temp; if (!match) break; } else { // Prepare to scan the file list unsigned char *current = temp; size_t remaining = (size_t)fileheader.filelistsize; unsigned int fileindex = 0; // Allocate a buffer to copy each file entry into so that // all fields will be correctly aligned in memory. PAR1FILEENTRY *fileentry = (PAR1FILEENTRY*)new u64[(remaining + sizeof(u64)-1)/sizeof(u64)]; // Process until we run out of files or data while (remaining > 0 && fileindex < fileheader.numberoffiles) { // Copy fixed portion of file entry memcpy((void*)fileentry, (void*)current, sizeof(PAR1FILEENTRY)); // Is there enough data remaining if (remaining < sizeof(fileentry->entrysize) || remaining < fileentry->entrysize) break; // Check the length of the filename if (fileentry->entrysize <= sizeof(PAR1FILEENTRY)) break; // Check the file size if (blocksize < fileentry->filesize) blocksize = fileentry->filesize; // Copy whole of file entry memcpy((void*)fileentry, (void*)current, (size_t)(u64)fileentry->entrysize); // Create source file and add it to the appropriate list Par1RepairerSourceFile *sourcefile = new Par1RepairerSourceFile(fileentry, searchpath); if (fileentry->status & INPARITYVOLUME) { sourcefiles.push_back(sourcefile); } else { extrafiles.push_back(sourcefile); } remaining -= (size_t)fileentry->entrysize; current += (size_t)fileentry->entrysize; fileindex++; } delete [] (u64*)fileentry; // Did we find the correct number of files if (fileindex < fileheader.numberoffiles) { vector::iterator i = sourcefiles.begin(); while (i != sourcefiles.end()) { Par1RepairerSourceFile *sourcefile = *i; delete sourcefile; ++i; } sourcefiles.clear(); i = extrafiles.begin(); while (i != extrafiles.end()) { Par1RepairerSourceFile *sourcefile = *i; delete sourcefile; ++i; } extrafiles.clear(); delete [] temp; break; } filelist = temp; filelistsize = (u32)fileheader.filelistsize; } // Is this a recovery volume? if (fileheader.volumenumber > 0) { // Make sure there is data and that it is the correct size if (fileheader.dataoffset == 0 || fileheader.datasize != blocksize) break; // What volume number is this? volumenumber = (u32)(fileheader.volumenumber - 1); // Do we already have this volume? if (recoveryblocks.find(volumenumber) == recoveryblocks.end()) { // Create a data block DataBlock *datablock = new DataBlock; datablock->SetLength(blocksize); datablock->SetLocation(diskfile, fileheader.dataoffset); // Store it in the map recoveryblocks.insert(pair(volumenumber, datablock)); havevolume = true; } } } while (false); delete [] buffer; } // We have finished with the file for now diskfile->Close(); if (havevolume) { //cout << "Loaded recovery volume " << volumenumber << endl; } else { //cout << "No new recovery volumes found" << endl; } // Remember that the file was processed bool success = diskfilemap.Insert(diskfile); assert(success); return true; } bool Par1Repairer::LoadOtherRecoveryFiles(string filename) { // Split the original PAR filename into path and name parts string path; string name; DiskFile::SplitFilename(filename, path, name); // Find the file extension string::size_type where = name.find_last_of('.'); if (where != string::npos) { // remove it name = name.substr(0, where); } // Search for additional PAR files string wildcard = name + ".???"; list *files = DiskFile::FindFiles(path, wildcard); for (list::const_iterator s=files->begin(); s!=files->end(); ++s) { string filename = *s; // Find the file extension where = filename.find_last_of('.'); if (where != string::npos) { string tail = filename.substr(where+1); // Check the the file extension is the correct form if ((tail[0] == 'P' || tail[0] == 'p') && ( (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r') || isdigit(tail[1]) && isdigit(tail[2]) )) { LoadRecoveryFile(filename); } } } delete files; return true; } // Load packets from any other PAR files whose names are given on the command line bool Par1Repairer::LoadExtraRecoveryFiles(const list &extrafiles) { for (ExtraFileIterator i=extrafiles.begin(); i!=extrafiles.end(); i++) { string filename = i->FileName(); // Find the file extension string::size_type where = filename.find_last_of('.'); if (where != string::npos) { string tail = filename.substr(where+1); // Check the the file extension is the correct form if ((tail[0] == 'P' || tail[0] == 'p') && ( (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r') || isdigit(tail[1]) && isdigit(tail[2]) )) { LoadRecoveryFile(filename); } } } return true; } // Attempt to verify all of the source files bool Par1Repairer::VerifySourceFiles(void) { bool finalresult = true; u32 filenumber = 0; vector::iterator sourceiterator = sourcefiles.begin(); while (sourceiterator != sourcefiles.end()) { Par1RepairerSourceFile *sourcefile = *sourceiterator; string filename = sourcefile->FileName(); // Check to see if we have already used this file if (diskfilemap.Find(filename) != 0) { // The file has already been used! cerr << "Source file " << filenumber+1 << " is a duplicate." << endl; return false; } DiskFile *diskfile = new DiskFile; // Does the target file exist if (diskfile->Open(filename)) { // Yes. Record that fact. sourcefile->SetTargetExists(true); // Remember that the DiskFile is the target file sourcefile->SetTargetFile(diskfile); // Remember that we have processed this file bool success = diskfilemap.Insert(diskfile); assert(success); // Do the actual verification if (!VerifyDataFile(diskfile, sourcefile)) finalresult = false; // We have finished with the file for now diskfile->Close(); // Find out how much data we have found UpdateVerificationResults(); } else { // The file does not exist. delete diskfile; string path; string name; DiskFile::SplitFilename(filename, path, name); //cout << "Target: \"" << name << "\" - missing." << endl; } ++sourceiterator; ++filenumber; } return finalresult; } // Scan any extra files specified on the command line bool Par1Repairer::VerifyExtraFiles(const list &extrafiles) { for (ExtraFileIterator i=extrafiles.begin(); i!=extrafiles.end() && completefilecountFileName(); bool skip = false; // Find the file extension string::size_type where = filename.find_last_of('.'); if (where != string::npos) { string tail = filename.substr(where+1); // Check the the file extension is the correct form if ((tail[0] == 'P' || tail[0] == 'p') && ( (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r') || isdigit(tail[1]) && isdigit(tail[2]) )) { skip = true; } } if (!skip) { filename = DiskFile::GetCanonicalPathname(filename); // Has this file already been dealt with if (diskfilemap.Find(filename) == 0) { DiskFile *diskfile = new DiskFile; // Does the file exist if (!diskfile->Open(filename)) { delete diskfile; continue; } // Remember that we have processed this file bool success = diskfilemap.Insert(diskfile); assert(success); // Do the actual verification VerifyDataFile(diskfile, 0); // Ignore errors // We have finished with the file for now diskfile->Close(); // Find out how much data we have found UpdateVerificationResults(); } } } return true; } bool Par1Repairer::VerifyDataFile(DiskFile *diskfile, Par1RepairerSourceFile *sourcefile) { Par1RepairerSourceFile *match = 0; string path; string name; DiskFile::SplitFilename(diskfile->FileName(), path, name); // How big is the file we are checking u64 filesize = diskfile->FileSize(); if (filesize == 0) return true; // Search for the first file that is the correct size vector::iterator sourceiterator = sourcefiles.begin(); while (sourceiterator != sourcefiles.end() && filesize != (*sourceiterator)->FileSize()) { ++sourceiterator; } // Are there any files that are the correct size? if (sourceiterator != sourcefiles.end()) { // Allocate a buffer to compute the file hash size_t buffersize = (size_t)min((u64)1048576, filesize); char *buffer = new char[buffersize]; // Read the first 16k of the file size_t want = (size_t)min((u64)16384, filesize); if (!diskfile->Read(0, buffer, want)) { delete [] buffer; return false; } // Compute the MD5 hash of the first 16k MD5Context contextfull; contextfull.Update(buffer, want); MD5Context context16k = contextfull; MD5Hash hash16k; context16k.Final(hash16k); if (!ignore16kfilehash) { // Search for the first file that has the correct 16k hash while (sourceiterator != sourcefiles.end() && (filesize != (*sourceiterator)->FileSize() || hash16k != (*sourceiterator)->Hash16k())) { ++sourceiterator; } } // Are there any files with the correct 16k hash? if (sourceiterator != sourcefiles.end()) { // Compute the MD5 hash of the whole file if (filesize > 16384) { //u64 progress = 0; u64 offset = 16384; while (offset < filesize) { // Update a progress indicator /*u32 oldfraction = (u32)(1000 * (progress) / filesize); u32 newfraction = (u32)(1000 * (progress=offset) / filesize); if (oldfraction != newfraction) { cout << "Scanning: \"" << name << "\": " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush; }*/ want = (size_t)min((u64)buffersize, filesize-offset); if (!diskfile->Read(offset, buffer, want)) { delete [] buffer; return false; } contextfull.Update(buffer, want); offset += want; } } MD5Hash hashfull; contextfull.Final(hashfull); // Search for the first file that has the correct full hash while (sourceiterator != sourcefiles.end() && (filesize != (*sourceiterator)->FileSize() || (!ignore16kfilehash && hash16k != (*sourceiterator)->Hash16k()) || hashfull != (*sourceiterator)->HashFull())) { ++sourceiterator; } // Are there any files with the correct full hash? if (sourceiterator != sourcefiles.end()) { // If a source file was originally specified, check to see if it is a match if (sourcefile != 0 && sourcefile->FileSize() == filesize && (ignore16kfilehash || sourcefile->Hash16k() == hash16k) && sourcefile->HashFull() == hashfull) { match = sourcefile; } else { // Search for a file which matches and has not already been matched while (sourceiterator != sourcefiles.end() && (filesize != (*sourceiterator)->FileSize() || (!ignore16kfilehash && hash16k != (*sourceiterator)->Hash16k()) || hashfull != (*sourceiterator)->HashFull() || (*sourceiterator)->GetCompleteFile() != 0)) { ++sourceiterator; } // Did we find a match if (sourceiterator != sourcefiles.end()) { match = *sourceiterator; } } } } delete [] buffer; } // Did we find a match if (match != 0) { match->SetCompleteFile(diskfile); // Was the match the file we were originally looking for if (match == sourcefile) { //cout << "Target: \"" << name << "\" - found." << endl; } // Were we looking for a specific file else if (sourcefile != 0) { string targetname; DiskFile::SplitFilename(sourcefile->FileName(), path, targetname); /*cout << "Target: \"" << name << "\" - is a match for \"" << targetname << "\"." << endl;*/ } else { string targetname; DiskFile::SplitFilename(match->FileName(), path, targetname); /*cout << "File: \"" << name << "\" - is a match for \"" << targetname << "\"." << endl;*/ } } else { /*cout << "File: \"" << name << "\" - no data found." << endl;*/ } return true; } void Par1Repairer::UpdateVerificationResults(void) { completefilecount = 0; renamedfilecount = 0; damagedfilecount = 0; missingfilecount = 0; vector::iterator sf = sourcefiles.begin(); // Check the recoverable files while (sf != sourcefiles.end()) { Par1RepairerSourceFile *sourcefile = *sf; // Was a perfect match for the file found if (sourcefile->GetCompleteFile() != 0) { // Is it the target file or a different one if (sourcefile->GetCompleteFile() == sourcefile->GetTargetFile()) { completefilecount++; } else { renamedfilecount++; } } else { // Does the target file exist if (sourcefile->GetTargetExists()) { damagedfilecount++; } else { missingfilecount++; } } ++sf; } } bool Par1Repairer::CheckVerificationResults(void) { // Is repair needed if (completefilecount < sourcefiles.size() || renamedfilecount > 0 || damagedfilecount > 0 || missingfilecount > 0) { /*cout << "Repair is required." << endl; if (renamedfilecount > 0) cout << renamedfilecount << " file(s) have the wrong name." << endl; if (missingfilecount > 0) cout << missingfilecount << " file(s) are missing." << endl; if (damagedfilecount > 0) cout << damagedfilecount << " file(s) exist but are damaged." << endl; if (completefilecount > 0) cout << completefilecount << " file(s) are ok." << endl;*/ // Is repair possible if (recoveryblocks.size() >= damagedfilecount+missingfilecount) { //cout << "Repair is possible." << endl; /*if (recoveryblocks.size() > damagedfilecount+missingfilecount) cout << "You have an excess of " << (u32)recoveryblocks.size() - (damagedfilecount+missingfilecount) << " recovery files." << endl;*/ /*if (damagedfilecount+missingfilecount > 0) cout << damagedfilecount+missingfilecount << " recovery files will be used to repair." << endl; else if (recoveryblocks.size()) cout << "None of the recovery files will be used for the repair." << endl;*/ return true; } else { /*cout << "Repair is not possible." << endl; cout << "You need " << damagedfilecount+missingfilecount - recoveryblocks.size() << " more recovery files to be able to repair." << endl;*/ return false; } } else { //cout << "All files are correct, repair is not required." << endl; return true; } return true; } nget-0.27.1/par2/par2repairersourcefile.cpp0000644000175000017500000001032307722242036021074 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif Par2RepairerSourceFile::Par2RepairerSourceFile(DescriptionPacket *_descriptionpacket, VerificationPacket *_verificationpacket) { firstblocknumber = 0; descriptionpacket = _descriptionpacket; verificationpacket = _verificationpacket; // verificationhashtable = 0; targetexists = false; targetfile = 0; completefile = 0; } Par2RepairerSourceFile::~Par2RepairerSourceFile(void) { delete descriptionpacket; delete verificationpacket; // delete verificationhashtable; } void Par2RepairerSourceFile::SetDescriptionPacket(DescriptionPacket *_descriptionpacket) { descriptionpacket = _descriptionpacket; } void Par2RepairerSourceFile::SetVerificationPacket(VerificationPacket *_verificationpacket) { verificationpacket = _verificationpacket; } void Par2RepairerSourceFile::ComputeTargetFileName(string path) { // Get a version of the filename compatible with the OS string filename = DiskFile::TranslateFilename(descriptionpacket->FileName()); // Strip the path from the filename string::size_type where; if (string::npos != (where = filename.find_last_of('\\')) || string::npos != (where = filename.find_last_of('/')) #ifdef WIN32 || string::npos != (where = filename.find_last_of(':')) #endif ) { filename = filename.substr(where+1); } targetfilename = path + filename; } string Par2RepairerSourceFile::TargetFileName(void) const { return targetfilename; } void Par2RepairerSourceFile::SetTargetFile(DiskFile *diskfile) { targetfile = diskfile; } DiskFile* Par2RepairerSourceFile::GetTargetFile(void) const { return targetfile; } void Par2RepairerSourceFile::SetTargetExists(bool exists) { targetexists = exists; } bool Par2RepairerSourceFile::GetTargetExists(void) const { return targetexists; } void Par2RepairerSourceFile::SetCompleteFile(DiskFile *diskfile) { completefile = diskfile; } DiskFile* Par2RepairerSourceFile::GetCompleteFile(void) const { return completefile; } // Remember which source and target blocks will be used by this file // and set their lengths appropriately void Par2RepairerSourceFile::SetBlocks(u32 _blocknumber, u32 _blockcount, vector::iterator _sourceblocks, vector::iterator _targetblocks, u64 blocksize) { firstblocknumber = _blocknumber; blockcount = _blockcount; sourceblocks = _sourceblocks; targetblocks = _targetblocks; if (blockcount > 0) { u64 filesize = descriptionpacket->FileSize(); vector::iterator sb = sourceblocks; for (u32 blocknumber=0; blocknumberFileSize() + blocksize-1) / blocksize); } else { blockcount = 0; } } nget-0.27.1/par2/par2repairersourcefile.h0000644000175000017500000001043607737475663020572 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __PAR2REPAIRERSOURCEFILE_H__ #define __PAR2REPAIRERSOURCEFILE_H__ enum MatchType { eNoMatch = 0, ePartialMatch, eFullMatch }; // The Par2RepairerSourceFile object is used during verification and repair // to record details about a particular source file and the data blocks // for that file. class Par2RepairerSourceFile { public: // Construct the object and set the description and verification packets Par2RepairerSourceFile(DescriptionPacket *descriptionpacket, VerificationPacket *verificationpacket); ~Par2RepairerSourceFile(void); // Get/Set the description packet DescriptionPacket* GetDescriptionPacket(void) const {return descriptionpacket;} void SetDescriptionPacket(DescriptionPacket *descriptionpacket); // Get/Set the verification packet VerificationPacket* GetVerificationPacket(void) const {return verificationpacket;} void SetVerificationPacket(VerificationPacket *verificationpacket); // Record the details as to which data blocks belong to this source // file and set the length of each allocated block correctly. void SetBlocks(u32 _blocknumber, u32 _blockcount, vector::iterator _sourceblocks, vector::iterator _targetblocks, u64 blocksize); // Determine the block count from the file size and block size. void SetBlockCount(u64 blocksize); // Set/Get which DiskFile will contain the final repaired version of the file void SetTargetFile(DiskFile *diskfile); DiskFile* GetTargetFile(void) const; // Set/Get whether or not the target file actually exists void SetTargetExists(bool exists); bool GetTargetExists(void) const; // Set/Get which DiskFile contains a full undamaged version of the source file void SetCompleteFile(DiskFile *diskfile); DiskFile* GetCompleteFile(void) const; // Compute/Get the filename for the final repaired version of the file void ComputeTargetFileName(string path); string TargetFileName(void) const; // Get the number of blocks that the file uses u32 BlockCount(void) const {return blockcount;} // Get the relative block number of the first block in the file u32 FirstBlockNumber(void) const {return firstblocknumber;} // Get the first source DataBlock for the file vector::iterator SourceBlocks(void) const {return sourceblocks;} // Get the first target DataBlock for the file vector::iterator TargetBlocks(void) const {return targetblocks;} protected: DescriptionPacket *descriptionpacket; // The file description packet VerificationPacket *verificationpacket; // The file verification packet u32 blockcount; // The number of DataBlocks in the file u32 firstblocknumber; // The block number of the first DataBlock vector::iterator sourceblocks; // The first source DataBlock vector::iterator targetblocks; // The first target DataBlock bool targetexists; // Whether the target file exists DiskFile *targetfile; // The final version of the file DiskFile *completefile; // A complete version of the file string targetfilename; // The filename of the target file }; #endif // __PAR2REPAIRERSOURCEFILE_H__ nget-0.27.1/par2/datablock.h0000644000175000017500000000633207737475663016037 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __DATABLOCK_H__ #define __DATABLOCK_H__ class DiskFile; // A Data Block is a block of data of a specific length at a specific // offset in a specific file. // It may be either a block of data in a source file from which recovery // data is being computed, a block of recovery data in a recovery file, or // a block in a target file that is being reconstructed. class DataBlock { public: DataBlock(void); ~DataBlock(void); public: // Set the length of the block void SetLength(u64 length); // Set the location of the block void SetLocation(DiskFile *diskfile, u64 offset); void ClearLocation(void); public: // Check to see if the location of the block has been set bool IsSet(void) const; // Which disk file is this data block in const DiskFile* GetDiskFile(void) const; // What offset is the block located at u64 GetOffset(void) const; // What is the length of this block u64 GetLength(void) const; public: // Open the disk file if it is not already open (so that it can be read) bool Open(void); // Read some of the data from disk into memory. bool ReadData(u64 position, size_t size, void *buffer); protected: DiskFile *diskfile; // Which disk file is the block associated with u64 offset; // What is the file offset u64 length; // How large is the block }; // Construct the data block inline DataBlock::DataBlock(void) { diskfile = 0; offset = 0; length = 0; } // Destroy the data block inline DataBlock::~DataBlock(void) { } // Set the length of the block inline void DataBlock::SetLength(u64 _length) { length = _length; } // Set the location of the block inline void DataBlock::SetLocation(DiskFile *_diskfile, u64 _offset) { diskfile = _diskfile; offset = _offset; } // Clear the location of the block inline void DataBlock::ClearLocation(void) { diskfile = 0; offset = 0; } // Check to see of the location is known inline bool DataBlock::IsSet(void) const { return (diskfile != 0); } // Which disk file is this data block in inline const DiskFile* DataBlock::GetDiskFile(void) const { return diskfile; } // What offset is the block located at inline u64 DataBlock::GetOffset(void) const { return offset; } // What is the length of this block inline u64 DataBlock::GetLength(void) const { return length; } #endif // __DATABLOCK_H__ nget-0.27.1/par2/verificationpacket.h0000644000175000017500000000465707737475663017775 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __VERIFICATIONPACKET_H__ #define __VERIFICATIONPACKET_H__ // The file verification packet stores details that allow individual blocks // of valid data within a damaged file to be identified. class VerificationPacket : public CriticalPacket { public: // Construct the packet VerificationPacket(void) {}; ~VerificationPacket(void) {}; // Set the fileid (computed from the file description packet). void FileId(const MD5Hash &fileid); // Set the block hash and block crc for a specific data block. void SetBlockHashAndCRC(u32 blocknumber, const MD5Hash &hash, u32 crc); // Load a verification packet from a specified file bool Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); // Get the FileId const MD5Hash& FileId(void) const; // Get the block count u32 BlockCount(void) const; // Get a specific verification entry const FILEVERIFICATIONENTRY* VerificationEntry(u32 blocknumber) const; protected: u32 blockcount; }; inline const MD5Hash& VerificationPacket::FileId(void) const { assert(packetdata != 0); return ((FILEVERIFICATIONPACKET*)packetdata)->fileid; } inline u32 VerificationPacket::BlockCount(void) const { assert(packetdata != 0); return blockcount; } inline const FILEVERIFICATIONENTRY* VerificationPacket::VerificationEntry(u32 blocknumber) const { assert(packetdata != 0); // return &((FILEVERIFICATIONPACKET*)packetdata)->entries()[blocknumber]; return &((FILEVERIFICATIONPACKET*)packetdata)->entries[blocknumber]; } #endif // __VERIFICATIONPACKET_H__ nget-0.27.1/par2/letype.h0000644000175000017500000001260507737475663015415 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __LETYPE_H__ #define __LETYPE_H__ #if __BYTE_ORDER == __LITTLE_ENDIAN typedef u16 leu16; typedef u32 leu32; typedef u64 leu64; #else class leu16 { public: leu16(void); leu16(const leu16 &other); leu16& operator=(const leu16 &other); leu16(const u16 &other); leu16& operator=(const u16 &other); operator u16(void) const; protected: u16 value; }; inline leu16::leu16(void) { } inline leu16::leu16(const leu16 &other) : value(other.value) { } inline leu16& leu16::operator =(const leu16 &other) { value = other.value; return *this; } inline leu16::leu16(const u16 &other) { ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); } inline leu16& leu16::operator=(const u16 &other) { ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); return *this; } inline leu16::operator u16(void) const { return ((unsigned char*)&value)[0] << 0 | ((unsigned char*)&value)[1] << 8; } class leu32 { public: leu32(void); leu32(const leu32 &other); leu32& operator=(const leu32 &other); leu32(const u32 &other); leu32& operator=(const u32 &other); operator u32(void) const; protected: u32 value; }; inline leu32::leu32(void) { } inline leu32::leu32(const leu32 &other) : value(other.value) { } inline leu32& leu32::operator =(const leu32 &other) { value = other.value; return *this; } inline leu32::leu32(const u32 &other) { ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); ((unsigned char*)&value)[2] = (unsigned char)((other >> 16) & 0xff); ((unsigned char*)&value)[3] = (unsigned char)((other >> 24) & 0xff); } inline leu32& leu32::operator=(const u32 &other) { ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); ((unsigned char*)&value)[2] = (unsigned char)((other >> 16) & 0xff); ((unsigned char*)&value)[3] = (unsigned char)((other >> 24) & 0xff); return *this; } inline leu32::operator u32(void) const { return ((unsigned char*)&value)[0] << 0 | ((unsigned char*)&value)[1] << 8 | ((unsigned char*)&value)[2] << 16 | ((unsigned char*)&value)[3] << 24; } class leu64 { public: leu64(void); leu64(const leu64 &other); leu64& operator=(const leu64 &other); leu64(const u64 &other); leu64& operator=(const u64 &other); operator u64(void) const; protected: u64 value; }; inline leu64::leu64(void) { } inline leu64::leu64(const leu64 &other) : value(other.value) { } inline leu64& leu64::operator =(const leu64 &other) { value = other.value; return *this; } inline leu64::leu64(const u64 &other) { ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); ((unsigned char*)&value)[2] = (unsigned char)((other >> 16) & 0xff); ((unsigned char*)&value)[3] = (unsigned char)((other >> 24) & 0xff); ((unsigned char*)&value)[4] = (unsigned char)((other >> 32) & 0xff); ((unsigned char*)&value)[5] = (unsigned char)((other >> 40) & 0xff); ((unsigned char*)&value)[6] = (unsigned char)((other >> 48) & 0xff); ((unsigned char*)&value)[7] = (unsigned char)((other >> 56) & 0xff); } inline leu64& leu64::operator=(const u64 &other) { ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); ((unsigned char*)&value)[2] = (unsigned char)((other >> 16) & 0xff); ((unsigned char*)&value)[3] = (unsigned char)((other >> 24) & 0xff); ((unsigned char*)&value)[4] = (unsigned char)((other >> 32) & 0xff); ((unsigned char*)&value)[5] = (unsigned char)((other >> 40) & 0xff); ((unsigned char*)&value)[6] = (unsigned char)((other >> 48) & 0xff); ((unsigned char*)&value)[7] = (unsigned char)((other >> 56) & 0xff); return *this; } inline leu64::operator u64(void) const { return (u64)(((unsigned char*)&value)[0]) << 0 | (u64)(((unsigned char*)&value)[1]) << 8 | (u64)(((unsigned char*)&value)[2]) << 16 | (u64)(((unsigned char*)&value)[3]) << 24 | (u64)(((unsigned char*)&value)[4]) << 32 | (u64)(((unsigned char*)&value)[5]) << 40 | (u64)(((unsigned char*)&value)[6]) << 48 | (u64)(((unsigned char*)&value)[7]) << 56; } #endif #endif // __LETYPE_H__ nget-0.27.1/par2/Makefile.in0000644000175000017500000000135307725751723015774 0ustar donutdonut00000000000000CXXFLAGS=@CXXFLAGS@ @DEFS@ CPPFLAGS=@CPPFLAGS@ LDFLAGS=@LDFLAGS@ AR=@AR@ CXX=@CXX@ RANLIB=@RANLIB@ LIBS=@LIBS@ srcdir=@srcdir@ all: par2.a par2.a: commandline.o \ crc.o \ creatorpacket.o \ criticalpacket.o \ datablock.o \ descriptionpacket.o \ diskfile.o \ filechecksummer.o \ mainpacket.o \ md5.o \ par1fileformat.o \ par1repairer.o \ par1repairersourcefile.o \ par2fileformat.o \ par2repairer.o \ par2repairersourcefile.o \ recoverypacket.o \ verificationhashtable.o \ verificationpacket.o rm -f $@ $(AR) r $@ $^ -$(RANLIB) $@ Makefile: Makefile.in ../config.status cd .. && ./config.status clean: -rm par2.a *.o *.d distclean: clean -rm Makefile .PHONY: all clean dist distclean -include *.d nget-0.27.1/par2/diskfile.cpp0000644000175000017500000003412107711146572016217 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif #ifdef WIN32 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define OffsetType __int64 #define MaxOffset 0x7fffffffffffffffI64 #define LengthType unsigned int #define MaxLength 0xffffffffUL DiskFile::DiskFile(void) { filesize = 0; offset = 0; hFile = INVALID_HANDLE_VALUE; exists = false; } DiskFile::~DiskFile(void) { if (hFile != INVALID_HANDLE_VALUE) ::CloseHandle(hFile); } // Open the file bool DiskFile::Open(string _filename, u64 _filesize) { assert(hFile == INVALID_HANDLE_VALUE); filename = _filename; filesize = _filesize; hFile = ::CreateFileA(_filename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { DWORD error = ::GetLastError(); switch (error) { case ERROR_FILE_NOT_FOUND: case ERROR_PATH_NOT_FOUND: break; default: cerr << "Could not open \"" << _filename << "\": " << ErrorMessage(error) << endl; } return false; } offset = 0; exists = true; return true; } // Read some data from disk bool DiskFile::Read(u64 _offset, void *buffer, size_t length) { assert(hFile != INVALID_HANDLE_VALUE); if (offset != _offset) { LONG lowoffset = ((LONG*)&_offset)[0]; LONG highoffset = ((LONG*)&_offset)[1]; // Seek to the required offset if (INVALID_SET_FILE_POINTER == SetFilePointer(hFile, lowoffset, &highoffset, FILE_BEGIN)) { DWORD error = ::GetLastError(); cerr << "Could not read " << (u64)length << " bytes from \"" << filename << "\" at offset " << _offset << ": " << ErrorMessage(error) << endl; return false; } offset = _offset; } if (length > MaxLength) { cerr << "Could not read " << (u64)length << " bytes from \"" << filename << "\" at offset " << _offset << ": " << "Read too long" << endl; return false; } DWORD want = (LengthType)length; DWORD got; // Read the data if (!::ReadFile(hFile, buffer, want, &got, NULL)) { DWORD error = ::GetLastError(); cerr << "Could not read " << (u64)length << " bytes from \"" << filename << "\" at offset " << _offset << ": " << ErrorMessage(error) << endl; return false; } offset += length; return true; } void DiskFile::Close(void) { if (hFile != INVALID_HANDLE_VALUE) { ::CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; } } string DiskFile::GetCanonicalPathname(string filename) { char fullname[MAX_PATH]; char *filepart; // Resolve a relative path to a full path int length = ::GetFullPathName(filename.c_str(), sizeof(fullname), fullname, &filepart); if (length <= 0 || sizeof(fullname) < length) return filename; // Make sure the drive letter is upper case. fullname[0] = toupper(fullname[0]); // Translate all /'s to \'s char *current = strchr(fullname, '/'); while (current) { *current++ = '\\'; current = strchr(current, '/'); } // Copy the root directory to the output string string longname(fullname, 3); // Start processing at the first path component current = &fullname[3]; char *limit = &fullname[length]; // Process until we reach the end of the full name while (current < limit) { char *tail; // Find the next \, or the end of the string (tail = strchr(current, '\\')) || (tail = limit); *tail = 0; // Create a wildcard to search for the path string wild = longname + current; WIN32_FIND_DATA finddata; HANDLE hFind = ::FindFirstFile(wild.c_str(), &finddata); if (hFind == INVALID_HANDLE_VALUE) { // If the component was not found then just copy the rest of the path to the // output buffer verbatim. longname += current; break; } ::FindClose(hFind); // Copy the component found to the output longname += finddata.cFileName; current = tail + 1; // If we have not reached the end of the name, add a "\" if (current < limit) longname += '\\'; } return longname; } list* DiskFile::FindFiles(string path, string wildcard) { list *matches = new list; wildcard = path + wildcard; WIN32_FIND_DATA fd; HANDLE h = ::FindFirstFile(wildcard.c_str(), &fd); if (h != INVALID_HANDLE_VALUE) { do { if (0 == (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { matches->push_back(path + fd.cFileName); } } while (::FindNextFile(h, &fd)); ::FindClose(h); } return matches; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// #else // !WIN32 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define OffsetType long #define MaxOffset 0x7fffffffL #define LengthType unsigned int #define MaxLength 0xffffffffUL DiskFile::DiskFile(void) { //filename; filesize = 0; offset = 0; file = 0; exists = false; } DiskFile::~DiskFile(void) { if (file != 0) fclose(file); } // Open the file bool DiskFile::Open(string _filename, u64 _filesize) { assert(file == 0); filename = _filename; filesize = _filesize; if (_filesize > MaxOffset) { cerr << "File size for " << _filename << " is too large." << endl; return false; } file = fopen(filename.c_str(), "rb"); if (file == 0) { return false; } offset = 0; exists = true; return true; } // Read some data from disk bool DiskFile::Read(u64 _offset, void *buffer, size_t length) { assert(file != 0); if (offset != _offset) { if (_offset > MaxOffset) { cerr << "Could not read " << (u64)length << " bytes from " << filename << " at offset " << _offset << endl; return false; } if (fseek(file, (OffsetType)_offset, SEEK_SET)) { cerr << "Could not read " << (u64)length << " bytes from " << filename << " at offset " << _offset << endl; return false; } offset = _offset; } if (length > MaxLength) { cerr << "Could not read " << (u64)length << " bytes from " << filename << " at offset " << _offset << endl; return false; } if (1 != fread(buffer, (LengthType)length, 1, file)) { cerr << "Could not read " << (u64)length << " bytes from " << filename << " at offset " << _offset << endl; return false; } offset += length; return true; } void DiskFile::Close(void) { if (file != 0) { fclose(file); file = 0; } } // Attempt to get the full pathname of the file string DiskFile::GetCanonicalPathname(string filename) { // Is the supplied path already an absolute one if (filename.size() == 0 || filename[0] == '/') return filename; // Get the current directory char curdir[1000]; if (0 == getcwd(curdir, sizeof(curdir))) { return filename; } // Allocate a work buffer and copy the resulting full path into it. char *work = new char[strlen(curdir) + filename.size() + 2]; strcpy(work, curdir); if (work[strlen(work)-1] != '/') strcat(work, "/"); strcat(work, filename.c_str()); char *in = work; char *out = work; while (*in) { if (*in == '/') { if (in[1] == '.' && in[2] == '/') { // skip the input past /./ in += 2; } else if (in[1] == '.' && in[2] == '.' && in[3] == '/') { // backtrack the output if /../ was found on the input in += 3; if (out > work) { do { out--; } while (out > work && *out != '/'); } } else { *out++ = *in++; } } else { *out++ = *in++; } } *out = 0; string result = work; delete [] work; return result; } list* DiskFile::FindFiles(string path, string wildcard) { list *matches = new list; string::size_type where; if ((where = wildcard.find_first_of('*')) != string::npos || (where = wildcard.find_first_of('?')) != string::npos) { string front = wildcard.substr(0, where); bool multiple = wildcard[where] == '*'; string back = wildcard.substr(where+1); DIR *dirp = opendir(path.c_str()); if (dirp != 0) { struct dirent *d; while ((d = readdir(dirp)) != 0) { string name = d->d_name; if (name == "." || name == "..") continue; if (multiple) { if (name.size() >= wildcard.size() && name.substr(0, where) == front && name.substr(name.size()-back.size()) == back) { matches->push_back(path + name); } } else { if (name.size() == wildcard.size()) { string::const_iterator pw = wildcard.begin(); string::const_iterator pn = name.begin(); while (pw != wildcard.end()) { if (*pw != '?' && *pw != *pn) break; ++pw; ++pn; } if (pw == wildcard.end()) { matches->push_back(path + name); } } } } closedir(dirp); } } else { struct stat st; string fn = path + wildcard; if (stat(fn.c_str(), &st) == 0) { matches->push_back(path + wildcard); } } return matches; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif bool DiskFile::Open(void) { string _filename = filename; return Open(_filename); } bool DiskFile::Open(string _filename) { return Open(_filename, GetFileSize(_filename)); } //string DiskFile::GetPathFromFilename(string filename) //{ // string::size_type where; // // if (string::npos != (where = filename.find_last_of('/')) || // string::npos != (where = filename.find_last_of('\\'))) // { // return filename.substr(0, where+1); // } // else // { // return "." PATHSEP; // } //} void DiskFile::SplitFilename(string filename, string &path, string &name) { string::size_type where; if (string::npos != (where = filename.find_last_of('/')) || string::npos != (where = filename.find_last_of('\\'))) { path = filename.substr(0, where+1); name = filename.substr(where+1); } else { path = "." SPATHSEP; name = filename; } } bool DiskFile::FileExists(string filename) { struct stat st; return ((0 == stat(filename.c_str(), &st)) && (0 != (st.st_mode & S_IFREG))); } u64 DiskFile::GetFileSize(string filename) { struct stat st; if ((0 == stat(filename.c_str(), &st)) && (0 != (st.st_mode & S_IFREG))) { return st.st_size; } else { return 0; } } // Take a filename from a PAR2 file and replace any characters // which would be illegal for a file on disk string DiskFile::TranslateFilename(string filename) { string result; string::iterator p = filename.begin(); while (p != filename.end()) { unsigned char ch = *p; bool ok = true; #ifdef WIN32 if (ch < 32) { ok = false; } else { switch (ch) { case '"': case '*': case '/': case ':': case '<': case '>': case '?': case '\\': case '|': ok = false; } } #else if (ch < 32) { ok = false; } else { switch (ch) { case '/': ok = false; } } #endif if (ok) { result += ch; } else { // convert problem characters to hex result += ((ch >> 4) < 10) ? (ch >> 4) + '0' : (ch >> 4) + 'A'-10; result += ((ch & 0xf) < 10) ? (ch & 0xf) + '0' : (ch & 0xf) + 'A'-10; } ++p; } return result; } #ifdef WIN32 string DiskFile::ErrorMessage(DWORD error) { string result; LPVOID lpMsgBuf; if (::FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf, 0, NULL)) { result = (char*)lpMsgBuf; LocalFree(lpMsgBuf); } else { char message[40]; _snprintf(message, sizeof(message), "Unknown error code (%d)", error); result = message; } return result; } #endif DiskFileMap::DiskFileMap(void) { } DiskFileMap::~DiskFileMap(void) { map::iterator fi = diskfilemap.begin(); while (fi != diskfilemap.end()) { delete (*fi).second; ++fi; } } bool DiskFileMap::Insert(DiskFile *diskfile) { string filename = diskfile->FileName(); assert(filename.length() != 0); pair::const_iterator,bool> location = diskfilemap.insert(pair(filename, diskfile)); return location.second; } void DiskFileMap::Remove(DiskFile *diskfile) { string filename = diskfile->FileName(); assert(filename.length() != 0); diskfilemap.erase(filename); } DiskFile* DiskFileMap::Find(string filename) const { assert(filename.length() != 0); map::const_iterator f = diskfilemap.find(filename); return (f != diskfilemap.end()) ? f->second : 0; } nget-0.27.1/par2/commandline.h0000644000175000017500000000546307737475663016405 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __COMMANDLINE_H__ #define __COMMANDLINE_H__ // The CommandLine object is responsible for understanding the format // of the command line parameters are parsing the command line to // extract details as to what the user wants to do. class CommandLine { public: CommandLine(const string &filename, const vector &extrafilenames, const multimap &extrafilenamemap); // Any extra files listed on the command line class ExtraFile { public: ExtraFile(void); ExtraFile(const ExtraFile&); ExtraFile& operator=(const ExtraFile&); ExtraFile(const string &name, u64 size); string FileName(void) const {return filename;} u64 FileSize(void) const {return filesize;} protected: string filename; u64 filesize; }; public: // Accessor functions for the command line parameters string GetParFilename(void) const {return parfilename;} const list& GetExtraFiles(void) const {return extrafiles;} const multimap& GetExtraFilenameMap(void) const {return extrafilenamemap;} protected: string parfilename; // The name of the PAR2 file to create, or // the name of the first PAR2 file to read // when verifying or repairing. list extrafiles; // The list of other files specified on the // command line. When creating, this will be // the source files, and when verifying or // repairing, this will be additional PAR2 // files or data files to be examined. const multimap &extrafilenamemap; // Maps source file names to alternate names they might be found under. }; typedef list::const_iterator ExtraFileIterator; #endif // __COMMANDLINE_H__ nget-0.27.1/par2/mainpacket.h0000644000175000017500000000532207737475663016225 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __MAINPACKET_H__ #define __MAINPACKET_H__ // The main packet ties all other critical packets together. // It specifies the block size to use for both verification of // files and for the Reed Solomon computation. // It also specifies how many of the source files are repairable // and in what order they should be processed. class MainPacket : public CriticalPacket { public: // Construct the packet MainPacket(void) {}; ~MainPacket(void) {}; public: // Load a main packet from a specified file bool Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); public: // Get the set id. const MD5Hash& SetId(void) const; // Get the block size. u64 BlockSize(void) const; // Get the file counts. u32 RecoverableFileCount(void) const; u32 TotalFileCount(void) const; // Get the fileid of one file const MD5Hash& FileId(u32 filenumber) const; protected: u64 blocksize; u32 totalfilecount; u32 recoverablefilecount; }; // Get the data block size inline u64 MainPacket::BlockSize(void) const { assert(packetdata != 0); return blocksize; } // Get the number of recoverable files inline u32 MainPacket::RecoverableFileCount(void) const { assert(packetdata != 0); return recoverablefilecount; } // Get the total number of files inline u32 MainPacket::TotalFileCount(void) const { assert(packetdata != 0); return totalfilecount; } // Get the file id hash of one of the files inline const MD5Hash& MainPacket::FileId(u32 filenumber) const { assert(packetdata != 0); assert(filenumberfileid()[filenumber]; return ((const MAINPACKET*)packetdata)->fileid[filenumber]; } inline const MD5Hash& MainPacket::SetId(void) const { return ((const MAINPACKET*)packetdata)->header.setid; } #endif // __MAINPACKET_H__ nget-0.27.1/par2/par2repairer.cpp0000644000175000017500000013723710034375532017027 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #include "../misc.h" #include "../log.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif Par2Repairer::Par2Repairer(void) { firstpacket = true; mainpacket = 0; creatorpacket = 0; blocksize = 0; sourceblockcount = 0; blocksallocated = false; availableblockcount = 0; missingblockcount = 0; completefilecount = 0; renamedfilecount = 0; damagedfilecount = 0; missingfilecount = 0; } Par2Repairer::~Par2Repairer(void) { map::iterator rp = recoverypacketmap.begin(); while (rp != recoverypacketmap.end()) { delete (*rp).second; ++rp; } map::iterator sf = sourcefilemap.begin(); while (sf != sourcefilemap.end()) { Par2RepairerSourceFile *sourcefile = (*sf).second; delete sourcefile; ++sf; } delete mainpacket; delete creatorpacket; } Result Par2Repairer::Process(const CommandLine &commandline, bool dorepair) { // Get filesnames from the command line string par2filename = commandline.GetParFilename(); const list &extrafiles = commandline.GetExtraFiles(); // Determine the searchpath from the location of the main PAR2 file string name; DiskFile::SplitFilename(par2filename, searchpath, name); // Load packets from the main PAR2 file if (!LoadPacketsFromFile(searchpath + name)) return eLogicError; // Load packets from other PAR2 files with names based on the original PAR2 file if (!LoadPacketsFromOtherFiles(par2filename)) return eLogicError; // Load packets from any other PAR2 files whose names are given on the command line if (!LoadPacketsFromExtraFiles(extrafiles)) return eLogicError; //cout << endl; // Check that the packets are consistent and discard any that are not if (!CheckPacketConsistency()) return eInsufficientCriticalData; // Use the information in the main packet to get the source files // into the correct order and determine their filenames if (!CreateSourceFileList()) return eLogicError; // Determine the total number of DataBlocks for the recoverable source files // The allocate the DataBlocks and assign them to each source file if (!AllocateSourceBlocks()) return eLogicError; // Create a verification hash table for all files for which we have not // found a complete version of the file and for which we have // a verification packet if (!PrepareVerificationHashTable()) return eLogicError; // Compute the table for the sliding CRC computation if (!ComputeWindowTable()) return eLogicError; //cout << endl << "Verifying source files:" << endl << endl; // Attempt to verify all of the source files if (!VerifySourceFiles()) return eFileIOError; if (completefilecountRecoverableFileCount()) { //cout << endl << "Scanning extra files:" << endl << endl; // Scan any extra files specified on the command line if (!VerifyExtraFiles(extrafiles, commandline.GetExtraFilenameMap())) return eLogicError; } // Find out how much data we have found UpdateVerificationResults(); //cout << endl; // Check the verification results and report the results if (!CheckVerificationResults()) return eRepairNotPossible; // Are any of the files incomplete if (completefilecountRecoverableFileCount()) { // Do we want to carry out a repair if (dorepair) { return eRepairFailed; } else { return eRepairPossible; } } return eSuccess; } // Load the packets from the specified file bool Par2Repairer::LoadPacketsFromFile(string filename) { // Skip the file if it has already been processed if (diskFileMap.Find(filename) != 0) { return true; } DiskFile *diskfile = new DiskFile; // Open the file if (!diskfile->Open(filename)) { // If we could not open the file, ignore the error and // proceed to the next file delete diskfile; return true; } { string path; string name; DiskFile::SplitFilename(filename, path, name); //cout << "Loading \"" << name << "\"." << endl; } // How many useable packets have we found u32 packets = 0; // How many recovery packets were there u32 recoverypackets = 0; // How big is the file u64 filesize = diskfile->FileSize(); if (filesize > 0) { // Allocate a buffer to read data into // The buffer should be large enough to hold a whole // critical packet (i.e. file verification, file description, main, // and creator), but not necessarily a whole recovery packet. size_t buffersize = (size_t)min((u64)1048576, filesize); u8 *buffer = new u8[buffersize]; // Progress indicator //u64 progress = 0; // Start at the beginning of the file u64 offset = 0; // Continue as long as there is at least enough for the packet header while (offset + sizeof(PACKET_HEADER) <= filesize) { // Update a progress indicator /*u32 oldfraction = (u32)(1000 * progress / filesize); u32 newfraction = (u32)(1000 * offset / filesize); if (oldfraction != newfraction) { cout << "Loading: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush; progress = offset; }*/ // Attempt to read the next packet header PACKET_HEADER header; if (!diskfile->Read(offset, &header, sizeof(header))) break; // Does this look like it might be a packet if (packet_magic != header.magic) { offset++; // Is there still enough for at least a whole packet header while (offset + sizeof(PACKET_HEADER) <= filesize) { // How much can we read into the buffer size_t want = (size_t)min((u64)buffersize, filesize-offset); // Fill the buffer if (!diskfile->Read(offset, buffer, want)) { offset = filesize; break; } // Scan the buffer for the magic value u8 *current = buffer; u8 *limit = &buffer[want-sizeof(PACKET_HEADER)]; while (current <= limit && packet_magic != ((PACKET_HEADER*)current)->magic) { current++; } // What file offset did we reach offset += current-buffer; // Did we find the magic if (current <= limit) { memcpy(&header, current, sizeof(header)); break; } } // Did we reach the end of the file if (offset + sizeof(PACKET_HEADER) > filesize) { break; } } // We have found the magic // Check the packet length if (sizeof(PACKET_HEADER) > header.length || // packet length is too small 0 != (header.length & 3) || // packet length is not a multiple of 4 filesize < offset + header.length) // packet would extend beyond the end of the file { offset++; continue; } // Compute the MD5 Hash of the packet MD5Context context; context.Update(&header.setid, sizeof(header)-offsetof(PACKET_HEADER, setid)); // How much more do I need to read to get the whole packet u64 current = offset+sizeof(PACKET_HEADER); u64 limit = offset+header.length; while (current < limit) { size_t want = (size_t)min((u64)buffersize, limit-current); if (!diskfile->Read(current, buffer, want)) break; context.Update(buffer, want); current += want; } // Did the whole packet get processed if (currentClose(); // Did we actually find any interesting packets if (packets > 0) { PMSG("par2file %s: %i packets (%i recovery)",filename.c_str(), (int)packets, (int)recoverypackets); /*cout << "Loaded " << packets << " new packets"; if (recoverypackets > 0) cout << " including " << recoverypackets << " recovery blocks"; cout << endl;*/ // Remember that the file was processed bool success = diskFileMap.Insert(diskfile); assert(success); } else { PMSG("par2file %s: no new packets",filename.c_str()); //cout << "No new packets found" << endl; delete diskfile; } return true; } // Finish loading a recovery packet bool Par2Repairer::LoadRecoveryPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { RecoveryPacket *packet = new RecoveryPacket; // Load the packet from disk if (!packet->Load(diskfile, offset, header)) { delete packet; return false; } // What is the exponent value of this recovery packet u32 exponent = packet->Exponent(); // Try to insert the new packet into the recovery packet map pair::const_iterator, bool> location = recoverypacketmap.insert(pair(exponent, packet)); // Did the insert fail if (!location.second) { // The packet must be a duplicate of one we already have delete packet; return false; } return true; } // Finish loading a file description packet bool Par2Repairer::LoadDescriptionPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { DescriptionPacket *packet = new DescriptionPacket; // Load the packet from disk if (!packet->Load(diskfile, offset, header)) { delete packet; return false; } // What is the fileid const MD5Hash &fileid = packet->FileId(); // Look up the fileid in the source file map for an existing source file entry map::iterator sfmi = sourcefilemap.find(fileid); Par2RepairerSourceFile *sourcefile = (sfmi == sourcefilemap.end()) ? 0 :sfmi->second; // Was there an existing source file if (sourcefile) { // Does the source file already have a description packet if (sourcefile->GetDescriptionPacket()) { // Yes. We don't need another copy delete packet; return false; } else { // No. Store the packet in the source file sourcefile->SetDescriptionPacket(packet); return true; } } else { // Create a new source file for the packet sourcefile = new Par2RepairerSourceFile(packet, NULL); // Record the source file in the source file map sourcefilemap.insert(pair(fileid, sourcefile)); return true; } } // Finish loading a file verification packet bool Par2Repairer::LoadVerificationPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { VerificationPacket *packet = new VerificationPacket; // Load the packet from disk if (!packet->Load(diskfile, offset, header)) { delete packet; return false; } // What is the fileid const MD5Hash &fileid = packet->FileId(); // Look up the fileid in the source file map for an existing source file entry map::iterator sfmi = sourcefilemap.find(fileid); Par2RepairerSourceFile *sourcefile = (sfmi == sourcefilemap.end()) ? 0 :sfmi->second; // Was there an existing source file if (sourcefile) { // Does the source file already have a verification packet if (sourcefile->GetVerificationPacket()) { // Yes. We don't need another copy. delete packet; return false; } else { // No. Store the packet in the source file sourcefile->SetVerificationPacket(packet); return true; } } else { // Create a new source file for the packet sourcefile = new Par2RepairerSourceFile(NULL, packet); // Record the source file in the source file map sourcefilemap.insert(pair(fileid, sourcefile)); return true; } } // Finish loading the main packet bool Par2Repairer::LoadMainPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { // Do we already have a main packet if (0 != mainpacket) return false; MainPacket *packet = new MainPacket; // Load the packet from disk; if (!packet->Load(diskfile, offset, header)) { delete packet; return false; } mainpacket = packet; return true; } // Finish loading the creator packet bool Par2Repairer::LoadCreatorPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { // Do we already have a creator packet if (0 != creatorpacket) return false; CreatorPacket *packet = new CreatorPacket; // Load the packet from disk; if (!packet->Load(diskfile, offset, header)) { delete packet; return false; } creatorpacket = packet; return true; } // Load packets from other PAR2 files with names based on the original PAR2 file bool Par2Repairer::LoadPacketsFromOtherFiles(string filename) { // Split the original PAR2 filename into path and name parts string path; string name; DiskFile::SplitFilename(filename, path, name); string::size_type where; // Trim ".par2" off of the end original name // Look for the last "." in the filename while (string::npos != (where = name.find_last_of('.'))) { // Trim what follows the last . string tail = name.substr(where+1); name = name.substr(0,where); // Was what followed the last "." "par2" if (0 == stricmp(tail.c_str(), "par2")) break; } // If what is left ends in ".volNNN-NNN" or ".volNNN+NNN" strip that as well // Is there another "." if (string::npos != (where = name.find_last_of('.'))) { // What follows the "." string tail = name.substr(where+1); // Scan what follows the last "." to see of it matches vol123-456 or vol123+456 int n = 0; string::const_iterator p; for (p=tail.begin(); p!=tail.end(); ++p) { char ch = *p; if (0 == n) { if (tolower(ch) == 'v') { n++; } else { break; } } else if (1 == n) { if (tolower(ch) == 'o') { n++; } else { break; } } else if (2 == n) { if (tolower(ch) == 'l') { n++; } else { break; } } else if (3 == n) { if (isdigit(ch)) {} else if (ch == '-' || ch == '+') { n++; } else { break; } } else if (4 == n) { if (isdigit(ch)) {} else { break; } } } // If we matched then retain only what preceeds the "." if (p == tail.end()) { name = name.substr(0,where); } } // Find files called "*.par2" or "name.*.par2" { string wildcard = name.empty() ? "*.par2" : name + ".*.par2"; list *files = DiskFile::FindFiles(path, wildcard); // Load packets from each file that was found for (list::const_iterator s=files->begin(); s!=files->end(); ++s) { LoadPacketsFromFile(*s); } delete files; } { string wildcard = name.empty() ? "*.PAR2" : name + ".*.PAR2"; list *files = DiskFile::FindFiles(path, wildcard); // Load packets from each file that was found for (list::const_iterator s=files->begin(); s!=files->end(); ++s) { LoadPacketsFromFile(*s); } delete files; } return true; } // Load packets from any other PAR2 files whose names are given on the command line bool Par2Repairer::LoadPacketsFromExtraFiles(const list &extrafiles) { for (ExtraFileIterator i=extrafiles.begin(); i!=extrafiles.end(); i++) { string filename = i->FileName(); // If the filename contains ".par2" anywhere if (string::npos != filename.find(".par2") || string::npos != filename.find(".PAR2")) { LoadPacketsFromFile(filename); } } return true; } // Check that the packets are consistent and discard any that are not bool Par2Repairer::CheckPacketConsistency(void) { // Do we have a main packet if (0 == mainpacket) { // If we don't have a main packet, then there is nothing more that we can do. // We cannot verify or repair any files. //cerr << "Main packet not found." << endl; return false; } // Remember the block size from the main packet blocksize = mainpacket->BlockSize(); // Check that the recovery blocks have the correct amount of data // and discard any that don't { map::iterator rp = recoverypacketmap.begin(); while (rp != recoverypacketmap.end()) { if (rp->second->BlockSize() == blocksize) { ++rp; } else { //cerr << "Incorrect sized recovery block for exponent " << rp->second->Exponent() << " discarded" << endl; delete rp->second; map::iterator x = rp++; recoverypacketmap.erase(x); } } } // Check for source files that have no description packet or where the // verification packet has the wrong number of entries and discard them. { map::iterator sf = sourcefilemap.begin(); while (sf != sourcefilemap.end()) { // Do we have a description packet DescriptionPacket *descriptionpacket = sf->second->GetDescriptionPacket(); if (descriptionpacket == 0) { // No description packet // Discard the source file delete sf->second; map::iterator x = sf++; sourcefilemap.erase(x); continue; } // Compute and store the block count from the filesize and blocksize sf->second->SetBlockCount(blocksize); // Do we have a verification packet VerificationPacket *verificationpacket = sf->second->GetVerificationPacket(); if (verificationpacket == 0) { // No verification packet // That is ok, but we won't be able to use block verification. // Proceed to the next file. ++sf; continue; } // Work out the block count for the file from the file size // and compare that with the verification packet u64 filesize = descriptionpacket->FileSize(); u32 blockcount = verificationpacket->BlockCount(); if ((filesize + blocksize-1) / blocksize != (u64)blockcount) { // The block counts are different! //cerr << "Incorrectly sized verification packet for \"" << descriptionpacket->FileName() << "\" discarded" << endl; // Discard the source file delete sf->second; map::iterator x = sf++; sourcefilemap.erase(x); continue; } // Everything is ok. // Proceed to the next file ++sf; } } /*cout << "There are " << mainpacket->RecoverableFileCount() << " recoverable files and " << mainpacket->TotalFileCount() - mainpacket->RecoverableFileCount() << " other files." << endl; cout << "The block size used was " << blocksize << " bytes." << endl;*/ return true; } // Use the information in the main packet to get the source files // into the correct order and determine their filenames bool Par2Repairer::CreateSourceFileList(void) { // For each FileId entry in the main packet for (u32 filenumber=0; filenumberTotalFileCount(); filenumber++) { const MD5Hash &fileid = mainpacket->FileId(filenumber); // Look up the fileid in the source file map map::iterator sfmi = sourcefilemap.find(fileid); Par2RepairerSourceFile *sourcefile = (sfmi == sourcefilemap.end()) ? 0 :sfmi->second; if (sourcefile) { sourcefile->ComputeTargetFileName(searchpath); } sourcefiles.push_back(sourcefile); } return true; } // Determine the total number of DataBlocks for the recoverable source files // The allocate the DataBlocks and assign them to each source file bool Par2Repairer::AllocateSourceBlocks(void) { sourceblockcount = 0; u32 filenumber = 0; vector::iterator sf = sourcefiles.begin(); // For each recoverable source file while (filenumber < mainpacket->RecoverableFileCount() && sf != sourcefiles.end()) { // Do we have a source file Par2RepairerSourceFile *sourcefile = *sf; if (sourcefile) { sourceblockcount += sourcefile->BlockCount(); } else { // No details for this source file so we don't know what the // total number of source blocks is // sourceblockcount = 0; // break; } ++sf; ++filenumber; } // Did we determine the total number of source blocks if (sourceblockcount > 0) { // Yes. // Allocate all of the Source and Target DataBlocks (which will be used // to read and write data to disk). sourceblocks.resize(sourceblockcount); targetblocks.resize(sourceblockcount); // Which DataBlocks will be allocated first vector::iterator sourceblock = sourceblocks.begin(); vector::iterator targetblock = targetblocks.begin(); u64 totalsize = 0; u32 blocknumber = 0; filenumber = 0; sf = sourcefiles.begin(); while (filenumber < mainpacket->RecoverableFileCount() && sf != sourcefiles.end()) { Par2RepairerSourceFile *sourcefile = *sf; if (sourcefile) { totalsize += sourcefile->GetDescriptionPacket()->FileSize(); u32 blockcount = sourcefile->BlockCount(); // Allocate the source and target DataBlocks to the sourcefile sourcefile->SetBlocks(blocknumber, blockcount, sourceblock, targetblock, blocksize); blocknumber++; sourceblock += blockcount; targetblock += blockcount; } ++sf; ++filenumber; } blocksallocated = true; /*cout << "There are a total of " << sourceblockcount << " data blocks." << endl; cout << "The total size of the data files is " << totalsize << " bytes." << endl;*/ } return true; } // Create a verification hash table for all files for which we have not // found a complete version of the file and for which we have // a verification packet bool Par2Repairer::PrepareVerificationHashTable(void) { // Choose a size for the hash table verificationhashtable.SetLimit(sourceblockcount); // Will any files be block verifiable blockverifiable = false; // For each source file vector::iterator sf = sourcefiles.begin(); while (sf != sourcefiles.end()) { // Get the source file Par2RepairerSourceFile *sourcefile = *sf; if (sourcefile) { // Do we have a verification packet if (0 != sourcefile->GetVerificationPacket()) { // Yes. Load the verification entries into the hash table verificationhashtable.Load(sourcefile, blocksize); blockverifiable = true; } else { // No. We can only check the whole file unverifiablesourcefiles.push_back(sourcefile); } } ++sf; } return true; } // Compute the table for the sliding CRC computation bool Par2Repairer::ComputeWindowTable(void) { if (blockverifiable) { GenerateWindowTable(blocksize, windowtable); windowmask = ComputeWindowMask(blocksize); } return true; } static bool SortSourceFilesByFileName(Par2RepairerSourceFile *low, Par2RepairerSourceFile *high) { return low->TargetFileName() < high->TargetFileName(); } // Attempt to verify all of the source files bool Par2Repairer::VerifySourceFiles(void) { bool finalresult = true; // Created a sorted list of the source files and verify them in that // order rather than the order they are in the main packet. vector sortedfiles; u32 filenumber = 0; vector::iterator sf = sourcefiles.begin(); while (sf != sourcefiles.end()) { // Do we have a source file Par2RepairerSourceFile *sourcefile = *sf; if (sourcefile) { sortedfiles.push_back(sourcefile); } else { // Was this one of the recoverable files if (filenumber < mainpacket->RecoverableFileCount()) { //cerr << "No details available for recoverable file number " << filenumber+1 << ". Recovery will not be possible." << endl; // Set error but let verification of other files continue finalresult = false; // Avoid segfault on missing FileDesc packet. nget doesn't care about verification of other files if we error out anyway. -MPM return false; } else { //cerr << "No details available for non-recoverable file number " << filenumber - mainpacket->RecoverableFileCount() + 1 << endl; } } ++sf; } sort(sortedfiles.begin(), sortedfiles.end(), SortSourceFilesByFileName); // Start verifying the files sf = sortedfiles.begin(); while (sf != sortedfiles.end()) { // Do we have a source file Par2RepairerSourceFile *sourcefile = *sf; // What filename does the file use string filename = sourcefile->TargetFileName(); // Check to see if we have already used this file if (diskFileMap.Find(filename) != 0) { // The file has already been used! cerr << "Source file " << filenumber+1 << " is a duplicate." << endl; return false; } DiskFile *diskfile = new DiskFile; // Does the target file exist if (diskfile->Open(filename)) { // Yes. Record that fact. sourcefile->SetTargetExists(true); // Remember that the DiskFile is the target file sourcefile->SetTargetFile(diskfile); // Remember that we have processed this file bool success = diskFileMap.Insert(diskfile); assert(success); // Do the actual verification if (!VerifyDataFile(diskfile, sourcefile)) finalresult = false; // We have finished with the file for now diskfile->Close(); // Find out how much data we have found UpdateVerificationResults(); } else { // The file does not exist. delete diskfile; string path; string name; DiskFile::SplitFilename(filename, path, name); //cout << "Target: \"" << name << "\" - missing." << endl; } ++sf; } return finalresult; } // Scan any extra files specified on the command line bool Par2Repairer::VerifyExtraFiles(const list &extrafiles, const multimap &extrafilenamemap) { for (ExtraFileIterator i=extrafiles.begin(); i!=extrafiles.end() && completefilecountRecoverableFileCount(); ++i) { string filename = i->FileName(); // If the filename does not include ".par2" we are interested in it. if (string::npos == filename.find(".par2") && string::npos == filename.find(".PAR2")) { filename = DiskFile::GetCanonicalPathname(filename); VerifyExtraFile(filename); } } // Search for files that have similar names to the ones mentioned in the par2, // so that we can find ones with differing case or that have been dupe-renamed. -MPM for (vector::iterator sf = sourcefiles.begin(); sf != sourcefiles.end() && completefilecountGetCompleteFile()) { // What filename does the file use string filename = sourcefile->TargetFileName(); string path, name; // strip off the path DiskFile::SplitFilename(filename, path, name); // find matches for that name pair::const_iterator, multimap::const_iterator> matchingfiles(extrafilenamemap.equal_range(strtolower(name))); for (; matchingfiles.first!=matchingfiles.second && completefilecountsecond; VerifyExtraFile(filename); } } } // Search any files whose original name is unknown. pair::const_iterator, multimap::const_iterator> matchingfiles(extrafilenamemap.equal_range("noname")); for (; matchingfiles.first!=matchingfiles.second && completefilecountsecond; VerifyExtraFile(filename); } return true; } bool Par2Repairer::VerifyExtraFile(const string &filename) { // Has this file already been dealt with if (diskFileMap.Find(filename) == 0) { DiskFile *diskfile = new DiskFile; // Does the file exist if (!diskfile->Open(filename)) { delete diskfile; return false; } // Remember that we have processed this file bool success = diskFileMap.Insert(diskfile); assert(success); // Do the actual verification VerifyDataFile(diskfile, 0); // Ignore errors // We have finished with the file for now diskfile->Close(); // Find out how much data we have found UpdateVerificationResults(); } return true; } // Attempt to match the data in the DiskFile with the source file bool Par2Repairer::VerifyDataFile(DiskFile *diskfile, Par2RepairerSourceFile *sourcefile) { MatchType matchtype; // What type of match was made MD5Hash hashfull; // The MD5 Hash of the whole file MD5Hash hash16k; // The MD5 Hash of the files 16k of the file // Are there any files that can be verified at the block level if (blockverifiable) { u32 count; // Scan the file at the block level. if (!ScanDataFile(diskfile, // [in] The file to scan sourcefile, // [in/out] Modified in the match is for another source file matchtype, // [out] hashfull, // [out] hash16k, // [out] count)) // [out] return false; switch (matchtype) { case eNoMatch: // No data was found at all. // Continue to next test. break; case ePartialMatch: { // We found some data. // Return them. return true; } break; case eFullMatch: { // We found a perfect match. sourcefile->SetCompleteFile(diskfile); // Return the match return true; } break; } } // We did not find a match for any blocks of data within the file, but if // there are any files for which we did not have a verification packet // we can try a simple match of the hash for the whole file. // Are there any files that cannot be verified at the block level if (unverifiablesourcefiles.size() > 0) { // Would we have already computed the file hashes if (!blockverifiable) { u64 filesize = diskfile->FileSize(); size_t buffersize = 1024*1024; if (buffersize > min(blocksize, filesize)) buffersize = (size_t)min(blocksize, filesize); char *buffer = new char[buffersize]; u64 offset = 0; MD5Context context; while (offset < filesize) { size_t want = (size_t)min((u64)buffersize, filesize-offset); if (!diskfile->Read(offset, buffer, want)) { delete [] buffer; return false; } // Will the newly read data reach the 16k boundary if (offset < 16384 && offset + want >= 16384) { context.Update(buffer, (size_t)(16384-offset)); // Compute the 16k hash MD5Context temp = context; temp.Final(hash16k); // Is there more data if (offset + want > 16384) { context.Update(&buffer[16384-offset], (size_t)(offset+want)-16384); } } else { context.Update(buffer, want); } offset += want; } // Compute the file hash MD5Hash hashfull; context.Final(hashfull); // If we did not have 16k of data, then the 16k hash // is the same as the full hash if (filesize < 16384) { hash16k = hashfull; } } list::iterator sf = unverifiablesourcefiles.begin(); // Compare the hash values of each source file for a match while (sf != unverifiablesourcefiles.end()) { sourcefile = *sf; // Does the file match if (sourcefile->GetCompleteFile() == 0 && diskfile->FileSize() == sourcefile->GetDescriptionPacket()->FileSize() && hash16k == sourcefile->GetDescriptionPacket()->Hash16k() && hashfull == sourcefile->GetDescriptionPacket()->HashFull()) { //cout << diskfile->FileName() << " is a perfect match for " << sourcefile->GetDescriptionPacket()->FileName() << endl; // Record that we have a perfect match for this source file sourcefile->SetCompleteFile(diskfile); if (blocksallocated) { // Allocate all of the DataBlocks for the source file to the DiskFile u64 offset = 0; u64 filesize = sourcefile->GetDescriptionPacket()->FileSize(); vector::iterator sb = sourcefile->SourceBlocks(); while (offset < filesize) { DataBlock &datablock = *sb; datablock.SetLocation(diskfile, offset); datablock.SetLength(min(blocksize, filesize-offset)); offset += blocksize; ++sb; } } // Return the match return true; } ++sf; } } return true; } // Perform a sliding window scan of the DiskFile looking for blocks of data that // might belong to any of the source files (for which a verification packet was // available). If a block of data might be from more than one source file, prefer // the one specified by the "sourcefile" parameter. If the first data block // found is for a different source file then "sourcefile" is changed accordingly. bool Par2Repairer::ScanDataFile(DiskFile *diskfile, // [in] Par2RepairerSourceFile* &sourcefile, // [in/out] MatchType &matchtype, // [out] MD5Hash &hashfull, // [out] MD5Hash &hash16k, // [out] u32 &count) // [out] { // Remember which file we wanted to match Par2RepairerSourceFile *originalsourcefile = sourcefile; matchtype = eNoMatch; // Is the file empty if (diskfile->FileSize() == 0) { // If the file is empty, then just return return true; } string path; string name; DiskFile::SplitFilename(diskfile->FileName(), path, name); // Create the checksummer for the file and start reading from it FileCheckSummer filechecksummer(diskfile, blocksize, windowtable, windowmask); if (!filechecksummer.Start()) return false; // Assume we will make a perfect match for the file matchtype = eFullMatch; // How many matches have we had count = 0; // How many blocks have already been found u32 duplicatecount = 0; // Have we found data blocks in this file that belong to more than one target file bool multipletargets = false; // Which block do we expect to find first const VerificationHashEntry *nextentry = 0; //u64 progress = 0; // Whilst we have not reached the end of the file while (filechecksummer.Offset() < diskfile->FileSize()) { // Update a progress indicator /*u32 oldfraction = (u32)(1000 * progress / diskfile->FileSize()); u32 newfraction = (u32)(1000 * (progress = filechecksummer.Offset()) / diskfile->FileSize()); if (oldfraction != newfraction) { cout << "Scanning: \"" << name << "\": " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush; }*/ // If we fail to find a match, it might be because it was a duplicate of a block // that we have already found. bool duplicate; // Look for a match const VerificationHashEntry *currententry = verificationhashtable.FindMatch(nextentry, sourcefile, filechecksummer, duplicate); // Did we find a match if (currententry != 0) { // Is this the first match if (count == 0) { // Which source file was it sourcefile = currententry->SourceFile(); // If the first match found was not actually the first block // for the source file, or it was not at the start of the // data file: then this is a partial match. if (!currententry->FirstBlock() || filechecksummer.Offset() != 0) { matchtype = ePartialMatch; } } else { // If the match found is not the one which was expected // then this is a partial match if (currententry != nextentry) { matchtype = ePartialMatch; } // Is the match from a different source file if (sourcefile != currententry->SourceFile()) { multipletargets = true; } } if (blocksallocated) { // Record the match currententry->SetBlock(diskfile, filechecksummer.Offset()); } // Update the number of matches found count++; // What entry do we expect next nextentry = currententry->Next(); // Advance to the next block if (!filechecksummer.Jump(currententry->GetDataBlock()->GetLength())) return false; } else { // This cannot be a perfect match matchtype = ePartialMatch; // Was this a duplicate match if (duplicate) { duplicatecount++; // What entry would we expect next nextentry = 0; // Advance one whole block if (!filechecksummer.Jump(blocksize)) return false; } else { // What entry do we expect next nextentry = 0; // Advance 1 byte if (!filechecksummer.Step()) return false; } } } // Get the Full and 16k hash values of the file filechecksummer.GetFileHashes(hashfull, hash16k); // Did we make any matches at all if (count > 0) { // If this still might be a perfect match, check the // hashes, file size, and number of blocks to confirm. if (matchtype != eFullMatch || count != sourcefile->GetVerificationPacket()->BlockCount() || diskfile->FileSize() != sourcefile->GetDescriptionPacket()->FileSize() || hashfull != sourcefile->GetDescriptionPacket()->HashFull() || hash16k != sourcefile->GetDescriptionPacket()->Hash16k()) { matchtype = ePartialMatch; // Did we find data from multiple target files if (multipletargets) { // Were we scanning the target file or an extra file if (originalsourcefile != 0) { /*cout << "Target: \"" << name << "\" - damaged, found " << count << " data blocks from several target files." << endl;*/ } else { /*cout << "File: \"" << name << "\" - found " << count << " data blocks from several target files." << endl;*/ } } else { // Did we find data blocks that belong to the target file if (originalsourcefile == sourcefile) { /*cout << "Target: \"" << name << "\" - damaged. Found " << count << " of " << sourcefile->GetVerificationPacket()->BlockCount() << " data blocks." << endl;*/ } // Were we scanning the target file or an extra file else if (originalsourcefile != 0) { string targetname; DiskFile::SplitFilename(sourcefile->TargetFileName(), path, targetname); /*cout << "Target: \"" << name << "\" - damaged. Found " << count << " of " << sourcefile->GetVerificationPacket()->BlockCount() << " data blocks from \"" << targetname << "\"." << endl;*/ } else { string targetname; DiskFile::SplitFilename(sourcefile->TargetFileName(), path, targetname); /*cout << "File: \"" << name << "\" - found " << count << " of " << sourcefile->GetVerificationPacket()->BlockCount() << " data blocks from \"" << targetname << "\"." << endl;*/ } } } else { // Did we match the target file if (originalsourcefile == sourcefile) { //cout << "Target: \"" << name << "\" - found." << endl; } // Were we scanning the target file or an extra file else if (originalsourcefile != 0) { string targetname; DiskFile::SplitFilename(sourcefile->TargetFileName(), path, targetname); /*cout << "Target: \"" << name << "\" - is a match for \"" << targetname << "\"." << endl;*/ } else { string targetname; DiskFile::SplitFilename(sourcefile->TargetFileName(), path, targetname); /* cout << "File: \"" << name << "\" - is a match for \"" << targetname << "\"." << endl;*/ } } } else { matchtype = eNoMatch; // We found not data, but did the file actually contain blocks we // had already found in other files. if (duplicatecount > 0) { /*cout << "File: \"" << name << "\" - found " << duplicatecount << " duplicate data blocks." << endl;*/ } else { /*cout << "File: \"" << name << "\" - no data found." << endl;*/ } } return true; } // Find out how much data we have found void Par2Repairer::UpdateVerificationResults(void) { availableblockcount = 0; missingblockcount = 0; completefilecount = 0; renamedfilecount = 0; damagedfilecount = 0; missingfilecount = 0; u32 filenumber = 0; vector::iterator sf = sourcefiles.begin(); // Check the recoverable files while (sf != sourcefiles.end() && filenumber < mainpacket->TotalFileCount()) { Par2RepairerSourceFile *sourcefile = *sf; if (sourcefile) { // Was a perfect match for the file found if (sourcefile->GetCompleteFile() != 0) { // Is it the target file or a different one if (sourcefile->GetCompleteFile() == sourcefile->GetTargetFile()) { completefilecount++; } else { renamedfilecount++; } availableblockcount += sourcefile->BlockCount(); } else { // Count the number of blocks that have been found vector::iterator sb = sourcefile->SourceBlocks(); for (u32 blocknumber=0; blocknumberBlockCount(); ++blocknumber, ++sb) { DataBlock &datablock = *sb; if (datablock.IsSet()) availableblockcount++; } // Does the target file exist if (sourcefile->GetTargetExists()) { damagedfilecount++; } else { missingfilecount++; } } } else { missingfilecount++; } ++filenumber; ++sf; } missingblockcount = sourceblockcount - availableblockcount; } // Check the verification results and report the results bool Par2Repairer::CheckVerificationResults(void) { // Is repair needed if (completefilecount < mainpacket->RecoverableFileCount() || renamedfilecount > 0 || damagedfilecount > 0 || missingfilecount > 0) { /*cout << "Repair is required." << endl; if (renamedfilecount > 0) cout << renamedfilecount << " file(s) have the wrong name." << endl; if (missingfilecount > 0) cout << missingfilecount << " file(s) are missing." << endl; if (damagedfilecount > 0) cout << damagedfilecount << " file(s) exist but are damaged." << endl; if (completefilecount > 0) cout << completefilecount << " file(s) are ok." << endl;*/ /*cout << "You have " << availableblockcount << " out of " << sourceblockcount << " data blocks available." << endl; if (recoverypacketmap.size() > 0) cout << "You have " << (u32)recoverypacketmap.size() << " recovery blocks available." << endl;*/ // Is repair possible if (recoverypacketmap.size() >= missingblockcount) { /*cout << "Repair is possible." << endl; if (recoverypacketmap.size() > missingblockcount) cout << "You have an excess of " << (u32)recoverypacketmap.size() - missingblockcount << " recovery blocks." << endl; if (missingblockcount > 0) cout << missingblockcount << " recovery blocks will be used to repair." << endl; else if (recoverypacketmap.size()) cout << "None of the recovery blocks will be used for the repair." << endl;*/ return true; } else { /*cout << "Repair is not possible." << endl; cout << "You need " << missingblockcount - recoverypacketmap.size() << " more recovery blocks to be able to repair." << endl;*/ return false; } } else { //cout << "All files are correct, repair is not required." << endl; return true; } return true; } nget-0.27.1/par2/par1fileformat.h0000644000175000017500000000426307737475663017030 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __PAR1FILEFORMAT_H__ #define __PAR1FILEFORMAT_H__ #ifdef WIN32 #pragma pack(push, 1) #ifndef PACKED #define PACKED #endif #else #define PACKED __attribute__ ((packed)) #endif #ifdef _MSC_VER #pragma warning(disable:4200) #endif struct PAR1MAGIC {u8 magic[8];}PACKED; struct PAR1FILEHEADER { PAR1MAGIC magic; leu32 fileversion; leu32 programversion; MD5Hash controlhash; MD5Hash sethash; leu64 volumenumber; leu64 numberoffiles; leu64 filelistoffset; leu64 filelistsize; leu64 dataoffset; leu64 datasize; }PACKED; struct PAR1FILEENTRY { leu64 entrysize; leu64 status; leu64 filesize; MD5Hash hashfull; MD5Hash hash16k; leu16 name[]; }PACKED; enum FILEENTRYSTATUS { INPARITYVOLUME = 1, CHECKED = 2, }; #ifdef _MSC_VER #pragma warning(default:4200) #endif #ifdef WIN32 #pragma pack(pop) #endif #undef PACKED // Operators for comparing the MAGIC values inline bool operator == (const PAR1MAGIC &left, const PAR1MAGIC &right) { return (0==memcmp(&left, &right, sizeof(left))); } inline bool operator != (const PAR1MAGIC &left, const PAR1MAGIC &right) { return !operator==(left, right); } extern PAR1MAGIC par1_magic; #endif //__PAR1FILEFORMAT_H__ nget-0.27.1/par2/AUTHORS0000644000175000017500000000007507664453133014773 0ustar donutdonut00000000000000Peter Brian Clements nget-0.27.1/par2/criticalpacket.cpp0000644000175000017500000000263607711146273017413 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif void CriticalPacket::FinishPacket(const MD5Hash &setid) { assert(packetdata != 0 && packetlength >= sizeof(PACKET_HEADER)); PACKET_HEADER *header = (PACKET_HEADER*)packetdata; header->setid = setid; MD5Context packetcontext; packetcontext.Update(&header->setid, packetlength - offsetof(PACKET_HEADER, setid)); packetcontext.Final(header->hash); } nget-0.27.1/par2/criticalpacket.h0000644000175000017500000000455207737475663017077 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __CRITICALPACKET_H__ #define __CRITICALPACKET_H__ // Base class for main packet, file verification packet, file description packet // and creator packet. // These packets are all small and are held in memory in their entirity class CriticalPacket { public: CriticalPacket(void); ~CriticalPacket(void); public: // Obtain the lenght of the packet. size_t PacketLength(void) const; // Allocate some memory for the packet (plus some extra padding). void* AllocatePacket(size_t length, size_t extra = 0); // Finish a packet (by storing the set_id_hash and then computing the packet_hash). void FinishPacket(const MD5Hash &set_id_hash); protected: u8 *packetdata; size_t packetlength; }; inline CriticalPacket::CriticalPacket(void) { // There is no data initially packetdata = 0; packetlength = 0; } inline CriticalPacket::~CriticalPacket(void) { // Delete the data for the packet delete [] packetdata; } inline size_t CriticalPacket::PacketLength(void) const { return packetlength; } inline void* CriticalPacket::AllocatePacket(size_t length, size_t extra) { // Hey! We can't allocate the packet twice assert(packetlength == 0 && packetdata == 0); // Remember the requested packet length packetlength = length; // Allocate and clear the requested packet length plus the extra. packetdata = new u8[length+extra]; memset(packetdata, 0, length+extra); return packetdata; } #endif // __CRITICALPACKET_H__ nget-0.27.1/par2/par1fileformat.cpp0000644000175000017500000000203007664453160017334 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" PAR1MAGIC par1_magic = {{'P', 'A', 'R', '\0', '\0', '\0', '\0', '\0'}}; nget-0.27.1/par2/par2repairer.h0000644000175000017500000001660707737475663016517 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __PAR2REPAIRER_H__ #define __PAR2REPAIRER_H__ class Par2Repairer { public: Par2Repairer(void); ~Par2Repairer(void); Result Process(const CommandLine &commandline, bool dorepair); protected: // Steps in verifying and repairing files: // Load packets from the specified file bool LoadPacketsFromFile(string filename); // Finish loading a recovery packet bool LoadRecoveryPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); // Finish loading a file description packet bool LoadDescriptionPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); // Finish loading a file verification packet bool LoadVerificationPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); // Finish loading the main packet bool LoadMainPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); // Finish loading the creator packet bool LoadCreatorPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); // Load packets from other PAR2 files with names based on the original PAR2 file bool LoadPacketsFromOtherFiles(string filename); // Load packets from any other PAR2 files whose names are given on the command line bool LoadPacketsFromExtraFiles(const list &extrafiles); // Check that the packets are consistent and discard any that are not bool CheckPacketConsistency(void); // Use the information in the main packet to get the source files // into the correct order and determine their filenames bool CreateSourceFileList(void); // Determine the total number of DataBlocks for the recoverable source files // The allocate the DataBlocks and assign them to each source file bool AllocateSourceBlocks(void); // Create a verification hash table for all files for which we have not // found a complete version of the file and for which we have // a verification packet bool PrepareVerificationHashTable(void); // Compute the table for the sliding CRC computation bool ComputeWindowTable(void); // Attempt to verify all of the source files bool VerifySourceFiles(void); // Scan any extra files specified on the command line bool VerifyExtraFiles(const list &extrafiles, const multimap &extrafilenamemap); // Scan an extra file bool VerifyExtraFile(const string &filename); // Attempt to match the data in the DiskFile with the source file bool VerifyDataFile(DiskFile *diskfile, Par2RepairerSourceFile *sourcefile); // Perform a sliding window scan of the DiskFile looking for blocks of data that // might belong to any of the source files (for which a verification packet was // available). If a block of data might be from more than one source file, prefer // the one specified by the "sourcefile" parameter. If the first data block // found is for a different source file then "sourcefile" is changed accordingly. bool ScanDataFile(DiskFile *diskfile, // [in] The file being scanned Par2RepairerSourceFile* &sourcefile, // [in/out] The source file matched MatchType &matchtype, // [out] The type of match MD5Hash &hashfull, // [out] The full hash of the file MD5Hash &hash16k, // [out] The hash of the first 16k u32 &count); // [out] The number of blocks found // Find out how much data we have found void UpdateVerificationResults(void); // Check the verification results and report the results bool CheckVerificationResults(void); public: string searchpath; // Where to find files on disk bool firstpacket; // Whether or not a valid packet has been found. MD5Hash setid; // The SetId extracted from the first packet. map recoverypacketmap; // One recovery packet for each exponent value. MainPacket *mainpacket; // One copy of the main packet. CreatorPacket *creatorpacket; // One copy of the creator packet. DiskFileMap diskFileMap; map sourcefilemap;// Map from FileId to SourceFile vector sourcefiles; // The source files vector verifylist; // Those source files that are being repaired u64 blocksize; // The block size. u64 chunksize; // How much of a block can be processed. u32 sourceblockcount; // The total number of blocks u32 availableblockcount; // How many undamaged blocks have been found u32 missingblockcount; // How many blocks are missing bool blocksallocated; // Whether or not the DataBlocks have been allocated vector sourceblocks; // The DataBlocks that will be read from disk vector targetblocks; // The DataBlocks that will be written to disk u32 windowtable[256]; // Table for sliding CRCs u32 windowmask; // Maks for sliding CRCs bool blockverifiable; // Whether and files can be verified at the block level VerificationHashTable verificationhashtable; // Hash table for block verification list unverifiablesourcefiles; // Files that are not block verifiable u32 completefilecount; // How many files are fully verified u32 renamedfilecount; // How many files are verified but have the wrong name u32 damagedfilecount; // How many files exist but are damaged u32 missingfilecount; // How many files are completely missing vector inputblocks; // Which DataBlocks will be read from disk vector copyblocks; // Which DataBlocks will copied back to disk vector outputblocks; // Which DataBlocks have to calculated using RS u64 progress; // How much data has been processed. u64 totaldata; // Total amount of data to be processed. }; #endif // __PAR2REPAIRER_H__ nget-0.27.1/par2/verificationhashtable.h0000644000175000017500000003215107737475663020447 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __VERIFICATIONHASHTABLE_H__ #define __VERIFICATIONHASHTABLE_H__ class Par2RepairerSourceFile; class VerificationHashTable; // The VerificationHashEntry objects form the nodes of a binary trees stored // in a VerificationHashTable object. // There is one VerificationHashEntry object for each data block in the original // source files. class VerificationHashEntry { public: VerificationHashEntry(Par2RepairerSourceFile *_sourcefile, DataBlock *_datablock, bool _firstblock, const FILEVERIFICATIONENTRY *_verificationentry) { sourcefile = _sourcefile; datablock = _datablock; firstblock = _firstblock; crc = _verificationentry->crc; hash = _verificationentry->hash; left = right = same = next = 0; } ~VerificationHashEntry(void) { delete left; delete right; delete same; } // Insert the current object is a child of the specified parent void Insert(VerificationHashEntry **parent); // Search (starting at the specified parent) for an object with a matching crc static const VerificationHashEntry* Search(const VerificationHashEntry *entry, u32 crc); // Search (starting at the specified parent) for an object with a matching hash static const VerificationHashEntry* Search(const VerificationHashEntry *entry, const MD5Hash &hash); // Comparison operators for searching bool operator <(const VerificationHashEntry &r) const { return crc < r.crc || crc == r.crc && hash < r.hash; } bool operator >(const VerificationHashEntry &r) const { return crc > r.crc || crc == r.crc && hash > r.hash; } bool operator ==(const VerificationHashEntry &r) const { return crc == r.crc && hash == r.hash; } bool operator <=(const VerificationHashEntry &r) const {return !operator>(r);} bool operator >=(const VerificationHashEntry &r) const {return !operator<(r);} bool operator !=(const VerificationHashEntry &r) const {return !operator==(r);} // Data Par2RepairerSourceFile* SourceFile(void) const {return sourcefile;} const DataBlock* GetDataBlock(void) const {return datablock;} bool FirstBlock(void) const {return firstblock;} // Set/Check the associated datablock void SetBlock(DiskFile *diskfile, u64 offset) const; bool IsSet(void) const; u32 Checksum(void) const {return crc;} const MD5Hash& Hash(void) const {return hash;} VerificationHashEntry* Same(void) const {return same;} VerificationHashEntry* Next(void) const {return next;} void Next(VerificationHashEntry *_next) {next = _next;} protected: // Data Par2RepairerSourceFile *sourcefile; DataBlock *datablock; bool firstblock; u32 crc; MD5Hash hash; protected: // Binary tree VerificationHashEntry *left; VerificationHashEntry *right; // Linked list of entries with the same crc and hash VerificationHashEntry *same; // Linked list of entries in sequence for same file VerificationHashEntry *next; }; inline void VerificationHashEntry::SetBlock(DiskFile *diskfile, u64 offset) const { datablock->SetLocation(diskfile, offset); } inline bool VerificationHashEntry::IsSet(void) const { return datablock->IsSet(); } // Insert a new entry in the tree inline void VerificationHashEntry::Insert(VerificationHashEntry **parent) { while (*parent) { if (**parent < *this) { parent = &(*parent)->right; } else if (**parent > *this) { parent = &(*parent)->left; } else { break; } } while (*parent) { parent = &(*parent)->same; } *parent = this; } // Search the tree for an entry with the correct crc inline const VerificationHashEntry* VerificationHashEntry::Search(const VerificationHashEntry *entry, u32 crc) { while (entry) { if (entry->crc < crc) { entry = entry->right; } else if (entry->crc > crc) { entry = entry->left; } else { break; } } return entry; } // Search the tree for an entry with the correct hash inline const VerificationHashEntry* VerificationHashEntry::Search(const VerificationHashEntry *entry, const MD5Hash &hash) { u32 crc = entry->crc; while (entry) { if (entry->crc < crc || entry->crc == crc && entry->hash < hash) { entry = entry->right; } else if (entry->crc > crc || entry->crc == crc && entry->hash > hash) { entry = entry->left; } else { break; } } return entry; } // The VerificationHashTable object contains all of the VerificationHashEntry objects // and is used to find matches for blocks of data in a target file that is being // scanned. // It is initialised by loading data from all available verification packets for the // source files. class VerificationHashTable { public: VerificationHashTable(void); ~VerificationHashTable(void); void SetLimit(u32 limit); // Load the data from the verification packet void Load(Par2RepairerSourceFile *sourcefile, u64 blocksize); // Try to find a match. // nextentry - The entry which we expect to find next. This is used // when a sequence of matches are found. // sourcefile - Which source file we would prefer to find a match for // if there are more than one possible match (with the // same crc and hash). // checksummer - Provides the crc and hash values being tested. // duplicate - Set on return if the match would have been valid except // for the fact that the block has already been found. const VerificationHashEntry* FindMatch(const VerificationHashEntry *nextentry, const Par2RepairerSourceFile *sourcefile, FileCheckSummer &checksummer, bool &duplicate) const; // Look up based on the block crc const VerificationHashEntry* Lookup(u32 crc) const; // Continue lookup based on the block hash const VerificationHashEntry* Lookup(const VerificationHashEntry *entry, const MD5Hash &hash); protected: VerificationHashEntry **hashtable; unsigned int hashmask; }; // Search for an entry with the specified crc inline const VerificationHashEntry* VerificationHashTable::Lookup(u32 crc) const { if (hashmask) { return VerificationHashEntry::Search(hashtable[crc & hashmask], crc); } return 0; } // Search for an entry with the specified hash inline const VerificationHashEntry* VerificationHashTable::Lookup(const VerificationHashEntry *entry, const MD5Hash &hash) { return VerificationHashEntry::Search(entry, hash); } inline const VerificationHashEntry* VerificationHashTable::FindMatch(const VerificationHashEntry *suggestedentry, const Par2RepairerSourceFile *sourcefile, FileCheckSummer &checksummer, bool &duplicate) const { duplicate = false; // Get the current checksum from the checksummer u32 crc = checksummer.Checksum(); MD5Hash hash; bool havehash = false; // Do we know what the next entry should be if (0 != suggestedentry) { // Is the suggested match supposed to be the last one in the file if (suggestedentry->Next() == 0) { // How long should the last block be u64 length = suggestedentry->GetDataBlock()->GetLength(); // Get a short checksum from the checksummer u32 checksum = checksummer.ShortChecksum(length); // Is the checksum correct if (checksum == suggestedentry->Checksum()) { // Get a short hash from the checksummer hash = checksummer.ShortHash(length); // If the hash matches as well, then return it if (hash == suggestedentry->Hash()) { return suggestedentry; } } } // If the suggested entry has not already been found, compare the checksum else if (!suggestedentry->IsSet() && suggestedentry->Checksum() == crc) { // Get the hash value from the checksummer havehash = true; hash = checksummer.Hash(); // If the hash value matches, then return it. if (hash == suggestedentry->Hash()) { return suggestedentry; } } } // Look for other possible matches for the checksum const VerificationHashEntry *nextentry = VerificationHashEntry::Search(hashtable[crc & hashmask], crc); if (0 == nextentry) return 0; // If we don't have the hash yet, get it if (!havehash) { hash = checksummer.Hash(); } // Look for an entry with a matching hash nextentry = VerificationHashEntry::Search(nextentry, hash); if (0 == nextentry) return 0; // Is there one match with the same checksum and hash, or many if (nextentry->Same() == 0) { // If the match is for a block that is part of a target file // for which we already have a complete match, then don't // return it. if (nextentry->SourceFile()->GetCompleteFile() != 0) { duplicate = true; return 0; } // If we are close to the end of the file and the block // length is wrong, don't return it because it is an // invalid match if (checksummer.ShortBlock() && checksummer.BlockLength() != nextentry->GetDataBlock()->GetLength()) { return 0; } // If the match was at the start of the file and it is the first // block for a target file, then return it. if (nextentry->FirstBlock() && checksummer.Offset() == 0) { return nextentry; } // Was this match actually the one which had originally been suggested // but which has presumably already been found if (nextentry == suggestedentry) { // Was the existing match in the same file as the new match if (nextentry->IsSet() && nextentry->GetDataBlock()->GetDiskFile() == checksummer.GetDiskFile()) { // Yes. Don't return it duplicate = true; return 0; } else { // No, it was in a different file. Return it. // This ensures that we can find a perfect match for a target // file even if some of the blocks had already been found // in a different file. return nextentry; } } else { // return it only if it has not already been used if (nextentry->IsSet()) { duplicate = true; return 0; } return nextentry; } } // Do we prefer to match entries for a particular source file if (0 != sourcefile) { const VerificationHashEntry *currententry = nextentry; nextentry = 0; // We don't want entries for the wrong source file, ones that // have already been matched, or ones that are the wrong length while (currententry && (currententry->SourceFile() != sourcefile || currententry->IsSet() || checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength() ) ) { // If we found an unused entry (which was presumably for the wrong // source file) remember it (providing it is the correct length). if (0 == nextentry && !(currententry->IsSet() || checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength() ) ) { nextentry = currententry; } currententry = currententry->Same(); } // If we found an unused entry for the source file we want, return it if (0 != currententry) return currententry; } // Check for an unused entry which is the correct length while (nextentry && (nextentry->IsSet() || checksummer.ShortBlock() && checksummer.BlockLength() != nextentry->GetDataBlock()->GetLength() ) ) { nextentry = nextentry->Same(); } // Return what we have found if (nextentry == 0) { duplicate = true; } return nextentry; } #endif // __VERIFICATIONHASHTABLE_H__ nget-0.27.1/par2/creatorpacket.cpp0000644000175000017500000000353307711076135017254 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif // Load the packet from disk. bool CreatorPacket::Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { // Is the packet long enough if (header.length <= sizeof(CREATORPACKET)) { return false; } // Is the packet too large (what is the longest reasonable creator description) if (header.length - sizeof(CREATORPACKET) > 100000) { return false; } // Allocate the packet (with a little extra so we will have NULLs after the description) CREATORPACKET *packet = (CREATORPACKET *)AllocatePacket((size_t)header.length, 4); packet->header = header; // Load the rest of the packet from disk return diskfile->Read(offset + sizeof(PACKET_HEADER), packet->client, (size_t)packet->header.length - sizeof(PACKET_HEADER)); } nget-0.27.1/par2/filechecksummer.cpp0000644000175000017500000001351607664453153017603 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif // Construct the checksummer and allocate buffers FileCheckSummer::FileCheckSummer(DiskFile *_diskfile, u64 _blocksize, const u32 (&_windowtable)[256], u32 _windowmask) : diskfile(_diskfile) , blocksize(_blocksize) , windowtable(_windowtable) , windowmask(_windowmask) { buffer = new char[(size_t)blocksize*2]; filesize = diskfile->FileSize(); currentoffset = 0; } FileCheckSummer::~FileCheckSummer(void) { delete [] buffer; } // Start reading the file at the beginning bool FileCheckSummer::Start(void) { currentoffset = readoffset = 0; tailpointer = outpointer = buffer; inpointer = &buffer[blocksize]; // Fill the buffer with new data if (!Fill()) return false; // Compute the checksum for the block checksum = ~0 ^ CRCUpdateBlock(~0, (size_t)blocksize, buffer); return true; } // Jump ahead bool FileCheckSummer::Jump(u64 distance) { // Are we already at the end of the file if (currentoffset >= filesize) return false; // Special distances if (distance == 0) return false; if (distance == 1) return Step(); // Not allowed to jump more than one block assert(distance <= blocksize); if (distance > blocksize) distance = blocksize; // Advance the current offset and check if we have reached the end of the file currentoffset += distance; if (currentoffset >= filesize) { currentoffset = filesize; tailpointer = outpointer = buffer; memset(buffer, 0, (size_t)blocksize); checksum = 0; return true; } // Move past the data being discarded outpointer += distance; assert(outpointer <= tailpointer); // Is there any data left in the buffer that we are keeping size_t keep = tailpointer - outpointer; if (keep > 0) { // Move it back to the start of the buffer memmove(buffer, outpointer, keep); tailpointer = &buffer[keep]; } else { tailpointer = buffer; } outpointer = buffer; inpointer = &buffer[blocksize]; if (!Fill()) return false; // Compute the checksum for the block checksum = ~0 ^ CRCUpdateBlock(~0, (size_t)blocksize, buffer); return true; } // Fill the buffer from disk bool FileCheckSummer::Fill(void) { // Have we already reached the end of the file if (readoffset >= filesize) return true; // How much data can we read into the buffer size_t want = (size_t)min(filesize-readoffset, (u64)(&buffer[2*blocksize]-tailpointer)); if (want > 0) { // Read data if (!diskfile->Read(readoffset, tailpointer, want)) return false; UpdateHashes(readoffset, tailpointer, want); readoffset += want; tailpointer += want; } // Did we fill the buffer want = &buffer[2*blocksize] - tailpointer; if (want > 0) { // Blank the rest of the buffer memset(tailpointer, 0, want); } return true; } // Update the full file hash and the 16k hash using the new data void FileCheckSummer::UpdateHashes(u64 offset, const void *buffer, size_t length) { // Are we already beyond the first 16k if (offset >= 16384) { contextfull.Update(buffer, length); } // Would we reach the 16k mark else if (offset+length >= 16384) { // Finish the 16k hash size_t first = (size_t)(16384-offset); context16k.Update(buffer, first); // Continue with the full hash contextfull = context16k; // Do we go beyond the 16k mark if (offset+length > 16384) { contextfull.Update(&((const char*)buffer)[first], length-first); } } else { context16k.Update(buffer, length); } } // Return the full file hash and the 16k file hash void FileCheckSummer::GetFileHashes(MD5Hash &hashfull, MD5Hash &hash16k) const { // Compute the hash of the first 16k MD5Context context = context16k; context.Final(hash16k); // Is the file smaller than 16k if (filesize < 16384) { // The hashes are the same hashfull = hash16k; } else { // Compute the hash of the full file context = contextfull; context.Final(hashfull); } } // Compute and return the current hash MD5Hash FileCheckSummer::Hash(void) { MD5Context context; context.Update(outpointer, (size_t)blocksize); MD5Hash hash; context.Final(hash); return hash; } u32 FileCheckSummer::ShortChecksum(u64 blocklength) { u32 crc = CRCUpdateBlock(~0, (size_t)blocklength, outpointer); if (blocksize > blocklength) { crc = CRCUpdateBlock(crc, (size_t)(blocksize-blocklength)); } crc ^= ~0; return crc; } MD5Hash FileCheckSummer::ShortHash(u64 blocklength) { MD5Context context; context.Update(outpointer, (size_t)blocklength); if (blocksize > blocklength) { context.Update((size_t)(blocksize-blocklength)); } // Get the hash value MD5Hash hash; context.Final(hash); return hash; } nget-0.27.1/par2/ChangeLog0000755000175000017500000001506107722242036015472 0ustar donutdonut0000000000000013 August 2003 Peter B Clements * Updated par2cmdline.h: Recorrected spelling of STDC_HEADERS! * Updated par1repairersourcefile.cpp, par2repairersourcefile.cpp: Don't treat ':' as a path separator on non Windows platforms. 2 August 2003 Peter B Clements * Updated par1fileformat.h, par2fileformat.h: Use memcmp when comparing MAGIC strings and PACKETTYPE strings. * Updated par2repairer.cpp: When a good packet is found after bad data, use memcpy to copy the packet header. Don't attempt to get the block count directly from the verification packet (which might be missing). * Updated par2repairersourcefile.cpp: Add function to set the block count when the verification packet is missing. 1 August 2003 Peter B Clements * Updated par2cmdline.h: Included . 31 July 2003 Peter B Clements * Updated reedsolomon.h: Added debugging code. 29 July 2003 Peter B Clements * Updated galois.h: Use typename when refering to a typedef in another class. * Updated par1repairer.cpp: Cast size of fileentry in memcpy. * Updated par2repairersourcefile.h: Add function to set the block count for a file when the verification packet is missing. 25 July 2003 Peter B Clements * Updated par2cmdline.h: Correct spelling of STDC_HEADERS. 16 July 2003 Peter B Clements * Release: Version 0.3. 15 July 2003 Peter B Clements * Added config.guess, config.sub: Autoconf files. * Updated configure, Makefile.in: Updated by Autoconf. * Updated configure.ac: Changed par2cmdline version number. Added call to AC_CANONICAL_HOST. * Updated par2cmdline.vcproj: Updated version number. 3 July 2003 Peter B Clements * Updated aclocal.m4, depcomp, INSTALL, install-sh, mkinstalldirs: Upgrade Autoconf to version 1.75 from 1.6.3. * Updated Makefile.am: Changed CXXFLAGS to AM_CXXFLAGS. 24 June 2003 Peter B Clements * Updated commandline.cpp, commandline.h: Added "redundancyseet" member to record whether or not the value of "redundancy" has been specified so that 0% reduncancy is permissible. * Updated par2creator.cpp: Detect situation where no recovery blocks are being created and skip related code sections. 14 June 2003 Peter B Clements * Updated galois.h: Corrected bug in the initialisation of log[0] in GaloisTable. 11 June 2003 Peter B Clements * Updated par1repair.cpp, par1repairer.h: Detect buggy version of smartpar which creates PAR1 files with invalid 16k hash values, Change alignement of temporary buffer used for PAR1FILEENTRYs to 8 bytes. 7 June 2003 Peter B Clements * Update par2cmdline.h: Added header include. 3 June 2003 Peter B Clements * Updated verificationhashtable.h: Fixed bug where blocks of data that have the same crc and hash would not be correctly recognised. 26 May 2003 Peter B Clements * Release: Version 0.2. * Added config.h.in, configure, configure.ac, depcomp, missing, mkinstalldirs, stamp-h.in: Autoconf configuration files. * Added NEWS * Added par1fileformat.h, par1fileformat.cpp: Specifies the layout of PAR 1.0 files. * Added par1repairer.h, par1repairer.cpp: Encapsulates the details of repairing using PAR 1.0 files. * Added par1repairersourcefile.h, par1repairersourcefile.cpp: Stores details of a source file. * Added test1, test2, test3, test4, test5, test6, testdata.tar.gz: Test files for "make check". * Changed commandline.cpp, commandline.h: Add "version" member and set it according to whether the recovery file is a .PAR file or a .PAR2 file. Rename "par2filename" member to "parfilename". * Changed creatorpacket.cpp: Made "string creator" a local variable in CreatorPacket::Create instead of a global. Commented out code that does nothing. * Changed criticalpacket.h: Corrected bug in CriticalPacketEntry::operator= which failed to return *this. * Changed descriptionpacket.cpp: Commented out code which does nothing. * Changed diskfile.cpp: Updated wildcard matching code to permit multiple "?" in wildcard. Adjusted the list of characters that are accepted in filenames to include all with bit 7 set and also spaces. Removed restrictions on many other permitted characters. * Changed diskfile.h: Removed cygwin and linux ifdefs which are now handled by autoconf. * Changed galois.cpp: Move the constructors for GaloisTable and GaloisLongMultiplyTable to galois.h. * Changed galois.h: Changed GaloisTable, Galois, and GaloisLongMultipleTable into templates. Corrected bug in Galois::pow and Galois::operator^ which incorrectly returned 0 for x^0 when it should always return 1. Added Galois8 and Galois16 typedefs for PAR1 and PAR2. * Changed letype.h: Added leu16 type for use in PAR1 processing. * Changed mainpacket.cpp: Commented out code which does nothing. * Changed md5.cpp: Adjusted ROL macro to include masking to correct for bug on Alpha CPUs. Added operator<<() and print() to MD5Hash. * Changed md5.h: Added copy and assignment operators for MD5Hash. * Changed par2cmdline.cpp: Made "string version" a local variable instead of global. Use Par1Repairer or Par2Repaire as appropriate when verifying or repairing PAR1 and PAR2 files. * Changed par2cmdline.h: Adjusted to conditionally include headers and to define various types based on the autoconf configuration. * Changed par2cmdline.sln, par2cmdline.vcproj: Updated. * Changed par2creator.cpp: Called Commandline::GetParFilename instead of CommandLine::GetPar2Filename. * Changed par2creator.h: Redifine rs as ReedSolomon. * Changed par2creatorsourcefile.cpp: Comment out code which does nothing. Added typecasts between 32bit and 64bit values. * Changed par2fileformat.cpp: Adjusted initialisation code. * Changed par2fileformat.h: Use packed attribute for gnu compilers. * Changed par2repairer.cpp: Get filename using CommandLine::GetParFilename. * Changed par2repairer.h: Redefine rs as ReedSolomon. * Changed par2repairersourcefile: Add typecast from 32bit to 64bit. * Changed README: Update details of how to compile the source code using the configure script. * Changed recoverypacket.cpp: Commented out code which does nothing. * Changed ReedSolomon.cpp: Move ReedSolomon constructor to ReedSolomon.h. Created template specialisations for Galois8 and Galois16 for SetInput, SetOutput, and Process. * Changed ReedSolomon.h: Converted ReedSolomon to a template. * Changed verificationhashtable.cpp: Removed unused code. * Changed verificationpacket.cpp: Commented out code that does nothing. 7 May 2003 Peter B Clements * Version 0.1: Initial release. nget-0.27.1/par2/filechecksummer.h0000644000175000017500000001213207737475663017254 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __FILECHECKSUMMER_H__ #define __FILECHECKSUMMER_H__ // This source file defines the FileCheckSummer object which is used // when scanning a data file to find blocks of undamaged data. // // The object uses a "window" into the data file and slides that window // along the file computing the CRC of the data in that window as it // goes. If the computed CRC matches the value for a block of data // from a target data file, then the MD5 Hash value is also computed // and compared with the value for that block of data. When a match // has been confirmed, the object jumps forward to where the next // block of data is expected to start. Whilst the file is being scanned // the object also computes the MD5 Hash of the whole file and of // the first 16k of the file for later tests. class FileCheckSummer { public: FileCheckSummer(DiskFile *diskfile, u64 blocksize, const u32 (&windowtable)[256], u32 windowmask); ~FileCheckSummer(void); // Start reading the file at the beginning bool Start(void); // Jump ahead the specified distance bool Jump(u64 distance); // Step forward one byte bool Step(void); // Return the current checksum u32 Checksum(void) const; // Compute and return the current hash MD5Hash Hash(void); // Compute short values of checksum and hash u32 ShortChecksum(u64 blocklength); MD5Hash ShortHash(u64 blocklength); // Do we have less than a full block of data bool ShortBlock(void) const; u64 BlockLength(void) const; // Return the current file offset u64 Offset(void) const; // Return the full file hash and the 16k file hash void GetFileHashes(MD5Hash &hashfull, MD5Hash &hash16k) const; // Which disk file is this const DiskFile* GetDiskFile(void) const {return diskfile;} protected: DiskFile *diskfile; u64 blocksize; const u32 (&windowtable)[256]; u32 windowmask; u64 filesize; u64 currentoffset; // file offset for current window position char *buffer; // buffer for reading from the file char *outpointer; // position in buffer of scan window char *inpointer; // &outpointer[blocksize]; char *tailpointer; // after last valid data in buffer // File offset for next read u64 readoffset; // The current checksum u32 checksum; // MD5 hash of whole file and of first 16k MD5Context contextfull; MD5Context context16k; protected: //void ComputeCurrentCRC(void); void UpdateHashes(u64 offset, const void *buffer, size_t length); //// Fill the buffers with more data from disk bool Fill(void); }; // Return the current checksum inline u32 FileCheckSummer::Checksum(void) const { return checksum; } // Return the current block length inline u64 FileCheckSummer::BlockLength(void) const { return min(blocksize, filesize-currentoffset); } // Return whether or not the current block is a short one. inline bool FileCheckSummer::ShortBlock(void) const { return BlockLength() < blocksize; } // Return the current file offset inline u64 FileCheckSummer::Offset(void) const { return currentoffset; } // Step forward one byte inline bool FileCheckSummer::Step(void) { // Are we already at the end of the file if (currentoffset >= filesize) return false; // Advance the file offset and check to see if // we have reached the end of the file if (++currentoffset >= filesize) { currentoffset = filesize; tailpointer = outpointer = buffer; memset(buffer, 0, (size_t)blocksize); checksum = 0; return true; } // Get the incoming and outgoing characters char inch = *inpointer++; char outch = *outpointer++; // Update the checksum checksum = windowmask ^ CRCSlideChar(windowmask ^ checksum, inch, outch, windowtable); // Can the window slide further if (outpointer < &buffer[blocksize]) return true; assert(outpointer == &buffer[blocksize]); // Copy the data back to the beginning of the buffer memmove(buffer, outpointer, (size_t)blocksize); inpointer = outpointer; outpointer = buffer; tailpointer -= blocksize; // Fill the rest of the buffer return Fill(); } #endif // __FILECHECKSUMMER_H__ nget-0.27.1/par2/par2fileformat.h0000644000175000017500000001572210063425577017014 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __PAR2FILEFORMAT_H__ #define __PAR2FILEFORMAT_H__ // This file defines the format of a PAR2 file. // PAR2 files consist of one or more "packets" that contain information // that is required to be able to verify and repair damaged data files. // All packets start with a short "header" which contains information // used to describe what sort of data is stored in the rest of the packet // and also to allow that data to be verified. // This file details the format for the following packet types described // in the PAR 2.0 specification: // Main Packet struct MAINPACKET // File Description Packet struct FILEDESCRIPTIONPACKET // Input File Slice Checksum Packet struct FILEVERIFICATIONPACKET // Recovery Slice Packet struct RECOVERYBLOCKPACKET // Creator Packet struct CREATORPACKET #ifdef WIN32 #pragma pack(push, 1) #ifndef PACKED #define PACKED #endif #else #define PACKED __attribute__ ((packed)) #endif #ifdef _MSC_VER #pragma warning(disable:4200) #endif // All numeric fields in the file format are in LITTLE ENDIAN format. // The types leu32 and leu64 are defined in letype.h // Two simple types used in the packet header. struct MAGIC {u8 magic[8];} PACKED; struct PACKETTYPE {u8 type[16];} PACKED; // Every packet starts with a packet header. struct PACKET_HEADER { // Header MAGIC magic; // = {'P', 'A', 'R', '2', '\0', 'P', 'K', 'T'} leu64 length; // Length of entire packet including header MD5Hash hash; // Hash of entire packet excepting the first 3 fields MD5Hash setid; // Normally computed as the Hash of body of "Main Packet" PACKETTYPE type; // Used to specify the meaning of the rest of the packet } PACKED; // The file verification packet is used to determine whether or not any // parts of a damaged file are useable. // It contains a FileId used to pair it with a corresponding file description // packet, followed by an array of hash and crc values. The number of entries in // the array can be determined from the packet_length. struct FILEVERIFICATIONENTRY { MD5Hash hash; leu32 crc; } PACKED; struct FILEVERIFICATIONPACKET { PACKET_HEADER header; // Body MD5Hash fileid; // MD5hash of file_hash_16k, file_length, file_name FILEVERIFICATIONENTRY entries[]; } PACKED; // The file description packet is used to record the name of the file, // its size, and the Hash of both the whole file and the first 16k of // the file. // If the name of the file is an exact multiple of 4 characters in length // then it may not have a NULL termination. If the name of the file is not // an exact multiple of 4, then it will be padded with 0 bytes at the // end to make it up to a multiple of 4. struct FILEDESCRIPTIONPACKET { PACKET_HEADER header; // Body MD5Hash fileid; // MD5hash of [hash16k, length, name] MD5Hash hashfull; // MD5 Hash of the whole file MD5Hash hash16k; // MD5 Hash of the first 16k of the file leu64 length; // Length of the file u8 name[]; // Name of the file, padded with 1 to 3 zero bytes to reach // a multiple of 4 bytes. // Actual length can be determined from overall packet // length and then working backwards to find the first non // zero character. //u8* name(void) {return (u8*)&this[1];} //const u8* name(void) const {return (const u8*)&this[1];} } PACKED; // The main packet is used to tie together the other packets in a recovery file. // It specifies the block size used to virtually slice the source files, a count // of the number of source files, and an array of Hash values used to specify // in what order the source files are processed. // Each entry in the fileid array corresponds with the fileid value // in a file description packet and a file verification packet. // The fileid array may contain more entries than the count of the number // of recoverable files. The extra entries correspond to files that were not // used during the creation of the recovery files and which may not therefore // be repaired if they are found to be damaged. struct MAINPACKET { PACKET_HEADER header; // Body leu64 blocksize; leu32 recoverablefilecount; MD5Hash fileid[0]; //MD5Hash* fileid(void) {return (MD5Hash*)&this[1];} //const MD5Hash* fileid(void) const {return (const MD5Hash*)&this[1];} } PACKED; // The creator packet is used to identify which program created a particular // recovery file. It is not required for verification or recovery of damaged // files. struct CREATORPACKET { PACKET_HEADER header; // Body u8 client[]; //u8* client(void) {return (u8*)&this[1];} } PACKED; // The recovery block packet contains a single block of recovery data along // with the exponent value used during the computation of that block. struct RECOVERYBLOCKPACKET { PACKET_HEADER header; // Body leu32 exponent; // unsigned long data[]; // unsigned long* data(void) {return (unsigned long*)&this[1];} } PACKED; #ifdef _MSC_VER #pragma warning(default:4200) #endif #ifdef WIN32 #pragma pack(pop) #endif #undef PACKED // Operators for comparing the MAGIC and PACKETTYPE values inline bool operator == (const MAGIC &left, const MAGIC &right) { return (0==memcmp(&left, &right, sizeof(left))); } inline bool operator != (const MAGIC &left, const MAGIC &right) { return !operator==(left, right); } inline bool operator == (const PACKETTYPE &left, const PACKETTYPE &right) { return (0==memcmp(&left, &right, sizeof(left))); } inline bool operator != (const PACKETTYPE &left, const PACKETTYPE &right) { return !operator==(left, right); } extern MAGIC packet_magic; extern PACKETTYPE fileverificationpacket_type; extern PACKETTYPE filedescriptionpacket_type; extern PACKETTYPE mainpacket_type; extern PACKETTYPE recoveryblockpacket_type; extern PACKETTYPE creatorpacket_type; #endif //__PAR2FILEFORMAT_H__ nget-0.27.1/par2/verificationpacket.cpp0000644000175000017500000000520007711076264020273 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif void VerificationPacket::FileId(const MD5Hash &fileid) { assert(packetdata != 0); // Store the fileid in the packet. ((FILEVERIFICATIONPACKET*)packetdata)->fileid = fileid; } void VerificationPacket::SetBlockHashAndCRC(u32 blocknumber, const MD5Hash &hash, u32 crc) { assert(packetdata != 0); assert(blocknumber < blockcount); // Store the block hash and block crc in the packet. FILEVERIFICATIONENTRY &entry = ((FILEVERIFICATIONPACKET*)packetdata)->entries[blocknumber]; entry.hash = hash; entry.crc = crc; } bool VerificationPacket::Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { // Is the packet large enough if (header.length <= sizeof(FILEVERIFICATIONPACKET)) { return false; } // Does the packet have a whole number of verification records if (0 < ((header.length - sizeof(FILEVERIFICATIONPACKET)) % sizeof(FILEVERIFICATIONENTRY))) { return false; } // Is the packet too large if (header.length > sizeof(FILEVERIFICATIONPACKET) + 32768 * sizeof(FILEVERIFICATIONENTRY)) { return false; } // Allocate the packet FILEVERIFICATIONPACKET *packet = (FILEVERIFICATIONPACKET*)AllocatePacket((size_t)header.length); packet->header = header; // How many blocks are there blockcount = (u32)((((FILEVERIFICATIONPACKET*)packetdata)->header.length - sizeof(FILEVERIFICATIONPACKET)) / sizeof(FILEVERIFICATIONENTRY)); // Read the rest of the packet return diskfile->Read(offset + sizeof(PACKET_HEADER), &packet->fileid, (size_t)packet->header.length - sizeof(PACKET_HEADER)); } nget-0.27.1/par2/mainpacket.cpp0000644000175000017500000000452007711026317016533 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif // Load a main packet from a specified file bool MainPacket::Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header) { // Is the packet large enough if (header.length < sizeof(MAINPACKET)) { return false; } // Is there a whole number of fileid values if (0 < (header.length - sizeof(MAINPACKET)) % sizeof(MD5Hash)) { return false; } // Is the packet too large if (header.length > sizeof(MAINPACKET) + 32768 * sizeof(MD5Hash)) { return false; } // Compute the total number of entries in the fileid array totalfilecount = (u32)(((size_t)header.length - sizeof(MAINPACKET)) / sizeof(MD5Hash)); MAINPACKET *packet = (MAINPACKET *)AllocatePacket((size_t)header.length); packet->header = header; // Read the rest of the packet from disk if (!diskfile->Read(offset + sizeof(PACKET_HEADER), &packet->blocksize, (size_t)packet->header.length - sizeof(PACKET_HEADER))) return false; // Does the packet have enough fileid values recoverablefilecount = packet->recoverablefilecount; if (recoverablefilecount > totalfilecount) { return false; } // Is the block size valid blocksize = packet->blocksize; if (blocksize == 0 || (blocksize & 3) != 0) { return false; } return true; } nget-0.27.1/par2/commandline.cpp0000644000175000017500000000434607722323501016710 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" #ifdef _MSC_VER #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #endif CommandLine::ExtraFile::ExtraFile(void) : filename() , filesize(0) { } CommandLine::ExtraFile::ExtraFile(const CommandLine::ExtraFile &other) : filename(other.filename) , filesize(other.filesize) { } CommandLine::ExtraFile& CommandLine::ExtraFile::operator=(const CommandLine::ExtraFile &other) { filename = other.filename; filesize = other.filesize; return *this; } CommandLine::ExtraFile::ExtraFile(const string &name, u64 size) : filename(name) , filesize(size) { } CommandLine::CommandLine(const string &filename, const vector &extrafilenames, const multimap &extrafilenamemaparg) : parfilename(filename) , extrafiles() , extrafilenamemap(extrafilenamemaparg) { for (vector::const_iterator fni=extrafilenames.begin(); fni!=extrafilenames.end(); ++fni) { const string &filename = *fni; // All other files must exist if (!DiskFile::FileExists(filename)) { cerr << "The source file does not exist: " << filename << endl; continue; } u64 filesize = DiskFile::GetFileSize(filename); // Ignore all 0 byte files if (filesize > 0) { extrafiles.push_back(ExtraFile(filename, filesize)); } } } nget-0.27.1/par2/par2fileformat.cpp0000644000175000017500000000325307664453165017352 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "par2cmdline.h" MAGIC packet_magic = {{'P', 'A', 'R', '2', '\0','P', 'K', 'T'}}; PACKETTYPE fileverificationpacket_type = {{'P', 'A', 'R', ' ', '2', '.', '0', '\0', 'I', 'F', 'S', 'C', '\0','\0','\0','\0'}}; PACKETTYPE filedescriptionpacket_type = {{'P', 'A', 'R', ' ', '2', '.', '0', '\0', 'F', 'i', 'l', 'e', 'D', 'e', 's', 'c' }}; PACKETTYPE mainpacket_type = {{'P', 'A', 'R', ' ', '2', '.', '0', '\0', 'M', 'a', 'i', 'n', '\0','\0','\0','\0'}}; PACKETTYPE recoveryblockpacket_type = {{'P', 'A', 'R', ' ', '2', '.', '0', '\0', 'R', 'e', 'c', 'v', 'S', 'l', 'i', 'c' }}; PACKETTYPE creatorpacket_type = {{'P', 'A', 'R', ' ', '2', '.', '0', '\0', 'C', 'r', 'e', 'a', 't', 'o', 'r', '\0'}}; nget-0.27.1/par2/par1repairersourcefile.h0000644000175000017500000000512107737475663020564 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __PAR1REPAIRERSOURCEFILE_H__ #define __PAR1REPAIRERSOURCEFILE_H__ // The Par1RepairerSourceFile object is used during verification and repair // to record details about a particular source file and the data blocks // for that file. class Par1RepairerSourceFile { public: // Construct the object and set the description and verification packets Par1RepairerSourceFile(PAR1FILEENTRY *fileentry, string searchpath); ~Par1RepairerSourceFile(void); string FileName(void) const {return filename;} u64 FileSize(void) const {return filesize;} const MD5Hash& HashFull(void) const {return hashfull;} const MD5Hash& Hash16k(void) const {return hash16k;} // Set/Get which DiskFile will contain the final repaired version of the file void SetTargetFile(DiskFile *diskfile); DiskFile* GetTargetFile(void) const; // Set/Get whether or not the target file actually exists void SetTargetExists(bool exists); bool GetTargetExists(void) const; // Set/Get which DiskFile contains a full undamaged version of the source file void SetCompleteFile(DiskFile *diskfile); DiskFile* GetCompleteFile(void) const; void SetTargetBlock(DiskFile *diskfile); DataBlock* SourceBlock(void) {return &sourceblock;} DataBlock* TargetBlock(void) {return &targetblock;} protected: string filename; u64 filesize; MD5Hash hashfull; MD5Hash hash16k; DataBlock sourceblock; DataBlock targetblock; bool targetexists; // Whether the target file exists DiskFile *targetfile; // The final version of the file DiskFile *completefile; // A complete version of the file }; #endif // __PAR1REPAIRERSOURCEFILE_H__ nget-0.27.1/par2/creatorpacket.h0000644000175000017500000000300107737475663016730 0ustar donutdonut00000000000000// This file is part of par2cmdline (a PAR 2.0 compatible file verification and // repair tool). See http://parchive.sourceforge.net for details of PAR 2.0. // // Copyright (c) 2003 Peter Brian Clements // // par2cmdline 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. // // par2cmdline 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef __CREATORPACKET_H__ #define __CREATORPACKET_H__ // The creator packet records details as to which PAR2 client // created a particular recovery file. // The PAR 2.0 specification requires the presence of a // creator packet, but it is not actually needed for the // verification or recovery of damaged files. class CreatorPacket : public CriticalPacket { public: // Construct the packet CreatorPacket(void) {}; ~CreatorPacket(void) {}; // Load a creator packet from a specified file bool Load(DiskFile *diskfile, u64 offset, PACKET_HEADER &header); }; #endif // __CREATORPACKET_H__ nget-0.27.1/test/0002775000175000017500000000000010162001761014017 5ustar donutdonut00000000000000nget-0.27.1/test/TestRunner.cc0000644000175000017500000000052010056212771016437 0ustar donutdonut00000000000000#include #include int main(void){ CppUnit::TextUi::TestRunner runner; CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry(); runner.addTest( registry.makeTest() ); bool wasSucessful = runner.run(); return wasSucessful?0:1; } nget-0.27.1/test/stress.py0000755000175000017500000001145210056212771015725 0ustar donutdonut00000000000000#!/usr/bin/env python # # stress.py - randomized testing of nget # Copyright (C) 2002-2004 Matthew Mueller # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from __future__ import nested_scopes import nntpd,util import os, sys, time, random, atexit from optparse import Option, OptionValueError def check_long (option, opt, value): try: return long(value) except ValueError: raise OptionValueError("option %s: invalid long value: %r" % (opt, value)) class MyOption (Option): TYPES = Option.TYPES + ("long",) TYPE_CHECKER = Option.TYPE_CHECKER.copy() TYPE_CHECKER["long"] = check_long from optparse import OptionParser parser = OptionParser(option_class=MyOption) #parser.add_option("-t", "--threads", # action="store", type="int", dest="threads", # help="number of threads of nget to run") parser.add_option("--nget", action="store", type="string", dest="nget", default=os.path.join(os.pardir,'nget')) parser.add_option("-l", "--minlines", action="store", type="int", dest="minlines", default=5) parser.add_option("-p", "--minparts", action="store", type="int", dest="minparts", default=0) parser.add_option("-P", "--maxparts", action="store", type="int", dest="maxparts", default=25) parser.add_option("-s", "--minsize", action="store", type="int", dest="minsize", default=100) parser.add_option("-S", "--maxsize", action="store", type="int", dest="maxsize", default=1024*1024) parser.add_option("-T", "--totalsize", action="store", type="int", dest="totalsize", default=8*1024*1024) parser.add_option("--servers", action="store", type="int", dest="numservers", default=3) parser.add_option("--groups", action="store", type="string", dest="groups", default='foo') parser.add_option("--seed", action="store", type="long", dest="seed", default=long(time.time()*256)) (options, args) = parser.parse_args() groups = options.groups.split(',') files = {} tot_errs = 0 def cleanup(): if tot_errs==0: testnget.clean_all() else: print 'errors, leaving',testnget.rcdir print 'seed was', options.seed atexit.register(cleanup) rand = random.Random(options.seed) servers = nntpd.NNTPD_Master(options.numservers) files = {} def randfile(f, size, name): l = 0 str = name + '\n' while l 0: size = rand.randrange(min(size_left, options.minsize), min(size_left, options.maxsize)+1) size_left -= size numparts = rand.randrange(options.minparts, options.maxparts) name = 'f%07x.dat'%fileno fileno += 1 mid = '<'+name+'>' uuf = StringIO() f = StringIO() randfile(f, size, name) f.seek(0) uu.encode(f, uuf, name, 0664) files[name] = f.getvalue() lines = uuf.getvalue().splitlines() numparts = min((len(lines) - 2)/options.minlines, numparts) rnumparts = max(numparts, 1) partsize = len(lines) / rnumparts while partsize*rnumparts < len(lines): partsize+=1 if partsize*(rnumparts-1) >= len(lines): rnumparts-=1 numparts-=1 for p in range(0, rnumparts): article = nntpd.FakeArticle(mid, name, p+1, numparts, groups, lines[p*partsize:(p+1)*partsize]) for serv in randservers(): serv.addarticle(groups, article) print 'generating test posts...' populate() testnget = util.TestNGet(options.nget, servers.servers) print 'starting servers...' servers.start() print 'starting nget...' tot_errs += testnget.run('-gfoo -r .') print 'verifying decoded files...' fnames = files.keys() fnames.sort() err=0 for fk in fnames: fn = os.path.join(testnget.tmpdir, fk) #assert(open(fn).read() == files[fk]) if not os.path.exists(fn): print fn,'does not exist' err+=1 tot_errs+=1 elif open(fn).read() != files[fk]: err+=1 tot_errs+=1 print fn,' != ',fk print err, " errors" #s=threading.Thread(target=os.system, args=(options.nget+' -gfoo',)) #s.start() #s.join() print 'stopping servers...' servers.stop() print 'exiting...' #if __name__=="__main__": # main() nget-0.27.1/test/dumbnntpd.py0000755000175000017500000000512210056212771016372 0ustar donutdonut00000000000000#!/usr/bin/env python # # dumbnntpd.py - simple threaded nntp server daemon for testing nntp client posting. # Saves all POSTed articles in sequentially numbered files in the current dir. # # Copyright (C) 2002-2004 Matthew Mueller # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import nntpd, threading, time, rfc822 def chomp(line): if line[-2:] == '\r\n': return line[:-2] elif line[-1:] in '\r\n': return line[:-1] return line def genmid(n): return '<%i.%s@dumbnntpd>'%(n,time.time()) n=1 nlock = threading.Lock() class NNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_post(self, args): self.nwrite("340 send article to be posted.") nlock.acquire() global n myn = n n += 1 nlock.release() f = open("%03i"%myn, "w") inheader = 1 hasmid = 0 hasdate = 0 while 1: l = self.rfile.readline() if not l: return -1 l = chomp(l) if inheader: if l=='': inheader=0 if not hasdate: date = rfc822.formatdate() print "generated date %s for post %s"%(date, myn) f.write('Date: %s\n'%date) if not hasmid: mid = genmid(myn) print "generated mid %s for post %s"%(mid, myn) f.write('Message-ID: %s\n'%mid) elif l.lower().startswith('message-id: '): hasmid = 1 elif l.lower().startswith('date: '): hasdate = 1 if l=='.': f.close() self.server.addarticle(["test"], nntpd.FileArticle(open(f.name))) self.nwrite("240 article posted ok") return f.write(l+'\n') def main(): import sys,getopt port = 119 opts, args = getopt.getopt(sys.argv[1:], "p:") for o,a in opts: if o=='-p': port = int(a) servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,port), NNTPRequestHandler)]) for a in args: servers.servers[0].addarticle(["test"], nntpd.FileArticle(open(a))) servers.start() print 'press enter to stop' raw_input() servers.stop() if __name__=="__main__": main() nget-0.27.1/test/auto_container_test.cc0000644000175000017500000001350210056212771020403 0ustar donutdonut00000000000000#include class RCounter{ public: int *aliveptr; bool foo(void){return true;} RCounter(int *a):aliveptr(a){++*aliveptr;} ~RCounter(){--*aliveptr;} }; #include "auto_vector.h" class auto_vector_Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(auto_vector_Test); CPPUNIT_TEST(testClear); CPPUNIT_TEST(testErase); CPPUNIT_TEST(testPop_back); CPPUNIT_TEST(testScope); CPPUNIT_TEST_SUITE_END(); protected: int alive; public: void setUp(void) { alive = 0; } /*void testFailCompile(void) { auto_vector v; v.push_back(new RCounter(&alive)); v.insert(v.begin(),v.begin(), v.end());//shouldn't compile v.front()=NULL;//shouldn't compile *v.begin()=NULL;//shouldn't compile auto_vector v2(v);//shouldn't compile auto_vector v3; v3=v;//shouldn't compile }*/ void testClear(void) { auto_vector v; v.push_back(new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.push_back(new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); CPPUNIT_ASSERT_EQUAL(2, (int)v.size()); v.clear(); CPPUNIT_ASSERT_EQUAL(0, alive); CPPUNIT_ASSERT_EQUAL(0, (int)v.size()); } void testErase(void) { auto_vector v; v.push_back(new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.push_back(new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); v.erase(v.begin()); CPPUNIT_ASSERT_EQUAL(1, alive); CPPUNIT_ASSERT_EQUAL(1, (int)v.size()); v.erase(v.begin()); CPPUNIT_ASSERT_EQUAL(0, (int)v.size()); CPPUNIT_ASSERT_EQUAL(0, alive); } void testPop_back(void) { auto_vector v; v.push_back(new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.push_back(new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); v.pop_back(); CPPUNIT_ASSERT_EQUAL(1, alive); CPPUNIT_ASSERT_EQUAL(1, (int)v.size()); v.pop_back(); CPPUNIT_ASSERT_EQUAL(0, (int)v.size()); CPPUNIT_ASSERT_EQUAL(0, alive); } void testScope(void) { { auto_vector v; v.push_back(new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.push_back(new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); } CPPUNIT_ASSERT_EQUAL(0, alive); } }; CPPUNIT_TEST_SUITE_REGISTRATION( auto_vector_Test ); #include "auto_map.h" class auto_map_Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(auto_map_Test); CPPUNIT_TEST(testClear); CPPUNIT_TEST(testErase); CPPUNIT_TEST(testScope); CPPUNIT_TEST_SUITE_END(); protected: int alive; public: void setUp(void) { alive = 0; } /*void testFailCompile(void) { auto_map v; v.insert_value(1,new RCounter(&alive)); v.insert(v.begin(),v.end());//shouldn't compile v[1];//shouldn't compile v[1]=new RCounter(&alive);//shouldn't compile (*v.begin()).second=NULL;//shouldn't compile auto_map v2(v);//shouldn't compile auto_map v3; v3=v;//shouldn't compile }*/ void testClear(void) { auto_map v; v.insert_value(1, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.insert_value(2, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); v.clear(); CPPUNIT_ASSERT_EQUAL(0, alive); } void testErase(void) { auto_map v; v.insert_value(1, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.insert_value(2, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); v.erase(v.begin()); CPPUNIT_ASSERT_EQUAL(1, alive); CPPUNIT_ASSERT_EQUAL(1, (int)v.size()); v.erase(v.begin()); CPPUNIT_ASSERT_EQUAL(0, (int)v.size()); CPPUNIT_ASSERT_EQUAL(0, alive); } void testScope(void) { { auto_map v; v.insert_value(1, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.insert_value(2, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); } CPPUNIT_ASSERT_EQUAL(0, alive); } }; CPPUNIT_TEST_SUITE_REGISTRATION( auto_map_Test ); class auto_multimap_Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(auto_multimap_Test); CPPUNIT_TEST(testClear); CPPUNIT_TEST(testErase); CPPUNIT_TEST(testScope); CPPUNIT_TEST_SUITE_END(); protected: int alive; public: void setUp(void) { alive = 0; } /*void testFailCompile(void) { auto_map v; v.insert_value(1,new RCounter(&alive)); v[1];//shouldn't compile v[1]=new RCounter(&alive);//shouldn't compile (*v.begin()).second=NULL;//shouldn't compile auto_multimap v2(v);//shouldn't compile auto_multimap v3; v3=v;//shouldn't compile }*/ void testClear(void) { auto_multimap v; v.insert_value(1, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.insert_value(2, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); v.insert_value(2, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(3, alive); v.clear(); CPPUNIT_ASSERT_EQUAL(0, alive); } void testErase(void) { auto_multimap v; v.insert_value(1, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.insert_value(2, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); v.insert_value(2, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(3, alive); v.erase(v.begin()); CPPUNIT_ASSERT_EQUAL(2, alive); CPPUNIT_ASSERT_EQUAL(2, (int)v.size()); v.erase(v.begin()); CPPUNIT_ASSERT_EQUAL(1, alive); CPPUNIT_ASSERT_EQUAL(1, (int)v.size()); v.erase(v.begin()); CPPUNIT_ASSERT_EQUAL(0, (int)v.size()); CPPUNIT_ASSERT_EQUAL(0, alive); } void testScope(void) { { auto_multimap v; v.insert_value(1, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(1, alive); v.insert_value(2, new RCounter(&alive)); CPPUNIT_ASSERT_EQUAL(2, alive); } CPPUNIT_ASSERT_EQUAL(0, alive); } }; CPPUNIT_TEST_SUITE_REGISTRATION( auto_multimap_Test ); nget-0.27.1/test/misc_test.cc0000644000175000017500000002244410063424220016321 0ustar donutdonut00000000000000void set_user_error_status_and_do_fatal_user_error(int) {} // ugly. whee. #include "misc.h" #include "path.h" #include "file.h" #include class misc_Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(misc_Test); CPPUNIT_TEST(testStrstartswith); CPPUNIT_TEST(testRegex2Wildmat); CPPUNIT_TEST(testFileCompareSame); CPPUNIT_TEST(testFileCompareDiff); CPPUNIT_TEST(testFileCompareNonExistA); CPPUNIT_TEST(testFileCompareNonExistB); CPPUNIT_TEST(testFileCompareNonExist); CPPUNIT_TEST(testFExists); CPPUNIT_TEST(testDecodeTextMonth); CPPUNIT_TEST(testDecodeTextDate); CPPUNIT_TEST(testDecodeTextAge); CPPUNIT_TEST(testParseStr); CPPUNIT_TEST(testParseStrUnsigned); CPPUNIT_TEST_SUITE_END(); public: void testStrstartswith(void) { CPPUNIT_ASSERT(strstartswith("hello","hell")); CPPUNIT_ASSERT(strstartswith("hell","hell")); CPPUNIT_ASSERT(!strstartswith("hel","hell")); CPPUNIT_ASSERT(!strstartswith("ohello","hell")); CPPUNIT_ASSERT(!strstartswith("ohell","hell")); CPPUNIT_ASSERT(!strstartswith("helol","hell")); } void testRegex2Wildmat(void) { CPPUNIT_ASSERT_EQUAL(string("*"), regex2wildmat("")); CPPUNIT_ASSERT_EQUAL(string("*foo*"), regex2wildmat("foo")); CPPUNIT_ASSERT_EQUAL(string("*a*"), regex2wildmat("a")); CPPUNIT_ASSERT_EQUAL(string("a"), regex2wildmat("^a$")); CPPUNIT_ASSERT_EQUAL(string(""), regex2wildmat("^$")); CPPUNIT_ASSERT_EQUAL(string("*a*b*"), regex2wildmat("a.*b")); CPPUNIT_ASSERT_EQUAL(string("*a?b*"), regex2wildmat("a.b")); CPPUNIT_ASSERT_EQUAL(string("*[aA][bB][cC]*"), regex2wildmat("abc",true)); CPPUNIT_ASSERT_EQUAL(string("*[abc]*"), regex2wildmat("[abc]")); CPPUNIT_ASSERT_EQUAL(string("*[aAbBcC]*"), regex2wildmat("[abc]",true)); CPPUNIT_ASSERT_EQUAL(string("*[]]*"), regex2wildmat("[]]")); CPPUNIT_ASSERT_EQUAL(string("*[\\]]*"), regex2wildmat("[\\]]")); CPPUNIT_ASSERT_EQUAL(string("*[\\[]*"), regex2wildmat("[\\[]")); CPPUNIT_ASSERT_EQUAL(string("*\\[*"), regex2wildmat("\\[")); CPPUNIT_ASSERT_EQUAL(string("*(*"), regex2wildmat("\\(")); } void testFileCompareSame(void) { CPPUNIT_ASSERT(filecompare("TestRunner.cc", "TestRunner.cc")); } void testFileCompareDiff(void) { CPPUNIT_ASSERT(!filecompare("TestRunner.cc", "misc_test.cc")); } void testFileCompareNonExistA(void) { int x=0; try { filecompare("aoeuidhtns", "misc_test.cc"); } catch (FileNOENTEx &e){ x=1; } CPPUNIT_ASSERT(x==1); } void testFileCompareNonExistB(void) { int x=0; try { filecompare("misc_test.cc", "aoeuidhtns"); } catch (FileNOENTEx &e){ x=1; } CPPUNIT_ASSERT(x==1); } void testFileCompareNonExist(void) { int x=0; try { filecompare("asdfghjkl", "aoeuidhtns"); } catch (FileNOENTEx &e){ x=1; } CPPUNIT_ASSERT(x==1); } void testFExists(void) { CPPUNIT_ASSERT(fexists("TestRunner.cc")); CPPUNIT_ASSERT(!fexists("aoeuidhtns")); } void testDecodeTextMonth(void) { CPPUNIT_ASSERT(decode_textmonth("jan")==0); CPPUNIT_ASSERT(decode_textmonth("january")==0); CPPUNIT_ASSERT(decode_textmonth("feb")==1); CPPUNIT_ASSERT(decode_textmonth("february")==1); CPPUNIT_ASSERT(decode_textmonth("mar")==2); CPPUNIT_ASSERT(decode_textmonth("march")==2); CPPUNIT_ASSERT(decode_textmonth("apr")==3); CPPUNIT_ASSERT(decode_textmonth("april")==3); CPPUNIT_ASSERT(decode_textmonth("may")==4); CPPUNIT_ASSERT(decode_textmonth("jun")==5); CPPUNIT_ASSERT(decode_textmonth("june")==5); CPPUNIT_ASSERT(decode_textmonth("jul")==6); CPPUNIT_ASSERT(decode_textmonth("july")==6); CPPUNIT_ASSERT(decode_textmonth("aug")==7); CPPUNIT_ASSERT(decode_textmonth("august")==7); CPPUNIT_ASSERT(decode_textmonth("sep")==8); CPPUNIT_ASSERT(decode_textmonth("september")==8); CPPUNIT_ASSERT(decode_textmonth("oct")==9); CPPUNIT_ASSERT(decode_textmonth("october")==9); CPPUNIT_ASSERT(decode_textmonth("nov")==10); CPPUNIT_ASSERT(decode_textmonth("november")==10); CPPUNIT_ASSERT(decode_textmonth("dec")==11); CPPUNIT_ASSERT(decode_textmonth("december")==11); CPPUNIT_ASSERT(decode_textmonth("foo")==-1); } void testDecodeTextDate(void) { //extern int debug; debug=3; CPPUNIT_ASSERT(decode_textdate("Sun, 17 Feb 2002 22:52:46 GMT",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("Sun, 17 Feb 2002 22:52:46 GMT",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("Sun, 17 Feb 2002 15:52:46 -0700",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("Sun, 17 Feb 2002 15:52:46 -0700",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("Sun, 17 Feb 2002 15:52 -0700",0)==1013986320); CPPUNIT_ASSERT(decode_textdate("Sun, 17 Feb 2002 15:52 -0700",1)==1013986320); CPPUNIT_ASSERT(decode_textdate("Sun, 17 Feb 02 22:52:46 GMT",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("Sun, 17 Feb 02 22:52:46 GMT",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 2002 22:52:46 GMT",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 2002 22:52:46 GMT",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 2002 15:52:46 -0700",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 2002 15:52:46 -0700",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 02 22:52:46 GMT",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 02 22:52:46 GMT",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 02 15:52:46 -0700",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 02 15:52:46 -0700",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 02 22:52:46",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("7 Feb 2002 22:52:46 GMT",0)==1013122366); CPPUNIT_ASSERT(decode_textdate("7 Feb 2002 22:52:46 GMT",1)==1013122366); CPPUNIT_ASSERT(decode_textdate("Thu, 7 Feb 2002 22:52:46 GMT",0)==1013122366); CPPUNIT_ASSERT(decode_textdate("Thu, 7 Feb 2002 22:52:46 GMT",1)==1013122366); CPPUNIT_ASSERT(decode_textdate("17 February 02 22:52:46 GMT",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 February 02 22:52:46 GMT",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("17 Feb 02 22:52 GMT",0)==1013986320); CPPUNIT_ASSERT(decode_textdate("17 Feb 02 22:52 GMT",1)==1013986320); CPPUNIT_ASSERT(decode_textdate("Sun Feb 17 22:52:46 2002",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("Sun Feb 17 22:52:46 02",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("Sun Feb 7 22:52:46 2002",0)==1013122366); CPPUNIT_ASSERT(decode_textdate("Sun Feb 7 22:52:46 2002",0)==1013122366); CPPUNIT_ASSERT(decode_textdate("2002-02-17 15:52:46-0700",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("2002-02-17 15:52:46-0700",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("2002-02-17T15:52:46-0700",0)==1013986366); CPPUNIT_ASSERT(decode_textdate("2002-02-17T15:52:46-0700",1)==1013986366); CPPUNIT_ASSERT(decode_textdate("2002-02-17 15:52-0700",0)==1013986320); CPPUNIT_ASSERT(decode_textdate("2002-02-17 15:52-0700",1)==1013986320); CPPUNIT_ASSERT(decode_textdate("Sun, 7 Jul 2002 15:6:5 GMT",0)==1026054365); CPPUNIT_ASSERT(decode_textdate("Sun, 7 Jul 2002 15:6:5 GMT",1)==1026054365); CPPUNIT_ASSERT(decode_textdate("Tue, 07 Aug 2002 0:21:00 GMT",0)==1028679660); CPPUNIT_ASSERT(decode_textdate("Tue, 07 Aug 2002 0:21:00 GMT",1)==1028679660); CPPUNIT_ASSERT(decode_textdate("Tue, 07 Aug 2002 0:21:00 GMT",0)==1028679660); CPPUNIT_ASSERT(decode_textdate("Tue, 07 Aug 2002 0:21:00 GMT",1)==1028679660); time_t now = time(NULL); CPPUNIT_ASSERT_EQUAL(now, decode_textdate(asctime(localtime(&now)),1)); CPPUNIT_ASSERT_EQUAL(now, decode_textdate(asctime(gmtime(&now)),0)); } void testDecodeTextAge(void) { CPPUNIT_ASSERT_EQUAL(time(NULL), decode_textage("0s")); CPPUNIT_ASSERT_EQUAL(time(NULL)-1, decode_textage("1s")); CPPUNIT_ASSERT_EQUAL(time(NULL)-60, decode_textage("1m")); CPPUNIT_ASSERT_EQUAL(time(NULL)-3600, decode_textage("1h")); CPPUNIT_ASSERT_EQUAL(time(NULL)-86400, decode_textage("1d")); CPPUNIT_ASSERT_EQUAL(time(NULL)-604800, decode_textage("1w")); CPPUNIT_ASSERT_EQUAL(time(NULL)-(604800+86400*2+3600*3+60*4+5), decode_textage("1 week 2 days 3 hours 4 mins 5 second")); } void testParseStr(void) { int i=-2; CPPUNIT_ASSERT(parsestr("3",i,"foo")); CPPUNIT_ASSERT_EQUAL(3, i); CPPUNIT_ASSERT(parsestr("-4",i,"foo")); CPPUNIT_ASSERT_EQUAL(-4, i); CPPUNIT_ASSERT(!parsestr("5 baz",i,"foo")); CPPUNIT_ASSERT_EQUAL(-4, i); CPPUNIT_ASSERT(parsestr("6",i,6,9,"foo")); CPPUNIT_ASSERT_EQUAL(6, i); CPPUNIT_ASSERT(parsestr("9",i,6,9,"foo")); CPPUNIT_ASSERT_EQUAL(9, i); CPPUNIT_ASSERT(!parsestr("10",i,6,9,"foo")); CPPUNIT_ASSERT_EQUAL(9, i); CPPUNIT_ASSERT(!parsestr("5",i,6,9,"foo")); CPPUNIT_ASSERT_EQUAL(9, i); } void testParseStrUnsigned(void) { unsigned long ul=20; CPPUNIT_ASSERT(parsestr("3",ul,"foo")); CPPUNIT_ASSERT_EQUAL(3UL, ul); CPPUNIT_ASSERT(!parsestr("-4",ul,"foo")); CPPUNIT_ASSERT_EQUAL(3UL, ul); CPPUNIT_ASSERT(!parsestr("5 baz",ul,"foo")); CPPUNIT_ASSERT_EQUAL(3UL, ul); CPPUNIT_ASSERT(parsestr("6",ul,6UL,9UL,"foo")); CPPUNIT_ASSERT_EQUAL(6UL, ul); CPPUNIT_ASSERT(parsestr("9",ul,6UL,9UL,"foo")); CPPUNIT_ASSERT_EQUAL(9UL, ul); CPPUNIT_ASSERT(!parsestr("10",ul,6UL,9UL,"foo")); CPPUNIT_ASSERT_EQUAL(9UL, ul); CPPUNIT_ASSERT(!parsestr("5",ul,6UL,9UL,"foo")); CPPUNIT_ASSERT_EQUAL(9UL, ul); } }; CPPUNIT_TEST_SUITE_REGISTRATION( misc_Test ); nget-0.27.1/test/testdata/0002775000175000017500000000000010162001761015630 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/0002775000175000017500000000000010162001761016210 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/uuenview_uue_mime_single/0002775000175000017500000000000010162001761023305 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/uuenview_uue_mime_single/0010000644000175000017500000000233207441650232023535 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: [ testfile.txt ] (001/001) Date: Thu, 7 Mar 2002 11:32:13 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 20 Message-ID: MIME-Version: 1.0 Content-Type: Application/Octet-Stream; name="testfile.txt" Content-Transfer-Encoding: x-uuencode begin 664 testfile.txt M>45N8R`M(%1ESKZNGHY^;EY./BX>#?WMWFI:2CHJ&@GYZ= MG)N:F9B7EI64DY*1D(^.C8R+BHF(AX:%A(."@8!_?GU\>WIY>'=V=71S75Q;6EE85U955%-245!/3DU,2TI)2$=&141# M0D%`/SX]/#LZ.3@W-C4T,S(Q,"\N+2PK*BDH)R8E)",B(2`?'AT<&QH9&!<6 M%103$A$0#PX-#`L*"0@'!@4$`P(!``T*05-#24DZ(#`N+C(U-0T*``$"`P0% M!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL+2XO,#$R M,S0U-C'EZ>WQ]?G^`@8*#A(6&AXB)BHN, MC8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*SM+6VM[BY MNKN\O;Z_P,'"P\3%QL?(R+CY.7F LY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_PT*16YD(&]F(%1E Path: liebchen.winews.net!not-for-mail Lines: 11 X-Newsreader: MyNews hello. foo bar baz. =ybegin line=128 size=584 name=testfile.txt £o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =M =J=I=@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒ ÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSR QPONMLKJIHGFEDCBA@?>=}<;:9876543210/=n-,+*74k}mssdJZXX\__74*+,-=n/0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl mnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëì íîïðñòóôõö÷øùúûüýþÿ=@=I=J =M !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=584 crc32=ded29f4f nget-0.27.1/test/testdata/0001/yenc_single_rawtabs/0002775000175000017500000000000010162001761022232 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/yenc_single_rawtabs/00000005.ntx0000644000175000017500000000166707537012315023670 0ustar donutdonut00000000000000From: develop@winews.net Newsgroups: yenc Date: 27 Oct 2001 15:07:44 +0200 Subject: yEnc-Prefix: "testfile.txt" 584 yEnc bytes - yEnc test (1) Message-ID: <4407f.ra1200@liebchen.winews.net> Path: liebchen.winews.net!not-for-mail Lines: 7 X-Newsreader: MyNews =ybegin line=128 size=584 name=testfile.txt £o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =M =J =@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒ ÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSR QPONMLKJIHGFEDCBA@?>=}<;:9876543210/=n-,+*74k}mssdJZXX\__74*+,-=n/0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl mnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëì íîïðñòóôõö÷øùúûüýþÿ=@ =J =M !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=584 crc32=ded29f4f nget-0.27.1/test/testdata/0001/uuencode_multi_uudumbness/0002755000175000017500000000000010162001761023501 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/uuencode_multi_uudumbness/0010000644000175000017500000000111607733767622023752 0ustar donutdonut00000000000000From: tester@testhost Newsgroups: test Date: Thu, 07 Mar 2002 10:05:22 GMT Subject: foo (5) testfile.txt (2/2) Message-ID: <1000.dumb@test> Lines: 9 M%103$A$0#PX-#`L*"0@'!@4$`P(!``T*05-#24DZ(#`N+C(U-0T*``$"`P0% M!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL+2XO,#$R M,S0U-C'EZ>WQ]?G^`@8*#A(6&AXB)BHN, MC8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*SM+6VM[BY MNKN\O;Z_P,'"P\3%QL?(R+CY.7F LY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_PT*16YD(&]F(%1E Lines: 7 begin 664 testfile.txt M>45N8R`M(%1ESKZNGHY^;EY./BX>#?WMWFI:2CHJ&@GYZ= MG)N:F9B7EI64DY*1D(^.C8R+BHF(AX:%A(."@8!_?GU\>WIY>'=V=71S75Q;6EE85U955%-245!/3DU,2TI)2$=&141# M0D%`/SX]/#LZ.3@W-C4T,S(Q,"\N+2PK*BDH)R8E)",B(2`?'AT<&QH9&!<6 nget-0.27.1/test/testdata/0001/yenc_multi_pcrc32_error/0002775000175000017500000000000010162001761022745 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/yenc_multi_pcrc32_error/0010000644000175000017500000000136607442721142023203 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (001/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 8 Message-ID: =ybegin part=1 line=128 size=584 name=testfile.txt =ypart begin=1 end=384 £o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =[=M =J=I=@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓ ÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTS RQPONMLKJIHGFEDCBA@?>=}<;:9876543210/.-,+*74k}mssdJZXX\__74*+,-./0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm nopqrst =yend size=384 part=1 pcrc32=deadbeef nget-0.27.1/test/testdata/0001/yenc_multi_pcrc32_error/0020000644000175000017500000000111207442721141023170 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (002/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 5 Message-ID: =ybegin part=2 line=128 size=584 name=testfile.txt =ypart begin=385 end=584 uvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóô õö÷øùúûüýþÿ=@=I=J =M=[ !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=200 part=2 pcrc32=f73bd7d1 crc32=ded29f4f nget-0.27.1/test/testdata/0001/uuencode_single/0002775000175000017500000000000010162001761021360 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/uuencode_single/testfile.0010000664000175000017500000000171307441636202023433 0ustar donutdonut00000000000000From: tester@testhost Newsgroups: test Date: Thu, 07 Mar 2002 10:05:22 GMT Subject: foo testfile.txt Message-ID: <1000@test> Lines: 16 begin 664 testfile.txt M>45N8R`M(%1ESKZNGHY^;EY./BX>#?WMWFI:2CHJ&@GYZ= MG)N:F9B7EI64DY*1D(^.C8R+BHF(AX:%A(."@8!_?GU\>WIY>'=V=71S75Q;6EE85U955%-245!/3DU,2TI)2$=&141# M0D%`/SX]/#LZ.3@W-C4T,S(Q,"\N+2PK*BDH)R8E)",B(2`?'AT<&QH9&!<6 M%103$A$0#PX-#`L*"0@'!@4$`P(!``T*05-#24DZ(#`N+C(U-0T*``$"`P0% M!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL+2XO,#$R M,S0U-C'EZ>WQ]?G^`@8*#A(6&AXB)BHN, MC8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*SM+6VM[BY MNKN\O;Z_P,'"P\3%QL?(R+CY.7F LY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_PT*16YD(&]F(%1E Path: liebchen.winews.net!not-for-mail Lines: 7 X-Newsreader: MyNews =ybegin line=128 size=584 name=testfile.txt £o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =M =J=I=@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒ ÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSR QPONMLKJIHGFEDCBA@?>=}<;:9876543210/=n-,+*74k}mssdJZXX\__74*+,-=n/0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl mnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëì íîïðñòóôõö÷øùúûüýþÿ=@=I=J =M !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=584 crc32=ded29f4f nget-0.27.1/test/testdata/0001/_empty_output/0002755000175000017500000000000010162001761021123 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/_empty_output/testfile.txt0000644000175000017500000000000010034165044023472 0ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/_yenc_single_withtext_output/0002755000175000017500000000000010162001761024224 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/_yenc_single_withtext_output/1004188064.0.txt0000644000175000017500000000046407724565031026223 0ustar donutdonut00000000000000From: develop@winews.net Newsgroups: yenc Date: 27 Oct 2001 15:07:44 +0200 Subject: yEnc-Prefix: "testfile.txt" 584 yEnc bytes - yEnc test (1) Message-ID: Path: liebchen.winews.net!not-for-mail Lines: 11 X-Newsreader: MyNews hello. foo bar baz. [yEnc testfile.txt] nget-0.27.1/test/testdata/0001/yenc_multi_size_error/0002775000175000017500000000000010162001761022623 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/yenc_multi_size_error/0010000644000175000017500000000134507442727247023072 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (001/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 8 Message-ID: =ybegin part=1 line=128 size=584 name=testfile.txt =ypart begin=1 end=384 £o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =[=M =J=I=@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓ ÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTS RQPONMLKJIHGFEDCBA@?>=}<;:9876543210/.-,+*74k}mssdJZXX\__74*+,-./0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm nopqrs =yend size=384 part=1 nget-0.27.1/test/testdata/0001/yenc_multi_size_error/0020000644000175000017500000000105307442727247023067 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (002/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 5 Message-ID: =ybegin part=2 line=128 size=584 name=testfile.txt =ypart begin=385 end=584 uvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóô õö÷øùúûüýþÿ=@=I=J =M=[ !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=200 part=2 nget-0.27.1/test/testdata/0001/_output/0002775000175000017500000000000010162001761017707 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/_output/testfile.txt0000664000175000017500000000111007366644734022307 0ustar donutdonut00000000000000yEnc - Testfile (1) ASCII: 255..0 ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!   ASCII: 0..255   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ End of Testfile nget-0.27.1/test/testdata/0001/yenc_multi_crc32_error/0002775000175000017500000000000010162001761022565 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/yenc_multi_crc32_error/0010000644000175000017500000000136607442715661023034 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (001/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 8 Message-ID: =ybegin part=1 line=128 size=584 name=testfile.txt =ypart begin=1 end=384 £o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =[=M =J=I=@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓ ÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTS RQPONMLKJIHGFEDCBA@?>=}<;:9876543210/.-,+*74k}mssdJZXX\__74*+,-./0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm nopqrst =yend size=384 part=1 pcrc32=91fe5f1b nget-0.27.1/test/testdata/0001/yenc_multi_crc32_error/0020000644000175000017500000000111207442721157023017 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (002/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 5 Message-ID: =ybegin part=2 line=128 size=584 name=testfile.txt =ypart begin=385 end=584 uvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóô õö÷øùúûüýþÿ=@=I=J =M=[ !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=200 part=2 pcrc32=f73bd7d1 crc32=deadbeef nget-0.27.1/test/testdata/0001/yenc_multi/0002775000175000017500000000000010162001761020360 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/yenc_multi/0010000644000175000017500000000136607442715661020627 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (001/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 8 Message-ID: =ybegin part=1 line=128 size=584 name=testfile.txt =ypart begin=1 end=384 £o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =[=M =J=I=@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓ ÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTS RQPONMLKJIHGFEDCBA@?>=}<;:9876543210/.-,+*74k}mssdJZXX\__74*+,-./0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm nopqrst =yend size=384 part=1 pcrc32=91fe5f1b nget-0.27.1/test/testdata/0001/yenc_multi/0020000644000175000017500000000111207442720571020611 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (002/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 5 Message-ID: =ybegin part=2 line=128 size=584 name=testfile.txt =ypart begin=385 end=584 uvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóô õö÷øùúûüýþÿ=@=I=J =M=[ !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=200 part=2 pcrc32=f73bd7d1 crc32=ded29f4f nget-0.27.1/test/testdata/0001/uuencode_single_quoted/0002775000175000017500000000000010162001761022741 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/uuencode_single_quoted/0010000644000175000017500000000172607771723732023213 0ustar donutdonut00000000000000From: tester@testhost Newsgroups: test Date: Thu, 07 Mar 2002 10:05:22 GMT Subject: foo "testfile.txt" Message-ID: <1000.quoted@test> Lines: 16 begin 664 "testfile.txt" M>45N8R`M(%1ESKZNGHY^;EY./BX>#?WMWFI:2CHJ&@GYZ= MG)N:F9B7EI64DY*1D(^.C8R+BHF(AX:%A(."@8!_?GU\>WIY>'=V=71S75Q;6EE85U955%-245!/3DU,2TI)2$=&141# M0D%`/SX]/#LZ.3@W-C4T,S(Q,"\N+2PK*BDH)R8E)",B(2`?'AT<&QH9&!<6 M%103$A$0#PX-#`L*"0@'!@4$`P(!``T*05-#24DZ(#`N+C(U-0T*``$"`P0% M!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL+2XO,#$R M,S0U-C'EZ>WQ]?G^`@8*#A(6&AXB)BHN, MC8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*SM+6VM[BY MNKN\O;Z_P,'"P\3%QL?(R+CY.7F LY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_PT*16YD(&]F(%1E Path: liebchen.winews.net!not-for-mail Lines: 16 X-Newsreader: MyNews -- =ybegin line=128 size=584 name=testfile.txt o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =M =J=I=@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒ ÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSR QPONMLKJIHGFEDCBA@?>=}<;:9876543210/=n-,+*74k}mssdJZXX\__74*+,-=n/0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl mnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëì íîïðñòóôõö÷øùúûüýþÿ=@=I=J =M !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=584 nget-0.27.1/test/testdata/0001/yenc_single_crc32_error/0002775000175000017500000000000010162001761022714 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/yenc_single_crc32_error/00000005.ntx0000664000175000017500000000167707442723204024356 0ustar donutdonut00000000000000From: develop@winews.net Newsgroups: yenc Date: 27 Oct 2001 15:07:44 +0200 Subject: yEnc-Prefix: "testfile.txt" 584 yEnc bytes - yEnc test (1) Message-ID: <4407f.ra1200@liebchen.winews.net> Path: liebchen.winews.net!not-for-mail Lines: 16 X-Newsreader: MyNews -- =ybegin line=128 size=584 name=testfile.txt £o˜JWJ~ž“–JR[S74k}mssdJ\__XXZ74)('&%$#"! =M =J=I=@ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒ ÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSR QPONMLKJIHGFEDCBA@?>=}<;:9876543210/=n-,+*74k}mssdJZXX\__74*+,-=n/0123456789:;<=}>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl mnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëì íîïðñòóôõö÷øùúûüýþÿ=@=I=J =M !"#$%&'()74o˜ŽJ™J~ž“–74 =yend size=584 crc32=deadbeef nget-0.27.1/test/testdata/0001/_yenc_multi_save_binary_info_output/0002755000175000017500000000000010162001761025532 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0001/_yenc_multi_save_binary_info_output/1015781891.0.txt0000644000175000017500000000041607767204231027536 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: - testfile.txt - (001/002) Date: Sun, 10 Mar 2002 17:38:11 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 8 Message-ID: [yEnc testfile.txt] nget-0.27.1/test/testdata/0002/0002775000175000017500000000000010162001761016211 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0002/par2/0002755000175000017500000000000010162001761017053 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0002/par2/par0000644000175000017500000000231707724216222017573 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: 0002/par2 - joystick.par2 (1/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) X-No-Archive: yes Date: Sat, 30 Aug 2003 21:52:18 GMT Message-ID: <1.1062280338.07@dumbnntpd> begin 644 joystick.par2 M4$%2,@!02U2$`````````'DW=!SI6"5AN57;G:I^U M?K2^(^2CR*I"/33[H'0N<3$Y_P0\'(I+````````:F]Y@ MX(&\>N;LK'LU`I$!)"T;L*_<"VT_C4O)K1SF1BAY;+N$+3T#JFVZ;A:M'HS2 MW>BMN+`[?=`](Z6;(+.FZ#6?DPI#I.>A88Q#!Q@GD>'U!'F7[WVRJ%*>*=03:8FJWZJT M3-TA7(:R7'5F,#F['2;[XE<5TV,[-!^(.V%>\K$NH"R17=K>#A>M@U,_95N\ MMP?K^$?\D'"2H3$Z6B\=)$%005(R`%!+5%P`````````>'"Z`LA`L_+TGR/* M\25T-!$_KS0`S?\[&$GIBFDT!(E005(@,BXP`$UA:6X`````.`4````````! M````0=5Q`GVV\G8^"'!D%PFB&U!!4C(`4$M49`````````!F*:30$B5!!4B`R+C``0W)E871O<@!# begin 644 joystick.vol00+1.par2 M4$%2,@!02U1\!0```````-YV1CJN&<4G"C&VU9%*WPL1/Z\T`,W_.QA)Z8II M-`2)4$%2(#(N,`!296-V4VQI8P````!/1>\&)HL)=RM4_A8-`18O2@Q#MIF$ M9'DW8E9\6.LPAW1,W]Y`,NL_$(K<(@7M0XN!$W^K&3I@FIY/UTPCKAPQ30_S M%W$X(=//I-C&1N8N%#%<(8RA1?P:!S>=FU>3/"HJ*;<3-2L+/2?Q'1O%[\5B"&`^M,HM MLO#]Y4(]\O%F2[#<3`W[87Y,O`CT_IS.7'$CS([8*Y=7N@X3X_&'V2T"C7-W M@?>-.ZK>TQ/U^DQR##$P&<23_1"?VV#GF>0(8WS>G/%M\?RQE,Q$R'\W"`*' MR&EZA?^D:\1^3[-7WY`PD0AA>"I4>)%Y`S?TXQ4WW8CUMU]]AX<00FN^I89( M0E-HB_D?QY,?T0#QFM\#*V[EW4-JA8(%NF+(C'NZL!?;ZM+SN5^Y8I0 M!GFA2IWL:#L&`'ZNZI5>H.3WUFHM\&=Y4@Y(B#90G2];30#J<;Z[JKU8NVYINEY'@\(^I!XAV2)SQ"&6GL MIG$985*!$'29R%;9&QX!^P([1^PQ'&T`I%*]"],X6S\^*DT45T1$>;6"5W9WF'FKU'2Q*NYN'L5_-4>GZCG`<(]+C[SO*;DKW'IXX MF+=[.\=<"E4O'V[\UW#]Q5G;;O@Z(JB&R3<%9':SBN M(G_9:FCB%/KJ;(VK<;A/W$;P\`/BTC@Q>%![T?LW4K8PS!=B"81OK&$(5.)I M,GT7"?1M"WMY#(?W^P-*7YC8\?4X11)!BN97+.>FL0\BD$BAJ*>F%DK].3FC MBDRR.\/F0ANM.>+--C41T?O9,17MFN6RT@8W>#'W+-+D2'P MTFES18EW'9__FI=/GEW/)Z=1:7<`4?C<.X1F\,T-"&T#AT3'E`OJUF+QH+Z= M.N@=6B'1('86*9%T]8>2$`!BI.X\1XT1I[?M[UBYPGUT\9![>QJ<$)Y(G"O_ M9%1=Q/LMI#YQ7(M14 MP@WVVU.1KCK[**;XE6P@N_C_)Q;FR0KN8/`-$>"DI/P03+_U6QAW4>GYL#"< M="//*B=1*?EPN4KJKSUUH:\XH0@V*:'Q4/4QO;'T^P`[:^HG9B41)&CD^UH? M/B3'(Q5WV@!%"L\)%KFX]L%^JA&XABZ0?@?BPR]0:(BFBX9"0;IW\;U8F]A3 M>F411[D=2(#&3J"7O=CS_,QA(UUR<1M%BHL\(;J_Q?:[M2*Y*8I874-=ZY?4 MJSNE&ZDN"K\JQ8`;N<=+@NNUK>`R"SB@_?7C%!XTJ]5M0GJ;/Q3+C^[M5B'M M.AQD:%$!TK(ML6\'%40B)$U"4L^H]K&SPFC;MEBKHVYMX_E!"BU52BV@`(M> MZ'Y6]WC+O>D04$%2,@!02U2$`````````'DW=!SI6"5AN57;G:I^U?K2^(^2CR*I"/33[H'0N<3$Y_P0\'(I+````````:F]Y@X(&\>N;LK'LU`I$!)"T;L*_<"VT_C4O)K1SF1BAY;+N$+3T# MJFVZ;A:M'HS2W>BMN+`[?=`](Z6;(+.FZ#6?DPI#I.>A88Q#!Q@GD>'U!'F7[WVRJ%*> M*=03:8FJWZJT3-TA7(:R7'5F,#F['2;[XE<5TV,[-!^(.V%>\K$NH"R17=K> M#A>M@U,_95N\MP?K^$?\D'"2H3$Z6B\=)$%005(R`%!+5%P`````````>'"Z M`LA`L_+TGR/*\25T-!$_KS0`S?\[&$GIBFDT!(E005(@,BXP`$UA:6X````` M.`4````````!````0=5Q`GVV\G8^"'!D%PFB&U!!4C(`4$M49`````````!< MI[JTD001#QV*CS.7I"&_$3^O-`#-_SL82>F*:30$B5!!4B`R+C``0W)E871O F<@!# begin 644 joystick.vol01+2.par2 M4$%2,@!02U1\!0`````````2[[=`5^B11R2;W=]"S#D1/Z\T`,W_.QA)Z8II M-`2)4$%2(#(N,`!296-V4VQI8P$````;E[ZW%P\P`J'*HXXT@7ELX?M8$IT) M/L%MUA",](1LD?8!O+7_$TBYD@R[12^>SIFTW,/!(3X";GX;?Z^+^"-+L"*3 M;%M-%`U/>2]"-?%R`2MO^5]C+O0A.H??7F^V/E_[]VS%8$8LF$C1!J?!7VR% M4<9G=A$GT!7-Z2=!###)"$08G",(]DZB9+SRDBCB;&;,TU[F/MY_T9,%F;K4 MZ:<\U5B.V;^Y]G@=P;_B-4C@(*\%_NR:BK0K%:4]?(*%,IO:B3LQ:952^!#2 M>D+@+J+WYI:WH+O87=NDQ=19JA4SOY)--DTV@A_V/3H;@3B2S[1=6W,M05Q4V=6@YK)RC%7(?4]J(&,(7`+:2=N[*\7E+>^H+UV, MKI3,G@J[@T^*94CO;8(HRR:JDK?D53?I^S,:BSH_+OHJ]-T%+(K`X:E'GUQX M9OB<`="N(3-HYV5S48BIJ$S!`Y\@#G3I!]C%BSE+>6-T!KWR'U6U)EM)O*IK MS:TXKWL;0,I>@1SU`7WY("_*)Y2SY3[N>X&/_*8Y.PD(6%_665F\BM*!5U(! M(NRTW01PT\A(ULW#=SVGCD8EM6[104^;6Y2&BLK".QU!HRVM7&#B`'5X_C"4 M]J)Q#.B`F3Q.?D1>PL=>>_C.R__HTU`R4]E)1_"P=LSTV#P*]V3X%Z]UV"_E M@3#6X(GC'<%W-]GR<>>:J"*H>C(N&/JX'?&-[CL)-]53Z;A21Q!A1.UJJ:73$*>9U$Y0:2^PZ3+RW(5_/,.^L] MP:#@7Y"[BI,BLVHXU*(4)=>4M&&9ZH<&V\L6K'"=IJ=)6WNOCE__0AR$ MHU#L,114[;-_*0YC^7Q\[EO#9Z1PS(6#;N/KT,T1X+ZJ&_&#'LJ5-W9!1W_R+P?_G,1C-XQ6KD[B MK+9QZGU=:7%7N!X)R0=B?,#A\O+8I%;8FE:3Q[IMS_>-!WXADQ?-G\T^2KN0 MX^'NO!4K399):-C$^JHQ)1J"##N"J7OS!^GX]SXAE2FJD/$L+S M(GED+(VKB0/W='8Y1Y!=%_M3&Y]4-PMT1G];F"QTITPN,)F M3;?%NN@A&4T]QCBF9^O(MZK)9;TW]/AV6SONM]_9P>5LOJP&N%8`WK8M29:I M`I+,Z9ECM=K/#DS;,N$<$JWF`;H7_6K)'&N](^F[=AL9M_?O>Z> MV4&EAG-]=?SF%T`U!;?KW=%Z48/%DSZ1/?'XG`S=)F4I+H"W11S;MEHL/\%Z MXY9PJ,1;>^6?4$%2,@!02U2$`````````'DW=!SI6"5AN57;G:I^U?K2^(^2CR*I"/33[H'0N<3$Y_P0\'(I+````````:F]Y@X(&\>N;LK'LU`I$!)"T;L*_<"VT_C4O)K1SF1BAY;+N$+3T# MJFVZ;A:M'HS2W>BMN+`[?=`](Z6;(+.FZ#6?DPI#I.>A88Q#!Q@GD>'U!'F7[WVRJ%*> M*=03:8FJWZJT3-TA7(:R7'5F,#F['2;[XE<5TV,[-!^(.V%>\K$NH"R17=K> M#A>M@U,_95N\MP?K^$?\D'"2H3$Z6B\=)$%005(R`%!+5%P`````````>'"Z M`LA`L_+TGR/*\25T-!$_KS0`S?\[&$GIBFDT!(E005(@,BXP`$UA:6X````` M.`4````````!````0=5Q`GVV\G8^"'!D%PFB&U!!4C(`4$M4?`4```````#- M^88\O=U>BC1!H*KG`<]D$3^O-`#-_SL82>F*:30$B5!!4B`R+C``4F5C=E-L M:6,"````_';Z`P)E2OY\>X=.+6A-Q/M^"F11`"89%T5:LN6D1)7HX'ZEJ1GP M(\,P%[9J;C-!L5W!NBCAKO*D-!+^U9B\GJ,<:+6(=\L*LL":%V!XO*S2Z7`W MOVIA/PH6I!;->V*OT")T6(/>JQ3(&N)!+@"25N)ZVL!)C+--PE1$/.];SY'T M1GHB!%*@2_%.`1KIK]$>Z^+T]XR!7=JS;&6,D^+F:J\7,IUEM:2(Z\[7KIVG M70.D!&;7;"FW`"N6+.M6\7\"8V!7*?0.N0%I<;PLE?,7EWE)+3=V$)/ M[Y0)BU1>]9T*')/*SS9T.#@DLN:"SHC.I(^[K$T4\\A.&PHQ4WZ#VIE=C,#M MO]&1*`5],TAY6WL?1&XQ%O#G*U-(/_+==Y4VP!3W._.ZY\K3,W8DM17'-!'U MUX/T/VG];K(&C_:24,HG+?A@P!S4P&-@>:X2?XR]Z;0,"C]L2$@5+9V,PYFC M4)LS^SXO(BEM"%&Z>"6D^".5N4:X7Q3=RG5='T_!<_S#'>G;8``N;8&V*ZDS MCNS=\>];-07<[=K$M'"KB$:/=VPC4B)1GL)#CDG2.9HO@5_T:N[6*20HGX9K MH-!D'9D#/MM12VRD_Q8EK MI_EPHWHCGIE1@(E`74($7U3IBJG>''MAG+M] M8U-MP>GL'C&>B%Z9+77]JE+W$.KVSR-;NW!>9K*M0XI(".;=,WWE"5C9''N[ M6YDH/6,J=\EX]`;$HDZ_KN<]KZNIL`5Z?YB]N_"I'/Z4"%N/AMY0(2>."GMWD!;(`(H`2-[+EZ%@.]C MI4#'C50C18#V:ST-DJ%_^"<514NSE;T*Q>DGLC`J>IIHR=L7LIG`0"X,*9A( ML2843"%XW&4QGDSE<_%7'W+KC?013PVWV-W/R4BUZA'#")OVZI+XNH8V,&&/ MRSP^O8<_Y+(4>[?1^_?SX5$^^>#YK]KAIX<&+O_9GB6T"!Y(/%!!4C(`4$M4 MA`````````!Y-W0F*:30$B5!!4B`R M+C``1FEL941E7-T:6-K+FIP9U!!4C(`4$M4?`$` M```````ZP!DA*_,2*32A8FZ]D-@W$3^O-`#-_SL82>F*:30$B5!!4B`R+C`` M24930P````!!U7$"?;;R=CX(<&07":(;]4V=U;,K.+,FVCQWH."!O'KF[*Q[ M-0*1`20M&["OW`MM/XU+R:T6R[A"T]`ZIMNFX6K1Z,TMWHK;BP.WW0 M/2.EFR"SIN@UGY,*0Z3GH6&,0P<8)W)[%D*J0KZUY@EU.O8Z3?&I]:HMSBO. MPE+'3Y;D:%JB$H;3*,O;G3)N-R5-L;!T;/9ZN$Z+J-_T9IY"FX*13!F&2Z8) M-.D#TNVB%2ZH/O.$]6\[).FE.8>%^\A]^ME,YZ/`O'23014?D%-<6IM#RTVY M_KMG*IP2_@^=0Q%D/TJF'I'A]01YE^]]LJA2GBG4$VF)JM^JM$S=(5R&LEQU M9C`YNQTF^^)7%=-C.S0?B#MA7O*Q+J`LD5W:W@X7K8-3/V5;O+<'Z_A'_)!P MDJ$Q.EHO'21!4$%2,@!02U1<`````````'APN@+(0+/R])\CRO$E=#01/Z\T M`,W_.QA)Z8II-`2)4$%2(#(N,`!-86EN`````#@%`````````0```$'5<0)] MMO)V/@AP9!<)HAM005(R`%!+5&0`````````7*>ZM)$$$0\=BH\SEZ0AOQ$_ MKS0`S?\[&$GIBFDT!(E005(@,BXP`$-R96%T;W(`0W)E871E9"!B>2!P87(R 58VUD;&EN92!V97)S:6]N(#`N,RX` ` end nget-0.27.1/test/testdata/0002/par2/par30000644000175000017500000002463307724216222017663 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: 0002/par2 - joystick.vol03+4.par2 (1/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) X-No-Archive: yes Date: Sat, 30 Aug 2003 21:52:18 GMT Message-ID: <4.1062280338.31@dumbnntpd> begin 644 joystick.vol03+4.par2 M4$%2,@!02U1\!0```````'>$&2V+U*,IO*Q[FZGA(!O1OYQ_AV4SMC:>*IBVWZQX[0(3U`U MGNT8,4/H$+S3ANVK?;&N>%MVEUQ+N2MD.C\[9*A75(2=EX,>H"E_[H?*4W;9 MZ$,2O&_A$`ZYW^8DW'GB%,'#KP,OJHHNY%Z)W^=""]7.1!O>1!;I9T3>46@T MPT#J^,L(S_4"$X31-%%!;O2#5D6[%\FA(FU*/L-OQEC<0R:/Q34K5JV@KE&PH' M>`G-CM8>9UREI*MSQ*FL.;"D:L+1D2@0``\EQ[$:KP`$V72P[[UT&QRE9NI@3[-Z$[!.=J5"B.(#TKOE5Y;D6 MA?1J75BFNU!$M3SH;(7V3L/UKCU#4\>$6ON,5'7:/K`+JFL2H]D`:W>9*E'^ MZ#N/@^ES+3J^B!8Q%'6J4P/&@N[;P#'J4?/0R9N:BI7TI,*8,;+>#\8>##TK M@WUH.[JN1V/&'0#^*UZ"KG(VM8].FTNH1HE5XV M%T!MF2W5)$M?[;J6*#F_TG0FN&"(HN`+<7-E0RIY)[)[\Q?-P7L<\CI'?Y^_ M!!0RB(8,H`NF&)JJ-Y?4;!><&5FEXT,M/D_/3UK"NA)$<=Q;,4F=J-Z7%WW0 M5+--F>P$4#XX'$Q&12+-1,=1<#_38:%HC.OO.*&NNX9E/^NS:A65-&(:I5LJ MBGI2/'J$1B@%DA%$2KJMW"4%T,MB`OV.PGRGNT71PSFJ81Z6W^Y\3<'!NZF1 MB@.=HE]-:Q)HL',P84G`F^L/TE3]6JIL91=F@8/)Q?BT9L_@EO!0F7/H4(S`<J2[%:GW-GZ":.\LF9"4UKZ/(`IGQQ3^I>C3JI[/S@Q[X_,C3T M=5%TZ&$PJ(Q_*(D7Q/OR<6W,]=\K]`^60R'[N2,5E4V^ST#YK8S,OM,GX1L=)W/(^W5"\K)$/.C?V-U6!!V",3VV MGBCV8GX[=S:V<%61UT)<8YFJ1OV%_\S1V=6T`9TQ<]%B&G!H7:Q!M8`QM(`W MJQE)MX^#OGD[4$%2,@!02U2$`````````'DW=!SI6"5AN57;G:I^U?K2^(^2CR*I"/33[H'0N<3$Y_P0\'(I+````````:F]Y@X(&\>N;LK'LU`I$!)"T;L*_<"VT_C4O)K1SF1BAY;+N$+3T# MJFVZ;A:M'HS2W>BMN+`[?=`](Z6;(+.FZ#6?DPI#I.>A88Q#!Q@GD>'U!'F7[WVRJ%*> M*=03:8FJWZJT3-TA7(:R7'5F,#F['2;[XE<5TV,[-!^(.V%>\K$NH"R17=K> M#A>M@U,_95N\MP?K^$?\D'"2H3$Z6B\=)$%005(R`%!+5'P%````````LRJ= MDS"V5*BCBT;)8`$GIA$_KS0`S?\[&$GIBFDT!(E005(@,BXP`%)E8W93;&EC M!````$*A7))8DKZ?03PTC>?;(TM/CNN]27SKKA5<)=#BI%Y787JW?X.:_@4C ML8PO+O)`+[)Y10TCTAUY2]`3V6[C,FRRUJZL;:N#3S$$QQZEC[+W[IC3+#'R MG\`.<*8R8>N&)!L.[O&]D$_H,>S*E)`;L__1S#Q'3HV"J\(`SO5E_QKV[`B` MBY:1_SR">:VN\-%+_Z[5!0!?DT0*%3B7EWHE@9Y7/VG/P'D#A[]:X,:29$ZG M@'G:J,ZTSQTW!9-'@-&_\IKRQYB7=$D[OS:K3M+;AYNZ[@&G\5D;B0\N/Y)K M0;VM;@(4J(CK0=&!(89>:O()4IK@/%#VETYO[Q')-BYJ,H7/N:^MJ21`Y`#C M6GX^!R"P3]]=D)\/W1]O:H*\2(.5`'UQ#I";-DUG?$M*$JGOK$T$^6FF/27_ M>0XM?7+>4*Y(S-35B[UK'4OU%#4=N&FB1B%XEBX;<5IG3O%=;?O*2L$)(H+^ M"_(MF*'$U>&5"5X(]_QOODX7:_P-ND^/N39()GA%%PM/5IZ4.N*ET9($IS/[ M]:@[(8G7#>2AS.>";P&`P?_7PY5B2N9$T(>PZ-5!>G,(\``E4/*"UL1&4E]+ MN'IC,9ZJS-RFVY(4],W/]>Y>U5<`T'GJ6!1NZO/25:2QO:/=,U6:$54;B["4=RFD"`NX<+SF_Q0O0EL#=(4N$M%_RZ,6?PF`Q[]AN"8BFK<"*&8+&C]QYSYHY[C#-[^'M5@(\,F9B+I1= M(Q1BGGLJ?V!OA\?>Y=RCP0-0:-;RM MD+X+]5![N+7DH5]9K./-M2+G=E5?Z\?.^.U%;NS:7FBQU@8)"<`47L>EIN$, MO),Q*9D5:#6`=6O6:#(,-^=-1,"M5*.^+H4_45B`',1XQ:$N+#*;T^(29J,J MN2&005Y_89D^7G8FMA/4@/G!0;_&RW$T*"[2'*!Y/[VRP39L&)26_O744G.1 MK2UFFAHZL>;&*A@WGL*7JV],3CZGH4V!5?:TK&:#I)E1&//[>=&Q0T?>+-TO MGN;JE='[_?]T0_[XOQ60"@]G*=X[$?/!S,M)R,CG2DN&#R6/$ ME*L^)F]X<:##!15#9SO(1W:=9G40FZHELH"G93+L9:YOXW<7@91<1)W8M3=T M\1#_XO=R1#GE]940;`?QCS_T%;)J_B.V'T=8J42RKV]!G<5/0VV/M$QFVG*\ MH+0PC>C5J8HK8WO`9TA&@,@Q..CO1#`2:$Z&B?'P2YSX:N[2U_'W.Z7&XV'V MM^?9S!WO@`75M/?[AU1:G>PEK`S]9O3IUCQ/9B7M)?64K M5['`2FW&?-+/S1"H+7"(!U'4E_Z.QXS^1$\0&)4D#$>=5>Y005(R`%!+5%P` M````````>'"Z`LA`L_+TGR/*\25T-!$_KS0`S?\[&$GIBFDT!(E005(@,BXP M`$UA:6X`````.`4````````!````0=5Q`GVV\G8^"'!D%PFB&U!!4C(`4$M4 MA`````````!Y-W0F*:30$B5!!4B`R M+C``1FEL941E7-T:6-K+FIP9U!!4C(`4$M4?`4` M``````#"`YSSD.S"J&ZT&]Y(8_\%$3^O-`#-_SL82>F*:30$B5!!4B`R+C`` M4F5C=E-L:6,%````5Z1[U%)JA")[9^,99WO^:2=<)04WHE#[UM==])IE6R2( M]C1ZN1V);,!M1T_2YS1N<.!JKN>35%@,NQ?G4@YMT*K.589H*:-IBV-#9-]_ MFZYA'RQ2[!!A1J![6>3X]I7;6&^>QV6A`B5`IXBV;?M2#H04BVW3/BG&C/!O8/1WY7_@ZA1COL25X:'YJ0LL: MNH@M9NV[Y6:,6TFZQLL_:NJ$_>#,_/]AND[^$[P(6Y\U?(4!N/5USX/ MJ)N.HP`Z_;5VHPS`B`BF:T`\\6)GS9IAYX0U/N>.PP;N0I53V>Z0O+0?FS#P M>M?LK:2Y)PLV"S(<**OQLJA1&@B7,NO81A5+J#V>XJ7"8]KAE$0(7'%/=2M0 M3#0(W[1#N4+-PA5R%V*.\F-, MUN$YK<`*Y:62GJC4>ZQIDTP@"(Z08^:_E%J#@`U6M?3JAYG* M**APZN`T"/>R&#MQ'8QN*,,W0/#8DE"%*[?I,JEA4:(V])L'#K5(+K7-[91H8&I`>4-UHJ#QQL4^"7G[<3I-H^XY>2IOG$(3K.PD&<<5[YK4U.?FU5$?CDRYXD[) M7O*=8I4BUE3^D6'(1LX_+L";U, M0HF+:PEFVIMA1WCG)6ZAB1*;HDEU"P/D69C@EH$6.^:A.PWJN<2SY.UABT/99`6GD5Y];.Y;_[_43>\;@HI\6M8B#M8 M0.[=[T#]P3295K'RN5\[5'VOE6BN^N6/2H&N3M4TX#;?,,J:K8#_E'+M.MCHN!"JLX)3Q?>NF5+$.4MBG-6V1&P,WGP,H558I+-HW1$*G3IS&:@> M,E+*B`8BG&-FV2I8:!W6K>D"[+&>/&D]^OT"+PVPP9B3@BX?<. M)UQBV#NDV4@(1-?.GHK[SD#[^$9*Y45]1406@3GI!9YD-9*L9=<$84BE@8[3 MQPYPL^N458^5D]$/%FA67%0>%5?+R_@F6.TQE7N+GWER6.NNC@<6:R@%*B";/)PBZ;PO2#K`WR)&D_-AKY M5(%(MYAL["+_7YP:/7*+9+J9=&'HCNJQVZ9R5UKXC`0+))9&:R1O]!@%#.Z9 M[B".F*:30$ MB5!!4B`R+C``24930P````!!U7$"?;;R=CX(<&07":(;]4V=U;,K.+,FVCQW MH."!O'KF[*Q[-0*1`20M&["OW`MM/XU+R:T6R[A"T]`ZIMNFX6K1Z, MTMWHK;BP.WW0/2.EFR"SIN@UGY,*0Z3GH6&,0P<8)W)[%D*J0KZUY@EU.O8Z M3?&I]:HMSBO.PE+'3Y;D:%JB$H;3*,O;G3)N-R5-L;!T;/9ZN$Z+J-_T9IY" MFX*13!F&2Z8)-.D#TNVB%2ZH/O.$]6\[).FE.8>%^\A]^ME,YZ/`O'23014? MD%-<6IM#RTVY_KMG*IP2_@^=0Q%D/TJF'I'A]01YE^]]LJA2GBG4$VF)JM^J MM$S=(5R&LEQU9C`YNQTF^^)7%=-C.S0?B#MA7O*Q+J`LD5W:W@X7K8-3/V5; MO+<'Z_A'_)!PDJ$Q.EHO'21!4$%2,@!02U1<`````````'APN@+(0+/R])\C MRO$E=#01/Z\T`,W_.QA)Z8II-`2)4$%2(#(N,`!-86EN`````#@%```````` M`0```$'5<0)]MO)V/@AP9!<)HAM005(R`%!+5'P%````````/T9KUDP`B-4Y\;C M88V18?/-`H.NOOU6'"*[/QA5VK-S76[IMH")O"&%)O]$=O\[XVIR[[H:H[-@ MG7OFI5E&[R&ZH,$U!JNET&%,_AUGPB&,8'3\AK^=,O0I\<:TH\^+2]$YPPXV MB3`"$$0G&EDD'GR\>SW$2;UT78M+&S&@W.?O@5X?!741E;?8P1R#P?C3]G^_ MF'X[*("T+QK$`&4I[^Q<'?]H*JDS_!<[0]>1%8]UX\8^M``,>Y#<' M$'ZFX"LN>.-PE_6,FH`\%Y<^OWD.9%D6?Z=&4#^A[\4\1DMCP?H-`;R18U4U MWY#GGW;+"OKR&'+8UR2KUS'2FU<]=R]TC(AME1=ED5["J-'?ZB)(=[_^,<,/ MEF"69+,55\RTN';^%HRI;:&VO M">,!8B;9FRHY>K_=4KMZ[.;I'/&W2E!A1TV$BC^V$HLIN#CT*4MF/"&@@GQT MS7"6!P30>XUCU820A/MQ#=HNZJLV2"]9B3+L+(WJD&&3K@7E=@P9JB5#)SCT0HZY8TI06^HB\G+9 M9BSE<@Z;"(J,V4?^6K@*MCX<*VTVWT%&ZDWTF/ZXL! M`O)JU_JH@7T#7).'I^%4HDCKM(:#++?1R_VW.H;@'*RL!US+H1.Q%>==\,)\ MG,&'X("J(-\Y">--L"K(5*784-\F51#9:8F:M!FD]/.?50.D3-\BB5XLGU[< MLF=B]E3>1HD;:/X_XXB!EX$+ID<8_MJJ`J5I.L:R?]L]':T M8G*`C#I-VO2;>K']_,-"=?[I9$#?+H-GE9[UND8?[I4.7>VJ4E?(JVU+31G.@$S('.([.YT./W8*%1I>@$1!]JTZJKE[ M%D]/,?7KLNV%J.D?&^)%:R(;8P.Z[<9W>YGH3F([X+"A[R'(FT^'5FKV1O,9 MGA#1Q%J^WDB3+;2\4=]]4C*6Q'VAG%?K:CEA#=%["-3%/NI(5#&(ZA],4&[% M[^>]R41B>R/XNF[0O#_A%X^DR^C:#E35#,E;IA4\8ZU`78N#"+%Z^]E7V"-0 MA!\,TXRZ_C9HVUSOZ>;P(SB'>5OPU__SN<_YLN_2((OY82-NY,@?Q@;8N/#F MD9'[G0;;[WJWPM1W&[A5\M,RQ(YR]\6YOW1EZGZ;O7ULJC&P/:XH<@)8.+!+ MN+J3U.+.G\2)1BXHB[*`H_I+4Y$7],8P]9Y\7', M\6BI]FK7#NW1C1-]6224>M3=T'.E8)6&Y5R%EVD"COQ$_KS0`S?\[&$GIBFDT!(E005(@,BXP`$9I;&5$ M97-C0=5Q`GVV\G8^"'!D%PFB&S,Q-@IY=N=JG[5^M+XCY*/(JD(]-/N@="YQ M,3G_!#PS4"D0$D+1NP MK]P+;3^-2\FM'.9&*'ELNX0M/0.J;;IN%JT>C-+=Z*VXL#M]T#TCI9L@LZ;H M-9^3"D.DYZ%AC$,'&"=R>Q9"JD*^M>8)=3KV.DWQJ?6J+KA.BZC?]&:>0IN"D4P9ADNF"33I`]+MHA4N MJ#[SA/5O.R3II3F'A?O(??K93.>CP+QTDT$5'Y!37%J;0\M-N?Z[9RJ<$OX/ MG4,19#]*IAZ1X?4$>9?O?;*H4IXIU!-IB:K?JK1,W2%F* M:30$B5!!4B`R+C``36%I;@`````X!0````````$```!!U7$"?;;R=CX(<&07 M":(;4$%2,@!02U1D`````````%RGNK21!!$/'8J/,Y>D(;\1/Z\T`,W_.QA) MZ8II-`2)4$%2(#(N,`!# begin 644 joystick.vol07+8.par2 M4$%2,@!02U1\!0```````(<+]KI?IX]J\PJ^;KN"Q><1/Z\T`,W_.QA)Z8II M-`2)4$%2(#(N,`!296-V4VQI8P<````+*]-T=3VX6E^XNK]UMQ/0K-KP81,#F([Z`=:`E^=F6?T M2T(XITAQ1VULF2BCY:^!AJ0YO$SVVD9\_5C]KAHGRKZUV->]LXLE!+/P#H@3 M=2D6E!AR)NWIB'@/@'[*+5$8+"6Z\?*J+*=_IPZF M#Y/.+K9#`6A$_+FZ-9R(R+PU;>.7!1=057C9U11&/E!Z$FT^GI-XMV5P'_T/ MOT5ZLY9/KT.CP[]^76&4QL,F*/Q^*+$ZS+S@$W^Q>@QFH"/1);YO12: M[\7>IS&ZYZCAI30OP^`B_C()O`O&1T1V._`T#[92C!:C23;R,9:V%I>Y('"L M.W1_:P1F[I%(P;T3/GIFT^/N8`*#=\X(R^12MWO,)>#LZ30F@;= M:;\80E1.0@=+_:V\*#_7IG"6%9GZ^/\B_R\L#ZW<0%K36&4Z"!?>) M:/UJ3A2EUY=_9"/$*+CC_;,1\HU<3/MPFJ\&]BP;B3S">X)42CN_Z?42NSM# M_?JWKB2?"GE4YP#$#%[ZPLX_TW6?#@(P0EO('LV?8#%.6G55I7.N-._)XX?5 MW*EJH8?L*!%Y`'U9VQZAWQV%H4VUE>^/V@)CTTK5!IC\TF7"/;@I-TDJOOUO M:D"L:D74I2;1TW^1M24"/7K7=$ZD#2)S>%-2,Q<^==KMYA'JJ?87=J[WXG\' M\LM$3E!F7%"LX56H3Q<>(V>Z!G*>PF:=3U.:=)A?LPFP M*KX9J<;)K!@M.-%[?R>DO\_(V`@2FNNR(1^NB+=UIA*FE1$ZBB\:?OJ_?3>B MF._HL8Y]!K\H(>^F`U?UT84$OOB_X=`:VU-_&%)Y!R#)H7K'2; MZM2O>(*6]#(J.W,3+8+6D\\F0[]+Q);&P5>2`@T\Q>C]ENU#Q, MDX3SI*W@9!:@Y@(5K/8X%HO?M+G94B2G=7&6(;KEN_KX$.&;2> ML$[?C$WOO%TP'Y3$TR6`+IFG>IB>9N]`NN@%,8W$4^!+6A91H6#L`[?0;,_O MFD[MFMVY>*KPW4_?1SVT5].9X9KVVB9RS.WR&0GK$WDY5'852I\WF;`DN+D& M#DR>J-"6'JG!Y8FOS8-'MY'(O6^135Q3S>X0F^_7&-*H97:O"NYXHQZE6HD3 MN7BIASLTDVAS+UC_^;<$LA_+#G MZ'-]/X8/:'"@,F'O(I)$4!4."*4ABLF7&K-XIV&70\<[DX61DK*33+''LE2-"-P!>T?3*CU%[7/B`4&(Q`:7:NI,&\ M*AK2W??8'GO>4$%2,@!02U2$`````````'DW=!SI6"5AN57;G:I^U?K2^(^2CR*I"/33[H'0N<3$Y_P0\'(I+````````:F]YE5TNDI1 M\&+/0FX5,.#+AXW/8!2HQK_NI>2I$7I_/0>MIN5;0Z8'2''P3P-@M<1-+CP+ M9K7$$?TJRY?:(HS@'?76A8A?[94`L;K&_2/+].7^D1/4I0Z38>^$0)3,[0@6F`I7IU"MHULF"I`T7B+S#*Y?SP6`%TTRL%"J\.^^<(]EGT+F4DH M4T@99;T>0X[Z@_'Z>B-*Y,Y;X1*/D]5$$*HM)DP!.#T!,)XEI%?3%,TPL!V, MS-I1'VWJJ'>,KL,]VDKOB6*=ESR%&`!(EA!(3U`5V[5![H(-T_H=P(+\U6=< M!;&1&[/R*E>6+!5>R));YO=Q_LB5,\&X*=C63J"J3,:;R@>'^/E(7ZM4`TRA MR6N2^IH/485OTH-$A5"=RJ$`._,7(XS4<:ZE!627T]EX0,*=VT5EB@VF7>O MK]H#_8%SL.[E%(*OI;/&>46TH?R'_M\7SYC%47DU(@V"2&@-I/\KGO&&#IR;5L@U<7"?V[0`];,3IW*F+22EW'!FV8Q\S5\[A64&:R. MO^EJC_R_[*/^/X9NO@!972QUVTT1=.P$<<&1?!^@%\"^OBGUJA1GY30>^QK;+(T M5&@PYFUR158`!*6J19J#%-)H?L6U'G&N>A:V[,9OQYL1)[&KK3JDL4J=^84, MF!ARF;SI#KHJZ^Z)/L\0?I@Q":;Y"QD_*T&:3@'`=-#CB%FRV;PQN.L1:B\^J]WF/["]<1BW!E8? MX+=D&9\#P^-CYP++16@V^ZDEW:9IZPUI+>/:9_KK4>(J8?]/+J$OR' M^DH7I.)[`\!_%:/L=!$-1;/8^[NUAQ;"K?"*U-!/^R'2%XB5!M&^FPDSS`Z5 ME;H!0#JFF\;OA99.4H+,+UEP6$ID'YBH'=^,`"#?V%"0DE&G4WMAQ\H`E,L` M=_C?^1UW@;.\+F.A^D("!Y=&Y!5\Q0*H05\/QKTY:YL(3ZD<2K]M-VBWTU@N MD@7!*$I6DXI?*210)'TYL$?/;A@[V$T$$G"H+SVA[/F`B<"GC&ADS>![<3(G MXK-((]S[.'`&%\FUK\>]`)8J2_B[!U9=.I08[BKOY'\2BV7'_H`/19:/5MG! M+W:"_V^4"-72:4TD?Y]34$%2,@!02U1\`0```````#K`&2$K\Q(I-*%B;KV0 MV#<1/Z\T`,W_.QA)Z8II-`2)4$%2(#(N,`!)1E-#`````$'5<0)]MO)V/@AP M9!<)HAOU39W5LRLXLR;:/'>@X(&\>N;LK'LU`I$!)"T;L*_<"VT_C4O)K1SF M1BAY;+N$+3T#JFVZ;A:M'HS2W>BMN+`[?=`](Z6;(+.FZ#6?DPI#I.>A88Q# M!Q@GD>'U M!'F7[WVRJ%*>*=03:8FJWZJT3-TA7(:R7'5F,#F['2;[XE<5TV,[-!^(.V%> M\K$NH"R17=K>#A>M@U,_95N\MP?K^$?\D'"2H3$Z6B\=)$%005(R`%!+5%P` M````````>'"Z`LA`L_+TGR/*\25T-!$_KS0`S?\[&$GIBFDT!(E005(@,BXP M`$UA:6X`````.`4````````!````0=5Q`GVV\G8^"'!D%PFB&U!!4C(`4$M4 M?`4```````"\0?I^E>7OH^_("3EOS>!R$3^O-`#-_SL82>F*:30$B5!!4B`R M+C``4F5C=E-L:6,)````H^+'0UVT?+B'-/:RAB+9AN_I"O!<=OLC!MXPY4:/ M^F3-R&X\T8*HKM]0M3C&C#:CL556/N%M`^?`AAX:$\\C75:H;_&8_2KI0,5* M;I^[[IW)Z0T4.G[<\97/36CE@>,[GD>OF/?.E7([#) ML]AX7-/@@,.PL,_F,DPHA5=;;T*`H%\Q17U4#>!U-ZFGE#'R%R?3S)CQ@9Z1 MLK$CVSO7RY'H%D\31!?4<4>,P!6Q>)HH?J7[3%@@NQA'>&8JFN?S+)X<\S6. MBDW%*'B5^`;MIT.%8C+SQLF%<(/K6]3(*K-NOX^8_:$N!LW#%?4#[Q9AKC*E M02^I#^K%._LJVM$-&D;&,S*)F0$&T]$+<.&]@4A`R\7K;N"[6^3^R!F^V MT:UXP'Y69@>%74G-H7F.1M_L_FP(8A-R@A;[V6T$+9U>N7NC>CJUZ>G`6\_4 MNN!AVTZ7ZQVF7N&X`;;&F2XR2I^)3TOT"@)9,J?]&Z5::_*QO;A1=;PTJF[- MYM_,O#.2FX*/(8UU51Y94"GD(Z"WI8[EH8/O495]!D;":LD%XJ6]Z!9EX>RQ MMZ8=>_QUS%N*N&O_0"SG<(-UM6-FVYJG,'X+\LXB('5S#M;,/AMLTQVM*D7@ M\!5[@;@7X$X]V4.D!3NGSL,9]WAW@)2@H9DVC4L8-VG)'7R-VH5RL,1=X>]J M#0!L`>`1\9)*>H3M?+K!\4.5_BI`N#AO6$2LO%:HJWJF,3'P_<[3$59:M-*D MABOR$0(4+;<_&^2ME<>L*6C'=X0 MB.O2UW^IIUB#,[WG,2QJ9-7HSLO[9M8LYD[##D>RQL+AP%HP]:\#KW>^HQLG M^PP42>91#L^%T3]62NG<6@:AWR?L0E[)PMO8]0/63.A['M*O\@KH/59<3`F0 MS]I[^S:<0HO?&2UYTJ>X8J6T(YH_Y=]>$FHAV.W+%]<+\+Z,VT@0`\PROOE_ M7@9^RJ'B"4J(:W"P/9HS-S+%`T`C%9^!#Y/Q\G$H+>PO).YL0+EDW3MZ+9SO M$Q`IZT658!X==CNFY>`_>;%2CVM5IJI#:'J]5;>'?07YP(>95TFBA:>0LQ9V MY!)IK%;D'J"B/EX(P//K2`U^J"^SHX#9C*Q9EI9TWG@Y'QTB+_R'3U8-E*PR M<;D8TWS=N@VU`:_H"D9A;+&"6`2.&E4T;>D/0AKHI8\DVTVPX\;,NI.1-_JZ M!":2`YE.,*_%9PFALHWUR6R..J_7HX6G.?;/W6ELRJ<[GA4@2FM_"5<4X+$`X; M68<&4W(IJ34@IJ5W`AM?/?BP'XY(_(M<:5&03#AQ1NORR+"7<[Y'I^K4+AN" MV/@`HFZWQ2V`<[!IW`3H63QL-[R.OUQK,N>NFAO\2X+P6%UKF]!8K*+F2953 MTSM"CNN''0X.$X1QV>Q%ZX#'`K2,,0EV4N4";GP!"5%W6Y;T58G5G(;-LJ#; M-OQ6)]"H_*&WYK;G$'%2MCF5T]9RUO4C5Y%'E@(P;.`DA)#LKM-Q>ZCT8(WE M+"#0O))=#!L678O2H_4[<7J#N6?^Q-EMLLCUZ4M?-Z,CU%GHJU87^CR[`=X< MA+TF&6:=3T`-::T)BG.9_KYG%'H?+;BW9,;N:RO?"J$2M[1!"`XU[P3S10K[ M^T_U!,F+GUY21_\M<$JJPQUJ"%5/IM3-?E]4'%*KTZ-`'"."B:YO$\3/F,ZZ M'U!!4C(`4$M4A`````````!Y-W0F* M:30$B5!!4B`R+C``1FEL941E7-T:6-K+FIP9U!! M4C(`4$M4?`4````````T)NT]Y9,^KHNF<03>T^3;$3^O-`#-_SL82>F*:30$ MB5!!4B`R+C``4F5C=E-L:6,*````?WUC!XBX`U=2!C3^\!,1?1/:\$]O^Z&D"K=J3+W3NWC)JA&&^ M*!<3@@Q5J97]74A3+LOS(5]B1]'2Z^5,I^BSWA>:D(W:!@R#G#@AQ`Z9,#5G MX(R7I];K8Q[`-573'[U"#?//@7W1^U>2J._X3SJX-Y\]5C&]1^"UH;0*@89N M9"?=>AT/0HJ3/+S-<=RFS`-\KU(>_,-JQ/+?*'VI\FN[';W58%9M-_<7=H_+ M5#14-]`FGKYG9M=N*J:!R>\ZR`IXH(OOIIE<38DWNN",N78CF;QPE\[$_N_U M!8%6*#T"BGSF6P!8ALW7I1W0"Z;E1"&2G4JC^1\A.F19ES2XCL9X2>SLL!U4 MI_#K;4_[C?0%__<`Y;IE)6I2>-C*X>"!&5]7)N^M31,&&`K/XF0O+#*?):Z+ MB21:Z.S`6NUGN&P=A9AQC]51%IDL:LIQ=;4S$R7.[94F**\@ M9N26!!L2H&"Q"2*BQ@SX"\J7<[O+%NUE+].)NJS;OVTN4Y07(6/%W6&LA]3K M>^376HKE+K#$97H+Q%O>&:X$F:L8Z,END0,\L+GN.5NI*?[M^K[6"G&MKP&U M?I+DQ(ZISPT,Z*06O8SWM,'E:JH8KYW[7]%N2H<;G"X]W<);[I25^PR[R)Y%_4`L3)-26W!UT[&SQ=(G.G6G>DP,I'.*'<>5!G2E(&A>ISK'!-K MS2I(;-FH[FU]N)!))'A:8G,8+:((C[(-HDO MKB+DE%T?K_G699NC<\@Y&^Z_#^8=7#F@&DOJZE)WE_^L0<018L]8<4,L M2'J/K>-0:".EH>$T((GQ+1;"KJQ[M/\?2.)I8D,B77[XIM&67'(QY[.CG7&_ M1X?M.N7$F4M<9IIRU1Q2'1U5ZC`HA&V8F^,O]D]2;"CH-[;=&N_$PT%``KS\ M!WP[^'R[HLT'?$5#G;!X<3;@#.JZ755&,R(7."^SJ<+X.:M/,Q.-7G:9+D7_ MXV>08/H/%L6RS'%GQJ9[D\.K&H"9?Q427$%[P4@:C8HM)PW.'!`PZS.=EOZNF%`6CYT-$6'.R_0>85>\]/SL_<\XJ]_-"=JPGN9-_Z>JZRZ'D8J#N&$T;-WKA M=3%C0$I6:`XT$TWCT'0+]UG+2="T+VA;Y<4FEO&FK4:_!\YZ(G!SS>^KY(!N MRR/;3TBJ@5!!4C(`4$M4?`$````````ZP!DA*_,2*32A8FZ]D-@W$3^O-`#- M_SL82>F*:30$B5!!4B`R+C``24930P````!!U7$"?;;R=CX(<&07":(;]4V= MU;,K.+,FVCQWH."!O'KF[*Q[-0*1`20M&["OW`MM/XU+R:T6R[A"T] M`ZIMNFX6K1Z,TMWHK;BP.WW0/2.EFR"SIN@UGY,*0Z3GH6&,0P<8)W)[%D*J M0KZUY@EU.O8Z3?&I]:HMSBO.PE+'3Y;D:%JB$H;3*,O;G3)N-R5-L;!T;/9Z MN$Z+J-_T9IY"FX*13!F&2Z8)-.D#TNVB%2ZH/O.$]6\[).FE.8>%^\A]^ME, MYZ/`O'23014?D%-<6IM#RTVY_KMG*IP2_@^=0Q%D/TJF'I'A]01YE^]]LJA2 MGBG4$VF)JM^JM$S=(5R&LEQU9C`YNQTF^^)7%=-C.S0?B#MA7O*Q+J`LD5W: MW@X7K8-3/V5;O+<'Z_A'_)!PDJ$Q.EHO'21!4$%2,@!02U1<`````````'AP MN@+(0+/R])\CRO$E=#01/Z\T`,W_.QA)Z8II-`2)4$%2(#(N,`!-86EN```` M`#@%`````````0```$'5<0)]MO)V/@AP9!<)HAM005(R`%!+5'P%```````` MY2L7(*PET6@49OA@*40!+Q$_KS0`S?\[&$GIBFDT!(E005(@,BXP`%)E8W93 M;&EC"P```.Z;&OD7FEL*)_71N\E=:QZ%X%V%':F;[\,=R1VNWU#8ICPA/$@* MX=ZPQ;"K=ZG[ZV3N`3NJCE>\P)QB]301TH"IE6(Y0NU6:?,L0@(PF=J MQ[$!9^UGSILQU@/"+4Z+6!UM_KQXM?1!SY4H_K7;3(J4OI7GZO!UZ$9O\07( M:<=7.]PH2;JJZ>;V-LE"QBE(3KKE[FN?PS;P$,1(0*W>?HJDLA.-MAL$DVFGT#@T9LN&#]`\1-P46Z1U M:/\5'VIA:`)SIW2)QLC$`-,495@-S6I>"R0>.&,WKYTF85]+4>:O!E.`;B$Z MAXGS3USK``>16;7W;(ZL:?LB!:KK^S)T%Z%X+9#W"HL(464]F+5?Y!7S0%#5 MIH=:S3)\):8X333=+P=/F^ZG,B"U?MMM!2&V"+]:SYQ-`G:V"Y M'"J'60Q*RZ`4"\PZCS^XB$@>W'(K"\0E58'3GD.MPWPS5!M3^F)4R#O83"R# MG@VVK6^GRXC$=<5/!\B.TM=E1">Y>`P?%=0"VUE.PR*>L8WT_W$QOF_><[N<;KU"SDNA(XS9848%Q3Y0I MK`&Q8\I!Y1N*[Q>%]V6'!NI!0,92/&F&W4WEXHKGZ9S&S\Q3?>>RS/X^-MA` M8G]D`U/@F[;FWBL6"M!&G6T^#$/)+;7%8XYD\%%2VE*E&>1](&!M.:'2_YSH2]: MR+B)H@B>I3G&1!.Y**,R]#,J,G]F8;O"5I^1?Y8#CAW\H;BD,(?&B4(S2?\S M/4V8M`?AH2@.%=O(0(`TD$854*S(QP#_%A/Z&\R[7H]J-I!\D/R MWUF=X)R9:RU*H?Q_*4JYJ'Q_O9=K><`34*G6I*#XXL&OJFGAQ2US=UX*%Q5` M0UO]N*T#U*IO9ENMC:E1.X\FHF48.4):S@V&1C`@700%@V+6GC62#J*=('`@ MIM2Z;#ZT*&$I`A>'LB@8&8,)(,:<::N`[-,>$^4]XPT;ZPBT5FX9TS M'C*I=SRQ@4[[[2IC.A,9DBPUR0K!Y>@$_^<5QO6QXSM39;;S\G_54,`REH]# M*FCCFEXAL$'H.4CU@XV"9M=)W;!CBJBW[P`RUXUVH!Y$9FE:&84:QZK3! M@>\2#!@YZPC0S:(0.Y>7"N/B_\C_#?WD1$Q!R0%X!-1OZ;RS`:WL.$\\6QIG MN@.N1Z*EZY_<-ZJ=T+)B0W/ZV@&&YWH6Z6VRSY\G-`\Y*,??"NME7,5HLW_< M:"=)$)YR.X$!&9HT[1`I!R$9XC=>K2V+%R7Q7H6N'V^Q.8TO7NE005(R`%!+ M5(0`````````>3=T'.E8)6&Y5R%EVD"COQ$_KS0`S?\[&$GIBFDT!(E005(@ M,BXP`$9I;&5$97-C0=5Q`GVV\G8^"'!D%PFB&S,Q-@IY=N=JG[5^M+XCY*/( MJD(]-/N@="YQ,3G_!#PTQYJ.W>*&_)"0^E19I:'YS#\@@C` MJ`H5,J]KQ;A*2-"U6\'`")'<%R9%B0?ZMIC$)DG.Z1)>TH*VGM;)_Z\^A!Z_ M.",0K-W[>H5L*[OTNBF`@A+VI0O/][R=?>WL`!?2X-.X;@$"G)MXP_6_4W3N MD^J[2J1;9GT+A[,@L^K@:#J::;,'_[6O-`--C[_TS(/IUR1"!O*-R/9P7@K^ M-PB2*<*WH/ M/>BI*NE4-HT[DY5+7F/Q!-E%0&3J04D7_H7 M>)?IVI#7NWMO8]#8'+Y3TL?M1E`ZCR)IQ-<7;CV",BX&:;43,@U]NDO5OF]I M:/F7+??\OC4OY]*2#VG9G1%7*[WL=1Y7Z60=HS=\R>[#)FHNSM%B3X%-N*=] M'X:`U,;^.!UBN,YW:6L"@[PMXT1OR\%1'XBO3+@=\_443/J$UJ&TJX2 MCAL9DY]%U';4&TBXX%K&0;K?_"8[U6;\=]E1I/G=:,JYB/*Z ML5Y^*$='%X!IQ\<'FU@`5NL!1C;(`V.\:="('9WHQ4Q[2M17%Y:9WU^#PSQ/ M"2\XAI/*HQ3#==!QL^$SC M!%86_O[3RJ[SC`M/R:)IMSAE)S;7"S_3$%LW]O$V6Q%O2`S''N8SEHUY?V7P MW+E=;:'[)$?8W#"=](F5N)!A`;[3(B$*PU(3YB5.LFI;'-,D140-J!"G(:1, M0._4`\2!"EOOG$'73N&S1G3X$AQT8';$&32C)WER6QD=]'^7"NQA$7U/E.@O M:M?N^_@0T(XK@(@'@4T_WHF),B#M+6QXMW9P)1KK]YL"XY.AC!RG@=(160VU M?&@X<*\1GPR?1M`DE9@9,^`83#.>WA0R2$,:#_$RS::M43KHI-WHA7[#JOV9 MI5M2A'RZ.AE`(/-<>.^-$!E)360AIOG#Z83R3K7'I^!00MNG6=RZ_FS,I6O/UY_$RR)Z'[G12I, M%?05K'"1Y[[B(B]?[IV+[6U$]^G88X0CP7T?2EH(5_QUI\_.F3'HM%\0/B!Y M`>F16@PR28-(7,7I/O%J#J4A[4[X=PSV"5Q+6B#\Q&$H#(<4<*\__!&QNJM0 M05(R`%!+5'P!````````.L`9(2OS$BDTH6)NO9#8-Q$_KS0`S?\[&$GIBFDT M!(E005(@,BXP`$E&4T,`````0=5Q`GVV\G8^"'!D%PFB&_5-G=6S*SBS)MH\ M=Z#@@;QZYNRL>S4"D0$D+1NPK]P+;3^-2\FM'.9&*'ELNX0M/0.J;;IN%JT> MC-+=Z*VXL#M]T#TCI9L@LZ;H-9^3"D.DYZ%AC$,'&"=R>Q9"JD*^M>8)=3KV M.DWQJ?6J+KA.BZC?]&:> M0IN"D4P9ADNF"33I`]+MHA4NJ#[SA/5O.R3II3F'A?O(??K93.>CP+QTDT$5 M'Y!37%J;0\M-N?Z[9RJ<$OX/G4,19#]*IAZ1X?4$>9?O?;*H4IXIU!-IB:K? MJK1,W2%F*:30$B5!!4B`R+C``36%I;@`````X!0`````` M``$```!!U7$"?;;R=CX(<&07":(;4$%2,@!02U1\!0```````,.=OI13Y*59 MAW$*+O\ZU\@1/Z\T`,W_.QA)Z8II-`2)4$%2(#(N,`!296-V4VQI8PT````K MWRK!J4"Y3^M1AREERMW#$G-E?^C[[]Q)D$`%8/J:W(]\]C2Q:X6-UN[@<@@4 M_I!-@Q162A?3I1S'*>J>7([B*^S7P:"/26(_;O?N7QT@ M]BN7#+YNH$A3\7S6_C0\QMX-<:F\"5`LC=;$QNPI>_:),'+G8B^N/=NM MDEZQY')YI'.5B^/>>QHS;SJ4,H95L9:DL"4.2_>'A3V;9APP"+R^56)J1H<[ M."Q<0P8&HK4SE'Z6R"D0+R+J]VT]8JN39A?HAW$<0)0&=4T!=1":>;Q6[92- MJ`)Q*G'80!XFC(V`.AWPH&+6"*6[DT3^,]GGW43JQ:[/464K%RQN_]63RR@Q M"SQQVW-&KU*_D&X(,5CSG7.T/QE9R`F#0_2&TTA[&[6MB,9(0E`?!*(YGEG9 MA8%2FS]V"20`6?-2FDT[.B+L]'P?Q@:*`W\`2@]2R4E\D:Q*=N>&FS2V?Z09 MJ$M"/*96)9FW4G@@(449VN<"YMD"Q3FV,':66Y1W8K7AI29,T76%T+X[HS]4 MR+N@(T`\;9P^EQ$OJAD7!`?V"C/^KN)'1ZC#!I$^U0>*5^!7+JB]JF9$Y=5> M`U]8M,\%IW^;/R$VF,YT:[L'EIE0+5^A^V85[F:]JM9C!@'<;B9@HY.='G6J MI:W,\RB>C[:@3H#2"V']0*ABS^Y_6Y3;W+E;7J[F!TF)6]CW)`2J!GD(MRHZK.$K@&,;;2F7?76 M0[N?]_SKH>`:ZP(_%M@Z"K7KM9Y#?FRT(E=1QR/[V'^X\F2%8TE":ZXZ;-W) M]=QS"[W?N+>LY/VW1$>;V%_%LS*-Q0:;)-&@0CMO+P(1^.)B,^%2]]%WP.A2ZQ$/FNRRK_=\ MJAIU5[&.W6/>,)LHE/ZUIE;5.$<['TN6%TGBC$;,V7"B1,(F5CDIQ[_*(I1O M!>!X6,Y[?O%PX@)#34A-JBQ.Z<`O"5P-SO%2\#Z8(S<[?5,?QC$X%L$J$NIQ MX29%?9W+TP*J!:R4/$ M:(()HY_`][DHS+/*!A9.0AZ;80;ZSG<.].K#F$^JT\0U93';-%N>+7V!V!*T M\%@?9L"3R@V`4*LRTB][$4T:P2DF;2`^SGC0R6!6G<^+ M\P<."5?G@WV0UXK-?T5],*:@S]2Z:)7#C-;2Z9\R:=;Z%6Y M;8LAF_M"4&\\PH&L,"2[OR.6E]_\MA)19V?),?19ANFQPZG#Z<[ELN$.ADPW M[<3;>#*A(0S%$.`N.=O,<%%%PUA/;2.*HY(ZM*^EG3:1O^>UZI_;81[S8G&P MMRD-3A<[ZT3K2HF-E7"W)(I#$)5"[)--3-16[UVTSM]#;/5*C]/5`1JO+M+'4$%2,@!02U2$```````` M`'DW=!SI6"5AN57;G:I^U?K2^(^2CR*I"/33[H'0N M<3$Y_P0\'(I+````````:F]Y6[21X_S7;-+(V2V=LR9@;TS!0YN;^!S=X8(%FK&)QIH^*S=OGY.H]?^ MEH]=UNU?];EF1O@-7-!+%R&F*AMAXFAP.K7V+?6&&*7#=LO$/SV5P,+6]51< M:ZM+']RRC`BOOL6T+%F"?GN)NQ'\RDB,"IJ&=LP(#.)Q;OBQX'JH: M?DX5$"%7*J82NT>T_;R=>;,G65ES$EYHFPTU&SE[;GW0:''&%\8!`J)PVK-4 M?[^,"U:("KO!XFB\DW%CJ!Z*_Q4&P3-B[)BQBJ=PD[_A=$2AR,LAN7@!<\QG M>(?'3,V%U].D0J8U35,QI+)&6,PX(E($I6_:["<&A[V4[.1K]6N:#^\_D=WF MU"\&&"=8T%GW.NZ&)`>NSFW[Y([9C*&U/UJ_,"'8@*/ MXBN^F>&O;%75IEZ;.W>[I%-X__WF_>AUY76C0M_!O1='E?/$B@O'H&OU;KSF M9=P=#`8XI7/0\]:N(?SR'\_0H2WU"I4L*D2#:]ZCJILX&>Z!BL\K?]2U+QM+3%J,#@B4<9F_QZO'7 M;0$)E22#ACU^4&Y.))3HL#G=TJIUS\$X*]\'HM/WL[$NBU\!!P8F03;]Z M*B&%ZN[+#`E3A#*?`OKG1P58L1D;Q8;GZ3AK$?(OD`Y#?;,7^)=L`%S_A1N1 M[,&G]_4=T(=2,/JX'4"ZDYO3^EX'\S!(HP#VGXN\SWJ6P3"'(QM\^TPONY'B M'U5^)4LO]4>TVJ"?[`23%_D>\4R,^2P3+W1B;,//4$%2,@!02U1\ M`0```````#K`&2$K\Q(I-*%B;KV0V#<1/Z\T`,W_.QA)Z8II-`2)4$%2(#(N M,`!)1E-#`````$'5<0)]MO)V/@AP9!<)HAOU39W5LRLXLR;:/'>@X(&\>N;L MK'LU`I$!)"T;L*_<"VT_C4O)K1SF1BAY;+N$+3T#JFVZ;A:M'HS2W>BMN+`[ M?=`](Z6;(+.FZ#6?DPI#I.>A88Q#!Q@GD>'U!'F7[WVRJ%*>*=03:8FJWZJT3-TA7(:R M7'5F,#F['2;[XE<5TV,[-!^(.V%>\K$NH"R17=K>#A>M@U,_95N\MP?K^$?\ MD'"2H3$Z6B\=)$%005(R`%!+5%P`````````>'"Z`LA`L_+TGR/*\25T-!$_ MKS0`S?\[&$GIBFDT!(E005(@,BXP`$UA:6X`````.`4````````!````0=5Q M`GVV\G8^"'!D%PFB&U!!4C(`4$M49`````````!F*:30$B5!!4B`R+C``0W)E871O<@!# begin 664 joystick.jpg M_]C_X``02D9)1@`!`0$`2`!(``#_VP!#``L("`H(!PL*"0H-#`L-$1P2$0\/ M$2(9&A0<*20K*B@D)R7J#A(6&AXB)BI*3E)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#Q,7& MQ\C)RM+3U-76U]C9VN'BX^3EYN?HZ>KQ\O/T]?;W^/GZ_\0`'P$``P$!`0$! M`0$!`0````````$"`P0%!@<("0H+_\0`M1$``@$"!`0#!`<%!`0``0)W``$" M`Q$$!2$Q!A)!40=A<1,B,H$(%$*1H;'!"2,S4O`58G+1"A8D-.$E\1<8&1HF M)R@I*C4V-S@Y.D-$149'2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@H.$ MA8:'B(F*DI.4E9:7F)F:HJ.DI::GJ*FJLK.TM;:WN+FZPL/$Q<;'R,G*TM/4 MU=;7V-G:XN/DY>;GZ.GJ\O/T]?;W^/GZ_]H`#`,!``(1`Q$`/P#UAVV+DG`' M>@9/4'\J4C)'3KWKR+0]*NM>BOKV^UK5XIC>RIMMKHHF`1VP??\`#%"BV[#; ML>N9]C^5)N'K7FP\,7T6#9^*]:A_ZZS>8/RR,U,FC>(E&%\:7I^MJA_F]5[* M?0.9'HF:0L/7\ZX$:9XC48/C"[P.I^R1?_%4G]F:S(F)/%FHL,]42-*/93%S M([_.1QG\J/S_`"KSP^';LG)\5:_GVNL?R%5G\&+-\LWB'7)@>QNAC^M'LIAS MH]+R`,G('N,5"][:Q@E[J%<=EH<-J=DI][A/\:EAU*RN/\`47EM+_USF5OZ MUP$?P_\`#<>?]`=L_P!Z9C4A\!>&G`_XEN,?W9G']:/9/N+F78]#5U8X5E/T M(IQR!D@_E7G8\":"G,-OA MX-%><2^"K*X7;+JFM2(>9_FM,7X?:&/O&^?UW7)Y_2E[*?=!S(](\U`<% MUR/<4X<].:\T/P[\.8)^RSY]?M#4^/P'H,?W(+E1W`NG&:/8S[H.9'HLDJ1` MF1U0>K,!4']HV6?MX"\-O_S"P/\`=FD'_LU/C^'GADX)TS/UGD_^*I^R?<.9=CN7U"SA_P!; M=VZ9_O2J/ZU$VN:2IPVJ60/O<)_C7+P>`O#48&-&A.>NYW;^;5;3P5X;0AAH MMH?9ER*APMU"YN'7M(&,ZK8C/'_'RG^-2+JVG/\`'I!_R`K'GTBQ6;:74I&[_:=C_S^6__`']7_&G?VA9Y_P"/ MJ#(_Z:K_`(U@CP3X89X^5FR MNI63N$6\MRQ.`!*I/\ZL!@PRI!'J.:YYO!/AI@0=#LN?2/%57^'GA?.1I"(3 MW2:1?Y-5*2?45F=63@9P?R-,>6.,?.ZKW^8X_G7+CP)H:*5B2^B!&,1WTH&/ M^^JI-\,?#3R;WM[J0G@[[IC5V?<#LH[JWE;;%/$[>B.":E/(KS'Q%X4T?PY_ M9%WI-F;>Y.J6\7F"9R=I+$CD^U>G'[Q^M%K!<=Z?6O/?#">787BGMJ-R/_'Z M]"[CZUP6AC$>IK_=U6['_D2M:?Q$RV-4>U+]:0'H*6MS,*7DTE.QBF`WZT>P MI<4E`!1QBCK1B@`'TIXZ4T"E!I#%HHH/`S0`F..*!2T4`%(>*4^M-)H`2ES2 M=J.?;\3C%*X#QTI5Y/'-9TVO:1:R>5/JUC'(/X3../KCI5^RFBN(?/MIXIHL MD>9&X93_`,"'%3S(9.D?A]?45Y]3$:V-8PZCIB(I82WW3 M\I],U/D!A@X&:JWQW6QQP0<@^E9S7LA3=SD9_EFN"MB>4WC2;1I6LG^BISR! M@^V.M2F=4!)(`'4UCPW+?9P,;2S'J>0"U/4\]*]&%2[1DT<=\00!9Z(,]=9MN?3[]=F>I^M<-\49OL_ANVN@,FUU M"&8CITW=Z[DGG\373>XK#C7`Z(?^0OS_`,Q>\_\`0Z[XG&.,\C^=/FV5 MY<#I<:C=2CZ&0C^E:P^(F6QK#M2TG04$UT(S'#MS2MVQ31TIV[!Z4#"EP*3. M>:7!H`0@48I<&C'&*``8HP**7M0)!2\8P::2>U`.1S0,6BBB@!"1ZU6OKQ+* M)&,3`M@;&7R MEP.YW$_0?6HF[(I#X=(\4WGSS7FEZ8IY$44#7++[,S$#/KBD?P=J.JW'EZ]J M:2Z=&/EM[%6@\\^LG)XQD8!I/^)7:^)/^7&]O)+O_KGJ,)+_`/?4D8S_`+($ M2_QJ>:\NHSZAHT!_M=9;Z26S>>T>%66QF-S#\IV;2H!+#8Y+';P1M;//=E'2 M6WA30+2,)!HM@H`QEH%8GZD@DU6NO!]@TPN=*9M'N^AELE55<>C)C:WUQD'F ML?4M9U2TN9+$:G%#!;SO&U_=S1VY8^5"ZH7,3)D^;)P$!(0'/#;JDEPU]?70 MU6&QD*02RF.XMF^SK/Y%EM=U*[@%,C?,PW*A.2`.`"]K>D-X..T3R7O+C)OI0SH<'RF:<'8C#9L9A(#U=<6]1TNS MC\66VG"V2:QU=9;BYM1G;%+'@B<8Y4MG:<8SU]:RJ*ZN-$T.O_OKY]4@73Y= M/=(;@>9YL1ZU:M+^WU&&4V;L9+.3+12QM')$".C(P!&1G' MK4C>&K!-,;3K>)H+<&1R724'(D#-D[LXZ^E9\OAVUFAN([BYNGNIYXY9; MMRK,Y3_5Y7&TJ,GY<8^M>745-WOH;QOT+\EQ)(FS)^H[\9_ES7.7FHBZUT:' M'?)8LH4SR%U69W;[L46>C$$9)!/.`*BO9+31(-(TM$NY(6GE>:"S`\^;`9OE M"!<#>0,C&%`'R2)(D)MGG7+([%E\MG`QZ8!P3D=:WXF" MEFZ/M[5))-Y7/7VJ&%O+C8L1YA/.*;# M^^?S&.$4\9[UPM=A6-".0E%R>:D$@W8SSCI54O@84?,3V[5)%%LRQ.6-=M*L M[V,9(YGXFK&_@'4V8#Q-]^/4;E6'H=U=L/B,Y;&[_#0!0>%H!KH1F`ZD=A1N!!Q1G(I1 MUH`4=*7)]:;3@>:3`4?6EHH[4#$/2@'*TM-PM)T.!3LT"@!`3FEJ,=J M7(H`5AV]:JSVERE[!J&G211WT4;0[9A^[GC)#;6QR,$9!`XR[:AP/_`"'R/UJO+KWB'3AYUSIMKJ,'&^/3F831#OA7_P!9 M^&#[5=##&*LP9R"*S<%8=S,M_B/X9G^5]0>WF'#130.KJ?0C&*N?\)5#)\]G MI>K7<`QF6.S90/H'VLW_``$&M)7DW?ZQ_P#OHU*OF*,J2X_VCS6$_=*6IDGQ M+)-\NGZ+JES*>`);CVDQU.]U#57@.I3*(1'#DBV@!)"*Q` M)R3DGH3CT%;?G*YVDX;^Z>IJG?(KJI8%6!X?TKBK5=-#6,;L65S#(8]V4(X' M>L/6;XV5KF*/S[B=U@MXL?5XI M%-K?QW5M;26$KNC7C%8'#IM(+#D'Z5YBG&55*1T\O*MR>TL[;1K>[U+4+DS7 M)3?=W[K\S+V"]PO&`!P<5J>%8KF33'U#45*7-]*URL+I2K,5N:]KVF:EX0UDZ=>PWA:W:W"V[AV\R4; M$&!SRQ_GZ5>MR\-JB2/AEC59#GC.!U'UK&O2A4LYH=.36QF6.HVFIQM<6-U' M<0@8'E-D^P(/()].HJW'(Z@[F48^^1T7T'UZUE7?A_0[W5&\DBSU@*7+V,GE MS(/[Q5TJ`83)P,C@XKS*N":7-#4Z M%46S.DBN,D;4/N35M7>7Y4X`Y+$=?I6;$Z"-9CMD#C(AT4:W<_S6O13T_$?SKSOP MZI6Z\2`C!_MJY./KMKNAN92V-P_=I*7^`?2D-=",P!SGVI4*,B*02P'LY^8#T M'_UZMR7H92K1RQGW4X_2L/6=1ATK3;J_9@?(0N%!Y9B<*/Q;%>-5DY223W.J MFDM64]0UH0W"Z?90&^U&8$I:GY1$!C+2$GY5&?Q]J=9^&]\T=WX@N$U&[!^2 M-LBUM_\`<0]3_M'ZU/X;TI].T[S+@A]0O2)[N7H7=N0O^ZH8`>Y:G_\`"0:: M]R;-+I&N?.%N8!D.20<_*0"0/49'O7;2HJGLM>X.7-N2Z'.EIXHU6SE<1"^C MANH8V&S>^TI)M'KE%R.O?I7%^,]-U#_A.KAK"26\>:!)2@5)#:YXVDO\L8/7 M/%=Q>V4=_"$E,BM&XECEC?:\ M7B*L,49./M.W(#R[B$48XQVKLC*ZL8RC9BZ7I]QIDVGVNLVCVU]>:E'41\V.IZ\8V[3Q2=?U:;2]!N[>U:)3BXF0O)*!G/E+D+QCJQ/ MTK:U*PMM3M9+.]@$D#G+1OD;<%7:&903V#']372VL M#[!YK8/]Q>E9-A9VFG6L=M:X\M.&)\81-8A!/IG/^%=N>#^-<%\12RZ'83L/EM]3@D)7J M!\PS^M=Z?O'ZU[.#=Z2.6>XX\BO/M#;=J/B+Y=O_`!-YAC.?X5YKT$]/Q%>? MZ=^Y\1^)K8`_)>I/T[21Y_4C]*[X;F4MC8QQ2$4XX[4A]ZZ$9B`4&BE-,`'2 MBC%%*X!1GM11BF`$48XI:!WH!"]Z7&:0=>:4_=XI#$'44ZF\=C0#[T`)[^]/ M!IAZ<4Y2,=:`'@\#BK$#J6QSD>U5AT%6X2!C;@GT%2]@+$<@R>*L%7`_UC?D M*HF696(C=%'H4)-/DDO$0LS6ZCU8D#\Z\FLW=JQT06@VZ;;_`*Q\G''[LG^5 M!_*J.H01W5I-#WK0\+7+;K4O,TZ MWC6[U%#B.ZF4Q1O$"1YDB]5QP-O4EA63XX35(8I9-24$7$`C1[6(B*41OY@2 M1'.Y2/F;()!&!ZFM77M5TZ]\+:AJ6FRQ2R7QBMKB9\YC&2`67JI4$X_/FN/C MG5&4C5[4;4*8(\S:"NUN)6.,C@UJEU1+[%NP\11VNG3VFL7VJFU,A3R860JT M9&=I+?.,CWJH8X+R\@L=.%Q>RVLZM:QI$VYX=V[&"!M*\CGKUIT4'EZ?)9VK MV,DE6K'6;[^T=+G6VU"]AT\GS3&N^7;@@AV`(QT`4]@ M#WJK+H3=L]"N(=4UJ1O.)M+ATC2+ M'4=)MUA;193*L2+D-$V%D!SR3@`Y.3P:UM#\06.O1G[*66:,9>*10KJ!QD8X M*Y...GH.E:DT$=S"]O,N8IE,&10T95@`5( MROZ$58A++]V$$X[R9KG/#-X(_#]O:W/EF:SDDLI'SD$QL`/ID$5TEL8ST@R2 M,C`_6O&E!PJ69KS+E.:^).]O!-V7B4+')"^,YS\^.U=^>I^IKB/B.H_X0'5- MRE>(<`COYJUVQZG\?YUZV`_@_,Y)O4>3Q^(K@RZKX^\1QC@F*T8^^%8?U%=V MQPIXS7GCQS2_$CQ&(GV%8+?G&>-HKT8NSN9LV]W'0B@-ZU3>"X8@?:F#9Y(4 M?RI2M[#R&CF0=0_#?AC_`#TK55$B>6Y;W>U&[VJJL]P;#- M&WHR$_RJN="L6,^U+FJPNB_^JMYI!ZA,?S(I3+<#DV,N/]F12:.9!8L9HJL; M^W08DB]>_'>K1T_ MQ);X\F_TV\QDGSK5X6)_WD8C/X4FO(I/N.W- M6#>^([2&XGO;'3;>.+^%3-)YONI0$]?]FE@U;7[F-67PWY.X9W75ZJ#\%";O MS&:FT^B+3B^I);^#M`@M$MCI-K(B`C?(F^1L]=S\$DGGV[5J:=I]KI5J+;3[ M>.UA!)VQ9'/J>>>W6LXWOB%?F;P_"X'40ZBN?_'D'\ZKWOBFYL$7[1X?U&#< M1NEGV)#'[M(&8`?@*GEJ/<=X=#-U)(]-^)NDR6_RMJ43B=%X4M@C?CU(`R/4 M`UV(SN`'WL@BO/?$EYJ$?B;P_J;Q:?;YC/DRM.9X0#U9BH4XQ)'C![]375W6 M@>([ZWV3ZY:VV2&9+6V9%<#G:7WA]ON#GK0X-@II%?PQ8H3X@A=`3_;$Q`QR M0RQGI6K+H<"#_5!?H2:70M`BTP;IK#2TG5ODGM+Z,^9GG7CFT-KX)U;82(W6+*]>1(OK7HK??-<;\1H6E\*7-M"/WEU+#!&.VX MR+_2NR;[WXU<4DK(3=V./;ZBN+LT9_'WB$KR$M[13[94G^E=HQP,FN2TF:-/ M'OBPS.,*EF!G_KFW%-B+HL'W*=O``JV+/(&?YU;-];;`2ZC/\)JAG3K3GTX-T_G3+;4H'`+NB9Z9.#5F2_MHP"9DY_&@!\5LJ M(`0#4WEK_=6J)UNR4D-+C'^R:M+=0L.)HS_P(4P*MU9(S%M@)JJEK\^#'@'C M(K0FOK>(@-*N3Z'-2H590P((/(Z=*`,_^SUDXQD=\TG]@6CC+Q[CT`W$#\LU MHM-%$/G=5STW'K5:35K6(X\P.?10:!7*9\/1+S`3$?5"0?YU!)I5]$01+!(! MW93FM:+4;>8D!P&`R5/6I&N8"O,B<^IJE*P'.B4@9EB>/]:?%/%(2%<%O[O0 MUKF>V8_ZR,'V.*S]2>V,>$*O(",;#D_G6D97=B6BA>?.T,98!';+9]NWX]:V M[9X8H58-A\.X^4H8P/!A\Q[U M,MRA/+5S)ENH4+/&&0'K'N)^M$>I*6'/7_/2L7%HI,ZP,",BE/2LB/5(8X1N M;D=J;_;UOLSAJDJQ?O)1'$3GFLC[=GJ>/I45QJ1NC\J@+CT.:S7D*DG(QGUH ML!T-G/\`.<]#BM5&&T8YKEK2<;ERV*V9;M88T"$9[G-`,T=V>A-)P>O/XUF0 MWI?>21M`XI\=^K?+CGF@1I9/O2!=I)`ZU6N;L1*0N,TRWOE8`.>3SFA,#/U? MPO:Z[3SN[GBFZ/X3TW0KM[BPA9&9-F))3( M$'HI;)`]>>>/2MDW47(WBH+B\6-,IM;/7GI3N@+@(&!02*Q_MCL2=P`]*J7. MIL@`$G.>U):L"MXY5)I/#D!.#+K-N?JJAC_,UUAZFO/-9N&NM=\+[G+?\3$$ M#Z"O0JH!6ZV=P$]LO'J(W!'YUZ&>E>>:+'Y/C7Q)L%HT;V89_GQ4T:A>`H`]A0.@I=V.M;Z$-B&-6^\BGZ MJ#2>5%VBC_[X%*9.O'ZTA;=@=.]%D(41_P"`#_"CD>]+ MD>M%D.XT6T"\B)#STQ1Y$. M!3#GUHW<8HL@N(\-O)]^&-S[J/\`"D$%N!@01@>F!3@03UI:=D%QCV\)Z0Q_ M]\BD2&.,Y6*-3ZJHJ4G%)G-%D(,9[4*HQR!^5&[`HW>U``0/;CIQTJM+:0RM MN:)&;^]C!_,58ZT=Z+(=RH=.B8\O,O\`NN/\*C&E(.L\I^A%:.WWI,9I60KL MIIIT(/SRSL/3S,?RIW]G6HZ0)GU[_GZU:Q[T8P,T[(+E)M+BW!HWEC([*_\` MC0UA,266[;)[.,U>'-%*R&F9YMKY1B.XC..2"I&?I3HI;R*10]NQQU8,,5>` MYHQR,]^]2X)CYV4Y;V[E;(MI"??'^-,\[4'X%N4'J6`J^<8ZDT"E[.(\?EY$4>AR?Y4&WN0,++$/JIYJ^:3;[T^2/8.9F=]EO&^7SXE&,9"'BIK>P2 M++2.9I",%G`_E5O::=M(IJ*#F9SVLQA/$?A78H'^G'@#'\-=_7!:ZQ3Q/X1. M.#>R+C/^R.?_`![]*[VL);E(<:\V\/7)NO&/C&3GY;R*/_OD2K_2O2&Z#'J/ MYUYQXVFGQJ][=P6P;E?.D"9]^>U2Q M2QW";X)(Y$SCR\^])@]#5$B8(Y.>:2G[? M0_G1B@!@`!X%.`X/%/QZ4H!H`BYP.M)S[U*0<#WI.`,M@?4TKH9$>^.M.7'? MK222Q(F=X)[!3DU&LDTA^2W;'JY`S]*7,@LR9BJJ2Q`QUR<4Q94;E0S?[HS4 MD5N9)`;D9`(VH.WUK7@2-`,!<>F*S=2Q5C'#!@?X3_M<&D=TC7+L$'J:W7MX M9AAT1A_NU4;3X8]6I7%83&.QI0G&:>3\QHSQ5B&%1VH(['G%.9L#)P` M.]1F1B?W<,L@/=0,?K2;2"PNS_9/Y4NSC.,#Z5$TLZ#+6K#_`($*?%!=W`#` MQ1#H/EW&ESI#L$C)&54G+MT7N?IW/X4W=SADD0'^)D(`_$U>MK$12B224R/C M'W=HS5B54?@J*AU1I&:&0\(RGZ$&H3>(K8^9^<$HA(%:)L;9WW>7S]>M2"%8 MU^153VQQ4^T&D<1X@G63Q;X0V'(^V/Q[X45Z*:X#Q8J)XR\&[>K7;Y(''\'^ M-=_4MW*%;I^(_G7`Z=QXV\88_P">UI_Z*>N];[IK@]-(?QGXOE_A,UL@/NL3 nget-0.27.1/test/testdata/0002/uuencode_multi3/0020000664000175000017500000002736707465043615021576 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@bar (Matthew Mueller) Newsgroups: test Subject: joystick.jpg (2/3) Date: Thu, 7 Mar 2002 11:20:59 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 190 Message-ID: M`_SJH[BEL;=**4_>/IFE7)SBMS,2E!`X)X/;UP"?Z50U'6['29HX;AY&N94+ MI!#$TDC@$C@#W'?%934>FSWMR\YC_`+9^T,X:X@L=Z*AQA0=B]EX& M6Z5S*3YC=Q]U'JNUVZ(Q^@I.QSQCCI7F6IVI/XU+5QIV,S[7:Q@/`HR>\49/\`2GQZ@A?F.X/OY+8%7\,>,G\Z M-I'_`.NI=-%+B,$CNV#685/0D_G2,A(R>3[TO9"YA9 M[JU#G$Z/]#FJ;*C8-LC*PYW#I^-6@A^GTI>1CV]351ARAS7%#9_`"G#I5+5[ MU=)TFZU"2.206Z`[$!RQ+!0,]ADU4T'7EUI;A);7[+<6VPNAE#`AAD$'CT(^ MM/GC<.5FO(I9<``D<@-T/UICS7+8!BA8`8X/%3`(BQ[\]*.O%&/44>SB%P^V70/RP)CU+_\`UJ&N[S:<+`3Z;SQ29'2E MV$]:.1!S'+:X[2^-?!YN8PH6YEQM8D$X3'ZXKT8\5YMX^F;3[?1-14E3::DA MR!GMD_RKTH_>_&L9*Q:U'$8&3T'6O//#W_(;\5(Q)D75&8_[I5MM>A-T_$5Y M]IJB'QUXOC!X,EK)P/5&)_G3CN2SHSU]J4<5#)/';P>?/+'#$/\`EI*X5?S/ M]*H?;[N[XTFQD=&Z7-X&AB^H!^=OP`'US6MR3'\=VVGPVCZA=W-[%<7%N;)( MK;;B8#+@,2#M&>N,9%97A"QT'4K/R+T/)J,1(E@N)V"TA^SY\R1Y3D@@?>\QN M5(&>01Z5-NI6IP#011>(-6A@C$4,>HR*J(N`,#L*Z[PC*EI)X@GN9DCB66`O M)+)@+B!2>>_^>:XB"X":KJ$>GJ+B+[?(8IY)"R%>Q+=7]O7UKH_"R>1J^J37 M.EW&JR6\L#">$)^Y;RA@B(L!GT(R:YT[29M+X47?$NEW_BX6LNFP,MG:EF#7 M;E%N]V!\J$=!@$%L=3P1R7>&["]\*VUR-3MYIH9I`PELV\Y+?`(VE!\P]\`B MM]/$VC22M'+?Q6T_\4=ZIMY!^#@9'N.*U;=X;@"2">.7CAHY`W'M@]*VN8ZF M;8ZA9:JN;&[CN2OWPCO&'U&_3=_WPA.?Q>CF"QIOM&,$YK)\1WR6ND7,4-ZMM?2Q_N! MN(D9N#A0N6R0",X[U5-Y;79)EUBZOUZ%-+M'$9/]W=$"?P+`]/6K=E(ULK)I M'AZXC)&2[LEN&/\`M$DN??()]>:=[CL><7-GJDVA3W]]!+;QA=[?:$N&WX=# MPQ9@#D8Y`Z<>U[3_``XNJWFJS33V$207(!DO+9F.&08&=PZ`''%=-XQ&JMX> MF^US6ULEQ+%`8K?=([;G'!=O9>PYYSVJ'PQX;TN[AU-[NRCNY8KP1":;)DP( MHB,,,$'))R*RY5S%MZ&/X2E?3M;FO+Q9;'3HHGA+)$WV-P&5PW##USZ>]5QI3QMNM=2U"`@8`,PE7'I^\4G]1]:SG\.7L M;R2VDULDDA)>2V#V;L?4[2Z,?N?FY_3-=L?O'ZUA)ZEH5^$/<^E>?:+!+JGB_Q;C4?$YL;-+@2:O*?.>=403 MU_6L];/5[D@W6IB!3UBL8`/_`!]\L?J`/PZ59L-$LK*;[1';@W(X^T3,99?< M[FY&?;'2G<.5E==7N]04C1M.D,;9Q=WI-O'TZA2/,8?0#/J.M+'H4=RZRZQ= M/J3!MPA9=ELI_P!F+H?JVXUI2N5SE^1ZFJWV@94>AZTN8OV;/,&79XBUG!P! MJDPP!CT_QKK_``+SJ7B`YQF6W''_`%SQ7&AB_B'5LD_-J4QY[?-@G]*[+P6P M2ZUUQQNF@_#]RI_F362^*Y;6B1V4D:3H8YD62/H5<;@?SS67)X9T63DZ7:*^ M<[XXA&V?7*X-3-?%3CFF?VCSWK3F)]FR(^'H%/\`HU[J=M[17KE?R8D"F/I& MH*I$'B"[4XX,UO!)^9V@FK']HCIG]:7[>,8+#\Z5Q^S94ALM>B7#:U93>[Z; M@_\`CLP%2>1K:_-_:>F_^"Z3_P"/U-]L#?Q#\Q1]J&/O#\Z=Q^S9'Y6N@8.J M:$TF3^.[-;,;`]6 M'YU.O)]:=R7&QF?\(SH[$&33X)B.`9U\TC\6R?SJS!I%A:MFVL;6`C_GE`B_ MR%70.*#P,]*=R;%5QD\D\=.:>N,PU5]V3!X]%C(X-ZS?E$ MW^-3^`\_V5J3'.6U2X.<]?N_Y_"H3]X36AT[(`*39TYZ^U.)S2J,@<9J[B2$ M:-!K,F\%^';A M]SZ/:*WK$AC_`/02*V"<=^:!)CJ?UI7#E9@_\(/HR#%O'-;^OER9_P#0LT'P M=;J,0ZC>QCT#+_A6X9E!Y/-*)P?0T7'RLX+Q3H9TL:&YOKJY2;6+:,I)(Y'\ M1Z%B.U>C'J?K7$?$:7_B7:(R\%-9MS^CUVQ^\?K2O<5AW7`]Q_.O.OAW)NTS M4[O!VW.IRR+_`+ORUZ&>G'Z=J\G\&:[IFE^%]M_J,$$GVF5O+=\R8R.2H!/Y M"DW8N"U/0OM![&@73<\FN<3Q1HTH!7443<,K]H5H5<>H+J*U8)5N8@\#K*G] MZ,AA^8J>8V218FG+M[]34>\$CCIS^E-,;DYV-^5`C?!BH%.#S3U8YQM)'TH%8L>8VXC/3N*M2)*2?O=*SO,/7-21R.,D*WY4"-=)B,9QGVJS',".M8?VA@<%@&Z MXQS5J%Y=N[!`/M1S="7%&D]VJ'!-,-UE:IL=YYYIHR.Q'XU1*BB5W)S[U'2$ M\\&D)R",]J"K'+>-"SZEH29PJM$6,&D7+*>)-2N6QZ#>1 M_2LGQ5,)/$6G6YZQVTDI^CR(O\EK0\*EFT)F8XWWERX^GF$?SS4IZDI:G2&Y M/N:!=,.^*I;V'>EW\H#\5Z2?O'ZUYQXPB^V/H%D>?/U6($'H0!S_Z%7HY^\?K3,)[CA]X9KQ'0 MSJ%O;7,-LMOM2[E4^;(XP0W/"BO;6[?4?SKR#2HP&U9`23'J=PI/_`A6=7X3 M&>PXG59`5DEL(U/=4>0_D2!^=5ET.(OYDTAW\'_18UMA^.S!/XD]_6M;RVQ[ M4H3-?J:TM,O-2LS>I9S6HB^VS?+- M"6.>,_,K`]JHZ,@^S6I]8$/YC/\`6K.DC+:EDGB_E`_\=/\`6M971U3DXQ5C M4DU35Y`,2V$?J5MF<_\`CS8JN9=49R6U>8*W41V\*#_T$U)M'K2?B:SYV<[K M3Z,A(>)8I%:'4;\KGF.>=#^OS#_`,=K M=(QT./I3AR*?,@]I+N9ADUR3K>3H<]'O_P#XW$I_(BHO[*N)6W330NQ^]YGG MR9_%I?Z"M?O0V>,4G('.7RQXNKWQ49+U($E2W@0"!F*; M2SGOS4_AW7KNU\/:?`FB3SQHI(F6YC4/\Q((!Y_.J\+$^*)\`'$=N.?H])H/ M_(OV)XYB&>/F6I/1KJ[+Y M_P"`HN/UJ4WNK7D8+:X$B<YDO)#_(BH7@EM9L:8E\LG4R)?LJ`^X8MG\C6G@FFLAX M[?2ESD<\^XRVU+Q'$I6:YTV=3_STB;"51?`KY5OY?;O\`,<]:]:KR/!'B;PTP M_P"?\#]!7KE=%-WB:IMZL&SM..N#7E>G*5U'Q$&'_,8N3R/4BO56Z5Y;8C.J M>(.3_P`A>?D\_P!VE6^`F>Q=`Z?*:79GMBG`8`IR@DX')["N,SL1%>HQ45P` MEC=,3]V"0D^GR&KJQ,V[Y3D#/;\:IZJ,:+J1SC%I*<_1#1'<:1SNBD&UML'_ M`)=XO_0!5O0QO34FZYOYOY)_]>JNG+Y4$4?]R)%S]%`JWH&0FHJ1@B_F/YA/ M\:WGU.BI\*-+;_LT&+(Z5)2G[M<]SEL0&+%'EU,/<4NTD<(31<.4@\LCH.M' MEXXJRJ,?^6;9';!I0A/.PFGS!RHJ^7PN:>L>!4VW(`('YTXJ,9]*+ARE<0@M MUZT\0XX`J7;@9H+$=J5PL1^7@:.]%PL'U&*1NE(7R<@4XC(% M%Q6&=^?2FKD.IQWJ4"E4`_A0GJ%C"MGV>)-1+-CRS$3GT$0_Q/YU:T5-F@6` M_P"G=3^8S_6J9C5M?U9^_P`JX^D2\U?TA`VAV![FVC_]!%;5'[MS:I\*+F1@ M4F[THV&@1!CSUK&YC8#)QT_2DRSE>96S[/ M&/AK)&TW$P^A\K_Z]>G5V4O@1M'85C@<5Y;IHW76LS+]V;5;EP1T(W`?TKU/ MN/J*\I\.-YNC)-D'SIII,_61O\*5;X`EL:9JAKAN1HEV+..:2=E4*L*DM]X9 M(`YSC/ZUH8Q2'M7)'?4S3L[GGUP&L'6<:9J-FJ,&-RT3H4.>"<\>^*T+C7M1 MFT>[5Y;.[BDMG1GC7:RY'4D=3CMCO77M&LD;I(JNCC!1QD-]:\[\2Z"NB2GR M58VLV?*?X%&#VX%YD$:[`Q)SQR:M(U MM14<@ M+(P1,[2V,`\>M+DCV,Y)1=[&0VMRS*,Z];0]_DM0N1TX+_0TJL+I\'6YIRQZ M)L7<\ME-)>2#;#:MMA$48^7@2$;CC9P.>"33?$-U#)?M M#%8O;W&HP)`QE1,*XD`6167/.`PSG^&GR>0XS@G\(DEM;1LBM->O-)_JHHYY M7D<^R@Y_'I5;4;F\TN7RY;76('"%SONL':.">=W2DA@\^$ZO/J26S7@8);OY M@!B#84?NV#?PGVJ&2*U00R^=8;%D$VCGTCN$;^1J21VVY!(7U'2N5.AV4A7S1+*HX"N_"C ML!CM3I(UT6+[78;HTBYFBW,P=.AZDX(SQC'4^U9NFNAG+"2BKHZ1P<\@YH0? M-TIY7:.N1U!]10A[UC:QQAMX/%/88/3BC=C/%(6(.#0(!2]>!U/%(#UI0-S` M`@9(`_&A;C.86Y/VS7IBOS1O+@#J<1[1^6/TK>T^+R=*LH_[MO'_`.@"N?LE M\V#7921B62;:(_^."M:GPFM39%H=.?UI<#/O3032@X. M<5D8@<#G%&X=Q322!S2YZ4[`+VIAZC%*#P:-W(I6`#WI!UI3U)H[9)P/>F!2 MF=D\2^&&5L?\3`C'U517JHZUY+W\->M'BNNE\)M'8;,[-%+I;7;P9VK+\JJQ[=3D#WK)U;Q/)? MZ3<0)91PPS87S&=GYR#U`VYX]:UC"2:9I&#OQN55SH_$=:=INIWNAWLUUI,6#<)]G>(GE7/W3CN0>GJ*ADG2.46]XR MS!1E9PA7C.._/4'FM[PK;SQ:L^J)I]WJ-O;J%CDB*_+(2,L-V"Y"\`BG8):H MZGQ?LDTV2WE+274=O<75O,#\\3P[1R7]C]KP( M(Y[@%M_S;(U4HF<>@)^@JFS*$&V=%X>M$AM4N0/WDP^1@,%8AP@]@<;OQK+\ M5W,=S/-:N5EGA@6&)#\S&1FW,X'7A>/KTJRR7NAT)QIJ[-J1DMXA) M.X1>Y8X&*SVN)=8,EGIEO+,KC:\A&T`'L<_=SSR?3C%,TUU<;)W-Q,X"J MS-N#%FR"/3C-=S/J$L[MI^BI$!%E))U`\F`GJ0.C-UZ=*+FLZP*9'#$)\V%4L3CV')J"XO[2R;%W=0P$C@2 M.`?RZU0?Q/IR';#-)M;>D,YT:R$J/$Z0I&RNN#PH`X_*J$GB">53]ETV4L>AFE4+^(&>*)L2S(G^^RC^M8$F@M= ME6O;F>Z/\0ED(4_11P*FA\.62'_CUA/_```&CV'=@J9=FUW2HAAM2MF_W7W' M_P`=%0OXBMBO^C6UY=-CI%`P'_?38'Z5=BL(H(=D<:J/1!M%26]N`X6-3(QZ M!>3FK5!=1J!D+K=])N\O1I@,9YG3_"G"[UR7K1?#WMLH(X\NV!(_,F MF/8ZM@YU:<#OY<2*?T%;I7Y M)N&?,S=,?_JKVKK7E1E23QMX6\I%3;/*#M&"T?_H`KT/Q$HD\-:LC9VM9S*&K M$YW%%,9]L,<#\L5E5^$SEL:VPGIDD]JY;Q=K"+:2:9;R;II&'FA<\(`3C/J3 MQBNJ!*\@9(YQ7(WVDVT+W7VQY;:;[3)/'>I$TB,C$'#A>5(QUQCGVK*E;F)A MOJ;&M^%K31/#5EJ4.IF7S##'*LFUX9-W7R\`8P,G'/`YSWXZ=F%F-D5U;07) M4;<_NG!;KCG'3VJ5;>58G$"07T&3@V;D=1C/E@Y!QQG;502JGE6ZRR1J)DS; MS)M8<^W4?49KI9UIZ61UUL,7#CC_`(#TK&E:1!J+"UN'C:Y<&6&Y8$8*]$'' M?JC<^QY&?<5U'@G1-/UC3)U MU.>:.>*F.U9E]"FE76KQ(^\6LTL:RR$;W`0,,G MN<\?A3+IJ+T9S=W]E@N)3-''-.9&=T+YCC)/W6?JY_+'/7-7+'4)+F,6TT<2 MPSE[?$0*E&*\=2<@@FN MQ+MT!SVS5:36I6;"2\9SMMESGZR.,?B`:SU.Q5HI:EK5YF@^W2;EW+`EJA&1 MAW.3^0S4?A*!'\2AFX6W20J>N"N(P<'T!)'N?PJB]IJ&H6^8;65DC;S51%<[ MF[EB?O'%16RW9NIDL8+V-Y"P"H"I(.-RL2..1G.:T6APU)\ST*,2^;Y625V1 MKRO'.21^AKJ-".J2-&$D"V$./E90%[\`#')YY]AG/%%MI&GZ*@?5[J%IEP?) MW=/;:/F;TZ47>M7]TZKI\8LK9?NRRJ"^/]E1P.G\JB5WH8N[T.H9"L9/W1UR MW3^E9MQX@TNT;$M[&S#@K&"[9^@_QKGSIANLRS&2X.?O3N3SZXZ5?MM+"[0B M[3C/'RC]*E4>XE2)/^$FDF?%KIS[<\-.^W(^@!-037FL7:*#/'`C<8A3:WYL M6(_"M%+)J,6Z'GIQ@5JO:V>AB/[:!=7Q&5C!/EI[FLR[U*>\F MW3.-HZ(B`*!Z"@!K8"^W2K"WUS'"(HY!$N.L:*K'_@6,U2.<5(.E`#-N\LSD MNQ[L?Y5!)IVJW(;[1J,:CTBBS_Z$W]*CA\020*?[ M6B.1P;F!=R_\"7J/PS6S!X9KB0_.```$]!_C7L5>6I((_&7AAB>?M$J]/5,?SKU*M:;;CJ4FWN4M<4O MH.I*O)-K*!_WP:\F\$\>&HO^NK_TKV66-98GC<960%2/8\5X]X0B,&@B!_O1 M3RH1[@U-7X!2V-STX!^M4]5BNI].FM[6&.X>=3&RRMM4*>_UXJWWIP"G.<&N M6+L[F:W.#DT_4;6#9>:7'<[!A9AA6`'N!^M4I;Z1K?[,\ MDXK,2WAFNM099=364W;X:Q"F,#`Y*Y!)YK:CT.\BDF5?N2W&FN0>V MTC/6FR1VUO:M#=:W<+!M)6!;%X_,)'`P<#D8Y.>G>ND;PS9JFV&6\MSZQ7+? MR-,A\(ZYN)/[TLA/YTO:1#VBZ'G\;O'&K3C*,H5P6&<9.*N6>IW.ER M.B2#RK@8D20;H9E/]Y?7WKT--#TU%8"QA*GJ6&?YUGW?A"QGG,EK+)9C'[R. M,*57W`/W?K355,E2.4T?19-8O&BBD18XE!EF'*G)^7`)Y.,_3%=Y8:-:V05( M(/-8<&23!+?TQ[5FQ:II>C6[6&CQ27K1@D^2P*,QQR\IX_[YK+O+B_U2,I?7 M),1_Y=K==B?0MC+5+YI:H=FS>OO$EC`YAA,MY.HYCMR"%/;A7C%8EQH:Q,7\A5<-D2Q91OKD'DUT2@J3GG-1WBL8OE#?@*3"QA: M>]P/%OAM)KJ6XC^UY438+*>GWL9->U5XW;)GQEX:[M]J/'?@5[)0E8EC^G,@MY#",RA#L'J<<5X;X5UW3K'0XK>[O$@ MF5Y,JRG*Y(P>![5G45XD/8VHM=M93*-DH\E'DD^Z=J+_`!=><^G6K<=_;20M M*LFU51'8,.1O;:HQZDY'X5@K>>'%"J-3A7;;_9VVH<2+UY)3KDGD'FK$4OA^ M5K?R]9`%KQ%NN=A3.T]3@GE?>L%%$6-9-3M'E6)9&+DE<"-LC!8'/'&"II;? M4;2\G:&WG621%5V4`C`(!!Y'/45F8T,7L-S#J=I')",'_2(VW`L6/+,.26;G MD\U)IXT?39#,FJ63;HDA&ZXC^4*`".#[+^52XH+&T0TLF1#%&N9)#QT'8?4H[BZEQNFD/(`[+@<# MGIQ4ZZOI28+W\;,.N`Q_+Y:Z84TM3:,4B:*W*_*B*@_N+T%:%O8[D^88)S5. M#Q#H:'+7A7CJT3_X5:_X2O1<8%^GU*,/_9:TLBC5V+&<@=:"PV$`&L=_%6CE ML"_0C_KFP_I0OB72'4_Z?&/J"/Z4[@:@?D#%+M^;K^59W]OZ4%R;^WQU^_S3 M1XCTHD_\3"`?7/\`A2N!I$84#KS3U`5Q[UF#7]**DC4;8'/-=TJ0'_`(F%O@^KD5-_:^F$\:A:?]_U_P`:+@:$ M*/<3I!"A>60X51W]:[JPM(=&TO#8S&I>5NY/4\^F>E`HNXSL7TZYSU_.I/$OBO2);!+>TU6PE\U@7V7*<*!TZTR:C>-<2 M'AON)V5:K=1CUXJHVL6!D'^FVG3_`)^$/_LU(-6T_P#Y_P"TSGIYZ?\`Q5%Q MEX]!0HRW.:J_VK8_\_MI_P!_U_QI#J^G`\W]H#_UW7_XJB[`NXSQ3\$U2.KZ M?Y4QO$FC#'_$RMC^)_PI7`T\`\T,N\8-9B^)='F21_2IE MUS22.-3M<^\R_P#UJ+@5YXQ;^*_##K]XWQ3/L0/\:]8KR&?4;6]\6>%XK2YA MN-M[O;R7#$?=ZX^E>O\`>F2QQ!(Z?G5633+.=R\MG;NY_B>)2?Y5;-%,@I?V M188Q]AM<>GDK_A37T/3).)-,LG'^U`AQ^E7Z6G>7<#&;PIH+.7;1-.+>]JG^ M%5Y_`_ANX^_H=D._[N/9_P"@XKH**'*7<#G!X!\,JN!HMKCW4G^M3#P7X<4Y M&AV&?>$&MRBDI-@8O_"'^'A_S`M-_P#`=?\`"IH_#>BQ8\O1]/7'I;)Q^E:E M%.\NX%`:'I8Z:;9CZ0)_\35F"UAM5VV\,4(/41J%_D*GHHNWN`T[CUP?\_2F MF)"<[$/N0/\`"I**3=@*WV*#&!;Q?]\+_A3'TNSE(,EG;N0,`M$IX_[YJY11 MS,"A_8VG`Y&GVF?7R4_^)I3H^GMUL+4X]84_^)J[VH%.\NX%!M"TIOO:79'Z MVZ'^E(-!TE2"FEV*D=Q;H/Z5H]J2B\NX%`Z+IK'+:;9D_P#7!/\`XFH'\+:% M*'"?^0%8?]^A2_P#"%^'/^@%8?]^16Z*.U%WW`P#X(\-G M_F!V/_?H4'P/X;)S_8ED#_URX_*M^EHO+N(YP^`O#1&#HMICV0C^M$?@+PS$ M05T6UR!P&4M_,\UT=)1>7<9C_P#")Z!L"?V)IVWT^S)_A2?\(GH!X.AZ:1[V MR?X5LT4G?3[.N*/^$1\/G_F`Z9_X#)_A6U11S2?4#,M AO#VDV-PEQ9Z79V\T>0CPPJI7(P>0/2M&EH/2D[]1H__9 ` end nget-0.27.1/test/testdata/0002/yenc_multi3/0002755000175000017500000000000010162001761020442 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0002/yenc_multi3/0010000644000175000017500000001547607723607065020722 0ustar donutdonut00000000000000From: donut@charon Date: Fri, 29 Aug 2003 08:20:25 GMT Newsgroups: test Subject: [yenc_multi3] "joystick.jpg" 19338 yEnc bytes (1/3) Lines: 55 Message-ID: <1.1062145225.49@dumbnntpd> =ybegin part=1 total=3 line=128 size=19338 name=joystick.jpg =ypart begin=1 end=6500 ))=J*:tpsp*+++*r*r**)*m*52242154347657;F<;99;LCD>FSNUTRNQQW\jaWZgZQQbvcgmorsrU`yxp~jqro)*m+677;9;K<\«»Ë 2MlÛë?|ûN]Œœ¬34@ABCDOPQRST^_`abcdmnopqrst}~€‚ƒ„Ž‘’“”žŸ ¡¢£¤­®¯°±²³´¼½¾¿ÀÁÂÃÄÌÍÎÏÐÑÒÓÔÜÝÞßàáâãäìíîïðñòóôüýþÿ=@ =M  !"#$)î*I+*-+++++++++******+,-./012345)î*ß;*,+,..-.1/..*+,¡*+,-;./K[0l»ËÛë3M]|?Œœû4@N^ OABCDPQRST_`abcdmn opqrst}~€‚ƒ„Ž‘’“”žŸ ¡¢£¤¬­®¯°±²³´¼½¾¿ÀÁÂÃÄÌÍÎÏÐÑÒÓÔÜÝÞßàáâãäìíîïðñòóôüýþÿ=@ =M !"#$)*6-+*,;-;*i*±—µ¼š1¤0y z©T|\qxçòÞgTˆ´$ %„ÿ ÂôÅ—Ø´P+GÚ§)*6zÌÚÛà i¿P ˆ–f[§@7É´Ò©ÖŠ&Ü]}P· OB‰DˆÉ×ÔIˆô§-ÃH³ÄlíØ.“ÈM{­=M5æ8Ñ»©~ÉÄö³³fƒÒÚù~r ü¹[MéøqC&Ò&)*Tí Üœ¦ÙIò‘Œ÷÷ GœŠ¥E˹qÜÂÍü*óòH=M?5ð3¥ÒGL¹ˆ”hG›hËš©×ê(¬Ç)*4íÃù9'ái yõäI\g*¤„F`ÑŽÑ iðϱ| Üâ)*{£—Y'Ã…$+Ií)*7ñÉ1–)*¤_KA°Æ9"À=MIÃñÍh ‡¹m€b€}LÆœ0ri¿£P¬Æí™3¸ë'wR—Ì6mÔ•z¹rr(¾¥S¡mqË=Jûˆ›Y¬ÖØA–äÐßLHš!Ã(•v‰± B%ð#'¡†È©tˆô§úMüfþ1/M}±gcÙ^i8&c¬¨õh§¨úþ"&1Êñ!Jã{5ÑCÍùä8ޤV¼ÎjÃGz¤Ý+z©’‘I•áùÑÆé=M†d"QíôÅx…=@ƒ©ÿa&L„0['¹•)*¦ÉÑφòü 3Aœw=}YÒšqÑCÍ-Pn-¯š—=Jé8rœn*)*Üøi»Ð©ì7 ø$nm(ó)*ï{Éšq¤XÊo)*§¹Ï%~.=Jw@© ?=JY7é&ìê)* “1(÷y¹ °x3ý]Èy(TÉܧíàeÁþV )*…¡˜Ã (Ôi×n¼Ñ7Ôƒ-šÉ=M†æH,þŠp®Ø (—€ýëˆElB’à±ÁLËìl Þ«¶àMf©ñô©·räàÆ)*œ(ÿéÇyÖy"næd+i¤©'#>©ìC 1&ªÖ£µ?Å“ŸSEé i#™)*©&“  @£)*¹Ò\iÔ)*·Š¹."‹ÁMnÝëÉÓM‰°ûšäG³InB(Íqâ#ƒÜ俽âoæáVx*<ÓiøÖ06\Î;cØ£æ=} Ð.G8õÉr‰ ¯»ÎL=}P»©½SQþ€‘€x0š©Mv£¶¦Õ b(Ÿõ¹ ,’’ÏŒu«Bî¡ü«¹%ÓaíI7fÅl¢eÂÿ!-ܸ€>e¤M¬”}òÙ[A¯^©8©Ž‡`À£¬‘Q“Vr%ÑIæ¨Þ„ë›É„ 6QÁ‹¢ÑàÍœi$X=M†@°[HÐéÿ˜ñ(nד&nõ ~¥|'“+S•ZÏü}Û´ŠaqÚÏïO*>›´dû´*1üÈd}jÏ0ºïÌ´9-^*Â=M´/W>*|HSy×^Ä*t†ü ÍÉ™î=M>Ø-ñt÷‘wÙ“@Ü£}=@[òi®øb$=MωÜÄU²¦%“ ÄV»p ¾)*ê±?fò ŽIœbÕ2Å£fzÛ:ª\üÏõ¬1hÈÆÎ@D÷«¯'T‚½¤GTJ@Zþñ¬õx°Š½BÝ¿»¡Ë?þî•‚íÒ²´‚u§ýÉvþ#+°80”×–›ë1J$€ˆò}¡cC(ƒØ4È}¢ü—D€Ü©ÌÑf«­¸ßS ÇzÞ|¯µ/ù×QÁlFJHþfÙp?Xû½qG.+‘Ì6=@—ã%ÈцaïCèù å• Ê\—Ÿ2MÑwãQÉîwU8_ê±(l&)*öˆ)*mØ"ƶiÇšHHh—¿ê›Òth°liÏ•9²Ã–•8þÞÇ/.l]FetÛwGSÚ¤zZÏêÎø£ÏëÊ.J{´†D[ðR*BÍ,´ˆþ3/YBëм¥z8q^6„ R̪:»ÙÙ<ôNFÝuU#šë4sƬl¶0+O¹jT ”°=@ä=@±™57=@{†ˆv5Š–Á-ãyú§”P´m üf}£÷£Ï´£;o-†Ü%][-hâΩ1”d×ñÁÙ”“XÇB#—ÊùÖÆÈ[»ª“i • y #›çæ¼(ãZ¼)*!þ»¶)*Ü.u&”£ÙXÍhËÍj©ß=@…OÝ£H?ÛÂíÇÅtªu7¸uGæ;ßÝù {ü…¢}jÞ¶NDW¬ª[À«‚ÉÓJ½ØæIŠý5ÇSÅqåÜ›ó·×ðkÛW‘~Þã¼î”›m/æE ‰÷Gãl¯övÃh–Æ..®1f`¼†_úÿ‹ÛºÎ<ôâà™ÝÖ(oÀŸUâ/\aöíœËcJ8*Y•¤m¢oæ=@L=@ÃYWúò°ƒ&ï»ÜZÖª“b$,§Uxîl2ÞïÜáu%×uš®o\²ÂÔ³½»¶*ø£Öc |RÖÌÝæ´b=}ó¥õ¶ÅmdFISÄš M7ÅC®ªŸïçquݹïÀšàsÖŸŸÀ þ‘–|ñ¬QBu‘“ð]=@ÜÒØØ^w8é%ÿJ‡h‡güE«£Ûõæl:\…'Æ‘»€×YB`˜ðuc\ûuEqNj¸¶¶+C Cñ×rDÚw[Þ¢Ä5QÆCFÁskòº]Žød$€¦èGßÄE²X˜È£=MÀ…áTöiÿ›ÞÒó#›¹×£Ÿ?a¥™EYó›N³ÝQeÉ÷ÁIJäp±G‚ܯ]ò‡€‘ %ÛoȶkCN=}ø*ÒÙŽÞûJü^ÞuãK “£ÊÝ-ùÅ+Å2A-£-MBz1u?ϯý휓]럡Uç÷ƒ:Ca#«v¹¬1ˆÍ½«y7®¶ç#eÄtÍtó@ËäD¨åΆóLrºÅ‘Çœòƒ¦àš[ªšxq„ ³¬À˜Æ¨Ik†ÀÏÎרÓ΀á@Ì #XŽ EŒ ‡ÊF³B~.=J¼¡ ‡m`=M¶Øñ†T?=}¹|åÌéVkIahÿN½£† Ò‹™X`VqÂybÐí%B >Èì‹‚ú¸l{œ£Ó.­ ]ød|"B{=}ßs>…\î· üÖCMÃ"ÄÛ骟`ŠaS® Ù÷{&µ¨ß‘f¬Z£Bg•¬"Ñš=}ë}ðæÃØLµ¹Ó™‡*b-*š/¥b“}wÃ_Ò(=MˆŸ 6¹9L=}À¸ ŸQ ö'•ûå´¹47ħw!=Mþ˜±Ë‡Ú"¶Ûå&^+k ’0ä;Â8Π>˜.F{Æ´{=@ª>ž ÏóÐý«½+q=@À´ez[9t+ôüýšjK¤üžb>úR++cÏÒñ”†´*€Gç”Ö ÁS¥0ËÑs>¡ûpú¨¢ó7ßÛòëC.8\€%|¬cÎÿñ›±‡]Ûžu{K±-)*Ki„ÙXç Gb£d—ØÍ1E=Mýîû8 ")*ƒ"Š%úíBÕZ‘J´÷ë‚¡]W(M"©¿1ášûw-ÕÓMBÕÉ¿mQù‘Ïš6‚j$1÷)*+0Þ¿(Û)*Í|ÙÂÍTu¹ ¹_®'üÀÐsV½¦ä¨µÔ†ô¢,…˜ª%ÞÂê$-{ ½Gx!zÿˆ-Ó vÌ;FcL*s2ÖjQNÈ®=Mú€ ÆØ ½°(”ÇUÔÀ/‚HIüâÕým‚ðƒ†íK¹ z¸1¤í=@™·¿ØŒ¹ùâÇ=@5¢œr£FGÊ)*ݶÛgª_›cJ#çå)*«!Ö§ˆS> ñŸ——O®Ø¶€18ÅrVc1ˆ ŒÆSGfæÕœ¥ue—D|þXvOa ä&öç¬!5ð*FF€Ñ¯Œã½v§m{|ÁaüßôìÂMi›gÚâùãØ¡í{©ìf!¤¾Õ‹ÐøÌB~Ö\r;s[Cñh߀„žŒ…%âWíyLÊiÇ¥šx[ãùc‡Â¨^à ÄwPEÕ‚€pý@ø\ð­V=}þ¿.Ë÷йDN5ŸŸÔƒr-ñf=@®ïßäœÎ¶€çÙ“ÄÁ®_½Ñˆí¢„×ìâ OE:ŠõI×õ픳M À_ƒ8¢ø1{Ö•ü¯ucËý½…CÀd·ÐÑE†‚q›2BH}Ž% ,9JÉxÌ×ñMÒeÃph#GAú§¤=@ ±e{æ¼VªÏõóö­%ïMéŸÔü”A8ÿñ–a—¹}áw´ÃT+®óêò=J æôâPÁ^_d?oÝdrØ\pþhÿß¡Áx*ÛG¨¿Å=}Ê·eŽ8aLîœÖe:¥'”ö WOë#ÂÌ8 Wa“ƒ®=M§x©ñ›Nº’`Â.†•:0¤¹ÅiøåÀ=JÉ×›HV—‘ì‹2êþñMUáÙ¥3&Nœu›sMIøæí© Kûpá&=@ç>&qÙe¿äJM1%”=MàåËã¾àa9ÎÏ(+Î_ú¶ê FÁP«¶¥ûÐ,´eúgÒÊ1,“¥}S¥|+}56Ï6`ʲ÷-´’fýÝj6,Á˜7Y>Þ*ùð¾H¨Þ8é·e-üªF>ŸÕ;GÊ+«€ÌEâÓŠˆ®˜fþ÷â-á* ÔÛ½È=MF›tü†ðænÜ8%…1ÙhÞ`¬LÈ{ô ‡ëñ!»$~¿ ¶²Î<ê¥c#ªI'¤áOTûõC!}¹üÚÇpGUwäé1òl kÂÆR&…?=M½¾¼yÔÄu€}þ_Ë7ì zEpŠt„ɾn0\ü<¨C&§Ó=@¨E ^¡¨JâwpI¼`òßá)*›9}(û$þ( EüÉxýæõ¬IzçL¥ã¤A Y%ÔB+„É)*30Ä!P÷X»Ø¦ ˜ŠC8s1iS*ºgpqç üÌÓß8†¼ÏÑ´_…c†nYͰB–%tsÞ¤AMÙ¨¿ï"ùwþi dâ•3Oæ£Êst/s7Ø¢u&Û­f›¥G& KO\Up ‚· 朩£yó$×›U™›‘ 5õ…åú™ÎãaZˆˆLÖ[pxhýáJfå²oB=MGÕÜ\äÛ¶ÍXÁÑ“½“ ä÷͉ˆ”{ó©^´{ôpÏ]¬£I`dÈæ˜ýïQ‰ÿÐüE奀³xXPlt0Xl¸Ö yüàßU5—x=@ue.ºcõp#E›øs¹„ ßi>’ÖzÀ»‰U³ªqC·°=@4iµá^¾ÙèâœÇoɯ—m‘{þ£ŽŽi“[#¸£õ–-hêGU“=MDSwZ+ü´[oUª{Èþ{ ´Š.{¸S’G.Y¤†ºŸ¾'S6kþ}Óæ ^-j3y0¤›x|[=@ªH9-´Û-Ó–»±k€ J˜3?YŠVqJó Ö?ši=@aT³ÀŒMž{z½y¼uîlö=@g‚ºid•a Öžk’`à)*֦ƛ%Ü© ¿›(_¦"ŒÃmN|ì,äÇÌkÈÊzÛTûØg¢IôÒ:qŸ“^aNs?ì^x»òöjMCðd¹ˆÏ}È\á~žoÏEAr|†6;ô¶«ðijcÔdﯸËKþLêÏïø¹+F±2$¥¤úßÌÇjÚþ^ú;øbÄ X tgp09Ð1×€=@Ï™ÐkÎWò–Ïæ äž Äï Ô—v¯fƒ4ÞŽ‘“W¶¹¤Ò¬5Gb†ˆõ•dßÖ“=}˜¢¡˜ð2Etc=@Ç>HˆÉOÇÕóFÖÖ„’« ê ¡-ñH ¿”ñƒè(ûü…—l GfÉ^ðå¬2 *¶ž+yŠ9¤ÕX®ÝúØKÿ_ÓEøÎ@KÍ«ír\¨€º¦Û¸ÉT¼¤ƒˆPü ü^µGqsá‚…o¾ôÛL^w¯ºFx*ccfD=@ú&kÙp¨ôƒ¶ »lä«ðpbU½¸d¤8¿ Ó^;ì XŒÃvœXdÓ.;‚‰ž ^ulä\dUêƒ »mpª/rô(®²uY®=}¸ãù62&i™•ÃÖ¼ôqøk[Ú-ºožÀð]ü6¼\Zi„Ï14Àæõ¾èN™.Á³lñNY¶ihe¨¤ÉÓØM d¹"jŸ wô²š2× ñÓ&©Ç¤9=J&øsçq½ñ U­XÕ=M;ðbPUph"€Iþ ñ4¢÷£=Mñ^é©T|áÚDcºŸ9í¨B)*gU{L£˜…p”ÔÝF ðyìoÑ5φ£Ú÷E¤\=}&ÔãúÖ‚ùßX”ÚäY(Ô“1Òv©\Svá-½Xi»sÍÃ/µCÌÕE%žB»öw'09Ë™ËSåX~2··e´ïÖ¹Ñ=MzOX ±K¹jivÓêQ oê]td}reÚobžÐ,+òÏĆ 4zãHþ*íü¯ùf}¸:<¤Y†þ;ñhËJs´8«ä]%ßm¿°³ó\rBy>Ú#á#@·®«ý²fg–ZýpN¡¼•ˆ2¯`î´µÍ?½Ò´5ÌîÓë6'³cÓ ü=J³í®N¸ï³? ´ó¾^Xd/-}vr\ïk&d ýõŠ ËĀΠ ø]b>ÂFq´ˆî?Ï¯ì„ JÄ >@¸_**b(H"hZµ‚þžBcNãàÆéÃŒèžP öÐýµxYÓOé­Þ2W<`ÜL,aòÅ–& =ybegin part=2 total=3 line=128 size=19338 name=joystick.jpg =ypart begin=6501 end=13000 %­ÈÞb`4“?&[Œ®"¬Ajy îî6œmV‘Ï”õËê­'z‰ËPÁlúLý0Ö^ÞÇ…ÈüÕÆOÅQi³×j¤ÿ䛥Íh£¸—7Ù¬Ÿ—®²Œôrèß×!÷›é;Ë“¦S—2'þÚëBâòéüåP% ·†|tòw ¸gèÌâå^‘!²t<ûyà~ɇÍF6ÄÞÃÍyH"Úö=M4ÀŠ‘(ãá>µÌë!Sê,×µf«É€÷àêuÒùÄËÕêN:Vq†|Ú†Äe†[1ÑxÞý­ž(žõ—t1*åÌ‘Ðx7ƒ¼(Z3Ãc&’+…TJ.-}£ •'ÿÔQ…Ü|mu¶©Ü”ülí³ÍiKv4á€rö…ŠPÔÏÙù­H+=MLÞPèᲪüØyË÷t¯ƒm,2f¸ÇR-i%gŽ=MCGs'«’=MYH=Mú7î9õ_Ìýo:#gaHß„w„=@M¹Zcz’?ô‘íûYZ=};lk(Ÿ. Än;V<+¾ßÌþ—N1+ªó}=@ΕÂ4L”¾Ö1dOJ‚Èi=@É>rr/éåú=@ãȹ$òë bÖ's¶¢lÙJME8y„p O̯øúð‚. õ‘á=M=@àÈBË€7±ñbÖ³ <îËEJGk>¸=M R-Én ú=}ÛéG=J‹H\ËfßP…ÒzÝðC+H ¨ÞqÓS‹ù‰üÛ›’ÎøÚZML¾Ö²r®˜˜q”™ èö ÔtÛ¨{FnÄò% ¤Èh¿?ðΘ¹ôÊXg8•_Tsòð§’ÚG7Æ)*cùm´ÿpEpcØ „ü›ãœר=@BúKCj]q ¤=}sëù=MƒºÁsEj ÉG$áõ¸£ÊpÀyçJ‡Îºdÿ•ÅÛ<ºâ÷\#‚*½ø’v6'‰ì äê—|…³º°¸þuÜ^¦¡õ°Q½ø´˜¹ gal奵2ƒC½N¾ò:¤S–ºg £¹ta{œa´¬ vÐ=@ùˆ¤}ä,=JJŠzrÖ©àe<¡*gTÏøÐò*<ÈþÀÖ4c~Äy8jx6ä÷ã$Ô°iö‚¤Ä÷ Øß 5œ [.9ÊÙlÔ+…Ñ_ä‘Á=M™Aà¡+gÜMšqˆ°¤È’Û#h_œ‘  ˜Š–=MI£GÛ'T=MâÃå ¢Å/Íp ‹ÉïwD¯=JR-zd4‡…mŒBÿèS$Ò^È~‡Ì¹(">Ðxæ¨Þ¯áŠžoº±S2bê$6}fµ©#;)*ª9Í»u»oº^…j沺ý>£:L_0¾ÆÈRóï@j0R) *´b' x‡ÒZÊRˆ/Z=@·ŒµJâ¹7æÉ¨B%Ò)*4k/âB:p1Ð/b:y„„ k›¹™36©!òÎr¶Œ·yÔÒÓsïPoº­ClÒñJ¨~˜êÍ¡ß*.9˜d›üÕu“6×ãÌp™1?×GÜGô±x³¹Y\) *ä=M&T[ÏJfÑo’!Îð“ƒ4ÐÄžJ&øíýöñÑ©‘„¸ºP§¥(¨ß•H-^¬Pü DaÀ\eU)*·7‹[OÀÜ¥b÷ˆFûtò“Ã#pMâ¶=M¼4»ÉÏdS™L»mÛñ€6[ª¶œ] çu¬c™˜ –µ“3!ñ"ýfk"@1ÓŠT#ðd½jÏ FöË ¥ñoH±Q#z—jìõ:$ÓÙÄwè#McÃÇ …ð#¦"¾C2¢Ó×i®xbaÜX](ò )*H'UçÖOãr›Ù`óä¹¶Žæ´i%téüçKä6¤¹ˆ› õ©Ü¢íð“ÆA)*èæñ(Þ=MâΞ)*ì]ðSEÑCùßC=MH¬ª¤=@7Cù„i=}"|=MËœ£Ð,¦)*t[{“Õë–E¿Î3 ɨ¥~ÛuG왬rv=MœZ‹Éxeþð U¿·fžÏ&3 ÑÜs­úÿ&¤|ª’,Xšdü|ºšgb-W«^ذn¥=M×c› ×N¼î³Ç=JÈëxwpÜwK#WHØjùüÁ\5\TÔ u:[Q>ï¿E¿6 ¶þ»…ÃN0Ž,`Ê×¢<^-+›´÷þÛ€[í01"y%†Dqž·œ:¤Ä¥¢BžpIÿpý ±YD· ´ˆþ€\=@¢ÏK|oYÆ+ÈßXcFý,£6BX p9 wµ·š²{ÇÑç„¿ï‹[¸ð ¾QCѽD]ï‚°?GÒMÛ>–6Æ*eþpQ!šõJgþ6¨ÞÅrVXù yuݶ=M-{^ÝÊõ„Ú)*«4¦z‡*êï:h‡ðÁdmÚróCQXAã$¡i¯a¡bŽ»+(Pl*&wˆàÛ;tN¼}M=MI¡’÷‚¿{"TTG{Î °mì\ÉË0Ëa²×¹Ã#ëR®«„Pð ¡Áù×rK‚y–›}0»î¢¬Ÿ½ïè:œh&¥ o¤SØ-ï´³=MY0™¼1Ië(_ þᜯ˜É²(Ÿê¢ðB)*È=@É$Sç™ä•­ýr©C"è‰ ]…Jh=}-& ÍâÏÛátSyhÃ젮 á]<¾:bQ­*É~_G˜ñsÄb˜Hpã¿5Î:îür=J ª1ŒÛÛkã¬ÇÍþ ÖÏåýÅÓL“éµög9ÐU…u¼¤½"þß›Ñ] ÛªRó>Ž)*t¦¤¬Ae­à/‰íH\©d`»)*Óžû†ïž=@WsK‚°G² Í%_™Ã´¹ ¾¹T¼h&+¹#ûú<í×£m!ìpzsÕÍzÝââ¶6 C_}kÁ„…®Àá@5˾ZK°k1¹lhÞ#=Mšæ´ƒš*Nœ-ži„÷œ0R‚+¸9?ZF0]áwJ»#ûÍþ…:݆ihŽ*¤©×,…Ò3Vw($:im|=Mg“Ñ4’y›–¡á³Ë®­úðñÏe| ²µH&ÍÙ>þ{ A9à‡-êÂY)*=@ËØ`ÆV.$™f|ŽžÏy„c:FàâY·¦H˜4@†—Œkbv¨âÙpfÅ¢$ýwos}“ÓKòC½&Õü¹&•CU@ßFp0yk=@æí E|[PoÿC¹%Ï…—¤ =}ž&o£ ÄÌIG¢èZ¢\„óêpQ#ý¸ÝÍg§Óq?6½ñ™1ÉfÛí:)*À¼â&ùÔI™åå=MsÛ»ûä†0°YÒ1™ê+÷•œv©G“hË¡¥?ïïãÜr×à Š\=J[JC¶Ž€®VžGtùòç9PÍ;L‚X QŠÆÆØþk†I‡~B¹{‡î¼ ôF\Zh|nqw²æ¨QQ´ÜÈFüÍÞ¼cK%h¦óH}¼2I¥ö˜~«ÈkH¿`€Ñ*úoA²_’жo6¤¶´ÒµªZe4æMT„s 3r ƒŠYNÜŠXJ|£(£ØL5ªÄØËHÈÌ Yá òŒÈs5Kˆîá عìó”$Îd‡ðÕOæÚZÈ:Éã™Rвµ+Él\•ÇesÅu o <¡(X@ÜÚ\ÀŠ˜{˜!ЦÒqkªk–Ÿf;ó¡°Y¦U—œ_e£Ð°“-3–øu¦,`¾IZ!êLáýî^¼Þœ ï—iq¤Ð k"bCH=M´ÿᢘ*¼3=MÁ¸Dc-›­üàã¸Ð—¸ËÔØ–˜=MãU!ìaU4Éžgq”ÂÐIBM÷sÒ=@d³}©‘Fãédí6d8°Ó7,u,ñ|þJG¼pA;¹ëð©MöU@ DœÊó_}Ý-=M(O“ ¸%(¶é±I„iÞX=M.÷Ì Rg=J¢I¸BDc±ŒK.88R«¼Tª^Þ¦††Å`è³Ý*1ÕÚ‡+ •õ“°©Æ òûøU3ß³òF|Ô¼¨”ÞWUüÎZ*09Ù>£¯´ÐZkï]õ*šw‡Ü3{» ÷€ããßÝ*k*f¨ o‰’?°2ó>>=MÏ(ßµNãè*„æ²y©ÆªÉ"|âOwøÇÑÙB§p'a© 2x©AÍÂV“èû¶=}ÄóG„A[m¤àüñ%«â³Câbzã–º2øeÿ}£— sÁ‚ä鈯^åq;½' û,©,êÕ |_ÜÜ“HHâ¶»¼ó˜B)*ÞsX§3ÇeH›‘ÔwËy©§.௠’u° ±mí@Š8pc-ÑHÞ)*8XÕ£Ô÷^ ;NAJCYWøC00¡8ªF›‡a¶pÔHÅ……OîÛjŒáMàFA™cgÔ I6¢™uå±}¥åR´nPÅPv2ÌM6ZkóQL܆ïá˹ S‰x=@ææƒ–žÌ¢uNw œ¡=J˜cK¶­ý¹¤o¼_Àa·êšZùÑçD}ðןWl,0*]3HÉæ|©{Ö™NཅN¼<ˆuŠ ˜ñþ X¶§ô€´õnmþ¸ ¾R_¬QOÀ¦'Xgl_r´"º`¹üÖë 5 ùž'xíùݽŠiØo5Då]´po-DÙ8ÙÏöj¹}ÝiíÒiv=}ÉøÙq܈LÀc3(ª)*MqZ´‘=@ÇÑ%]=M¾M[wCy lyËÑž@c9²ÛNF݃32_RáIŒ2_ÑÙ •³æT¦i–P†°þ×êˆã#ã']‡Û%ñ‚s„?"m$É’ÚuÔ¢éïá[‡s“Dñ5£tÖø{C¢1™v]ˆ¬xcÙa·ÿþ¦x––ü=JsÕô¦Ç{1Q¸¶y1Ü! ºÕà(Ç.  ·ØØ±sö=M…J¨*ÕõgdYÞ‰†o˜±"Ïe¡Ú1½ÖÝÿra„«y‚ÖŠ-)*I¦Û$ªi8¿ínÜÜÅ;­œb%nöÁ˜p§ÛüÇí¿¿åþ>·Exºðï`>¹[±ú6 $¸ÞÛ{äõÖ‡hÎëá2ƒ …S)*X±·“tÁ¤Ä× «¿H±×XŒ'ÅfëÁ‘²ßÆF+ÔvZ0giðä)*,Ó¢ªCÀ›)*††’Œ(KÿÜy÷Óv£ŠÉüåY/ÚuןñEЭ'ôÉwŽèUÀ=@³G¾»Îà @r$?›âIù_ÁQ°žƒcd‡Ìèèb®—ɆØ7vïxcЩ’ÞQÜM >)*͈ ûˆã‰ó³,Â$pÊÔnHJå}¸6=@s#ÇÊÄÛ'Ìd‘Ï%¢ð59ø¿ñ|EW¤Oí•€}¥èÅ­)*¸ö/s••©“é"X½ )*¹þ –7&m>§Ò9øÇñI¿Ø«­Ô“ê©hy(g~ØžeµÖÅÁúÏûáI=@„L›È*ùßeøù}#ûš Y&KÚdª‘¬f¹#¡ý˶¨FwíU ¯’ñÒXÌߊ¿˜Œ9-ÖÓ'ò‹#´ÈŽ»Œ“õá é}{.¸d$}v˜x aj·!RTN8¾ØeHž*dÑŸEÙ'7ÕÑ­ ßàCK"²Á_óâÈ“X%†tyÿ&UÓ»Ýÿƒ(! ¾ÊÉÌÊ>®À°¼@_HrêMüÍexw]nfÛCcÐÃ3-?AÃëÎ9»jó!È&ü ³2ˆ0T/bfýÿ¸›Þ»Ê€V£·â¶SõM8\”/Œ9JtŽìÄŒWVÎHßLts%Ueög|qM¶º×#zM‡PMCð§Ôö,d=@IBF@+ä=MFÿÒˆ‡åÚjhþžOïDy ÒšwZ”ÅGÈ“ÍMÛI·{TR¿Æ% þž®ëÎQJ¶ ÊÕFá·5hÏËPšÔXqâ‚ê)*ú·“¢o¶DoõS wtÛa»'UQï}3foÑ…ÈÛsS$f²éó•mìÏÅl·!ÁXhÈ‹Iù_St„ÇKãh«žíèTÀ G¡÷‡ñôµÈ¥¥ýïó!Ô®½þýsJüâ µWœ¤ýwë™{´±6¤UI컿±zqþz@nè•‘×RÁG7óï^Æ«ø‡öŸûÃ{ºmÏ—Qb`–s$¼ðÇGÐË””|±m‘¥V†§Gƒq=J/”=J=Mß+sÍÆtœx_ÿfD¯…þŠ evûs$#Jÿ%©;¢¿r%wèÁJùNeËiÀoa“ÏU¯CÑ4г…ˆ.Â2Ä~T9}ò©XS0Ý *#…·`ˆœmíV©†:ñ#~”2rpyu”i—hAâäç{¼Js|.,0ŒÅuc÷y ¤í¦3Ìyf’γÀ_ 9<21ÉøÕìî"̦*›GâÄ9&µ Q¸ŒC=M=@¸†äÄä¼¶}aÅïz­%÷Y-O<s)*¹SÔÁHeààb(òÿs•§É×LÉÁGç[ïCšœÎ¶¥#| çó$î´ÑñœùD#{ÀΕÕÜ#)*ªÌ=MÓw×£BW Ø.³ñLô=@_)*ñ³N°»ù[&w_ëêVsJ¡cÒndý”ð£ý‹Œv x¥ÃYNiò´¯=JÀ=@–“³¦ÜŸ\O%T-Bà©M„¢PÄò¢Ïøqf%¶àþæq<¿ÄwÇy&³á9ïl­#4Å%y… õ? …\qOZgÓ  Çã^ÿlç×x€åèäi°ü$¢O{¦4#€(‰˜)*[ù„Ôf; ™7Z)*Éikˆã‡> ”Ťږb­ˆÑS‡qîk±&ðXyMþ´€ =yend part=2 total=3 size=6500 pcrc32=859B25D9 nget-0.27.1/test/testdata/0002/yenc_multi3/0030000644000175000017500000001524507723607065020716 0ustar donutdonut00000000000000From: donut@charon Date: Fri, 29 Aug 2003 08:20:25 GMT Newsgroups: test Subject: [yenc_multi3] "joystick.jpg" 19338 yEnc bytes (3/3) Lines: 54 Message-ID: <3.1062145225.49@dumbnntpd> =ybegin part=3 total=3 line=128 size=19338 name=joystick.jpg =ypart begin=13001 end=19338 ˆ…Œ]Ô¢­½)*K£#f)* ¿™ªÃ‡-Ñô“ ‘àSêŠ4œ¬x1QÚØ]e;?[{†*Àavy¬lyÑò”î÷åc-géDÑÔ¶’仸[“Sùû7;“F´kßàë)*Á¢é+€[ç_PÅ#鼩ØÆè~;q'ò»zT «ºÄ´»¬YiÂy×þÓÍu™%^BÜd~¾Ñgø…:BÛqÁ}9›uÞ»ì=}oí¾­õMÊqÁ¸TôÍI#GÚ“l=}øì“1TT#¦X“H/wáJ,1xT[ÉtXFÏ›2W×fm¸*Ó =J¬î ÏšÛIÁ«÷Pëx £*BУÍçA51þŒ»ä|Aóò> \/A?°¡üÄã8ÑGzS~-"zÈË4 ¢½{Vönúniî(Ÿ•owÄ/ª)*ÑŸiÂùÔ_—©€¨)*T=M<®7ËHi'.€ÿIå”É4XŽŠ|˜Í‹ÊnB=@Ûã·ª óñyü½V´›µ¹æ“ôâ|7-KókŒ~ìZA>°hqiÏ*qá5ÄZ…¸”–›r~4Šß¯Ž™±M˜É”»)*?¶»ˆÌ¤Ã…hùB"•N—a=}9Ëé$ÿu=Jpû€bFÀÍŸ=@Ý\'ß…Á.žMšIüçyâ$´ É8aÅÍN1øÄ“]»éì¿™ªOÛД°â˜p³ V=MÄs~TìÎáCJ8¶(ß˶|HÿóG]xøɆ0ڟƓķÄÍ0aW=}ËmÈ3ùH"×5·¥{ÅqåÀøSWÇC=M‡ÖãGsGxeçŸDóEδظZ{ðm§•ø& uÊØ³S·ÖÆáJ»ôIñÑÚØ® úÔS˜¸¬þ¹šTÉ$2ÖßuÕ-Ô£az…»ž/aòö ¸- =Mýß’‘õˆ©«p9˜/™–Üw£U`Ž¥Ã.•Ú[Qfœ”ü_ß÷•9>‡…à÷ƒDŠä\,îy–@1Gr=MÉ„Ý)* 3nøÊÃ^šñ’ŒüõùÊâQ_«f·V“«ä•ŒOƒd±*=J=JᛇÇÏ ³¢@ ‘¾î¦dboqJV¶;]ÞàZ9HÞãMøsoðm•œöÍdÞg(uzãGbY^ÔìŸãÑV¤Oô7êYyìÉ֤̉ïwO­ –`×à;>=Jrp=M·Æ8¢Ný¦mŸ6Á6€Y™›Òêº[¿=}4 j@oùb6]É Ñóbø3&Ls——ELÞÙ^É̸£ˆqhô8©H¿…{ãæüß=@Jš¯ø%ÖGͬ£ü¼Bf"xÙhÎÀ÷¢BOå#ªB­‹qaÉ ”°r×zmYNjێ;ôK¦ü¼7ѽ½¸ç”ã¥Äsìx‚âŸgtø#WÐ襓B=JWù¿š®$™ˆ•„G”•–ñÕîÚ­ñËõoɦ'ù‚ „¦áDt©î¿‡‡DA¥@~=Jºbc1 ÓóÄ—_Ìä¹!úÝ…òÜYf J%ŒÌzw 7|®…Ç.¤·ÎÎV¡à¸§Mâp(pλ˜kK§qtx±K‰^uT¸,åÍÚBx¼_ûŒ%‡°üXµZž¤½¬]ð[þ%€˜Ä‘VNÌØ¸»ëùJ®Iat£‡ÍØqz§o2¥=@`ÛðE¢f}Š ·ù>¯²b^2/Yˆ1} ïJg“jê,0r-˘]Â…½ ÷¤Œé^™X*›Hû#×hYQtܹ%à)*,ã%OŠNŒƒQMgq9‡0Æ%ÞÕ@Å’¹(bU„É3×w»’žÏêùç^=}t88›ƒB«ê>˜Gï^¼1^ãxêY”‹[t90·´€ *g1„}þÄeŽÆ9¤Š|Ãfu °€ñ&v2ñÿ~Ô¸ßáWÉ>"ƒk©âH íˆÞ¢Øä‰3Þ ES¬=@“q&Ý·ÅCÙUÜÂæ[ÑYÖé`'•ûærjðÚyyÛw)*ÊD=J^P)*³8ÇÉ# ¶¨¾Õ¦LÀïì¼]ïT! Ð0¿Æ/ ~/ÃÂ=JRGsØxÎ9ø1GÕAï€Ì=Mí1I^/yâ9”ÞÈ]ÝoXÀ™0 ÖéTÕHxj!ÖÇ…î‰a:O¾ší`Aö‘‘J-˜¢×3PÃΊx-½¶9tÇCé[°“hüôrf®r÷žš‘2¶=MégkáæU™f„ݳÑ` @cLUòrõ7Xl2ÑŠÀÒ¦‰ Üw`u£usŸGçïÿæê&feœÆ»"É“¥œxõ^°.ŽŸEƒµ¨_ñk¬‚„è\=@6áZ½À´—aòÉK£7M¦¶9iYikƒÁ»ó© æ2MÈ=J@ –·~Ì‘HªÉÊÔ–ô:—ÇA±×ÈäG3ðÄå`ÎŽá²se®ˆ¸0UgØO=@6À¤æÝU·ÙKEj1ÛùùfÉx[­‚}^EQ›]ªÔö­@–¬gb÷¡]<øÑÓ:;N ÇjŠQÓ-ÍaˆÇRáTå[׳—„N„:Àe¥OÃXÄZ{µR+ªyþ=@ÒbÔ=@ Ûq.JÂýQV¨Œ£PÖN‘ÄA*Æý³óü{$'S2œ!ÐÝÖ4ŽšîQ÷¯|î=Mœ”5µ%uPïþZð§Úñ-ï ]Àðà줎½ã™A•2༓À˜ÄpH’†ª=}¶$½ðUÔ.ÙJޏ›†· ½—5 §ÛàÅ\yGnüMM:š £|[BÜϘŒ‹èÐðá •w=}퀄¾dÃÁöZñTóß ½¡‰Y*-QFcù¨d ‹`oŸ—/ó{áiäš…Øcñy”¿—‚Æjº‰k½­ŸBùÀ8kñC.ÔÈäõN”PvöÅ‚þ§p •ÏÇ“ŽŸ=@íA8b)*ªÖ“„nDµ5…±·Ø†C‹ãŠp4kñ¨Ñ_בíÚð27ŒâÞ%ŸãÝ“iü†C¦ã9Bí;s’7†×f,$‹ýÞÏá[¼ƒµ¹ õ©téÑ7mkƧ¸ äº/~²&´aÍ£C!?þ¢Qný·\Ÿ þÄc ÆÖ œŒ[ËŠ ¸‚Èx¤ß‰lÄ=@Ùý ²:>—÷uH?›òê|L¼é„ßËm@2þ¶WvÓÛ2z[|2ow7Î!œB׌“F¸*F9ÓÐU»ÊJ,qBÑÔ[˜±ÈÆŠ€ÕŒi૟¦p€ZyÀÈÝXSP]·Í ÌL*ʤ4*•ŠYátÚá[ìL¸k<=MÖ’Ôñ(/¶ÿMÆ~­Ï*]˜öåHœ½Ëæçu2¦2$¨§”œqLÜå}Ÿ6¢—ÐQ:=MiZð8eú ,èÿ˜ú_×Þšp ŸØ‚ˆ©¿kPÇÔ°%pÍD¹rÌù(® üͱ î  =IŸ•D~þÿîüÅE =Jë•KO±%yÈ©4ÈwJ.5ßAbzâ-×RÖ*vÝ8bë_ÌјÍ{Ûù„šnq½˜´ñÍ—PÙWµ^ÊòbgU‹Šoð[ñ” ÿš/‡µL´.r²ThßJjFF9ÏSQ\›rãF Ê-1Q-¶ýFŽ -|¶Ù}ÌMT1¤.]˜…´Ý:#0qm#üpª-Æ9×y/æ!o¼Q¾Ê/¬SO¨âÊXZÉÅjÄr¡^xòêRîIüÉgÖ ïhû=}ïåem¬]¶‘C$´ØÇš’+øU˜ óciÇJ*FÊX*ùÏT°Wê.}*‰Â~çbÒ¹ -´©÷«'’*g9?E6Ü»yg(¾å´*¬•bÐ1-•H¯¢ïŒ†’•=}A?†`nÛEº£_ûRTx£÷q¢ÖŒ#m¨,½5B„¥9@"—PäÀ ißnVÑÑðw¥¢Ü‘ðˆD ”f¡=JÜz¿³#òÙHÕ'Íw¼kñÅ ¡S*%Ú)*Dö¬m2öË8ë›ï¢™¯Ÿdñm´JÈvÕSô¶H1ß‘{ˆNg·Ò߃vÍŽÍóq¼yä Ì)*Aˆ=@×ñ©—NWTóß;Z™—Ô[xq ‚U£ ï4Í}¯ 'ÇàËîµ¼}ØsH”î|"¨€á º/Ù;˜ã}ey}¬£‰¤ëo;ƒ_eq¿ŒƒBãOšM–¶@1f›¬ÐÀ {ÞæÇËáÇŽ»?‡¾,Z2.HqgomAÚíÓqNM1'L`5@fÝ8s½÷sÑ·IwºöÄϽ˜³KEØM#lª2=J%Y| ¬ðû1^ÊF0Û Ñ þ©Pi(TŸçWpxѹ“þ(ÅÓƒ«£«ùf{ƒé»’'ßuŒ§¡'U]{¯Öœµ—d-P\!|¬Œ¶©Ü1Vñ´MEÚsÅDÈÑ™ÏLC!ÞÜŽm>•ÃNfžG±M½†'÷ØYj¬÷›àøQø ù˜)*¯~u%Oâ¼£ RXÏðÎfªeX1-ÈÆ~Õs¬!Ý8â6©YÀä‹wWwÍ>³ÌáUÌT9Yk„@ e½BQ_x9:’œ¯¢ûi"Ù"t†Š‰ÑþÍ9'ÀÞÜRÿÛÆ«=@¬í‹*Dñ©?’ÚYú¹$í$zèOüGy$¦2(¾0Ê ¨jïX ÅÙƒ $z†Å%¦Ÿ%&ýq²Ìy&vJI†)*¯U«Îp>8æýþ/›ƒ­‰ü´¼_EŠÄ¢­tBøË—8wA-k²Œp›¸ëþ€¢žÓ+)*³¯è9Õ»}©•®Ò„© )*DX0®R!=}Î:Ë£ŽbG'•äÚÞ ±püö”ˆ€y}ùФ_ ç}kÛ«ØØ×[XÏ=JR嶉xãù‰øÎY´³–<ýÚÁ÷ЉôšÊžq\;é¥PÍ¢ùÛ-&•=@Uò‘þ—™¦ƒ ¢×X‹â¥çæÁ6q¹Ï¤)*¤ŽÛîúób½vÜ›(þ2›$$„¡Áš[ÅìÄ5c  û^  Ó(?ˆ©-"˜=M mé=M)*Ê ä4RœÁšcë=JI6Ô=J’àâ!|©×vfA ïcDG°§ 0áRÎÎBé±"¢©ö5w)*êŸ)*4Äi7ÛõûñÏÜ›$€Ï>X=JzDHÀd“à,©_5‚——æ[l 9{D¯(lÑ̵áâ7e¹†IкÆmj)*4¼´w4 Œ­B@© 5(>ñüJó‘˜6,ûS=M(#Õ¾{öêË'·Ñ-»Ñ‘óy(P¾$¥ŸÚßb¯i"Äå«x/0úÞÐ%‡»$Ë(¾­kü~¬Ä‡´»…Ê(¿ ͼµõâ>8µÐÛõ“àŽ)*.)* ”1à¯SöÄXÆþÑ"€ßWFü0jج00±Ð«Æ”É w©2<Žè³ÑÆ)*ýÜ´ÍßFü09&KˆFQ(j€I!|)*ìA ù$+‚© »…̸þ‡!-*"Mí‘(Š i!z¦9 Ü '³Ž9'œ=M×$„YX cí=JY7;­Ì2(Þq=JY6îk‡@JšCu©]÷žž¾ˆ‡ð)*ìQÊ–3'³Ñ—%\©¯Q&L¤+=J¤“H ó(?ÝoFü0Y&LhI)*ÊHÇ%d ¹"n¦h©-Щ=J\©¯—{q^Éz] WægÎOïÈÁ‘™^£2ìÔM1ºgUpÀ­ü½é{Í) =yend part=3 total=3 size=6338 pcrc32=D8BBEB22 crc32=4C995999 nget-0.27.1/test/testdata/0002/_par2_output/0002755000175000017500000000000010162001761020632 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0002/_par2_output/joystick.vol01+2.par20000644000175000017500000001002407724216134024363 0ustar donutdonut00000000000000PAR2PKT|ï·@Wè‘G$›ÝßBÌ9?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic—¾·0¡Ê£Ž4yláûX >ÁmÖŒô„l‘ö¼µÿH¹’ »E/žÎ™´ÜÃÁ!>n~¯‹ø#K°"“l[M Oy/B5ñr+où_c.ô!:‡ß^o¶>_û÷lÅ`F,˜HѧÁ_l…QÆgv'ÐÍé'A 0ÉDœ#öN¢d¼ò’(âlfÌÓ^æ>ÞÑ“™ºÔé§<ÕXŽÙ¿¹öxÁ¿â5Hà ¯þ욊´+¥=|‚…2›Ú‰;1i•RøÒzBà.¢÷æ–· »Ø]Û¤ÅÔYª3¿’M6M6‚ö=:8œ¬Ö¿˜wh¨ú Éî›5åøhœ ƒ“ñ*Öÿã|_ÑÖ­Ü­2¸Tøþ–(b36Ž×!÷L„À _æ/ÎN_ùöú_eoZ¼cx~:é÷MÂé3çÏÓ‹a†èÂHgáÖ üŠ i@¨E9wå‚ÿ$ çwŠŽ‚ø2vY ëÃÖ1çºEOÇ Óõ‚–ƒ'’Ï´][s-A\TÙÕ æ²rŒUÈ}Oj c\ÚIÛ»+Åå-ï¨/]Œ®”Ìž »ƒOŠeHïm‚(Ë&ª’·äU7éû3‹:?.ú*ôÝ,ŠÀá©GŸ\xføœЮ!3hçesQˆ©¨LÁŸ téØÅ‹9Kyct½òUµ&[I¼ªkÍ­8¯{@Ê^õ}ù /Ê'”³å>î{ü¦9; X_ÖYY¼ŠÒWR"ì´ÝpÓÈHÖÍÃw=§ŽF%µnÑAO›[”†ŠÊÂ;A£-­\`âuxþ0”ö¢q 耙›…$qNÖªš]1 yDå’û“/-ÈWóÌ;ë=Á à_»Š“"³j8Ô¢%×”´a™ê‡Ûˬp¦§I[{¯Ê:z_ÿB„£Pì1Tí³)cù||î[Ãg¤pÌ…ƒnãëÐÍྜ•„wæ ªýj:F¤lK_£3Ž÷ªñƒÊ•7vAGò/ÿœÄc7ŒVr÷Š!Çîù¹¸®N⬶qê}]iqW¸ Éb|ÀáòòؤVØšV“ǺmÏ÷~!“ÍŸÍ>J»ãáî¼+M–IiÌšT’9­ÁJ-£G\‘NIÔ”;4¬CùÅßTÒÚ }ÖußxãGHŸdü«®ù$_íŒÎ-­£äåGiû‡Üâ†uܛЬðKç†ó§1áK#+Ál Õ‘$m!™ÐRÑE“ï'R2À¹Ýœ’GíOdîBΖ¤Ãý1V­ËV½b9Ž^Ñ9ökÐx×:› ŒOª£Q¨ ø*—¿0~ŸsâRš©Âó"yd,«‰÷rÎoêžË†ÃxyÑØåAt_íLn}PÜ-Ñýn`±Ò0¸ÂfM·Åºè!M=Æ8¦gëÈ·ªÉe½7ôøv[;î·ßÙÁål¾¬¸VÞ¶-I–©’Ìé™cµÚÏLÛ2á­æºýjÉk½#ç&(+SŽQ&Ïþ#4þkEwI Vïýq ãÑûY‡ÞçûÔ9‚týY”úÈéV¦íØlfßß½îžÙA¥†s}uüæ@5·ëÝÑzQƒÅ“>‘=ñøœ Ý&e).€·EÛ¶Z,?Ázã–p¨Ä[{åŸPAR2PKT„y7téX%a¹W!eÚ@£¿?¯4Íÿ;IéŠi4‰PAR 2.0FileDescAÕq}¶òv>pd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKT|Íù†<½Ý^Š4A ªçÏd?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlicüvúeJþ|{‡N-hMÄû~ dQ&EZ²å¤D•èà~¥©ð#Ã0¶jn3A±]Áº(á®ò¤4þÕ˜¼ž£hµˆwË ²Àš`x¼¬Òép7¿ja? ¤Í{b¯Ð"tXƒÞ«ÈâA.’VâzÚÀIŒ³MÂTD<ï[Ï‘ôFz"R KñNé¯Ñëâô÷Œ]Ú³leŒ“âæj¯2eµ¤ˆëÎ×®§]¤f×l)·+–,ëVs`õ`,Z5&ñÖ¼ä:`Rã Nñ$þ"VÉØå%Ë< F£Í ;ñQ£ß©è%c>{Åü \§Ð:䥯ð²WÌ^]å$´ÝØBOï” ‹T^õ “ÊÏ6t88$²æ‚ΈΤ»¬MóÈN 1S~ƒÚ™]ŒÀí¿Ñ‘(}3Hy[{Dn1ðç+SH?òÝw•6À÷;óºçÊÓ3v$µÇ4õ׃ô?iýn²ö’PÊ'-ø`ÀÔÀc`y®Œ½é´ ?lHH-ŒÃ™£P›3û>/")mQºx%¤ø#•¹F¸_ÝÊu]OÁsüÃéÛ`.m¶+©3ŽìÝñï[5ÜíÚÄ´p«ˆFwl#R"QžÂCŽIÒ9š/_ôjîÖ)$(Ÿ†k Ðd™>×:@£7ôÌL7ôß¡ZŽœ¦§N9­† Jc¾ Ó¥Î[س’º/çvLøHКah<ó÷JÀî¯p´ŒÏÿ1\Sí ·*«ûŸŠ¬_ .4˜VpEF˜:’’ =£mˆØ)“ÖÀßã¹Ôóeot-cNê·>½ùœ5Á¼Ù˜¬™ŒRzÔ\šªÃC>²;þz³YÊ»™×ÿÔTx½Û è; *æ¼Ô¼M^n—¥H „@ÁÔÚQKj´ã9c_RÙë~ý\øfl¤ìH6ãܰ£™7 ¯†çpMà$¾ÙqÃÆ œ5_mb›tµd=²ÅíG’Û)?ʼnk§ùp£z#ž™Q€‰@]G-9ŒrE[”?¹Æn¬FÃB$u‰‚U `}Ïi–¢”ûô¡ÞF¶N‹~\_˜ï4*À]ÀxÕ:\¦Z¼Ãj»¸)a« ¹“ø,Ì1ç†TÏ(ßÀúþ¦cX£l9Ì“:Þß½¸ •É ¾Ÿuâçpý©-M™Ì¢³f ‹ŽcÄÎöb~I»}ôÆnn‹®Ð1•Ò4:Y÷¤cð@»ÔÚ‰Û_ؼÃíRœ#IϤþRUârAw o]Ÿ£ëÕ2(Ý»RxÔaZSÞŠ©Þ{aœ»}cSmÁéì1žˆ^™-uýªR÷êöÏ#[»p^f²­CŠHæÝ3}å XÙ{»[™(=c*wÉxôÄ¢N¿®ç=­ÀFåzâBPxöШ2SCh·kxî-U6ùgǽحod¶p¸Ê# É °¡¯¥ö„;+ÿƽ4=Ã+3ùÏ¡°º`ˆ[„¾m?YÉ”šóþ®ö¦ùZh©&âí¢Øêª8»È#`{´ÄK4»¬jhöö3QÀéþböï¤súP!n>y@„ž8)íÞ@[ (#{.^…€ïc¥@ÇT#E€ök= ’¡ø'EK³•½ Åé'²0*zšhÉÛ²™À@. )˜H±&L!xÜe1žLåsñWrëôO ·ØÝÏÉHµêÛöê’øº†60aË<>½‡?ä²{·Ñû÷óáQ>ùàù¯Úᧇ.ÿÙž%´Hpd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKTd\§º´‘Š3—¤!¿?¯4Íÿ;IéŠi4‰PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/0002/_par2_output/joystick.par20000644000175000017500000000130007724216134023263 0ustar donutdonut00000000000000PAR2PKT„y7téX%a¹W!eÚ@£¿?¯4Íÿ;IéŠi4‰PAR 2.0FileDescAÕq}¶òv>pd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKTd\§º´‘Š3—¤!¿?¯4Íÿ;IéŠi4‰PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/0002/_par2_output/joystick.vol03+4.par20000644000175000017500000001655007724216134024401 0ustar donutdonut00000000000000PAR2PKT|w„-‹Ô£)¼¬{›©Ü˜X?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic½CU rü°†–e 5!˜ÒôfQƒ?9e?ÅÜ>µ£ÔLðrUöc·±£µ+#8£Rå²¥_{Áu„¾”œü=ÈÌmú)¦LÒn2°†tÅ8<~P°LZ¬¬uîR4e8±úk£ámĈEi©ÿõ†¢*2NjÂÞJ{²[{¿èÏ'GÞ"•=ÙЃÃÖ®§±¢ñþÍËjÿ¬Ÿ ø¢ÿºAbb°žá CÞ„€oFþqþ”ÎØÚxªbÛ~±ã´OP5ží1Cè¼Ó†í«}±®x[v•Ëjl¯ëF{ž"æQ% \A\Ã9déÌxkåEsKÉ×[0dwÚE…x{\K¹+d:?;d¨WT„—ƒ )î‡ÊSvÙèC¼oá¹ßæ$ÜyâÁï/ªŠ.ä^‰ßçB ÕÎDÞDégDÞQh4Ã@êøËÏõ„Ñ4QAnôƒVE»É¡"mJ>ÃoÆXÜC&r~½ªÝ¿h,»ƒGØÊ쌞ˆOpŒ>–´vîŸe™»Éª— ñiAú¹yú@õ8ÿ¢’ e â¨×ñ y RÏ–à’p8-Y¯FN5 ¸ÚªWÛsÝ*ÏÁ> ¯¹Eüõ ¯ 3bÅXoT ÷c»Ál5ûs]¯Šv™×oØLÂo#"¢%ìSRµjÚ å x ÍŽÖg\¥¤«sÄ©¬9°¤jÂёͧ8ìÀ¾YqÓŒ(üs ÄÒl]¶ÚáÞJÉqìF«À6],;ï]Ç)Yº˜ìÞ„ì©P¢8€ô®ùUå¹…ôj]X¦»PDµ<èl…öNÃõ®=CSÇ„ZûŒTuÚ>° ªk£Ùkw™*Qþè;ƒés-:¾ˆ1uªSÆ‚îÛÀ1êQóÐÉ›šŠ•ô¤Â˜1²ÞÆ =+ƒ}h;º®EΑºü‹4+ûxî‰p\CÁ¶®Md ¡S˜îøÛtIÍ1Ug¬\ͰX»v€5þ²ûm…·ÏÉU“H£WÇ76³‰?øì=„žå媷V”ªC‘Ö”îkæó€œ¢T4¶ ½r•†‰7¶OÏOZºDqÜ[1I¨Þ—}ÐT³M™ìP>8LFE"ÍDÇQp?Óa¡hŒëï8¡®»†e?ë³j•4b¥[*ŠzRpd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT|³*“0¶T¨£‹FÉ`'¦?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlicB¡\’X’¾ŸA<4çÛ#KOŽë½I|ë®\%Ðâ¤^Waz·ƒšþ#±Œ/.ò@/²yE #ÒyKÐÙnã2l²Ö®¬m«ƒO1Ç¥²÷î˜Ó,1òŸÀp¦2aë†$îñ½Oè1ìÊ”³ÿÑÌ °Oß]ŸÝoj‚¼Hƒ•}q›6Mg|KJ©ï¬Mùi¦=%ÿy-}rÞP®HÌÔÕ‹½kKõ5¸i¢F!x–.qZgNñ]mûÊJÁ "‚þ ò-˜¡ÄÕá• ^÷üo¾Nkü ºO¹6H&xE OVž”:â¥Ñ’§3ûõ¨;!‰× ä¡Ìç‚o€Áÿ×ÕbJæDЇ°èÕAzsð%Pò‚ÖÄFR_K¸zc1žªÌܦےôÍÏõî^ÕWÐyêXnêóÒU¤±½£ÜÑ§Š‹kï@Æ&žÃgx~‹Ú»jÅ1”Ü6yÓ5Y¡Q¸» Grš@€»‡ ÎoñBô= 8‡œê"nÀºN¿ñŒÒQGFôÝÇVgØ@^ŠXnƒ¢ö¸8Ü*¡=ÍBO¼5"`_…él Ò¸KEÿ.ŒYü&ý†à˜ŠjÜ¡˜,g,[&ÃmD…h”\†ìÜ"’[O™⩦™/\+@ÌôÓ&‰îH#^ÜyÏš9î0ÍïáíV<2fb.”]#/…sBÝ|yŠ­Ó\[ßúIcO9ÑÓõ±/è‰ÖŒ ùöR=9øÓ†Œ­´>‡ òCÿ‘é»ð˜þšóL$©y§žÊŸØáñ÷¹w(ð@Ô5¼­¾ õP{¸µä¡_Y¬ã͵"çvU_ëÇÎøíEnìÚ^h±Ö À^Ç¥¦á ¼“1)™h5€ukÖh2 7çMDÀ­T£¾.…?QX€ÄxÅ¡.,2›Óâf£*¹!A^a™>^v&¶Ô€ùÁA¿ÆËq4(.Ò y?½²Á6l”–þõÔRs‘­-fš:±æÆ*7žÂ—«oLN>§¡MUö´¬fƒ¤™QóûyѱCGÞ,Ý/žæê•ÑûýÿtCþø¿ g)Þ;óÁÍÉgʧ}Jæc¥ðUTå6paæ;<¿ÜpàÚ¨ (BÅ#-Ö8uSp ×:¢ç˪ "âZ?¯\êËCM&±Rj“’Øó£Í¥Œç4~£(€ócA¿j#Õò‚ЏÚâÏ3ƒiÀ«PaeK‘)Sƾ7×8\dÍ6Öæ‡JÇÇ0Žû¯P Y^2Òr29Ò’áƒÉcÄ”«>&oxq ÃCg;ÈGvfu›ª%²€§e2ìe®oãw”\Dص7tñÿâ÷rD9åõ•lñ?ô²jþ#¶GX©D²¯oAÅOCm´LfÚr¼ ´0èÕ©Š+c{ÀgHF€È18èïD0hN†‰ñðKœøjîÒ×ñ÷;¥Æãaö·çÙÌï€Õ´÷û‡TZì%¬ ýfôéÖpd ¢PAR2PKT„y7téX%a¹W!eÚ@£¿?¯4Íÿ;IéŠi4‰PAR 2.0FileDescAÕq}¶òv>pd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|œóì¨n´ÞHcÿ?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlicW¤{ÔRj„"{gãg{þi'\%7¢PûÖ×]ôše[$ˆö4z¹‰lÀmGOÒç4npàj®ç“TX »çRmЪÎU†h)£i‹cCdß›®a,RìaF {Yäøö•ÛXožÇe¡%@§ˆ¶mûR„‹g,ÖÒUŸh ¡Jh_Ž#ªfÀ>ß/SlLìWb ¿ek´we3Z#Oç@œ€d&k­ÈMeþpím€]%,2ÓxSi3fôb9¡JÙ®Rè±_Ën_²ZˆÉxf†¾¿ŸŽ!€2<@YÕ“ñ /{tÏŠq£<Ø=ù_ø:…ï±%xh~jB˺ˆ-fç.K¶ï•š1m&ë,ý«ª÷ƒ3óý†é;øNð!n|ÕòãÕ×>¨›Ž£:ýµv£ Àˆ¦k@<ñbgÍšaç„5>çŽÃîB•SÙî¼´›0ðz×ì­¤¹' 6 2(«ñ²¨Q—2ëØFK¨=žâ¥ÂcÚá”D\qOu+PL4ß´C¹BÍÁÍÛêÚVALôî7½Oä^Søq Î,£x‰óO²ZÓ’æ"-׬—#CÉÌ1+vKiýI© FE‡8;Ó«iQp?DêUzrbŽòcLr)l¿hÄ”~\év´¶`-‹slqQT̼~?g÷TO¿å¦%/Ôªþ´½[¡Á•ÈÕ€Ê:p!¡þþS¿A‘Q> ÆÓ[²ða½xþ GD³9¦RFÉÓuDL¿Æ¯w0ÒÞÖá9­À 奒ž¨Ô{¬i“L Žcæ¿”Zƒ€ VµôꇙÊ(¨pêà4÷²;qŒn(Ã7@ðØ’P…+·é2©aQ¢6ô›µH.µÍíÇʽ§™F†¤”7Z*sE¥ü¬½î½«>ˆyõK_aX+œé ¬ð«…Y¶£@[uFKÅîK+;f§þHœ·¸Ê«˜ˆM¾€Hù&T´œ×Ñ ò;›’=àñÆÅ> yûq:M£î9y*oœB¬ì$ÇïšÔÔçæÕQŽL¹âNÉ^òb•"s¨—D ÷ˆÖïÝ/ I£óÛ ì<ÍÁ¡íeOé„lãòì ½LB‰‹k fÚ›as”ˆÝäwŽrVê‘)º$—P°>G"Š- €ŽhÙ*§¿K™Õ@yfc‚ZXïš„ì7ªçÏ“µ†-ežEyõ³¹oþÿQ7¼n )ñkXˆ;X@îÝï@ýÁ4™V±ò¹_;T}¯•h®úåJ®NÕ4à6ß0Êš­€ÿ”rísŒ6¶÷:Øè¸ª³‚SÅ÷®™RÄ9KbœÕ¶Dl Þ| ¡UX¤³hÝ :s¨2Rʈ"œcfÙ*XhÖ­é챞Z±>#Û¾K–=ãhne×øµ+Ïÿ¦6NADèZP©W1û‰B-pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKT|?FkÖG!쥖l@áÚÏ›?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic.ôØ@ŸéïþnãGo¶÷Ȱ›_™È«É><²ff|áá²CµŒµÂ`‹ý‘Ÿg‘{áœ)hÛ­C1%µ¨ÐªœiɼÞRù àÈÎ6§°#TçÆãa‘aó̓®¾ýV"»?UÚ³s]né¶€‰¼!…&ÿDvÿ;ãjrﺣ³`{æ¥YFï!º Á5«¥ÐaLþgÂ!Œ`tü†¿2ô)ñÆ´£Ï‹KÑ9Ã6‰0D'Y$|¼{=ÄI½t]‹K1 Üçï^u•·ØÁƒÁøÓö¿˜~;(€´/Äe)ïì\ÿh*©3ü;CבÍ;§gcÝxñ­ä7~¦à+.xãp—õŒš€<—>¿ydY§FP?¡ïÅêHT1ˆêLPnÅïç½ÉDb{#øºnм?á¤ËèÚTÕ É[¦pd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKTd\§º´‘Š3—¤!¿?¯4Íÿ;IéŠi4‰PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/0002/_par2_output/joystick.vol00+1.par20000644000175000017500000000407407724216134024371 0ustar donutdonut00000000000000PAR2PKT|ÞvF:®Å' 1¶Õ‘Jß ?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlicOEï&‹ w+Tþ /J C¶™„dy7bV|Xë0‡tLßÞ@2ë?ŠÜ"íC‹«:`šžO×L#®1Móq8!ÓÏ¤ØÆFæ.1\r·-b/­‚& ŒÆ A ç…ZWaYK ‚7}-T_ êXÞ!Œ¡Eü7›W“<**)·5+ ='ñÅïÅb`>´Ê-²ðýåB=òñfK°ÜL ûa~L¼ôþœÎ\q#ÌŽØ+—Wºãñ‡Ù-sw÷;ªÞÓõúLr 10Ä“ýŸÛ`ç™äc|Þœñmñü±”ÌDÈ7‡Èiz…ÿ¤kÄ~O³Wß0‘ax*Tx‘y7ôã7݈õ·_}‡‡Bk¾¥†HBSh‹ùÇ“Ññšß+nåÝCj…‚ºbÈŒ{º°ÛêÒó¹_¹r†Ý£-$&$÷-]BÈJ¥†\É^>¼_½œŒ+Üåhæ,èø p÷úÐÉç9«®T £©ÝKÈæ$Š]3_ƒ4^‹! ¡fîGô„Iøp…¸SµØ—Íê`³^äOÿJD&šÀøšY) 6XG! •Êvºvp!°Êñ„Ýq¤ßÖmÇyŠPy¡Jìh;~®ê•^ ä÷Öj-ðg\ÊÓQ958Æ@á£Ô€)Ô¸—–“xQ,ïb> ¹B“â"`eÈPd€¾|Ù.âõ2òèšY ¥H²Èã»ëܪ× Æ™….ê{• 䈃e Òõ´Ð§뺫Ջ¶æ›¥äx<#êAâ’'*MUÍXBåJg¬•£0L'yÑm`•Ýæjõ,J»›‡±_ÍQéúŽp#Òãï;ÊnJ÷ž8rÐsižò©ô$RÜ)é‹w³¼uÀ¥RñöïÍwÜU¶ïƒ¢*ˆl“pVGk8®"Ùjhâúêl«q¸OÜFððâÒ81xP{Ñû7R¶0Ìb „o¬aTâi2} ôm {y ‡÷ûJ_˜Øñõ8EAŠæW,禱"H¡¨§¦Jý99£ŠL²;ÃæB­9âÍ65ÑûÙ1íšå²Ò7x1÷räš4öÅÅ>‡£U)=fMÚæÿ-³ÈIÃ÷©-U?5’"4ªìCuØž8Û+!d/ܹn÷+tx³K‘!ðÒisE‰wŸÿš—Ož]Ï'§QiwQøÜ;„fðÍ m‡DÇ” êÖbñ ¾:èZ!Ñ v)‘tõ‡’b¤î$Ç#wÚE Ï ¹¸öÁ~ª¸†.~âÃ/Phˆ¦‹†BAºwñ½X›ØSzeG¹H€ÆN —½ØóüÌa#]rqEŠ‹pd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKTd\§º´‘Š3—¤!¿?¯4Íÿ;IéŠi4‰PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/0002/_par2_output/joystick.vol07+8.par20000644000175000017500000003266407724216134024415 0ustar donutdonut00000000000000PAR2PKT|‡ öº_§jó ¾n»‚Åç?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic +Ótu=¸Z_¸º¿u·ЬÚðaÌc$ߊß`Í$TÓþ—q›¯ÄË¿ÎÔj3 ¬Ü*•äLb;èZ_™gôKB8§HqGml™(£å¯†¤9¼LöÚF|ýXý®'ʾµØ×½³‹%³ðˆu)”r&íéˆx€~Ê-Q}&3“”ŽóÐÛPú'˜,%ºñòª,§§¦“Î.¶ChDü¹º5œˆÈ¼5mã—PUxÙÕF>Pzm>ž“x·epý¿G†·•êÎY>½ýùu†S ˜£ñø¢Äë2ó€MþÅè1š€D–ù½šïÅÞ§1ºç¨á¥4/Ãà"þ2 ¼ ÆGDv;ð4¶RŒ£I6ò1–¶—¹ p¬;tkfî‘HÁ½>w8× ÷%Î:¹2çéÿ‹–šâÒA²Åu’â+â(éãÊ@‰©ZÏõŽt¸êõ„¤¿¢€ý,JŘ¹l¹Œ¬RóEïK€2›ËpäE¡é!Ý¥f£˜a<üaiEHòŸUu?qËj|¤ ù™ÎÒQ8Ã’AÊ‹ä%ê„Ù.”]JM–Ñ'Õ¬fÛò§÷©›O¹€ ß8#/‘JÝï0—ƒ³¤ÐšÝi¿BTNBKý­¼(?×pø±A¨Hø<çÉD—Ã¬Ôæé†ôúØ"Š ¯×Ÿ¿g²Jt*NÞ¦p–™úøÿ"ÿ/,§) ¹u ;Áv¸œ:{w´ÖN‚÷‰hýjN¥×—d#Ä(¸ãý³ò\Lûpš¯ö,‰<Â{‚TJ;¿éõ»;Cýú·®$Ÿ yTçÄ ^úÂÎ?ÓuŸ0B[ÈÍŸ`1NZuU¥s®4ïÉã‡ÕÜ©j¡‡ì(y}YÛ¡ß…¡Mµ•ïÚcÓJÕ˜üÒeÂ=¸)7I*¾ýoj@¬jEÔ¥&ÑÓ‘µÌáþö9agUÕD’ÖÔþÚ>4G–êÆÚÖ:bZýÐFŸŽ5¬&è„dá\Hny%=z×tN¤ "sxSR3>uÚíæê©öv®÷âòËDNPf\P¬áU¨O#gºw%9ÍéUräѼܑâžÂfOSšt˜_³ °*¾©ÆÉ¬-8Ñ{'¤¿ÏÈØšë²!®ˆ·u¦¦•:Š/~ú¿}7¢˜ï豎}¿(rs°›h4âú`5]PKï‹þ­µ7ñ…'r š¬t›êÔ¯x‚–ô2*;s-‚Öràõ@š–±é<òd;ô¼Illy ÓÌ^ÙnÔ Œ@iv®¤Á¼*ÒÝ÷Ø{ÞPAR2PKT„y7téX%a¹W!eÚ@£¿?¯4Íÿ;IéŠi4‰PAR 2.0FileDescAÕq}¶òv>pd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|h(÷iÓè!ŽÆ¿­g?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlicEiOÂ\îùÎczUtºJQðbÏBn0àˇÏ`¨Æ¿î¥ä©z=­¦å[C¦HqðO`µÄM.< fµÄý*Ë—Ú"ŒàõÖ…ˆ_핱ºÆý#Ëôåþ‘9œfzõ¿ù®ëG‡EeÜSÚVÿÔòQöxõ)C¤Ø{á%3;B¦•éÔ+hÖÉ‚¤ r½UÁý”›èü72¾¥ðJ-/#¢/0ܱâ¹<]4ÊÁB«Ã¾ùÂ=–} ™I(SHe½CŽúƒñúz#JäÎ[á“ÕDª-&L8=0ž%¤WÓÍ0°ŒÌÚQmê¨wŒ®Ã=ÚJï‰b—<…H–HOPÛµAî‚ ÓúÀ‚üÕg\±‘³ò*W–,^È’[æ÷qþÈ•3Á¸)ØÖN ªLƛʇøùH_«TL¡Ék’úšQ…oÒƒD…PÊ¡;ó#ŒÔq®¥d—ÓÙx@ÂÙÉR$Û'[®5Ÿà ¢Û n]´,?ôÓC_™Øn`„–Ê”¦˜š?&U¥ Îm†‰?ëù{F’C:¬>@M¼)ñƒýE@fÙ˜ÞaW'ßG|F0õ$-ó©Ií–(6™w¯¯Úýs°î傯¥³ÆyE´¡ü‡þßϘÅQy5" ‚Hh ¤ÿ+rx*Œjiˆ˜‘š1u(ñ´´§ÌÓýP¾MNkX´©ÚÚZ^¹àwÔ@‘ƒU¡klƒáÙÈ<Ò 2„Cá¼õº‰úµ\Pl­xÚqwzþ@Ù4ùñ{G§tL*´[ö^oALåz{Æ:rm[ ÕÅÂnÐÖÌNʘ´’—qÁ›f1ó5|î”¬Ž¿éjü¿ì§"[”<„xÿ5&3|%y®ÝŠ'0”F´!›´ ô¢ÿ*ðø=îå_`Î Ó­' Š8Àد[˜­`Lóë¥Î"‰EÐ?£Ëì²×ªè)û° ˆí5)Šlò Bì%߸̆¿qOÜФUL2‰Êë'‰>³|8ê`+.è, ¸ È;ã¬çøþºøet±×m4EÓ°ÇEð~€_úø§Ö¨QŸ”Ð{ìkl²4Th0æmrEV¥ªEšƒÒh~ŵq®z¶ìÆoÇ›'±«­:¤±Jù… ˜r™¼éº*ëî‰>Ï~˜1 ¦ù ?+AšNÀtÐãˆW)e|ã V÷ÛõE]¤KP²º>Íý¤ÖÈÏC W¼âõé²Ù¼1¸ëj/>«Ýæ?°½q·Và·dŸÃãcçËEh6û©%ݦië i-ãÚgúÜݱ–”¦þÒ4J0?Ì?—H?XéFÑ_ 1‰³“Q!'ùÅà=ÁSWÅFÍzµ"¦ôòêü‡úJ¤â{À£ìt E³Øû»µ‡­ðœ…j';|0ʺ|Ú¿(Ôc¦ª“ý÷]î˜ÅD¹zû¹tq—X­0ë~d$—ì —ŠÔÐOû!Òˆ•Ѿ› 3Ì••º@:¦›Æï…–NR‚Ì/YpXJd˜¨ߌ ߨP’Q§S{aÇÊ”Ëwøßùw³¼.c¡úB—Fä|ŨA_ƽ9k›O©J¿m7h·ÓX.’Á(JV“Š_)$P$}9°GÏn;ØMp¨/=¡ìù€‰À§ŒhdÍà{q2'â³H#Üû8pɵ¯Ç½–*Kø»V]:”î*ïä‹eÇþ€E–VÙÁ/v‚ÿo”ÕÒiM$ŸSPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKT|¼Aú~•åï£ïÈ 9oÍàr?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic £âÇC]´|¸‡4ö²†"Ù†ïé ð\vû#Þ0åFúdÍÈn<Ñ‚¨®ßPµ8ÆŒ6£±UV>ámçÀ†Ï#]V¨oñ˜ý*é@ÅJnŸ»îÉé :~Üñ•ÏMhåã;sË/o%¿ö§þKqéäzù|éW#°É³Øx\Óà€Ã°°Ïæ2L(…W[oB€ _1E}T àu7©§”1ò'Ó̘ñž‘²±#Û;×Ë‘èODÔqGŒÀ±xš(~¥ûLX »Gxf*šçó,žó5ŽŠMÅ(x•øí§C…b2óÆÉ…pƒë[ÔÈ*³n¿˜ý¡.ÍÃõïa®2¥A/©êÅ;û*ÚÑ FÆ32‰™ÓÑ pá½H@ËÅënà»[äþ5²o¶Ñ­xÀ~Vf…]IÍ¡yŽFßìþlbr‚ûÙm-^¹{£z:µééÀ[ÏÔºàaÛN—ë¦^Ḷƙ.2JŸ‰OKô Y2§ý¥Zkò±½¸Qu¼4ªnÍæß̼3’›‚!uUYP)ä# ·¥Žå¡ƒïQ•}FÂjÉ⥽èeáì±·¦{üuÌ[Џkÿ@,çpƒuµcfÛš§0~ òÎ" usÖÌ>lÓ­*Eàð{¸àN=ÙC¤;§ÎÃ÷xw€” ¡™6K7iÉ|Ú…r°Ä]áïj làñ’Jz„í|ºÁñC•þ*@¸8oXD¬¼V¨«z¦11ðýÎÓVZ´Ò¤†+òŒDfj®Xà£Ó~ª*o.´‚ežP¶Üüo’¶W°¥£ÞˆëÒש§Xƒ3½ç1,jdÕèÎËûfÖ,æNÃG²ÆÂáÀZ0õ¯¯w¾£'û IæQÏ…Ñ?VJéÜZ¡ß'ìB^ÉÂÛØõÖLè{Ò¯ò è=V\L ÏÚ{û6œB‹ß-yÒ§¸b¥´#š?åß^j!ØíË× ð¾ŒÛHÌ2¾ù^~Ê¡â Jˆkp°=š372Å@#Ÿ“ñòq(-ì/$îl@¹dÝ;z-œï)ëE•`v;¦åà?y±RkU¦ªChz½U·‡}ùÀ‡™WI¢…§³väi¬Vä ¢>^ÀóëH ~¨/³£€ÙŒ¬Y––tÞx9"/ü‡OV ”¬2q¹Ó|ݺ µ¯è Fal±‚XŽU4méBè¥$ÛM°ãÆÌº“‘7úº&’™NsªKA€)~%ұȖF·[¤Ÿ¸ñvI̾®l kV×gîl ³®“¯5ã üVpš(ß\–Èãªýz8ZsŸlý֖̪s¹áR¦·ð•qN Y‡Sr)©5 ¦¥w_=ø°ŽHü‹\iQL8qFëòȰ—s¾G§êÔ.‚Øø¢n·Å-€s°iÜèYpd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|4&í=å“>®‹¦qÞÓäÛ?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic }cˆ¸WR4þð}ÊgS-DÖq÷Ûz &š¨byÚðOoû¡¤ ·jL½Ó»xɪ.ýyÜ<£É(7Û„}ÛDÌ ôRM³šJ¢¯ÿ=›³2oÿu•öY"Trö9:«GñgÈ rÏeŸ°uÛ¸ý]bÔ‡Ù=?é-¶G^¬<[#E¢4”–~è ŠIûüÈU^åxa¾(‚ U©•ý]HS.Ëó!_bGÑÒëåL§è³ÞšÚ ƒœ8!Ä™05gàŒ—§ÖëcÀ5UÓ½B óÏ}ÑûW’¨ïøO:¸7Ÿ=V1½Gൡ´ †nd'ÝzBŠ“<¼ÍqܦÌ|¯RüÃjÄòß(}©òk»½Õ`Vm7÷vËT4T7Ð&ž¾gf×n*¦Éï:È x ‹ï¦™\M‰7ºàŒ¹v#™¼p—ÎÄþïõV(=Š|æ[X†ÍץР¦åD!’J£ù!:dY—4¸ŽÆxIìì°T§ðëmOûôÿ÷åºe%jRxØÊáà_W&ï­M Ïâd/,2Ÿ%®‹‰$ZèìÀZíg¸l…˜qÕQ™,jÊquµ3'' mŽ ¬v}åÎí•&(¯ fä– `± "¢Æ ø Ê—s»Ëíe/Ó‰º¬Û¿m.S”!cÅÝa¬‡Ôë{ä×ZŠå.°Äez Ä[Þ®™«èÉn‘<°¹î9[©)þíú¾Ö q­¯µ~’äÄŽ©Ï é̓.7=~§Îæ$£ÁâZö3ÞÓ¼ÅüA=¿ÃDI¹+ƒâð'÷∆¼é_~eáåjª¯û_ÑnJ‡œ.=ÝÂ[û »ÈžEýG-É ”¾N×€±2MImÁ×NÆÏHœéÖé02‘Î(wTÒ”¡zœëkÍ*HlÙ¨íʈù‹ä›´ü¡ýäzŒ\æÍ­Êl¿ÁêI÷ìy›§2ê3:$Š‹SŢ̘jÎÊ%8Ô.ŽÓ³M«Q3´4ÐQõ'$@i©oMn!SÃÖ¿q1Ùâ÷d=ÇÑvÆ_!"?,5ìV  ¤r+ƒyý½þ×m\F€µ@T{èÇrþoX´ÒúÜÈ6‰/®"ä”]¯ùÖe›£sÈŠw¹î¿æ\9 KêêRw—ÿ¬AÄbÏXqC,Hz­ãPh#¥¡á4 ‰ñ-®¬{´ÿHâibC"]~ø¦Ñ–\r1ç³£q¿G‡í:åÄ™K\fšrÕRUê0(„m˜›ã/öORl(è7¶ÝïÄÃA@¼ü|;ø|»¢Í|EC°xq6à êº]UF3"8/³©Âø9«O3^v™.Eÿãg`úŲÌqgƦ{“ëÃȇs»œhÜ þ¨‚öËö㉳aÇÙc3¨ZRz€™\A{ÁHŠ-' Î0ë3–þ®˜P ÍÂ&É¡›®Í©|’ZžŠ‡§^Xs²ý˜Uï=?;?sÎ*÷óBv¬'¹“éêºË¡äb îM7záu1c@JVh4MãÐt ÷YËIд/h[åÅ&–ñ¦­F¿Îz"psÍï«ä€nË#ÛOHªPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKT|å+ ¬%Ñhfø`)D/?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic î›ùš[ 'õÑ»É]k…à]…©›ïÃÉ®ßPئrñó ”ÌšþTÇ`ÒxLo›÷œîç¯P³’èHã6XQqO”)¬±cÊAåŠï…÷e‡êA@ÆR6Ø@bdr®œDù´…žSà›¶æÞ+ ÐFm±ÀýëeH»MÊÆ]‹@˹Aþ ‚aöÀ '³Å‹épÞø1$¶×Ž9“ÁEKiJ”g‘ô´æ‡Kþs¡/Zȸ‰¢ž¥9ÆD¹(£2ô3*2fa»ÂVŸ‘–Žü¡¸¤0‡Æ‰B3Iÿ3=M˜´á¡(ÛÈ@‡/15‹¼0†¨ì9Ø1Ï>=HÏ9$‚ œ´$èç¡ö˜ç5!>A3õÄöÁM4·+XHi>Õ)8VËÄÃW€têå«ÈHaf!\»ëp ³]ô}ßÈÂ(ÎÃw€ÒAUB³#üXOèo2íz=¨ÚAòCòßYàœ™k-J¡ü)J¹¨|½—kyÀP©Ö¤ øâÁ¯ªiáÅ-sw^ @C[ý¸­Ôªof[­©Q;&¢e9BZÎ †F0 ]ƒbÖž5’¢ p ¦Ôºl>´(a)‡²(Ο¦Rq]ßôã°$r’:E¨tŽ•Ô¶£…Þ¡‰Íʾýe“D!ø$\–„W‘vxm]ÒhúåÕ@%¡ž73ñÑJHHŒ¯~š!ðFÙKî/>AE'ž&Çǘ0’ iÆš¸Í1á>SÞ0Ѿ°‹Efá32©w<±Nûí*c:’,5É ÁåèÿçÆõ±ã;Se¶óòÕPÀ2–C*hãš^!°Aè9Hõƒ‚f×IݰcЍ·ï2×v DfiZs¬&$‘ý-BH’D”cˆ8ҿݾÁzc L„Ü¡O÷pL¾d• #ݤ¸Çéü®.—†aF±ê´Áï 9ëÐÍ¢;—— ãâÿÈÿ ýäDLAÉxÔoé¼³­ì8O<[gº®G¢¥ëŸÜ7ªÐ²bCsúÚ†çzém²ÏŸ'49(Çß ëe\Åh³Üh'Ižr;š4í)!â7^­-‹%ñ^…®o±9/^éPAR2PKT„y7téX%a¹W!eÚ@£¿?¯4Íÿ;IéŠi4‰PAR 2.0FileDescAÕq}¶òv>pd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|Mµž©é\ ù†dý#qW?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic q÷1 4´:žÓj;wŠòBCéQf–‡ç0ü‚À¨ 2¯kŸJHе[ÁÀ‘Ü&E‰ú¶˜Ä&IÎé^Ò‚¶žÖÉÿ¯>„¿8#¬Ýûz…l+»ôº)€‚ö¥ Ï÷¼}íìÒàÓ¸nœ›xÃõ¿Stî“ê»J¤[f} ‡³ ³êàh:ši³ÿµ¯4M¿ỗé×$BòÈöp^ þ7’)œµÜïYù'j­äЈ/+ˆäGC̰N1G ê@×ÂPN¿ªÄì{z=è©*éT6;“•K^cñr郬¹;Ê"ò·YGÁ.¦î*妋`¦„Ãî±l\“špÎp·ñÕùeiÖž¨Á‚—+ù8c•àM”W3”évRŽÈ«lF½_;ÆQ°£Ì ÖÊ>ÙN™*ˆ·îÿp9T4Ìp!cy“©$_úx—éÚ×»{ocÐØ¾SÒÇíFP:"iÄ×n=‚2.iµ2 }ºKÕ¾oihù—-÷ü¾5/çÒ’iÙW+½ìuWéd£7|ÉîÃ&j.ÎÑbOM¸§}†€ÔÆþ8b¸Îwikƒ¼-ãDoËÁQˆ¯L¸Ç÷Ú@ú3P…ס"1DWÑ?€TJ÷Ë‹&á´”z.‰ðpøLæÈXUS€*¹îGEwÏÔQ3êZ†Ò®Ž“ŸEÔw8¾}±æ¿@1"ܼÞH]§DŽY;¹)ý«q‚e;;ûV´FYªAl„l†¦Âs«Á‹Å*ãôôH柛£¿Ùü[U=G:,†1ÛD÷ýš0,O0¡ºuüu—Ÿœß^r×öX™ô"Db a»kP$­ô¯Ù·‡ò£j-š—ÄB¯ê»Á(°Ï —ôÎÏÿ\!;¨ïiƒìü¦±.Îí±‚ÐSNâš" êÁ%€QØ)ß»À,ÌÝæÔH¸àZÆAºßü&;ÕfüwÙQ¤ùÝhʹˆòº±^~(GG€iÇÇ›XVëF6Èc¼iЈèÅL{JÔW–™ß_ƒÃfò´Ÿ÷Z–Õ¢•XI0÷ ªýžÜóÅ@ÍXÉ#¾W`là¡´’»Ø¤cÌÖúÊ/x,ʸ³Ë ¸iÏH­àÝtløLãVþþÓÊ®óŒ OÉ¢i·8e'6× ?Ó[7öñ6[oH Çæ3–yeðܹ]m¡û$GØÜ0ô‰•¸a¾Ó"! ÃRæ%N²j[Ó$ED ¨§!¤L@ïÔÄ [ïœA×Ná³Ftøt`vÄ4£'yr[ô— ìa}O”è/j×îûøÐŽ+€ˆM?Þ‰‰2 í-lx·vp%ë÷›ã“¡Œ§ÒY µ|h8p¯Ÿ ŸFÐ$•˜3àL3žÞ2HCñ2ͦ­Q:è¤Ýè…~êý™¥[R„|º:@ ó\xïIMd!¦ùÃé„òN·8Ø}ç²D¦½ZŸÍÉqpÚ>5¹Îñ"àõß`È%‡—ŸA ngrëù³2•¯?^,‰è~çE*Lô¬p‘ç¾â"/_î‹ímD÷éØc„#Á}JZWüu§ÏΙ1è´_> yé‘Z 2IƒH\Åé>ñj¥!íNøw ö \KZ üÄa( ‡p¯?ü±º«PAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKT|þ”Sä¥Y‡q .ÿ:×È?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlic +ß*Á©@¹OëQ‡)eÊÝÃseèûïÜI@`úšÜ|ö4±k…ÖîàrþMƒVJÓ¥ܵ¥x”²Ð…§‡)êž\Žâ+ì×Á Ib?n÷î_ ö+— ¾n HSñ|Ör®å­BLz0²|íÂø0ÑWÎ[j±8̆¦/=±×i/±{#ž@:AÙåñMÖã›þ4<ÆÞ q©¼ P,ÖÄÆì){ö‰0rçb/®=Û­’^±äry¤s•‹ãÞ{3o:”2†U±–¤°%K÷‡…=›f0¼¾UbjF‡;8,\C¢µ3”~–È)/"ê÷m=b«“fè‡q@”uMušy¼V픨q*qØ@&Œ€:ð bÖ¥»“Dþ3ÙçÝDêÅ®ÏQe+,nÿÕ“Ë(1 —/ªö 3þ®âGG¨Ã‘>ÕŠWàW.¨½ªfDåÕ^_X´Ï§›?!6˜Îtk»–™P-_¡ûfîf½ªÖcÜn&`£“uª¥­Ìó(ž¶ N€Ò aý@¨bÏî[”ÛÜ·(/8“{¢w{ñ¶j%WVÔ"k¿ &Jm§R2ÙTLíÒ¥mz»˜&%ocܨä"ܨ계®Œm´¦]õÖC»Ÿ÷üë¡àë?Ø: µëµžC~l´"WQÇ#ûظòd…cIBk®:lÝÉõÜs ½ß¸·¬äý·DG›Ø_ų2Å›$Ñ B;o/øâb3áRõ͇«b0©?³ÂÖÏ[Lõñ_¢õëŠÞ `¯Ø˜ÿ¸H³Éaµ‚¸?Eòÿ¡¾˜5ȱ•=»Ì/óîw½|….±ù®Ë'"éâíóš•zß V/ba€¥-OÍ*^¯÷|ªuW±ŽÝcÞ0›(”þµ¦VÕ8G;K–IâŒFÌÙp¢DÂ&V9)Ç¿Ê"”oàxXÎ{~ñpâCMHMª,NéÀ/ \ ÎñRð>˜#7;}SÆ18Á*êqá&E}ËÓ2qTà²R`¼Ò"šw‹_lË”ŒACÎÏöh$ÆÔƒ7 9=¼_fÍÏœ4â×Ê£öʰdƒsІ¸M ŠQkƒíMáXHÑÀ4˜ÖJŸ*úâF‚Ÿ¨û .ï1Íöòl®Ï³à,’  ­1¶è^* ZÉCÄh‚ £ŸÀ÷¹(̳ÊNB›aúÎwôêØOªÓÄ5e1Û4[ž-}Ø´ðXfÀ“Ê €P«2Ò/{r{d,†kT®Q­ÞMÁ)&m >ÎxÐÉ`VÏ‹ó Wçƒ}œ¨îdzŠsË9žC^+5ýôšƒ?Ré¢W3[K¦|ɧ[èU¹m‹!›ûBPo<¬0$»¿#–—ßü¶QggÉ1ôY†é±Ã©ÃéÎå²á†L7íÄÛx2¡! Åà.9ÛÌpQEÃXOm#Š£’:´¯¥6‘¿çµêŸÛaóbq°·) N;ëDëJ‰•p·$ŠC—*‰øé6%8T¢4=Û¡Ú3«ey›œOÍ/OååBì“MLÔVï]´ÎßClõJÓÕ¯.ÒÇPAR2PKT„y7téX%a¹W!eÚ@£¿?¯4Íÿ;IéŠi4‰PAR 2.0FileDescAÕq}¶òv>pd ¢316 yvçjŸµ~´¾#ä£ÈªB=4û t.q19ÿ<ŠKjoystick.jpgPAR2PKT|ÙDŒì[%m‚1ª±ÔY?¯4Íÿ;IéŠi4‰PAR 2.0RecvSlicQÏ›¾%UŠ[Ûι¿Ö¡;¥As£ªK›ÖìÒ,$à¼ÑH†•¦‰˜NXö[´‘ãüܧ¸pg`Ó`…1)ƒ¯–8Ö°Lâ>€Ç2´«yÀà9LŠëÑY&ÚkâºÊv“Ô)+Ôrgs³)ûeä+'ÉÇÙüàíD˜Dø8 lm^›¹8xûêücìÈ0á×öjHM£ð¥ôèð^ªp%‡i<§,¹²]+[©ë­¾•ÒKˆÈ<=±ÿ¨U*tô?}œ‘šLU…£Ï2)øðtyãS˜üyvÍ,’ÙÛ2fôÌ9¹¿ÍÞ Y«œi£â³s0ÈÒ/‰IÙ#0ð¸uvâÍ'~’ AF¸(²3†`î½"}!²²êJ¹K`»qY÷¾~N£×þ–]Öí_õ¹fFø \ÐK!¦*aâhp:µö-õ†¥ÃvËÄ?=•ÀÂÖõT\k«KܲŒ¯¾Å´,Y‚~{‰»üÊHŒ š†vÌ âqnøœ|@x}ìxª~N!W*¦»G´ý¼y³'YYs^h› 59{n}ÐhqÆÆ¢pÚ³T¿Œ Vˆ »Áâh¼“qc¨ŠÿÁ3bì˜±Š§p“¿átD¡ÈË!¹xsÌgx‡ÇLÍ…×Ó¤B¦5MS1¤²FXÌ8"R¥oÚì'‡½”ìäkõkšï?‘ÝæÔ/'XÐYÜž’Æà)ÉS S75„Ìâ·.™(‹ sKt<íæN¹‚Ê£G _žÜ뜡î†$®s«ÛfÇ-øýÆ÷LB{9·ï’;f2†ÔýjüÀ‡bâ+¾™á¯lUÕ¦^›;w»¤Sxÿýæýèuåu£BßÁ½G•óÄŠ Ç kõn¼æeÜ 44m@j«k£ó“‘06¾}ann*…œ2"І°ëêàÛßÄF¾šÈzÖ‹\ú·k‡Á"(2n¿ÒÙ6ª‚½H2À¡!ywÏãN–  2t-zÔù±L<#'š“_°¦õ](ŸÎ#þþO(c8¶_³ÜªWÃÆR]ƒ²úEs©Z‘}<<úØr0Ÿþº[ý÷$éšCAK-eά¾ÙÉèÒ—Ü Ì3ý,ÏÕ–~ùnÙ …V%¬.E¥ôi*‹S3œ™Ò'õXéQ¥^>ãBf”ëÙiØWfp™_Ë_Ÿò$wÓnI¡ºÏG ;霩vÃM›`€w¡ÿ”ú _6ð©sW|äAíLÈÿï8"è«äUÏÂ/„3†nñ܆ðyøY"ZY ºƒ}µÙ: ÝçœV O ˜NLÁž¹!;^cŠW==jâÏ!üý r”3Ï»…{è´'õ’h-’œegUP²ŸgœæRÑ…H»IŠ!»dÔîåÅXƒ±Má\B8]„EÀr_e:A:2Ö’ÕJ#œe®žû"t·À˜'yÇtA«ñ éÂñ¤Šs–ؽ5ä Ó«Ç2•:`¬Cµ5{}B¥K ‘ Ú÷¨ê¦Î{ b³Êßõ-KÆÒÓ£‚%foñêñ×m •$ƒ†=~PnN$”è°9ÝÒªuÏÁ8+ߢÓ÷³±.‹_&A6ýrǺ*!…êîË S„2ŸúçGX±ņçé8kò/C}³ø—l\ÿ…‘ìÁ§÷õЇR0ú¸@º“›Óú^ó0H£öŸ‹¼Ïz–Á0‡#|ûL/»‘âU\ÆkPgg¾%K/õG´Ú Ÿì“ùñLŒù,/tblÃÏPAR2PKT|:À!+ó)4¡bn½Ø7?¯4Íÿ;IéŠi4‰PAR 2.0IFSCAÕq}¶òv>pd ¢õMÕ³+8³&Úó„õo;$é¥9‡…ûÈ}úÙLç£À¼t“AS\Z›CËM¹þ»g*œþCd?J¦‘áõy—ï}²¨Rž)Ôi‰ªßª´LÝ!\†²\uf09»&ûâWÓc;4ˆ;a^ò±. ,‘]ÚÞ­ƒS?e[¼·ëøGüp’¡1:Z/$APAR2PKT\xpºÈ@³òôŸ#Êñ%t4?¯4Íÿ;IéŠi4‰PAR 2.0Main8AÕq}¶òv>pd ¢PAR2PKTd\§º´‘Š3—¤!¿?¯4Íÿ;IéŠi4‰PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/0002/uuenview_uue_mime_multi/0002775000175000017500000000000010162001761023157 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0002/uuenview_uue_mime_multi/0010000644000175000017500000003727607441647421023434 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: [ joystick.jpg ] (001/002) Date: Thu, 7 Mar 2002 11:20:59 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 260 Message-ID: MIME-Version: 1.0 Content-Type: Message/Partial; number=1; total=2; id="UUDV-1015500059.19338.joystick.jpg" MIME-Version: 1.0 Content-Type: image/jpeg Content-Transfer-Encoding: x-uuencode Content-Disposition: attachment; filename="joystick.jpg" begin 664 joystick.jpg M_]C_X``02D9)1@`!`0$`2`!(``#_VP!#``L("`H(!PL*"0H-#`L-$1P2$0\/ M$2(9&A0<*20K*B@D)R7J#A(6&AXB)BI*3E)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#Q,7& MQ\C)RM+3U-76U]C9VN'BX^3EYN?HZ>KQ\O/T]?;W^/GZ_\0`'P$``P$!`0$! M`0$!`0````````$"`P0%!@<("0H+_\0`M1$``@$"!`0#!`<%!`0``0)W``$" M`Q$$!2$Q!A)!40=A<1,B,H$(%$*1H;'!"2,S4O`58G+1"A8D-.$E\1<8&1HF M)R@I*C4V-S@Y.D-$149'2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@H.$ MA8:'B(F*DI.4E9:7F)F:HJ.DI::GJ*FJLK.TM;:WN+FZPL/$Q<;'R,G*TM/4 MU=;7V-G:XN/DY>;GZ.GJ\O/T]?;W^/GZ_]H`#`,!``(1`Q$`/P#UAVV+DG`' M>@9/4'\J4C)'3KWKR+0]*NM>BOKV^UK5XIC>RIMMKHHF`1VP??\`#%"BV[#; ML>N9]C^5)N'K7FP\,7T6#9^*]:A_ZZS>8/RR,U,FC>(E&%\:7I^MJA_F]5[* M?0.9'HF:0L/7\ZX$:9XC48/C"[P.I^R1?_%4G]F:S(F)/%FHL,]42-*/93%S M([_.1QG\J/S_`"KSP^';LG)\5:_GVNL?R%5G\&+-\LWB'7)@>QNAC^M'LIAS MH]+R`,G('N,5"][:Q@E[J%<=EH<-J=DI][A/\:EAU*RN/\`47EM+_USF5OZ MUP$?P_\`#<>?]`=L_P!Z9C4A\!>&G`_XEN,?W9G']:/9/N+F78]#5U8X5E/T M(IQR!D@_E7G8\":"G,-OA MX-%><2^"K*X7;+JFM2(>9_FM,7X?:&/O&^?UW7)Y_2E[*?=!S(](\U`<% MUR/<4X<].:\T/P[\.8)^RSY]?M#4^/P'H,?W(+E1W`NG&:/8S[H.9'HLDJ1` MF1U0>K,!4']HV6?MX"\-O_S"P/\`=FD'_LU/C^'GADX)TS/UGD_^*I^R?<.9=CN7U"SA_P!; M=VZ9_O2J/ZU$VN:2IPVJ60/O<)_C7+P>`O#48&-&A.>NYW;^;5;3P5X;0AAH MMH?9ER*APMU"YN'7M(&,ZK8C/'_'RG^-2+JVG/\`'I!_R`K'GTBQ6;:74I&[_:=C_S^6__`']7_&G?VA9Y_P"/ MJ#(_Z:K_`(U@CP3X89X^5FR MNI63N$6\MRQ.`!*I/\ZL!@PRI!'J.:YYO!/AI@0=#LN?2/%57^'GA?.1I"(3 MW2:1?Y-5*2?45F=63@9P?R-,>6.,?.ZKW^8X_G7+CP)H:*5B2^B!&,1WTH&/ M^^JI-\,?#3R;WM[J0G@[[IC5V?<#LH[JWE;;%/$[>B.":E/(KS'Q%X4T?PY_ M9%WI-F;>Y.J6\7F"9R=I+$CD^U>G'[Q^M%K!<=Z?6O/?#">787BGMJ-R/_'Z M]"[CZUP6AC$>IK_=U6['_D2M:?Q$RV-4>U+]:0'H*6MS,*7DTE.QBF`WZT>P MI<4E`!1QBCK1B@`'TIXZ4T"E!I#%HHH/`S0`F..*!2T4`%(>*4^M-)H`2ES2 M=J.?;\3C%*X#QTI5Y/'-9TVO:1:R>5/JUC'(/X3../KCI5^RFBN(?/MIXIHL MD>9&X93_`,"'%3S(9.D?A]?45Y]3$:V-8PZCIB(I82WW3 M\I],U/D!A@X&:JWQW6QQP0<@^E9S7LA3=SD9_EFN"MB>4WC2;1I6LG^BISR! M@^V.M2F=4!)(`'4UCPW+?9P,;2S'J>0"U/4\]*]&%2[1DT<=\00!9Z(,]=9MN?3[]=F>I^M<-\49OL_ANVN@,FUU M"&8CITW=Z[DGG\373>XK#C7`Z(?^0OS_`,Q>\_\`0Z[XG&.,\C^=/FV5 MY<#I<:C=2CZ&0C^E:P^(F6QK#M2TG04$UT(S'#MS2MVQ31TIV[!Z4#"EP*3. M>:7!H`0@48I<&C'&*``8HP**7M0)!2\8P::2>U`.1S0,6BBB@!"1ZU6OKQ+* M)&,3`M@;&7R MEP.YW$_0?6HF[(I#X=(\4WGSS7FEZ8IY$44#7++[,S$#/KBD?P=J.JW'EZ]J M:2Z=&/EM[%6@\\^LG)XQD8!I/^)7:^)/^7&]O)+O_KGJ,)+_`/?4D8S_`+($ M2_QJ>:\NHSZAHT!_M=9;Z26S>>T>%66QF-S#\IV;2H!+#8Y+';P1M;//=E'2 M6WA30+2,)!HM@H`QEH%8GZD@DU6NO!]@TPN=*9M'N^AELE55<>C)C:WUQD'F ML?4M9U2TN9+$:G%#!;SO&U_=S1VY8^5"ZH7,3)D^;)P$!(0'/#;JDEPU]?70 MU6&QD*02RF.XMF^SK/Y%EM=U*[@%,C?,PW*A.2`.`"]K>D-X..T3R7O+C)OI0SH<'RF:<'8C#9L9A(#U=<6]1TNS MC\66VG"V2:QU=9;BYM1G;%+'@B<8Y4MG:<8SU]:RJ*ZN-$T.O_OKY]4@73Y= M/=(;@>9YL1ZU:M+^WU&&4V;L9+.3+12QM')$".C(P!&1G' MK4C>&K!-,;3K>)H+<&1R724'(D#-D[LXZ^E9\OAVUFAN([BYNGNIYXY9; MMRK,Y3_5Y7&TJ,GY<8^M>745-WOH;QOT+\EQ)(FS)^H[\9_ES7.7FHBZUT:' M'?)8LH4SR%U69W;[L46>C$$9)!/.`*BO9+31(-(TM$NY(6GE>:"S`\^;`9OE M"!<#>0,C&%`'R2)(D)MGG7+([%E\MG`QZ8!P3D=:WXF" MEFZ/M[5))-Y7/7VJ&%O+C8L1YA/.*;# M^^?S&.$4\9[UPM=A6-".0E%R>:D$@W8SSCI54O@84?,3V[5)%%LRQ.6-=M*L M[V,9(YGXFK&_@'4V8#Q-]^/4;E6'H=U=L/B,Y;&[_#0!0>%H!KH1F`ZD=A1N!!Q1G(I1 MUH`4=*7)]:;3@>:3`4?6EHH[4#$/2@'*TM-PM)T.!3LT"@!`3FEJ,=J M7(H`5AV]:JSVERE[!J&G211WT4;0[9A^[GC)#;6QR,$9!`XR[:AP/_`"'R/UJO+KWB'3AYUSIMKJ,'&^/3F831#OA7_P!9 M^&#[5=##&*LP9R"*S<%8=S,M_B/X9G^5]0>WF'#130.KJ?0C&*N?\)5#)\]G MI>K7<`QF6.S90/H'VLW_``$&M)7DW?ZQ_P#OHU*OF*,J2X_VCS6$_=*6IDGQ M+)-\NGZ+JES*>`);CVDQU.]U#57@.I3*(1'#DBV@!)"*Q` M)R3DGH3CT%;?G*YVDX;^Z>IJG?(KJI8%6!X?TKBK5=-#6,;L65S#(8]V4(X' M>L/6;XV5KF*/S[B=U@MXL?5XI M%-K?QW5M;26$KNC7C%8'#IM(+#D'Z5YBG&55*1T\O*MR>TL[;1K>[U+4+DS7 M)3?=W[K\S+V"]PO&`!P<5J>%8KF33'U#45*7-]*URL+I2K,5N:]KVF:EX0UDZ=>PWA:W:W"V[AV\R4; M$&!SRQ_GZ5>MR\-JB2/AEC59#GC.!U'UK&O2A4LYH=.36QF6.HVFIQM<6-U' M<0@8'E-D^P(/()].HJW'(Z@[F48^^1T7T'UZUE7?A_0[W5&\DBSU@*7+V,GE MS(/[Q5TJ`83)P,C@XKS*N":7-#4Z M%46S.DBN,D;4/N35M7>7Y4X`Y+$=?I6;$Z"-9CMD#C(AT4:W<_S6O13T_$?SKSOP MZI6Z\2`C!_MJY./KMKNAN92V-P_=I*7^`?2D-=",P!SGVI4*,B*02P'LY^8#T M'_UZMR7H92K1RQGW4X_2L/6=1ATK3;J_9@?(0N%!Y9B<*/Q;%>-5DY223W.J MFDM64]0UH0W"Z?90&^U&8$I:GY1$!C+2$GY5&?Q]J=9^&]\T=WX@N$U&[!^2 M-LBUM_\`<0]3_M'ZU/X;TI].T[S+@A]0O2)[N7H7=N0O^ZH8`>Y:G_\`"0:: M]R;-+I&N?.%N8!D.20<_*0"0/49'O7;2HJGLM>X.7-N2Z'.EIXHU6SE<1"^C MANH8V&S>^TI)M'KE%R.O?I7%^,]-U#_A.KAK"26\>:!)2@5)#:YXVDO\L8/7 M/%=Q>V4=_"$E,BM&XECEC?:\ M7B*L,49./M.W(#R[B$48XQVKLC*ZL8RC9BZ7I]QIDVGVNLVCVU]>:E'41\V.IZ\8V[3Q2=?U:;2]!N[>U:)3BXF0O)*!G/E+D+QCJQ/ MTK:U*PMM3M9+.]@$D#G+1OD;<%7:&903V#']372VL M#[!YK8/]Q>E9-A9VFG6L=M:X\M.&)\81-8A!/IG/^%=N>#^-<%\12RZ'83L/EM]3@D)7J M!\PS^M=Z?O'ZU[.#=Z2.6>XX\BO/M#;=J/B+Y=O_`!-YAC.?X5YKT$]/Q%>? MZ=^Y\1^)K8`_)>I/T[21Y_4C]*[X;F4MC8QQ2$4XX[4A]ZZ$9B`4&BE-,`'2 MBC%%*X!1GM11BF`$48XI:!WH!"]Z7&:0=>:4_=XI#$'44ZF\=C0#[T`)[^]/ M!IAZ<4Y2,=:`'@\#BK$#J6QSD>U5AT%6X2!C;@GT%2]@+$<@R>*L%7`_UC?D M*HF696(C=%'H4)-/DDO$0LS6ZCU8D#\Z\FLW=JQT06@VZ;;_`*Q\G''[LG^5 M!_*J.H01W5I-#WK0\+7+;K4O,TZ MWC6[U%#B.ZF4Q1O$"1YDB]5QP-O4EA63XX35(8I9-24$7$`C1[6(B*41OY@2 M1'.Y2/F;()!&!ZFM77M5TZ]\+:AJ6FRQ2R7QBMKB9\YC&2`67JI4$X_/FN/C MG5&4C5[4;4*8(\S:"NUN)6.,C@UJEU1+[%NP\11VNG3VFL7VJFU,A3R860JT M9&=I+?.,CWJH8X+R\@L=.%Q>RVLZM:QI$VYX=V[&"!M*\CGKUIT4'EZ?)9VK MV,DE6K'6;[^T=+G6VU"]AT\GS3&N^7;@@AV`(QT`4]@ M#WJK+H3=L]"N(=4UJ1O.)M+ATC2+ M'4=)MUA;193*L2+D-$V%D!SR3@`Y.3P:UM#\06.O1G[*66:,9>*10KJ!QD8X M*Y...GH.E:DT$=S"]O,N8IE,&10T95@`5( MROZ$58A++]V$$X[R9KG/#-X(_#]O:W/EF:SDDLI'SD$QL`/ID$5TEL8ST@R2 M,C`_6O&E!PJ69KS+E.:^).]O!-V7B4+')"^,YS\^.U=^>I^IKB/B.H_X0'5- MRE>(<`COYJUVQZG\?YUZV`_@_,Y)O4>3Q^(K@RZKX^\1QC@F*T8^^%8?U%=V MQPIXS7GCQS2_$CQ&(GV%8+?G&>-HKT8NSN9LV]W'0B@-ZU3>"X8@?:F#9Y(4 M?RI2M[#R&CF0=0_#?AC_`#TK55$B>6Y;W>U&[VJJL]P;#- M&WHR$_RJN="L6,^U+FJPNB_^JMYI!ZA,?S(I3+<#DV,N/]F12:.9!8L9HJL; M^W08DB]>_'>K1T_ MQ);X\F_TV\QDGSK5X6)_WD8C/X4FO(I/N.W- M6#>^([2&XGO;'3;>.+^%3-)YONI0$]?]FE@U;7[F-67PWY.X9W75ZJ#\%";O MS&:FT^B+3B^I);^#M`@M$MCI-K(B`C?(F^1L]=S\$DGGV[5J:=I]KI5J+;3[ M>.UA!)VQ9'/J>>>W6LXWOB%?F;P_"X'40ZBN?_'D'\ZKWOBFYL$7[1X?U&#< M1NEGV)#'[M(&8`?@*GEJ/<=X=#-U)(]-^)NDR6_RMJ43B=%X4M@C?CU(`R/4 M`UV(SN`'WL@BO/?$EYJ$?B;P_J;Q:?;YC/DRM.9X0#U9BH4XQ)'C![]375W6 M@>([ZWV3ZY:VV2&9+6V9%<#G:7WA]ON#GK0X-@II%?PQ8H3X@A=`3_;$Q`QR M0RQGI6K+H<"#_5!?H2:70M`BTP;IK#2TG5ODGM+Z,^9GG7CFT-KX)U;82(W6+*]>1(OK7HK??-<;\1H6E\*7-M"/WEU+#!&.VX MR+_2NR;[WXU<4DK(3=V./;ZBN+LT9_'WB$KR$M[13[94G^E=HQP,FN2TF:-/ M'OBPS.,*EF!G_KFW%-B+HL'W*=O``JV+/(&?YU;-];;`2ZC/\)JAG3K3GTX-T_G3+;4H'`+NB9Z9.#5F2_MHP"9DY_&@!\5LJ M(`0#4WEK_=6J)UNR4D-+C'^R:M+=0L.)HS_P(4P*MU9(S%M@)JJEK\^#'@'C M(K0FOK>(@-*N3Z'-2H590P((/(Z=*`,_^SUDXQD=\TG]@6CC+Q[CT`W$#\LU MHM-%$/G=5STW'K5:35K6(X\P.?10:!7*9\/1+S`3$?5"0?YU!)I5]$01+!(! MW93FM:+4;>8D!P&`R5/6I&N8"O,B<^IJE*P'.B4@9EB>/]:?%/%(2%<%O[O0 MUKF>V8_ZR,'V.*S]2>V,>$*O(",;#D_G6D97=B6BA>?.T,98!';+9]NWX]:V M[9X8H58-A\.X^4H8P/!A\Q[U M,MRA/+5S)ENH4+/&&0'K'N)^M$>I*6'/7_/2L7%HI,ZP,",BE/2LB/5(8X1N M;D=J;_;UOLSAJDJQ?O)1'$3GFLC[=GJ>/I45QJ1NC\J@+CT.:S7D*DG(QGUH ML!T-G/\`.<]#BM5&&T8YKEK2<;ERV*V9;M88T"$9[G-`,T=V>A-)P>O/XUF0 MWI?>21M`XI\=^K?+CGF@1I9/O2!=I)`ZU6N;L1*0N,TRWOE8`.>3SFA,#/U? MPO:Z[3SN[GBFZ/X3TW0KM[BPA9&9-F))3( M$'HI;)`]>>>/2MDW47(WBH+B\6-,IM;/7GI3N@+@(&!02*Q_MCL2=P`]*J7. MIL@`$G.>U):L"MXY5)I/#D!.#+K-N?JJAC_,UUAZFO/-9N&NM=\+[G+?\3$$ M#Z"O0JH!6ZV=P$]LO'J(W!'YUZ&>E>>:+'Y/C7Q)L%HT;V89_GQ4T:A>`H`]A0.@I=V.M;Z$-B&-6^\BGZ MJ#2>5%VBC_[X%*9.O'ZTA;=@=.]%D(41_P"`#_"CD>]+ MD>M%D.XT6T"\B)#STQ1Y$. M!3#GUHW<8HL@N(\-O)]^&-S[J/\`"D$%N!@01@>F!3@03UI:=D%QCV\)Z0Q_ M]\BD2&.,Y6*-3ZJHJ4G%)G-%D(,9[4*HQR!^5&[`HW>U``0/;CIQTJM+:0RM MN:)&;^]C!_,58ZT=Z+(=RH=.B8\O,O\`NN/\*C&E(.L\I^A%:.WWI,9I60KL MIIIT(/SRSL/3S,?RIW]G6HZ0)GU[_GZU:Q[T8P,T[(+E)M+BW!HWEC([*_\` MC0UA,266[;)[.,U>'-%*R&F9YMKY1B.XC..2"I&?I3HI;R*10]NQQU8,,5>` MYHQR,]^]2X)CYV4Y;V[E;(MI"??'^-,\[4'X%N4'J6`J^<8ZDT"E[.(\?EY$4>AR?Y4&WN0,++$/JIYJ^:3;[T^2/8.9F=]EO&^7SXE&,9"'BIK>P2 M++2.9I",%G`_E5O::=M(IJ*#F9SVLQA/$?A78H'^G'@#'\-=_7!:ZQ3Q/X1. M.#>R+C/^R.?_`![]*[VL);E(<:\V\/7)NO&/C&3GY;R*/_OD2K_2O2&Z#'J/ MYUYQXVFGQJ][=P6P;E?.D"9]^>U2Q M2QW";X)(Y$SCR\^])@]#5$B8(Y.>:2G[? M0_G1B@!@`!X%.`X/%/QZ4H!H`BYP.M)S[U*0<#WI.`,M@?4TKH9$>^.M.7'? MK222Q(F=X)[!3DU&LDTA^2W;'JY`S]*7,@LR9BJJ2Q`QUR<4Q94;E0S?[HS4 MD5N9)`;D9`(VH.WUK7@2-`,!<>F*S=2Q5C'#!@?X3_M<&D=TC7+L$'J:W7MX M9AAT1A_NU4;3X8]6I7%83&.QI0G&:>3\QHSQ5B&%1VH(['G%.9L#)P` M.]1F1B?W<,L@/=0,?K2;2"PNS_9/Y4NSC.,#Z5$TLZ#+6K#_`($*?%!=W`#` MQ1#H/EW&ESI#L$C)&54G+MT7N?IW/X4W=SADD0'^)D(`_$U>MK$12B224R/C M'W=HS5B54?@J*AU1I&:&0\(RGZ$&H3>(K8^9^<$HA(%:)L;9WW>7S]>M2"%8 MU^153VQQ4^T&D<1X@G63Q;X0V'(^V/Q[X45Z*:X#Q8J)XR\&[>K7;Y(''\'^ M-=_4MW*%;I^(_G7`Z=QXV\88_P">UI_Z*>N];[IK@]-(?QGXOE_A,UL@/NL3 M`_SJH[BEL;=**4_>/IFE7)SBMS,2E!`X)X/;UP"?Z50U'6['29HX;AY&N94+ MI!#$TDC@$C@#W'?%934>FSWMR\YC_`+9^T,X:X@L=Z*AQA0=B]EX& M6Z5S*3YC=Q]U'JNUVZ(Q^@I.QSQCCI7F6IVI/XU+5QIV,S[7:Q@/`HR>\49/\`2GQZ@A?F.X/OY+8%7\,>,G\Z M-I'_`.NI=-%+B,$CNV#685/0D_G2,A(R>3[TO9"YA9 M[JU#G$Z/]#FJ;*C8-LC*PYW#I^-6@A^GTI>1CV]351ARAS7%#9_`"G#I5+5[ MU=)TFZU"2.206Z`[$!RQ+!0,]ADU4T'7EUI;A);7[+<6VPNAE#`AAD$'CT(^ MM/GC<.5FO(I9<``D<@-T/UICS7+8!BA8`8X/%3`(BQ[\]*.O%&/44>SB%P^V70/RP)CU+_\`UJ&N[S:<+`3Z;SQ29'2E MV$]:.1!S'+:X[2^-?!YN8PH6YEQM8D$X3'ZXKT8\5YMX^F;3[?1-14E3::DA MR!GMD_RKTH_>_&L9*Q:U'$8&3T'6O//#W_(;\5(Q)D75&8_[I5MM>A-T_$5Y M]IJB'QUXOC!X,EK)P/5&)_G3CN2SHSU]J4<5#)/';P>?/+'#$/\`EI*X5?S/ M]*H?;[N[XTFQD=&Z7-X&AB^H!^=OP`'US6MR3'\=VVGPVCZA=W-[%<7%N;)( MK;;B8#+@,2#M&>N,9%97A"QT'4K/R+T/)J,1(E@N)V"TA^SY\R1Y3D@@?>\QN M5(&>01Z5-NI6IP#011>(-6A@C$4,>HR*J(N`,#L*Z[PC*EI)X@GN9DCB66`O M)+)@+B!2>>_^>:XB"X":KJ$>GJ+B+[?(8IY)"R%>Q+=7]O7UKH_"R>1J^J37 M.EW&JR6\L#">$)^Y;RA@B(L!GT(R:YT[29M+X47?$NEW_BX6LNFP,MG:EF#7 M;E%N]V!\J$=!@$%L=3P1R7>&["]\*VUR-3MYIH9I`PELV\Y+?`(VE!\P]\`B MM]/$VC22M'+?Q6T_\4=ZIMY!^#@9'N.*U;=X;@"2">.7CAHY`W'M@]*VN8ZF M;8ZA9:JN;&[CN2OWPCO&'U&_3=_WPA.?Q>CF"QIOM&,$YK)\1WR6ND7,4-ZMM?2Q_N! MN(D9N#A0N6R0",X[U5-Y;79)EUBZOUZ%-+M'$9/]W=$"?P+`]/6K=E(ULK)I M'AZXC)&2[LEN&/\`M$DN??()]>:=[CL><7-GJDVA3W]]!+;QA=[?:$N&WX=# MPQ9@#D8Y`Z<>U[3_``XNJWFJS33V$207(!DO+9F.&08&=PZ`''%=-XQ&JMX> MF^US6ULEQ+%`8K?=([;G'!=O9>PYYSVJ'PQX;TN[AU-[NRCNY8KP1":;)DP( MHB,,,$'))R*RY5S%MZ&/X2E?3M;FO+Q9;'3HHGA+)$WV-P&5PW##USZ>]5QI3QMNM=2U"`@8`,PE7'I^\4G]1]:SG\.7L M;R2VDULDDA)>2V#V;L?4[2Z,?N?FY_3-=L?O'ZUA)ZEH5^$/<^E>?:+!+JGB_Q;C4?$YL;-+@2:O*?.>=403 MU_6L];/5[D@W6IB!3UBL8`/_`!]\L?J`/PZ59L-$LK*;[1';@W(X^T3,99?< M[FY&?;'2G<.5E==7N]04C1M.D,;9Q=WI-O'TZA2/,8?0#/J.M+'H4=RZRZQ= M/J3!MPA9=ELI_P!F+H?JVXUI2N5SE^1ZFJWV@94>AZTN8OV;/,&79XBUG!P! MJDPP!CT_QKK_``+SJ7B`YQF6W''_`%SQ7&AB_B'5LD_-J4QY[?-@G]*[+P6P M2ZUUQQNF@_#]RI_F362^*Y;6B1V4D:3H8YD62/H5<;@?SS67)X9T63DZ7:*^ M<[XXA&V?7*X-3-?%3CFF?VCSWK3F)]FR(^'H%/\`HU[J=M[17KE?R8D"F/I& MH*I$'B"[4XX,UO!)^9V@FK']HCIG]:7[>,8+#\Z5Q^S94ALM>B7#:U93>[Z; M@_\`CLP%2>1K:_-_:>F_^"Z3_P"/U-]L#?Q#\Q1]J&/O#\Z=Q^S9'Y6N@8.J M:$TF3^.[-;,;`]6 M'YU.O)]:=R7&QF?\(SH[$&33X)B.`9U\TC\6R?SJS!I%A:MFVL;6`C_GE`B_ MR%70.*#P,]*=R;%5QD\D\=.:>N,PU5]V3!X]%C(X-ZS?E$ MW^-3^`\_V5J3'.6U2X.<]?N_Y_"H3]X36AT[(`*39TYZ^U.)S2J,@<9J[B2$ -- Matthew Mueller donut@azstarnet.com nget-0.27.1/test/testdata/0002/uuenview_uue_mime_multi/0020000644000175000017500000002643707441647421023432 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@boo (Matthew Mueller) Newsgroups: test Subject: [ joystick.jpg ] (002/002) Date: Thu, 7 Mar 2002 11:20:59 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 186 Message-ID: MIME-Version: 1.0 Content-Type: Message/Partial; number=2; total=2; id="UUDV-1015500059.19338.joystick.jpg" M:-!K,F\%^';A M]SZ/:*WK$AC_`/02*V"<=^:!)CJ?UI7#E9@_\(/HR#%O'-;^OER9_P#0LT'P M=;J,0ZC>QCT#+_A6X9E!Y/-*)P?0T7'RLX+Q3H9TL:&YOKJY2;6+:,I)(Y'\ M1Z%B.U>C'J?K7$?$:7_B7:(R\%-9MS^CUVQ^\?K2O<5AW7`]Q_.O.OAW)NTS M4[O!VW.IRR+_`+ORUZ&>G'Z=J\G\&:[IFE^%]M_J,$$GVF5O+=\R8R.2H!/Y M"DW8N"U/0OM![&@73<\FN<3Q1HTH!7443<,K]H5H5<>H+J*U8)5N8@\#K*G] MZ,AA^8J>8V218FG+M[]34>\$CCIS^E-,;DYV-^5`C?!BH%.#S3U8YQM)'TH%8L>8VXC/3N*M2)*2?O=*SO,/7-21R.,D*WY4"-=)B,9QGVJS',".M8?VA@<%@&Z MXQS5J%Y=N[!`/M1S="7%&D]VJ'!-,-UE:IL=YYYIHR.Q'XU1*BB5W)S[U'2$ M\\&D)R",]J"K'+>-"SZEH29PJM$6,&D7+*>)-2N6QZ#>1 M_2LGQ5,)/$6G6YZQVTDI^CR(O\EK0\*EFT)F8XWWERX^GF$?SS4IZDI:G2&Y M/N:!=,.^*I;V'>EW\H#\5Z2?O'ZUYQXPB^V/H%D>?/U6($'H0!S_Z%7HY^\?K3,)[CA]X9KQ'0 MSJ%O;7,-LMOM2[E4^;(XP0W/"BO;6[?4?SKR#2HP&U9`23'J=PI/_`A6=7X3 M&>PXG59`5DEL(U/=4>0_D2!^=5ET.(OYDTAW\'_18UMA^.S!/XD]_6M;RVQ[ M4H3-?J:TM,O-2LS>I9S6HB^VS?+- M"6.>,_,K`]JHZ,@^S6I]8$/YC/\`6K.DC+:EDGB_E`_\=/\`6M971U3DXQ5C M4DU35Y`,2V$?J5MF<_\`CS8JN9=49R6U>8*W41V\*#_T$U)M'K2?B:SYV<[K M3Z,A(>)8I%:'4;\KGF.>=#^OS#_`,=K M=(QT./I3AR*?,@]I+N9ADUR3K>3H<]'O_P#XW$I_(BHO[*N)6W330NQ^]YGG MR9_%I?Z"M?O0V>,4G('.7RQXNKWQ49+U($E2W@0"!F*; M2SGOS4_AW7KNU\/:?`FB3SQHI(F6YC4/\Q((!Y_.J\+$^*)\`'$=N.?H])H/ M_(OV)XYB&>/F6I/1KJ[+Y M_P"`HN/UJ4WNK7D8+:X$B<YDO)#_(BH7@EM9L:8E\LG4R)?LJ`^X8MG\C6G@FFLAX M[?2ESD<\^XRVU+Q'$I6:YTV=3_STB;"51?`KY5OY?;O\`,<]:]:KR/!'B;PTP M_P"?\#]!7KE=%-WB:IMZL&SM..N#7E>G*5U'Q$&'_,8N3R/4BO56Z5Y;8C.J M>(.3_P`A>?D\_P!VE6^`F>Q=`Z?*:79GMBG`8`IR@DX')["N,SL1%>HQ45P` MEC=,3]V"0D^GR&KJQ,V[Y3D#/;\:IZJ,:+J1SC%I*<_1#1'<:1SNBD&UML'_ M`)=XO_0!5O0QO34FZYOYOY)_]>JNG+Y4$4?]R)%S]%`JWH&0FHJ1@B_F/YA/ M\:WGU.BI\*-+;_LT&+(Z5)2G[M<]SEL0&+%'EU,/<4NTD<(31<.4@\LCH.M' MEXXJRJ,?^6;9';!I0A/.PFGS!RHJ^7PN:>L>!4VW(`('YTXJ,9]*+ARE<0@M MUZT\0XX`J7;@9H+$=J5PL1^7@:.]%PL'U&*1NE(7R<@4XC(% M%Q6&=^?2FKD.IQWJ4"E4`_A0GJ%C"MGV>)-1+-CRS$3GT$0_Q/YU:T5-F@6` M_P"G=3^8S_6J9C5M?U9^_P`JX^D2\U?TA`VAV![FVC_]!%;5'[MS:I\*+F1@ M4F[THV&@1!CSUK&YC8#)QT_2DRSE>96S[/ M&/AK)&TW$P^A\K_Z]>G5V4O@1M'85C@<5Y;IHW76LS+]V;5;EP1T(W`?TKU/ MN/J*\I\.-YNC)-D'SIII,_61O\*5;X`EL:9JAKAN1HEV+..:2=E4*L*DM]X9 M(`YSC/ZUH8Q2'M7)'?4S3L[GGUP&L'6<:9J-FJ,&-RT3H4.>"<\>^*T+C7M1 MFT>[5Y;.[BDMG1GC7:RY'4D=3CMCO77M&LD;I(JNCC!1QD-]:\[\2Z"NB2GR M58VLV?*?X%&#VX%YD$:[`Q)SQR:M(U MM14<@ M+(P1,[2V,`\>M+DCV,Y)1=[&0VMRS*,Z];0]_DM0N1TX+_0TJL+I\'6YIRQZ M)L7<\ME-)>2#;#:MMA$48^7@2$;CC9P.>"33?$-U#)?M M#%8O;W&HP)`QE1,*XD`6167/.`PSG^&GR>0XS@G\(DEM;1LBM->O-)_JHHYY M7D<^R@Y_'I5;4;F\TN7RY;76('"%SONL':.">=W2DA@\^$ZO/J26S7@8);OY M@!B#84?NV#?PGVJ&2*U00R^=8;%D$VCGTCN$;^1J21VVY!(7U'2N5.AV4A7S1+*HX"N_"C ML!CM3I(UT6+[78;HTBYFBW,P=.AZDX(SQC'4^U9NFNAG+"2BKHZ1P<\@YH0? M-TIY7:.N1U!]10A[UC:QQAMX/%/88/3BC=C/%(6(.#0(!2]>!U/%(#UI0-S` M`@9(`_&A;C.86Y/VS7IBOS1O+@#J<1[1^6/TK>T^+R=*LH_[MO'_`.@"N?LE M\V#7921B62;:(_^."M:GPFM39%H=.?UI<#/O3032@X. M<5D8@<#G%&X=Q322!S2YZ4[`+VIAZC%*#P:-W(I6`#WI!UI3U)H[9)P/>F!2 MF=D\2^&&5L?\3`C'U517JHZUY+W\->M'BNNE\)M'8;,[-%+I;7;P9VK+\JJQ[=3D#WK)U;Q/)? MZ3<0)91PPS87S&=GYR#U`VYX]:UC"2:9I&#OQN55SH_$=:=INIWNAWLUUI,6#<)]G>(GE7/W3CN0>GJ*ADG2.46]XR MS!1E9PA7C.._/4'FM[PK;SQ:L^J)I]WJ-O;J%CDB*_+(2,L-V"Y"\`BG8):H MZGQ?LDTV2WE+274=O<75O,#\\3P[1R7]C]KP( M(Y[@%M_S;(U4HF<>@)^@JFS*$&V=%X>M$AM4N0/WDP^1@,%8AP@]@<;OQK+\ M5W,=S/-:N5EGA@6&)#\S&1FW,X'7A>/KTJRR7NAT)QIJ[-J1DMXA) M.X1>Y8X&*SVN)=8,EGIEO+,KC:\A&T`'L<_=SSR?3C%,TUU<;)W-Q,X"J MS-N#%FR"/3C-=S/J$L[MI^BI$!%E))U`\F`GJ0.C-UZ=*+FLZP*9'#$)\V%4L3CV')J"XO[2R;%W=0P$C@2 M.`?RZU0?Q/IR';#-)M;>D,YT:R$J/$Z0I&RNN#PH`X_*J$GB">53]ETV4L>AFE4+^(&>*)L2S(G^^RC^M8$F@M= ME6O;F>Z/\0ED(4_11P*FA\.62'_CUA/_```&CV'=@J9=FUW2HAAM2MF_W7W' M_P`=%0OXBMBO^C6UY=-CI%`P'_?38'Z5=BL(H(=D<:J/1!M%26]N`X6-3(QZ M!>3FK5!=1J!D+K=])N\O1I@,9YG3_"G"[UR7K1?#WMLH(X\NV!(_,F MF/8ZM@YU:<#OY<2*?T%;I7Y M)N&?,S=,?_JKVKK7E1E23QMX6\I%3;/*#M&"T?_H`KT/Q$HD\-:LC9VM9S*&K M$YW%%,9]L,<#\L5E5^$SEL:VPGIDD]JY;Q=K"+:2:9;R;II&'FA<\(`3C/J3 MQBNJ!*\@9(YQ7(WVDVT+W7VQY;:;[3)/'>I$TB,C$'#A>5(QUQCGVK*E;F)A MOJ;&M^%K31/#5EJ4.IF7S##'*LFUX9-W7R\`8P,G'/`YSWXZ=F%F-D5U;07) M4;<_NG!;KCG'3VJ5;>58G$"07T&3@V;D=1C/E@Y!QQG;502JGE6ZRR1J)DS; MS)M8<^W4?49KI9UIZ61UUL,7#CC_`(#TK&E:1!J+"UN'C:Y<&6&Y8$8*]$'' M?JC<^QY&?<5U'@G1-/UC3)U MU.>:.>*F.U9E]"FE76KQ(^\6LTL:RR$;W`0,,G MN<\?A3+IJ+T9S=W]E@N)3-''-.9&=T+YCC)/W6?JY_+'/7-7+'4)+F,6TT<2 MPSE[?$0*E&*\=2<@@FN MQ+MT!SVS5:36I6;"2\9SMMESGZR.,?B`:SU.Q5HI:EK5YF@^W2;EW+`EJA&1 MAW.3^0S4?A*!'\2AFX6W20J>N"N(P<'T!)'N?PJB]IJ&H6^8;65DC;S51%<[ MF[EB?O'%16RW9NIDL8+V-Y"P"H"I(.-RL2..1G.:T6APU)\ST*,2^;Y625V1 MKRO'.21^AKJ-".J2-&$D"V$./E90%[\`#')YY]AG/%%MI&GZ*@?5[J%IEP?) MW=/;:/F;TZ47>M7]TZKI\8LK9?NRRJ"^/]E1P.G\JB5WH8N[T.H9"L9/W1UR MW3^E9MQX@TNT;$M[&S#@K&"[9^@_QKGSIANLRS&2X.?O3N3SZXZ5?MM+"[0B M[3C/'RC]*E4>XE2)/^$FDF?%KIS[<\-.^W(^@!-037FL7:*#/'`C<8A3:WYL M6(_"M%+)J,6Z'GIQ@5JO:V>AB/[:!=7Q&5C!/EI[FLR[U*>\F MW3.-HZ(B`*!Z"@!K8"^W2K"WUS'"(HY!$N.L:*K'_@6,U2.<5(.E`#-N\LSD MNQ[L?Y5!)IVJW(;[1J,:CTBBS_Z$W]*CA\020*?[ M6B.1P;F!=R_\"7J/PS6S!X9KB0_.```$]!_C7L5>6I((_&7AAB>?M$J]/5,?SKU*M:;;CJ4FWN4M<4O MH.I*O)-K*!_WP:\F\$\>&HO^NK_TKV66-98GC<960%2/8\5X]X0B,&@B!_O1 M3RH1[@U-7X!2V-STX!^M4]5BNI].FM[6&.X>=3&RRMM4*>_UXJWWIP"G.<&N M6+L[F:W.#DT_4;6#9>:7'<[!A9AA6`'N!^M4I;Z1K?[,\F5?N2W&FN0>V MTC/6FR1VUO:M#=:W<+!M)6!;%X_,)'`P<#D8Y.>G>ND;PS9JFV&6\MSZQ7+? MR-,A\(ZYN)/[TLA/YTO:1#VBZ'G\;O'&K3C*,H5P6&<9.*N6>IW.ER M.B2#RK@8D20;H9E/]Y?7WKT--#TU%8"QA*GJ6&?YUGW?A"QGG,EK+)9C'[R. M,*57W`/W?K355,E2.4T?19-8O&BBD18XE!EF'*G)^7`)Y.,_3%=Y8:-:V05( M(/-8<&23!+?TQ[5FQ:II>C6[6&CQ27K1@D^2P*,QQR\IX_[YK+O+B_U2,I?7 M),1_Y=K==B?0MC+5+YI:H=FS>OO$EC`YAA,MY.HYCMR"%/;A7C%8EQH:Q,7\A5<-D2Q91OKD'DUT2@J3GG-1WBL8OE#?@*3"QA: M>]P/%OAM)KJ6XC^UY438+*>GWL9->U5XW;)GQEX:[M]J/'?@5[)0E8EC^G,@MY#",RA#L'J<<5X;X5UW3K'0XK>[O$@ MF5Y,JRG*Y(P>![5G45XD/8VHM=M93*-DH\E'DD^Z=J+_`!=><^G6K<=_;20M M*LFU51'8,.1O;:HQZDY'X5@K>>'%"J-3A7;;_9VVH<2+UY)3KDGD'FK$4OA^ M5K?R]9`%KQ%NN=A3.T]3@GE?>L%%$6-9-3M'E6)9&+DE<"-LC!8'/'&"II;? M4;2\G:&WG621%5V4`C`(!!Y'/45F8T,7L-S#J=I')",'_2(VW`L6/+,.26;G MD\U)IXT?39#,FJ63;HDA&ZXC^4*`".#[+^52XH+&T0TLF1#%&N9)#QT'8?4H[BZEQNFD/(`[+@<# MGIQ4ZZOI28+W\;,.N`Q_+Y:Z84TM3:,4B:*W*_*B*@_N+T%:%O8[D^88)S5. M#Q#H:'+7A7CJT3_X5:_X2O1<8%^GU*,/_9:TLBC5V+&<@=:"PV$`&L=_%6CE ML"_0C_KFP_I0OB72'4_Z?&/J"/Z4[@:@?D#%+M^;K^59W]OZ4%R;^WQU^_S3 M1XCTHD_\3"`?7/\`A2N!I$84#KS3U`5Q[UF#7]**DC4;8'/-=TJ0'_`(F%O@^KD5-_:^F$\:A:?]_U_P`:+@:$ M*/<3I!"A>60X51W]:[JPM(=&TO#8S&I>5NY/4\^F>E`HNXSL7TZYSU_.I/$OBO2);!+>TU6PE\U@7V7*<*!TZTR:C>-<2 M'AON)V5:K=1CUXJHVL6!D'^FVG3_`)^$/_LU(-6T_P#Y_P"TSGIYZ?\`Q5%Q MEX]!0HRW.:J_VK8_\_MI_P!_U_QI#J^G`\W]H#_UW7_XJB[`NXSQ3\$U2.KZ M?Y4QO$FC#'_$RMC^)_PI7`T\`\T,N\8-9B^)='F21_2IE MUS22.-3M<^\R_P#UJ+@5YXQ;^*_##K]XWQ3/L0/\:]8KR&?4;6]\6>%XK2YA MN-M[O;R7#$?=ZX^E>O\`>F2QQ!(Z?G5633+.=R\MG;NY_B>)2?Y5;-%,@I?V M188Q]AM<>GDK_A37T/3).)-,LG'^U`AQ^E7Z6G>7<#&;PIH+.7;1-.+>]JG^ M%5Y_`_ANX^_H=D._[N/9_P"@XKH**'*7<#G!X!\,JN!HMKCW4G^M3#P7X<4Y M&AV&?>$&MRBDI-@8O_"'^'A_S`M-_P#`=?\`"IH_#>BQ8\O1]/7'I;)Q^E:E M%.\NX%`:'I8Z:;9CZ0)_\35F"UAM5VV\,4(/41J%_D*GHHNWN`T[CUP?\_2F MF)"<[$/N0/\`"I**3=@*WV*#&!;Q?]\+_A3'TNSE(,EG;N0,`M$IX_[YJY11 MS,"A_8VG`Y&GVF?7R4_^)I3H^GMUL+4X]84_^)J[VH%.\NX%!M"TIOO:79'Z MVZ'^E(-!TE2"FEV*D=Q;H/Z5H]J2B\NX%`Z+IK'+:;9D_P#7!/\`XFH'\+:% M*'"?^0%8?]^A2_P#"%^'/^@%8?]^16Z*.U%WW`P#X(\-G M_F!V/_?H4'P/X;)S_8ED#_URX_*M^EHO+N(YP^`O#1&#HMICV0C^M$?@+PS$ M05T6UR!P&4M_,\UT=)1>7<9C_P#")Z!L"?V)IVWT^S)_A2?\(GH!X.AZ:1[V MR?X5LT4G?3[.N*/^$1\/G_F`Z9_X#)_A6U11S2?4#,M AO#VDV-PEQ9Z79V\T>0CPPJI7(P>0/2M&EH/2D[]1H__9 ` end -- Matthew Mueller donut@azstarnet.com nget-0.27.1/test/testdata/0002/uuencode_multi/0002775000175000017500000000000010162001761021232 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0002/uuencode_multi/0010000644000175000017500000003662607441647377021517 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@bar (Matthew Mueller) Newsgroups: test Subject: joystick.jpg (1/2) Date: Thu, 7 Mar 2002 11:20:59 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 251 Message-ID: begin 664 joystick.jpg M_]C_X``02D9)1@`!`0$`2`!(``#_VP!#``L("`H(!PL*"0H-#`L-$1P2$0\/ M$2(9&A0<*20K*B@D)R7J#A(6&AXB)BI*3E)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#Q,7& MQ\C)RM+3U-76U]C9VN'BX^3EYN?HZ>KQ\O/T]?;W^/GZ_\0`'P$``P$!`0$! M`0$!`0````````$"`P0%!@<("0H+_\0`M1$``@$"!`0#!`<%!`0``0)W``$" M`Q$$!2$Q!A)!40=A<1,B,H$(%$*1H;'!"2,S4O`58G+1"A8D-.$E\1<8&1HF M)R@I*C4V-S@Y.D-$149'2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@H.$ MA8:'B(F*DI.4E9:7F)F:HJ.DI::GJ*FJLK.TM;:WN+FZPL/$Q<;'R,G*TM/4 MU=;7V-G:XN/DY>;GZ.GJ\O/T]?;W^/GZ_]H`#`,!``(1`Q$`/P#UAVV+DG`' M>@9/4'\J4C)'3KWKR+0]*NM>BOKV^UK5XIC>RIMMKHHF`1VP??\`#%"BV[#; ML>N9]C^5)N'K7FP\,7T6#9^*]:A_ZZS>8/RR,U,FC>(E&%\:7I^MJA_F]5[* M?0.9'HF:0L/7\ZX$:9XC48/C"[P.I^R1?_%4G]F:S(F)/%FHL,]42-*/93%S M([_.1QG\J/S_`"KSP^';LG)\5:_GVNL?R%5G\&+-\LWB'7)@>QNAC^M'LIAS MH]+R`,G('N,5"][:Q@E[J%<=EH<-J=DI][A/\:EAU*RN/\`47EM+_USF5OZ MUP$?P_\`#<>?]`=L_P!Z9C4A\!>&G`_XEN,?W9G']:/9/N+F78]#5U8X5E/T M(IQR!D@_E7G8\":"G,-OA MX-%><2^"K*X7;+JFM2(>9_FM,7X?:&/O&^?UW7)Y_2E[*?=!S(](\U`<% MUR/<4X<].:\T/P[\.8)^RSY]?M#4^/P'H,?W(+E1W`NG&:/8S[H.9'HLDJ1` MF1U0>K,!4']HV6?MX"\-O_S"P/\`=FD'_LU/C^'GADX)TS/UGD_^*I^R?<.9=CN7U"SA_P!; M=VZ9_O2J/ZU$VN:2IPVJ60/O<)_C7+P>`O#48&-&A.>NYW;^;5;3P5X;0AAH MMH?9ER*APMU"YN'7M(&,ZK8C/'_'RG^-2+JVG/\`'I!_R`K'GTBQ6;:74I&[_:=C_S^6__`']7_&G?VA9Y_P"/ MJ#(_Z:K_`(U@CP3X89X^5FR MNI63N$6\MRQ.`!*I/\ZL!@PRI!'J.:YYO!/AI@0=#LN?2/%57^'GA?.1I"(3 MW2:1?Y-5*2?45F=63@9P?R-,>6.,?.ZKW^8X_G7+CP)H:*5B2^B!&,1WTH&/ M^^JI-\,?#3R;WM[J0G@[[IC5V?<#LH[JWE;;%/$[>B.":E/(KS'Q%X4T?PY_ M9%WI-F;>Y.J6\7F"9R=I+$CD^U>G'[Q^M%K!<=Z?6O/?#">787BGMJ-R/_'Z M]"[CZUP6AC$>IK_=U6['_D2M:?Q$RV-4>U+]:0'H*6MS,*7DTE.QBF`WZT>P MI<4E`!1QBCK1B@`'TIXZ4T"E!I#%HHH/`S0`F..*!2T4`%(>*4^M-)H`2ES2 M=J.?;\3C%*X#QTI5Y/'-9TVO:1:R>5/JUC'(/X3../KCI5^RFBN(?/MIXIHL MD>9&X93_`,"'%3S(9.D?A]?45Y]3$:V-8PZCIB(I82WW3 M\I],U/D!A@X&:JWQW6QQP0<@^E9S7LA3=SD9_EFN"MB>4WC2;1I6LG^BISR! M@^V.M2F=4!)(`'4UCPW+?9P,;2S'J>0"U/4\]*]&%2[1DT<=\00!9Z(,]=9MN?3[]=F>I^M<-\49OL_ANVN@,FUU M"&8CITW=Z[DGG\373>XK#C7`Z(?^0OS_`,Q>\_\`0Z[XG&.,\C^=/FV5 MY<#I<:C=2CZ&0C^E:P^(F6QK#M2TG04$UT(S'#MS2MVQ31TIV[!Z4#"EP*3. M>:7!H`0@48I<&C'&*``8HP**7M0)!2\8P::2>U`.1S0,6BBB@!"1ZU6OKQ+* M)&,3`M@;&7R MEP.YW$_0?6HF[(I#X=(\4WGSS7FEZ8IY$44#7++[,S$#/KBD?P=J.JW'EZ]J M:2Z=&/EM[%6@\\^LG)XQD8!I/^)7:^)/^7&]O)+O_KGJ,)+_`/?4D8S_`+($ M2_QJ>:\NHSZAHT!_M=9;Z26S>>T>%66QF-S#\IV;2H!+#8Y+';P1M;//=E'2 M6WA30+2,)!HM@H`QEH%8GZD@DU6NO!]@TPN=*9M'N^AELE55<>C)C:WUQD'F ML?4M9U2TN9+$:G%#!;SO&U_=S1VY8^5"ZH7,3)D^;)P$!(0'/#;JDEPU]?70 MU6&QD*02RF.XMF^SK/Y%EM=U*[@%,C?,PW*A.2`.`"]K>D-X..T3R7O+C)OI0SH<'RF:<'8C#9L9A(#U=<6]1TNS MC\66VG"V2:QU=9;BYM1G;%+'@B<8Y4MG:<8SU]:RJ*ZN-$T.O_OKY]4@73Y= M/=(;@>9YL1ZU:M+^WU&&4V;L9+.3+12QM')$".C(P!&1G' MK4C>&K!-,;3K>)H+<&1R724'(D#-D[LXZ^E9\OAVUFAN([BYNGNIYXY9; MMRK,Y3_5Y7&TJ,GY<8^M>745-WOH;QOT+\EQ)(FS)^H[\9_ES7.7FHBZUT:' M'?)8LH4SR%U69W;[L46>C$$9)!/.`*BO9+31(-(TM$NY(6GE>:"S`\^;`9OE M"!<#>0,C&%`'R2)(D)MGG7+([%E\MG`QZ8!P3D=:WXF" MEFZ/M[5))-Y7/7VJ&%O+C8L1YA/.*;# M^^?S&.$4\9[UPM=A6-".0E%R>:D$@W8SSCI54O@84?,3V[5)%%LRQ.6-=M*L M[V,9(YGXFK&_@'4V8#Q-]^/4;E6'H=U=L/B,Y;&[_#0!0>%H!KH1F`ZD=A1N!!Q1G(I1 MUH`4=*7)]:;3@>:3`4?6EHH[4#$/2@'*TM-PM)T.!3LT"@!`3FEJ,=J M7(H`5AV]:JSVERE[!J&G211WT4;0[9A^[GC)#;6QR,$9!`XR[:AP/_`"'R/UJO+KWB'3AYUSIMKJ,'&^/3F831#OA7_P!9 M^&#[5=##&*LP9R"*S<%8=S,M_B/X9G^5]0>WF'#130.KJ?0C&*N?\)5#)\]G MI>K7<`QF6.S90/H'VLW_``$&M)7DW?ZQ_P#OHU*OF*,J2X_VCS6$_=*6IDGQ M+)-\NGZ+JES*>`);CVDQU.]U#57@.I3*(1'#DBV@!)"*Q` M)R3DGH3CT%;?G*YVDX;^Z>IJG?(KJI8%6!X?TKBK5=-#6,;L65S#(8]V4(X' M>L/6;XV5KF*/S[B=U@MXL?5XI M%-K?QW5M;26$KNC7C%8'#IM(+#D'Z5YBG&55*1T\O*MR>TL[;1K>[U+4+DS7 M)3?=W[K\S+V"]PO&`!P<5J>%8KF33'U#45*7-]*URL+I2K,5N:]KVF:EX0UDZ=>PWA:W:W"V[AV\R4; M$&!SRQ_GZ5>MR\-JB2/AEC59#GC.!U'UK&O2A4LYH=.36QF6.HVFIQM<6-U' M<0@8'E-D^P(/()].HJW'(Z@[F48^^1T7T'UZUE7?A_0[W5&\DBSU@*7+V,GE MS(/[Q5TJ`83)P,C@XKS*N":7-#4Z M%46S.DBN,D;4/N35M7>7Y4X`Y+$=?I6;$Z"-9CMD#C(AT4:W<_S6O13T_$?SKSOP MZI6Z\2`C!_MJY./KMKNAN92V-P_=I*7^`?2D-=",P!SGVI4*,B*02P'LY^8#T M'_UZMR7H92K1RQGW4X_2L/6=1ATK3;J_9@?(0N%!Y9B<*/Q;%>-5DY223W.J MFDM64]0UH0W"Z?90&^U&8$I:GY1$!C+2$GY5&?Q]J=9^&]\T=WX@N$U&[!^2 M-LBUM_\`<0]3_M'ZU/X;TI].T[S+@A]0O2)[N7H7=N0O^ZH8`>Y:G_\`"0:: M]R;-+I&N?.%N8!D.20<_*0"0/49'O7;2HJGLM>X.7-N2Z'.EIXHU6SE<1"^C MANH8V&S>^TI)M'KE%R.O?I7%^,]-U#_A.KAK"26\>:!)2@5)#:YXVDO\L8/7 M/%=Q>V4=_"$E,BM&XECEC?:\ M7B*L,49./M.W(#R[B$48XQVKLC*ZL8RC9BZ7I]QIDVGVNLVCVU]>:E'41\V.IZ\8V[3Q2=?U:;2]!N[>U:)3BXF0O)*!G/E+D+QCJQ/ MTK:U*PMM3M9+.]@$D#G+1OD;<%7:&903V#']372VL M#[!YK8/]Q>E9-A9VFG6L=M:X\M.&)\81-8A!/IG/^%=N>#^-<%\12RZ'83L/EM]3@D)7J M!\PS^M=Z?O'ZU[.#=Z2.6>XX\BO/M#;=J/B+Y=O_`!-YAC.?X5YKT$]/Q%>? MZ=^Y\1^)K8`_)>I/T[21Y_4C]*[X;F4MC8QQ2$4XX[4A]ZZ$9B`4&BE-,`'2 MBC%%*X!1GM11BF`$48XI:!WH!"]Z7&:0=>:4_=XI#$'44ZF\=C0#[T`)[^]/ M!IAZ<4Y2,=:`'@\#BK$#J6QSD>U5AT%6X2!C;@GT%2]@+$<@R>*L%7`_UC?D M*HF696(C=%'H4)-/DDO$0LS6ZCU8D#\Z\FLW=JQT06@VZ;;_`*Q\G''[LG^5 M!_*J.H01W5I-#WK0\+7+;K4O,TZ MWC6[U%#B.ZF4Q1O$"1YDB]5QP-O4EA63XX35(8I9-24$7$`C1[6(B*41OY@2 M1'.Y2/F;()!&!ZFM77M5TZ]\+:AJ6FRQ2R7QBMKB9\YC&2`67JI4$X_/FN/C MG5&4C5[4;4*8(\S:"NUN)6.,C@UJEU1+[%NP\11VNG3VFL7VJFU,A3R860JT M9&=I+?.,CWJH8X+R\@L=.%Q>RVLZM:QI$VYX=V[&"!M*\CGKUIT4'EZ?)9VK MV,DE6K'6;[^T=+G6VU"]AT\GS3&N^7;@@AV`(QT`4]@ M#WJK+H3=L]"N(=4UJ1O.)M+ATC2+ M'4=)MUA;193*L2+D-$V%D!SR3@`Y.3P:UM#\06.O1G[*66:,9>*10KJ!QD8X M*Y...GH.E:DT$=S"]O,N8IE,&10T95@`5( MROZ$58A++]V$$X[R9KG/#-X(_#]O:W/EF:SDDLI'SD$QL`/ID$5TEL8ST@R2 M,C`_6O&E!PJ69KS+E.:^).]O!-V7B4+')"^,YS\^.U=^>I^IKB/B.H_X0'5- MRE>(<`COYJUVQZG\?YUZV`_@_,Y)O4>3Q^(K@RZKX^\1QC@F*T8^^%8?U%=V MQPIXS7GCQS2_$CQ&(GV%8+?G&>-HKT8NSN9LV]W'0B@-ZU3>"X8@?:F#9Y(4 M?RI2M[#R&CF0=0_#?AC_`#TK55$B>6Y;W>U&[VJJL]P;#- M&WHR$_RJN="L6,^U+FJPNB_^JMYI!ZA,?S(I3+<#DV,N/]F12:.9!8L9HJL; M^W08DB]>_'>K1T_ MQ);X\F_TV\QDGSK5X6)_WD8C/X4FO(I/N.W- M6#>^([2&XGO;'3;>.+^%3-)YONI0$]?]FE@U;7[F-67PWY.X9W75ZJ#\%";O MS&:FT^B+3B^I);^#M`@M$MCI-K(B`C?(F^1L]=S\$DGGV[5J:=I]KI5J+;3[ M>.UA!)VQ9'/J>>>W6LXWOB%?F;P_"X'40ZBN?_'D'\ZKWOBFYL$7[1X?U&#< M1NEGV)#'[M(&8`?@*GEJ/<=X=#-U)(]-^)NDR6_RMJ43B=%X4M@C?CU(`R/4 M`UV(SN`'WL@BO/?$EYJ$?B;P_J;Q:?;YC/DRM.9X0#U9BH4XQ)'C![]375W6 M@>([ZWV3ZY:VV2&9+6V9%<#G:7WA]ON#GK0X-@II%?PQ8H3X@A=`3_;$Q`QR M0RQGI6K+H<"#_5!?H2:70M`BTP;IK#2TG5ODGM+Z,^9GG7CFT-KX)U;82(W6+*]>1(OK7HK??-<;\1H6E\*7-M"/WEU+#!&.VX MR+_2NR;[WXU<4DK(3=V./;ZBN+LT9_'WB$KR$M[13[94G^E=HQP,FN2TF:-/ M'OBPS.,*EF!G_KFW%-B+HL'W*=O``JV+/(&?YU;-];;`2ZC/\)JAG3K3GTX-T_G3+;4H'`+NB9Z9.#5F2_MHP"9DY_&@!\5LJ M(`0#4WEK_=6J)UNR4D-+C'^R:M+=0L.)HS_P(4P*MU9(S%M@)JJEK\^#'@'C M(K0FOK>(@-*N3Z'-2H590P((/(Z=*`,_^SUDXQD=\TG]@6CC+Q[CT`W$#\LU MHM-%$/G=5STW'K5:35K6(X\P.?10:!7*9\/1+S`3$?5"0?YU!)I5]$01+!(! MW93FM:+4;>8D!P&`R5/6I&N8"O,B<^IJE*P'.B4@9EB>/]:?%/%(2%<%O[O0 MUKF>V8_ZR,'V.*S]2>V,>$*O(",;#D_G6D97=B6BA>?.T,98!';+9]NWX]:V M[9X8H58-A\.X^4H8P/!A\Q[U M,MRA/+5S)ENH4+/&&0'K'N)^M$>I*6'/7_/2L7%HI,ZP,",BE/2LB/5(8X1N M;D=J;_;UOLSAJDJQ?O)1'$3GFLC[=GJ>/I45QJ1NC\J@+CT.:S7D*DG(QGUH ML!T-G/\`.<]#BM5&&T8YKEK2<;ERV*V9;M88T"$9[G-`,T=V>A-)P>O/XUF0 MWI?>21M`XI\=^K?+CGF@1I9/O2!=I)`ZU6N;L1*0N,TRWOE8`.>3SFA,#/U? MPO:Z[3SN[GBFZ/X3TW0KM[BPA9&9-F))3( M$'HI;)`]>>>/2MDW47(WBH+B\6-,IM;/7GI3N@+@(&!02*Q_MCL2=P`]*J7. MIL@`$G.>U):L"MXY5)I/#D!.#+K-N?JJAC_,UUAZFO/-9N&NM=\+[G+?\3$$ M#Z"O0JH!6ZV=P$]LO'J(W!'YUZ&>E>>:+'Y/C7Q)L%HT;V89_GQ4T:A>`H`]A0.@I=V.M;Z$-B&-6^\BGZ MJ#2>5%VBC_[X%*9.O'ZTA;=@=.]%D(41_P"`#_"CD>]+ MD>M%D.XT6T"\B)#STQ1Y$. M!3#GUHW<8HL@N(\-O)]^&-S[J/\`"D$%N!@01@>F!3@03UI:=D%QCV\)Z0Q_ M]\BD2&.,Y6*-3ZJHJ4G%)G-%D(,9[4*HQR!^5&[`HW>U``0/;CIQTJM+:0RM MN:)&;^]C!_,58ZT=Z+(=RH=.B8\O,O\`NN/\*C&E(.L\I^A%:.WWI,9I60KL MIIIT(/SRSL/3S,?RIW]G6HZ0)GU[_GZU:Q[T8P,T[(+E)M+BW!HWEC([*_\` MC0UA,266[;)[.,U>'-%*R&F9YMKY1B.XC..2"I&?I3HI;R*10]NQQU8,,5>` MYHQR,]^]2X)CYV4Y;V[E;(MI"??'^-,\[4'X%N4'J6`J^<8ZDT"E[.(\?EY$4>AR?Y4&WN0,++$/JIYJ^:3;[T^2/8.9F=]EO&^7SXE&,9"'BIK>P2 M++2.9I",%G`_E5O::=M(IJ*#F9SVLQA/$?A78H'^G'@#'\-=_7!:ZQ3Q/X1. M.#>R+C/^R.?_`![]*[VL);E(<:\V\/7)NO&/C&3GY;R*/_OD2K_2O2&Z#'J/ MYUYQXVFGQJ][=P6P;E?.D"9]^>U2Q M2QW";X)(Y$SCR\^])@]#5$B8(Y.>:2G[? M0_G1B@!@`!X%.`X/%/QZ4H!H`BYP.M)S[U*0<#WI.`,M@?4TKH9$>^.M.7'? MK222Q(F=X)[!3DU&LDTA^2W;'JY`S]*7,@LR9BJJ2Q`QUR<4Q94;E0S?[HS4 MD5N9)`;D9`(VH.WUK7@2-`,!<>F*S=2Q5C'#!@?X3_M<&D=TC7+L$'J:W7MX M9AAT1A_NU4;3X8]6I7%83&.QI0G&:>3\QHSQ5B&%1VH(['G%.9L#)P` M.]1F1B?W<,L@/=0,?K2;2"PNS_9/Y4NSC.,#Z5$TLZ#+6K#_`($*?%!=W`#` MQ1#H/EW&ESI#L$C)&54G+MT7N?IW/X4W=SADD0'^)D(`_$U>MK$12B224R/C M'W=HS5B54?@J*AU1I&:&0\(RGZ$&H3>(K8^9^<$HA(%:)L;9WW>7S]>M2"%8 MU^153VQQ4^T&D<1X@G63Q;X0V'(^V/Q[X45Z*:X#Q8J)XR\&[>K7;Y(''\'^ M-=_4MW*%;I^(_G7`Z=QXV\88_P">UI_Z*>N];[IK@]-(?QGXOE_A,UL@/NL3 M`_SJH[BEL;=**4_>/IFE7)SBMS,2E!`X)X/;UP"?Z50U'6['29HX;AY&N94+ MI!#$TDC@$C@#W'?%934>FSWMR\YC_`+9^T,X:X@L=Z*AQA0=B]EX& M6Z5S*3YC=Q]U'JNUVZ(Q^@I.QSQCCI7F6IVI/XU+5QIV,S[7:Q@/`HR>\49/\`2GQZ@A?F.X/OY+8%7\,>,G\Z M-I'_`.NI=-%+B,$CNV#685/0D_G2,A(R>3[TO9"YA9 M[JU#G$Z/]#FJ;*C8-LC*PYW#I^-6@A^GTI>1CV]351ARAS7%#9_`"G#I5+5[ MU=)TFZU"2.206Z`[$!RQ+!0,]ADU4T'7EUI;A);7[+<6VPNAE#`AAD$'CT(^ MM/GC<.5FO(I9<``D<@-T/UICS7+8!BA8`8X/%3`(BQ[\]*.O%&/44>SB%P^V70/RP)CU+_\`UJ&N[S:<+`3Z;SQ29'2E MV$]:.1!S'+:X[2^-?!YN8PH6YEQM8D$X3'ZXKT8\5YMX^F;3[?1-14E3::DA MR!GMD_RKTH_>_&L9*Q:U'$8&3T'6O//#W_(;\5(Q)D75&8_[I5MM>A-T_$5Y M]IJB'QUXOC!X,EK)P/5&)_G3CN2SHSU]J4<5#)/';P>?/+'#$/\`EI*X5?S/ M]*H?;[N[XTFQD=&Z7-X&AB^H!^=OP`'US6MR3'\=VVGPVCZA=W-[%<7%N;)( MK;;B8#+@,2#M&>N,9%97A"QT'4K/R+T/)J,1(E@N)V"TA^SY\R1Y3D@@?>\QN M5(&>01Z5-NI6IP#011>(-6A@C$4,>HR*J(N`,#L*Z[PC*EI)X@GN9DCB66`O M)+)@+B!2>>_^>:XB"X":KJ$>GJ+B+[?(8IY)"R%>Q+=7]O7UKH_"R>1J^J37 M.EW&JR6\L#">$)^Y;RA@B(L!GT(R:YT[29M+X47?$NEW_BX6LNFP,MG:EF#7 M;E%N]V!\J$=!@$%L=3P1R7>&["]\*VUR-3MYIH9I`PELV\Y+?`(VE!\P]\`B MM]/$VC22M'+?Q6T_\4=ZIMY!^#@9'N.*U;=X;@"2">.7CAHY`W'M@]*VN8ZF M;8ZA9:JN;&[CN2OWPCO&'U&_3=_WPA.?Q>CF"QIOM&,$YK)\1WR6ND7,4-ZMM?2Q_N! MN(D9N#A0N6R0",X[U5-Y;79)EUBZOUZ%-+M'$9/]W=$"?P+`]/6K=E(ULK)I M'AZXC)&2[LEN&/\`M$DN??()]>:=[CL><7-GJDVA3W]]!+;QA=[?:$N&WX=# MPQ9@#D8Y`Z<>U[3_``XNJWFJS33V$207(!DO+9F.&08&=PZ`''%=-XQ&JMX> MF^US6ULEQ+%`8K?=([;G'!=O9>PYYSVJ'PQX;TN[AU-[NRCNY8KP1":;)DP( MHB,,,$'))R*RY5S%MZ&/X2E?3M;FO+Q9;'3HHGA+)$WV-P&5PW##USZ>]5QI3QMNM=2U"`@8`,PE7'I^\4G]1]:SG\.7L M;R2VDULDDA)>2V#V;L?4[2Z,?N?FY_3-=L?O'ZUA)ZEH5^$/<^E>?:+!+JGB_Q;C4?$YL;-+@2:O*?.>=403 MU_6L];/5[D@W6IB!3UBL8`/_`!]\L?J`/PZ59L-$LK*;[1';@W(X^T3,99?< M[FY&?;'2G<.5E==7N]04C1M.D,;9Q=WI-O'TZA2/,8?0#/J.M+'H4=RZRZQ= M/J3!MPA9=ELI_P!F+H?JVXUI2N5SE^1ZFJWV@94>AZTN8OV;/,&79XBUG!P! MJDPP!CT_QKK_``+SJ7B`YQF6W''_`%SQ7&AB_B'5LD_-J4QY[?-@G]*[+P6P M2ZUUQQNF@_#]RI_F362^*Y;6B1V4D:3H8YD62/H5<;@?SS67)X9T63DZ7:*^ M<[XXA&V?7*X-3-?%3CFF?VCSWK3F)]FR(^'H%/\`HU[J=M[17KE?R8D"F/I& MH*I$'B"[4XX,UO!)^9V@FK']HCIG]:7[>,8+#\Z5Q^S94ALM>B7#:U93>[Z; M@_\`CLP%2>1K:_-_:>F_^"Z3_P"/U-]L#?Q#\Q1]J&/O#\Z=Q^S9'Y6N@8.J M:$TF3^.[-;,;`]6 M'YU.O)]:=R7&QF?\(SH[$&33X)B.`9U\TC\6R?SJS!I%A:MFVL;6`C_GE`B_ MR%70.*#P,]*=R;%5QD\D\=.:>N,PU5]V3!X]%C(X-ZS?E$ MW^-3^`\_V5J3'.6U2X.<]?N_Y_"H3]X36AT[(`*39TYZ^U.)S2J,@<9J[B2$ nget-0.27.1/test/testdata/0002/uuencode_multi/0020000644000175000017500000002620107441647377021504 0ustar donutdonut00000000000000Path: unknown!not-for-mail From: donut@bar (Matthew Mueller) Newsgroups: test Subject: joystick.jpg (2/2) Date: Thu, 7 Mar 2002 11:20:59 +0000 (UTC) Organization: A poorly-installed InterNetNews site Lines: 182 Message-ID: M:-!K,F\%^';A M]SZ/:*WK$AC_`/02*V"<=^:!)CJ?UI7#E9@_\(/HR#%O'-;^OER9_P#0LT'P M=;J,0ZC>QCT#+_A6X9E!Y/-*)P?0T7'RLX+Q3H9TL:&YOKJY2;6+:,I)(Y'\ M1Z%B.U>C'J?K7$?$:7_B7:(R\%-9MS^CUVQ^\?K2O<5AW7`]Q_.O.OAW)NTS M4[O!VW.IRR+_`+ORUZ&>G'Z=J\G\&:[IFE^%]M_J,$$GVF5O+=\R8R.2H!/Y M"DW8N"U/0OM![&@73<\FN<3Q1HTH!7443<,K]H5H5<>H+J*U8)5N8@\#K*G] MZ,AA^8J>8V218FG+M[]34>\$CCIS^E-,;DYV-^5`C?!BH%.#S3U8YQM)'TH%8L>8VXC/3N*M2)*2?O=*SO,/7-21R.,D*WY4"-=)B,9QGVJS',".M8?VA@<%@&Z MXQS5J%Y=N[!`/M1S="7%&D]VJ'!-,-UE:IL=YYYIHR.Q'XU1*BB5W)S[U'2$ M\\&D)R",]J"K'+>-"SZEH29PJM$6,&D7+*>)-2N6QZ#>1 M_2LGQ5,)/$6G6YZQVTDI^CR(O\EK0\*EFT)F8XWWERX^GF$?SS4IZDI:G2&Y M/N:!=,.^*I;V'>EW\H#\5Z2?O'ZUYQXPB^V/H%D>?/U6($'H0!S_Z%7HY^\?K3,)[CA]X9KQ'0 MSJ%O;7,-LMOM2[E4^;(XP0W/"BO;6[?4?SKR#2HP&U9`23'J=PI/_`A6=7X3 M&>PXG59`5DEL(U/=4>0_D2!^=5ET.(OYDTAW\'_18UMA^.S!/XD]_6M;RVQ[ M4H3-?J:TM,O-2LS>I9S6HB^VS?+- M"6.>,_,K`]JHZ,@^S6I]8$/YC/\`6K.DC+:EDGB_E`_\=/\`6M971U3DXQ5C M4DU35Y`,2V$?J5MF<_\`CS8JN9=49R6U>8*W41V\*#_T$U)M'K2?B:SYV<[K M3Z,A(>)8I%:'4;\KGF.>=#^OS#_`,=K M=(QT./I3AR*?,@]I+N9ADUR3K>3H<]'O_P#XW$I_(BHO[*N)6W330NQ^]YGG MR9_%I?Z"M?O0V>,4G('.7RQXNKWQ49+U($E2W@0"!F*; M2SGOS4_AW7KNU\/:?`FB3SQHI(F6YC4/\Q((!Y_.J\+$^*)\`'$=N.?H])H/ M_(OV)XYB&>/F6I/1KJ[+Y M_P"`HN/UJ4WNK7D8+:X$B<YDO)#_(BH7@EM9L:8E\LG4R)?LJ`^X8MG\C6G@FFLAX M[?2ESD<\^XRVU+Q'$I6:YTV=3_STB;"51?`KY5OY?;O\`,<]:]:KR/!'B;PTP M_P"?\#]!7KE=%-WB:IMZL&SM..N#7E>G*5U'Q$&'_,8N3R/4BO56Z5Y;8C.J M>(.3_P`A>?D\_P!VE6^`F>Q=`Z?*:79GMBG`8`IR@DX')["N,SL1%>HQ45P` MEC=,3]V"0D^GR&KJQ,V[Y3D#/;\:IZJ,:+J1SC%I*<_1#1'<:1SNBD&UML'_ M`)=XO_0!5O0QO34FZYOYOY)_]>JNG+Y4$4?]R)%S]%`JWH&0FHJ1@B_F/YA/ M\:WGU.BI\*-+;_LT&+(Z5)2G[M<]SEL0&+%'EU,/<4NTD<(31<.4@\LCH.M' MEXXJRJ,?^6;9';!I0A/.PFGS!RHJ^7PN:>L>!4VW(`('YTXJ,9]*+ARE<0@M MUZT\0XX`J7;@9H+$=J5PL1^7@:.]%PL'U&*1NE(7R<@4XC(% M%Q6&=^?2FKD.IQWJ4"E4`_A0GJ%C"MGV>)-1+-CRS$3GT$0_Q/YU:T5-F@6` M_P"G=3^8S_6J9C5M?U9^_P`JX^D2\U?TA`VAV![FVC_]!%;5'[MS:I\*+F1@ M4F[THV&@1!CSUK&YC8#)QT_2DRSE>96S[/ M&/AK)&TW$P^A\K_Z]>G5V4O@1M'85C@<5Y;IHW76LS+]V;5;EP1T(W`?TKU/ MN/J*\I\.-YNC)-D'SIII,_61O\*5;X`EL:9JAKAN1HEV+..:2=E4*L*DM]X9 M(`YSC/ZUH8Q2'M7)'?4S3L[GGUP&L'6<:9J-FJ,&-RT3H4.>"<\>^*T+C7M1 MFT>[5Y;.[BDMG1GC7:RY'4D=3CMCO77M&LD;I(JNCC!1QD-]:\[\2Z"NB2GR M58VLV?*?X%&#VX%YD$:[`Q)SQR:M(U MM14<@ M+(P1,[2V,`\>M+DCV,Y)1=[&0VMRS*,Z];0]_DM0N1TX+_0TJL+I\'6YIRQZ M)L7<\ME-)>2#;#:MMA$48^7@2$;CC9P.>"33?$-U#)?M M#%8O;W&HP)`QE1,*XD`6167/.`PSG^&GR>0XS@G\(DEM;1LBM->O-)_JHHYY M7D<^R@Y_'I5;4;F\TN7RY;76('"%SONL':.">=W2DA@\^$ZO/J26S7@8);OY M@!B#84?NV#?PGVJ&2*U00R^=8;%D$VCGTCN$;^1J21VVY!(7U'2N5.AV4A7S1+*HX"N_"C ML!CM3I(UT6+[78;HTBYFBW,P=.AZDX(SQC'4^U9NFNAG+"2BKHZ1P<\@YH0? M-TIY7:.N1U!]10A[UC:QQAMX/%/88/3BC=C/%(6(.#0(!2]>!U/%(#UI0-S` M`@9(`_&A;C.86Y/VS7IBOS1O+@#J<1[1^6/TK>T^+R=*LH_[MO'_`.@"N?LE M\V#7921B62;:(_^."M:GPFM39%H=.?UI<#/O3032@X. M<5D8@<#G%&X=Q322!S2YZ4[`+VIAZC%*#P:-W(I6`#WI!UI3U)H[9)P/>F!2 MF=D\2^&&5L?\3`C'U517JHZUY+W\->M'BNNE\)M'8;,[-%+I;7;P9VK+\JJQ[=3D#WK)U;Q/)? MZ3<0)91PPS87S&=GYR#U`VYX]:UC"2:9I&#OQN55SH_$=:=INIWNAWLUUI,6#<)]G>(GE7/W3CN0>GJ*ADG2.46]XR MS!1E9PA7C.._/4'FM[PK;SQ:L^J)I]WJ-O;J%CDB*_+(2,L-V"Y"\`BG8):H MZGQ?LDTV2WE+274=O<75O,#\\3P[1R7]C]KP( M(Y[@%M_S;(U4HF<>@)^@JFS*$&V=%X>M$AM4N0/WDP^1@,%8AP@]@<;OQK+\ M5W,=S/-:N5EGA@6&)#\S&1FW,X'7A>/KTJRR7NAT)QIJ[-J1DMXA) M.X1>Y8X&*SVN)=8,EGIEO+,KC:\A&T`'L<_=SSR?3C%,TUU<;)W-Q,X"J MS-N#%FR"/3C-=S/J$L[MI^BI$!%E))U`\F`GJ0.C-UZ=*+FLZP*9'#$)\V%4L3CV')J"XO[2R;%W=0P$C@2 M.`?RZU0?Q/IR';#-)M;>D,YT:R$J/$Z0I&RNN#PH`X_*J$GB">53]ETV4L>AFE4+^(&>*)L2S(G^^RC^M8$F@M= ME6O;F>Z/\0ED(4_11P*FA\.62'_CUA/_```&CV'=@J9=FUW2HAAM2MF_W7W' M_P`=%0OXBMBO^C6UY=-CI%`P'_?38'Z5=BL(H(=D<:J/1!M%26]N`X6-3(QZ M!>3FK5!=1J!D+K=])N\O1I@,9YG3_"G"[UR7K1?#WMLH(X\NV!(_,F MF/8ZM@YU:<#OY<2*?T%;I7Y M)N&?,S=,?_JKVKK7E1E23QMX6\I%3;/*#M&"T?_H`KT/Q$HD\-:LC9VM9S*&K M$YW%%,9]L,<#\L5E5^$SEL:VPGIDD]JY;Q=K"+:2:9;R;II&'FA<\(`3C/J3 MQBNJ!*\@9(YQ7(WVDVT+W7VQY;:;[3)/'>I$TB,C$'#A>5(QUQCGVK*E;F)A MOJ;&M^%K31/#5EJ4.IF7S##'*LFUX9-W7R\`8P,G'/`YSWXZ=F%F-D5U;07) M4;<_NG!;KCG'3VJ5;>58G$"07T&3@V;D=1C/E@Y!QQG;502JGE6ZRR1J)DS; MS)M8<^W4?49KI9UIZ61UUL,7#CC_`(#TK&E:1!J+"UN'C:Y<&6&Y8$8*]$'' M?JC<^QY&?<5U'@G1-/UC3)U MU.>:.>*F.U9E]"FE76KQ(^\6LTL:RR$;W`0,,G MN<\?A3+IJ+T9S=W]E@N)3-''-.9&=T+YCC)/W6?JY_+'/7-7+'4)+F,6TT<2 MPSE[?$0*E&*\=2<@@FN MQ+MT!SVS5:36I6;"2\9SMMESGZR.,?B`:SU.Q5HI:EK5YF@^W2;EW+`EJA&1 MAW.3^0S4?A*!'\2AFX6W20J>N"N(P<'T!)'N?PJB]IJ&H6^8;65DC;S51%<[ MF[EB?O'%16RW9NIDL8+V-Y"P"H"I(.-RL2..1G.:T6APU)\ST*,2^;Y625V1 MKRO'.21^AKJ-".J2-&$D"V$./E90%[\`#')YY]AG/%%MI&GZ*@?5[J%IEP?) MW=/;:/F;TZ47>M7]TZKI\8LK9?NRRJ"^/]E1P.G\JB5WH8N[T.H9"L9/W1UR MW3^E9MQX@TNT;$M[&S#@K&"[9^@_QKGSIANLRS&2X.?O3N3SZXZ5?MM+"[0B M[3C/'RC]*E4>XE2)/^$FDF?%KIS[<\-.^W(^@!-037FL7:*#/'`C<8A3:WYL M6(_"M%+)J,6Z'GIQ@5JO:V>AB/[:!=7Q&5C!/EI[FLR[U*>\F MW3.-HZ(B`*!Z"@!K8"^W2K"WUS'"(HY!$N.L:*K'_@6,U2.<5(.E`#-N\LSD MNQ[L?Y5!)IVJW(;[1J,:CTBBS_Z$W]*CA\020*?[ M6B.1P;F!=R_\"7J/PS6S!X9KB0_.```$]!_C7L5>6I((_&7AAB>?M$J]/5,?SKU*M:;;CJ4FWN4M<4O MH.I*O)-K*!_WP:\F\$\>&HO^NK_TKV66-98GC<960%2/8\5X]X0B,&@B!_O1 M3RH1[@U-7X!2V-STX!^M4]5BNI].FM[6&.X>=3&RRMM4*>_UXJWWIP"G.<&N M6+L[F:W.#DT_4;6#9>:7'<[!A9AA6`'N!^M4I;Z1K?[,\F5?N2W&FN0>V MTC/6FR1VUO:M#=:W<+!M)6!;%X_,)'`P<#D8Y.>G>ND;PS9JFV&6\MSZQ7+? MR-,A\(ZYN)/[TLA/YTO:1#VBZ'G\;O'&K3C*,H5P6&<9.*N6>IW.ER M.B2#RK@8D20;H9E/]Y?7WKT--#TU%8"QA*GJ6&?YUGW?A"QGG,EK+)9C'[R. M,*57W`/W?K355,E2.4T?19-8O&BBD18XE!EF'*G)^7`)Y.,_3%=Y8:-:V05( M(/-8<&23!+?TQ[5FQ:II>C6[6&CQ27K1@D^2P*,QQR\IX_[YK+O+B_U2,I?7 M),1_Y=K==B?0MC+5+YI:H=FS>OO$EC`YAA,MY.HYCMR"%/;A7C%8EQH:Q,7\A5<-D2Q91OKD'DUT2@J3GG-1WBL8OE#?@*3"QA: M>]P/%OAM)KJ6XC^UY438+*>GWL9->U5XW;)GQEX:[M]J/'?@5[)0E8EC^G,@MY#",RA#L'J<<5X;X5UW3K'0XK>[O$@ MF5Y,JRG*Y(P>![5G45XD/8VHM=M93*-DH\E'DD^Z=J+_`!=><^G6K<=_;20M M*LFU51'8,.1O;:HQZDY'X5@K>>'%"J-3A7;;_9VVH<2+UY)3KDGD'FK$4OA^ M5K?R]9`%KQ%NN=A3.T]3@GE?>L%%$6-9-3M'E6)9&+DE<"-LC!8'/'&"II;? M4;2\G:&WG621%5V4`C`(!!Y'/45F8T,7L-S#J=I')",'_2(VW`L6/+,.26;G MD\U)IXT?39#,FJ63;HDA&ZXC^4*`".#[+^52XH+&T0TLF1#%&N9)#QT'8?4H[BZEQNFD/(`[+@<# MGIQ4ZZOI28+W\;,.N`Q_+Y:Z84TM3:,4B:*W*_*B*@_N+T%:%O8[D^88)S5. M#Q#H:'+7A7CJT3_X5:_X2O1<8%^GU*,/_9:TLBC5V+&<@=:"PV$`&L=_%6CE ML"_0C_KFP_I0OB72'4_Z?&/J"/Z4[@:@?D#%+M^;K^59W]OZ4%R;^WQU^_S3 M1XCTHD_\3"`?7/\`A2N!I$84#KS3U`5Q[UF#7]**DC4;8'/-=TJ0'_`(F%O@^KD5-_:^F$\:A:?]_U_P`:+@:$ M*/<3I!"A>60X51W]:[JPM(=&TO#8S&I>5NY/4\^F>E`HNXSL7TZYSU_.I/$OBO2);!+>TU6PE\U@7V7*<*!TZTR:C>-<2 M'AON)V5:K=1CUXJHVL6!D'^FVG3_`)^$/_LU(-6T_P#Y_P"TSGIYZ?\`Q5%Q MEX]!0HRW.:J_VK8_\_MI_P!_U_QI#J^G`\W]H#_UW7_XJB[`NXSQ3\$U2.KZ M?Y4QO$FC#'_$RMC^)_PI7`T\`\T,N\8-9B^)='F21_2IE MUS22.-3M<^\R_P#UJ+@5YXQ;^*_##K]XWQ3/L0/\:]8KR&?4;6]\6>%XK2YA MN-M[O;R7#$?=ZX^E>O\`>F2QQ!(Z?G5633+.=R\MG;NY_B>)2?Y5;-%,@I?V M188Q]AM<>GDK_A37T/3).)-,LG'^U`AQ^E7Z6G>7<#&;PIH+.7;1-.+>]JG^ M%5Y_`_ANX^_H=D._[N/9_P"@XKH**'*7<#G!X!\,JN!HMKCW4G^M3#P7X<4Y M&AV&?>$&MRBDI-@8O_"'^'A_S`M-_P#`=?\`"IH_#>BQ8\O1]/7'I;)Q^E:E M%.\NX%`:'I8Z:;9CZ0)_\35F"UAM5VV\,4(/41J%_D*GHHNWN`T[CUP?\_2F MF)"<[$/N0/\`"I**3=@*WV*#&!;Q?]\+_A3'TNSE(,EG;N0,`M$IX_[YJY11 MS,"A_8VG`Y&GVF?7R4_^)I3H^GMUL+4X]84_^)J[VH%.\NX%!M"TIOO:79'Z MVZ'^E(-!TE2"FEV*D=Q;H/Z5H]J2B\NX%`Z+IK'+:;9D_P#7!/\`XFH'\+:% M*'"?^0%8?]^A2_P#"%^'/^@%8?]^16Z*.U%WW`P#X(\-G M_F!V/_?H4'P/X;)S_8ED#_URX_*M^EHO+N(YP^`O#1&#HMICV0C^M$?@+PS$ M05T6UR!P&4M_,\UT=)1>7<9C_P#")Z!L"?V)IVWT^S)_A2?\(GH!X.AZ:1[V MR?X5LT4G?3[.N*/^$1\/G_F`Z9_X#)_A6U11S2?4#,M AO#VDV-PEQ9Z79V\T>0CPPJI7(P>0/2M&EH/2D[]1H__9 ` end nget-0.27.1/test/testdata/0002/_output/0002775000175000017500000000000010162001761017710 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0002/_output/joystick.jpg0000664000175000017500000004561207314476754022306 0ustar donutdonut00000000000000ÿØÿàJFIFHHÿÛC   ")$+*($''-2@7-0=0''8L9=CEHIH+6OUNFT@GHEÿÛC !!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEÿÀ["ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õ‡m‹’pzOP*R2GN½ëÈ´=*ë^ŠúöûZÕâ˜ÞÊ›m®Š&°}ÿ P¢Û°Û±ë™ö?•&áë^l<1} ŸŠõ¨ë¬Þ`ü²3S&â%_^Ÿ­ªæõ^Ê}™‰šBÃ×ó®iž#Qƒã ¼§ì‘ñTŸÙšÌ‰‰èìsq>¡pé­Àþ‚ÿ çÙÏÙîý·?áOØËº2=ëzZ6§d§Þá?Æ¥‡R²¸ÿQym/ýs™[ú×Ãÿ ÇŸôlÿzf5!ð†œø–ãÝ™Çõ£Ù>âæ]CWV8VSô"œrH?•yØð&‚œÃos õŽéÁýM(ðm¢ CªkPHïHþ”{)wCæG¡àÑ^q/‚¬®lº¦µ"p÷™þkL_‡ÚûÆùýw\žJ^Ê}Ðs#Ò<Ô×#ÜS‡=9¯4?ü9‚~Ë>}~ÐÔøü Ç÷ ¹QÜ §£ØÏºdz,’¤@™Pz³PhÙgk·Ï§œ¿ã\:ø'ÃÊÛ›Nó[ÖYäæÕ7ü"Z1ýkÿ|Ÿñ§ì¥Ü\ÈíÒê rM/¨pGó§£&DÝ…pmà¿HrÚDÿ²Î?‘¦ áÎúDCþÚÉÿÅQìŸpæGz. éçEÿ}ñ¥ûTàMßçíà/ ¿üÂÀÿviþÍOáç†N Ó3õžOþ*Ÿ²}Ùv;—Ô,áÿ[wn™þôª?­DÚæ’§ ªYïpŸã\¼ðÔ`cF„ç®çvþmVÓÁ^Bh¶‡Ù—"¡ÂÝBæá×´Œê¶#<ÇÊHº¶œÿrþÕ¿ÝOõ¬OøD¼:?ØzýùÂáéü€¬yô‹›iu)¿Úv?óùoÿWüißÚyÿ¨2?éªÿ`øa—#D³ÁéòŸñ©#ð_†Ñpº‰íDþf£ÚG¸ùY²º•“¸E¼·,N©?ά 2¤ê9®y¼á¦ËŸHñU_áç…ó‘¤"Ý&‘“U)'ÔVgVNp#LycŒ|î«ßæ8þuËhh¥bKèÄwÒûê©7à <›ÞÞêBx;î˜ÕÙ÷²ŽêÞVÛñ;z#‚jSȯ1ñ…4d]é6fÞäê–ñy‚g'i,HäûW§¼~´ZÁqÞŸZóß '—ax§¶£r?ñúô.ãë\†1¦¿ÝÕnÇþD­iüDËcT{Rýiè)ks0¥äÒS±Š`7ëG°¥Å%qŠ:ÑŠÒž:S@¥Å¢Š4˜ãŠ-R)O­4šJ\Òv£ŸoÄã®ÇJUäñÍgM¯i²ySêÖ1È?„Î8úã¥_²š+ˆ|ûiâš,‘æFá”ÿÀ‡<Èdér8«›yžõœê¤Í…ý*X“zï* 0íÔÇ‚ËN†`“³•‘w¡õõçÔÄkcXè鈊XK}ÓòŸLÔù†j­ñÝlqÁ úVs^ÈSw9þY® ØžSxÒmV²¢§<ƒí޵)PHu5 Ë}œ m,Ç©äsS í8 Ýÿ âŽ2JZ¢Ý#X8ÈÉÅ?p#9àU8ùÁÉÏ<ô6íÃn1‘Œæ»)c´fR…‹sÏ­'—B Ôõ<ô¯F.Ñ“Gñg¢ õÖm¹ôûõÙž§ë\7žÏá»k 2muf#§MÝë¹'ŸÄ×Mî+5Àè‡þBüÿÌ^óÿC®øœcŒò?p>m•åÀéq¨ÝJ>†B?¥kˆ™lkÔ´×B3;sJݱM)Û°zP0¥À¤Îy¥Á  QŠ\1Æ(£Š^Ô /Á¦’{PG4 Z(¢€‘ëU¯¯Ê$c³K+ùpÁ æIœ‚BŒð%@*vèj†ÖºñÖ‡o ÖQ\^L `leò—¹ÜOÐ}j&ìŠCáÒ¸¤j:­Ç—¯ji.ùmìU óϬœž1‘€i?âWkâOùq½¼’ïþ¹ê0’ÿ÷Ô‘Œÿ²Küjy¯.£>¡£@µÖ[é%³yíe±˜ÜÃò›J€K ŽK¼µ³ÏvQÒ[xS@´Œ$-‚€1–XŸ© “U®¼`Ó )›G»èe²UUqèÉ­õÆAæ±õ-gT´¹’ÄjqC¼ï_Ý͹cåBê…ÌL™>lœ„<6ê’\5õõÐÕa±¤Êc¸¶o³¬þE–×u+¸27ÌÃr¡9 /kzCxsE¼Ö"Öõ™/-ÐȆYüÅ‘²0¬€ci8ú}+NóÄB´Å²·Kû­Kp„E2ˆ˜ªå‰“‘ŒðÎy¬9õÝR(¬¢³¼ŠÞ8íÉ{ËŒ›éC:)špv# ›„€õuŽGK³Å–Úp¶I¬uu–âæÔglRÇ‚'åKgiÆ3×Ö²¨®®4M¿ûëçÕ ]>]=Òæy±Ë¼eB2[ýœg‘ëV­/íõe6nÆK92ÑKG$@ŽŒŒÇ­HÞ°M1´ëxš s'œ—IAÈ3dîÎ:úV|¾µšˆî.nžêyã–[·*Ìå?Õåq´¨Éùq­yu7{èoô/Éq$‰³'ê;ñŸåÍs—šˆº×F‡òX²…3È]Vgvû±EžŒA$Ψ¯d´Ñ Ò4´K¹!iåy ³Ï››åy#PsK¥õ×…ÓÃri3Áuw+½ÍÜåY7ùòL‚^£“O „Œ½ù;šJ£JÉ¡º~»s¤\ÞÉ"H›grÈìY|¶p1é€pNGZ߉‚–nœ~A\–¥¤­®©c¤éV·¢âù.dßb] ‰ôTà’wvï]C6ãòŒ®sÇsí\Øê*R黢å¿,A7Þ>ÞÕ$“y\õö¨ao.6,G˜O8¦ÃûçóáñžõÂ×aXÐŽBQry©ƒv3Î:URøQóÛµI[2ÄåvÒ¬ïc#™øš±¿€u6`7)„¯×ÍQü‹~µÙg<‚0y=k‚ø§pÁSƼ™®"‹©oé]î8p{8isSM™5¨þãë^uá "–Žâu'ßÌcýkÑ»Šó š}ìM÷ãÔnU‡¡Ý]°øŒå±»ü4Aáhº˜¤vnQœŠQÖ€t¥Éõ¦Óæ“GÖ–Š;P1JÊÒÓps@!zÒt8ìÐ(9¥¨Çj\ŠV½j¬ö—){¡§IwÑFÐí˜~îxÉ µ±ÈÁ2sVûR‚9¤ÕÇq‡]×3±tKQ!îÚ‡ÿ!ò?Z¯.½â8y×:m®£ãÓ™„ÑøWÿYø`ûUÐë0g ŠÍÁXw3-þ#øf•õ·˜pÑM«©ô#«Ÿð•C'Ïg¥ê×p fXìÙ@úÚÍÿ´•äÝþ±ÿï£R¯˜£*Kö5„ýÒ–¦Iñ,“|º~‹ª\Êx[sn€û´˜ÀúQèö“N÷PÕ^©L¢9"ÚI¬@'$äž„ãÐVßœ®v“†þéêjò+ª–XÒ¸«UÓCXÆìY\Ã!vPŽzÃÖo•®bÏ¸Ö xrHy ÿ³Œ±=€5qä9Ù ù½»ÿ÷¬}^)ÚßÇumm%„®è׌V›H,9é^bœeU)<¼«r{K;mÞïRÔ.L×%7Ýߺü̽‚÷ ÆV§…b¹“L}CQR—7ÒµÊÂܘ#?q=°¸Ï¹®wÃQÂc<÷z”«sa¦Î¢ÚT¬2HIfÝó1Ç>µÛÞêVZtb[û¸-ccÃO" ?{pN1¹Ï9]˜~4¶šM&«XVFÓîñÎì2ƃ,Ô•c¡Í`Ø$ uueªYÛHÇ<քŵºr¤çŒV潯iš—„5“§^ÃxZÝ­ÂÛ¸vó%`sËçéW­ËÃj‰#á–5YxÎQõ¬kÒ…K9¡Ó“[–:¦§\XÝGqSdû ŸN¢­Ç#¨;™F>ùÐ}zÖU߇ô;ÝQ¼’,õ€¥ËØÉå̃ûÅW#¿ñuªÒjÚÕ×ÇÚl7mS·MŠ™í*„ÉÀÈàâ¼Ê¸&—45:E³:H®2FÔ>äÕµw—åNä±~•› f;d7"Är¬;{ýjÌ-%Áù˜¢v×-7iY„ã}NÇq$h6˜\kÜz›?λ–àŸ­q,emgÂaÀÔÇ#è+·¯{ ü$rKqI#óμëÃñõâ!ÑF·süÖ½ôüGó¯;ðꕺñ #ûjäãë¶»¡¹”¶7ݤ¥þô¤5ÐŒÀçÚ—&Œ{Ñõ¦Š;Ð=¨ i{S){RôS õ¥ 6õ cˆÍŠh<Ó³@ —n /´ÏÆ”~´¿;Ò€uõ« UéV¢¸©`^„n<Ô͸·öª±“žãqJÒ\ƼD²û[ò¯>´Ú6‚"žQÊ]ÁÇ÷בúsTe•⌈¤À{9ù€ôýz·%èe*ÑË÷SÒ°õF+Mº¿fÈBáA嘜(ü[ãU“”’OsªšKVSÔ5¡ ÂéöPíF`JZŸ”D2Ò~Uü}©Ö~ß4w~ ¸MFì’6ȵ·ÿqSþÑúÔþÒŸNӼ˂P½"{¹zvä/ûªîZŸÿ š÷&Í.‘®|án`I?)=FG½vÒ¢©ìµî\Û’ès¥§Š5[9\D/£†êØlÞûJI´zå#¯~•ÅøÏMÔ?á:¸k %¼y IJI ®xÚKü±ƒ×Ó· <»ˆE㫲2º±Œ£f.—§Üi“iöºÍ£Û_^jQÜÉ4ŠèÞQÊF¥3‚y6:ž¼cnÓÅ'_Õ¦Òô»{V‰N.&BòJså.BñެOÒ¶µ+ mNÖK;Ø9ËFùqÎIíZâµ?hé¬èPé–ì‘Ú_+‰c€G†Ö ?‹·4”¯¾å¸rEŸ…ímCgQÔæydód?i1ùŽyËl>Àç+iã!GA*µ•ùÜ:`ç­HÊUЏ©Æœ×;«ë5ÿö.…s ÔØ“,唥ª¼ßí8ÎŒãœãŠÅÉî=‡ã.©§Ù’ÒÒõ’ v†eö S]-¬°y­ƒýÅéY6všu¬vÖ¸òÓœáW'»Î~ƒµjÛHÄœ™OÄ¡Ey’•VÑ£¿)ã\Auá‰ñ„MbO¦sþÛžã\ÄRË¡ØNÃå·Ôà•êÌ3ú×z~ñú׳ƒw¤ŽYî8ò+Ï´6ݨø‹åÛÿy†3Ÿá^kÐOOÄWŸéß¹ñ‰­€?%êOÓ´‘çõ#ô®øne-ŒqHE8ãµ!÷®„f )M0ÒŠ1E+€QžÔQŠ`QŽ)hè/z\fuæ”ýÞ) AÔS©¼v4ï@ ïïO˜zqNR1Ö€б©ls‘íU‡AVá cn ô/`,G Éâ¬p?Ö7ä*‰–eb#tQèP“O’KÄBÌÖê=X?:òk7v¬tAh6é¶ÿ¬|œqû²•qþ5|øbå™C$RÂ캢Až ×P×s±*Ñ®=WxʨêGui47$IÂ4N‘ÈÌ@#Æ:é^s¥Sž2·TtE¥HR\ ÊŒóÆ?@9ª:Å…Ž¡c!ÔÜ"À¥ÅÎí‡Wêäú{zÐðµÜ¢Ùô@°Ô4ÐÎ8š.vJ=F¦­VñÖ¥o¦A¤-òÈl¥¼NXÆà¸<X¯å^”ornš*h^-ºÔ¼Í:Þ5»ÔPâ;©”ÅÄ d‹ÕqÀÛÔ–“ã„Õ!ŠY5%\@#Gµˆˆ¥¿˜Ds¹Hù› F©­]{UÓ¯|-¨jZl±K%ñŠÚâgÎc ^ªTÏšããQ”^ÔmB˜#ÌÚ ín%cŒŽ j—TKì[°ñvºtöšÅöªmL…<˜Y ´dgi-óŒz¨c‚òò 8\^Ëk:µ¬inxwnÆJò9ëÖ^Ÿ%«ØÉ¬¬ZhvÀáwÇ•jÇY¾þÑÒç[mBö<Ÿ4Æ»åÛ‚vŒtO`z«.„ݳЮ!Õ5©Îs¤Ù!£ÃÜH2~V|±ŽŸ*’zóY^&ÒáÒ4‹GI·X[E”ʱ"ä4M…òN99<ÖÐüAc¯F~ÊYfŒeâ‘BºÆF8+“Ž:z•©4ÜÂöó.b™Lr.:©X_tö4KBº2:+ÀYá‘CFU€HÊþ„UˆK/Ý„Žòf¹Ï Þü?oks噬ä’ÊGÎA1°éEt–Æ3Ò ’20?Zñ¥ –f¼Ë”æ¾$ïoÝ—‰BÇ$/Œç?>;W~zŸ©®#â:ø@uMÊWˆpïæ­vÇ©üzØàüÎI½G“Çâ+ƒ.«ãïÆ8&+F>øVÔWvÇ xÍyãÇ4¿¡ òIŠº3ûçµC•†‰ÉØ2HîO°ù·sù„êòÓØUˆ<=l0ÓF$îw’k^c…6ÄŠ‹è£“¨UŠ ¢Ä©Á ýÙ‰9©âÒà‰Ã„$ŽÅ‰vŠÉ”4.:ØSLH2ÅAü:ÓË`⡚Vò¤òöïÚvïÎ3Û8ç˜GŠí^ïÄÚ¥…ÂZß šsvŽ5W8efõþïø>0‹XÔtÛïô9$¹¶œ¿™b¾t)\Ì­»œ]SxgZºÖ±6¹oo|ÖâÜ­½hÕ2N˜äž{ñÞ­?Ä–øòoôÛÌdŸ:ÕábÞF#?…&¼ŠO¹ÍxsÚ•·üM"v°º E½Ê²Ä£ÍQÐ’AdñïWîü;«ê·–·7Úµµ¸µbc··´¢ñÙ“ï68åxíÍX7¾#´†â{Û6Þ8¿…LÒy¾êP×ýšX5m~æ5eðß“¸guÕê ü&ïÌf¦Óè‹N/©%¿ƒ´-Øé6²"7È›älõÜüIçÛµjiÚ}®•j-´ûxía±dsêyç·ZÎ7¾!_™¼? ÔC¨®ñäÎ«Þø¦æÁíÔ`ÜFégØÇîÒ`à*yj=Çxt3u$Mø›¤Éoò¶¥‰ÑxRØ#~=H#Ô]ˆÎàÞÈ"¼÷Ä—š„~&ðþ¦ñiöùŒù2´æx@=YŠ…8Ä‘ã¿S]]Öâ;ë}“ë–¶Ù!™-m™Àçi}áöûƒž´86 iü1b„ø‚@OöÄÄ rC,g¥jË¡ÀƒýP_¡&—BÐ"Óé¬4´[äžÒÜ«œõ%›'?‰­æ@zÕºq{£>fy׎m ¯‚um„ˆÝbÊõäH¾µè­÷Íq¿¡i|)smýåÔ°Áí¸È¿Ò»&ûß\RJÈMÝŽ=¾¢¸»4gñ÷ˆJòÞÑO¶TŸé]£ šä´™£Oø°Ìã –`gþ¹·Ø‹¢Á÷)ÛÀ­‹<ŸçVÍõ¶ÀK¨Ïðš¡s«À$Û,G\R°\š;\1§N´çÓƒtþtËmJ»¢g¦N Y’þÚ0 ™9ühñ[* SykýÕª'[²RCKŒ²jÒÝBÉ£?ð!L ·VHÌ[`&ª¥¯Ïƒã"´&¾·ˆ€Ò®O¡ÍJ…YC<Ž(?û=dãóIýhã/ãÐ ÄË5¢ÓEùÝW=7µZMZÖ#09ôPhÊgÃÑ/0õBAþušUôD,ݔ浢Ômæ$€ÉSÖ¤k˜ ó"sêj”¬:% fXž?ÖŸñHHW¿»ÐÖ¹žÙúÈÁö8¬ýIíŒxB¯ #OçZFWv%¢…çÎÐÆXvËgÛ·ãÖ¶íž¡V ‡Ç8¬‰âÄ¡ò îA׎ãå(cÜŸéDâÛб¿àaóõ2Ü¡<µs&[¨P³Æëâ~´G©)aÏ_óÒ±qh¤Î°0#"”ô¬ˆõHc„nnGjoöõ¾ÌáªJ±~òQDçšÈûvzž>•ƤnÊ .=k5ä*IÈÆ}h° œÿ9ÏCŠÕFF9®ZÒq¹rØ­™nÖÐ!îs@3GvzIÁëÏãYÞ—ÞI@âŸú·ËŽy F–O½ ]¤:Õk›±¸Í2ÞùXç“ÎhL ý_ÂöºíÀmR[‰í†ŽÔK²4|cwˆ'“ÎîçŠná=7B»{‹Y“f$”Èz)l=yçJÙ7Qr7Š‚âñcL¦ÖÏ^zSºà `PH¬¶;w=*¥Î¦ÈsžÔ–¬ Þ9TšO@N ºÍ¹úª†?Ì×XzšóÍfá®µß îrßñ1 ¯Bª[§5çºg—são¶w=²ñê#pGç^†zWžh±ù>5ñrgvn`lãy±ý*㸙»öx›£FöaŸçÅM…à(ØP: ]Øë[èCbÕ¾ò)ú¨4žT]¢þø¦N¼~´…·`tïE‡)8Àú S<‹ùåÿ€ð£‘ïK‘ëEî4[@¼ˆóÓyç"5”œž(ÉÅ@(ÿŠ8ÛýáN]¨0 (ô^0çÖÜb‹ ¸ ¼Ÿ~Üû¨ÿ A¸F¦8OZZvAqo é ÷ȤHcŒåbOª¨©IÅ&sEƒíB¨Ç ~TnÀ£wµn:qÒ«Ki ­¹¢Foïcóc­è²ʇN‰/2ÿºãü*1¥ ë<§èEhí÷¤ÆiY 즚t üòÎÃÓÌÇò§gZŽ&}{þ~µkôc4ì‚å&ÒâÜ7–2;+ÿ a1%–í²{8Í^ÑJÈi™æÚùF#¸Œã’ ‘Ÿ¥:)o"‘CÛ±ÇV 1W€æŒr3ß½K‚cçe9onål‹i ÷ÇøÓ<íAøå©`*ùÆ:“@¥ìâÌ¡ö{ÇåäE‡'ùPmî@ÂËú©æ¯šM¾ôù#Ø9™ö[Æù|ø”cx©­ì,´ŽfŒp?•[ÚiÛH¦¢ƒ™œö³OøWbþœxÃ]ýpZëñ?„N87².3þÈçÿý+½¬%¹Hq¯6ðõɺñŒdç弊?ûäJ¿Ò½!º zç^qá˲xÃÆiœæòÿ¾¼Çþ´ã¸¤tÿÂ3éÆ)§ϵã‚€zÖä ÛÏZ?øRãå¡ry¦|ÝÿJ1íQÝÞÚiñ«ÞÝÁl•ó¤ Ÿ~{T±KÂo‚HäLãr0aŸN;ÔóÆö+•]Æ—:C°HÉU'.ݹúw?…7w8d‘þ&BüM^¶±J$’S#ãwhÍX•Qø**Q¤f†CÂ2Ÿ¡¡7ˆ­™ùÁ(„Z&ÆÙßw—Ï×­H!X×äUOlqSí‘Äx‚u“žØr>Øü{áEz)®ÅЉã/íê×o’Áþ5ßÔ·r…nŸˆþuÀéÜxÛÆÿžÖŸú)ë½oºkƒÓHø¾_á3[ >ëü꣸¥±·J)OÞ>™¥\œâ·3”8'ƒÛןéT5nÇIš8nF¹• ¤ÄÒHà8ÜwÅeË⋞E¶ ä5ÔëÏP»˜r;â¡ÔŽÅrœÔò‰¼C©Ï(\BXØd¬jÄ*¯ Ç¥t> D…µˆáEŽ%¹ˆˆÑp ˜†Hë\½¼²\ë—“ÜŸPbâ2H àžMG¦Ï{ró˜ÿ¶~ÐÎâ è¨q…bö^[¥s)>cwu«µÛ¢1ú NÇñüèsùÑìÐsíÚyC÷ÂFçåPI«£P³™x¸Œ;¶ f= ?#!#'“ïKÙ ˜Yî­CœNô9ªl¨Ø6ÈÊÃçãV‚§Ò—‘oSUr‡5Å ŸÀ péTµ{ÕÒt›­BHä[ ;±, ö5SA×—Z[„–×ì·Û ¡”0!†AB>´ùãpåf¼ŠYp$rt?ZcÍrØ(XŽ0ê3×·çM ç‘ùÑ£Ô[³\?>dzò­[¨W ,Mþú?CRã=i§ häOqÜlw·Ü‰¡„ƒÐÆÇ¥;íR爋üô£¯cÔQìâ¶]òÀ˜õ/ÿÖ¡®ï6œ,úo¡ws{ÅŹ²H­¶â`2à1 íëŒdVW„,tJÏȽ&£"X.'`œœ®ÔÜA\å]TÞQ]ÚÄ’ßÊ20>RDGMˆ¼~''׊²žÒ£´’9í!û>|ÉS’{ÌnTžA•6êV§ÐEˆ5h`ŒE zŒŠ¨‹€0; ë¼#*ZIâ îfHâY`/$²`. Ryïþy®" €š®¡ž¢â/·ÈbžI !^Ä·Wöõõ®ÂÉäjú¤×:]Æ«%¼°0žŸ¹o(`ˆ‹ŸB2k;I›KáEßéwþ.²é°2ÙÚ–`×nQn÷`|¨GA€Alu<Éw†ì/|+mr5;y¦†i lÛÎK|6”0÷À"·ÓÄÚ4’´rßÅm?ñGz¦ÞAø8ãŠÕ·xn’ ã—Ž9qíƒÒ¶¹Ž¦mŽ¡eª®lnã¹+÷Â7+è Ÿ˜t=Gj˜¦#ØõÍI¨èÖ:‰Sgî¹Úì¿:ôèà :†© KeÇRÔ ’FÁÆ#UÌ+vr ÛÉ5Sf³ãþ%×iŽûíÜþŒ¿‡Z?´.ãÍ¢ß(=àxåŽ9‡bë!(Û’*€×4´|\\›6ô¾‰í³ôóð«°]ÙÝökËi†åœêßÈÑÎ+ µ‰ÈRª’~j´-òÜ+séÒ¤0ì¯sy…Ц0AôÅ3ËpM]ò² Q‘íÍV¹¹µ³ÜÜA<~öE_æhæ†Éã¥UþÞµs‹$¹¾çÚZ¼ˆOœ€ŸøõR¸×%MÛΧ¯}Fý7ßN£˜,i¾ÑŒšÉñòZé1Cz¶×ÒÇû¸‰¸8P¹lÎ;ÕSymvI—Xº¿^…4»G“ýÝÑÀôõ«vR5²²i¸Œ‘’îÉnÿ´I.}ò õæî;qsgªM¡O}¶ñ…ÞßhK†ß‡CÃ`F9§×´ÿ.«yªÍ4ö$ /-™Žw€q]7ŒFªÞ›ís[[%ı@b·Ý#¶çoeì9ç=ª xoK»‡S{»(îåŠðD&›&L¢# 0AÉ'"²å\Å·¡á)_NÖæ¼¼Yltè¢xK$Mörwàn9!sŒƒÓzôEe’5–7WÀepÜ0õϧ½WSÆÛ­u-B3 WŸ¼RQõ¬çðåìo$¶“[$’^K`önÇÔí.Œ}ÊVŠËDCÔÚÛŽâ”(5‚'ñ%–|ý.=B5éäHŠøï6Ò¬Áâ vÏÛtýNÃ×ϳ“`?ï®EUÚ »3ÛŠFEﯯ¥Ì@S³f?Ãç¨?LŸÎ¯G²^"–9 þä€ÿ#G0ŠÜgÖÞ§û3ã”#ê1MòOBO¡§t9ˆ±$Þ³Y 5(·b5觯âk‰ñ¼*|?l&\†Ô­À^¹ù¹ý3]±ûÇëXIêZøCÜúWŸh°Kªx¿Å·1]IiÜÇ yJ¬ÎQxfoLð3ï^‚N9ô¯7ðÕèÔ|NllÒàI«Ê|çQ'ŽŒO²÷ëèís«¶ðþâv®®‡IîÜÌãè[ ~U«ÛË=:/´_\En‡ø¥;wc°“×õ¬õ³ÕîH7Z˜OX¬`ÿ|±ú€?•fÃD²²›íÛƒr8ûDÌe—ÜînF}±ÒÕ•×W»ÔNÆÙÅÝé6ñôê1‡Ð úŽ´±èQܺˬ]>¤Á·Yv[)ÿf.‡êÛiJås—äzš­ö•‡­.bý›<Á—gˆµœªL0=?ƺÿó©x€ç–Üqÿ\ñ\hbþ!Õ²OÍ©Lyíó`ŸÒ»/°K­uǦƒðýÊŸæMd¾+–Ö‰”‘¤èc™Húq¸Ï5—'†tY9:]¢¾s¾8„mŸ\® L×ÅN9¦hóÞ´æ'Ù²#áèÿ£^êvÞÑ^¹_ɉ˜úF ªD »SŽ ÖðIù š±ý¢:gõ¥ûxÆ ΕÇìÙR-z%ÃkVS{¾›ƒÿŽÌIäkkóié¿ø.“ÿÔßl üCó}¨cïÎÇìÙ•®ƒªiÀØ>Oþ=T®t;‹¬›—Ð¥õfÑ·ÖcZ"qžÏµ;ÎÏSùÑpöf/ü!°:€g‚<ùwÓ¡Œ~?:’[C’º¾²…±‘áˆ~Jl¬Ý>oÖœe'¾h¸¹˜|#¥ÍK¹/ï21þ•3þ›…2ßÀ¾¶mÐéŠýá4™?ŽìÖÌlVN¼ŸZw%ÆÆgü#:;dÓà˜Ž|Ò?ÉüêÌE…«fÚÆÖ?甿ÈUÐ8 ð3ÒɱUÆO$ñÓšzãŒæ£vÃÓDã#‘ùÓæ+’èç> 2'NɨÄqë´3L~4¾ì5WÝœêrŒýÕö_Ö ñäÁãÑc#ƒzÍùDßãSø?ÙZ“åµKƒœõû¿çð¨OÞZ; “gNzûS‰Í*ŒÆjî$„h×9Àü©Tm;—ƒÒ“>ô£8£™‹•‘\ÙÛÞ—VñL¾’Æ®?ñàk2oøvá÷>h­ëÿô+`œwæ&:ŸÖ•Õ˜?ðƒèÈ1oÖþ¾\™ÿгAðuºŒC¨ÞÆ=/øVá™AäóJ'ÐÑqò³‚ñN†t±¡¹¾º¹Iµ‹hÊI#‘üG¡b;W£§ë\GÄiâ]¢2ðSY·?£×l~ñúÒ½ÅaÝp=Çó¯:øw&í3S»ÁÛs©Ë"ÿ»òסžœ~«Éü®éš_…ößê0A'Úeo-ß2c#’ ù Mظ-OBûAìhMÏ&¹ÄñF(uMÃ+ö…hUǨ.¢µ`•nb¬©ýèÈaùŠžcd‘biË·¿SQïŽ:súSLnNv7å@÷(*Ø$”®;t:æ§êu¯ý «§ðƒáµ¶ææ!øˆ—5ÉÙ¸ži.ûÜ\ÜJOÕÛü+©ð‘e³ÕYþ÷ö” Ÿ¢ „–†ô’5óHíÀ#Ò£f;NM3D<±9¦™ ™Á¤‘@É÷žüÒ‰^*8<ÓÕŽq´‘ô V,y¸Œôî)Ë#2jb óíJdšb-,¤µ"JIûÝ+;Ì=sRG#Œ­ùP#]&#Æ}ªÌs:ÖÚºãÕ¨^]»°@>Ôst%ÅOv¨pM0Ýej›çži£#±Q*(•ÜœûÔt„óÁ¤' Œö «· >¥¡&pª×.G¸XÀÿÐixEŒEË)âMJå±è7‘ý+'ÅS žaÏ5)êJZ!¹>ætþ*–öéwñÍ]ÇÊ‹ž{{ÓÅÉ÷ª„“ÔÓI Ò¸ì‹-rzÓMÁoQЇ z+‘•‡PGÔPD¾kg­(— WÉÅ4;Ò¸ìs?®ZÂ~XE¨E&¨ÅzIûÇë^qã¾Øú‘çÏÕb„Ïþ…^Ž~ñúÓ0žã‡Þ¯ÐΡoms ²ÛíK¹Tù²8Á Ï +Û[·Ô:ò *0V@I1êw OüVu~ì8V@VIl#SÝQä?‘ ~uYt8‹ù“HwðÑc[aøìÁ?‰=ýk[Ël{R„ÍróÞE¦Ú‘óÛ¬§ûÒ;9üØç4«ao«Æ’!ܸ~›±W¼¾;ÓYJG#J£Ÿe'úPž£NWÕœþ͵®3þ¨ž~¦´´ËÍJÌÞ¥œÖ¢/¶ÍòÍ cž3ó+Ú¨èÈ>Íj}`CùŒÿZ³¤Œ¶¥’x¿”ütÿZÖWGTäãcRMSW Ka©[fsÿ6*¹—Tg%µy‚·Q¼(?ôRm´Ÿ‰¬ùÙÎëO£!s©û½Z`ßôÒÜÉV«´¾#WãPµxÇM°*1Š‘ŸÎ¯c'éNǦ¥Ü=µEÔ gÖdR²ÍxËé Ì)üà‘œ;ÚjRìuOþ…Z s@]§ ‘G0Y¾¦c ÅR ƒZ·'£%ø8ÿ¾œÕx‡‰b‘ZFü®yŽyÐþ¿0ÿÇktŒt8úS‡"Ÿ2i.æa“\“­äèsÑïÿøÜJ"*/쫉[tÓBì~÷™çÉŸÅ¥þ‚µûÐÙãœÎ]ÌuÑ™QC¥m'86lIú’Ʀ¡jsjR݇Cg{,\}YGàjàãµI£œJrNå5Õ帺½ñQ’õ IRÞb›K9ïÍOáÝzî×ÃÚ| ¢OG?¥G· ך0[ŽjlqHT `Wµ…dño‡#nŸj‘ÿŒ‘^¢zW™[>Ïøk$m7¡ò¿úõéÕÙKàFÑØV8W–é£uÖ³2ýÙµ[—t#pÒ½O¸úŠòŸ7›£$ÙΚi3õ‘¿Â•o€%±¦j†¸nF‰v,ãšIÙT*¤·Þ sŒþµ¡ŒRÕÉõ3NÎçŸ\°uœišš£7-¡Cž Ïø­ {Q›G»W–Îî)-ã]¬¹IN;c½uíɤЮŽ0QÆC}kÎüK ®‰)òU¬Ùòœ· ‘Êǧ°®„âÙЪ)nŽ‚Ôîpç*Ÿú¬ÙµK«ªy7P[‘tç7ÈÌvŽvãÓµhÙgË^Fnsol²My+6d{™k°1'Ê•[Q¹¼ÒåòåµÖ p…Îû¬£‚yÝÒ’<øN¯>¤–Íx%»ù€ƒaGîØ7ðŸj†H­PC/a±dÊ!ó|Ò’ §å““޽j¹{šIÂNéX¸u=JÎù-¦¾{ià-Ï•p„úo^kZjklǫ݃ÇÚ¡ËEŸ|ýÏåXöZ|·JÄ•]]{sðTà89ßó©ôÉšm5¢º÷г[Ȳ//'J²û¶ñÿè¹û%ó`×e$bY'#=G]œû´«ç›hþ8+ZŸ ­M‘htçõ¥ÀϽ4JqYÀçnÅ4’4¹éNÀ/jaê1JÜŠV=éZSÔš;dœz`R™ÙÒÊH<„êHÍtp&wÉÎk˜¿™³{•W7/‰’ëÓ‘Ž{WB:S±91Ï $ ¤Ð¢•ÚG¨üGZv›©Þèw³]i1`Ü'ÙÞ"yW?tã¹§¨¨d#”[Þ2ÌegWŒã¿=Aæ·¼+oFHiHúÔÜÝÑ’Wc- ì³\´%­ÖI|É ¹¨.ŒŽ¤•$ôæ­Zúç.Ò;ngcÔ±õ¦YG5½ì‘\Häef eüx=k6mji]ÅŠ"!ÿ–’e›¯ø8žº Æš»6¤d·ˆI;„^åŽ+=®%Ö –ze¼³+¯!@±ÏÝÏ<ŸN1ƒXS4×W'sq3€ªÌÛƒl‚=8Íw3êÎí§è©e$@ò`'©£7^(·*»1­‰mZ$Z–;{Ø%™fò.š0Q‹(W€OÔÖ¨8ªÖv±ÙÚG ˜Ó',~fby&¬W$õgšØœÓ‰ÉäÒQúý)r÷¦³¬ dpÄ'Í…RÄãØrj ‹ûK&ÅÝÔ088òëTÄúr°Í%Ëá ýHš‹¸Òf~*æ´3ÃuçÜKF¶ÒógØtÈéë[zC9Ѭ„¨ñ:B‘²ºàð ?*¡'ˆ'•OÙtÙK†iT/âsUÄÚýÐíp[úenÿãÕ³„¦¬k$ätƒ>øúSx¢lK2'ûì£úÖš ]•kÛ™îñ d!OÑG¦‡Ã–HãÖÿaÝ‚¦]›]Ò¢mJÙ¿Ý}Çÿ øŠØ¯ú5µåÓc¤P0÷Ó`~•v+ ‡dqªDEIon…LŒzäæ­P]F d.·}&ï/F˜ g™Óü)Âï\œ.Ú–fy? éF—ttñ-ºžó¸L~š†h–2ª$ŽCßË9©R‚è>DbyzÑ|=í²‚8òí#ó&˜ö:¶uiÀïåÄŠA[¥w1ÆzPB¢eDZ\±Er£™Ó­dÇI®§¹&áŸ37Lú«Úº×•ROx[ÊEM³ÊÑ‚r£¯ë^­M ™^)ÿ‘KZÿ¯ÿô[W£ý‡§ãñíþ€+ÐüD¢O jÈÙÚÖs)Çû^gák“qá«ÅÆ}°ÇòÅeWá3–ƶÂzd“Ú¹ok¶’i–ònšFh\ð€Œú“Æ+ª¯ dŽq\ö“m Ý}±å¶›í2OêDÒ##páyR1×çÚ²¥nba¾¦Æ·ákMÃVZ”:™—Ì0Ç*ɵá“w_/c'ð9Ï~:vaf6EumÉQ·?ºp[®9ÇOj•måXœ@_A“ƒfäuÏ–AÇÛUªžUºË$j&LÛÌ›XsíÔ}Fk¥iéduÖÃ8ÿ€ô¬iZD‹ [‡®\a¹`F ôAÇ~§5­gðÆê b¸´ûuñ¹³i?Ò\|¹éÃIh \­<úíaÓ´¥·1’YÙÝ‹öËJ¿§ CAœ}ŽáäºTˆüŠ7£sìy÷Ôx'DÓõ2uÔçš9✬vërb1¡U`vŽXäžNzcµf_BšUÖ¯>ñk4±¬²½À@Ã'¹Ï…2騽ÍÝý– ‰LÑÇ4æFwBùŽ2OÝgêçòÇ=sW,u .cÓGÃ9{|D ”b¼u' ‚kœˆHÙW{½Ïz» P[Å}H‡$K˼p7cîuï@•K=«Ns5œÄÑ!'ßhò»I;GjȰԢŽÉQ pð ¥Â*žÄ»t=³U¤Ö¥fÂKÆs¶ÙsŸ¬Ž1ø€k=NÅZ)jZÕæh>Ý&åܰ%ª‘‡s“ù Ô~Ä¡›…·I ž¸+ˆÁÁô‘î ¢öš†¡o˜med¼ÕDW;›¹b~ñÅEl·fêd±‚ö7° €© ãr±#ŽFsšÑhpÔŸ3Уù¾VI]‘¯+Ç9$~†ºê’4a$ a>VP¿ ryçØg€PMy¬]¢ƒÃC€1vùÜœ³·,O¹9­ÓâˆmôÍKqÈÀïR"’¿Zµ¡CÔŒ-L©±P1RðEM ¤÷r­biŽ©¦+‘  G§ª1n‡žœ`V«ÚÙèb?¶u|FV0O–žæ³.õ)ï&Ý3£¢" z k`/·J°·×1Â"ŽAã¬hªÇþŒÕ#œTƒ¥3nòÌä»ìrsë“Þ¡¼½K|ÙUçú~}jrG"²õ»Su xm¦'óã?0Æ;ÐöU¾ÕnÐ5­´pFßu®Xçò^•A&ªÜ†ûF£H¢Ïþ„ßÒ£‡Ä@§ûZ#‘Á¹w/ü zÃ5³Ì7,–Ò¤±‘œÆr?*çn]Œ[™‘¥XIiãOî®$?8Ð{yjH#ñ—†ž~Ñ*ôõL:õ*Ö›n:”›{”µÅ/ êJ¼“k(÷Á¯&ðO‹þº¿ô¯e–5–'ÆV@TcÅx÷„"0h"ûÑO*î M_€RØÜôà­SÕbºŸNšÞÖîu1²ÊÛT)ïõâ­÷§§9Á®X»;™­ÎM?Qµƒeæ—ÎÁ…˜aXîëT¥¾‘­þÌñÊÊdL” ñ|ßÂý ô½½H8ük?RÒ!ÔâT™ž26øðã $öïøVêªnÆÊ¯K–üÝJz“ŠÌKxfºÔeÔÖSvøk¦009+Iæ¶£Ðï"‘ÊjœûE'êNGçH<a4­-Ô“\Êç{;…˜õ8QÇÓ5|ñCö¨Ã¸Óí&›v¡ªÞ™WîKq¦¹¶Ò3Ö›$vÖö­ Ö·p°m%`[Ì$p0p9äç§zéÃ6j›a–òÜúÅrßÈÓ!ðŽœ“ f{›‰?½,„þt½¤CÚ.‡ŸÆïjÓŒ£(W†q“йg©Üér:$ƒÊ¸‘$¡™O÷—×Þ½ 4=5€±„©êXgùÖ}ß„,gœÉk,–c¼Ž0¥WÜ÷~´ÕTÉR9ME“X¼h¢‘8”f©Éùp äã?LWya£ZÙH óXpd“·ôǵfŪiz5»XhñIzÑ‚O’À£1Ç/)ãþù¬»Ë‹ýR2—×$ÄåÚÝv'ж2Õ/šZ¡Ù³zûÄ–09†-äê9ŽÜ‚öÜßukæóTÔÕÄÒ›vàÁk!%‡ûOž žÛM  µ8P¸ð­(¬L³8Á5¢§n£Q±ÏZépDG“nŠÇ£mçó&¯-‹4 È8ì=+a`EÆ1ÇjvÕÞp]‹"ŠHˆ*>µ @¥)'f2qH¹fö 'ŒÓdéRŒ¯SÞ¢#*z3n[гùGCùÒF€œ­O¼÷E’Þ'” ‚)%~¸ .0Ÿ›ë@šHw4NÈÀç(ÄÒŸ=¬öÅ>ÑÅ»;C‚3ŒgúŠ®äÝphÎí+nvfcÉf9? õ .Ï¥*†-ÀS_˜T½8¨ŠÍýh= ²ç‘O=þ”»sŠ‚k8¦k…xÅb\hkò\6D±eëy5Ñ(*NyÍGx¬bùC~“ Z{Üøm&º–â?µåDØ,§§ÞÆM{UxݲgÆ^îßjÿ ôû:âøD|>æ¦à2…mQG4ŸP3-¼=¤ØÜ%Åž—go4yðªW#=+F–ƒÒ“¿Q£ÿÙnget-0.27.1/test/testdata/0002/yenc_multi/0002775000175000017500000000000010162001761020361 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0002/yenc_multi/00000020.ntx0000664000175000017500000002751207366650150022020 0ustar donutdonut00000000000000From: develop@winews.net Newsgroups: yenc Date: 27 Oct 2001 15:25:09 +0200 Subject: yEnc-Prefix: joystick.jpg (1/2) 18 yEnc kByte - yEnc test (2) Message-ID: <1025f.ra1200@liebchen.winews.net> Path: liebchen.winews.net!not-for-mail Lines: 251 X-Newsreader: MyNews =ybegin part=1 line=128 size=19338 name=joystick.jpg =ypart begin=1 end=11250 ))=J*:tpsp*+++*r*r**)*m*52242154347657;F<;99;LCD>FSNUTRNQQW\jaWZgZQQbvcgmorsrU`yxp~jqro)*m+677;9;K<\«»Ë2MlÛë?|ûN]Œœ¬34@ABCDOPQRST^_`abcdmnopqrst}~€‚ƒ„Ž‘’“”žŸ ¡¢£¤­®¯°±²³´¼½¾¿ÀÁÂÃÄÌÍÎÏÐÑÒÓÔÜÝÞßàáâãäìíîïðñòóôüýþÿ=@ =M  !"#$)î*I+*-+++++++++******+,-=n/012345)î*ß;*,+,=n=n-=n1/=n=n*+,¡*+,-;=n/K[0l»ËÛë3M]|?Œœû4@N^ OABCDPQ RST_`abcdmnopqrst}~€‚ƒ„Ž‘’“”žŸ ¡¢£¤¬­®¯°±²³´¼½¾¿ÀÁÂÃÄÌÍÎÏÐÑÒÓÔÜÝÞßàáâãäìíîïðñòóôüýþÿ=@ =M !"#$)*6-+*,;-;*i *±—µ¼š1¤0yz©T|\qxçòÞgTˆ´$ %„ÿ ÂôÅ—Ø´P+GÚ§)*6zÌÚÛà i¿P ˆ–f[§@7É´Ò©ÖŠ&Ü]}P· OB‰DˆÉ×ÔIˆô§-ÃH³ÄlíØ=n“ÈM{­=M5æ8Ñ»©~É Äö³³fƒÒÚù~rü¹[MéøqC&Ò&)*Tí Üœ¦ÙIò‘Œ÷÷ GœŠ¥E˹qÜÂÍü*óòH=M?5ð3¥ÒGL¹ˆ”hG›hËš©×ê(¬Ç)*4íÃù9'ái yõäI\g*¤„ F`ÑŽÑ iðϱ|Üâ)*{£—Y'Ã…$+Ií)*7ñÉ1–)*¤_KA°Æ9"À=MIÃñÍh ‡¹m€b€}LÆœ0ri¿£P¬Æí™3¸ë'wR—Ì6mÔ•z¹rr(¾¥S¡mqË=Jûˆ›Y¬ÖØA–ä ÐßLHš!Ã(•v‰±B%ð#'¡†È©tˆô§úMüfþ1/M}±gcÙ^i8&c¬¨õh§¨úþ"&1Êñ!Jã{5ÑCÍùä8ޤV¼ÎjÃGz¤Ý+z©’‘I•áùÑÆé=M†d"QíôÅx…=@ƒ©ÿa&L„0['¹•)* ¦ÉÑφòü3Aœw=}YÒšqÑCÍ-Pn-¯š—=Jé8rœn*)*Üøi»Ð©ì7 ø$nm(ó)*ï{Éšq¤XÊo)*§¹Ï%~=n=Jw@©=I?=JY7é&ìê)* “1(÷y¹ °x3ý]Èy(TÉܧ íàeÁþV )*…¡˜Ã(Ôi×n¼Ñ7Ôƒ-šÉ=M†æH,þŠp®Ø (—€ýëˆElB’à±ÁLËìl Þ«¶àMf©ñô©·räàÆ)*œ(ÿéÇyÖy"næd+i¤©'#>©ìC 1&ªÖ£µ?Å“ŸSEé  i#™)*©&“=I@£)*¹Ò\iÔ)*·Š¹=n"‹ÁMnÝëÉÓM‰°ûšäG³InB(Íqâ#ƒÜ俽âoæáVx*<ÓiøÖ06\Î;cØ£æ=} Ð=nG8õÉr‰ ¯»ÎL=}P»©½SQþ€‘€x0 š©Mv£¶¦Õ=Ib(Ÿõ¹,’’ÏŒu«Bî¡ü«¹%ÓaíI7fÅl¢eÂÿ!-ܸ€>e¤M¬”}òÙ[A¯^©8©Ž‡`À£¬‘Q“Vr%ÑIæ¨Þ„ë›É„=I6QÁ‹¢ÑàÍœi$X=M †@°[HÐéÿ˜ñ(nד&nõ~¥|'“+S•ZÏü}Û´ŠaqÚÏïO*>›´dû´*1üÈd}jÏ0ºïÌ´9-^*Â=M´/W>*|HSy×^Ä*t†ü ÍÉ™î=M>Ø-ñt÷‘wÙ“@Ü£}=@[òi®øb$=MωÜÄU ²¦%“ ÄV»p ¾)*ê±?fòŽIœbÕ2Å£fzÛ:ª\üÏõ¬1hÈÆÎ@D÷«¯'T‚½¤GTJ@Zþñ¬õx°Š½BÝ¿»¡Ë?þî•‚íÒ²´‚u§ýÉvþ#+°80”×–›ë1J$€ˆò}¡cC(ƒØ4 È}¢ü—D€Ü©ÌÑf«­¸ßSÇzÞ|¯µ/ù×QÁlFJHþfÙp?Xû½qG=n+‘Ì6 =@—ã%ÈцaïCèù å•Ê\—Ÿ2MÑwãQÉîwU8_ê±(l&)*öˆ)*mØ"ƶiÇšHHh—¿ê›Òth°liÏ•9²Ã–•8þÞÇ/=nl]FetÛwGSÚ¤zZÏêÎø£ÏëÊ=nJ{´†D[ð R*BÍ,´ˆþ3/YBëм¥z8q^6„R̪:»ÙÙ<ôNFÝuU#šë4sƬl¶0+O¹jT ”°=@ä=@±™57=@{†ˆv5Š–Á-ãyú§”P´m üf}£÷£Ï´£;o-†Ü%][-hâΩ1”d×ñÁÙ”“X ÇB#—ÊùÖÆÈ[»ª“i • y#›çæ¼(ãZ¼)*!þ»¶)*Ü=nu&”£ÙXÍhËÍj©ß=@…OÝ£H?ÛÂíÇÅtªu7¸uGæ;ßÝù {ü…¢}jÞ¶NDW¬ª[À«‚ÉÓJ½ØæIŠý5ÇSÅqåÜ› ó·×ðkÛW‘~Þã¼î”›m/æE‰÷Gãl¯övÃh–Æ=n=n®1f`¼†_úÿ‹ÛºÎ<ôâà™ÝÖ(oÀŸUâ/\aöíœËcJ8*Y•¤m¢oæ=@L=@ÃYWúò°ƒ&ï»ÜZÖª“b$,§Uxîl2ÞïÜ áu%×uš®o\²ÂÔ³½»¶*ø£Öc|RÖÌÝæ´b=}ó¥õ¶ÅmdFISÄš M7ÅC®ªŸïçquݹïÀšàsÖŸŸÀ þ‘–|ñ¬QBu‘“ð]=@ÜÒØØ^w8é%ÿJ‡h‡güE«£Ûõæl:\…'Æ‘» €×YB`˜ðuc\ûuEqNj¸¶¶+CCñ×rDÚw[Þ¢Ä5QÆCFÁskòº]Žød$€¦èGßÄE²X˜È£=MÀ…áTöiÿ›ÞÒó#›¹×£Ÿ?a¥™EYó›N³ÝQeÉ÷ÁIJäp±G‚ܯ]ò‡€‘  %ÛoȶkCN=}ø*ÒÙŽÞûJü^ÞuãK“£ÊÝ-ùÅ+Å2A-£-MBz1u?ϯý휓]럡Uç÷ƒ:Ca#«v¹¬1ˆÍ½«y7®¶ç#eÄtÍtó@ËäD¨åΆóLrºÅ‘Çœòƒ¦àš[ªšxq„=I³¬À ˜Æ¨Ik†ÀÏÎרÓ΀á@Ì #XŽ=IEŒ‡ÊF³B~=n=J¼¡ ‡m`=M¶Øñ†T?=}¹|åÌéVkIahÿN½£† Ò‹™X`VqÂybÐí%B >Èì‹‚ú¸l{œ£Ó=n­ ]ød|"B{=} ßs>…\î· üÖCMÃ"ÄÛ骟`ŠaS®Ù÷{&µ¨ß‘f¬Z£Bg•¬"Ñš=}ë}ðæÃØLµ¹Ó™‡*b-*š/¥b“}wÃ_Ò(=MˆŸ 6¹9L=}À¸ ŸQ=Iö'•ûå´¹47ħw!=Mþ˜±Ë‡Ú"¶ Ûå&^+k ’0ä;Â8Π>˜=nF{Æ´{=@ª>žÏóÐý«½+q=@À´ez[9t+ôüýšjK¤üžb>úR++cÏÒñ”†´*€Gç”Ö ÁS¥0ËÑs>¡ûpú¨¢ó7ßÛòëC=n8\€%|¬cÎÿñ›±‡]Ûžu{K ±-)*Ki„ÙXç Gb£d—ØÍ1E=Mýîû8")*ƒ"Š%úíBÕZ‘J´÷ë‚¡]W(M"©¿1ášûw-ÕÓMBÕÉ¿mQù‘Ïš6‚j$1÷)*+0Þ¿(Û)*Í|ÙÂÍTu¹ ¹_®'üÀÐsV½ ¦ä¨µÔ†ô¢,…˜ª%ÞÂê$-{ ½Gx!zÿˆ-ÓvÌ;FcL*s2ÖjQNÈ®=Mú€=IÆØ ½°(”ÇUÔÀ/‚HIüâÕým‚ðƒ†íK¹ z¸1¤í=@™·¿ØŒ¹ùâÇ=@5¢œr£FGÊ)*ݶÛgª_›cJ#ç å)*«!Ö§ˆS>=IñŸ——O®Ø¶€18ÅrVc1ˆŒÆSGfæÕœ¥ue—D|þXvOa=Iä&öç¬!5ð*FF€Ñ¯Œã½v§m{|ÁaüßôìÂMi›gÚâùãØ¡í{©ìf!¤¾Õ‹ÐøÌB~Ö\r;s[C ñh߀„žŒ…%âWíyLÊiÇ¥šx[ãùc‡Â¨^àÄwPEÕ‚€pý@ø\ð­V=}þ¿=nË÷йDN5ŸŸÔƒr-ñf=@®ïßäœÎ¶€çÙ“ÄÁ®_½Ñˆí¢„×ìâ OE:ŠõI×õ픳M À_ ƒ8¢ø1{Ö•ü¯ucËý½…CÀd·ÐÑE†‚q›2BH}Ž%,9JÉxÌ×ñMÒeÃph#GAú§¤=@=I±e{æ¼VªÏõóö­%ïMéŸÔü”A8ÿñ–a—¹}áw´ÃT+®óêò=J æôâPÁ^_d?oÝdrØ\ pþhÿß¡Áx*ÛG¨¿Å=}Ê·eŽ8aLîœÖe:¥'”öWOë#ÂÌ8 Wa“ƒ®=M§x©ñ›Nº’`Â=n†•:0¤¹ÅiøåÀ=JÉ×›HV—‘ì‹2êþñMUáÙ¥3&Nœu›sMIøæí© Kûpá&=@ç>& qÙe¿äJM1%”=MàåËã¾àa9ÎÏ(+Î_ú¶êFÁP«¶¥ûÐ,´eúgÒÊ1,“¥}S¥|+}56Ï6`ʲ÷-´’fýÝj6,Á˜7Y>Þ*ùð¾H¨Þ8é·e-üªF>ŸÕ;GÊ+«€ÌEâÓŠˆ®˜f þ÷â-á* ÔÛ½È=MF›tü†ðænÜ8%…1ÙhÞ`¬LÈ{ô‡ëñ!»$~¿ ¶²Î<ê¥c#ªI'¤áOTûõC!}¹üÚÇpGUwäé1òl kÂÆR&…?=M½¾¼yÔÄu€}þ_Ë7ì zEpŠt„ɾn0\ ü<¨C&§Ó=@¨E=I^¡¨JâwpI¼`òßá)*›9}(û$þ(EüÉxýæõ¬IzçL¥ã¤A Y%ÔB+„É)*30Ä!P÷X»Ø¦ ˜ŠC8s1iS*ºgpqç üÌÓß8†¼ÏÑ´_…c†nYͰB–%tsÞ¤AM Ù¨¿ï"ùwþi dâ•3Oæ£Êst/s7Ø¢u&Û­f›¥G&KO\Up ‚· 朩£yó$×›U™›‘ 5õ…åú™ÎãaZˆˆLÖ[pxhýáJfå²oB=MGÕÜ\äÛ¶ÍXÁÑ“½“ ä÷͉ˆ”{ó©^´{ôp Ï]¬£I`dÈæ˜ýïQ‰ÿÐüE奀³xXPlt0Xl¸ÖyüàßU5—x=@ue=nºcõp#E›øs¹„ ßi>’ÖzÀ»‰U³ªqC·°=@4iµá^¾ÙèâœÇoɯ—m‘{þ£ŽŽi“[#¸£õ–-hê GU“=MDSwZ+ü´[oUª{Èþ{´Š=n{¸S’G=nY¤†ºŸ¾'S6kþ}Óæ ^-j3y0¤›x|[=@ªH9-´Û-Ó–»±k€ J˜3?YŠVqJó Ö?ši=@aT ³ÀŒMž{z½y¼uîlö=@g‚ºid•a Öžk’`à)*֦ƛ%Ü©¿›(_¦"ŒÃmN|ì,äÇÌkÈÊzÛTûØg¢IôÒ:qŸ“^aNs?ì^x»òöjMCðd¹ˆÏ}È\á~žoÏEAr|†6;ô¶«ðijc ÔdﯸËKþLêÏïø¹+F±2$¥¤úßÌÇjÚþ^ú;øbÄX tgp09Ð1×€=@Ï™ÐkÎWò–Ïæ äž Äï Ô—v¯fƒ4ÞŽ‘“W¶¹¤Ò¬5Gb† ˆõ•dßÖ“=}˜¢¡˜ð2Etc=@Ç>HˆÉOÇÕóFÖÖ„’« ê ¡-ñH¿”ñƒè(ûü…—l GfÉ^ðå¬2 *¶ž+yŠ9¤ÕX®ÝúØKÿ_ÓEøÎ@KÍ«ír\¨€º¦Û¸ÉT¼¤ƒˆPü ü^µGqsá‚…o¾ ôÛL^w¯ºFx*ccfD=@ú&kÙp¨ôƒ¶ »lä«ðpbU½¸d¤8¿Ó^;ì XŒÃvœXdÓ=n;‚‰ž ^ulä\dUêƒ »mpª/rô(®²uY®=}¸ãù62&i™•ÃÖ¼ôqøk[Ú-ºožÀð]ü 6¼\Zi„Ï14Àæõ¾èN™=nÁ³lñNY¶ihe¨¤ÉÓØM d¹"jŸwô²š2× ñÓ&©Ç¤9=J&øsçq½ñ U­XÕ=M;ðbPUph"€Iþ ñ4¢÷£=Mñ^é©T|áÚDcºŸ9í¨B)*gU{L£˜…p”ÔÝFðyìoÑ5φ£Ú÷E¤\=}&ÔãúÖ‚ùßX”ÚäY(Ô“1Òv©\Svá-½Xi»sÍÃ/µCÌÕE%žB»öw'09Ë™ËSåX~2··e ´ïÖ¹Ñ=MzOX ±K¹jivÓêQ=Ioê]td}reÚobžÐ,+òÏĆ4zãHþ*íü¯ùf}¸:<¤Y†þ;ñhËJs´8«ä]%ßm¿°³ó\rBy>Ú#á#@·®«ý²fg–ZýpN¡¼•ˆ2¯`î´µ Í?½Ò´5ÌîÓë6'³cÓ ü=J³í®N¸ï³? ´ó¾^Xd/-}vr\ïk&dýõŠ ËĀΠ ø]b>ÂFq´ˆî?ϯì„=IJÄ >@¸_**b(H"hZµ‚þžBcNãàÆéÃŒèžPöÐýµxYÓOé­Þ2W<`ÜL,aòÅ–&µÌë!Sê,×µf«É€÷àêuÒùÄËÕêN:Vq†|Ú†Äe†[1ÑxÞý­ž(žõ—t1*åÌ‘Ðx7ƒ¼(Z3Ãc&’+…TJ=n -}£•'ÿÔQ…Ü|mu¶©Ü”ülí³ÍiKv4á€rö…ŠPÔÏÙù­H+=MLÞPèᲪüØyË÷t¯ƒm,2f¸ÇR-i%gŽ=MCGs'«’=MYH=Mú7î9õ_Ìýo:#gaHß„w„=@M¹Zcz’?ô‘íûYZ=};lk (Ÿ=nÄn;V<+¾ßÌþ—N1+ªó}=@ΕÂ4L”¾Ö1dOJ‚Èi=@É>rr/éåú=@ãȹ$òë bÖ's¶¢lÙJME8y„p O̯øúð‚=n õ‘á=M=@àÈBË€7±ñbÖ³ <îËEJG k>¸=MR-Én ú=}ÛéG=J‹H\ËfßP…ÒzÝðC+H ¨ÞqÓS‹ù‰üÛ›’ÎøÚZML¾Ö²r®˜˜q”™ èö ÔtÛ¨{FnÄò% ¤Èh¿?ðΘ¹ôÊXg8•_Tsòð§’ÚG7Æ)*cùm´ ÿpEpcØ„ü›ãœר=@BúKCj]q ¤=}sëù=MƒºÁsEj ÉG$áõ¸£ÊpÀyçJ‡Îºdÿ•ÅÛ<ºâ÷\#‚*½ø’v6'‰ì äê—|…³º°¸þuÜ^¦¡õ°Q½ø´˜¹ gal奵2ƒC½N¾ò :¤S–ºg£¹ta{œa´¬ vÐ=@ùˆ¤}ä,=JJŠzrÖ©àe<¡*gTÏøÐò*<ÈþÀÖ4c~Äy8jx6ä÷ã$Ô°iö‚¤Ä÷ Øß=I5œ=I[=n9ÊÙlÔ+…Ñ_ä‘Á=M™Aà¡+gÜMšqˆ°¤ È’Û#h_œ‘ ˜Š–=MI£GÛ'T=MâÃå ¢Å/Íp ‹ÉïwD¯=JR-zd4‡…mŒBÿèS$Ò^È~‡Ì¹(">Ðxæ¨Þ¯áŠžoº±S2bê$6}fµ©#;)*ª9Í»u»oº^…j沺ý>£:L_0¾Æ ÈRóï@j0R)*´b' x‡ÒZÊRˆ/Z=@·ŒµJâ¹7æÉ¨B%Ò)*4k/âB:p1Ð/b:y„„ k›¹™36©!òÎr¶Œ·yÔÒÓsïPoº­ClÒñJ¨~˜êÍ¡ß*=n9˜d›üÕu“6×ãÌp™1?×G ÜGô±x³¹Y\)*ä=M&T[ÏJfÑo’!Îð“ƒ4ÐÄžJ&øíýöñÑ©‘„¸ºP§¥(¨ß•H-^¬Pü DaÀ\eU)*·7‹[OÀÜ¥b÷ˆFûtò“Ã#pMâ¶=M¼4»ÉÏdS™L»mÛñ€6[ª¶œ] =Içu¬c™˜–µ“3!ñ"ýfk"@1ÓŠT#ðd½jÏ FöË ¥ñoH±Q#z—jìõ:$ÓÙÄwè#McÃÇ …ð#¦"¾C2¢Ó× i®xbaÜX](ò)*H'UçÖOãr›Ù`óä¹¶Žæ´i%téüçKä6¤¹ˆ› õ©Ü¢íð“ÆA)*èæñ(Þ=MâΞ)*ì]ðSEÑCùßC=MH¬ª¤=@7Cù„i=}"|=MËœ£Ð,¦)*t[{“ Õë–E¿Î3ɨ¥~ÛuG왬rv=MœZ‹Éxeþð U¿·fžÏ&3 ÑÜs­úÿ&¤|ª’,Xšdü|ºšgb-W«^ذn¥=M×c›=I×N¼î³Ç=JÈëxwpÜwK#W HØjùüÁ\5\TÔu:[Q>ï¿E¿6=I¶þ»…ÃN0Ž,`Ê×¢<^-+›´÷þÛ€[í01"y%†Dqž·œ:¤Ä¥¢BžpIÿpý ±YD·=I´ˆþ€\=@¢ÏK|oYÆ+ÈßXcFý,£6BX p9 wµ ·š²{ÇÑç„¿ï‹[¸ð¾QCѽD]ï‚°?GÒMÛ>–6Æ*eþpQ!šõJgþ6¨ÞÅrVXù yuݶ=M-{^ÝÊõ„Ú)*«4¦z‡*êï:h‡ðÁdmÚróCQXAã$¡i¯a¡bŽ»+(Pl*&wˆàÛ;tN¼}M =MI¡’÷‚¿{"TTG{ΰmì\ÉË0Ëa²×¹Ã#ëR®«„Pð=I¡Áù×rK‚y–›}0»î¢¬Ÿ½ïè:œh&¥ o¤SØ-ï´³=MY0™¼1Ië(_=Iþᜯ˜É²(Ÿê¢ðB)*È=@É$Sç™ä•­ý r©C"è‰ ]…Jh=}-&ÍâÏÛátSyhÃ젮 á]<¾:bQ­*É~_G˜ñsÄb˜Hpã¿5Î:îür=J ª1ŒÛÛkã¬ÇÍþ ÖÏåýÅÓL“éµög9ÐU…u¼¤½"þß›Ñ] ÛªRó>Ž)*t¦¤¬Ae­à/‰íH\©d`»)* Óžû†ïž=@WsK‚°G²Í%_™Ã´¹ ¾¹T¼h&+¹#ûú<í×£m!ìpzsÕÍzÝââ¶6 C_}kÁ„…®Àá@5˾ZK°k1¹lhÞ#=Mšæ´ƒš*Nœ-ži„÷œ0R‚+¸9?ZF0]áwJ»#ûÍþ…:݆ihŽ*¤©×,…Ò3Vw($:im|=Mg“Ñ4’ y›–¡á³Ë®­úðñÏe|²µH&ÍÙ>þ{ A9à‡-êÂY)*=@ËØ`ÆV=n$™f|ŽžÏy„c:FàâY·¦H˜4@†—Œkbv¨âÙpfÅ¢$ýwos}“ÓKòC½&Õü¹&•CU@ßFp0yk=@ æí=IE|[PoÿC¹%Ï…—¤=}ž&o£ ÄÌIG¢èZ¢\„óêpQ#ý¸ÝÍg§Óq?6½ñ™1ÉfÛí:)*À¼â&ùÔI™åå=MsÛ»ûä†0°YÒ1™ê+÷•œv©G“hË¡¥?ïïãÜr×à Š\=J[JC ¶Ž€®VžGtùòç9PÍ;L‚XQŠÆÆØþk†I‡~B¹{‡î¼=IôF\Zh|nqw²æ¨QQ´ÜÈFüÍÞ¼cK%h¦óH}¼2I¥ö˜~«ÈkH¿`€Ñ*úoA²_’жo6¤¶´ÒµªZe4æMT„s 3r ƒŠYNÜ ŠXJ|£(£ØL5ªÄØËHÈÌ YáòŒÈs5Kˆîá عìó”$Îd‡ðÕOæÚZÈ:Éã™Rвµ+Él\•ÇesÅu o=I<¡(X@ÜÚ\ÀŠ˜{˜!ЦÒqkªk–Ÿf;ó¡°Y¦U—œ_e£Ð°“-3–øu¦,` ¾IZ!êLáýî^¼Þœ=Iï—iq¤Ðk"bCH=M´ÿᢘ*¼3=MÁ¸Dc-›­üàã¸Ð—¸ËÔØ–˜=MãU!ìaU4Éžgq”ÂÐIBM÷sÒ=@d³}©‘Fãédí6d8°Ó7,u,ñ|þJG¼pA;¹ëð ©MöU@ DœÊó_}Ý-=M(O“¸%(¶é±I„iÞX=M=n÷Ì=IRg=J¢I¸BDc±ŒK=n88R«¼Tª^Þ¦††Å`è³Ý*1ÕÚ‡+ •õ“°©Æ=IòûøU3ß³òF|Ô¼¨”ÞWUüÎZ *09Ù>£¯´ÐZkï]õ*šw‡Ü3{»÷€ããßÝ*k*f¨ o‰’?°2ó>>=MÏ(ßµNãè*„æ²y©ÆªÉ"|âOwøÇÑÙB§p'a©=I2x©AÍÂV“èû¶=}ÄóG„A[m¤àüñ%«â³C âbzã–º2øeÿ}£— sÁ‚ä鈯^åq;½'û,©,êÕ |_ÜÜ“HHâ¶»¼ó˜B)*ÞsX§3ÇeH›‘ÔwËy©§=nà¯=I’u°=I±mí@Š8pc-ÑHÞ)*8XÕ£Ô÷^ ;NAJCYWøC00¡8ªF› ‡a¶pÔHÅ……OîÛjŒáMàFA™cgÔI6¢™uå±}¥åR´nPÅPv2ÌM6ZkóQL܆ïá˹ S‰x=@ææƒ–žÌ¢uNw œ¡=J˜cK¶­ý¹¤o¼_Àa·êšZùÑçD}ðןWl,0 *]3HÉæ|©{Ö™NཅN¼<ˆuŠ ˜ñþX¶§ô€´õnmþ¸ ¾R_¬QOÀ¦'Xgl_r´"º`¹üÖë 5 ùž'xíùݽŠiØo5Då]´po-DÙ8ÙÏöj¹}ÝiíÒiv=}ÉøÙq܈L Àc3(ª)*MqZ´‘=@ÇÑ%]=M¾M[wCylyËÑž@c9²ÛNF݃32_RáIŒ2_ÑÙ •³æT¦i–P†°þ×êˆã#ã']‡Û%ñ‚s„?"m$É’ÚuÔ¢éïá[‡s“Dñ5£tÖø{C¢1™v]ˆ¬x cÙa·ÿþ¦x––ü=JsÕô¦Ç{1Q¸¶y1Ü!ºÕà(Ç=n  ·ØØ±sö=M…J¨*ÕõgdYÞ‰†o˜±"Ïe¡Ú1½ÖÝÿra„«y‚ÖŠ-)*I¦Û$ªi8¿ínÜÜÅ;­œb%nöÁ˜ p§ÛüÇí¿¿åþ>·Exºðï`>¹[±ú6$¸ÞÛ{äõÖ‡hÎëá2ƒ …S)*X±·“tÁ¤Ä× «¿H±×XŒ'ÅfëÁ‘²ßÆF+ÔvZ0giðä)*,Ó¢ªCÀ›)*††’Œ(KÿÜy÷Óv£ŠÉ üåY/ÚuןñEЭ'ôÉwŽèUÀ=@³G¾»ÎÃ@r$?›âIù_ÁQ°žƒcd‡Ìèèb®—ɆØ7vïxcЩ’ÞQÜM >)*͈ ûˆã‰ó³,Â$pÊÔnHJå}¸6=@s#ÇÊÄÛ'Ìd‘Ï%¢ð59ø¿ñ |EW¤Oí•€}¥èÅ­)*¸ö/s••©“é"X½)*¹þ=I–7&m>§Ò9øÇñI¿Ø«­Ô“ê©hy(g~ØžeµÖÅÁúÏûáI=@„L›È*ùßeøù}#ûš Y&KÚdª‘¬f¹#¡ý˶¨F Path: liebchen.winews.net!not-for-mail Lines: 181 X-Newsreader: MyNews =ybegin part=2 line=128 size=19338 name=joystick.jpg =ypart begin=11251 end=19338 ’cê&Ó~—eÁ­ü½hÍbÍõ¿»†·Á€vè¼ðØi=J•\™/"  !h¹’×w íU ¯’ñÒXÌߊ¿˜Œ9-ÖÓ'ò‹#´ÈŽ»Œ“õáé}{=n¸d$}v˜x aj·!RTN8¾ØeHž*dÑŸEÙ'7ÕÑ­ ßàCK"²Á_óâÈ“X%†tyÿ&UÓ»Ýÿƒ(! ¾ÊÉÌÊ>®À°¼@_H rêMüÍexw]nfÛCcÐÃ3-?AÃëÎ9»jó!È&ü³2ˆ0T/bfýÿ¸›Þ»Ê€V£·â¶SõM8\”/Œ9JtŽìÄŒWVÎHßLts%Ueög|qM¶º×#zM‡PMCð§Ôö,d=@IBF@+ä=MFÿÒˆ‡åÚ jhþžOïDy ÒšwZ”ÅGÈ“ÍMÛI·{TR¿Æ%þž®ëÎQJ¶ ÊÕFá·5hÏËPšÔXqâ‚ê)*ú·“¢o¶DoõS wtÛa»'UQï}3foÑ…ÈÛsS$f²éó•mìÏÅl·!ÁXhÈ‹Iù_St„ÇKãh «žíèTÀ G¡÷‡ñôµÈ¥¥ýïó!Ô®½þýsJüâµWœ¤ýwë™{´±6¤UI컿±zqþz@nè•‘×RÁG7óï^Æ«ø‡öŸûÃ{ºmÏ—Qb`–s$¼ðÇGÐË””| ±m‘¥V†§Gƒq=J/”=J=Mß+sÍÆtœx_ÿfD¯…þŠevûs$#Jÿ%©;¢¿r%wèÁJùNeËiÀoa“ÏU¯CÑ4г…ˆ=nÂ2Ä~T9}ò©XS0Ý *#…·`ˆœmíV©†:ñ#~”2rpyu”i—hAâä ç{¼Js|=n,0ŒÅuc÷y ¤í¦3Ìyf’γÀ_9<21ÉøÕìî"̦*›GâÄ9&µ Q¸ŒC=M=@¸†äÄä¼¶}aÅïz­%÷Y-O<s)*¹SÔÁHeààb(òÿs•§É×LÉÁGç[ïCšœÎ¶¥ #| çó$î´ÑñœùD#{ÀΕÕÜ#)*ªÌ=MÓw×£BWØ=n³ñLô=@_)*ñ³N°»ù[&w_ëêVsJ¡cÒndý”ð£ý‹Œv=Ix¥ÃYNiò´¯=JÀ=@–“³¦ÜŸ\O%T-Bà©M„¢PÄò¢Ïøqf%¶ àþæq<¿ÄwÇy&³á9ïl­#4Å%y… õ? …\qOZgÓ Çã^ÿlç×x€åèäi°ü$¢O{¦4#€(‰˜)*[ù„Ôf; ™7Z)*Éikˆã‡> ”Ťږb­ˆÑS‡qîk±&ðXyMþ´€ˆ…Œ]Ô¢ ­½)*K£#f)* ¿™ªÃ‡-Ñô“ ‘àSêŠ4œ¬x1QÚØ]e;?[{†*Àavy¬lyÑò”î÷åc-géDÑÔ¶’仸[“Sùû7;“F´kßàë)*Á¢é+€[ç_PÅ#鼩ØÆè~;q'ò»zT«ºÄ´» ¬YiÂy×þÓÍu™%^BÜd~¾Ñgø…:BÛqÁ}9›uÞ»ì=}oí¾­õMÊqÁ¸TôÍI#GÚ“l=}øì“1TT#¦X“H/wáJ,1xT[ÉtXFÏ›2W×fm¸*Ó =J¬î ÏšÛIÁ«÷Pëx£*BÐ£Í çA51þŒ»ä|Aóò> \/A?°¡üÄã8ÑGzS~-"zÈË4 ¢½{Vönúniî(Ÿ•owÄ/ª)*ÑŸiÂùÔ_—©€¨)*T=M<®7ËHi'=n€ÿIå”É4XŽŠ|˜Í‹ÊnB=@Ûã·ªóñyü½ V´›µ¹æ“ôâ|7-KókŒ~ìZA>°hqiÏ*qá5ÄZ…¸”–›r~4Šß¯Ž™±M˜É”»)*?¶»ˆÌ¤Ã…hùB"•N—a=}9Ëé$ÿu=Jpû€bFÀÍŸ=@Ý\'ß…Á=nžMšIüçyâ$´É8aÅ ÍN1øÄ“]»éì¿™ªOÛД°â˜p³ V=MÄs~TìÎáCJ8¶(ß˶|HÿóG]xøɆ0ڟƓķÄÍ0aW=}ËmÈ3ùH"×5·¥{ÅqåÀøSWÇC=M‡ÖãGsGxeçŸDóEδظZ{ðm§•ø&uÊØ³ S·ÖÆáJ»ôIñÑÚØ® úÔS˜¸¬þ¹šTÉ$2ÖßuÕ-Ô£az…»ž/aòö ¸- =Mýß’‘õˆ©«p9˜/™–Üw£U`Ž¥Ã=n•Ú[Qfœ”ü_ß÷•9>‡…à÷ƒDŠä\,îy–@1Gr=MÉ„Ý)*3nø ÊÃ^šñ’ŒüõùÊâQ_«f·V“«ä•ŒOƒd±*=J=JᛇÇÏ ³¢@ ‘¾î¦dboqJV¶;]ÞàZ9HÞãMøsoðm•œöÍdÞg(uzãGbY^ÔìŸãÑV¤Oô7êYyìÉ֤̉ïwO­–`× à;>=Jrp=M·Æ8¢Ný¦mŸ6Á6€Y™›Òêº[¿=}4 j@oùb6]É Ñóbø3&Ls——ELÞÙ^É̸£ˆqhô8©H¿…{ãæüß=@Jš¯ø%ÖGͬ£ü¼Bf"xÙhÎÀ÷¢BOå#ªB­‹qaÉ”°r ×zmYNjێ;ôK¦ü¼7ѽ½¸ç”ã¥Äsìx‚âŸgtø#WÐ襓B=JWù¿š®$™ˆ•„G”•–ñÕîÚ­ñËõoɦ'ù‚ „¦áDt©î¿‡‡DA¥@~=Jºbc1=IÓóÄ—_Ìä¹!úÝ…òÜYf J%ŒÌzw7| ®…Ç=n¤·ÎÎV¡à¸§Mâp(pλ˜kK§qtx±K‰^uT¸,åÍÚBx¼_ûŒ%‡°üXµZž¤½¬]ð[þ%€˜Ä‘VNÌØ¸»ëùJ®Iat£‡ÍØqz§o2¥=@`ÛðE¢f}Š ·ù>¯²b^2/Yˆ1}ï Jg“jê,0r-˘]Â…½ ÷¤Œé^™X*›Hû#×hYQtܹ%à)*,ã%OŠNŒƒQMgq9‡0Æ%ÞÕ@Å’¹(bU„É3×w»’žÏêùç^=}t88›ƒB«ê>˜Gï^¼1^ãxêY”‹[t90·´€* g1„}þÄeŽÆ9¤Š|Ãfu °€ñ&v2ñÿ~Ô¸ßáWÉ>"ƒk©âH=IíˆÞ¢Øä‰3Þ ES¬=@“q&Ý·ÅCÙUÜÂæ[ÑYÖé`'•ûærjðÚyyÛw)*ÊD=J^P)*³8ÇÉ# ¶¨¾Õ¦LÀïì¼]ïT! Ð0¿Æ/ ~/ÃÂ=JRGsØxÎ9ø1GÕAï€Ì=Mí1I^/yâ9”ÞÈ]ÝoXÀ™0 ÖéTÕHxj!ÖÇ…î‰a:O¾ší`Aö‘‘J-˜¢×3PÃΊx-½¶9tÇCé[°“hüôrf®r÷žš‘2¶=MégkáæU™f„ݳÑ` @cLUòrõ7Xl2ÑŠÀÒ¦‰ Üw`u£usŸGçïÿæê&feœÆ»"É“¥œxõ^°=nŽŸEƒµ¨_ñk¬‚„è\=@6áZ½À´—aòÉK£7M¦¶9iYikƒÁ»ó© æ2MÈ=J@=I–·~Ì‘HªÉÊÔ–ô:—ÇA±×ÈäG3ðÄå`ÎŽá²se®ˆ¸0UgØO=@6À¤æÝU·ÙKEj1ÛùùfÉx[­‚}^EQ›]ªÔö­@–¬gb÷¡]<øÑÓ:; NÇjŠQÓ-ÍaˆÇRáTå[׳—„N„:Àe¥OÃXÄZ{µR+ªyþ=@ÒbÔ=@ Ûq=nJÂýQV¨Œ£PÖN‘ÄA*Æý³óü{$'S2œ!ÐÝÖ4ŽšîQ÷¯|î=Mœ”5µ%uPïþZð§Úñ-ï ]Àðà줎½ã™A•2༓À˜ÄpH’†ª=}¶$½ðUÔ=nÙJޏ›† · ½—5§ÛàÅ\yGnüMM:š £|[BÜϘŒ‹èÐðá •w=}퀄¾dÃÁöZñTóß ½¡‰Y*-QFcù¨d ‹`oŸ—/ó{áiäš…Øcñy”¿—‚Æjº‰k½­ŸBùÀ8kñC=nÔÈäõN”Pvö Å‚þ§p•ÏÇ“ŽŸ=@íA8b)*ªÖ“„nDµ5…±·Ø†C‹ãŠp4kñ¨Ñ_בíÚð27ŒâÞ%ŸãÝ“iü†C¦ã9Bí;s’7†×f,$‹ýÞÏá[¼ƒµ¹ õ©téÑ7mkƧ¸ äº/~²&´aÍ£C!?þ¢ Qný·\ŸþÄc ÆÖ œŒ[ËŠ ¸‚Èx¤ß‰lÄ=@Ùý ²:>—÷uH?›òê|L¼é„ßËm@2þ¶WvÓÛ2z[|2ow7Î!œB׌“F¸*F9ÓÐU»ÊJ,qBÑÔ[˜±ÈÆŠ€ÕŒi૟¦p€ZyÀÈÝ XSP]·ÍÌL*ʤ4*•ŠYátÚá[ìL¸k<=MÖ’Ôñ(/¶ÿMÆ~­Ï*]˜öåHœ½Ëæçu2¦2$¨§”œqLÜå}Ÿ6¢—ÐQ:=MiZð8eú ,èÿ˜ú_×Þšp=IŸØ‚ˆ©¿kPÇÔ°%pÍD ¹rÌù(®=Iüͱî =IŸ•D~þÿîüÅE =Jë•KO±%yÈ©4ÈwJ=n5ßAbzâ-×RÖ*vÝ8bë_ÌјÍ{Ûù„šnq½˜´ñÍ—PÙWµ^ÊòbgU‹Šoð[ñ” ÿš/‡µL´=nr²ThßJjFF9ÏSQ \›rãF Ê-1Q-¶ýFŽ-|¶Ù}ÌMT1¤=n]˜…´Ý:#0qm#üpª-Æ9×y/æ!o¼Q¾Ê/¬SO¨âÊXZÉÅjÄr¡^xòêRîIüÉgÖ ïhû=}ïåem¬]¶‘C$´ØÇš’+øU˜ óciÇJ*FÊX *ùÏT°Wê=n}*‰Â~çbÒ¹-´©÷«'’*g9?E6Ü»yg(¾å´*¬•bÐ1-•H¯¢ïŒ†’•=}A?†`nÛEº£_ûRTx£÷q¢ÖŒ#m¨,½5B„¥9@"—PäÀ ißnVÑÑðw¥¢Ü‘ðˆD=I”f¡=J Üz¿³#òÙHÕ'Íw¼kñÅ¡S*%Ú)*Dö¬m2öË8ë›ï¢™¯Ÿdñm´JÈvÕSô¶H1ß‘{ˆNg·Ò߃vÍŽÍóq¼yä Ì)*Aˆ=@×ñ©—NWTóß;Z™—Ô[xq ‚U£ ï4Í}¯ ' ÇàËîµ¼}ØsH”î|"¨€áº/Ù;˜ã}ey}¬£‰¤ëo;ƒ_eq¿ŒƒBãOšM–¶@1f›¬ÐÀ=I{ÞæÇËáÇŽ»?‡¾,Z2=nHqgomAÚíÓqNM1'L`5@fÝ8s½÷sÑ·IwºöÄϽ˜³KEØM# lª2=J%Y| ¬ðû1^ÊF0ÛÑ þ©Pi(TŸçWpxѹ“þ(ÅÓƒ«£«ùf{ƒé»’'ßuŒ§¡'U]{¯Öœµ—d-P\!|¬Œ¶©Ü1Vñ´MEÚsÅDÈÑ™ÏLC!ÞÜŽm>•ÃNfžG±M½†'÷ØYj¬ ÷›àøQø ù˜)*¯~u%Oâ¼£RXÏðÎfªeX1-ÈÆ~Õs¬!Ý8â6©YÀä‹wWwÍ>³ÌáUÌT9Yk„@ e½BQ_x9:’œ¯¢ûi"Ù"t†Š‰ÑþÍ9'ÀÞÜRÿÛÆ«=@¬í‹*Dñ©?’ÚYú ¹$í$zèOüGy$¦2(¾0ʨjïX=IÅÙƒ=I$z†Å%¦Ÿ%&ýq²Ìy&vJI†)*¯U«Îp>8æýþ/›ƒ­‰ü´¼_EŠÄ¢­tBøË—8wA-k²Œp›¸ëþ€¢žÓ+)*³¯è9Õ»}©•®Ò„©=I )*DX0®R!=}Î:Ë£ŽbG'•äÚÞ±püö”ˆ€y}ùФ_ ç}kÛ«ØØ×[XÏ=JR嶉xãù‰øÎY´³–<ýÚÁ÷ЉôšÊžq\;é¥PÍ¢ùÛ-&•=@Uò‘þ—™¦ƒ ¢×X‹â¥çæÁ6q¹Ï¤)*¤ŽÛîú ób½vÜ›(þ2›$$„¡Áš[ÅìÄ5c û^  Ó(?ˆ©-"˜=M mé=M)*Ê ä4RœÁšcë=JI6Ô=J’àâ!|©×vfA ïcDG°§ 0áRÎÎBé±"¢©ö5w)*êŸ)*4Äi7ÛõûñÏÜ›$€Ï> X=JzDHÀd“à,©_5‚——æ[l9{D¯(lÑ̵áâ7e¹†IкÆmj)*4¼´w4=IŒ­B@©=I5(>ñüJó‘˜6,ûS=M(#Õ¾{öêË'·Ñ-»Ñ‘óy(P¾$¥ŸÚßb¯i"Äå«x/ 0úÞÐ%‡»$Ë(¾­kü~¬Ä‡´»…Ê(¿Í¼µõâ>8µÐÛõ“àŽ)*=n)* ”1à¯SöÄXÆþÑ"€ßWFü0jج00±Ð«Æ”É w©2<Žè³ÑÆ)*ýÜ´ÍßFü09&KˆFQ(j€I!|)*ìA ù$ +‚©=I»…̸þ‡!-*"Mí‘(Š i!z¦9 Ü'³Ž9'œ=M×$„YX cí=JY7;­Ì2(Þq=JY6îk‡@JšCu©]÷žž¾ˆ‡ð)*ìQÊ–3'³Ñ—%\©¯Q&L¤+=J¤“H ó(?ÝoFü0Y&LhI)* ÊHÇ%d ¹"n¦h©-Щ=J\©¯—{q^Éz]WægÎOïÈÁ‘™^£2ìÔM1ºgUpÀ­ü½é{Í) =yend size=8088 part=2 pcrc32=aca76043 crc32=4C995999 nget-0.27.1/test/testdata/0003/0002775000175000017500000000000010162001761016212 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0003/newspost_uue_0/0002775000175000017500000000000010162001761021171 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0003/newspost_uue_0/0010000644000175000017500000000051007441657003021420 0ustar donutdonut00000000000000From: donut@bar Newsgroups: test Subject: thesubject - testfile.txt (0/1) Organization: My Organization User-Agent: newspost v1.13 http://www.ccs.neu.edu/home/jfaulkne/newspost/ Message-ID: <1@foo> Date: Thu, 07 Mar 2002 12:22:09 GMT Lines: 8 Test of zero file. second line. forth line. seventh line. End of zero file test. nget-0.27.1/test/testdata/0003/newspost_uue_0/0020000644000175000017500000000207107441655572021436 0ustar donutdonut00000000000000From: donut@bar Newsgroups: test Subject: thesubject - testfile.txt (1/1) Organization: My Organization User-Agent: newspost v1.13 http://www.ccs.neu.edu/home/jfaulkne/newspost/ Message-ID: <2@foo> Date: Thu, 07 Mar 2002 12:22:09 GMT Lines: 17 begin 644 testfile.txt M>45N8R`M(%1ESKZNGHY^;EY./BX>#?WMWFI:2CHJ&@GYZ= MG)N:F9B7EI64DY*1D(^.C8R+BHF(AX:%A(."@8!_?GU\>WIY>'=V=71S75Q;6EE85U955%-245!/3DU,2TI)2$=&141# M0D%`/SX]/#LZ.3@W-C4T,S(Q,"\N+2PK*BDH)R8E)",B(2`?'AT<&QH9&!<6 M%103$A$0#PX-#`L*"0@'!@4$`P(!``T*05-#24DZ(#`N+C(U-0T*``$"`P0% M!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL+2XO,#$R M,S0U-C'EZ>WQ]?G^`@8*#A(6&AXB)BHN, MC8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*SM+6VM[BY MNKN\O;Z_P,'"P\3%QL?(R+CY.7F LY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_PT*16YD(&]F(%1E=<;:9876543210/.-,+*)('&%$#"!   ASCII: 0..255   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ End of Testfile nget-0.27.1/test/testdata/0003/_output/1015503729.0.txt0000644000175000017500000000051007441657114021677 0ustar donutdonut00000000000000From: donut@bar Newsgroups: test Subject: thesubject - testfile.txt (0/1) Organization: My Organization User-Agent: newspost v1.13 http://www.ccs.neu.edu/home/jfaulkne/newspost/ Message-ID: <1@foo> Date: Thu, 07 Mar 2002 12:22:09 GMT Lines: 8 Test of zero file. second line. forth line. seventh line. End of zero file test. nget-0.27.1/test/testdata/0004/0002775000175000017500000000000010162001761016213 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0004/input/0002775000175000017500000000000010162001761017352 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0004/input/0010000644000175000017500000000035307500231466017603 0ustar donutdonut00000000000000From: 11@signal Newsgroups: test Subject: I want to kill the world with me, bone! Organization: Society For The Testing Of Posts With No Body. User-Agent: FOOO! Message-ID: <123@sfttopwnb> Date: Fri, 07 Jun 2002 22:18:09 GMT Lines: 0 nget-0.27.1/test/testdata/0004/_output/0002775000175000017500000000000010162001761017712 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0004/_output/1023488289.0.txt0000644000175000017500000000035307500231556021713 0ustar donutdonut00000000000000From: 11@signal Newsgroups: test Subject: I want to kill the world with me, bone! Organization: Society For The Testing Of Posts With No Body. User-Agent: FOOO! Message-ID: <123@sfttopwnb> Date: Fri, 07 Jun 2002 22:18:09 GMT Lines: 0 nget-0.27.1/test/testdata/0005/0002755000175000017500000000000010162001761016212 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0005/input/0002755000175000017500000000000010162001761017351 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/0005/input/0010000644000175000017500000000232607606136540017612 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: whee - test2.txt (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sun, 05 Jan 2002 23:10:07 GMT Message-ID: <1.1041808207.48@dumbnntpd> begin 644 test2.txt M>45N8R`M(%1ESKZNGHY^;EY./BX>#?WMWFI:2CHJ&@GYZ= MG)N:F9B7EI64DY*1D(^.C8R+BHF(AX:%A(."@8!_?GU\>WIY>'=V=71S75Q;6EE85U955%-245!/3DU,2TI)2$=&141# M0D%`/SX]/#LZ.3@W-C4T,S(Q,"\N+2PK*BDH)R8E)",B(2`?'AT<&QH9&!<6 M%103$A$0#PX-#`L*"0@'!@4$`P(!``T*05-#24DZ(#`N+C(U-0T*``$"`P0% M!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL+2XO,#$R M,S0U-C'EZ>WQ]?G^`@8*#A(6&AXB)BHN, MC8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*SM+6VM[BY MNKN\O;Z_P,'"P\3%QL?(R+CY.7F MY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_PT*4V]M92!R86YD;VT@69G8W)L"F%O975I9&AT;G,*<6IK>&)M=W9Z"B\J+3=<;:9876543210/.-,+*)('&%$#"!   ASCII: 0..255   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ Some random stuff: LALALAlalala Whee!WHee!WHEe!WHEE!! ~!@#$%^&*(){} pyfgcrl aoeuidhtns qjkxbmwvz /*-7894561230. you can even see the soul escaping End of Testfile nget-0.27.1/test/testdata/longheader254/0002755000175000017500000000000010162001761020171 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/longheader254/input/0002755000175000017500000000000010162001761021330 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/longheader254/input/foog0000644000175000017500000000077607767415105022237 0ustar donutdonut00000000000000From: tester@nospam.com (Tester) Newsgroups: test Subject: foog.dat (1/1) Message-ID: Date: Sun, 14 Dec 2003 21:20:02 GMT Lines: 4 Path: corp-news!propagator3-maxim!news-in-maxim.spamkiller.net!news.usc.edu!newsfeed.news.ucla.edu!newsfeed.stanford.edu!headwall.stanford.edu!snoopy.risq.qc.ca!news.primus.ca!news.primus.ca!news3.optonline.net!news4.srv.hcvlny.cv.net.POSTED!not-for-mail Xref: 127.0.0.1 abc.defghijk.lmnopqrs.tuvwxyz.abcde:125090 begin 644 foog.dat *:&EJ:VQM;F]P<0 ` end nget-0.27.1/test/testdata/longheader254/_output/0002755000175000017500000000000010162001761021670 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/longheader254/_output/foog.dat0000644000175000017500000000001207767415124023326 0ustar donutdonut00000000000000hijklmnopqnget-0.27.1/test/testdata/par01/0002755000175000017500000000000010162001761016551 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/input/0002755000175000017500000000000010162001761017710 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/input/par0000644000175000017500000000140707606412652020433 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:57:05 GMT Newsgroups: test Subject: [par test] "a b.par" 436 yEnc bytes Lines: 6 Message-ID: <1.1041386225.87@dumbnntpd> =ybegin line=128 size=436 name=a b.par zk|*******+**3*,+È=J! v£ëð=} =}¡­=@CÖÑ =ybegin line=128 size=10 name=01.dat [\]^_`abc4 =yend size=10 crc32=E0117757 nget-0.27.1/test/testdata/par01/input/dat20000644000175000017500000000051507604445233020501 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:39 GMT Newsgroups: test Subject: [par test] "02.dat" 10 yEnc bytes Lines: 3 Message-ID: <2.1041386139.89@dumbnntpd> =ybegin line=128 size=10 name=02.dat ‹ŒŽ‘’“4 =yend size=10 crc32=74331162 nget-0.27.1/test/testdata/par01/input/dat30000644000175000017500000000051507604445235020504 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:41 GMT Newsgroups: test Subject: [par test] "03.dat" 10 yEnc bytes Lines: 3 Message-ID: <3.1041386141.94@dumbnntpd> =ybegin line=128 size=10 name=03.dat klmnopqrs4 =yend size=10 crc32=44C22C95 nget-0.27.1/test/testdata/par01/input/dat40000644000175000017500000000051507604445240020501 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:43 GMT Newsgroups: test Subject: [par test] "04.dat" 10 yEnc bytes Lines: 3 Message-ID: <4.1041386143.99@dumbnntpd> =ybegin line=128 size=10 name=04.dat ”•–—˜™š›œ4 =yend size=10 crc32=7C10A540 nget-0.27.1/test/testdata/par01/input/dat50000644000175000017500000000051507604445242020504 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:46 GMT Newsgroups: test Subject: [par test] "05.dat" 10 yEnc bytes Lines: 3 Message-ID: <5.1041386146.04@dumbnntpd> =ybegin line=128 size=10 name=05.dat tuvwxyz{|4 =yend size=10 crc32=4CE198B7 nget-0.27.1/test/testdata/par01/input/par10000644000175000017500000000141507606412652020513 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:57:16 GMT Newsgroups: test Subject: [par test] "a b.p01" 446 yEnc bytes Lines: 6 Message-ID: <1.1041386236.1@dumbnntpd> =ybegin line=128 size=446 name=a b.p01 zk|*******+**3*,A>¡2¶á/Ø“áTõH›-=@CÖÑ =ybegin line=128 size=446 name=a b.p02 zk|*******+**3*,Ì ˆ”a©ù4rP»Î]þ=@CÖÑ =ybegin line=128 size=446 name=a b.p03 zk|*******+**3*,àko•=}8wMÖÄVÑ#ã3”=@CÖÑ =ybegin line=128 size=446 name=a b.p04 zk|*******+**3*,–í”·=J Èú±±7*\£=@CÖÑ =ybegin line=128 size=446 name=a b.p05 zk|*******+**3*,?u9ßxÒÀö•(½ç=@CÖÑ =ybegin line=128 size=446 name=a b.p06 zk|*******+**3*,Ë7BIÐÊj)«zÛ”±ÁΉ=@CÖÑ Subject: Re: [par test] "a b.p01" 446 yEnc bytes Date: Sat, 04 Jan 2003 17:18:54 -0700 User-Agent: Pan/0.13.1 (It's always funny until somebody immanentizes the eschaton (Debian GNU/Linux)) Message-Id: Newsgroups: test References: <1.1041386236.1@dumbnntpd> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit On Wed, 01 Jan 2003 01:57:16 +0000, Matthew Mueller,,, wrote: > PAR wow. nget-0.27.1/test/testdata/par01/corrupt_input/0002755000175000017500000000000010162001761021466 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/corrupt_input/dat20000644000175000017500000000051607606413156022261 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:39 GMT Newsgroups: test Subject: [par test] "02.dat" 10 yEnc bytes Lines: 3 Message-ID: <2.1041386139.89c@dumbnntpd> =ybegin line=128 size=10 name=02.dat ŒŒŽ‘’“4 =yend size=10 crc32=9F04AA61 nget-0.27.1/test/testdata/par01/corrupt_input/dat40000644000175000017500000000051607606413156022263 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:43 GMT Newsgroups: test Subject: [par test] "04.dat" 10 yEnc bytes Lines: 3 Message-ID: <4.1041386143.99c@dumbnntpd> =ybegin line=128 size=10 name=04.dat ••–—˜™š›œ4 =yend size=10 crc32=93D2CE7E nget-0.27.1/test/testdata/par01/_notpxxs_output/0002755000175000017500000000000010162001761022053 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/_notpxxs_output/a b.p010000644000175000017500000000067007735253476023050 0ustar donutdonut00000000000000HELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhelloHELLOhellonget-0.27.1/test/testdata/par01/_notpxxs_output/a b.p020000644000175000017500000000000407735253575023040 0ustar donutdonut00000000000000hi. nget-0.27.1/test/testdata/par01/_output/0002755000175000017500000000000010162001761020250 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/_output/a b.p010000644000175000017500000000067607606412651021240 0ustar donutdonut00000000000000PAR ÛwŒ·®i·*ËqÖ¬§>sûˆ‹äL Ý(`T´ D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.dat123456789 nget-0.27.1/test/testdata/par01/_output/a b.p020000644000175000017500000000067607606412651021241 0ustar donutdonut00000000000000PAR ¢ß^jò7Ï H&‘U¤3ÔÖ¬§>sûˆ‹äL Ý(`T´ D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.datúûüýþÿàáâ nget-0.27.1/test/testdata/par01/_output/a b.p030000644000175000017500000000067607606412651021242 0ustar donutdonut00000000000000PAR ¶AEkM#¬š,§ù¹ jÖ¬§>sûˆ‹äL Ý(`T´ D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.dat€†‡„…š›˜ nget-0.27.1/test/testdata/par01/_output/a b.p040000644000175000017500000000067607606412651021243 0ustar donutdonut00000000000000PAR lÃjàážÝЇ‡ 2fyÖ¬§>sûˆ‹äL Ý(`T´ D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.datµªÇÀùænY`¾nget-0.27.1/test/testdata/par01/_output/a b.p050000644000175000017500000000067607606412651021244 0ustar donutdonut00000000000000PAR KìèµNfÞ¨–Ìkþ“½Ö¬§>sûˆ‹äL Ý(`T´ D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.dat‡†€ƒ‚œŸ nget-0.27.1/test/testdata/par01/_output/a b.p060000644000175000017500000000067607606412651021245 0ustar donutdonut00000000000000PAR ¡ ¦ @ÿP±j‡—¤_Ö¬§>sûˆ‹äL Ý(`T´ D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.datzThR|{·Dnget-0.27.1/test/testdata/par01/_output/a b.par0000644000175000017500000000066407606412651021417 0ustar donutdonut00000000000000PAR žcà÷íâLyÁÆáwƒÖ¬§>sûˆ‹äL Ý(`T´D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.datnget-0.27.1/test/testdata/par01/_output/01.dat0000644000175000017500000000001207604442574021173 0ustar donutdonut00000000000000123456789 nget-0.27.1/test/testdata/par01/_output/02.dat0000644000175000017500000000001207604442604021166 0ustar donutdonut00000000000000abcdefghi nget-0.27.1/test/testdata/par01/_output/03.dat0000644000175000017500000000001207604442613021167 0ustar donutdonut00000000000000ABCDEFGHI nget-0.27.1/test/testdata/par01/_output/04.dat0000644000175000017500000000001207604442625021173 0ustar donutdonut00000000000000jklmnopqr nget-0.27.1/test/testdata/par01/_output/05.dat0000644000175000017500000000001207604442634021174 0ustar donutdonut00000000000000JKLMNOPQR nget-0.27.1/test/testdata/par01/multipart/0002755000175000017500000000000010162001761020572 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/multipart/par1-10000644000175000017500000000115007740652576021541 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:17:18 GMT Newsgroups: test Subject: [par test] "a b.p01" yEnc (1/2) 446 bytes Lines: 5 Message-ID: <1.1065571567.45@dumbnntpd> =ybegin part=1 total=2 line=128 size=446 name=a b.p01 =ypart begin=1 end=253 zk|*******+**3*,A>¡2¶á/Ø“áTõH›-=@CÖÑ =ybegin part=2 total=2 line=128 size=446 name=a b.p01 =ypart begin=254 end=446 ***ûÕD2½Ú932i&MkûÕD2½Ú932i&MkZ*]*X*Ž*‹*ž*n*******+*******4*******=@y‡ÉôìHr \Çëð)=@y‡ÉôìHr \Çëð)Z*^*X*Ž*‹*ž*n*******+** *****4*******”ŠóØ,²TV$År8Ä66”ŠóØ,²TV$År8Ä66Z*_*X*Ž*‹*ž*[\]^_`abc4 =yend size=193 part=2 pcrc32=9A18BB13 crc32=B1A2A98C nget-0.27.1/test/testdata/par01/_reply_output/0002755000175000017500000000000010162001761021463 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/_reply_output/1041725934.0.txt0000644000175000017500000000101007605675262023460 0ustar donutdonut00000000000000From: "Matthew Mueller" Subject: Re: [par test] "a b.p01" 446 yEnc bytes Date: Sat, 04 Jan 2003 17:18:54 -0700 User-Agent: Pan/0.13.1 (It's always funny until somebody immanentizes the eschaton (Debian GNU/Linux)) Message-Id: Newsgroups: test References: <1.1041386236.1@dumbnntpd> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit On Wed, 01 Jan 2003 01:57:16 +0000, Matthew Mueller,,, wrote: > PAR wow. nget-0.27.1/test/testdata/par01/notpxxs/0002755000175000017500000000000010162001761020274 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/notpxxs/par10000644000175000017500000000135607735254034021104 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Sat, 27 Sep 2003 09:27:55 GMT Newsgroups: test Subject: [par test] "a b.p01" 440 yEnc bytes Lines: 6 Message-ID: <1.1064654875.99@dumbnntpd> =ybegin line=128 size=440 name=a b.p01 rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’– –™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’ ––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovv y’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™ =yend size=440 crc32=8720CECA nget-0.27.1/test/testdata/par01/notpxxs/par20000644000175000017500000000046107735254036021103 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Sat, 27 Sep 2003 09:27:58 GMT Newsgroups: test Subject: [par test] "a b.p02" 4 yEnc bytes Lines: 3 Message-ID: <2.1064654878.03@dumbnntpd> =ybegin line=128 size=4 name=a b.p02 ’“X4 =yend size=4 crc32=7302106D nget-0.27.1/test/testdata/par01/_corrupt_output/0002755000175000017500000000000010162001761022026 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/_corrupt_output/02.dat0000644000175000017500000000001207604537720022750 0ustar donutdonut00000000000000bbcdefghi nget-0.27.1/test/testdata/par01/_corrupt_output/04.dat0000644000175000017500000000001207604537720022752 0ustar donutdonut00000000000000kklmnopqr nget-0.27.1/test/testdata/par01/corrupt_pxxs/0002755000175000017500000000000010162001761021331 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/corrupt_pxxs/par10000644000175000017500000000141507606412651022133 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:57:16 GMT Newsgroups: test Subject: [par test] "a b.p01" 446 yEnc bytes Lines: 6 Message-ID: <1.1041386236.1@dumbnntpd> =ybegin line=128 size=446 name=a b.p01 zk|*******+**3*,A>¡2¶á/Ø“áTõH›-=@CÖÑ =ybegin line=128 size=446 name=a b.p03 zk|*******+**3*,àko•=}8wMÖÄVÑ#ã3”=@CÖÑ =ybegin line=128 size=10 name=01.dat [\]^_`abc4 =yend size=10 crc32=E0117757 nget-0.27.1/test/testdata/par01/samesubject_input/dat20000644000175000017500000000050007711575357023072 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:39 GMT Newsgroups: test Subject: Posting data files. Lines: 3 Message-ID: <12.1041386139.89@dumbnntpd> =ybegin line=128 size=10 name=02.dat ‹ŒŽ‘’“4 =yend size=10 crc32=74331162 nget-0.27.1/test/testdata/par01/samesubject_input/dat30000644000175000017500000000050007711575357023073 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:41 GMT Newsgroups: test Subject: Posting data files. Lines: 3 Message-ID: <13.1041386141.94@dumbnntpd> =ybegin line=128 size=10 name=03.dat klmnopqrs4 =yend size=10 crc32=44C22C95 nget-0.27.1/test/testdata/par01/samesubject_input/dat40000644000175000017500000000050007711575357023074 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:43 GMT Newsgroups: test Subject: Posting data files. Lines: 3 Message-ID: <14.1041386143.99@dumbnntpd> =ybegin line=128 size=10 name=04.dat ”•–—˜™š›œ4 =yend size=10 crc32=7C10A540 nget-0.27.1/test/testdata/par01/samesubject_input/dat50000644000175000017500000000050007711575357023075 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 01 Jan 2003 01:55:46 GMT Newsgroups: test Subject: Posting data files. Lines: 3 Message-ID: <15.1041386146.04@dumbnntpd> =ybegin line=128 size=10 name=05.dat tuvwxyz{|4 =yend size=10 crc32=4CE198B7 nget-0.27.1/test/testdata/par01/_corrupt_pxxs_output/0002755000175000017500000000000010162001761023110 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par01/_corrupt_pxxs_output/a b.p010000644000175000017500000000067607606412651024100 0ustar donutdonut00000000000000PAR ÛwŒ·®i·*ËqÖ¬§>sûˆ‹äL Ý(`T´ D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.dat123456788 nget-0.27.1/test/testdata/par01/_corrupt_pxxs_output/a b.p030000644000175000017500000000067607606412651024102 0ustar donutdonut00000000000000PAR ¶AEkM#¬š,§ù¹ jÖ¬§>sûˆ‹äL Ý(`T´ D ²Ï¤2g¯gŽ ltÔÖØ²Ï¤2g¯gŽ ltÔÖØ01.datD Çi£37šrâ¨À7X Çi£37šrâ¨À7X02.datD ëÛѫ蓰 ?ü#AëÛѫ蓰 ?ü#A03.datD ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ04.datD j`É®ˆ*,ú›Hîš j`É®ˆ*,ú›Hîš 05.dat€†‡„…š›› nget-0.27.1/test/testdata/par02/0002755000175000017500000000000010162001761016552 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/0file/0002755000175000017500000000000010162001761017551 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/0file/zero10000644000175000017500000000040107606122206020534 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test 2of7 - p2.p01 (0/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:45:29 GMT Message-ID: <0.1041648329.0004@dumbnntpd> here is a zero file. blah blah blah. whee. nget-0.27.1/test/testdata/par02/input/0002755000175000017500000000000010162001761017711 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/input/par0000644000175000017500000000156007605447166020443 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test 1of7 - p2.par (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:45:08 GMT Message-ID: <1.1041648308.5@dumbnntpd> begin 644 p2.par M4$%2``````````$```D``J&8!QV$>_','!*'Y)D_UC7@NI7XK[?YY*>-F@/B M(]-,```````````%`````````&``````````<@$```````#2`0`````````` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G. begin 644 p2-01.dat ,86$Q,C,T-38W.#D* ` end nget-0.27.1/test/testdata/par02/input/dat20000644000175000017500000000037607605445012020503 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test - p2-02.dat (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:42:18 GMT Message-ID: <2.1041648138.38@dumbnntpd> begin 644 p2-02.dat +86%B8V1E9F=H:0H` ` end nget-0.27.1/test/testdata/par02/input/dat30000644000175000017500000000037607605445012020504 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test - p2-03.dat (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:42:18 GMT Message-ID: <3.1041648138.46@dumbnntpd> begin 644 p2-03.dat +84%"0T1%1D=(20H` ` end nget-0.27.1/test/testdata/par02/input/dat40000644000175000017500000000037607605445012020505 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test - p2-04.dat (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:42:18 GMT Message-ID: <4.1041648138.54@dumbnntpd> begin 644 p2-04.dat *:FML;6YO<'%R"@`` ` end nget-0.27.1/test/testdata/par02/input/dat50000644000175000017500000000037607605445012020506 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test - p2-05.dat (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:42:18 GMT Message-ID: <5.1041648138.62@dumbnntpd> begin 644 p2-05.dat +84I+3$U.3U!14@H` ` end nget-0.27.1/test/testdata/par02/input/par10000644000175000017500000000160007605447166020517 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test 2of7 - p2.p01 (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:45:29 GMT Message-ID: <1.1041648329.4@dumbnntpd> begin 644 p2.p01 M4$%2``````````$```D``LTY\N)>@2V37C7!*,AIHS3@NI7XK[?YY*>-F@/B M(]-,`0`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G. begin 644 p2.p02 M4$%2``````````$```D``CD^(0-F@/B M(]-,`@`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G. begin 644 p2.p03 M4$%2``````````$```D``AHD>IU3*?[&M7S(/'?CH='@NI7XK[?YY*>-F@/B M(]-,`P`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.PE6N+I$J9"@`` ` end nget-0.27.1/test/testdata/par02/input/par40000644000175000017500000000160107605447166020523 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test 5of7 - p2.p04 (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:45:32 GMT Message-ID: <4.1041648332.64@dumbnntpd> begin 644 p2.p04 M4$%2``````````$```D``HJX[-F@/B M(]-,!``````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.E=(8'N'8OE@HW"@`` ` end nget-0.27.1/test/testdata/par02/input/par50000644000175000017500000000160107605447166020524 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test 6of7 - p2.p05 (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:45:33 GMT Message-ID: <5.1041648333.72@dumbnntpd> begin 644 p2.p05 M4$%2``````````$```D``KZ"9YW1X3-1P1++%5HQ>6#@NI7XK[?YY*>-F@/B M(]-,!0`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.!M"_K"@`` ` end nget-0.27.1/test/testdata/par02/input/par60000644000175000017500000000160107605447166020525 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test 7of7 - p2.p06 (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:45:34 GMT Message-ID: <6.1041648334.81@dumbnntpd> begin 644 p2.p06 M4$%2``````````$```D``K`)+IMMA7-]$SQVBNSV"[?@NI7XK[?YY*>-F@/B M(]-,!@`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.!GOS)[H.'D@8"@`` ` end nget-0.27.1/test/testdata/par02/_case_output/0002755000175000017500000000000010162001761021244 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/_case_output/P2-04.dAt0000644000175000017500000000001207606151522022401 0ustar donutdonut00000000000000jklmnopqr nget-0.27.1/test/testdata/par02/_case_output/p2-05.DaT0000644000175000017500000000001307606151522022403 0ustar donutdonut00000000000000aJKLMNOPQR nget-0.27.1/test/testdata/par02/_0file_output/0002755000175000017500000000000010162001761021330 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/_0file_output/1041648329.0.txt0000644000175000017500000000040107606122244023316 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test 2of7 - p2.p01 (0/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:45:29 GMT Message-ID: <0.1041648329.0004@dumbnntpd> here is a zero file. blah blah blah. whee. nget-0.27.1/test/testdata/par02/_par2_0file_output/0002755000175000017500000000000010162001761022254 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/_par2_0file_output/1059095652.0.txt0000644000175000017500000000046307710177425024265 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par2 2nd test 2of4 - p2.vol0+1.par2 (0/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) Date: Fri, 25 Jul 2003 01:14:12 GMT Message-ID: <0.1059095652.0550@dumbnntpd> Here is zero file. Of par2. The zero file of par2 2nd test. Thats what this is. Yep. nget-0.27.1/test/testdata/par02/case_input/0002755000175000017500000000000010162001761020704 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/case_input/dat40000644000175000017500000000037607606151465021507 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test - p2-04.dat (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:42:18 GMT Message-ID: <4.1041648138.54@dumbnntpd> begin 644 P2-04.dAt *:FML;6YO<'%R"@`` ` end nget-0.27.1/test/testdata/par02/case_input/dat50000644000175000017500000000037607606151471021505 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nd test - p2-05.dat (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Sat, 04 Jan 2003 02:42:18 GMT Message-ID: <5.1041648138.62@dumbnntpd> begin 644 p2-05.DaT +84I+3$U.3U!14@H` ` end nget-0.27.1/test/testdata/par02/c_d_par2_input/0002755000175000017500000000000010162001761021442 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/c_d_par2_input/par0000644000175000017500000000423507710106260022156 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par2 2nd test - c d.par2 (1/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) X-No-Archive: yes Date: Fri, 25 Jul 2003 01:49:36 GMT Message-ID: <1.1059097776.53@dumbnntpd> begin 644 c d.par2 M4$%2,@!02U2$`````````(:=,#%@L9M%G^Z%;B3687AU4;NKITP3TUS>%N]R M)/J14$%2(#(N,`!&:6QE1&5S8XNQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#= M46[W(212/A^#/\[TK&(`W5%N]R$D4@P`````````<#(M,#$N9&%T````4$%2 M,@!02U1D`````````)^H/O<.5PR?7DU2J(;H+/AU4;NKITP3TUS>%N]R)/J1 M4$%2(#(N,`!)1E-#`````(NQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W M(212T;#C6E!!4C(`4$M4A`````````!STZ.RY\P4BPR8L$=#*<6M=5&[JZ=, M$]-JEW?[@L;`UE* MOXA9&)-?I#R%J9J\40-92K^(61B37Z0\A:F:O%$+`````````'`R+3`R+F1A M=````%!!4C(`4$M49`````````"LNGY;%](S\@:DBL3I$5OX=5&[JZ=,$]-< MWA;OJEW?[@L;04T(N2K$ MI1QS\CM?=V\\_@R+;])005(R`%!+5(0`````````1OWHP(/!^H.Y+'BAA!Q' M6G51NZNG3!/37-X6[W(D^I%005(@,BXP`$9I;&5$97-C/'LY#U2N>GG=,BFD M!:*OU`Y/O&WP0]_\MF!M!-1M8*0.3[QM\$/?_+9@;034;6"D"P````````!P M,BTP,RYD870```!005(R`%!+5&0`````````:U:`4<:B[:[C1N`%B13)ZW51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$E&4T,`````/'LY#U2N>GG=,BFD!:*O MU"?W&Z;?&*_"S$*`*VM/-0Z.'8;Q4$%2,@!02U2$`````````&K"BM(AQ@>Y M1[.*,C`RUD]U4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8V"_;W@5 M""%/3P(8DM^"9<36WD]=G\K"'DCA\C*=P<;_UMY/79_*PAY(X?(RG<'&_PH` M````````<#(M,#0N9&%T````4$%2,@!02U1D`````````+[N":X\/2,37##! MJW;#>F%U4;NKITP3TUS>%N]R)/J14$%2(#(N,`!)1E-#`````&"_;W@5""%/ M3P(8DM^"9<0J]F)-;.?4*X"*.>`""R)HC78<%U!!4C(`4$M4A``````````X MBC*9E#*$`1@:X(%[KS>\=5&[JZ=,$]-?(5Z83[%X>-ZVC0"*HTJ2CC6G.<^Q>'C>MHT`BJ-*D MHXUISG,+`````````'`R+3`U+F1A=````%!!4C(`4$M49`````````"61A0K M+IF^--Z1?(2)F(5&=5&[JZ=,$]-?(5Z83$>I6E]@57-_-_6K@';2MV-Y_[B1005(R`%!+5)P` M````````0$WAL+8)B>)S6"M!GVF)M751NZNG3!/37-X6[W(D^I%005(@,BXP M`$UA:6X`````#``````````%````R'\,0]D_I+SMJEGGR%>F$_'3X`EYR-7# MM=ZJ7=_N"QN+L0:VUFUL?6<=^[:-$&>_8+]O>!4((4]/`AB2WX)EQ#Q[.0]4 MKGIYW3(II`6BK]1005(R`%!+5&0`````````)J)#*,XL6J8S@>VE(@`KGW51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$-R96%T;W(`0W)E871E9"!B>2!P87(R 58VUD;&EN92!V97)S:6]N(#`N,RX` ` end nget-0.27.1/test/testdata/par02/c_d_par2_input/par10000644000175000017500000000443707710106260022243 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par2 2nd test - c d.vol00+01.par2 (1/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) X-No-Archive: yes Date: Fri, 25 Jul 2003 01:49:36 GMT Message-ID: <2.1059097776.61@dumbnntpd> begin 644 c d.vol00+01.par2 M4$%2,@!02U10``````````9=P*QLA5.BV8.#8T8T!"]U4;NKITP3TUS>%N]R M)/J14$%2(#(N,`!296-V4VQI8P````!J8#8S,#4J-S1`,PI005(R`%!+5(0` M````````AITP,6"QFT6?[H5N)-9A>'51NZNG3!/37-X6[W(D^I%005(@,BXP M`$9I;&5$97-CB[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O35*HAN@L^'51NZNG3!/37-X6[W(D^I%005(@,BXP`$E& M4T,`````B[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O%N]R)/J1 M4$%2(#(N,`!&:6QE1&5S8_'3X`EYR-7#M=ZJ7=_N"QL#64J_B%D8DU^D/(6I MFKQ1`UE*OXA9&)-?I#R%J9J\40L`````````<#(M,#(N9&%T````4$%2,@!0 M2U1D`````````*RZ?EL7TC/R!J2*Q.D16_AU4;NKITP3TUS>%N]R)/J14$%2 M(#(N,`!)1E-#`````/'3X`EYR-7#M=ZJ7=_N"QM!30BY*L2E''/R.U]W;SS^ M#(MOTE!!4C(`4$M4A`````````!&_>C`@\'Z@[DL>*&$'$=:=5&[JZ=,$]-< MWA;OSD/5*YZ>=TR*:0%HJ_4#D^\;?!# MW_RV8&T$U&U@I`Y/O&WP0]_\MF!M!-1M8*0+`````````'`R+3`S+F1A=``` M`%!!4C(`4$M49`````````!K5H!1QJ+MKN-&X`6)%,GK=5&[JZ=,$]-SD/5*YZ>=TR*:0%HJ_4)_<;IM\8K\+, M0H`K:T\U#HX=AO%005(R`%!+5(0`````````:L**TB'&![E'LXHR,#+63W51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$9I;&5$97-C8+]O>!4((4]/`AB2WX)E MQ-;>3UV?RL(>2.'R,IW!QO_6WD]=G\K"'DCA\C*=P<;_"@````````!P,BTP M-"YD870```!005(R`%!+5&0`````````ONX)KCP](Q-<,,&K=L-Z8751NZNG M3!/37-X6[W(D^I%005(@,BXP`$E&4T,`````8+]O>!4((4]/`AB2WX)EQ"KV M8DULY]0K@(HYX`(+(FB-=AP74$%2,@!02U2$`````````#B*,IF4,H0!&!K@ M@7NO-[QU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8\A_#$/9/Z2\ M[:I9Y\A7IA/L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.%N]R)/J14$%2(#(N,`!)1E-#`````,A_#$/9/Z2\[:I9 MY\A7IA,1ZE:7V!5&P MM@F)XG-8*T&?:8FU=5&[JZ=,$]-?(5Z83\=/@"7G(U<.UWJI=W^X+&XNQ M!K;6;6Q]9QW[MHT09[]@OV]X%0@A3T\"&)+?@F7$/'LY#U2N>GG=,BFD!:*O MU%!!4C(`4$M49``````````FHD,HSBQ:IC.![:4B`"N?=5&[JZ=,$]- begin 644 c d.vol01+02.par2 M4$%2,@!02U10`````````*3?%++.1;!_@LM1DLOEQ[YU4;NKITP3TUS>%N]R M)/J14$%2(#(N,`!296-V4VQI8P$```!JD![!&\H(`_Q1K*E005(R`%!+5(0` M````````AITP,6"QFT6?[H5N)-9A>'51NZNG3!/37-X6[W(D^I%005(@,BXP M`$9I;&5$97-CB[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O35*HAN@L^'51NZNG3!/37-X6[W(D^I%005(@,BXP`$E& M4T,`````B[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O%N]R)/J1 M4$%2(#(N,`!&:6QE1&5S8_'3X`EYR-7#M=ZJ7=_N"QL#64J_B%D8DU^D/(6I MFKQ1`UE*OXA9&)-?I#R%J9J\40L`````````<#(M,#(N9&%T````4$%2,@!0 M2U1D`````````*RZ?EL7TC/R!J2*Q.D16_AU4;NKITP3TUS>%N]R)/J14$%2 M(#(N,`!)1E-#`````/'3X`EYR-7#M=ZJ7=_N"QM!30BY*L2E''/R.U]W;SS^ M#(MOTE!!4C(`4$M4A`````````!&_>C`@\'Z@[DL>*&$'$=:=5&[JZ=,$]-< MWA;OSD/5*YZ>=TR*:0%HJ_4#D^\;?!# MW_RV8&T$U&U@I`Y/O&WP0]_\MF!M!-1M8*0+`````````'`R+3`S+F1A=``` M`%!!4C(`4$M49`````````!K5H!1QJ+MKN-&X`6)%,GK=5&[JZ=,$]-SD/5*YZ>=TR*:0%HJ_4)_<;IM\8K\+, M0H`K:T\U#HX=AO%005(R`%!+5(0`````````:L**TB'&![E'LXHR,#+63W51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$9I;&5$97-C8+]O>!4((4]/`AB2WX)E MQ-;>3UV?RL(>2.'R,IW!QO_6WD]=G\K"'DCA\C*=P<;_"@````````!P,BTP M-"YD870```!005(R`%!+5&0`````````ONX)KCP](Q-<,,&K=L-Z8751NZNG M3!/37-X6[W(D^I%005(@,BXP`$E&4T,`````8+]O>!4((4]/`AB2WX)EQ"KV M8DULY]0K@(HYX`(+(FB-=AP74$%2,@!02U2$`````````#B*,IF4,H0!&!K@ M@7NO-[QU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8\A_#$/9/Z2\ M[:I9Y\A7IA/L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.%N]R)/J14$%2(#(N,`!)1E-#`````,A_#$/9/Z2\[:I9 MY\A7IA,1ZE:7V!5&P MM@F)XG-8*T&?:8FU=5&[JZ=,$]-?(5Z83\=/@"7G(U<.UWJI=W^X+&XNQ M!K;6;6Q]9QW[MHT09[]@OV]X%0@A3T\"&)+?@F7$/'LY#U2N>GG=,BFD!:*O MU%!!4C(`4$M44`````````"G4L-8O0V"X1OIA"?_UXRW=5&[JZ=,$]-%N]R)/J14$%2(#(N M,`!&:6QE1&5S8XNQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W(212/A^# M/\[TK&(`W5%N]R$D4@P`````````<#(M,#$N9&%T````4$%2,@!02U1D```` M`````)^H/O<.5PR?7DU2J(;H+/AU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!) M1E-#`````(NQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W(212T;#C6E!! M4C(`4$M4A`````````!STZ.RY\P4BPR8L$=#*<6M=5&[JZ=,$]-JEW?[@L;`UE*OXA9&)-?I#R% MJ9J\40-92K^(61B37Z0\A:F:O%$+`````````'`R+3`R+F1A=````%!!4C(` M4$M49`````````"LNGY;%](S\@:DBL3I$5OX=5&[JZ=,$]-JEW?[@L;04T(N2K$I1QS\CM?=V\\ M_@R+;])005(R`%!+5(0`````````1OWHP(/!^H.Y+'BAA!Q'6G51NZNG3!/3 M7-X6[W(D^I%005(@,BXP`$9I;&5$97-C/'LY#U2N>GG=,BFD!:*OU`Y/O&WP M0]_\MF!M!-1M8*0.3[QM\$/?_+9@;034;6"D"P````````!P,BTP,RYD870` M``!005(R`%!+5&0`````````:U:`4<:B[:[C1N`%B13)ZW51NZNG3!/37-X6 M[W(D^I%005(@,BXP`$E&4T,`````/'LY#U2N>GG=,BFD!:*OU"?W&Z;?&*_" MS$*`*VM/-0Z.'8;Q4$%2,@!02U2$`````````&K"BM(AQ@>Y1[.*,C`RUD]U M4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8V"_;W@5""%/3P(8DM^" M9<36WD]=G\K"'DCA\C*=P<;_UMY/79_*PAY(X?(RG<'&_PH`````````<#(M M,#0N9&%T````4$%2,@!02U1D`````````+[N":X\/2,37##!JW;#>F%U4;NK MITP3TUS>%N]R)/J14$%2(#(N,`!)1E-#`````&"_;W@5""%/3P(8DM^"9<0J M]F)-;.?4*X"*.>`""R)HC78<%U!!4C(`4$M4A``````````XBC*9E#*$`1@: MX(%[KS>\=5&[JZ=,$]-?(5Z83[%X>-ZVC0"*HTJ2CC6G.<^Q>'C>MHT`BJ-*DHXUISG,+```` M`````'`R+3`U+F1A=````%!!4C(`4$M49`````````"61A0K+IF^--Z1?(2) MF(5&=5&[JZ=,$]-?(5Z83$>I6E]@57-_-_6K@';2MV-Y_[B1005(R`%!+5)P`````````0$WA ML+8)B>)S6"M!GVF)M751NZNG3!/37-X6[W(D^I%005(@,BXP`$UA:6X````` M#``````````%````R'\,0]D_I+SMJEGGR%>F$_'3X`EYR-7#M=ZJ7=_N"QN+ ML0:VUFUL?6<=^[:-$&>_8+]O>!4((4]/`AB2WX)EQ#Q[.0]4KGIYW3(II`6B MK]1005(R`%!+5&0`````````)J)#*,XL6J8S@>VE(@`KGW51NZNG3!/37-X6 M[W(D^I%005(@,BXP`$-R96%T;W(`0W)E871E9"!B>2!P87(R8VUD;&EN92!V ,97)S:6]N(#`N,RX` ` end nget-0.27.1/test/testdata/par02/c_d_par2_input/par30000644000175000017500000001024107710106260022233 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par2 2nd test - c d.vol03+02.par2 (1/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) X-No-Archive: yes Date: Fri, 25 Jul 2003 01:49:36 GMT Message-ID: <4.1059097776.77@dumbnntpd> begin 644 c d.vol03+02.par2 M4$%2,@!02U10`````````,:Z='XR@GYT*N7ZETTK)>5U4;NKITP3TUS>%N]R M)/J14$%2(#(N,`!296-V4VQI8P,```#,7)SA->ZGFU_JS>Q005(R`%!+5(0` M````````AITP,6"QFT6?[H5N)-9A>'51NZNG3!/37-X6[W(D^I%005(@,BXP M`$9I;&5$97-CB[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O35*HAN@L^'51NZNG3!/37-X6[W(D^I%005(@,BXP`$E& M4T,`````B[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O%N]R)/J1 M4$%2(#(N,`!&:6QE1&5S8_'3X`EYR-7#M=ZJ7=_N"QL#64J_B%D8DU^D/(6I MFKQ1`UE*OXA9&)-?I#R%J9J\40L`````````<#(M,#(N9&%T````4$%2,@!0 M2U1D`````````*RZ?EL7TC/R!J2*Q.D16_AU4;NKITP3TUS>%N]R)/J14$%2 M(#(N,`!)1E-#`````/'3X`EYR-7#M=ZJ7=_N"QM!30BY*L2E''/R.U]W;SS^ M#(MOTE!!4C(`4$M4A`````````!&_>C`@\'Z@[DL>*&$'$=:=5&[JZ=,$]-< MWA;OSD/5*YZ>=TR*:0%HJ_4#D^\;?!# MW_RV8&T$U&U@I`Y/O&WP0]_\MF!M!-1M8*0+`````````'`R+3`S+F1A=``` M`%!!4C(`4$M49`````````!K5H!1QJ+MKN-&X`6)%,GK=5&[JZ=,$]-SD/5*YZ>=TR*:0%HJ_4)_<;IM\8K\+, M0H`K:T\U#HX=AO%005(R`%!+5(0`````````:L**TB'&![E'LXHR,#+63W51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$9I;&5$97-C8+]O>!4((4]/`AB2WX)E MQ-;>3UV?RL(>2.'R,IW!QO_6WD]=G\K"'DCA\C*=P<;_"@````````!P,BTP M-"YD870```!005(R`%!+5&0`````````ONX)KCP](Q-<,,&K=L-Z8751NZNG M3!/37-X6[W(D^I%005(@,BXP`$E&4T,`````8+]O>!4((4]/`AB2WX)EQ"KV M8DULY]0K@(HYX`(+(FB-=AP74$%2,@!02U2$`````````#B*,IF4,H0!&!K@ M@7NO-[QU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8\A_#$/9/Z2\ M[:I9Y\A7IA/L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.%N]R)/J14$%2(#(N,`!)1E-#`````,A_#$/9/Z2\[:I9 MY\A7IA,1ZE:7V!5&P MM@F)XG-8*T&?:8FU=5&[JZ=,$]-?(5Z83\=/@"7G(U<.UWJI=W^X+&XNQ M!K;6;6Q]9QW[MHT09[]@OV]X%0@A3T\"&)+?@F7$/'LY#U2N>GG=,BFD!:*O MU%!!4C(`4$M44`````````#VN[P&K_==FMF\V*()W&Y?=5&[JZ=,$]-%N]R)/J14$%2(#(N M,`!&:6QE1&5S8XNQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W(212/A^# M/\[TK&(`W5%N]R$D4@P`````````<#(M,#$N9&%T````4$%2,@!02U1D```` M`````)^H/O<.5PR?7DU2J(;H+/AU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!) M1E-#`````(NQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W(212T;#C6E!! M4C(`4$M4A`````````!STZ.RY\P4BPR8L$=#*<6M=5&[JZ=,$]-JEW?[@L;`UE*OXA9&)-?I#R% MJ9J\40-92K^(61B37Z0\A:F:O%$+`````````'`R+3`R+F1A=````%!!4C(` M4$M49`````````"LNGY;%](S\@:DBL3I$5OX=5&[JZ=,$]-JEW?[@L;04T(N2K$I1QS\CM?=V\\ M_@R+;])005(R`%!+5(0`````````1OWHP(/!^H.Y+'BAA!Q'6G51NZNG3!/3 M7-X6[W(D^I%005(@,BXP`$9I;&5$97-C/'LY#U2N>GG=,BFD!:*OU`Y/O&WP M0]_\MF!M!-1M8*0.3[QM\$/?_+9@;034;6"D"P````````!P,BTP,RYD870` M``!005(R`%!+5&0`````````:U:`4<:B[:[C1N`%B13)ZW51NZNG3!/37-X6 M[W(D^I%005(@,BXP`$E&4T,`````/'LY#U2N>GG=,BFD!:*OU"?W&Z;?&*_" MS$*`*VM/-0Z.'8;Q4$%2,@!02U2$`````````&K"BM(AQ@>Y1[.*,C`RUD]U M4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8V"_;W@5""%/3P(8DM^" M9<36WD]=G\K"'DCA\C*=P<;_UMY/79_*PAY(X?(RG<'&_PH`````````<#(M M,#0N9&%T````4$%2,@!02U1D`````````+[N":X\/2,37##!JW;#>F%U4;NK MITP3TUS>%N]R)/J14$%2(#(N,`!)1E-#`````&"_;W@5""%/3P(8DM^"9<0J M]F)-;.?4*X"*.>`""R)HC78<%U!!4C(`4$M4A``````````XBC*9E#*$`1@: MX(%[KS>\=5&[JZ=,$]-?(5Z83[%X>-ZVC0"*HTJ2CC6G.<^Q>'C>MHT`BJ-*DHXUISG,+```` M`````'`R+3`U+F1A=````%!!4C(`4$M49`````````"61A0K+IF^--Z1?(2) MF(5&=5&[JZ=,$]-?(5Z83$>I6E]@57-_-_6K@';2MV-Y_[B1005(R`%!+5)P`````````0$WA ML+8)B>)S6"M!GVF)M751NZNG3!/37-X6[W(D^I%005(@,BXP`$UA:6X````` M#``````````%````R'\,0]D_I+SMJEGGR%>F$_'3X`EYR-7#M=ZJ7=_N"QN+ ML0:VUFUL?6<=^[:-$&>_8+]O>!4((4]/`AB2WX)EQ#Q[.0]4KGIYW3(II`6B MK]1005(R`%!+5&0`````````)J)#*,XL6J8S@>VE(@`KGW51NZNG3!/37-X6 M[W(D^I%005(@,BXP`$-R96%T;W(`0W)E871E9"!B>2!P87(R8VUD;&EN92!V ,97)S:6]N(#`N,RX` ` end nget-0.27.1/test/testdata/par02/_par2_output/0002755000175000017500000000000010162001761021175 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/_par2_output/p2.par20000644000175000017500000000261007710101522022302 0ustar donutdonut00000000000000PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTd&¢C(Î,Z¦3í¥"+ŸuQ»«§LÓ\Þïr$ú‘PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par02/_par2_output/p2.vol1+2.par20000644000175000017500000000551407710101522023325 0ustar donutdonut00000000000000PAR2PKTP¤ß²ÎE°‚ËQ’ËåǾuQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlicjÁÊüQ¬©PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTP§RÃX½ ‚áé„'ÿ׌·uQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlic0 —/­;G,Aˆ9PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTd&¢C(Î,Z¦3í¥"+ŸuQ»«§LÓ\Þïr$ú‘PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par02/_par2_output/p2.vol3+2.par20000644000175000017500000000551407710101522023327 0ustar donutdonut00000000000000PAR2PKTPƺt~2‚~t*åú—M+%åuQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlicÌ\œá5î§›_êÍìPAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTPö»¼¯÷]šÙ¼Ø¢ Ün_uQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlic­É~poa윩PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTd&¢C(Î,Z¦3í¥"+ŸuQ»«§LÓ\Þïr$ú‘PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par02/_par2_output/p2.vol0+1.par20000644000175000017500000000273007710101522023320 0ustar donutdonut00000000000000PAR2PKTP]À¬l…S¢ÙƒƒcF4/uQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlicj`6305*74@3 PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTd&¢C(Î,Z¦3í¥"+ŸuQ»«§LÓ\Þïr$ú‘PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par02/_a_b_par_output/0002755000175000017500000000000010162001761021714 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/_a_b_par_output/a b.p010000644000175000017500000000073607606453106022701 0ustar donutdonut00000000000000PAR Í9òâ^-“^5Á(Èi£4ຕø¯·ùä§šâ#ÓL`rÒ J >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datj`6305*74@3 nget-0.27.1/test/testdata/par02/_a_b_par_output/a b.p020000644000175000017500000000073607606453106022702 0ustar donutdonut00000000000000PAR 9>!2‹_ßMt5»“h/ຕø¯·ùä§šâ#ÓL`rÒ J >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datM®äùöû€åâ nget-0.27.1/test/testdata/par02/_a_b_par_output/a b.p030000644000175000017500000000073607606453106022703 0ustar donutdonut00000000000000PAR $zS)þƵ|ȃ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datÑÀò—°•k‹¤J™ nget-0.27.1/test/testdata/par02/_a_b_par_output/a b.p040000644000175000017500000000073607606453106022704 0ustar donutdonut00000000000000PAR ЏíÃ˺•—ÂtÚT5[ðຕø¯·ùä§šâ#ÓL`rÒ J >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.dat¥t†¸v/– 7 nget-0.27.1/test/testdata/par02/_a_b_par_output/a b.p050000644000175000017500000000073607606453106022705 0ustar donutdonut00000000000000PAR ¾‚gÑá3QÁËZ1y`ຕø¯·ùä§šâ#ÓL`rÒ J >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.dat®ÊÖ Ÿ÷´/ë nget-0.27.1/test/testdata/par02/_a_b_par_output/a b.p060000644000175000017500000000073607606453106022706 0ustar donutdonut00000000000000PAR ° .›m…s}ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datö^{ó'ºH nget-0.27.1/test/testdata/par02/_a_b_par_output/a b.par0000644000175000017500000000072207606453106023056 0ustar donutdonut00000000000000PAR ¡˜„{ñ̇ä™?Ö5ຕø¯·ùä§šâ#ÓL`rÒJ >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datnget-0.27.1/test/testdata/par02/_output/0002755000175000017500000000000010162001761020251 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/_output/p2.p010000644000175000017500000000073607606412652021136 0ustar donutdonut00000000000000PAR Í9òâ^-“^5Á(Èi£4ຕø¯·ùä§šâ#ÓL`rÒ J >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datj`6305*74@3 nget-0.27.1/test/testdata/par02/_output/p2.p020000644000175000017500000000073607606412652021137 0ustar donutdonut00000000000000PAR 9>!2‹_ßMt5»“h/ຕø¯·ùä§šâ#ÓL`rÒ J >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datM®äùöû€åâ nget-0.27.1/test/testdata/par02/_output/p2.p030000644000175000017500000000073607606412652021140 0ustar donutdonut00000000000000PAR $zS)þƵ|ȃ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datÑÀò—°•k‹¤J™ nget-0.27.1/test/testdata/par02/_output/p2.p040000644000175000017500000000073607606412652021141 0ustar donutdonut00000000000000PAR ЏíÃ˺•—ÂtÚT5[ðຕø¯·ùä§šâ#ÓL`rÒ J >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.dat¥t†¸v/– 7 nget-0.27.1/test/testdata/par02/_output/p2.p050000644000175000017500000000073607606412652021142 0ustar donutdonut00000000000000PAR ¾‚gÑá3QÁËZ1y`ຕø¯·ùä§šâ#ÓL`rÒ J >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.dat®ÊÖ Ÿ÷´/ë nget-0.27.1/test/testdata/par02/_output/p2.p060000644000175000017500000000073607606412652021143 0ustar donutdonut00000000000000PAR ° .›m…s}ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datö^{ó'ºH nget-0.27.1/test/testdata/par02/_output/p2.par0000644000175000017500000000072207606412652021313 0ustar donutdonut00000000000000PAR ¡˜„{ñ̇ä™?Ö5ຕø¯·ùä§šâ#ÓL`rÒJ >ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$Rp2-01.datJ YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Qp2-02.datJ O¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤p2-03.datJ ÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿp2-04.datJ ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎsp2-05.datnget-0.27.1/test/testdata/par02/_output/p2-01.dat0000644000175000017500000000001407605443462021513 0ustar donutdonut00000000000000aa123456789 nget-0.27.1/test/testdata/par02/_output/p2-02.dat0000644000175000017500000000001307605443462021513 0ustar donutdonut00000000000000aabcdefghi nget-0.27.1/test/testdata/par02/_output/p2-03.dat0000644000175000017500000000001307605443462021514 0ustar donutdonut00000000000000aABCDEFGHI nget-0.27.1/test/testdata/par02/_output/p2-04.dat0000644000175000017500000000001207605443462021514 0ustar donutdonut00000000000000jklmnopqr nget-0.27.1/test/testdata/par02/_output/p2-05.dat0000644000175000017500000000001307605443462021516 0ustar donutdonut00000000000000aJKLMNOPQR nget-0.27.1/test/testdata/par02/par2_0file/0002755000175000017500000000000010162001761020475 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/par2_0file/0010000644000175000017500000000046307710177372020742 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par2 2nd test 2of4 - p2.vol0+1.par2 (0/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) Date: Fri, 25 Jul 2003 01:14:12 GMT Message-ID: <0.1059095652.0550@dumbnntpd> Here is zero file. Of par2. The zero file of par2 2nd test. Thats what this is. Yep. nget-0.27.1/test/testdata/par02/par2_input/0002755000175000017500000000000010162001761020635 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/par2_input/par0000644000175000017500000000421607710102416021347 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par2 2nd test 1of4 - p2.par2 (1/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) Date: Fri, 25 Jul 2003 01:14:12 GMT Message-ID: <1.1059095652.48@dumbnntpd> begin 644 p2.par2 M4$%2,@!02U2$`````````(:=,#%@L9M%G^Z%;B3687AU4;NKITP3TUS>%N]R M)/J14$%2(#(N,`!&:6QE1&5S8XNQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#= M46[W(212/A^#/\[TK&(`W5%N]R$D4@P`````````<#(M,#$N9&%T````4$%2 M,@!02U1D`````````)^H/O<.5PR?7DU2J(;H+/AU4;NKITP3TUS>%N]R)/J1 M4$%2(#(N,`!)1E-#`````(NQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W M(212T;#C6E!!4C(`4$M4A`````````!STZ.RY\P4BPR8L$=#*<6M=5&[JZ=, M$]-JEW?[@L;`UE* MOXA9&)-?I#R%J9J\40-92K^(61B37Z0\A:F:O%$+`````````'`R+3`R+F1A M=````%!!4C(`4$M49`````````"LNGY;%](S\@:DBL3I$5OX=5&[JZ=,$]-< MWA;OJEW?[@L;04T(N2K$ MI1QS\CM?=V\\_@R+;])005(R`%!+5(0`````````1OWHP(/!^H.Y+'BAA!Q' M6G51NZNG3!/37-X6[W(D^I%005(@,BXP`$9I;&5$97-C/'LY#U2N>GG=,BFD M!:*OU`Y/O&WP0]_\MF!M!-1M8*0.3[QM\$/?_+9@;034;6"D"P````````!P M,BTP,RYD870```!005(R`%!+5&0`````````:U:`4<:B[:[C1N`%B13)ZW51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$E&4T,`````/'LY#U2N>GG=,BFD!:*O MU"?W&Z;?&*_"S$*`*VM/-0Z.'8;Q4$%2,@!02U2$`````````&K"BM(AQ@>Y M1[.*,C`RUD]U4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8V"_;W@5 M""%/3P(8DM^"9<36WD]=G\K"'DCA\C*=P<;_UMY/79_*PAY(X?(RG<'&_PH` M````````<#(M,#0N9&%T````4$%2,@!02U1D`````````+[N":X\/2,37##! MJW;#>F%U4;NKITP3TUS>%N]R)/J14$%2(#(N,`!)1E-#`````&"_;W@5""%/ M3P(8DM^"9<0J]F)-;.?4*X"*.>`""R)HC78<%U!!4C(`4$M4A``````````X MBC*9E#*$`1@:X(%[KS>\=5&[JZ=,$]-?(5Z83[%X>-ZVC0"*HTJ2CC6G.<^Q>'C>MHT`BJ-*D MHXUISG,+`````````'`R+3`U+F1A=````%!!4C(`4$M49`````````"61A0K M+IF^--Z1?(2)F(5&=5&[JZ=,$]-?(5Z83$>I6E]@57-_-_6K@';2MV-Y_[B1005(R`%!+5)P` M````````0$WAL+8)B>)S6"M!GVF)M751NZNG3!/37-X6[W(D^I%005(@,BXP M`$UA:6X`````#``````````%````R'\,0]D_I+SMJEGGR%>F$_'3X`EYR-7# MM=ZJ7=_N"QN+L0:VUFUL?6<=^[:-$&>_8+]O>!4((4]/`AB2WX)EQ#Q[.0]4 MKGIYW3(II`6BK]1005(R`%!+5&0`````````)J)#*,XL6J8S@>VE(@`KGW51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$-R96%T;W(`0W)E871E9"!B>2!P87(R 58VUD;&EN92!V97)S:6]N(#`N,RX` ` end nget-0.27.1/test/testdata/par02/par2_input/par10000644000175000017500000000441407710102416021430 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par2 2nd test 2of4 - p2.vol0+1.par2 (1/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) Date: Fri, 25 Jul 2003 01:14:12 GMT Message-ID: <2.1059095652.55@dumbnntpd> begin 644 p2.vol0+1.par2 M4$%2,@!02U10``````````9=P*QLA5.BV8.#8T8T!"]U4;NKITP3TUS>%N]R M)/J14$%2(#(N,`!296-V4VQI8P````!J8#8S,#4J-S1`,PI005(R`%!+5(0` M````````AITP,6"QFT6?[H5N)-9A>'51NZNG3!/37-X6[W(D^I%005(@,BXP M`$9I;&5$97-CB[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O35*HAN@L^'51NZNG3!/37-X6[W(D^I%005(@,BXP`$E& M4T,`````B[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O%N]R)/J1 M4$%2(#(N,`!&:6QE1&5S8_'3X`EYR-7#M=ZJ7=_N"QL#64J_B%D8DU^D/(6I MFKQ1`UE*OXA9&)-?I#R%J9J\40L`````````<#(M,#(N9&%T````4$%2,@!0 M2U1D`````````*RZ?EL7TC/R!J2*Q.D16_AU4;NKITP3TUS>%N]R)/J14$%2 M(#(N,`!)1E-#`````/'3X`EYR-7#M=ZJ7=_N"QM!30BY*L2E''/R.U]W;SS^ M#(MOTE!!4C(`4$M4A`````````!&_>C`@\'Z@[DL>*&$'$=:=5&[JZ=,$]-< MWA;OSD/5*YZ>=TR*:0%HJ_4#D^\;?!# MW_RV8&T$U&U@I`Y/O&WP0]_\MF!M!-1M8*0+`````````'`R+3`S+F1A=``` M`%!!4C(`4$M49`````````!K5H!1QJ+MKN-&X`6)%,GK=5&[JZ=,$]-SD/5*YZ>=TR*:0%HJ_4)_<;IM\8K\+, M0H`K:T\U#HX=AO%005(R`%!+5(0`````````:L**TB'&![E'LXHR,#+63W51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$9I;&5$97-C8+]O>!4((4]/`AB2WX)E MQ-;>3UV?RL(>2.'R,IW!QO_6WD]=G\K"'DCA\C*=P<;_"@````````!P,BTP M-"YD870```!005(R`%!+5&0`````````ONX)KCP](Q-<,,&K=L-Z8751NZNG M3!/37-X6[W(D^I%005(@,BXP`$E&4T,`````8+]O>!4((4]/`AB2WX)EQ"KV M8DULY]0K@(HYX`(+(FB-=AP74$%2,@!02U2$`````````#B*,IF4,H0!&!K@ M@7NO-[QU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8\A_#$/9/Z2\ M[:I9Y\A7IA/L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.%N]R)/J14$%2(#(N,`!)1E-#`````,A_#$/9/Z2\[:I9 MY\A7IA,1ZE:7V!5&P MM@F)XG-8*T&?:8FU=5&[JZ=,$]-?(5Z83\=/@"7G(U<.UWJI=W^X+&XNQ M!K;6;6Q]9QW[MHT09[]@OV]X%0@A3T\"&)+?@F7$/'LY#U2N>GG=,BFD!:*O MU%!!4C(`4$M49``````````FHD,HSBQ:IC.![:4B`"N?=5&[JZ=,$]- begin 644 p2.vol1+2.par2 M4$%2,@!02U10`````````*3?%++.1;!_@LM1DLOEQ[YU4;NKITP3TUS>%N]R M)/J14$%2(#(N,`!296-V4VQI8P$```!JD![!&\H(`_Q1K*E005(R`%!+5(0` M````````AITP,6"QFT6?[H5N)-9A>'51NZNG3!/37-X6[W(D^I%005(@,BXP M`$9I;&5$97-CB[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O35*HAN@L^'51NZNG3!/37-X6[W(D^I%005(@,BXP`$E& M4T,`````B[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O%N]R)/J1 M4$%2(#(N,`!&:6QE1&5S8_'3X`EYR-7#M=ZJ7=_N"QL#64J_B%D8DU^D/(6I MFKQ1`UE*OXA9&)-?I#R%J9J\40L`````````<#(M,#(N9&%T````4$%2,@!0 M2U1D`````````*RZ?EL7TC/R!J2*Q.D16_AU4;NKITP3TUS>%N]R)/J14$%2 M(#(N,`!)1E-#`````/'3X`EYR-7#M=ZJ7=_N"QM!30BY*L2E''/R.U]W;SS^ M#(MOTE!!4C(`4$M4A`````````!&_>C`@\'Z@[DL>*&$'$=:=5&[JZ=,$]-< MWA;OSD/5*YZ>=TR*:0%HJ_4#D^\;?!# MW_RV8&T$U&U@I`Y/O&WP0]_\MF!M!-1M8*0+`````````'`R+3`S+F1A=``` M`%!!4C(`4$M49`````````!K5H!1QJ+MKN-&X`6)%,GK=5&[JZ=,$]-SD/5*YZ>=TR*:0%HJ_4)_<;IM\8K\+, M0H`K:T\U#HX=AO%005(R`%!+5(0`````````:L**TB'&![E'LXHR,#+63W51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$9I;&5$97-C8+]O>!4((4]/`AB2WX)E MQ-;>3UV?RL(>2.'R,IW!QO_6WD]=G\K"'DCA\C*=P<;_"@````````!P,BTP M-"YD870```!005(R`%!+5&0`````````ONX)KCP](Q-<,,&K=L-Z8751NZNG M3!/37-X6[W(D^I%005(@,BXP`$E&4T,`````8+]O>!4((4]/`AB2WX)EQ"KV M8DULY]0K@(HYX`(+(FB-=AP74$%2,@!02U2$`````````#B*,IF4,H0!&!K@ M@7NO-[QU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8\A_#$/9/Z2\ M[:I9Y\A7IA/L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.%N]R)/J14$%2(#(N,`!)1E-#`````,A_#$/9/Z2\[:I9 MY\A7IA,1ZE:7V!5&P MM@F)XG-8*T&?:8FU=5&[JZ=,$]-?(5Z83\=/@"7G(U<.UWJI=W^X+&XNQ M!K;6;6Q]9QW[MHT09[]@OV]X%0@A3T\"&)+?@F7$/'LY#U2N>GG=,BFD!:*O MU%!!4C(`4$M44`````````"G4L-8O0V"X1OIA"?_UXRW=5&[JZ=,$]-%N]R)/J14$%2(#(N M,`!&:6QE1&5S8XNQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W(212/A^# M/\[TK&(`W5%N]R$D4@P`````````<#(M,#$N9&%T````4$%2,@!02U1D```` M`````)^H/O<.5PR?7DU2J(;H+/AU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!) M1E-#`````(NQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W(212T;#C6E!! M4C(`4$M4A`````````!STZ.RY\P4BPR8L$=#*<6M=5&[JZ=,$]-JEW?[@L;`UE*OXA9&)-?I#R% MJ9J\40-92K^(61B37Z0\A:F:O%$+`````````'`R+3`R+F1A=````%!!4C(` M4$M49`````````"LNGY;%](S\@:DBL3I$5OX=5&[JZ=,$]-JEW?[@L;04T(N2K$I1QS\CM?=V\\ M_@R+;])005(R`%!+5(0`````````1OWHP(/!^H.Y+'BAA!Q'6G51NZNG3!/3 M7-X6[W(D^I%005(@,BXP`$9I;&5$97-C/'LY#U2N>GG=,BFD!:*OU`Y/O&WP M0]_\MF!M!-1M8*0.3[QM\$/?_+9@;034;6"D"P````````!P,BTP,RYD870` M``!005(R`%!+5&0`````````:U:`4<:B[:[C1N`%B13)ZW51NZNG3!/37-X6 M[W(D^I%005(@,BXP`$E&4T,`````/'LY#U2N>GG=,BFD!:*OU"?W&Z;?&*_" MS$*`*VM/-0Z.'8;Q4$%2,@!02U2$`````````&K"BM(AQ@>Y1[.*,C`RUD]U M4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8V"_;W@5""%/3P(8DM^" M9<36WD]=G\K"'DCA\C*=P<;_UMY/79_*PAY(X?(RG<'&_PH`````````<#(M M,#0N9&%T````4$%2,@!02U1D`````````+[N":X\/2,37##!JW;#>F%U4;NK MITP3TUS>%N]R)/J14$%2(#(N,`!)1E-#`````&"_;W@5""%/3P(8DM^"9<0J M]F)-;.?4*X"*.>`""R)HC78<%U!!4C(`4$M4A``````````XBC*9E#*$`1@: MX(%[KS>\=5&[JZ=,$]-?(5Z83[%X>-ZVC0"*HTJ2CC6G.<^Q>'C>MHT`BJ-*DHXUISG,+```` M`````'`R+3`U+F1A=````%!!4C(`4$M49`````````"61A0K+IF^--Z1?(2) MF(5&=5&[JZ=,$]-?(5Z83$>I6E]@57-_-_6K@';2MV-Y_[B1005(R`%!+5)P`````````0$WA ML+8)B>)S6"M!GVF)M751NZNG3!/37-X6[W(D^I%005(@,BXP`$UA:6X````` M#``````````%````R'\,0]D_I+SMJEGGR%>F$_'3X`EYR-7#M=ZJ7=_N"QN+ ML0:VUFUL?6<=^[:-$&>_8+]O>!4((4]/`AB2WX)EQ#Q[.0]4KGIYW3(II`6B MK]1005(R`%!+5&0`````````)J)#*,XL6J8S@>VE(@`KGW51NZNG3!/37-X6 M[W(D^I%005(@,BXP`$-R96%T;W(`0W)E871E9"!B>2!P87(R8VUD;&EN92!V ,97)S:6]N(#`N,RX` ` end nget-0.27.1/test/testdata/par02/par2_input/par30000644000175000017500000001021607710102416021427 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par2 2nd test 4of4 - p2.vol3+2.par2 (1/1) User-Agent: Newspost/2.1 (http://newspost.unixcab.org/) Date: Fri, 25 Jul 2003 01:14:12 GMT Message-ID: <4.1059095652.71@dumbnntpd> begin 644 p2.vol3+2.par2 M4$%2,@!02U10`````````,:Z='XR@GYT*N7ZETTK)>5U4;NKITP3TUS>%N]R M)/J14$%2(#(N,`!296-V4VQI8P,```#,7)SA->ZGFU_JS>Q005(R`%!+5(0` M````````AITP,6"QFT6?[H5N)-9A>'51NZNG3!/37-X6[W(D^I%005(@,BXP M`$9I;&5$97-CB[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O35*HAN@L^'51NZNG3!/37-X6[W(D^I%005(@,BXP`$E& M4T,`````B[$&MM9M;'UG'?NVC1!GOSX?@S_.]*QB`-U1;O%N]R)/J1 M4$%2(#(N,`!&:6QE1&5S8_'3X`EYR-7#M=ZJ7=_N"QL#64J_B%D8DU^D/(6I MFKQ1`UE*OXA9&)-?I#R%J9J\40L`````````<#(M,#(N9&%T````4$%2,@!0 M2U1D`````````*RZ?EL7TC/R!J2*Q.D16_AU4;NKITP3TUS>%N]R)/J14$%2 M(#(N,`!)1E-#`````/'3X`EYR-7#M=ZJ7=_N"QM!30BY*L2E''/R.U]W;SS^ M#(MOTE!!4C(`4$M4A`````````!&_>C`@\'Z@[DL>*&$'$=:=5&[JZ=,$]-< MWA;OSD/5*YZ>=TR*:0%HJ_4#D^\;?!# MW_RV8&T$U&U@I`Y/O&WP0]_\MF!M!-1M8*0+`````````'`R+3`S+F1A=``` M`%!!4C(`4$M49`````````!K5H!1QJ+MKN-&X`6)%,GK=5&[JZ=,$]-SD/5*YZ>=TR*:0%HJ_4)_<;IM\8K\+, M0H`K:T\U#HX=AO%005(R`%!+5(0`````````:L**TB'&![E'LXHR,#+63W51 MNZNG3!/37-X6[W(D^I%005(@,BXP`$9I;&5$97-C8+]O>!4((4]/`AB2WX)E MQ-;>3UV?RL(>2.'R,IW!QO_6WD]=G\K"'DCA\C*=P<;_"@````````!P,BTP M-"YD870```!005(R`%!+5&0`````````ONX)KCP](Q-<,,&K=L-Z8751NZNG M3!/37-X6[W(D^I%005(@,BXP`$E&4T,`````8+]O>!4((4]/`AB2WX)EQ"KV M8DULY]0K@(HYX`(+(FB-=AP74$%2,@!02U2$`````````#B*,IF4,H0!&!K@ M@7NO-[QU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8\A_#$/9/Z2\ M[:I9Y\A7IA/L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.%N]R)/J14$%2(#(N,`!)1E-#`````,A_#$/9/Z2\[:I9 MY\A7IA,1ZE:7V!5&P MM@F)XG-8*T&?:8FU=5&[JZ=,$]-?(5Z83\=/@"7G(U<.UWJI=W^X+&XNQ M!K;6;6Q]9QW[MHT09[]@OV]X%0@A3T\"&)+?@F7$/'LY#U2N>GG=,BFD!:*O MU%!!4C(`4$M44`````````#VN[P&K_==FMF\V*()W&Y?=5&[JZ=,$]-%N]R)/J14$%2(#(N M,`!&:6QE1&5S8XNQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W(212/A^# M/\[TK&(`W5%N]R$D4@P`````````<#(M,#$N9&%T````4$%2,@!02U1D```` M`````)^H/O<.5PR?7DU2J(;H+/AU4;NKITP3TUS>%N]R)/J14$%2(#(N,`!) M1E-#`````(NQ!K;6;6Q]9QW[MHT09[\^'X,_SO2L8@#=46[W(212T;#C6E!! M4C(`4$M4A`````````!STZ.RY\P4BPR8L$=#*<6M=5&[JZ=,$]-JEW?[@L;`UE*OXA9&)-?I#R% MJ9J\40-92K^(61B37Z0\A:F:O%$+`````````'`R+3`R+F1A=````%!!4C(` M4$M49`````````"LNGY;%](S\@:DBL3I$5OX=5&[JZ=,$]-JEW?[@L;04T(N2K$I1QS\CM?=V\\ M_@R+;])005(R`%!+5(0`````````1OWHP(/!^H.Y+'BAA!Q'6G51NZNG3!/3 M7-X6[W(D^I%005(@,BXP`$9I;&5$97-C/'LY#U2N>GG=,BFD!:*OU`Y/O&WP M0]_\MF!M!-1M8*0.3[QM\$/?_+9@;034;6"D"P````````!P,BTP,RYD870` M``!005(R`%!+5&0`````````:U:`4<:B[:[C1N`%B13)ZW51NZNG3!/37-X6 M[W(D^I%005(@,BXP`$E&4T,`````/'LY#U2N>GG=,BFD!:*OU"?W&Z;?&*_" MS$*`*VM/-0Z.'8;Q4$%2,@!02U2$`````````&K"BM(AQ@>Y1[.*,C`RUD]U M4;NKITP3TUS>%N]R)/J14$%2(#(N,`!&:6QE1&5S8V"_;W@5""%/3P(8DM^" M9<36WD]=G\K"'DCA\C*=P<;_UMY/79_*PAY(X?(RG<'&_PH`````````<#(M M,#0N9&%T````4$%2,@!02U1D`````````+[N":X\/2,37##!JW;#>F%U4;NK MITP3TUS>%N]R)/J14$%2(#(N,`!)1E-#`````&"_;W@5""%/3P(8DM^"9<0J M]F)-;.?4*X"*.>`""R)HC78<%U!!4C(`4$M4A``````````XBC*9E#*$`1@: MX(%[KS>\=5&[JZ=,$]-?(5Z83[%X>-ZVC0"*HTJ2CC6G.<^Q>'C>MHT`BJ-*DHXUISG,+```` M`````'`R+3`U+F1A=````%!!4C(`4$M49`````````"61A0K+IF^--Z1?(2) MF(5&=5&[JZ=,$]-?(5Z83$>I6E]@57-_-_6K@';2MV-Y_[B1005(R`%!+5)P`````````0$WA ML+8)B>)S6"M!GVF)M751NZNG3!/37-X6[W(D^I%005(@,BXP`$UA:6X````` M#``````````%````R'\,0]D_I+SMJEGGR%>F$_'3X`EYR-7#M=ZJ7=_N"QN+ ML0:VUFUL?6<=^[:-$&>_8+]O>!4((4]/`AB2WX)EQ#Q[.0]4KGIYW3(II`6B MK]1005(R`%!+5&0`````````)J)#*,XL6J8S@>VE(@`KGW51NZNG3!/37-X6 M[W(D^I%005(@,BXP`$-R96%T;W(`0W)E871E9"!B>2!P87(R8VUD;&EN92!V ,97)S:6]N(#`N,RX` ` end nget-0.27.1/test/testdata/par02/a_b_par_input/0002755000175000017500000000000010162001761021354 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/a_b_par_input/par0000644000175000017500000000156107606453537022107 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nda_b test - a b.par (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Tue, 07 Jan 2003 04:28:15 GMT Message-ID: <1.1041913695.32@dumbnntpd> begin 644 a b.par M4$%2``````````$```D``J&8!QV$>_','!*'Y)D_UC7@NI7XK[?YY*>-F@/B M(]-,```````````%`````````&``````````<@$```````#2`0`````````` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G. begin 644 a b.p01 M4$%2``````````$```D``LTY\N)>@2V37C7!*,AIHS3@NI7XK[?YY*>-F@/B M(]-,`0`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G. begin 644 a b.p02 M4$%2``````````$```D``CD^(0-F@/B M(]-,`@`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G. begin 644 a b.p03 M4$%2``````````$```D``AHD>IU3*?[&M7S(/'?CH='@NI7XK[?YY*>-F@/B M(]-,`P`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.PE6N+I$J9"@`` ` end nget-0.27.1/test/testdata/par02/a_b_par_input/par40000644000175000017500000000160107606455476022172 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nda_b test - a b.p04 (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Tue, 07 Jan 2003 04:28:57 GMT Message-ID: <4.1041913734.83@dumbnntpd> begin 644 a b.p04 M4$%2``````````$```D``HJX[-F@/B M(]-,!``````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.E=(8'N'8OE@HW"@`` ` end nget-0.27.1/test/testdata/par02/a_b_par_input/par50000644000175000017500000000160107606455476022173 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nda_b test - a b.p05 (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Tue, 07 Jan 2003 04:28:58 GMT Message-ID: <5.1041913734.91@dumbnntpd> begin 644 a b.p05 M4$%2``````````$```D``KZ"9YW1X3-1P1++%5HQ>6#@NI7XK[?YY*>-F@/B M(]-,!0`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.!M"_K"@`` ` end nget-0.27.1/test/testdata/par02/a_b_par_input/par60000644000175000017500000000160107606455476022174 0ustar donutdonut00000000000000From: donut@charon Newsgroups: test Subject: par 2nda_b test - a b.p06 (1/1) User-Agent: Newspost/2.0 (http://newspost.unixcab.org/) Date: Tue, 07 Jan 2003 04:28:59 GMT Message-ID: <6.1041913734.99@dumbnntpd> begin 644 a b.p06 M4$%2``````````$```D``K`)+IMMA7-]$SQVBNSV"[?@NI7XK[?YY*>-F@/B M(]-,!@`````````%`````````&``````````<@$```````#2`0````````P` M````````2@`````````!``````````P`````````/A^#/\[TK&(`W5%N]R$D M4CX?@S_.]*QB`-U1;O M3UV?RL(>2.'R,IW!QO]P`#(`+0`P`#0`+@!D`&$`=`!*``````````$````` M````"P````````#L7AXWK:-`(JC2I*.-:-ZVC0"*HTJ2CC6G.!GOS)[H.'D@8"@`` ` end nget-0.27.1/test/testdata/par02/_c_d_par2_output/0002755000175000017500000000000010162001761022002 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par02/_c_d_par2_output/c d.vol01+02.par20000644000175000017500000000551407710102611024377 0ustar donutdonut00000000000000PAR2PKTP¤ß²ÎE°‚ËQ’ËåǾuQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlicjÁÊüQ¬©PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTP§RÃX½ ‚áé„'ÿ׌·uQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlic0 —/­;G,Aˆ9PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTd&¢C(Î,Z¦3í¥"+ŸuQ»«§LÓ\Þïr$ú‘PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par02/_c_d_par2_output/c d.vol03+02.par20000644000175000017500000000551407710102611024401 0ustar donutdonut00000000000000PAR2PKTPƺt~2‚~t*åú—M+%åuQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlicÌ\œá5î§›_êÍìPAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTPö»¼¯÷]šÙ¼Ø¢ Ün_uQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlic­É~poa윩PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTd&¢C(Î,Z¦3í¥"+ŸuQ»«§LÓ\Þïr$ú‘PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par02/_c_d_par2_output/c d.vol00+01.par20000644000175000017500000000273007710102611024372 0ustar donutdonut00000000000000PAR2PKTP]À¬l…S¢ÙƒƒcF4/uQ»«§LÓ\Þïr$ú‘PAR 2.0RecvSlicj`6305*74@3 PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTd&¢C(Î,Z¦3í¥"+ŸuQ»«§LÓ\Þïr$ú‘PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par02/_c_d_par2_output/c d.par20000644000175000017500000000261007710102611023214 0ustar donutdonut00000000000000PAR2PKT„†01`±›EŸî…n$ÖaxuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$R>ƒ?Îô¬bÝQn÷!$R p2-01.datPAR2PKTdŸ¨>÷W Ÿ^MR¨†è,øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC‹±¶Öml}gû¶g¿>ƒ?Îô¬bÝQn÷!$RѰãZPAR2PKT„sÓ£²çÌ‹ ˜°GC)Å­uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescñÓà yÈÕõު]ßî YJ¿ˆY“_¤<…©š¼QYJ¿ˆY“_¤<…©š¼Q p2-02.datPAR2PKTd¬º~[Ò3ò¤ŠÄé[øuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCñÓà yÈÕõު]ßî AM¹*Ä¥sò;_wo<þ ‹oÒPAR2PKT„FýèÀƒÁúƒ¹,x¡„GZuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc<{9T®zyÝ2)¤¢¯ÔO¼mðCßü¶`mÔm`¤O¼mðCßü¶`mÔm`¤ p2-03.datPAR2PKTdkV€QÆ¢í®ãFà‰ÉëuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC<{9T®zyÝ2)¤¢¯Ô'÷¦ß¯ÂÌB€+kO5ކñPAR2PKT„jŠÒ!ƹG³Š202ÖOuQ»«§LÓ\Þïr$ú‘PAR 2.0FileDesc`¿ox!OO’ß‚eÄÖÞO]ŸÊÂHáò2ÁÆÿÖÞO]ŸÊÂHáò2ÁÆÿ p2-04.datPAR2PKTd¾î ®<=#\0Á«vÃzauQ»«§LÓ\Þïr$ú‘PAR 2.0IFSC`¿ox!OO’ß‚eÄ*öbMlçÔ+€Š9à "hvPAR2PKT„8Š2™”2„à{¯7¼uQ»«§LÓ\Þïr$ú‘PAR 2.0FileDescÈ CÙ?¤¼íªYçÈW¦ì^7­£@"¨Ò¤£iÎsì^7­£@"¨Ò¤£iÎs p2-05.datPAR2PKTd–F+.™¾4Þ‘|„‰˜…FuQ»«§LÓ\Þïr$ú‘PAR 2.0IFSCÈ CÙ?¤¼íªYçÈW¦êV—Ø\ßÍýjà´­ØÞî$PAR2PKTœ@Má°¶ ‰âsX+AŸi‰µuQ»«§LÓ\Þïr$ú‘PAR 2.0Main È CÙ?¤¼íªYçÈW¦ñÓà yÈÕõު]ßî ‹±¶Öml}gû¶g¿`¿ox!OO’ß‚eÄ<{9T®zyÝ2)¤¢¯ÔPAR2PKTd&¢C(Î,Z¦3í¥"+ŸuQ»«§LÓ\Þïr$ú‘PAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/mergesa01/0002755000175000017500000000000010162001761017412 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/mergesa01/input/0002755000175000017500000000000010162001761020551 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/mergesa01/input/0010000644000175000017500000000025207601675746021021 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: Re: merge test Message-ID: <1@mergesa.testdata> Date: Fri, 07 Jun 2002 22:18:12 GMT Lines: 2 This is a test, it is From me whee! nget-0.27.1/test/testdata/mergesa01/input/0020000644000175000017500000000022407601675746021021 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: Re: merge test Message-ID: <2@mergesa.testdata> Date: Fri, 07 Jun 2002 22:19:12 GMT Lines: 1 Test post #2. nget-0.27.1/test/testdata/mergesa01/_output/0002755000175000017500000000000010162001761021111 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/mergesa01/_output/1023488292.0.txt0000644000175000017500000000025207601676037023115 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: Re: merge test Message-ID: <1@mergesa.testdata> Date: Fri, 07 Jun 2002 22:18:12 GMT Lines: 2 This is a test, it is From me whee! nget-0.27.1/test/testdata/mergesa01/_output/1023488352.0.txt0000644000175000017500000000022407601676037023111 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: Re: merge test Message-ID: <2@mergesa.testdata> Date: Fri, 07 Jun 2002 22:19:12 GMT Lines: 1 Test post #2. nget-0.27.1/test/testdata/mbox01/0002755000175000017500000000000010162001761016734 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/mbox01/input/0002755000175000017500000000000010162001761020073 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/mbox01/input/0010000644000175000017500000000024207537054250020327 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: text test Message-ID: <1@mbox.testdata> Date: Fri, 07 Jun 2002 22:18:11 GMT Lines: 2 This is a test, it is From me whee! nget-0.27.1/test/testdata/mbox01/input/0020000644000175000017500000000033507537054302020331 0ustar donutdonut00000000000000From: ralph@bob Newsgroups: test Subject: text test Message-ID: <2@mbox.testdata> References: <1@mbox.testdata> Date: Fri, 07 Jun 2002 22:19:11 GMT Lines: 5 >This is a test, it is >From me whee! No, it is From me! haha! nget-0.27.1/test/testdata/mbox01/_gz_output/0002755000175000017500000000000010162001761021133 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/mbox01/_gz_output/nget.mbox.gz0000644000175000017500000000036307724474640023422 0ustar donutdonut00000000000000‹ yR?nget.mboxMjÃ0…÷sŠ—}$AI#ŠÉ"¸44Y4¾€œN-—Z ’Üäø•!ÐÞ,懙÷M|×pZ|s@e{ìŒ$„У ×+AeÓ¨}½ÉA¾Ä&øþ5ÇDǾþäS²kº•ö£ixñ²Õx’›®ö×åÐx7É´5‰5ÊÐÎ!VØõJ¥´|ÔRây_Ñkë8PD•m#²Ì¸zŽ6匊Á:ÆÅ2Ïhôøk”`¾Îö0j óÆØ·B]OPˆŠ;¬؃Ÿ~aFÖX“ßðº+ðäÒnget-0.27.1/test/testdata/mbox01/_output/0002755000175000017500000000000010162001761020433 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/mbox01/_output/nget.mbox0000644000175000017500000000072207537054403022273 0ustar donutdonut00000000000000From nget-ver Thu Jan 1 00:00:00 1970 From: bob@bob Newsgroups: test Subject: text test Message-ID: <1@mbox.testdata> Date: Fri, 07 Jun 2002 22:18:11 GMT Lines: 2 This is a test, it is >From me whee! From nget-ver Thu Jan 1 00:00:00 1970 From: ralph@bob Newsgroups: test Subject: text test Message-ID: <2@mbox.testdata> References: <1@mbox.testdata> Date: Fri, 07 Jun 2002 22:19:11 GMT Lines: 5 >This is a test, it is >>From me whee! No, it is >From me! haha! nget-0.27.1/test/testdata/refs01/0002775000175000017500000000000010162001761016730 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/refs01/input/0002775000175000017500000000000010162001761020067 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/refs01/input/0010000664000175000017500000000026607523327007020327 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: Re: Plasticity Message-ID: <3@explosion> References: Date: Fri, 07 Jun 2002 22:18:10 GMT Lines: 2 The laws of nature The laws of man nget-0.27.1/test/testdata/refs01/_output/0002775000175000017500000000000010162001761020427 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/refs01/_output/1023488290.0.txt0000664000175000017500000000026607523327101022422 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: Re: Plasticity Message-ID: <3@explosion> References: Date: Fri, 07 Jun 2002 22:18:10 GMT Lines: 2 The laws of nature The laws of man nget-0.27.1/test/testdata/refs02/0002775000175000017500000000000010162001761016731 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/refs02/input/0002775000175000017500000000000010162001761020070 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/refs02/input/0010000664000175000017500000000031707523327330020324 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: Re: Circuitry Message-ID: <4@explosion> References: Date: Fri, 07 Jun 2002 22:18:11 GMT Lines: 2 A new world will now arise Out of the ashes new life appears nget-0.27.1/test/testdata/refs02/_output/0002775000175000017500000000000010162001761020430 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/refs02/_output/1023488291.0.txt0000664000175000017500000000031707523327357022436 0ustar donutdonut00000000000000From: bob@bob Newsgroups: test Subject: Re: Circuitry Message-ID: <4@explosion> References: Date: Fri, 07 Jun 2002 22:18:11 GMT Lines: 2 A new world will now arise Out of the ashes new life appears nget-0.27.1/test/testdata/textnotuu/0002755000175000017500000000000010162001761017705 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/textnotuu/input/0002755000175000017500000000000010162001761021044 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/textnotuu/input/0000000644000175000017500000000154007607240726021304 0ustar donutdonut00000000000000From: foo Newsgroups: test Subject: Re: Can anyone make uulib not detect this post as uudata? (1/1) Date: 3 Jan 2003 04:04:58 GMT Lines: 14 Message-ID: References: NNTP-Posting-Date: 3 Jan 2003 04:04:58 GMT User-Agent: Xnews/5.04.25 braz@bloorg.mo (braaaz) wrote <> Thanks for the post! I had requested this a while ago. Sadly, I don't have any later episodes either. One suggestion: you used a very large file "Max Default Lines Per Part" (of 7000 I suspect) in powerpost. This can hurt propagation. On news.rcn.com, for instance, only 50% of your segments came through. It seems that a "Max Default Lines Per Part" of around 2000 (for yEnc posts) is more likely to succeed. Everything came through fine on easynews in any event. nget-0.27.1/test/testdata/textnotuu/_output/0002755000175000017500000000000010162001761021404 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/textnotuu/_output/1041566698.0.txt0000644000175000017500000000154007607240726023416 0ustar donutdonut00000000000000From: foo Newsgroups: test Subject: Re: Can anyone make uulib not detect this post as uudata? (1/1) Date: 3 Jan 2003 04:04:58 GMT Lines: 14 Message-ID: References: NNTP-Posting-Date: 3 Jan 2003 04:04:58 GMT User-Agent: Xnews/5.04.25 braz@bloorg.mo (braaaz) wrote <> Thanks for the post! I had requested this a while ago. Sadly, I don't have any later episodes either. One suggestion: you used a very large file "Max Default Lines Per Part" (of 7000 I suspect) in powerpost. This can hurt propagation. On news.rcn.com, for instance, only 50% of your segments came through. It seems that a "Max Default Lines Per Part" of around 2000 (for yEnc posts) is more likely to succeed. Everything came through fine on easynews in any event. nget-0.27.1/test/testdata/par2-01/0002755000175000017500000000000010162001761016710 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/corrupt_mainpkt/0002755000175000017500000000000010162001761022131 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/corrupt_mainpkt/par0000644000175000017500000000440207711370562022652 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 29 Jul 2003 04:00:50 GMT Newsgroups: test Subject: [par2 test] "c d.par2" 1936 yEnc bytes Lines: 18 Message-ID: <1.1059451250.49@dumbnntpd> =ybegin line=128 size=1936 name=c d.par2 zk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$ þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË] ¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªV L$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd =}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qß žUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐ j*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó ™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ £I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª****** *JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC- °œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾" 3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6»~–̾/BY['ž› 1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ* mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=1936 crc32=EB63BE9B nget-0.27.1/test/testdata/par2-01/input/0002755000175000017500000000000010162001761020047 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/input/par0000644000175000017500000000440207705766525020603 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:51:33 GMT Newsgroups: test Subject: [par2 test] "c d.par2" 1936 yEnc bytes Lines: 18 Message-ID: <1.1058532693.04@dumbnntpd> =ybegin line=128 size=1936 name=c d.par2 zk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$ þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË] ¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªV L$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd =}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qß žUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐ j*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó ™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ £I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª****** *JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC- °œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾" 3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž› 1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ* mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=1936 crc32=B8FAF330 nget-0.27.1/test/testdata/par2-01/input/dat10000644000175000017500000000052107705766655020654 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:53:01 GMT Newsgroups: test Subject: [par2 test] "c d 01.dat" 8 yEnc bytes Lines: 3 Message-ID: <1.1058532781.51@dumbnntpd> =ybegin line=128 size=8 name=c d 01.dat [\]^_`ab =yend size=8 crc32=9AE0DAAF nget-0.27.1/test/testdata/par2-01/input/dat20000644000175000017500000000053407705766657020663 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:53:03 GMT Newsgroups: test Subject: [par2 test] "c d 02.dat" 16 yEnc bytes Lines: 3 Message-ID: <2.1058532783.56@dumbnntpd> =ybegin line=128 size=16 name=c d 02.dat ‹ŒŽ‘’“”•–—˜™š =yend size=16 crc32=943AC093 nget-0.27.1/test/testdata/par2-01/input/dat30000644000175000017500000000055407705766661020661 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:53:05 GMT Newsgroups: test Subject: [par2 test] "c d 03.dat" 32 yEnc bytes Lines: 3 Message-ID: <3.1058532785.61@dumbnntpd> =ybegin line=128 size=32 name=c d 03.dat ›œžŸ ¡¢£¤klmnopqrstuvwxyz{|}~€ =yend size=32 crc32=B750B191 nget-0.27.1/test/testdata/par2-01/input/dat40000644000175000017500000000061407705766663020661 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:53:07 GMT Newsgroups: test Subject: [par2 test] "c d 04.dat" 64 yEnc bytes Lines: 3 Message-ID: <4.1058532787.66@dumbnntpd> =ybegin line=128 size=64 name=c d 04.dat ¸¥f>:ÊV­¸ÃM;§†áj¼³ïÄðüR×”ÛâYCöš2å `Å~ÌE¾U!·W£èQ5È4åNL5I— =yend size=64 crc32=71FF14CF nget-0.27.1/test/testdata/par2-01/input/dat50000644000175000017500000000072307705766665020665 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:53:09 GMT Newsgroups: test Subject: [par2 test] "c d 05.dat" 128 yEnc bytes Lines: 4 Message-ID: <5.1058532789.71@dumbnntpd> =ybegin line=128 size=128 name=c d 05.dat øC%=Jwÿs=Jج½q±ØÏŸç&"‘|03âN§ÝÒ¿çk¦¸¶Ç‘!Zª}‹&#¼Š®‘èÙëb³SÏÖu"E>‚gvÇEçú»C–Nø&DèÝŽ¶Wã-ÚÉÒNmvPv«…cç¿=M}9¨½öð<q*a¡AZÅ¢úz@pE š,n =yend size=128 crc32=F3D22570 nget-0.27.1/test/testdata/par2-01/input/par10000644000175000017500000000454107705766560020667 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:52:00 GMT Newsgroups: test Subject: [par2 test] "c d.vol00+01.par2" 2012 yEnc bytes Lines: 18 Message-ID: <1.1058532720.26@dumbnntpd> =ybegin line=128 size=2012 name=c d.vol00+01.par2 zk|\*zu~v*******t×ÑŠÄR„Û¬¢‡2ÅC4(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“****•Eì=@"Ÿò#zk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk| J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ” àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<, Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘) Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£ RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛF þ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þ õ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿ W_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï· VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´ þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\ að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3 Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+p H†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0 ¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=2012 crc32=CA864BD0 nget-0.27.1/test/testdata/par2-01/input/par20000644000175000017500000001037407705766562020673 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:52:02 GMT Newsgroups: test Subject: [par2 test] "c d.vol01+02.par2" 3924 yEnc bytes Lines: 33 Message-ID: <2.1058532722.31@dumbnntpd> =ybegin line=128 size=3924 name=c d.vol01+02.par2 zk|\*zu~v*******[žŠ¿ëO¿w‘µLùŒ…“[(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“+***¸\ŒMa²Û‚zk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î \<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£R K¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW _ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·V Í”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þ õ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\ að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3 Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH †ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼ èÛFþ¹±j£RKzk|\*zu~v*******ÍÎÒÜ¡žÒ`ÍM=@9Cjgç(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“,***Ež½¾Åzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz =`´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n ,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp }m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n Èè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m ****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾· ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï& `k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­ (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·Š ɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹ IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦< Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*z u~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\ <,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=3924 crc32=A68D3C6B nget-0.27.1/test/testdata/par2-01/input/par30000644000175000017500000001434307705766564020676 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:52:04 GMT Newsgroups: test Subject: [par2 test] "c d.vol03+04.par2" 5912 yEnc bytes Lines: 49 Message-ID: <3.1058532724.36@dumbnntpd> =ybegin line=128 size=5912 name=c d.vol03+04.par2 zk|\*zu~v*******¨ÖvûâAܸe«':àÅ&(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“-***8ôŸÏ’Êzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î \<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£R K¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW _ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~v*******D†—5£j(ÙÉÕTit*v(¤ùz ´þõ~Ï·V Í”àzk|J\XZ*| }–“.***ÜÅÿ ¸ îÔzk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@T dΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37 y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ >36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤! <Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2****** */***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~ Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz=` ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n ,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m ****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè 0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~v*******y².ˆÅ‚°ØJ~”<Ó…#(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“ /***^1zSÓˆ”=Mzk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë =@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž* å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U© (5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\ Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY [•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆ ø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu— œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“ ˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY 2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il Ö Í©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~v*******ñŽÞfBd4É[ÒŠåR(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*| }–“0***rä®Òaù9–™ ¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–Ì ¾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6 c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL ,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\© žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àz k|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[ è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=5912 crc32=47CB2A91 nget-0.27.1/test/testdata/par2-01/input/par40000644000175000017500000002054507705766566020702 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:52:06 GMT Newsgroups: test Subject: [par2 test] "c d.vol07+08.par2" 8052 yEnc bytes Lines: 66 Message-ID: <4.1058532726.41@dumbnntpd> =ybegin line=128 size=8052 name=c d.vol07+08.par2 zk|\*zu~v*******Ì싳h§ÉÅÒíH«Pplb(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“1***±¹MÃv ¿Hzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î \<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£R K¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~v*******³m[^ÓºQoù÷J=JÐB(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“2***çôÉÞ `ízk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv [¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4 da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚ çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{ D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@ TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û3 7y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›Ì Ù>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤! <Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2***** **/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~v*******³Íu¨di¼²=MÁû§:wX(¤ùz ´þ õ~Ï·VÍ”àzk|J\XZ*| }–“3***²í±)%UCózk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ —›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj 4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:* ******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ² ¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ**** ***JŽJZ]XŽ‹ž**zk|\*zu~v*******ͰXŒÚÑ7íŒà"/DH(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“4***=MÓº[9ÜBÐzk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ù z ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk |\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^ XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN ±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu ~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**z k|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰ uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëA Ä»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M –˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@ õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~v*******È͹ó`m(¡ÜÚuW´ø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“5***†P÷"ï¤Þ+zk| \*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž* *zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B ­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢, Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$  v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~v*******pò´vb=MÏ KÚT©I?æ˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“6*** Û–ͧçŸfzk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹± j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~ Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_Ì lÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ” àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~ Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að ×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3C ß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß :û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛ Fþ¹±j£RKzk|\*zu~v*******¹&„ö0¼Ãœ-ú³Gçþvh(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“7***l1¯Cû–™¢6·2¹· U©(5P \V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B  Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚ EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œP ظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜** **2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™ l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=8052 crc32=333DF8B9 nget-0.27.1/test/testdata/par2-01/input/par50000644000175000017500000002544307705766570020700 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 18 Jul 2003 12:52:08 GMT Newsgroups: test Subject: [par2 test] "c d.vol15+16.par2" 10496 yEnc bytes Lines: 85 Message-ID: <5.1058532728.46@dumbnntpd> =ybegin line=128 size=10496 name=c d.vol15+16.par2 zk|\*zu~v*******êbþ &¢TÆ„r^:1@(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“9***Wÿõ2¡Vzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~v*******÷kߨ=JÅ‹æ^Ç=@›(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“:***Ö  7/²&4zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬z k|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾q v[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~v*******dÃáÐâÿ²R=}f)(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“;***>ž4P×N–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B} ,ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+** ****íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§ êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õ HõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1Lͽ P¨±’}âüzk|\*zu~v*******/ –§6i,Ú4Ð0 hO(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“<***‡…¹žç¶Íðzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï· VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®***** **2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž* ******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~v*******AFLôYoeÊ‘xZñl2w(¤ùz=` ´þõ~Ï·VÍ”àzk|J\XZ*| }–“=}***˜d&”÷Ñzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥ ¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj« Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ \ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yz qL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~v*******¨þ?4Ýé=}G‰Œ ç§çý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*| }–“>***¾uôúR'.Bzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=J X%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘ +DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ 2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡ Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~v*******ŸnÀ)wÅD<¥ÖkÞÑ(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“?***…ÅÿÆHrzk|\*zu~º+******íÓk ã¶3·Šɦ Ä}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œ rø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~ Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<, Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Ž ñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄz k|\*zu~v*******=@™¸+m'K¢T÷4&¦Â(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“@***gŸ®z2Jß5zk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ *p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~v*******rþºVXS¸R]‚ÛF3TO(¤ùz ´þõ~Ï·VÍ”àzk| J\XZ*| }–“A***<öqÌ‚F52zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4 °{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=} Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m** **@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™ ¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~v*******Ïè$±¢ïÓY•™ý9ÖàL(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“B***åß|O,·R zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ _XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2 Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+ Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8 w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^ V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~v*******$ö>ŠqaýKÑEEb²(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“C** *ƒ½ìøSCÉzk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æN ü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢***** **úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~v*******ý­b³Ö— ¦Æ/¢î=@„(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“D***k€ñÊLø–Özk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛF þ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè 0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò” nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙ ò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~v*******7!÷Ð%Ühª¡Æ¬äí£(¤ùz ´þ õ~Ï·VÍ”àzk|J\XZ*| }–“E***¢×=JªñRzk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â :“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY ]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPŘ ¸}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜**** 2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~v*******lauR×GO»³hZ€ÿz (¤ ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“F***Ö[+Æ‘ozk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ô j4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ „ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–u Ïɲˆ²¡~¥Qþ¬zk|\*zu~v*******#AÓê¿¢}¡xæqE¸(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“G***b%mt\¾zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz =`´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL” Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj******* JŽJZ^XŽ‹ž**zk|\*zu~v*******?­ßVü=@=@ÔòéZÍ™g(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“H***X-:=}<­zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´ þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAå f. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk| J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·V Í”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@ —ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇ X½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û ¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹± j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=10496 crc32=18A52DD5 nget-0.27.1/test/testdata/par2-01/reply/0002755000175000017500000000000010162001761020043 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/reply/0010000644000175000017500000000051207707034632020300 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: Fingers v1.0 Date: Mon, 21 Jul 2003 19:04:22 GMT Newsgroups: test Subject: Re: [par2 test] "c d.vol01+02.par2" 3924 yEnc bytes Lines: 3 References: <2.1058532722.31@dumbnntpd> Message-ID: <1.1058814262.37@dumbnntpd> > =yend size=3924 crc32=A68D3C6B wow2. nget-0.27.1/test/testdata/par2-01/missing_ifscpkt/0002755000175000017500000000000010162001761022104 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/missing_ifscpkt/par0000644000175000017500000000423407711401732022622 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 29 Jul 2003 05:19:22 GMT Newsgroups: test Subject: [par2 test] "c d.par2" 1836 yEnc bytes Lines: 17 Message-ID: <1.1059455962.71@dumbnntpd> =ybegin line=128 size=1836 name=c d.par2 zk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ ‹ž**zk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJ Z\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬ zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]X Ž‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾q v[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX %4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@ ‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã {D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@ TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û3 7y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›Ì Ù>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤! <Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2***** **/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þ õ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=1836 crc32=ACC553BD nget-0.27.1/test/testdata/par2-01/corrupt_input/0002755000175000017500000000000010162001761021625 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/corrupt_input/dat20000644000175000017500000000053407706564675022436 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Sun, 20 Jul 2003 19:13:01 GMT Newsgroups: test Subject: [par2 test] "c d 02.dat" 16 yEnc bytes Lines: 3 Message-ID: <1.1058728381.81@dumbnntpd> =ybegin line=128 size=16 name=c d 02.dat JA~ÂMµºNum°ãkx =yend size=16 crc32=57E1F7E2 nget-0.27.1/test/testdata/par2-01/corrupt_input/dat40000644000175000017500000000061407706564677022441 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Sun, 20 Jul 2003 19:13:03 GMT Newsgroups: test Subject: [par2 test] "c d 04.dat" 64 yEnc bytes Lines: 3 Message-ID: <2.1058728383.86@dumbnntpd> =ybegin line=128 size=64 name=c d 04.dat ÷:$Ý8Z^”8w;é»#c½ƒOSdÕáÊ´yÃÝ^Ó£q‘};¯GŽÜ7§‡Ñ±kGÉb“ðŠóºéZ =yend size=64 crc32=03003A07 nget-0.27.1/test/testdata/par2-01/_incomplete_multipart_output/0002755000175000017500000000000010162001761024727 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_incomplete_multipart_output/c d.vol03+04.par20000644000175000017500000000415507740656513027352 0ustar donutdonut00000000000000PAR2PKTL~¬LѸò²Ž;ý¶›üþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicÊu¥hØÚ PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKTL\m y@þ¯Ÿï«*?JLþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic²›ÕöŽßĪPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_output/0002755000175000017500000000000010162001761020407 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_output/c d 01.dat0000644000175000017500000000001007705764731021743 0ustar donutdonut0000000000000012345678nget-0.27.1/test/testdata/par2-01/_output/c d 02.dat0000644000175000017500000000002007705764755021753 0ustar donutdonut00000000000000abcdefghijklmnopnget-0.27.1/test/testdata/par2-01/_output/c d 03.dat0000644000175000017500000000004007705765006021744 0ustar donutdonut00000000000000qrstuvwxyzABCDEFGHIJKLMNOPQRSTUVnget-0.27.1/test/testdata/par2-01/_output/c d 04.dat0000644000175000017500000000010007705765115021743 0ustar donutdonut00000000000000Ž{<ò ,ƒôŽ™#}\·@’‰ÅšÆÒ(­j籸/Ìp»á6›ØT¢ñ”+Ú÷-äy¾' ž »$" ðmnget-0.27.1/test/testdata/par2-01/_output/c d 05.dat0000644000175000017500000000020007705765133021745 0ustar donutdonut00000000000000ÎûàUMÕIஂ“õG‡®¥u½üøgR ¸e$}³¨•½Aò|ŽŒg÷0€SaÚüù’`„sg¾¯Á8‰)¥¬KøX=L½Ð‘l$Îüé¾³dŒ-¹õ°Ÿ¨$CL&Lé[9½•ãS~“ÌÆÚG7w0ò›xÐPFpDnget-0.27.1/test/testdata/par2-01/_output/c d.vol01+02.par20000644000175000017500000000752407705765516023036 0ustar donutdonut00000000000000PAR2PKTL1t`•Á%•Mg‹"Ïb[i1þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicŽ2b#7ˆ±XPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTL£¤¨²wt¨6£#Ö@=½þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlictõæè“”›PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_output/c d.vol03+04.par20000644000175000017500000001343007705765516023033 0ustar donutdonut00000000000000PAR2PKTL~¬LѸò²Ž;ý¶›üþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicÊu¥hØÚ PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKTL\m y@þ¯Ÿï«*?JLþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic²›ÕöŽßĪPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKTLOˆe^›X†® Tj©[ùþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic4P)©^jãPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_output/c d.vol00+01.par20000644000175000017500000000373407705765516023033 0ustar donutdonut00000000000000PAR2PKTLJ­Þ§`š(Z±‚x]› þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlickÂÖøuÈùPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_output/c d.vol07+08.par20000644000175000017500000001756407705765516023057 0ustar donutdonut00000000000000PAR2PKTL¢Âa‰>}Ÿ›¨Ã&FB8þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic‡#™Lâ•PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKTL‰Cí14©õ'EÏÍ à¦þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicî½ÊŸ´6ÃñPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTL‰£K~:å?’ˆã—Ñ}M.þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic ˆÃ‡ÿû+ÉPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKTL£í†ò.b°§ Ãb¶øþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic ã©1²¦PAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTLž£××É6Cþw²°K-ŠÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic \&ÍøÅz´PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKTLFÈŠL8ã¥é!°*¼nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic v±l£}½uœžìèž¾’¾±Ô‡@y(!ñPAR2PKTLüZÌ’™rЉ½ÔL>þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic Bñ…™‘PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKTLNŸ(Q‚˜µy}xAdÕBv{þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic°¶®”xòPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_output/c d.par20000644000175000017500000000362007705765516021652 0ustar donutdonut00000000000000PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_output/c d.vol15+16.par20000644000175000017500000002440007705765516023040 0ustar donutdonut00000000000000PAR2PKTLÀ8ÔâüWx*œcZH4þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic-ÕfËwê,PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTLÍAµ~Ä•†à›a¼4ÖìqþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic¬v ˆü ìPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKTLec:™·¦¸Õˆå(Ý<ÿÛþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlict &Ù­$PAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTLölè} ?°Ý ¦v>%þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic][t½Œ£ÆPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKTL~Ô ³¿_bvò½}½ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic”KÊÐ(ýPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTLuD–ÿïM›{¬A´óå§þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic[é›ìÕœHPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKTLHÔ,.U)Ž(3X± *%þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicÌG¢X PAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKTL¥¾ú‡íxÅ©/koÓ¬¶"þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic»µR%(ðPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTLúÌs`ÜG7Ó!§8ˆëþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicYe“ÂÎ)ŸPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKTLÓƒ8‰¬m|œÛèxÄÖUZþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicAVÇ "Îl¬PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKTL å÷ͦû²>€wœ‚ºÃñyþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicx­à€êÇï(PAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTLB7Kô(­%‘‰>0VÕPßþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic¬è1ÛœgEPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKTLù©À•xSwN¼eGîsŽþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicÜ8ûCJ2”êPAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTLƒµ,ÒäÖÖªÈÜ¿0£o=þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicí.æƒPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/corrupt_pxxblocks/0002755000175000017500000000000010162001761022503 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/corrupt_pxxblocks/par30000644000175000017500000001434207707253004023307 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 22 Jul 2003 15:19:32 GMT Newsgroups: test Subject: [par2 test] "c d.vol03+04.par2" 5912 yEnc bytes Lines: 49 Message-ID: <1.1058887172.1@dumbnntpd> =ybegin line=128 size=5912 name=c d.vol03+04.par2 zk|\*zu~v*******¨ÖvûâAܸe«':àÅ&(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“-***8ôŸÏ›Êzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î \<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£R K¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW _ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~v*******D†—5£j(ÙÉÕTit*v(¤ùz ´þõ~Ï·V Í”àzk|J\XZ*| }–“.***ÜÅÿ ¸ îÔzk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@T dΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37 y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ >36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤! <Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2****** */***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~ Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz=` ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n ,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m ****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè 0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~v*******y².ˆÅ‚°ØJ~”<Ó…#(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“ /***^1zS›ˆ”=Mzk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë =@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž* å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U© (5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\ Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY [•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆ ø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu— œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“ ˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY 2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il Ö Í©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~v*******ñŽÞfBd4É[ÒŠåR(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*| }–“0***rä®Òaù9–™ ¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–Ì ¾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6 c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL ,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\© žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àz k|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[ è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=5912 crc32=09705347 nget-0.27.1/test/testdata/par2-01/multipart/0002755000175000017500000000000010162001761020731 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/multipart/dat1-10000644000175000017500000000055107741641652021664 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:41:07 GMT Newsgroups: test Subject: [par2 test] "c D 01.dAT" yEnc (1/2) 8 bytes Lines: 4 Message-ID: <1.1065822067.65@dumbnntpd> =ybegin part=1 total=2 line=5 size=8 name=c D 01.dAT =ypart begin=1 end=5 [\]^_ =yend size=5 part=1 pcrc32=CBF53A1C nget-0.27.1/test/testdata/par2-01/multipart/dat1-20000644000175000017500000000056507741641652021672 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:41:09 GMT Newsgroups: test Subject: [par2 test] "c D 01.dAT" yEnc (2/2) 8 bytes Lines: 3 Message-ID: <2.1065822069.7@dumbnntpd> =ybegin part=2 total=2 line=5 size=8 name=c D 01.dAT =ypart begin=6 end=8 `ab =yend size=3 part=2 pcrc32=67A2589A crc32=9AE0DAAF nget-0.27.1/test/testdata/par2-01/multipart/dat2-10000644000175000017500000000055607741641652021672 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:43:30 GMT Newsgroups: test Subject: [par2 test] "c D 02.dAT" yEnc (1/2) 16 bytes Lines: 4 Message-ID: <1.1065822210.5@dumbnntpd> =ybegin part=1 total=2 line=9 size=16 name=c D 02.dAT =ypart begin=1 end=9 ‹ŒŽ‘’“ =yend size=9 part=1 pcrc32=8DA988AF nget-0.27.1/test/testdata/par2-01/multipart/dat2-20000644000175000017500000000057607741641652021675 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:43:32 GMT Newsgroups: test Subject: [par2 test] "c D 02.dAT" yEnc (2/2) 16 bytes Lines: 3 Message-ID: <2.1065822212.55@dumbnntpd> =ybegin part=2 total=2 line=9 size=16 name=c D 02.dAT =ypart begin=10 end=16 ”•–—˜™š =yend size=7 part=2 pcrc32=B53E66A0 crc32=943AC093 nget-0.27.1/test/testdata/par2-01/multipart/dat3-10000644000175000017500000000057207741641652021671 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:41:30 GMT Newsgroups: test Subject: [par2 test] "c D 03.dAT" yEnc (1/2) 32 bytes Lines: 4 Message-ID: <5.1065822090.11@dumbnntpd> =ybegin part=1 total=2 line=17 size=32 name=c D 03.dAT =ypart begin=1 end=17 ›œžŸ ¡¢£¤klmnopq =yend size=17 part=1 pcrc32=3A6134F7 nget-0.27.1/test/testdata/par2-01/multipart/dat3-20000644000175000017500000000061007741641652021663 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:41:32 GMT Newsgroups: test Subject: [par2 test] "c D 03.dAT" yEnc (2/2) 32 bytes Lines: 3 Message-ID: <6.1065822092.15@dumbnntpd> =ybegin part=2 total=2 line=17 size=32 name=c D 03.dAT =ypart begin=18 end=32 rstuvwxyz{|}~€ =yend size=15 part=2 pcrc32=FB8B828D crc32=B750B191 nget-0.27.1/test/testdata/par2-01/multipart/dat4-10000644000175000017500000000057207741641652021672 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 08 Oct 2003 04:21:57 GMT Newsgroups: test Subject: [par2 test] "c D 04.dAT" yEnc (1/4) 64 bytes Lines: 4 Message-ID: <1.1065586917.15@dumbnntpd> =ybegin part=1 total=4 line=17 size=64 name=c D 04.dAT =ypart begin=1 end=17 ¸¥f>:ÊV­¸ÃM;§†á =yend size=17 part=1 pcrc32=4E443426 nget-0.27.1/test/testdata/par2-01/multipart/dat4-20000644000175000017500000000057307741641652021674 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 08 Oct 2003 04:21:59 GMT Newsgroups: test Subject: [par2 test] "c D 04.dAT" yEnc (2/4) 64 bytes Lines: 4 Message-ID: <2.1065586919.19@dumbnntpd> =ybegin part=2 total=4 line=17 size=64 name=c D 04.dAT =ypart begin=18 end=34 j¼³ïÄðüR×”ÛâYCöš =yend size=17 part=2 pcrc32=F2577512 nget-0.27.1/test/testdata/par2-01/multipart/dat4-30000644000175000017500000000057307741641652021675 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 08 Oct 2003 04:22:01 GMT Newsgroups: test Subject: [par2 test] "c D 04.dAT" yEnc (3/4) 64 bytes Lines: 4 Message-ID: <3.1065586921.24@dumbnntpd> =ybegin part=3 total=4 line=17 size=64 name=c D 04.dAT =ypart begin=35 end=51 2å `Å~ÌE¾U!·W =yend size=17 part=3 pcrc32=2FA58514 nget-0.27.1/test/testdata/par2-01/multipart/dat4-40000644000175000017500000000060507741641652021672 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Wed, 08 Oct 2003 04:22:03 GMT Newsgroups: test Subject: [par2 test] "c D 04.dAT" yEnc (4/4) 64 bytes Lines: 3 Message-ID: <4.1065586923.3@dumbnntpd> =ybegin part=4 total=4 line=17 size=64 name=c D 04.dAT =ypart begin=52 end=64 £èQ5È4åNL5I— =yend size=13 part=4 pcrc32=F2C89967 crc32=71FF14CF nget-0.27.1/test/testdata/par2-01/multipart/dat5-10000644000175000017500000000061407741641652021670 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:41:43 GMT Newsgroups: test Subject: [par2 test] "c D 05.dAT" yEnc (1/4) 128 bytes Lines: 4 Message-ID: <7.1065822103.98@dumbnntpd> =ybegin part=1 total=4 line=33 size=128 name=c D 05.dAT =ypart begin=1 end=31 øC%=Jwÿs=Jج½q±ØÏŸç&"‘|03âN§ÝÒ =yend size=31 part=1 pcrc32=A423755A nget-0.27.1/test/testdata/par2-01/multipart/dat5-20000644000175000017500000000061507741641652021672 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:41:46 GMT Newsgroups: test Subject: [par2 test] "c D 05.dAT" yEnc (2/4) 128 bytes Lines: 4 Message-ID: <8.1065822106.02@dumbnntpd> =ybegin part=2 total=4 line=33 size=128 name=c D 05.dAT =ypart begin=32 end=64 ¿çk¦¸¶Ç‘!Zª}‹&#¼Š®‘èÙëb³SÏÖu"E =yend size=33 part=2 pcrc32=122C0F29 nget-0.27.1/test/testdata/par2-01/multipart/dat5-30000644000175000017500000000061507741641652021673 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:41:48 GMT Newsgroups: test Subject: [par2 test] "c D 05.dAT" yEnc (3/4) 128 bytes Lines: 4 Message-ID: <9.1065822108.07@dumbnntpd> =ybegin part=3 total=4 line=33 size=128 name=c D 05.dAT =ypart begin=65 end=97 >‚gvÇEçú»C–Nø&DèÝŽ¶Wã-ÚÉÒNmvPv =yend size=33 part=3 pcrc32=87F63CBE nget-0.27.1/test/testdata/par2-01/multipart/dat5-40000644000175000017500000000063507741641652021676 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Fri, 10 Oct 2003 21:41:50 GMT Newsgroups: test Subject: [par2 test] "c D 05.dAT" yEnc (4/4) 128 bytes Lines: 3 Message-ID: <10.1065822110.12@dumbnntpd> =ybegin part=4 total=4 line=33 size=128 name=c D 05.dAT =ypart begin=98 end=128 «…cç¿=M}9¨½öð<q*a¡AZÅ¢úz@pEš,n =yend size=31 part=4 pcrc32=2055C2D7 crc32=F3D22570 nget-0.27.1/test/testdata/par2-01/multipart/par3-10000644000175000017500000000502207740643113021667 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 07 Oct 2003 23:03:39 GMT Newsgroups: test Subject: [par2 test] "c d.vol03+04.par2" yEnc (1/3) 5912 bytes Lines: 20 Message-ID: <1.1065567819.66@dumbnntpd> =ybegin part=1 total=3 line=128 size=5912 name=c d.vol03+04.par2 =ypart begin=1 end=2157 zk|\*zu~v*******¨ÖvûâAܸe«':àÅ&(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“-***8ôŸÏ’Êzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î \<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£R K¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW _ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~v*******D†—5£j(ÙÉÕTit*v(¤ùz ´þõ~Ï·V Í”àzk|J\XZ*| }–“.***ÜÅÿ ¸ îÔzk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@T dΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37 y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ >36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤! <Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2****** */***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~ Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz=` =yend size=2157 part=1 pcrc32=6530F918 nget-0.27.1/test/testdata/par2-01/multipart/par3-20000644000175000017500000000502407740643115021674 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 07 Oct 2003 23:03:41 GMT Newsgroups: test Subject: [par2 test] "c d.vol03+04.par2" yEnc (2/3) 5912 bytes Lines: 20 Message-ID: <2.1065567821.71@dumbnntpd> =ybegin part=2 total=3 line=128 size=5912 name=c d.vol03+04.par2 =ypart begin=2158 end=4312 ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n ,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m ****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè 0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~v*******y².ˆÅ‚°ØJ~”<Ó…#(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“ /***^1zSÓˆ”=Mzk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë =@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž* å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U© (5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\ Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY [•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆ ø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu— œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“ ˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY 2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il Ö Í©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~v*******ñŽÞfBd4É[ÒŠåR(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*| }–“0***rä®Òaù9 =ybegin part=3 total=3 line=128 size=5912 name=c d.vol03+04.par2 =ypart begin=4313 end=5912 ¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ 1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ \ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4 °{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=} Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m** **@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™ ¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–Ì ¾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6 c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL ,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\© žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àz k|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[ è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=1600 part=3 pcrc32=44EADA86 crc32=47CB2A91 nget-0.27.1/test/testdata/par2-01/_corrupt_pxxblocks_output/0002755000175000017500000000000010162001761024262 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_corrupt_pxxblocks_output/c d.vol03+04.par20000644000175000017500000001343007707252760026700 0ustar donutdonut00000000000000PAR2PKTL~¬LѸò²Ž;ý¶›üþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicÊu¥qØÚ PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKTL\m y@þ¯Ÿï«*?JLþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic²›ÕöŽßĪPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKTLOˆe^›X†® Tj©[ùþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic4P)q^jãPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_reply_output/0002755000175000017500000000000010162001761021622 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_reply_output/1058814262.0.txt0000644000175000017500000000051207707034664023624 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: Fingers v1.0 Date: Mon, 21 Jul 2003 19:04:22 GMT Newsgroups: test Subject: Re: [par2 test] "c d.vol01+02.par2" 3924 yEnc bytes Lines: 3 References: <2.1058532722.31@dumbnntpd> Message-ID: <1.1058814262.37@dumbnntpd> > =yend size=3924 crc32=A68D3C6B wow2. nget-0.27.1/test/testdata/par2-01/notpxxs/0002755000175000017500000000000010162001761020433 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/notpxxs/par10000644000175000017500000000140307735254534021241 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Sat, 27 Sep 2003 09:33:16 GMT Newsgroups: test Subject: [par2 test] "c d.vol00+01.par2" 440 yEnc bytes Lines: 6 Message-ID: <1.1064655196.64@dumbnntpd> =ybegin line=128 size=440 name=c d.vol00+01.par2 rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’– –™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’ ––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovv y’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™rovvy’––™ =yend size=440 crc32=8720CECA nget-0.27.1/test/testdata/par2-01/notpxxs/par20000644000175000017500000000050607735254536021247 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Sat, 27 Sep 2003 09:33:18 GMT Newsgroups: test Subject: [par2 test] "c d.vol01+02.par2" 4 yEnc bytes Lines: 3 Message-ID: <2.1064655198.69@dumbnntpd> =ybegin line=128 size=4 name=c d.vol01+02.par2 ’“X4 =yend size=4 crc32=7302106D nget-0.27.1/test/testdata/par2-01/missing_filedescpkt/0002755000175000017500000000000010162001761022736 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/missing_filedescpkt/par0000644000175000017500000000417607711402003023451 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 29 Jul 2003 05:20:03 GMT Newsgroups: test Subject: [par2 test] "c d.par2" 1804 yEnc bytes Lines: 17 Message-ID: <1.1059456003.25@dumbnntpd> =ybegin line=128 size=1804 name=c d.par2 zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š £Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v $ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ =`œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžU þgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj** *****JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T )±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I ?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******J ŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq £ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œ ªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3G ÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^ V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=1804 crc32=5AEB3023 nget-0.27.1/test/testdata/par2-01/_corrupt_output/0002755000175000017500000000000010162001761022165 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_corrupt_output/c d 02.dat0000644000175000017500000000002007706564602023517 0ustar donutdonut00000000000000 T˜#‹$KCe†æ¹ANnget-0.27.1/test/testdata/par2-01/_corrupt_output/c d 04.dat0000644000175000017500000000010007706564620023520 0ustar donutdonut00000000000000Íúñ³04jMì¿‘ù9“Y%)ç:«· ŠWO™³4©yðGgS…Üd² }è]§‡AØÙŸ8iÆô`É¿0nget-0.27.1/test/testdata/par2-01/corrupt_inputblock/0002755000175000017500000000000010162001761022640 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/corrupt_inputblock/dat50000644000175000017500000000072307706566271023446 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Sun, 20 Jul 2003 19:25:45 GMT Newsgroups: test Subject: [par2 test] "c d 05.dat" 128 yEnc bytes Lines: 4 Message-ID: <1.1058729145.52@dumbnntpd> =ybegin line=128 size=128 name=c d 05.dat øC›=Jwÿs=Jج½q±ØÏŸç&"‘|03âN§ÝÒ¿çk¦¸¶Ç‘!Zª}›&#¼Š®‘èÙëb³SÏÖu"E>‚gvÇEçú»C–Nø&DèÝŽ¶Wã-ÚÉÒNmvPv«…cç¿=M}9¨½öð<q*a¡AZÅ¢úz@p› š,n =yend size=128 crc32=EF4BBC35 nget-0.27.1/test/testdata/par2-01/weirdcase_input/0002755000175000017500000000000010162001761022075 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/weirdcase_input/par0000644000175000017500000000437210034401202022576 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:03:57 GMT Newsgroups: test Subject: [par2 test] "C d.pAr2" 1936 yEnc bytes Lines: 18 Message-ID: <1.1081213437.03@dumbnntpd> =ybegin line=128 size=1936 name=C d.pAr2 zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\X Ž‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk| \*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk ~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨k oÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*** ****›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~ Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜ þÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖK ÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJ Z_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß 2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá +Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZ É‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ” kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~Ž*******PBné¶Àâºi"mYŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*mœ‹ž™œ*mœ‹žŽJ Œ£Jš‹œ\—Ž–“˜J œ“™˜JZX]X* =yend size=1936 crc32=DFE44BC9 nget-0.27.1/test/testdata/par2-01/weirdcase_input/dat10000644000175000017500000000052110034401202022635 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:02:55 GMT Newsgroups: test Subject: [par2 test] "c D 01.DAt" 8 yEnc bytes Lines: 3 Message-ID: <4.1081213375.96@dumbnntpd> =ybegin line=128 size=8 name=c D 01.DAt [\]^_`ab =yend size=8 crc32=9AE0DAAF nget-0.27.1/test/testdata/par2-01/weirdcase_input/dat20000644000175000017500000000053410034401202022642 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:02:49 GMT Newsgroups: test Subject: [par2 test] "C d 02.DaT" 16 yEnc bytes Lines: 3 Message-ID: <1.1081213369.84@dumbnntpd> =ybegin line=128 size=16 name=C d 02.DaT ‹ŒŽ‘’“”•–—˜™š =yend size=16 crc32=943AC093 nget-0.27.1/test/testdata/par2-01/weirdcase_input/dat30000644000175000017500000000055310034401202022644 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:02:58 GMT Newsgroups: test Subject: [par2 test] "c D 03.Dat" 32 yEnc bytes Lines: 3 Message-ID: <5.1081213378.0@dumbnntpd> =ybegin line=128 size=32 name=c D 03.Dat ›œžŸ ¡¢£¤klmnopqrstuvwxyz{|}~€ =yend size=32 crc32=B750B191 nget-0.27.1/test/testdata/par2-01/weirdcase_input/dat40000644000175000017500000000061410034401202022643 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:02:51 GMT Newsgroups: test Subject: [par2 test] "C d 04.daT" 64 yEnc bytes Lines: 3 Message-ID: <2.1081213371.87@dumbnntpd> =ybegin line=128 size=64 name=C d 04.daT ¸¥f>:ÊV­¸ÃM;§†áj¼³ïÄðüR×”ÛâYCöš2å `Å~ÌE¾U!·W£èQ5È4åNL5I— =yend size=64 crc32=71FF14CF nget-0.27.1/test/testdata/par2-01/weirdcase_input/dat50000644000175000017500000000072310034401202022645 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:02:53 GMT Newsgroups: test Subject: [par2 test] "C d 05.dAt" 128 yEnc bytes Lines: 4 Message-ID: <3.1081213373.91@dumbnntpd> =ybegin line=128 size=128 name=C d 05.dAt øC%=Jwÿs=Jج½q±ØÏŸç&"‘|03âN§ÝÒ¿çk¦¸¶Ç‘!Zª}‹&#¼Š®‘èÙëb³SÏÖu"E>‚gvÇEçú»C–Nø&DèÝŽ¶Wã-ÚÉÒNmvPv«…cç¿=M}9¨½öð<q*a¡AZÅ¢úz@pE š,n =yend size=128 crc32=F3D22570 nget-0.27.1/test/testdata/par2-01/weirdcase_input/par10000644000175000017500000000453210034401202022655 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:03:31 GMT Newsgroups: test Subject: [par2 test] "C D.voL00+01.paR2" 2012 yEnc bytes Lines: 18 Message-ID: <1.1081213411.65@dumbnntpd> =ybegin line=128 size=2012 name=C D.voL00+01.paR2 zk|\*zu~v*******°¶¸t4=J;¢Ðn1cŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“****•Eì=@"Ÿò#zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûz k|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„Õ xÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\ XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓ ûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ` YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp }m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐË ÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[ éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓû zk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚ A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að× ±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß \ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà< äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@ qµ{é–Ýzk|\*zu~Ž*******PBné¶Àâºi"mYŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX]X* =yend size=2012 crc32=E8295671 nget-0.27.1/test/testdata/par2-01/weirdcase_input/par20000644000175000017500000001035310034401202022654 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:03:37 GMT Newsgroups: test Subject: [par2 test] "C d.vol01+02.par2" 3924 yEnc bytes Lines: 33 Message-ID: <4.1081213417.79@dumbnntpd> =ybegin line=128 size=3924 name=C d.vol01+02.par2 zk|\*zu~v******* ±s9ÿ ×­œÞF»ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“+***²%! |í®zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk| J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓ ûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ *p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûz k|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`Yå DzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m ****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄl Æ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk |J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×± @—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ã ÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖ N6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ {é–Ýzk|\*zu~v*******¾³MOç}ÌòN3£ämŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“,***ËÔ0Ú›)zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓ ûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A „ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk| J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„Õ xÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æ Æ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“– nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ* sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐ ËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦s Õ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„Õx Óûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe ‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\a ð×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3C ß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtY à<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚ È@qµ{é–Ýzk|\*zu~Ž*******PBné¶Àâºi"mYŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX]X* =yend size=3924 crc32=8BD33F44 nget-0.27.1/test/testdata/par2-01/weirdcase_input/par30000644000175000017500000001431410034401202022656 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:03:33 GMT Newsgroups: test Subject: [par2 test] "C D.vol03+04.PAr2" 5912 yEnc bytes Lines: 49 Message-ID: <2.1081213413.7@dumbnntpd> =ybegin line=128 size=5912 name=C D.vol03+04.PAr2 zk|\*zu~v*******„E>R›³74ñäªÈ=J†!ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“-***£)ã ´,zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk |J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„Õx Óûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\X Z*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓû zk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`Y åDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp} m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄ lÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[é º yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~v******* U¤HÃÞ›Ü&ºsªú$ŽÃÜþÍPe‚A„ÕxÓûz k|J\XZ*| }–“.***?ÔÛ®™hízk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ \Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥N ŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯ øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J ±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/** *Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„Õx Óûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚ A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk |J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/ æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“– nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~v*******´ŽÒz±~òù#Áñ£‰ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ *| }–“/***=@*u¡qƒ†¢zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\* zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**z k|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã; <`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@ TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û3 7y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›Ì Ù>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤! <Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2***** **/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚ A„ÕxÓûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍ Pe‚A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~v*******䈨óRHù×½üe&ä¨/ŽÃÜþÍPe‚A„Õ xÓûzk|J\XZ*| }–“0***—Ž(ìir¼Îzk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐ ëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä 4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì ·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Ž ñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄz k|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnk ž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[ ¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“ ¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢ 38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY] x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ }ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2* ******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~Ž*******PBné¶Àâºi"mYŽÃÜþÍP e‚A„ÕxÓûzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX]X* =yend size=5912 crc32=9C376594 nget-0.27.1/test/testdata/par2-01/weirdcase_input/par40000644000175000017500000002051310034401202022655 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:03:35 GMT Newsgroups: test Subject: [par2 test] "C d.vOl07+08.Par2" 8052 yEnc bytes Lines: 66 Message-ID: <3.1081213415.75@dumbnntpd> =ybegin line=128 size=8052 name=C d.vOl07+08.Par2 zk|\*zu~v*******ˆ GÍâ¨ë!KIéÊÕ 2ÁŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“1***š½¶žu:Ùƒzk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk| J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓ ûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ *p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûz k|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`Yå DzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~v*******†Á æÑÞ+Ñïv78iËŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*|  }–“2***)±¹X±Âùzk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®** *****Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu ~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß °y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\ Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸ C~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯ø ð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J± ™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/*** Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~v*******J Ñ?]æ’»Éaj}˜ŽÃÜþÍPe‚A„ÕxÓû zk|J\XZ*| }–“3***Q»o —zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒ BzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=J X%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+ DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· =`å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1 ×2*******JnJZ[XŽkž**zk|\*zu~v*******6?þþ«A‚nïnõ2kÖOÔŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“4***ódG†ÈБ–zk|\*zu~Ž*******0¶÷º!±­€Ulä/m /ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“ –n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\X Z*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo \û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+***** *ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñî ä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõ Wˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨± ’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(Õ Ô7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~v*******¢üîC+Ô=}âGVm ±ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“5***éM씊”=Jzk|\*zu~®*******¸ ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*** ****Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZT Ü:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~***** ** “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QR Á}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph° ¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~v*******±+òÐmUGO+ †Ã=}ðÑ!HŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“6***ÉÆŒà }úzk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹ 55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄl Æ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  =`÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+ 0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp} m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœ ógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη ¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍP e‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~v** *****µÛ~Q¨ì¸?}¸ßß !ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“7***úSâ`†xö]zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n B#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp }m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nMT §‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m ****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™ ¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nÞß^ê†~È0¸á ¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~v*******Ç4ª€ ¬[tXí¿=MYæíŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“8*** ›S –×zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ =I­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê******* ̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1 ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å =@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@ uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\ Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢eb Ó’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0 ¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~Ž*******PBné¶Àâºi"mYŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*m œ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX]X* =yend size=8052 crc32=E19A8566 nget-0.27.1/test/testdata/par2-01/weirdcase_input/par50000644000175000017500000002537010034401202022664 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 06 Apr 2004 01:03:39 GMT Newsgroups: test Subject: [par2 test] "c D.vOl15+16.PaR2" 10496 yEnc bytes Lines: 85 Message-ID: <5.1081213419.84@dumbnntpd> =ybegin line=128 size=10496 name=c D.vOl15+16.PaR2 zk|\*zu~v*******J™Z€áþƒÎyÃï¸ÓgŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“9****¤ˆÁmh¢zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk| J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓ ûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ *p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~v*******;=@ÿÅ&;7$ëâ.ÖãÓŽÃÜþÍPe‚A„ÕxÓû zk|J\XZ*| }–“:***gê)Ë-a†Ezk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{ \=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å ™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2** *****JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~v* ******ÚÑ…Z¡?+ÅDAúº‰ÒoyŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“;***:r÷ ùa&Èzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n 7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp }m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨ åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******Ÿu wƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cV mˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆ ÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}â üzk|\*zu~v*******Ûø~…)XãÞíñY9Û¶ÝŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“<***ã6»5î˜mzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk| J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~®*******¸ßÄVIr Ë=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô ‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~v*******–™¢6·2¹· U© (5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nÞß^ê†~È0¸á¹55S^Oÿ„ü­ Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^O ÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~v*******qv“H@u‡Kò•}P‡ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“>***©^ÕæNMzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S• ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ Ö KÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgA rÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª******* JnJZ_XŽkž**zk|\*zu~v*******©è—Ó÷ü…¡Ã–+@ÓŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“?***ÞéŠß¬¬zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚ A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að ×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3C ß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà <äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È @qµ{é–Ýzk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:******* mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥ Qþ¬zk|\*zu~v*******ó—Íî›äzÛ‡¬µ‚—vŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“@***ïô—ŠÉÃÝzk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓû zk|J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚ A„ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo &/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p “–nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~v*******aT~ï¸x —æ¬)è1ŽÃÜþÍPe‚A„ÕxÓûzk|J\ XZ*| }–“A***nEzž§FÃþzk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\ *zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž** zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã ;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~v*******ÑÓÙ*)¤ »"3€;LŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“B***—¤Ÿ'÷^‘zk|\*zu~®*******ìMo \û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+*** ***ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§ê ñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õH õWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP ¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ( ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.G Ú³ ãGŽ cîm¥¡`.GÚ³ ã:*******mJŽJZ\XŽ‹~**zk|\*zu~v*******HŽÆ²Ôf?oÌs<Ò5‡ÇJŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“C***µã‰ãÀ` zk|\*zu~¢*** ****Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******˜ZT Ü:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******mJŽJZ^XŽk~**zk|\*zu~***** ** “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QR Á}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~v*******u-V)‡‹8£ËÅØd¤ —¼ZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“D***œ5æ†j—0"zk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nÞß^ê†~È0¸á¹55S^O ÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****Þß^ê†~È0¸á¹5 5S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥ =` ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~v*******ô!3]€PNûѯâ\ñŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“E** *åÞE¯#;¥Ðzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª**** ***JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐ Ë äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼Å C-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾ "3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜****2*******/***Þß^ê†~È0¸á¹55S^B #Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~v*******”X£€ îŽgåWŸdýžŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“F ***v¬ 1ý–zk|\*zu~®*******¸ßÄVIrË=JkõÇ FÇŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nB#Ä‘|NÒ”kX‹Ñ*ˆ›’GŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*** ****mJŽJZ\XŽ‹~**zk|\*zu~¢*******Ô‚—˜gqE²}¢(7È.:ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****B#Ä‘|NÒ”kX‹Ñ*ˆ›’j«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡ ~¥Qþ¬zk|\*zu~®*******˜ZTÜ:›Þn-Áªt´ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–nMT§‡€%0‚È@qµ{é–Ýëc=JX%4da{3JêÐëc=JX%4da{3JêÐj***** **mJŽJZ^XŽk~**zk|\*zu~******* “:Ýëß öìnÉÀ¡§ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****MT§‡€%0‚È@qµ{é–Ý‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª "™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—z k|\*zu~v*******Pnƒ%"q¤Û·o-qœÖ|ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“G***=MÄ(À‡Üpzk|\*zu~®*******›C˧ß^Þdph°¡·ŽÃÜþÍPe‚A„ÕxÓûzk|J \XZ*p“–nÞß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JnJZ[XŽkž**zk|\*zu~Ž*******0¶÷º!±­€Ulä/m/ŽÃÜþÍPe‚A„ÕxÓû zk|J\XZ*sp}m****Þß^ê†~È0¸á¹55S^Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******Ô¥T“_ ­}“ÎS”^S•ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n7ÆjRÖÔôü¤À˜ ™¦sÕ¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JnJZ]Xnkž**zk|\*zu~v*******s¨f(ÜÉ>oÒ¯¨u?=} ŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*| }–“H***½Q 4oõù¢zk|\*zu~Ê*******̺`b~ÿ ÖKÊŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****7ÆjRÖÔôü¤À˜™¦sÕ[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾q v[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******ìMo\û¨åȸY1°qŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*p“–n+0ƒŠ×lTûg´Íµ(ÕÔdΙ\Á B  Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JnJZ_XŽkž**zk|\*zu~º+******ŸuwƸÆ]S?îÅZŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*sp}m****+0ƒŠ×lTûg´Íµ(ÕÔ•‚E Æ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ª Y]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPÅ ˜¸}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******æLtYà<äÖN6êŽ!¯ÖéŽÃÜþÍPe‚A„ÕxÓûzk|J\XZ*w‹“˜*** *2*******/***Þß^ê†~È0¸á¹55S^B#Ä‘|NÒ”kX‹Ñ*ˆ›’+0ƒŠ×lTûg´Íµ(ÕÔ7ÆjRÖÔôü¤À˜™¦sÕMT§‡€%0‚È@qµ{é–Ýzk|\*zu~Ž*******PBné¶Àâºi"mYŽÃÜ þÍPe‚A„ÕxÓûzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX]X* =yend size=10496 crc32=0E078187 nget-0.27.1/test/testdata/par2-01/_weirdcase_output/0002755000175000017500000000000010162001761022435 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_weirdcase_output/C d 02.DaT0000644000175000017500000000002007705764755023641 0ustar donutdonut00000000000000abcdefghijklmnopnget-0.27.1/test/testdata/par2-01/_weirdcase_output/C d 04.daT0000644000175000017500000000010007705765115023671 0ustar donutdonut00000000000000Ž{<ò ,ƒôŽ™#}\·@’‰ÅšÆÒ(­j籸/Ìp»á6›ØT¢ñ”+Ú÷-äy¾' ž »$" ðmnget-0.27.1/test/testdata/par2-01/_weirdcase_output/C d 05.dAt0000644000175000017500000000020007705765133023673 0ustar donutdonut00000000000000ÎûàUMÕIஂ“õG‡®¥u½üøgR ¸e$}³¨•½Aò|ŽŒg÷0€SaÚüù’`„sg¾¯Á8‰)¥¬KøX=L½Ð‘l$Îüé¾³dŒ-¹õ°Ÿ¨$CL&Lé[9½•ãS~“ÌÆÚG7w0ò›xÐPFpDnget-0.27.1/test/testdata/par2-01/_weirdcase_output/C d.vOl07+08.Par20000644000175000017500000001756410034400226024712 0ustar donutdonut00000000000000PAR2PKTL^ö£¸~Á÷!¿ «ß—d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicp“ŒtK¯YPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTL\—â¼§Ý´§ÅL ?ð¡d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicÿ‡ñ.‡˜ÏPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTLð ß§3¼fh‘Ÿ7@êSnd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic '‘EfÚâåmPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTL ÔÔXDÅDËA¬%ªd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic É:\ž¦glPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTLxÒÄת¸,C߇îõd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic ¿#Âïj`jàPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTL‡ȦC+%\™Ƨ÷d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic Ÿœb¶vfSÐPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTL‹±TÚ'~ÂŽóS޵µß÷d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic Ð)¸6\NÌ3PAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTL €cVö‚1J.Õã/¼Ãd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicíeqñ)öl­PAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTd&D¿Œí–æÛ¸æ?øC/d™²Ô£&é;XeZ«N©ÑPAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par2-01/_weirdcase_output/C d.vol01+02.par20000644000175000017500000000752410034400226024771 0ustar donutdonut00000000000000PAR2PKTLâW‡IðÝÕâ­ƒr´‘òd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicUˆû÷ßRÄPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTL”‰#%½Sç¢UÈU$ yºCd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicíæ¡ª°qÿPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTd&D¿Œí–æÛ¸æ?øC/d™²Ô£&é;XeZ«N©ÑPAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par2-01/_weirdcase_output/C d.pAr20000644000175000017500000000362010034400226023545 0ustar donutdonut00000000000000PAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTd&D¿Œí–æÛ¸æ?øC/d™²Ô£&é;XeZ«N©ÑPAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par2-01/_weirdcase_output/c D.vOl15+16.PaR20000644000175000017500000002440010034400226024633 0ustar donutdonut00000000000000PAR2PKTL o0V·ÔÞY¤O™ÅŽô©=d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicz^Û—C>xPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTLÖÕ›üô úWÁ¸¬¹©d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic=Àÿ¡7\PAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKTL°§[0w›Ð_¨EOd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicHÍvÏ7üžPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTL±ÎT[ÿ.¹´ÃÇ/±Œ³ëd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicÞ¹ ‘ ÄnCPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKTL; 9ëÜ^“{ÇZéÛÖÛd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic4ÄA_z§òPAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKTLGLióK]!ÞÈkS&]Ýd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic4竼$ä#PAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTL¾mê©íÍÒ[w™l©Ød™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicÜ´¿ó`µ‚‚PAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKTLÛÉ×m£ÄqºP±]‚‹XmLd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicÅóÊm`Ÿ™³PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTL7*TÅŽNâm¼s‚äéÿ¾d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicDPt}™ÔPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKTL§Þ©òô¯ÿzö‘ø V"d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicmzuýÍ4ågPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTLdœˆª<E¢I¨ ] d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic‹¹_¹ä–6vPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKTLK,ÿ]ay¡›®:zm’0d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicr ¼\@møPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKTLWÊ÷ Ü3V&$ѧ…¸2Çïd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic»´…ù{¦PAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTLôíj.yVßÄd=»-u:Ótd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicíLÝ‚ßÓlPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKTL&DYûøGìz±EGr¬Rd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic×ãšþ–]²FPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKTLI~e<þ²ŸE¨…~Köd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlic“'î EËÏxPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTd&D¿Œí–æÛ¸æ?øC/d™²Ô£&é;XeZ«N©ÑPAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par2-01/_weirdcase_output/C D.voL00+01.paR20000644000175000017500000000373410034400226024626 0ustar donutdonut00000000000000PAR2PKTL†ŒÙŽJ àx¦DÝÙ9êd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlickÂÖøuÈùPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTd&D¿Œí–æÛ¸æ?øC/d™²Ô£&é;XeZ«N©ÑPAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par2-01/_weirdcase_output/c D 01.DAt0000644000175000017500000000001007705764731023631 0ustar donutdonut0000000000000012345678nget-0.27.1/test/testdata/par2-01/_weirdcase_output/c D 03.Dat0000644000175000017500000000004007705765006023672 0ustar donutdonut00000000000000qrstuvwxyzABCDEFGHIJKLMNOPQRSTUVnget-0.27.1/test/testdata/par2-01/_weirdcase_output/C D.vol03+04.PAr20000644000175000017500000001343010034400226024626 0ustar donutdonut00000000000000PAR2PKTLèZ(q‰ Ǻ€žà\÷d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicyÿ¹á˜ŠUPAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKTLv+z™™tq²üIÚ€Ðúd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicª±„èo>ÃPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTLŠd¨P‡fTÈÏñù—Çyè_d™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicÖKwGY\xPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKT„ŽµÛš,H¡àAËéßd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescùšgR$¨jA.a§^qhdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹C d 02.daTPAR2PKTxeªXmn=GˆSxþ žd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCùšgR$¨jA.a§^qhèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKTLº^~É(Ï­“Ò;üº~êd™²Ô£&é;XeZ«N©ÑPAR 2.0RecvSlicmdþÂ?H’¤PAR2PKT„n0*W²q´åDf—€JŠd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc#*}]VûXžG‹Q¿l³ÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@C d 04.dATPAR2PKTðßi³êÁµßÌÂDŸç–w}d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC#*}]VûXžG‹Q¿l³X½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„q¡}µ4´:FðU>†wíd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c D 01.dAtPAR2PKTdŒÍÙ÷‡ƒV+BºWCd™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC´µ4À\TžcŽ· )4%ÕZÒƒª@ ôdÇmq<­¯ÚàšPAR2PKT„ª{*i5߃Si¤)Üj4)kd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDesc œ@(¬ªÊÒz–noÜ|I«~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c D 03.DAtPAR2PKT ÄŠ‘¢f68TÕâ¬æ!å d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSC œ@(¬ªÊÒz–noÜ|I«1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„Â#EæÜ2Ñó~»žŽ/†Gd™²Ô£&é;XeZ«N©ÑPAR 2.0FileDescY`­B*Ñ=Š£‹þ«õª:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c D 05.dAtPAR2PKTuKõMœŽœ3î)Äñê›0d™²Ô£&é;XeZ«N©ÑPAR 2.0IFSCY`­B*Ñ=Š£‹þ«õªkXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœ¼"J/¶º¬$ Àd÷…¬¿d™²Ô£&é;XeZ«N©ÑPAR 2.0Main´µ4À\TžcŽ· )4ùšgR$¨jA.a§^qhY`­B*Ñ=Š£‹þ«õª œ@(¬ªÊÒz–noÜ|I«#*}]VûXžG‹Q¿l³PAR2PKTd&D¿Œí–æÛ¸æ?øC/d™²Ô£&é;XeZ«N©ÑPAR 2.0CreatorCreated by par2cmdline version 0.3.nget-0.27.1/test/testdata/par2-01/_missing_ifscpkt_output/0002755000175000017500000000000010162001761023663 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_missing_ifscpkt_output/c d.par20000644000175000017500000000345407711401716025115 0ustar donutdonut00000000000000PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKT„¼$Ò~²úÔ”ƒÆµ¯ÌþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescñÉgÝÿ¤2¡v>œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_corrupt_outputblock/0002755000175000017500000000000010162001761023200 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_corrupt_outputblock/c d 05.dat0000644000175000017500000000020007706566253024541 0ustar donutdonut00000000000000ÎqàUMÕIஂ“õG‡®¥u½üøgR ¸e$}³¨•½Aò|ŽŒg÷0€SqÚüù’`„sg¾¯Á8‰)¥¬KøX=L½Ð‘l$Îüé¾³dŒ-¹õ°Ÿ¨$CL&Lé[9½•ãS~“ÌÆÚG7w0ò›xÐPFqpDnget-0.27.1/test/testdata/par2-01/_corrupt_mainpkt_output/0002755000175000017500000000000010162001761023710 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_corrupt_mainpkt_output/c d.par20000644000175000017500000000362007711370236025137 0ustar donutdonut00000000000000PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ fe‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/corrupt_pxxs/0002755000175000017500000000000010162001761021470 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/corrupt_pxxs/par20000644000175000017500000001037407707012243022272 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Mon, 21 Jul 2003 16:28:19 GMT Newsgroups: test Subject: [par2 test] "c d.vol01+02.par2" 3924 yEnc bytes Lines: 33 Message-ID: <1.1058804899.82@dumbnntpd> =ybegin line=128 size=3924 name=c d.vol01+02.par2 zk|\*zu~v*******[žŠ¿ëO¿w‘µLùŒ…“[(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“+***¸\ŒMa›Û‚zk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î \<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£R K¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW _ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·V Í”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þ õ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\ að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3 Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH †ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼ èÛFþ¹±j£RKzk|\*zu~v*******ÍÎÒÜ¡žÒ`ÍM=@9Cjgç(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“,***Ež›½¾Åzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz =`´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n ,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp }m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n Èè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m ****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾· ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï& `k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­ (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·Š ɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹ IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦< Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*z u~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\ <,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=3924 crc32=84B99685 nget-0.27.1/test/testdata/par2-01/corrupt_pxxs/par30000644000175000017500000001434307707012245022275 0ustar donutdonut00000000000000From: donut@charon (Matthew Mueller,,,) Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Mon, 21 Jul 2003 16:28:21 GMT Newsgroups: test Subject: [par2 test] "c d.vol03+04.par2" 5912 yEnc bytes Lines: 49 Message-ID: <2.1058804901.84@dumbnntpd> =ybegin line=128 size=5912 name=c d.vol03+04.par2 zk|\*zu~v*******¨ÖvûâAܸe«':àÅ&(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“-***8ôŸ›’Êzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î \<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£R K¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW _ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~v*******D†—5£j(ÙÉÕTit*v(¤ùz ´þõ~Ï·V Í”àzk|J\XZ*| }–“.***ÜÅÿ›¸ îÔzk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@T dΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37 y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ >36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤! <Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2****** */***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~ Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz=` ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n ,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m ****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè 0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~v*******y².ˆÅ‚°ØJ~”<Ó…#(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“ /***^1z›Óˆ”=Mzk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë =@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž* å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U© (5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\ Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY [•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆ ø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu— œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“ ˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~®*******2­zÍÓ,6X,êY 2fý(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il Ö Í©fz×à(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~v*******ñŽÞfBd4É[ÒŠåR(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*| }–“0***rä®Ò›ù9–™ ¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–Ì ¾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6 c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL ,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\© žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àz k|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[ è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=5912 crc32=06E29E6F nget-0.27.1/test/testdata/par2-01/_corrupt_sethash_output/0002755000175000017500000000000010162001761023704 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_corrupt_sethash_output/foo.vol01+02.par20000644000175000017500000000752407740466313026460 0ustar donutdonut00000000000000PAR2PKTL1t`•Á%•Mg‹"Ïb[i1þzÏPöŠÔËTA¥,£j¶PAR 2.0RecvSlicŽ2b#7ˆ±XPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTL£¤¨²wt¨6£#Ö@=½þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlictõæè“”›PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/corrupt_sethash/0002755000175000017500000000000010162001761022125 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/corrupt_sethash/par20000644000175000017500000001034707740467147022745 0ustar donutdonut00000000000000From: donut@charon Sender: donut@charon User-Agent: ypost/0.46 (http://www.yencode.org/) Date: Tue, 07 Oct 2003 07:37:27 GMT Newsgroups: test Subject: [par2 test] "c d.vol01+02.par2" 3924 yEnc bytes Lines: 33 Message-ID: <1.1065512247.08@dumbnntpd> =ybegin line=128 size=3924 name=foo.vol01+02.par2 zk|\*zu~v*******[žŠ¿ëO¿w‘µLùŒ…“[(¤ùz ´þõ~kÏ·VÍ”àzk|J\XZ*| }–“+***¸\ŒMa²Û‚zk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ~Ï·VÍ”àzk|J \XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz ´þõ~Ï·VÍ”à zk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n,ó‘)Î\<,Ë  hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****,ó‘)Î \<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nÈè0¼èÛFþ¹±j£R K¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****Èè0¼èÛFþ ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾·ÝA`˜(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï&`k¾ò”nnEk (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW _ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­(¤ùz ´þõ~Ï·V Í”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·ŠɦÄ}ãø(¤ùz ´þ õ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹IÚ´å£ç‰V'î.\ að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦<Œrø”¡ =J‰3 Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*zu~Æ*******+pH †ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\<,Ë hÆÈÈè0¼ èÛFþ¹±j£RKzk|\*zu~v*******ÍÎÒÜ¡žÒ`ÍM=@9Cjgç(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*| }–“,***Ež½¾Åzk|\*zu~®*******2­zÍÓ,6X,êY2fý(¤ùz ´þõ ~Ï·VÍ”àzk|J\XZ*p“–n'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Oÿ„ü­Ôj4Žñ—›f1×2*******JŽJZ[XŽ‹ž**zk|\*zu~Ž*******Ï%f…il ÖÍ©fz×à(¤ùz =`´þõ~Ï·VÍ”àzk|J\XZ*sp}m****'ž›1Z^V8w¾÷ÑK]Oÿ„ü­Ôj4Žñ—›f1×Ù=JÄzk|\*zu~®*******æNü¨-Ü$þ¾B­ðßÙö,(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n ,ó‘)Î\<,Ë hÆÈGŽ cîm¥¡`.GÚ³ ãGŽ cîm¥¡`.GÚ³ ã:*******JŽJZ\XŽ‹ž**zk|\*zu~¢*******úË]¢,Š£Ròn–7o2(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp }m****,ó‘)Î\<,Ë hÆÈj«Û^^Þ{³ÑJᥒBzTØ1òv–uÏɲˆ²¡~¥Qþ¬zk|\*zu~®*******ÖÊ»=Mû¶ßªVL$ v$ß(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n Èè0¼èÛFþ¹±j£RK¨ìÐËÄlÆ©Ñ\ÊS®í¨ìÐËÄlÆ©Ñ\ÊS®íJ*******JŽJZ]XŽ‹ž**zk|\*zu~Ê*******¦¤”àd=}A¯ œOL”Û(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m ****Èè0¼èÛFþ¹±j£RK[éº yzqL=@V! ž‹¥  ÷4°{…×ÍfïËZoÓ¸¦…§¯»¾qv[¨Žã;<`1Uß°y²ìÖÖú1ª™qßžUþgArÀ¬îzk|\*zu~®*******›¼sïÔ}¸Ur¾· ÝA`˜(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–n@õâ=}Ž*å€å½)÷Ë=@ëc=JX%4da{3JêÐëc=JX%4da{3JêÐj*******JŽJZ^XŽ‹ž**zk|\*zu~*******Ìï& `k¾ò”nnEk(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****@õâ=}Ž*å€å½)÷Ë=@‚çž|ßÔo‰ä4ß‘+DÌ{\=@¿;ó™T)±mª"™tÊÊN±ã•¨koÍø‚Þ;by þ3QRÁ}è ®0[ÓÙò1òÿW_ÌlÖAåf. Æo&/æÆ`YåDzÉ¥>–™¢6·2¹· U©(5P\V ã{D:FÄw#zì·xãÉ2· å™tN°Œ£I?.Z—zk|\*zu~®*******B},ú<0èsÓ/­ (¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*p“–nІ!6c»~–̾/BY[dΙ\Á B Â:“¡Å=@TdΙ\Á B Â:“¡Å=@Tª*******JŽJZ_XŽ‹ž**zk|\*zu~º+******íÓk ã¶3·Š ɦÄ}ãø(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*sp}m****І!6c»~–̾/BY[•‚EÆ¢38û37y«¥NŸC~ArIÈJ@uÍà€š’cÐË äÅq£ß2Ï‹€£~c‰uF©ÂHò7§êñîä'cVmˆ¨Q[7¹ IÚ´å£ç‰V'î.\að×±@—ŽExo†‰2Ä1bœógË#ϽNL,*Pœ­£´bˆø™ ªY]x¿›ÌÙ>36¯øð•=}"\Ûceí‡D¼ÅC-°œªá+Zžþñ¬îëAÄ»Jœf÷Ò3õHõWˆÿ§¢q¸¦< Œrø”¡ =J‰3Cß\ãÇX½¬‰n?ÐVÙnsáη¬ÕÈÞBùQe\©žþÁHÄÊu—œPظ}ñ¤!<Ò=J±™%õ¢ebÓ’µölß¾"3GÙZÉ‘2Èñ+p=M–˜íS1LͽP¨±’}âüzk|\*z u~Æ*******+pH†ß:û¼-Ô†Ûd(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*w‹“˜****2*******/***І!6c»~–̾/BY['ž›1Z^V8w¾÷ÑK]@õâ=}Ž*å€å½)÷Ë=@,ó‘)Î\ <,Ë hÆÈÈè0¼èÛFþ¹±j£RKzk|\*zu~Ž*******Ó-[è-=}>8ŒnÔÒ™l(¤ùz ´þõ~Ï·VÍ”àzk|J\XZ*mœ‹ž™œ*mœ‹žŽJŒ£Jš‹œ\—Ž–“˜J œ“™˜JZX\X* =yend size=3924 crc32=7EE3FDD6 nget-0.27.1/test/testdata/par2-01/_corrupt_pxxs_output/0002755000175000017500000000000010162001761023247 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/par2-01/_corrupt_pxxs_output/c d.vol01+02.par20000644000175000017500000000752407707012210025650 0ustar donutdonut00000000000000PAR2PKTL1t`•Á%•Mg‹"Ïb[i1þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicŽ2b#7q±XPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTL£¤¨²wt¨6£#Ö@=½þzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlictqæè“”›PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/par2-01/_corrupt_pxxs_output/c d.vol03+04.par20000644000175000017500000001343007707012210025645 0ustar donutdonut00000000000000PAR2PKTL~¬LѸò²Ž;ý¶›üþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlicÊuqhØÚ PAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKTL\m y@þ¯Ÿï«*?JLþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic²›ÕqŽßĪPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKTLOˆe^›X†® Tj©[ùþzÏPöŠÔËTÝ¥,£j¶PAR 2.0RecvSlic4Pq©^jãPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKT„ƒP£© .ÞÙÀ/<ÓþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescýtq04è,M”ͧÜ!3%ÕZÒƒª@ ôdÇmq<­%ÕZÒƒª@ ôdÇmq<­c d 01.datPAR2PKTd¥û<Ü[?Bv¬å£œžìdÜâ9ÄC{w6°‰á¹dÜâ9ÄC{w6°‰á¹c d 02.datPAR2PKTxС3ôx`y(ôÈDl EþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCñÉgÝÿ¤2¡v>œžìèÜ@±44´Q‰§ ·{hP*ï®ÈLlK¥Ÿˆ^ˆwôT{êÞ'ÝÔ‚PAR2PKT„¬ ï‘ãÑŒµ€,"úvLúµþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescèž¾’¾±Ô‡@y(!ñ~¦塚Bœå§2 )„Ã~¦塚Bœå§2 )„à c d 03.datPAR2PKT |zèj¶:…ör%"j×±þzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCèž¾’¾±Ô‡@y(!ñ1¿áOPG"Ö,÷ßtaé{väöÍ †Q[­£<Å¡0E©Ž|î[}…‘”GØL1~d¹ð6+µ†OˆÂ¬ê¬Ð€oGÛµ×t+Ôæ=H–Ú‚ÄPAR2PKT„q’IŪSŽ+H”³æ6nþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescé˸d»VÚ»“ÿÍ¡ÖÜêÁ9à.û :7Qí À¦ÜêÁ9à.û :7Qí À¦@c d 04.datPAR2PKTð¢Åüëî6A”ÈjDDfAÚþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCé˸d»VÚ»“ÿÍ¡ÖX½tæRµªÞE_ºò µgï¢Q2Ö•Éo*Üÿ‡C€ÙøoJ  $‡¹k~AE£ÎXê´8OvÔ 'ð(UÜ—S¾â„f1©¯õÈÈÕ-5¢B¬»<öœEÚü¼œ6/»PŸ{loÙëÝåx ßå+þ &2,ëôá¹ñQfôšMùPÂN¹Ÿö»õçoJ$†bUy0mPAR2PKT„SîоIçsê©êƒþzÏPöŠÔËTÝ¥,£j¶PAR 2.0FileDescí¦\÷ f9‘Tl¢”/1:¤oî2—vv˜iw›Ö*:¤oî2—vv˜iw›Ö*€c d 05.datPAR2PKTéAṌ `ñŸ|šS¹ÎþzÏPöŠÔËTÝ¥,£j¶PAR 2.0IFSCí¦\÷ f9‘Tl¢”/1kXœxÜ Ñ O{$uTØHž K£¶Vph9¦¡âº›Gyµ¥aVyT9Û_K˜ÛÈô ë}ÀÇĺý9,C^~'1 °Š»y½_,ýÄ2ò7Æ­ð‡mdNôE\_óš8rÉ=¡ùÙ¥ó“$"&rƒyfŠ8^Îoâ€/3óN•q¢¯ …ÎÆkçôøs2±9;Ã]’›s†r€·0tÔÇ‚ÄÁš‘ï r<ͨó ËçË-ñ^ëÕ}xGŽ|bíHÎjwáæà_ èÛµ2¹.“‚_D¦,¯DI·¤‚«ž´Ï';2tÔÞ—óš Kmôr&›nUŽSÇz÷î¨à‡ïo×ûËx;æ8©h‹ÌïBµ”Wø ܯ0ŸgžÇFãlnÃÚ)ç"£Þ“&~‡ëhS¸ÒPAR2PKTœF\µèäÑò’ª\±:þzÏPöŠÔËTÝ¥,£j¶PAR 2.0Mainí¦\÷ f9‘Tl¢”/1ýtq04è,M”ͧÜ!3é˸d»VÚ»“ÿÍ¡ÖñÉgÝÿ¤2¡v>œžìèž¾’¾±Ô‡@y(!ñPAR2PKTd©1¾bÞDª¨ïoBþzÏPöŠÔËTÝ¥,£j¶PAR 2.0CreatorCreated by par2cmdline version 0.2.nget-0.27.1/test/testdata/longheader/0002755000175000017500000000000010162001761017736 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/longheader/input/0002755000175000017500000000000010162001761021075 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/longheader/input/0000000644000175000017500000000220607764502216021334 0ustar donutdonut00000000000000From: foo Newsgroups: test Subject: Hi! Date: 7 Nov 2003 01:04:58 GMT Message-ID: Path: foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar Lines: 1 Hello. nget-0.27.1/test/testdata/longheader/_output/0002755000175000017500000000000010162001761021435 5ustar donutdonut00000000000000nget-0.27.1/test/testdata/longheader/_output/1068167098.2049718925.txt0000644000175000017500000000220607764502216024405 0ustar donutdonut00000000000000From: foo Newsgroups: test Subject: Hi! Date: 7 Nov 2003 01:04:58 GMT Message-ID: Path: foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar!baz!foo!bar Lines: 1 Hello. nget-0.27.1/test/dupe_file_test.cc0000644000175000017500000000434510056212771017332 0ustar donutdonut00000000000000#include "dupe_file.h" #include class dupe_file_Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(dupe_file_Test); CPPUNIT_TEST(testCreate); CPPUNIT_TEST(testDupe); CPPUNIT_TEST(testClear); CPPUNIT_TEST(testNonwordBoundry); CPPUNIT_TEST_SUITE_END(); protected: dupe_file_checker *dupechecker; public: void setUp(void) { dupechecker = new dupe_file_checker(); } void tearDown(void) { delete dupechecker; } void testCreate(void) { CPPUNIT_ASSERT(dupechecker->empty()); } void testDupe(void) { dupechecker->add("test.foo", 500); CPPUNIT_ASSERT(!dupechecker->empty()); CPPUNIT_ASSERT(dupechecker->checkhavefile("boo test.foo (1/1)", "", 600)); CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo est.foo (1/1)", "", 600)); CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo testxfoo (1/1)", "", 600));//is . escaped? CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo atest.foo (1/1)", "", 600));//word boundry CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo test.foob (1/1)", "", 600));//word boundry CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo test.foo (1/1)", "", 400));//too small CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo test.foo (1/1)", "", 1100));//too big CPPUNIT_ASSERT(dupechecker->checkhavefile("boo \"test.foo\" (1/1)", "", 600));//quoted CPPUNIT_ASSERT(dupechecker->checkhavefile("test.foo", "", 600));//no chars before/after } void testClear(void) { dupechecker->add("test.foo", 500); dupechecker->clear(); CPPUNIT_ASSERT(dupechecker->empty()); CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo test.foo (1/1)", "", 600)); } void testNonwordBoundry(void) { dupechecker->add("[bar]test.foo", 500); CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo test.foo (1/1)", "", 600)); CPPUNIT_ASSERT(!dupechecker->checkhavefile("boo btest.foo (1/1)", "", 600));//is [bar] escaped? CPPUNIT_ASSERT(dupechecker->checkhavefile("boo [bar]test.foo (1/1)", "", 600)); CPPUNIT_ASSERT(dupechecker->checkhavefile("boo \"[bar]test.foo\" (1/1)", "", 600)); } }; CPPUNIT_TEST_SUITE_REGISTRATION( dupe_file_Test ); nget-0.27.1/test/test_nget.py0000755000175000017500000052362210161662625016411 0ustar donutdonut00000000000000#!/usr/bin/env python # # test_nget.py - test of nget # Copyright (C) 2002-2004 Matthew Mueller # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from __future__ import nested_scopes import os, sys, unittest, glob, filecmp, re, time, errno import StringIO import nntpd, util UpgradeUULibMessage = "*** Upgrade uulib. See http://nget.sf.net/patches/ *** " #update with version number when fixed version gets released #allow nget executable to be tested to be overriden with TEST_NGET env var. ngetexe = os.environ.get('TEST_NGET',os.path.join(os.pardir, 'nget')) if os.sep in ngetexe or (os.altsep and os.altsep in ngetexe): ngetexe = os.path.abspath(ngetexe) zerofile_fn_re = re.compile(r'(\d+)\.(\d+)\.txt$') broken_system_return = os.system("NTDOEUNTBKFOOOBAR")==0 def textcmp(expected, decoded, mbox=0): if not hasattr(expected, "read"): expected=open(expected,'rb') if not hasattr(decoded, "read"): decoded=open(decoded,'rb') el=expected.read().splitlines() dl=decoded.read().splitlines() if len(el)!=len(dl): print "textcmp: length mismatch",len(el),len(dl) return 0 for e,d in zip(el,dl): x = re.match(r'^\[(\w+) (.+?)(\.\d+\.\d+)?\]$',d) if x: #text files can have info about what decoded files were in them, and that info can change if the file is a dupe.. if e != '['+x.group(1)+' '+x.group(2)+']': print "textcmp: decode mismatch",e,d return 0 elif mbox and e.startswith("From nget"): if not re.match("^From nget-[0-9.]+ \w\w\w \w\w\w [ 0-9][0-9] [0-9:]{8} [0-9]{4}$", d): print "textcmp: From mismatch",e,d return 0 else: if e != d: print "textcmp: normal mismatch",e,d return 0 return 1 class TestTextcmp(unittest.TestCase): def test_eq(self): self.failUnless(textcmp(StringIO.StringIO("foo\nbar"), StringIO.StringIO("foo\r\nbar"))) def test_eq_decodeinfo(self): self.failUnless(textcmp(StringIO.StringIO("foo\n[UUdata foo.txt]\n"), StringIO.StringIO("foo\r\n[UUdata foo.txt.19873.987634]\n"))) def test_eq_mbox_From(self): self.failUnless(textcmp(StringIO.StringIO("From nget-foo bar"), StringIO.StringIO("From nget-0.21 Sun Sep 8 20:19:53 2002"), mbox=1)) def test_ne(self): self.failIf(textcmp(StringIO.StringIO("b"), StringIO.StringIO("a"))) def test_ne_diff_len(self): self.failIf(textcmp(StringIO.StringIO("a\nb"), StringIO.StringIO("a"))) class TestCase(unittest.TestCase): def vfailIf(self, expr, msg=None): "Include the expr in the error message" if expr: if msg: msg = '(%r) %s'%(expr, msg) else: msg = '(%r)'%(expr,) raise self.failureException, msg def vfailIf_getoutput(self, expr, msg=None): status,output = expr print output self.vfailIf(status, msg) return output def vfailUnlessExitstatus_getoutput(self, expr, expectedstatus, msg=None): status,output = expr print output self.vfailUnlessExitstatus(status, expectedstatus, msg) return output def vfailUnlessExitstatus(self, first, second, msg=None): # os.system on windows 95/98 seems to always return 0.. so just skip testing the exit status in that case. blah. if not broken_system_return: self.vfailUnlessEqual(first, second, msg) def vfailUnlessEqual(self, first, second, msg=None): "Include the exprs in the error message even if msg is given" if first != second: if msg: msg = '(%r != %r) %s'%(first, second, msg) else: msg = '(%r != %r)'%(first, second) raise self.failureException, msg class DecodeTest_base: def addarticle_toserver(self, testnum, dirname, aname, server, groups=["test"], **kw): article = nntpd.FileArticle(open(os.path.join("testdata",testnum,dirname,aname), 'rb')) server.addarticle(groups, article, **kw) return article def addarticles_toserver(self, testnum, dirname, server, fname="*", groups=["test"]): for fn in glob.glob(os.path.join("testdata",testnum,dirname,fname)): if fn.endswith("~") or not os.path.isfile(fn): #ignore backup files and non-files continue server.addarticle(groups, nntpd.FileArticle(open(fn, 'rb'))) def rmarticle_fromserver(self, testnum, dirname, aname, server): article = nntpd.FileArticle(open(os.path.join("testdata",testnum,dirname,aname), 'rb')) server.rmarticle(article.mid) def rmarticles_fromserver(self, testnum, dirname, server, fname="*"): for fn in glob.glob(os.path.join("testdata",testnum,dirname,fname)): if fn.endswith("~") or not os.path.isfile(fn): #ignore backup files and non-files continue article = nntpd.FileArticle(open(fn, 'rb')) server.rmarticle(article.mid) def addarticles(self, testnum, dirname, servers=None, **kw): if not servers: servers = self.servers.servers for server in servers: self.addarticles_toserver(testnum, dirname, server, **kw) def rmarticles(self, testnum, dirname, servers=None, **kw): if not servers: servers = self.servers.servers for server in servers: self.rmarticles_fromserver(testnum, dirname, server, **kw) def verifyoutput(self, testnums, tmpdir=None, output=None, enctype=None): if tmpdir is None: tmpdir = self.nget.tmpdir ok = [] if type(testnums)==type(""): testnums=[testnums] outputs=[] num_output_txt=0 num_output_bin=0 if type(testnums)==type({}): for testnum,expected in testnums.items(): for n in expected: parts = n.split('/') if len(parts)==1: outputs.append(os.path.join("testdata",testnum,"_output",n)) elif len(parts)==2: outputs.append(os.path.join("testdata",testnum,parts[0],parts[1])) else: for testnum in testnums: parts = testnum.split('/',2) if len(parts)==3: outputs.extend(glob.glob(os.path.join("testdata",parts[0],parts[1],parts[2]))) elif len(parts)==2: outputs.extend(glob.glob(os.path.join("testdata",parts[0],parts[1],"*"))) else: outputs.extend(glob.glob(os.path.join("testdata",testnum,"_output","*"))) for fn in outputs: assert os.path.exists(fn), 'testdata %s not found'%fn if fn.endswith("~") or not os.path.isfile(fn): #ignore backup files and non-files continue tail = os.path.split(fn)[1] r = zerofile_fn_re.match(tail) if r: dfnglob = os.path.join(tmpdir, r.group(1)+'.*.txt') g = glob.glob(dfnglob) self.failIf(len(g) == 0, "decoded zero file %s does not exist"%dfnglob) self.failIf(len(g) != 1, "decoded zero file %s matches multiple"%dfnglob) dfn = g[0] num_output_txt = num_output_txt + 1 else: dfnglob = os.path.join(tmpdir, tail+'.*.*') gfns = glob.glob(dfnglob) dfn = os.path.join(tmpdir, tail) num_output_bin = num_output_bin + 1 self.failUnless(os.path.exists(dfn), "decoded file %s does not exist"%dfn) self.failUnless(os.path.isfile(dfn), "decoded file %s is not a file"%dfn) if r: self.failUnless(textcmp(fn, dfn), "decoded file %s differs from %s"%(dfn, fn)) elif tail.endswith(".mbox"): self.failUnless(textcmp(fn, dfn, mbox=1), "decoded mbox %s differs from %s"%(dfn, fn)) elif tail.endswith(".mbox.gz"): import gzip self.failUnless(textcmp(gzip.open(fn), gzip.open(dfn), mbox=1), "decoded mbox %s differs from %s"%(dfn, fn)) else: if gfns: goodgfn=0 for dfn in [dfn]+gfns: if filecmp.cmp(fn, dfn, shallow=0): goodgfn=1 break self.failUnless(goodgfn, "no decoded files match %s"%(fn)) else: self.failUnless(filecmp.cmp(fn, dfn, shallow=0), "decoded file %s differs from %s"%(dfn, fn)) ok.append(os.path.split(dfn)[1]) extra = [fn for fn in os.listdir(tmpdir) if fn not in ok] self.failIf(extra, "extra files decoded: "+`extra`) if output: statline = output.splitlines()[-1].strip() if num_output_txt: self.failIf(statline.find(' %i plaintext'%num_output_txt)<0) else: self.failIf(statline.find(' plaintext')>=0) if enctype: if num_output_bin: self.failIf(statline.find(' %i %s'%(num_output_bin,enctype))<0) else: self.failIf(statline.find(' %s'%enctype)>=0) class DecodeTestCase(TestCase, DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() def tearDown(self): self.servers.stop() self.nget.clean_all() def do_test(self, testnum, dirname, enctype, msg=None): self.addarticles(testnum, dirname) output = self.vfailIf_getoutput(self.nget.run_getoutput("-g test -r ."), msg) self.verifyoutput(testnum, output=output, enctype=enctype) def do_test_decodeerror(self): self.vfailUnlessExitstatus(self.nget.run("-g test -r ."), 1, "nget process did not detect decode error") self.vfailUnlessExitstatus(self.nget.run("-dF -G test -r ."), 1, "nget process did not detect decode error on 2nd run (midinfo problem?)") self.vfailUnlessExitstatus(self.nget.run("-G test -r ."), 1, "nget process did not detect decode error on 3rd run (dupecheck problem? corrupt file saved with real name?)") def get_auto_args(self): #use some magic so we don't have to type out everything twice import inspect frame = inspect.currentframe().f_back.f_back foo, testnum, testname = frame.f_code.co_name.split('_',2) if testname.find('yenc')>=0: enctype = 'yenc' elif testname.find('uue')>=0: enctype = 'uu' else: enctype = None return testnum, testname, enctype def do_test_auto(self, **kw): self.do_test(*self.get_auto_args(), **kw) def do_test_auto_decodeerror(self): testnum, testname, enctype = self.get_auto_args() self.addarticles(testnum, testname) self.do_test_decodeerror() def test_0001_yenc_single(self): self.do_test_auto() def test_0001_yenc_single_rawtabs(self): self.do_test_auto() def test_0001_uuencode_single(self): self.do_test_auto() def test_0001_uuencode_single_quoted(self): self.do_test_auto() def test_0001_uuenview_uue_mime_single(self): self.do_test_auto() def test_0001_uuencode_multi_uudumbness(self): self.do_test_auto() def test_0001_yenc_multi(self): self.do_test_auto() def test_0001_yenc_single_size_error(self): self.do_test_auto_decodeerror() def test_0001_yenc_multi_size_error(self): self.do_test_auto_decodeerror() def test_0001_yenc_single_crc32_error(self): self.do_test_auto_decodeerror() def test_0001_yenc_multi_crc32_error(self): self.do_test_auto_decodeerror() def test_0001_yenc_multi_pcrc32_error(self): self.do_test_auto_decodeerror() def test_0002_yenc_multi(self): self.do_test_auto() def test_0002_yenc_multi3(self): self.do_test_auto() def test_0002_uuencode_multi(self): self.do_test_auto() def test_0002_uuencode_multi3(self): self.do_test_auto() def test_0002_uuencode_noencodeddata_article_error(self): self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0]) article = self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0]) wrongarticle = nntpd.FileArticle(open(os.path.join("testdata",'0004','input','001'), 'rb')) article.text = wrongarticle.text self.do_test_decodeerror() def test_0002_uuenview_uue_mime_multi(self): self.do_test_auto() def test_0003_newspost_uue_0(self): self.do_test_auto() def test_0004_input(self): self.do_test_auto() def test_0005_input(self): self.do_test_auto() def test_mbox01(self): self.addarticles("mbox01", "input") self.vfailIf(self.nget.run("--text=mbox -g test -r .")) self.verifyoutput("mbox01") def test_mbox01_gz(self): self.addarticles("mbox01", "input") self.vfailIf(self.nget.run("--text=mbox:nget.mbox.gz -g test -r .")) self.verifyoutput("mbox01/_gz_output") def test_mbox01_abspath(self): tmp2dir = os.path.join(self.nget.rcdir, 'tmp2') os.mkdir(tmp2dir) self.addarticles('0001', 'uuencode_single') self.addarticles("mbox01", "input") self.vfailIf(self.nget.run("--text=mbox:%s -g test -r ."%(os.path.join(tmp2dir,'nget.mbox')))) self.verifyoutput(['0001']) self.verifyoutput("mbox01", tmpdir=tmp2dir) def test_mergesa01_input(self): self.do_test_auto() def test_textnotuu_input(self): self.do_test_auto(msg="your uulib likes to misidentify text as uudata. *** See http://nget.sf.net/patches/ ***") def test_longheader_input(self): self.do_test_auto(msg="your uulib dislikes long headers. *** See http://nget.sf.net/patches/ ***") def test_longheader254_input(self): self.do_test_auto(msg="your uulib dislikes headers of length 254. Upgrade to 0.5.20") def test_article_expiry(self): article = self.addarticle_toserver('0001', 'uuencode_single', 'testfile.001', self.servers.servers[0]) self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test")) self.servers.servers[0].rmarticle(article.mid) self.vfailUnlessExitstatus(self.nget.run("-G test -r ."), 8, "nget process did not detect retrieve error") self.verifyoutput('0002') #should have gotten the articles the server still has. def test_article_expiry_incomplete_status(self): #test that -g flushing remembers to update the incomplete status of the file article = self.addarticle_toserver('0002', 'uuencode_multi', '001', self.servers.servers[0], anum=1) self.addarticle_toserver('0002', 'uuencode_multi', '002', self.servers.servers[0], anum=2) self.vfailIf(self.nget.run("-g test")) self.servers.servers[0].rmarticle(article.mid) self.vfailIf(self.nget.run('-g test -r .'))#should notice the article expired and not try to get anything self.vfailUnlessEqual(self.servers.servers[0].count("article"), 0) def test_0001_yenc_single_withtext(self): self.addarticles("0001", "yenc_single_withtext") output = self.vfailIf_getoutput(self.nget.run_getoutput("-g test -r .")) self.verifyoutput(['0001','0001/_yenc_single_withtext_output'], output=output, enctype='yenc') def test_save_binary_info(self): self.addarticles("0001", "yenc_multi") self.nget.writerc(self.servers.servers, options={'save_binary_info':1}) self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput(['0001','0001/_yenc_multi_save_binary_info_output']) def test_nosavetext_on_decodeerror(self): self.addarticles("0001", "yenc_single_crc32_error") self.vfailUnlessExitstatus(self.nget.run("--save-binary-info=yes -g test -r ."), 1, "nget process did not detect decode error") output = os.listdir(self.nget.tmpdir) output = filter(lambda s: not s.startswith('testfile.txt'), output) self.failUnless(len(output)==1, "extra output: %s"%output) self.failUnless(output[0].endswith(".-01"), "wrong output: %s"%output) def test_ignore_text(self): self.addarticles('0003', 'newspost_uue_0') self.vfailIf(self.nget.run("-g test --text=ignore -r .")) self.verifyoutput(['0003/_output/testfile.txt']) def test_ignore_text_cfg(self): self.addarticles('0003', 'newspost_uue_0') self.nget.writerc(self.servers.servers, options={'text':'ignore'}) self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput(['0003/_output/testfile.txt']) def test_uuencode_incomplete1(self): self.addarticles('0002', 'uuencode_multi3', fname='00[12]') self.addarticles('0002', 'par2', fname='par') self.addarticles('0002', 'par2', fname='par4') self.vfailUnlessExitstatus(self.nget.run("-g test -i -r ."), 1) def test_uuencode_incomplete2(self): self.addarticles('0002', 'uuencode_multi3', fname='00[13]') self.addarticles('0002', 'par2', fname='par') self.addarticles('0002', 'par2', fname='par4') self.vfailUnlessExitstatus(self.nget.run("-g test -i -r ."), 1, UpgradeUULibMessage) def test_uuencode_incomplete3(self): self.addarticles('0002', 'uuencode_multi3', fname='00[23]') self.addarticles('0002', 'par2', fname='par') self.addarticles('0002', 'par2', fname='par4') self.vfailUnlessExitstatus(self.nget.run("-g test -i -r ."), 1) def test_yenc_incomplete1(self): self.addarticles('0002', 'yenc_multi3', fname='00[12]') self.addarticles('0002', 'par2', fname='par') self.addarticles('0002', 'par2', fname='par4') self.vfailUnlessExitstatus(self.nget.run("-g test -i -r ."), 1) def test_yenc_incomplete2(self): self.addarticles('0002', 'yenc_multi3', fname='00[13]') self.addarticles('0002', 'par2', fname='par') self.addarticles('0002', 'par2', fname='par4') self.vfailUnlessExitstatus(self.nget.run("-g test -i -r ."), 1, UpgradeUULibMessage) def test_yenc_incomplete3(self): self.addarticles('0002', 'yenc_multi3', fname='00[23]') self.addarticles('0002', 'par2', fname='par') self.addarticles('0002', 'par2', fname='par4') self.vfailUnlessExitstatus(self.nget.run("-g test -i -r ."), 1) class RetrieveTest_base(DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.addarticles('0005', 'input') self.addarticles('0002', 'uuencode_multi3') self.addarticles('0001', 'uuencode_single') self.servers.start() def tearDown(self): self.servers.stop() self.nget.clean_all() def test_r(self): self.vfailIf(self.nget_run('-g test -r joystick')) self.verifyoutput('0002') def test_r_quote(self): self.addarticles('0001', 'yenc_single') self.vfailIf(self.nget_run('-g test -r \'"\'')) self.verifyoutput('0001') def test_r_case(self): self.vfailIf(self.nget_run('-g test -c -r jOyStIcK')) self.verifyoutput([]) def test_r_case_cfg(self): self.nget.writerc(self.servers.servers, options={'case':1}) self.vfailIf(self.nget_run('-g test -r jOyStIcK')) self.verifyoutput([]) def test_r_nocase(self): self.vfailIf(self.nget_run('-g test -C -r jOyStIcK')) self.verifyoutput('0002') def test_r_nocase_cfg(self): self.nget.writerc(self.servers.servers, options={'case':0}) self.vfailIf(self.nget_run('-g test -r jOyStIcK')) self.verifyoutput('0002') def test_r_incomplete(self): self.rmarticles('0002', 'uuencode_multi3', fname='003') self.vfailUnlessExitstatus(self.nget_run("-g test -i -r joys"), 1) def test_r_incomplete_cfg(self): self.nget.writerc(self.servers.servers, options={'complete':0}) self.rmarticles('0002', 'uuencode_multi3', fname='003') self.vfailUnlessExitstatus(self.nget_run("-g test -r joys"), 1) def test_r_incomplete_cfg2(self): self.nget.writerc(self.servers.servers, options={'complete':1}) self.rmarticles('0002', 'uuencode_multi3', fname='003') self.vfailIf(self.nget_run("-g test -r joys")) self.verifyoutput([]) def test_multi_r_samepath(self): self.vfailIf(self.nget_run('-g test -r joystick -r foo')) self.verifyoutput(['0001','0002']) def test_multi_r_trysame(self): d1, d2 = os.path.join(self.nget.tmpdir,'d1'), os.path.join(self.nget.tmpdir,'d2') map(os.mkdir, (d1, d2)) self.vfailIf(self.nget_run('-p %s -g test -r joystick -r foo -p %s -r joystick -r foo'%(d1, d2))) self.verifyoutput(['0001','0002'], d1) self.verifyoutput([], d2) def test_multi_r_trydiff(self): d1, d2 = os.path.join(self.nget.tmpdir,'d1'), os.path.join(self.nget.tmpdir,'d2') map(os.mkdir, (d1, d2)) self.vfailIf(self.nget_run('-p %s -g test -r joystick -p %s -r joystick -r foo'%(d1, d2))) self.verifyoutput(['0002'], d1) self.verifyoutput(['0001'], d2) def test_r_l_toohigh(self): self.vfailIf(self.nget_run('-g test -l 434 -r .')) self.verifyoutput([]) def test_r_l_toohigh_cfg(self): self.nget.writerc(self.servers.servers, options={'limit':434}) self.vfailIf(self.nget_run('-g test -r .')) self.verifyoutput([]) def test_r_l(self): self.vfailIf(self.nget_run('-g test -l 433 -r .')) self.verifyoutput('0002') def test_r_l_cfg(self): self.nget.writerc(self.servers.servers, options={'limit':433}) self.vfailIf(self.nget_run('-g test -r .')) self.verifyoutput('0002') def test_r_L_toolow(self): self.vfailIf(self.nget_run('-g test -L 15 -r .')) self.verifyoutput([]) def test_r_L(self): self.vfailIf(self.nget_run('-g test -L 16 -r .')) self.verifyoutput('0001') def test_r_l_L(self): self.vfailIf(self.nget_run('-g test -l 20 -L 200 -r .')) self.verifyoutput('0005') def test_r_K_samesubject(self): self.addarticles('par01', 'samesubject_input') self.vfailIf(self.nget_run('-g test -K -r posting.data.files')) self.vfailIf(self.nget_run('-G test -N -r posting.data.files')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat']}) def test_dupef(self): self.vfailIf(self.nget_run('-g test -r foo')) self.verifyoutput('0001') self.vfailIf(self.nget_run('-G test -U -D -r foo')) #remove from midinfo so that we can test if the file dupe check catches it self.vfailIf(self.nget_run('-G test -r foo')) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_dupef_D(self): self.vfailIf(self.nget_run('-g test -r foo')) self.verifyoutput('0001') self.vfailIf(self.nget_run('-G test -U -D -r foo')) self.vfailIf(self.nget_run('-G test -D -r foo')) self.verifyoutput('0001') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 2) def test_dupef_D_cfg(self): self.vfailIf(self.nget_run('-g test -r foo')) self.verifyoutput('0001') self.nget.writerc(self.servers.servers, options={'dupefilecheck':0}) self.vfailIf(self.nget_run('-G test -U -r foo')) self.vfailIf(self.nget_run('-G test -r foo')) self.verifyoutput('0001') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 2) def test_dupef_onthefly(self): self.addarticles('0001', 'yenc_single') self.vfailIf(self.nget_run('-g test -r testfile.txt')) self.verifyoutput('0001') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_dupef_onthefly_dF(self): self.addarticles('0001', 'yenc_single') self.vfailIf(self.nget_run('-g test -dF -r testfile.txt')) self.verifyoutput('0001') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 2) def test_dupei(self): self.vfailIf(self.nget_run('-g test -r .')) self.verifyoutput(['0002','0001','0005']) self.nget.clean_tmp() self.vfailIf(self.nget_run('-g test -r .')) self.verifyoutput([]) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 5) def test_dupei_D(self): self.vfailIf(self.nget_run('-g test -r .')) self.verifyoutput(['0002','0001','0005']) self.nget.clean_tmp() self.vfailIf(self.nget_run('-g test -D -r .')) self.verifyoutput(['0002','0001','0005']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 10) def test_dupei_D_cfg(self): self.vfailIf(self.nget_run('-g test -r .')) self.verifyoutput(['0002','0001','0005']) self.nget.clean_tmp() self.nget.writerc(self.servers.servers, options={'dupeidcheck':0}) self.vfailIf(self.nget_run('-g test -r .')) self.verifyoutput(['0002','0001','0005']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 10) def test_dupefilemark(self): self.vfailIf(self.nget_run('-g test -r foo')) self.verifyoutput('0001') self.vfailIf(self.nget_run('-G test -U -D -r foo')) self.vfailIf(self.nget_run('-G test -dm -r foo')) self.nget.clean_tmp() self.vfailIf(self.nget_run('-G test -r foo')) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_dupefilemark_cfg(self): self.vfailIf(self.nget_run('-g test -r foo')) self.verifyoutput('0001') self.vfailIf(self.nget_run('-G test -U -D -r foo')) self.nget.writerc(self.servers.servers, options={'dupefilemark':1}) self.vfailIf(self.nget_run('-G test -r foo')) self.nget.clean_tmp() self.vfailIf(self.nget_run('-G test -r foo')) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_dupedecode(self): open(os.path.join(self.nget.tmpdir,"testfile.txt"), "w").close() output = self.vfailIf_getoutput(self.nget_run_getoutput('-g test -r foo')) self.verifyoutput(['0001','0001/_empty_output'],output=output) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) self.failUnless(output.count("WARNINGS: 1 dupe")==1) output = self.vfailIf_getoutput(self.nget_run_getoutput('-G test -D -r foo')) self.verifyoutput(['0001','0001/_empty_output'],output=output) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 2) self.failUnless(re.search("OK:.*1 dupe",output)) self.failIf(output.count("WARNINGS")) def test_dupedecode_errfile(self): self.addarticles('0001', 'yenc_single_crc32_error') output = self.vfailUnlessExitstatus_getoutput(self.nget_run_getoutput('-g test -r "yenc.*testfile"'), 1) outfiles=glob.glob(os.path.join(self.nget.tmpdir,'testfile*')) self.vfailUnlessEqual(len(outfiles), 1, outfiles) output = self.vfailUnlessExitstatus_getoutput(self.nget_run_getoutput('-G test -D -r "yenc.*testfile"'), 1) outfiles=glob.glob(os.path.join(self.nget.tmpdir,'testfile*')) self.vfailUnlessEqual(len(outfiles), 1, outfiles) self.failUnless(re.search("OK:.*1 dupe",output)) self.failIf(output.count("WARNINGS")) def test_dupedecode_errfile2(self): open(os.path.join(self.nget.tmpdir,"testfile.txt"), "w").close() self.addarticles('0001', 'yenc_single_crc32_error') output = self.vfailUnlessExitstatus_getoutput(self.nget_run_getoutput('-g test -r "yenc.*testfile"'), 1) outfiles=glob.glob(os.path.join(self.nget.tmpdir,'testfile*')) self.vfailUnlessEqual(len(outfiles), 2, outfiles) output = self.vfailUnlessExitstatus_getoutput(self.nget_run_getoutput('-G test -D -r "yenc.*testfile"'), 1) outfiles=glob.glob(os.path.join(self.nget.tmpdir,'testfile*')) self.vfailUnlessEqual(len(outfiles), 2, outfiles) self.failUnless(re.search("OK:.*1 dupe",output)) self.failIf(output.count("WARNINGS")) def test_available_overrides_group(self): self.vfailIf(self.nget_run('-g test -A -T -r .')) self.verifyoutput([]) def test_group_overrides_available(self): self.vfailIf(self.nget_run('-a -g test -r joy')) self.verifyoutput(['0002']) def test_group_noname(self): self.addarticles('0002', 'uuencode_multi3', groups=[""]) self.vfailIf(self.nget_run('-g "" -ir .')) self.verifyoutput(['0002']) def test_galias(self): self.nget.writerc(self.servers.servers, extratail="{galias\nfoobar=test\n}\n") self.vfailIf(self.nget_run('-g foobar -r foo')) self.verifyoutput(['0001']) def test_galias_metagroup(self): self.addarticles('0004', 'input', groups=["test2"]) self.nget.writerc(self.servers.servers, extratail="{galias\nfoobar=test,test2\n}\n") self.vfailIf(self.nget_run('-g foobar -r foo -r bone')) self.verifyoutput(['0001','0004']) def test_decode_overrides_k_and_K(self): self.vfailIf(self.nget_run('-k -g test --decode -r joy')) self.vfailIf(self.nget_run('-K -g test --decode -r foo')) self.verifyoutput(['0002','0001']) def test_dupepath(self): self.vfailIf(self.nget_run('-g test -r joy')) self.verifyoutput(['0002']) tmp2dir = os.path.join(self.nget.rcdir, 'tmp2') os.mkdir(tmp2dir) self.vfailIf(self.nget_run('-dI -G test -p %s --dupepath %s -r .'%(tmp2dir,self.nget.tmpdir))) self.verifyoutput(['0001','0005'],tmpdir=tmp2dir) def test_path_clears_dupepaths(self): self.vfailIf(self.nget_run('-g test -r joy')) self.verifyoutput(['0002']) tmp2dir = os.path.join(self.nget.rcdir, 'tmp2') os.mkdir(tmp2dir) self.vfailIf(self.nget_run('-dI -G test --dupepath %s -p %s -r .'%(self.nget.tmpdir, tmp2dir))) self.verifyoutput(['0001','0002','0005'],tmpdir=tmp2dir) def test_badskip_retrievebadregex(self): self.vfailUnlessExitstatus(self.nget_run('-g test -r "*" -r joy'), 4) self.verifyoutput(['0002']) def test_noautoparhandling(self): self.addarticles('par01', 'input') self.vfailIf(self.nget_run('-g test --no-autopar -r par.test')) self.verifyoutput('par01') def test_noautoparhandling_cfg(self): self.nget.writerc(self.servers.servers, options={'autopar':0}) self.addarticles('par01', 'input') self.vfailIf(self.nget_run('-g test -r par.test')) self.verifyoutput('par01') def test_autoparhandling_nodecode(self): self.addarticles('par01', 'input') self.vfailIf(self.nget_run('--no-autopar -g test -r a.b.par')) self.vfailIf(self.nget_run('-G test -K -r par.test')) def test_autoparhandling_mark_unmark(self): self.addarticles('par01', 'input') self.vfailIf(self.nget_run('-g test')) self.vfailIf(self.nget_run('-G test -Mr .')) self.vfailIf(self.nget_run('-G test --no-autopar -r .')) self.verifyoutput([]) self.vfailIf(self.nget_run('-G test -Ur .')) self.vfailIf(self.nget_run('-G test --no-autopar -r a.b.par')) self.verifyoutput({'par01':['a b.par']}) def test_autoparhandling(self): self.addarticles('par01', 'input') self.vfailIf(self.nget_run('-g test -r par.test')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par']}) def test_autoparhandling_arg_overrides_cfg(self): self.nget.writerc(self.servers.servers, options={'autopar':0}) self.addarticles('par01', 'input') self.vfailIf(self.nget_run('-g test --autopar -r par.test')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par']}) def test_autoparhandling_existingpar(self): self.addarticles('par01', 'input') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.test.*a b.par"'), 2) self.vfailIf(self.nget_run('-G test -r par.test')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 6) def test_autoparhandling_existingdat(self): self.addarticles('par01', 'input') self.vfailIf(self.nget_run('-g test -r "par.test.*0..dat"')) self.vfailIf(self.nget_run('-G test -r par.test')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 6) def test_autoparhandling_existingpxx(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','par',self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.test.*a b.p01"'), 2) self.vfailIf(self.nget_run('-G test -r par.test')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.p01']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 6) def test_autoparhandling_missingfile(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','dat4',self.servers.servers[0]) self.vfailIf(self.nget_run('-g test -r par.test')) self.verifyoutput({'par01':['01.dat','03.dat','05.dat','a b.par','a b.p01','a b.p02']}) def test_autoparhandling_missingfile_nofilematches(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','dat4',self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.test.*\.[dp]a[tr]"'), 2) self.vfailIf(self.nget_run('-g test -r par.test')) self.verifyoutput({'par01':['01.dat','03.dat','05.dat','a b.par','a b.p01','a b.p02']}) def test_autoparhandling_incomplete_pessimistic(self): self.addarticle_toserver('par01', 'input', 'dat2', self.servers.servers[0]) self.addarticle_toserver('par01', 'input', 'par', self.servers.servers[0]) self.addarticle_toserver('par01', 'input', 'par2', self.servers.servers[0]) self.addarticle_toserver('par01', 'input', 'par3', self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r par.test'), 2) self.verifyoutput({'par01':['02.dat','a b.par','a b.p02','a b.p03']}) def test_autoparhandling_incomplete_optimistic(self): self.nget.writerc(self.servers.servers, options={'autopar_optimistic':1}) self.addarticle_toserver('par01', 'input', 'dat2', self.servers.servers[0]) self.addarticle_toserver('par01', 'input', 'par', self.servers.servers[0]) self.addarticle_toserver('par01', 'input', 'par2', self.servers.servers[0]) self.addarticle_toserver('par01', 'input', 'par3', self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r par.test'), 2) self.verifyoutput({'par01':['02.dat','a b.par']}) def test_autoparhandling_corruptfile(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','dat4',self.servers.servers[0]) self.addarticles('par01', 'corrupt_input') self.vfailIf(self.nget_run('-g test -r par.test')) self.verifyoutput({'par01':['01.dat','_corrupt_output/02.dat','03.dat','_corrupt_output/04.dat','05.dat','a b.par','a b.p01','a b.p02']}) def test_autoparhandling_corruptfile_correctdupe(self): self.addarticles('par01', 'corrupt_input') self.vfailIf(self.nget_run('-g test -r par.test')) self.addarticles('par01', 'input') self.vfailIf(self.nget_run('-dF -g test -r par.test')) self.verifyoutput({'par01':['01.dat','02.dat','_corrupt_output/02.dat','03.dat','04.dat','_corrupt_output/04.dat','05.dat','a b.par']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 8) def test_autoparhandling_corruptpxx(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','dat4',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','par1',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','par3',self.servers.servers[0]) self.addarticles('par01', 'corrupt_pxxs') self.vfailIf(self.nget_run('-g test -r par.test')) self.verifyoutput({'par01':['01.dat','03.dat','05.dat','a b.par','_corrupt_pxxs_output/a b.p01','_corrupt_pxxs_output/a b.p03','a b.p02','a b.p04']}) def test_autoparhandling_corruptpxxonly(self): self.addarticles('par01', 'input',fname='dat1') self.addarticles('par01', 'corrupt_pxxs') self.vfailUnlessExitstatus(self.nget_run('-g test -r par.test'), 2) self.verifyoutput({'par01':['01.dat','_corrupt_pxxs_output/a b.p01','_corrupt_pxxs_output/a b.p03']}) def test_autoparhandling_notpxx_long(self): self.addarticles('par01', 'input',fname='dat1') self.addarticles('par01', 'notpxxs',fname='par1') self.vfailUnlessExitstatus(self.nget_run('-g test -r par.test'), 2) self.verifyoutput({'par01':['01.dat','_notpxxs_output/a b.p01']}) def test_autoparhandling_notpxx_short(self): self.addarticles('par01', 'input',fname='dat1') self.addarticles('par01', 'notpxxs',fname='par2') self.vfailUnlessExitstatus(self.nget_run('-g test -r par.test'), 2) self.verifyoutput({'par01':['01.dat','_notpxxs_output/a b.p02']}) def test_autoparhandling_notpxxandrealpar_short(self): self.addarticles('par01', 'notpxxs',fname='par2') self.vfailUnlessExitstatus(self.nget_run('-g test -r par.test'), 2) self.addarticles('par01', 'input') self.vfailIf(self.nget_run('-g test -r par.test')) self.verifyoutput({'par01':['01.dat', '02.dat', '03.dat', '04.dat', '05.dat', 'a b.par', '_notpxxs_output/a b.p02']}) def test_autoparhandling_notpxxanddifferingpar_short(self): self.addarticles('par01', 'notpxxs',fname='par2') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.*test"'), 2) self.addarticles('par02', 'input') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.*test"'), 2) self.verifyoutput({'par01':['_notpxxs_output/a b.p02'], 'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','p2.par']}) def test_autoparhandling_incompletepxx(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','par1',self.servers.servers[0]) self.addarticles('par01', 'multipart', fname='par1-1') self.vfailIf(self.nget_run('-g test -ir par.test')) self.verifyoutput({'par01':['01.dat','03.dat','04.dat','05.dat','a b.par','a b.p02']}) def test_autoparhandling_incompletepxxonly(self): self.addarticles('par01', 'input', fname='dat[1345]') self.addarticles('par01', 'multipart', fname='par1-1') self.vfailUnlessExitstatus(self.nget_run('-g test -ir par.test'), 3) def test_autoparhandling_incompletepxxonly2(self): self.addarticles('par01', 'input', fname='dat[1345]') self.addarticles('par01', 'multipart', fname='par1-1') self.vfailIf(self.nget_run('-g test -r par.test')) # maybe this should cause autopar exit error? def test_autoparhandling_reply(self): self.addarticles('par01', 'input') self.addarticles('par01', 'reply') self.vfailIf(self.nget_run('-g test -r par.test')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par','_reply_output/1041725934.0.txt']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) def test_autoparhandling_reply_existingpar(self): self.addarticles('par01', 'input') self.addarticles('par01', 'reply') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.test.*a b.par"'), 2) self.vfailIf(self.nget_run('-G test -r par.test')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par','_reply_output/1041725934.0.txt']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) def test_autoparhandling_0file(self): self.addarticles('par02', 'input') self.addarticles('par02', '0file') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','p2.par','_0file_output/1041648329.0.txt']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) def test_autoparhandling_differingcasefile(self): self.addarticles('par02', 'input') self.rmarticle_fromserver('par02','input','dat4',self.servers.servers[0]) self.rmarticle_fromserver('par02','input','dat5',self.servers.servers[0]) self.addarticles('par02', 'case_input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-01.dat','p2-02.dat','p2-03.dat','_case_output/P2-04.dAt','_case_output/p2-05.DaT','p2.par']}) def test_autoparhandling_differingparfilenames(self): self.addarticle_toserver('par02', 'input', 'dat2', self.servers.servers[0]) self.addarticle_toserver('par02', 'input', 'par', self.servers.servers[0]) self.addarticle_toserver('par02', 'input', 'par2', self.servers.servers[0]) self.addarticle_toserver('par02', 'input', 'par4', self.servers.servers[0]) self.addarticles('par02', 'a_b_par_input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-02.dat','p2.par','p2.p02', 'p2.p04', '_a_b_par_output/a b.p01', '_a_b_par_output/a b.p03', '_a_b_par_output/a b.par']}) def test_autoparhandling_differingparfilenames_nopar(self): self.addarticle_toserver('par02', 'input', 'dat2', self.servers.servers[0]) self.addarticle_toserver('par02', 'input', 'par2', self.servers.servers[0]) self.addarticle_toserver('par02', 'input', 'par4', self.servers.servers[0]) self.addarticles('par02', 'a_b_par_input') self.rmarticle_fromserver('par02','a_b_par_input','par',self.servers.servers[0]) self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-02.dat','p2.p02', 'p2.p04', '_a_b_par_output/a b.p01', '_a_b_par_output/a b.p03']}) def test_autoparhandling_multiparset(self): self.addarticles('par01', 'input') self.addarticles('par02', 'input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par'], 'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','p2.par']}) def test_autoparhandling_multiparset_samename(self): self.addarticles('par01', 'input') self.addarticles('par02', 'input', fname='dat*') self.addarticles('par02', 'a_b_par_input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par'], 'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','_a_b_par_output/a b.par']}) def test_autoparhandling_multiparset_samename_missingfile(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','dat4',self.servers.servers[0]) self.addarticle_toserver('par02', 'input', 'dat2', self.servers.servers[0]) self.addarticle_toserver('par02', 'input', 'dat4', self.servers.servers[0]) self.addarticles('par02', 'a_b_par_input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par01':['01.dat','03.dat','05.dat','a b.par','a b.p01','a b.p02']+ ['a b.p03', 'a b.p04', 'a b.p05', 'a b.p06'],#unfortunatly, these have to be grabbed first before nget will get to try the pars from the second set, since they were posted at a later date. 'par02':['p2-02.dat','p2-04.dat','_a_b_par_output/a b.par','_a_b_par_output/a b.p01','_a_b_par_output/a b.p02','_a_b_par_output/a b.p03']}) def test_autoparhandling_multiparset_existingpar(self): self.addarticles('par01', 'input') self.addarticles('par02', 'input') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.*test.*\.par"'), 2) self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.par'], 'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','p2.par']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 12) def test_autoparhandling_multiparset_missingapar(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','par',self.servers.servers[0]) self.addarticles('par02', 'input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par01':['01.dat','02.dat','03.dat','04.dat','05.dat','a b.p01'], 'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','p2.par']}) def test_autoparhandling_multiparset_missingfile(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','dat4',self.servers.servers[0]) self.addarticles('par02', 'input') self.rmarticle_fromserver('par02','input','dat1',self.servers.servers[0]) self.rmarticle_fromserver('par02','input','dat3',self.servers.servers[0]) self.rmarticle_fromserver('par02','input','dat5',self.servers.servers[0]) self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par01':['01.dat','03.dat','05.dat','a b.par','a b.p01','a b.p02'], 'par02':['p2-02.dat','p2-04.dat','p2.par','p2.p01','p2.p02','p2.p03']}) def test_autoparhandling_multiparset_missingfile_nofilematches(self): self.addarticles('par01', 'input') self.rmarticle_fromserver('par01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par01','input','dat4',self.servers.servers[0]) self.addarticles('par02', 'input') self.rmarticle_fromserver('par02','input','dat1',self.servers.servers[0]) self.rmarticle_fromserver('par02','input','dat3',self.servers.servers[0]) self.rmarticle_fromserver('par02','input','dat5',self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.*test.*\.[dp]a[tr]"'), 2) self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par01':['01.dat','03.dat','05.dat','a b.par','a b.p01','a b.p02'], 'par02':['p2-02.dat','p2-04.dat','p2.par','p2.p01','p2.p02','p2.p03']}) def test_noautopar2handling(self): self.addarticles('par2-01', 'input') self.vfailIf(self.nget_run('-g test --no-autopar -r par2.test')) self.verifyoutput('par2-01') def test_autopar2handling(self): self.addarticles('par2-01', 'input') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2']}) def test_autopar2handling_existingpar(self): self.addarticles('par2-01', 'input') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par2.test.*c d.par2"'), 2) self.vfailIf(self.nget_run('-G test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 6) def test_autopar2handling_missingpar(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','par',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','par1',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','par2',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','par3',self.servers.servers[0]) self.addarticles('par2-01', 'corrupt_pxxs') #these one have a newer post date than the pars in the "input" dir, so this will test that nget downloads the smallest first rather than the oldest or newest. self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','_corrupt_pxxs_output/c d.vol01+02.par2']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 6) def test_autopar2handling_existingpxx(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','par',self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r "par2.test.*c d.vol00.01.par2"'), 2) self.vfailIf(self.nget_run('-G test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.vol00+01.par2']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 6) def test_autopar2handling_missingfile1(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','dat1',self.servers.servers[0]) self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2','c d.vol00+01.par2']}) def test_autopar2handling_missingfile2(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','dat2',self.servers.servers[0]) self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2','c d.vol01+02.par2']}) def test_autopar2handling_missingfile_nofilematches(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','dat1',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','dat2',self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r "par2.test.*\.dat" -r "par2.test.*c d.par2"'), 2) self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 03.dat','c d 04.dat','c d 05.dat','c d.par2','c d.vol00+01.par2','c d.vol01+02.par2']}) def test_autopar2handling_incomplete_pessimistic(self): self.addarticle_toserver('par2-01', 'input', 'dat2', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par2', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par3', self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 2) self.verifyoutput({'par2-01':['c d 02.dat','c d.par2','c d.vol01+02.par2','c d.vol03+04.par2']}) def test_autopar2handling_incomplete_optimistic(self): self.nget.writerc(self.servers.servers, options={'autopar_optimistic':1}) self.addarticle_toserver('par2-01', 'input', 'dat2', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par2', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par3', self.servers.servers[0]) self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 2) self.verifyoutput({'par2-01':['c d 02.dat','c d.par2']}) def test_autopar2handling_corruptfile(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','dat4',self.servers.servers[0]) self.addarticles('par2-01', 'corrupt_input') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','_corrupt_output/c d 02.dat','c d 03.dat','_corrupt_output/c d 04.dat','c d 05.dat','c d.par2','c d.vol01+02.par2','c d.vol07+08.par2']}) def test_autopar2handling_corruptfile_correctdupe(self): self.addarticles('par2-01', 'corrupt_input') self.vfailIf(self.nget_run('-g test -r par2.test')) self.addarticles('par2-01', 'input') self.vfailIf(self.nget_run('-dF -g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','_corrupt_output/c d 02.dat','c d 03.dat','c d 04.dat','_corrupt_output/c d 04.dat','c d 05.dat','c d.par2']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 8) def test_autopar2handling_corruptfileblock(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','dat5',self.servers.servers[0]) self.addarticles('par2-01', 'corrupt_inputblock') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','_corrupt_outputblock/c d 05.dat','c d.par2','c d.vol00+01.par2','c d.vol01+02.par2']}) def test_autopar2handling_corruptpxx(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','dat3',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','par2',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','par3',self.servers.servers[0]) self.addarticles('par2-01', 'corrupt_pxxs') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 04.dat','c d 05.dat','c d.par2','_corrupt_pxxs_output/c d.vol01+02.par2','_corrupt_pxxs_output/c d.vol03+04.par2','c d.vol07+08.par2']}) def test_autopar2handling_corruptpxxonly(self): self.addarticles('par2-01', 'input',fname='dat1') self.addarticles('par2-01', 'corrupt_pxxs') self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 2) self.verifyoutput({'par2-01':['c d 01.dat','_corrupt_pxxs_output/c d.vol01+02.par2','_corrupt_pxxs_output/c d.vol03+04.par2']}) def test_autopar2handling_notpxx_long(self): self.addarticles('par2-01', 'input',fname='dat1') self.addarticles('par2-01', 'notpxxs',fname='par1') self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 2) self.verifyoutput({'par2-01':['c d 01.dat','_notpxxs_output/c d.vol00+01.par2']}) def test_autopar2handling_notpxx_short(self): self.addarticles('par2-01', 'input',fname='dat1') self.addarticles('par2-01', 'notpxxs',fname='par2') self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 2) self.verifyoutput({'par2-01':['c d 01.dat','_notpxxs_output/c d.vol01+02.par2']}) def test_autopar2handling_notpxxandrealpar_short(self): self.addarticles('par2-01', 'notpxxs',fname='par2') self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 2) self.addarticles('par2-01', 'input') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2','_notpxxs_output/c d.vol01+02.par2']}) def test_autopar2handling_notpxxanddifferingpar_short(self): self.addarticles('par2-01', 'notpxxs',fname='par2') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.*test"'), 2) self.addarticles('par02', 'input',fname='dat*') self.addarticles('par02', 'par2_input') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par.*test"'), 2) self.verifyoutput({'par2-01':['_notpxxs_output/c d.vol01+02.par2'], 'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','_par2_output/p2.par2']}) def test_autopar2handling_corruptpxx_correctdupe(self): self.addarticle_toserver('par2-01', 'input', 'par', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'dat1', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'dat4', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'dat5', self.servers.servers[0]) self.addarticles('par2-01', 'corrupt_pxxs') self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 2) self.addarticle_toserver('par2-01', 'input', 'par1', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par2', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par3', self.servers.servers[0]) self.addarticle_toserver('par2-01', 'input', 'par4', self.servers.servers[0]) self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 04.dat','c d 05.dat','c d.par2','_corrupt_pxxs_output/c d.vol01+02.par2','_corrupt_pxxs_output/c d.vol03+04.par2','c d.vol01+02.par2','c d.vol03+04.par2']}) def test_autopar2handling_corruptpxxblock(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','dat3',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','par3',self.servers.servers[0]) self.addarticles('par2-01', 'corrupt_pxxblocks') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 04.dat','c d 05.dat','c d.par2','_corrupt_pxxblocks_output/c d.vol03+04.par2','c d.vol01+02.par2']}) def test_autopar2handling_corruptmainpkt(self): self.addarticles('par2-01', 'input',fname='dat?') self.addarticles('par2-01', 'input',fname='par?') self.addarticles('par2-01', 'corrupt_mainpkt') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','_corrupt_mainpkt_output/c d.par2','c d.vol00+01.par2']}) def test_autopar2handling_missingfiledescpkt(self): self.addarticles('par2-01', 'input',fname='dat?') self.addarticles('par2-01', 'input',fname='par?') self.addarticles('par2-01', 'missing_filedescpkt') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','_missing_filedescpkt_output/c d.par2','c d.vol00+01.par2']}) def test_autopar2handling_missingifscpkt(self): self.addarticles('par2-01', 'input',fname='dat?') self.addarticles('par2-01', 'input',fname='par?') self.addarticles('par2-01', 'missing_ifscpkt') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','_missing_ifscpkt_output/c d.par2']}) def test_autopar2handling_corruptsethash(self): self.addarticles('par2-01', 'input', fname='dat[1345]') self.addarticles('par2-01', 'input', fname='par1') self.addarticles('par2-01', 'corrupt_sethash') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 03.dat','c d 04.dat','c d 05.dat','_corrupt_sethash_output/foo.vol01+02.par2','c d.vol00+01.par2']}) def test_autopar2handling_incompletepxx(self): self.addarticles('par2-01', 'input') self.rmarticle_fromserver('par2-01','input','dat2',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','dat3',self.servers.servers[0]) self.rmarticle_fromserver('par2-01','input','par3',self.servers.servers[0]) self.addarticles('par2-01', 'multipart', fname="par3-1") self.vfailIf(self.nget_run('-g test -ir par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 04.dat','c d 05.dat','c d.par2','c d.vol07+08.par2']}) def test_autopar2handling_incompletepxx2(self): self.addarticles('par2-01', 'input', fname='dat[2345]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par[45]') self.addarticles('par2-01', 'multipart', fname="par3-1") self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 1) def test_autopar2handling_incompletepxx3(self): self.addarticles('par2-01', 'input', fname='dat[2345]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par[245]') self.addarticles('par2-01', 'multipart', fname="par3-1") self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2','c d.vol01+02.par2']}) #vol01+02 should be prefered since it has less "size", even if it has more "value" than needed. def test_autopar2handling_incompletepxxonly(self): self.addarticles('par2-01', 'input', fname='dat[2345]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'multipart', fname="par3-1") self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 1) def test_autopar2handling_incompletepxxonly2(self): self.addarticles('par2-01', 'input', fname='dat[2345]') self.addarticles('par2-01', 'multipart', fname="par3-1") self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 1) def test_autopar2handling_incompletefile(self): self.addarticles('par2-01', 'input', fname='dat[1235]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par2') self.addarticles('par2-01', 'multipart', fname="dat4-[123]") self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 1) #autopar should automatically try incomplete data files if there isn't enough par2 packets, even if user didn't use -i. def test_autopar2handling_incompletefile_case(self): self.addarticles('par2-01', 'weirdcase_input', fname='dat[1235]') self.addarticles('par2-01', 'weirdcase_input', fname='par') self.addarticles('par2-01', 'weirdcase_input', fname='par2') self.addarticles('par2-01', 'multipart', fname="dat4-[123]") self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 1) #autopar should automatically try incomplete data files if there isn't enough par2 packets, even if user didn't use -i. def test_autopar2handling_incompletefile2(self): self.addarticles('par2-01', 'input', fname='dat[1235]') self.addarticles('par2-01', 'multipart', fname="dat4-[123]") self.vfailIf(self.nget_run('-g test -r par2.test')) # the extra incomplete getting only happens if par2s are available. self.vfailUnlessEqual(self.servers.servers[0].count("article"), 4) def test_autopar2handling_incompletefile_smartness(self): self.addarticles('par2-01', 'input', fname='dat[1245]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par2') self.addarticles('par2-01', 'multipart', fname="dat[12345]-1") self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'), 1) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) def test_autopar2handling_incompletefile_smartness2(self): self.addarticles('par2-01', 'input', fname='dat[1234]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'multipart', fname="dat[1234]-1") self.vfailUnlessExitstatus(self.nget_run('-g test -r par2.test'),2) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d.par2']}) def test_autopar2handling_incompletefile_smartness_size(self): self.addarticles('par2-01', 'input', fname='dat[125]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par4') self.addarticles('par2-01', 'multipart', fname="dat[12345]-1") output = self.vfailUnlessExitstatus_getoutput(self.nget_run_getoutput('-g test -r par2.test'), 1) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) self.vfailUnlessEqual(output.count("blocks of incomplete data"), 1) def test_autopar2handling_incompletefile_smartness_size2(self): self.addarticles('par2-01', 'input', fname='dat[125]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par4') self.addarticles('par2-01', 'multipart', fname="dat[1235]-1") self.addarticles('par2-01', 'multipart', fname="dat4-[123]") output = self.vfailUnlessExitstatus_getoutput(self.nget_run_getoutput('-g test -r par2.test'), 1) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 8) self.vfailUnlessEqual(output.count("blocks of incomplete data"), 1) def test_autopar2handling_incompletefile_pessimistic(self): self.addarticles('par2-01', 'input', fname='dat[125]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par1') self.addarticles('par2-01', 'multipart', fname="dat[12345]-1") output = self.vfailUnlessExitstatus_getoutput(self.nget_run_getoutput('-g test -r par2.test'), 3) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) self.vfailUnlessEqual(output.count("blocks of incomplete data"), 1) def test_autopar2handling_incompletefile_optimistic(self): self.nget.writerc(self.servers.servers, options={'autopar_optimistic':1}) self.addarticles('par2-01', 'input', fname='dat[125]') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par1') self.addarticles('par2-01', 'multipart', fname="dat[12345]-1") output = self.vfailUnlessExitstatus_getoutput(self.nget_run_getoutput('-g test -r par2.test'), 2) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 4) self.vfailUnlessEqual(output.count("blocks of incomplete data"), 0) def test_autopar2handling_reply(self): self.addarticles('par2-01', 'input') self.addarticles('par2-01', 'reply') self.vfailIf(self.nget_run('-g test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2','_reply_output/1058814262.0.txt']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) def test_autopar2handling_reply_existingpar(self): self.addarticles('par2-01', 'input') self.addarticles('par2-01', 'reply') self.vfailUnlessExitstatus(self.nget_run('-g test -r "par2.test.*c d.par2"'), 2) self.vfailIf(self.nget_run('-G test -r par2.test')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2','_reply_output/1058814262.0.txt']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) def test_autopar2handling_0file(self): self.addarticles('par02', 'input', fname='dat*') self.addarticles('par02', 'par2_input') self.addarticles('par02', 'par2_0file') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','_par2_output/p2.par2','_par2_0file_output/1059095652.0.txt']}) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) def test_autopar2handling_differingcasefile(self): self.addarticles('par02', 'input', fname='dat[1-3]') self.addarticles('par02', 'par2_input') self.addarticles('par02', 'case_input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-01.dat','p2-02.dat','p2-03.dat','_case_output/P2-04.dAt','_case_output/p2-05.DaT','_par2_output/p2.par2']}) def test_autopar2handling_differingparfilenames(self): self.addarticles('par02', 'input',fname='dat2') self.addarticles('par02', 'par2_input',fname='par') self.addarticles('par02', 'par2_input',fname='par2') self.addarticles('par02', 'c_d_par2_input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-02.dat','_par2_output/p2.par2','_par2_output/p2.vol1+2.par2', '_c_d_par2_output/c d.vol03+02.par2', '_c_d_par2_output/c d.par2']}) def test_autopar2handling_differingparfilenames_nopar(self): self.addarticles('par02', 'input',fname='dat2') self.addarticles('par02', 'par2_input',fname='par2') self.addarticles('par02', 'c_d_par2_input',fname='par3') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-02.dat','_par2_output/p2.vol1+2.par2', '_c_d_par2_output/c d.vol03+02.par2']}) def test_autopar2handling_multiparset(self): self.addarticles('par2-01', 'input') self.addarticles('par02', 'input', fname='dat*') self.addarticles('par02', 'par2_input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2'], 'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','_par2_output/p2.par2']}) def test_autopar2handling_multiparset_samename(self): self.addarticles('par2-01', 'input', fname='dat*') self.addarticles('par2-01', 'input', fname='par') self.addarticles('par2-01', 'input', fname='par[12]') self.addarticles('par02', 'input', fname='dat*') self.addarticles('par02', 'c_d_par2_input', fname='par') self.addarticles('par02', 'c_d_par2_input', fname='par[12]') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par2-01':['c d 01.dat','c d 02.dat','c d 03.dat','c d 04.dat','c d 05.dat','c d.par2'], 'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','_c_d_par2_output/c d.par2']}) #### TODO: further par2 tests def test_autoparhandling_multiparversions(self): self.addarticles('par02', 'input') self.addarticles('par02', 'par2_input') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-04.dat','p2-05.dat','p2.par','_par2_output/p2.par2']}) def test_autoparhandling_multiparversions_missingfile(self): self.addarticles('par02', 'input') self.addarticles('par02', 'par2_input') self.rmarticles('par02','input', fname='dat4') self.vfailIf(self.nget_run('-g test -r "par.*test"')) self.verifyoutput({'par02':['p2-01.dat','p2-02.dat','p2-03.dat','p2-05.dat','p2.par','_par2_output/p2.par2','p2.p01','_par2_output/p2.vol0+1.par2']}) #### should it try to only grab one of the par1 or the par2? class NoCacheRetrieveTestCase(TestCase, RetrieveTest_base): def setUp(self): RetrieveTest_base.setUp(self) def tearDown(self): if self.servers.servers[0].count("group")>0: assert self.servers.servers[0].count("xpat")>0 RetrieveTest_base.tearDown(self) def nget_run(self, cmd): newcmd = re.sub('-[Gg] ', '-x ', cmd) return self.nget.run(newcmd) def nget_run_getoutput(self, cmd): newcmd = re.sub('-[Gg] ', '-x ', cmd) return self.nget.run_getoutput(newcmd) class RetrieveTestCase(TestCase, RetrieveTest_base): def setUp(self): RetrieveTest_base.setUp(self) def tearDown(self): assert self.servers.servers[0].count("xpat")==0 RetrieveTest_base.tearDown(self) def nget_run(self, cmd): return self.nget.run(cmd) def nget_run_getoutput(self, cmd): return self.nget.run_getoutput(cmd) def test_mid(self): self.vfailIf(self.nget.run('-g test -R "mid .a67ier.6l5.1.bar. =="')) self.verifyoutput('0002') def test_not_mid(self): self.vfailIf(self.nget.run('-g test -R "mid 1.1041808207.48.dumbnntpd !="')) self.verifyoutput(['0002','0001']) def test_mid_or_mid(self): self.vfailIf(self.nget.run('-g test -R "mid .a67ier.6l5.1.bar. == mid .1000.test. == ||"')) self.verifyoutput(['0002','0001']) def test_messageid(self): self.vfailIf(self.nget.run('-g test -R "messageid .a67ier.6l5.1.bar. =="')) self.verifyoutput('0002') def test_author(self): self.vfailIf(self.nget.run('-g test -R "author Matthew =="')) self.verifyoutput('0002') def test_subject(self): self.vfailIf(self.nget.run('-g test -R "subject joystick =="')) self.verifyoutput('0002') def test_lines_le_toolow(self): self.vfailIf(self.nget.run('-g test -R "lines 15 <="')) self.verifyoutput([]) def test_lines_le(self): self.vfailIf(self.nget.run('-g test -R "lines 16 <="')) self.verifyoutput('0001') def test_lines_lt_toolow(self): self.vfailIf(self.nget.run('-g test -R "lines 16 <"')) self.verifyoutput([]) def test_lines_lt(self): self.vfailIf(self.nget.run('-g test -R "lines 17 <"')) self.verifyoutput('0001') def test_lines_ge_toohigh(self): self.vfailIf(self.nget.run('-g test -R "lines 434 >="')) self.verifyoutput([]) def test_lines_ge(self): self.vfailIf(self.nget.run('-g test -R "lines 433 >="')) self.verifyoutput('0002') def test_lines_gt_toohigh(self): self.vfailIf(self.nget.run('-g test -R "lines 433 >"')) self.verifyoutput([]) def test_lines_gt(self): self.vfailIf(self.nget.run('-g test -R "lines 432 >"')) self.verifyoutput('0002') def test_lines_eq(self): self.vfailIf(self.nget.run('-g test -R "lines 433 =="')) self.verifyoutput('0002') def test_lines_and_lines(self): self.vfailIf(self.nget.run('-g test -R "lines 20 > lines 200 < &&"')) self.verifyoutput('0005') def test_bytes(self): self.vfailIf(self.nget.run('-g test -R "bytes 2000 >"')) self.verifyoutput('0002') def test_have(self): self.vfailIf(self.nget.run('-g test -R "have 3 =="')) self.verifyoutput('0002') def test_req(self): self.vfailIf(self.nget.run('-g test -R "req 3 =="')) self.verifyoutput('0002') def test_date(self): self.vfailIf(self.nget.run('-g test -R "date \'Thu, 7 Mar 2002 11:20:59 +0000 (UTC)\' =="')) self.verifyoutput('0002') def test_date_iso(self): self.vfailIf(self.nget.run('-g test -R "date 20020307T112059+0000 =="')) self.verifyoutput('0002') def test_age(self): self.vfailIf(self.nget.run('-g test -R "age 3w2h5m1s <"')) self.verifyoutput([]) self.vfailIf(self.nget.run('-g test -R "age 3w2h5m1s >"')) self.verifyoutput(['0002','0001','0005']) def test_update(self): nowstr = time.strftime("%Y%m%dT%H%M%S") self.vfailIf(self.nget.run('-g test -R "update %s < "'%nowstr)) self.verifyoutput([]) self.vfailIf(self.nget.run('-G test -R "update %s >="'%nowstr)) self.verifyoutput(['0002','0001','0005']) def test_updateage(self): self.vfailIf(self.nget.run('-g test -R "updateage 1s >"')) self.verifyoutput([]) self.vfailIf(self.nget.run('-G test -R "updateage 1s <="')) self.verifyoutput(['0002','0001','0005']) def test_references(self): self.addarticles('refs01', 'input') self.addarticles('refs02', 'input') self.vfailIf(self.nget.run('-g test -R "references foo01 =="')) self.verifyoutput('refs01') def test_R_extra_whitespace(self): self.vfailIf(self.nget.run('-g test -R " \tlines \t 20 \t > \t lines \t 200\t <\t &&\t \t"')) self.verifyoutput('0005') def test_R_stack(self): self.vfailIf(self.nget.run('-g test -R "lines 20 > lines 200 < && bytes 2000 > bytes 90000 < && ||"')) self.verifyoutput(['0005','0002']) def test_R_stack4(self): self.vfailIf(self.nget.run('-g test -R "lines 2 > lines 200 < bytes 1000 > bytes 90000 < && && &&"')) self.verifyoutput(['0005']) def test_p_relative(self): d = os.getcwd() try: os.chdir(self.nget.tmpdir) os.mkdir('aaa') os.mkdir('bbb') self.vfailIf(self.nget.run('-p bbb -g test -p aaa -r foo -p bbb -r joy')) finally: os.chdir(d) self.verifyoutput('0001', tmpdir=os.path.join(self.nget.tmpdir,'aaa')) self.verifyoutput('0002', tmpdir=os.path.join(self.nget.tmpdir,'bbb')) def test_list_p_relative(self): lpath = os.path.join(self.nget.rcdir, 'list.foo') f = open(lpath, 'w') f.write('-l 1')#whatever. f.close() d = os.getcwd() try: os.chdir(self.nget.tmpdir) os.mkdir('aaa') os.mkdir('bbb') self.vfailIf(self.nget.run('-p bbb -@ %s -g test -p aaa -r foo -p bbb -r joy'%lpath)) finally: os.chdir(d) self.verifyoutput('0001', tmpdir=os.path.join(self.nget.tmpdir,'aaa')) self.verifyoutput('0002', tmpdir=os.path.join(self.nget.tmpdir,'bbb')) def test_list(self): ldir = os.path.join(self.nget.rcdir, 'lists') os.mkdir(ldir) lpath = os.path.join(ldir, 'list.foo') f = open(lpath, 'w') f.write('-g test -r .') f.close() self.vfailIf(self.nget.run('-@ list.foo')) self.verifyoutput(['0002','0001','0005']) def test_list_abspath(self): lpath = os.path.join(self.nget.rcdir, 'list.foo') f = open(lpath, 'w') f.write('-g test -r .') f.close() self.vfailIf(self.nget.run('-@ %s'%lpath)) self.verifyoutput(['0002','0001','0005']) def test_list_multiline(self): lpath = os.path.join(self.nget.rcdir, 'list.foo') f = open(lpath, 'w') f.write('-g\ntest\n-r\n.') f.close() self.vfailIf(self.nget.run('-@ %s'%lpath)) self.verifyoutput(['0002','0001','0005']) def test_list_list(self): lpath = os.path.join(self.nget.rcdir, 'list.foo') l2path = os.path.join(self.nget.rcdir, 'list2.foo') f = open(lpath, 'w') f.write('-@ %s'%l2path) f.close() f = open(l2path, 'w') f.write('-g\ntest\n-r\njoy') f.close() self.vfailIf(self.nget.run('-@ %s'%lpath)) self.verifyoutput(['0002']) def test_list_optionscope(self): lpath = os.path.join(self.nget.rcdir, 'list.foo') f = open(lpath, 'w') f.write('-l 98765 -L 1 -p %s -G foog -M -w boofar -K -T\n'%self.nget.rcdir) f.close() self.vfailIf(self.nget.run('-gtest -@ %s -r joy'%lpath)) self.verifyoutput(['0002']) def test_list_enoent(self): self.vfailUnlessExitstatus(self.nget.run('-@ foobar'), 4) def test_badskip_path(self): self.vfailUnlessExitstatus(self.nget.run('-p badpath -g test -r joy -p %s -r foo'%(self.nget.tmpdir)), 4) self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_badskip_temppath(self): self.vfailUnlessExitstatus(self.nget.run('-P badpath -g test -r joy -P %s -r foo'%(self.nget.tmpdir)), 4) self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_badskip_temppath_okpath(self): self.vfailUnlessExitstatus(self.nget.run('-P badpath -g test -r joy -p %s -r foo'%(self.nget.tmpdir)), 4) #-p resets -P too self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_badskip_path_oktemppath(self): self.vfailUnlessExitstatus(self.nget.run('-p badpath -g test -r joy -P %s -r foo'%(self.nget.tmpdir)), 4) #-P does not reset -p self.verifyoutput([]) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 0) def test_badskip_host(self): self.vfailUnlessExitstatus(self.nget.run('-h badhost -g test -r joy -h host0 -r foo'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 0) self.verifyoutput([])#bad -h should turn -g into -G, so that should have failed to get anything. self.vfailIf(self.nget.run('-g test')) #retrieve headers first and try again self.vfailUnlessExitstatus(self.nget.run('-h badhost -g test -r joy -h host0 -r foo'), 4) self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_badskip_pathhost(self): self.vfailUnlessExitstatus(self.nget.run('-g test -h badhost -p badpath -r . -p %s -r . -h host0 -r foo'%(self.nget.tmpdir)), 4) self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_badskip_hostpath(self): self.vfailUnlessExitstatus(self.nget.run('-g test -h badhost -p badpath -r . -h host0 -r . -p %s -r foo'%(self.nget.tmpdir)), 4) self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_badskip_okthenbadpath(self): self.vfailUnlessExitstatus(self.nget.run('-g test -r foo -p badpath -r .'), 4) self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_badskip_okthenbadhost(self): self.vfailUnlessExitstatus(self.nget.run('-g test -r foo -h badhost -r .'), 4) self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 1) def test_badskip_emptyexpression(self): self.vfailUnlessExitstatus(self.nget.run('-g test -R "" -r joy'), 4) self.verifyoutput(['0002']) def test_badskip_retrievenogroup(self): self.vfailUnlessExitstatus(self.nget.run('-r . -g test -r joy'), 4) self.verifyoutput(['0002']) def test_cache_reloading_after_host(self): self.vfailIf(self.nget.run('-g test -r foo -h host0 -D -r foo')) self.verifyoutput(['0001']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 2) def test_flush_nogroup(self): self.vfailUnlessExitstatus(self.nget.run('-F host0'), 4) def test_flush_badserver(self): self.vfailUnlessExitstatus(self.nget.run('-g test -F badserv'), 4) def test_flush_available_badserver(self): self.vfailUnlessExitstatus(self.nget.run('-A -F badserv'), 4) def test_bad_arg(self): self.vfailUnlessExitstatus(self.nget.run('-g test badarg -r .'), 4) self.verifyoutput([]) def test_bad_argnotcomment(self): self.vfailUnlessExitstatus(self.nget.run('-g test "#badarg" -r .'), 4) #comments should not work on command line, only in listfile self.verifyoutput([]) def test_list_comment(self): lpath = os.path.join(self.nget.rcdir, 'list.foo') f = open(lpath, 'w') f.write('-g test #comment -r . baaha\n-r joy') f.close() self.vfailIf(self.nget.run('-@ %s'%lpath)) self.verifyoutput(['0002']) def test_list_quotedcomment(self): lpath = os.path.join(self.nget.rcdir, 'list.foo') f = open(lpath, 'w') f.write('-g test "#comment -r . baaha"\n -r .') f.close() self.vfailUnlessExitstatus(self.nget.run('-@ %s'%lpath), 4) self.verifyoutput([]) def test_list_escaping(self): lpath = os.path.join(self.nget.rcdir, 'list.foo') f = open(lpath, 'w') f.write(r'-g test -r \ ') f.close() self.vfailUnlessExitstatus(self.nget.run('-@ %s'%lpath), 0) self.verifyoutput(['0001','0002','0005']) def test_available(self): self.vfailIf(self.nget.run('-a')) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailIf(self.nget.run('-a')) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) output = self.vfailIf_getoutput(self.nget.run_getoutput('-A -T -r .')) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailUnlessEqual(output.splitlines()[-1].strip(), "h0\ttest") def test_available2(self): output = self.vfailIf_getoutput(self.nget.run_getoutput('-a -T -r .')) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.failUnless(re.search("^h0\ttest$", output, re.M)) def test_available_newgroups(self): self.vfailIf(self.nget.run('-a')) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("list_newsgroups"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("list_"), 1) time.sleep(1.1) self.servers.servers[0].addgroup("a.new.group","whee") output = self.vfailIf_getoutput(self.nget.run_getoutput('-a -T -r .')) self.failUnless(re.search(r"^h0\ta.new.group\twhee \[h0\][\n\r]+h0\ttest$", output, re.M)) self.vfailUnlessEqual(self.servers.servers[0].count("list_newsgroups"), 2) self.vfailUnlessEqual(self.servers.servers[0].count("newgroups"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("list_"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("date"), 2) def test_available_newgroups_nolistnewsgroupscmd(self): self.servers.servers[0].RequestHandlerClass = NoListNewsgroupsCmdNNTPRequestHandler self.vfailIf(self.nget.run('-a')) def test_available_newgroups_nodatecmd(self): self.servers.servers[0].RequestHandlerClass = NoDateCmdNNTPRequestHandler self.vfailIf(self.nget.run('-a')) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("list_newsgroups"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("list_"), 1) time.sleep(1.1) self.servers.servers[0].addgroup("a.new.group","whee") output = self.vfailIf_getoutput(self.nget.run_getoutput('-a -T -r .')) self.failUnless(re.search(r"^h0\ta.new.group\twhee \[h0\][\n\r]+h0\ttest$", output, re.M)) self.vfailUnlessEqual(self.servers.servers[0].count("list_newsgroups"), 2) self.vfailUnlessEqual(self.servers.servers[0].count("newgroups"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("list_"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("date"), 0) def test_available_extraneous_list_newsgroups(self): self.servers.servers[0].RequestHandlerClass = ExtraneousListNewsgroupsNNTPRequestHandler output = self.vfailIf_getoutput(self.nget.run_getoutput('-a -Tr .')) self.failUnless(output.find("foo.bar.desc")>=0) self.failUnless(output.find("foo.bar.group")>=0) self.failUnless(output.find("test")>=0) self.failIf(output.find("WARNINGS")>=0) output = self.vfailIf_getoutput(self.nget.run_getoutput('-A -Tr .')) self.failUnless(output.find("foo.bar.desc")>=0) self.failUnless(output.find("foo.bar.group")>=0) self.failUnless(output.find("test")>=0) self.failIf(output.find("WARNINGS")>=0) def test_available_tabsindesc(self): self.servers.servers[0].addgroup("group.one", "aa.desc\tfoo\tbaz") self.servers.servers[0].addgroup("group.two", "\tbb.desc\t\tbar\tbork\t") output = self.vfailIf_getoutput(self.nget.run_getoutput('-a -T -r .')) for s in ("group.one", "aa.desc\tfoo\tbaz", "group.two", "\tbb.desc\t\tbar\tbork\t"): self.failUnless(output.find(s)>=0, repr(s)+' not found in output') self.failIf(output.find("WARNINGS")>=0) output = self.vfailIf_getoutput(self.nget.run_getoutput('-A -T -r .')) for s in ("group.one", "aa.desc\tfoo\tbaz", "group.two", "\tbb.desc\t\tbar\tbork\t"): self.failUnless(output.find(s)>=0, repr(s)+' not found in output') self.failIf(output.find("WARNINGS")>=0) def test_available_r(self): self.servers.servers[0].addgroup("aa.group") self.servers.servers[0].addgroup("bb.group") self.servers.servers[0].addgroup("group.one", "aa.desc") self.servers.servers[0].addgroup("group.two", "bb.desc") output = self.vfailIf_getoutput(self.nget.run_getoutput('-a -T -r aa')) self.failUnless(output.find("aa.group")>=0) self.failUnless(output.find("aa.desc")>=0) self.failIf(output.find("bb.")>=0) def test_xavailable_r(self): self.servers.servers[0].addgroup("aa.group") self.servers.servers[0].addgroup("bb.group") self.servers.servers[0].addgroup("group.one", "aa.desc") self.servers.servers[0].addgroup("group.two", "bb.desc") self.servers.servers[0].addgroup("group.aa.two", "foo.desc") output = self.vfailIf_getoutput(self.nget.run_getoutput('-X -T -r aa')) self.failUnless(output.find("aa.group")>=0) self.failUnless(output.find("group.aa.two")>=0) self.failUnless(output.find("foo.desc")>=0) self.failIf(output.find("bb.")>=0) self.failIf(output.find("aa.desc")>=0) #LIST NEWSGROUPS wildmat doesn't search the description, so this shouldn't be found. def test_available_R_desc(self): self.servers.servers[0].addgroup("group.bbb") self.servers.servers[0].addgroup("group.one", "aaa") self.servers.servers[0].addgroup("group.two", "bbb") output = self.vfailIf_getoutput(self.nget.run_getoutput('-a -T -R "desc bbb =="')) self.failUnless(re.search(r"^h0\tgroup.two\tbbb \[h0\]$",output, re.M)) self.failIf(output.find(".one")>=0) self.failIf(output.find("group.bbb")>=0) def test_available_R_not_desc(self): self.servers.servers[0].addgroup("group.bbb") self.servers.servers[0].addgroup("group.one", "aaa") self.servers.servers[0].addgroup("group.two", "bbb") output = self.vfailIf_getoutput(self.nget.run_getoutput('-a -T -R "desc bbb !="')) self.failUnless(re.search(r"^h0\tgroup.bbb[\r\n]+h0\tgroup.one\taaa \[h0\][\r\n]+h0\ttest$",output, re.M)) self.failIf(output.find(".two")>=0) def test_lite_tempfileexists(self): litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r joy"%litelist)) self.vfailIf(self.nget.run("-G test -K -r joy")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailIf(self.nget.runlite(litelist)) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') class MakedirsTestCase_base(DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.addarticles('0001', 'uuencode_single') self.servers.start() self.ptail = os.path.join('aaa','bbb','ccc') self.ppath = os.path.join(self.nget.tmpdir,self.ptail) def tearDown(self): self.servers.stop() self.nget.clean_all() def test_p_mkdir(self): self.vfailIf(self.nget_run('yes','-g test -p '+self.ppath+' -r foo')) self.verifyoutput('0001', tmpdir=self.ppath) def test_p_mkdirmaxcreate(self): self.vfailUnlessExitstatus(self.nget_run('no','-g test -p '+self.ppath+' -r foo'), 4) self.vfailUnlessExitstatus(self.nget_run('0','-g test -p '+self.ppath+' -r foo'), 4) self.vfailUnlessExitstatus(self.nget_run('2','-g test -p '+self.ppath+' -r foo'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 0) self.vfailIf(self.nget_run('3','-g test -p '+self.ppath+' -r foo')) self.verifyoutput('0001', tmpdir=self.ppath) def test_p_relative_mkdir(self): d = os.getcwd() try: os.chdir(self.nget.tmpdir) self.vfailIf(self.nget_run('yes','-g test -p '+self.ptail+' -r foo')) finally: os.chdir(d) self.verifyoutput('0001', tmpdir=self.ppath) class MakedirsTestCase(TestCase, MakedirsTestCase_base): def setUp(self): MakedirsTestCase_base.setUp(self) def tearDown(self): MakedirsTestCase_base.tearDown(self) def nget_run(self, m, cmd): return self.nget.run('-m '+m+' '+cmd) class MakedirsCfgTestCase(TestCase, MakedirsTestCase_base): def setUp(self): MakedirsTestCase_base.setUp(self) def tearDown(self): MakedirsTestCase_base.tearDown(self) def nget_run(self, m, cmd): self.nget.writerc(self.servers.servers, options={'makedirs':m}) return self.nget.run(cmd) class MakedirsAskTestCase(TestCase, MakedirsTestCase_base): def setUp(self): MakedirsTestCase_base.setUp(self) def tearDown(self): MakedirsTestCase_base.tearDown(self) def nget_run(self, m, cmd): status,output = self.nget.run_getoutput('-m ask '+cmd, pre='echo %s |'%m) print output self.failUnless(output.count("do you want to make dir")>0) return status def test_p_mkdir2(self): self.vfailIf(self.nget_run('y','-g test -p '+self.ppath+' -r foo')) self.verifyoutput('0001', tmpdir=self.ppath) class MetaGrouping_RetrieveTest_base(DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() def tearDown(self): self.servers.stop() self.nget.clean_all() def test_r(self): self.addarticles('0002', 'uuencode_multi3', groups=["test"]) self.addarticles('0001', 'uuencode_single', groups=["test2"]) self.addarticles('0004', 'input', groups=["test3"]) self.addarticles('refs01', 'input', groups=["test"]) self.addarticles('refs02', 'input', groups=["test2"]) self.vfailIf(self.nget_run('-g test,test2,test3 -ir .')) self.verifyoutput(['0002','0001','0004','refs01','refs02']) def test_r_dupemerge(self): self.addarticles('0002', 'uuencode_multi3', groups=["test","test2"]) self.addarticles('0001', 'uuencode_single', groups=["test2","test3"]) self.addarticles('0004', 'input', groups=["test3","test"]) self.addarticles('refs01', 'input', groups=["test","test2"]) self.addarticles('refs02', 'input', groups=["test2","test3"]) self.vfailIf(self.nget_run('-D -g test,test2,test3 -ir .')) self.verifyoutput(['0002','0001','0004','refs01','refs02']) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 7) def test_r_partmerge(self): self.addarticle_toserver('0001', 'yenc_multi', '001', self.servers.servers[0], groups=["test2"]) self.addarticle_toserver('0001', 'yenc_multi', '002', self.servers.servers[0], groups=["test3"]) self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0], groups=["test"]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0], groups=["test2"]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0], groups=["test3"]) self.addarticles('0004', 'input', groups=["test3"]) self.addarticles('refs01', 'input', groups=["test"]) self.addarticles('refs02', 'input', groups=["test2"]) self.vfailIf(self.nget_run('-g test,test2,test3 -i -r joy -r testfile')) self.verifyoutput(['0002','0001']) def test_r_dupepartmerge(self): self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0], groups=["test","test2"]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0], groups=["test2","test3"]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0], groups=["test3","test"]) self.addarticles('0001', 'uuencode_single', groups=["test2","test3"]) self.addarticles('0004', 'input', groups=["test3","test"]) self.addarticles('refs01', 'input', groups=["test","test2"]) self.addarticles('refs02', 'input', groups=["test2","test3"]) self.vfailIf(self.nget_run('-D -g test,test2,test3 -ir joy')) self.verifyoutput(['0002']) def test_r_samerge(self): #note this func is copied in MetaGrouping_LiteRetrieveTestCase self.addarticle_toserver('mergesa01', 'input', '001', self.servers.servers[0], groups=["test"]) self.addarticle_toserver('mergesa01', 'input', '002', self.servers.servers[0], groups=["test2"]) self.vfailIf(self.nget_run('-g test,test2 -ir .')) self.verifyoutput(['mergesa01']) class MetaGrouping_NoCacheRetrieveTestCase(TestCase, MetaGrouping_RetrieveTest_base): def setUp(self): MetaGrouping_RetrieveTest_base.setUp(self) def tearDown(self): if self.servers.servers[0].count("group")>0: assert self.servers.servers[0].count("xpat")>0 MetaGrouping_RetrieveTest_base.tearDown(self) def nget_run(self, cmd): newcmd = re.sub('-[Gg] ', '-x ', cmd) return self.nget.run(newcmd) class MetaGrouping_NoCacheTabSepRetrieveTestCase(MetaGrouping_NoCacheRetrieveTestCase): def setUp(self): MetaGrouping_NoCacheRetrieveTestCase.setUp(self) self.servers.servers[0].xpat_field_sep = '\t' class MetaGrouping_CacheRetrieveTestCase(TestCase, MetaGrouping_RetrieveTest_base): def setUp(self): MetaGrouping_RetrieveTest_base.setUp(self) def tearDown(self): assert self.servers.servers[0].count("xpat")==0 MetaGrouping_RetrieveTest_base.tearDown(self) def nget_run(self, cmd): x = re.match("^(.*)-g *([^ ]+) *(.*)$", cmd) if x: groups = x.group(2).split(',') cmd = x.group(1) + '-g ' + ' -g '.join(groups) + ' -G ' + x.group(2) + ' ' + x.group(3) return self.nget.run(cmd) def test_r_allcached(self): self.addarticles('0002', 'uuencode_multi3', groups=["test"]) self.addarticles('0001', 'uuencode_single', groups=["test2"]) self.addarticles('0004', 'input', groups=["test3"]) self.addarticles('refs01', 'input', groups=["test"]) self.addarticles('refs02', 'input', groups=["test2"]) self.vfailIf(self.nget.run('-g test,test2,test3')) self.vfailIf(self.nget.run('-G "*" -ir .')) self.verifyoutput(['0002','0001','0004','refs01','refs02']) #test that -G* uses the correct dir to look for the cache files. os.environ['NGETCACHE'] = self.nget.tmpdir try: self.vfailUnlessExitstatus(self.nget.run('-G "*" -Dir .'), 4) finally: os.environ['NGETCACHE'] = '' del os.environ['NGETCACHE'] self.nget.writerc(self.servers.servers, options={'cachedir':self.nget.tmpdir}) self.vfailUnlessExitstatus(self.nget.run('-G "*" -Dir .'), 4) class MetaGrouping_RetrieveTestCase(TestCase, MetaGrouping_RetrieveTest_base): def setUp(self): MetaGrouping_RetrieveTest_base.setUp(self) def tearDown(self): assert self.servers.servers[0].count("xpat")==0 MetaGrouping_RetrieveTest_base.tearDown(self) def nget_run(self, cmd): return self.nget.run(cmd) class MetaGrouping_LiteRetrieveTestCase(TestCase, MetaGrouping_RetrieveTest_base): def setUp(self): MetaGrouping_RetrieveTest_base.setUp(self) def tearDown(self): assert self.servers.servers[0].count("xpat")==0 MetaGrouping_RetrieveTest_base.tearDown(self) def nget_run(self, cmd): litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run('-w %s %s'%(litelist,cmd))) self.vfailIf(self.nget.runlite(litelist)) return self.nget.run('-N %s'%cmd) def test_r_samerge(self): #note this func is copied from MetaGrouping_RetrieveTest_base self.addarticle_toserver('mergesa01', 'input', '001', self.servers.servers[0], groups=["test"]) self.addarticle_toserver('mergesa01', 'input', '002', self.servers.servers[0], groups=["test2"]) self.vfailIf(self.nget_run('-g test,test2 -r .')) #Kind of ugly, but we have to run ngetlite again to get the second article, since they both have the same tempname. Dunno what should/could really be done about that. self.vfailIf(self.nget_run('-G test,test2 -r .')) self.verifyoutput(['mergesa01']) class CacheLocTestCase(TestCase, DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.addarticles('0001', 'uuencode_single') self.addarticles('0002', 'uuencode_multi') self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() def tearDown(self): self.servers.stop() self.nget.clean_all() def do_test_cache_location(self, tmp2dir): def getrcfilelist(d=self.nget.rcdir): rcfiles = os.listdir(d) rcfiles.sort() return rcfiles rcfiles = getrcfilelist() self.nget.run('-X -Tr .') self.nget.run('-x test -r joy') self.verifyoutput(['0002']) self.nget.run('-a') self.nget.run('-g test') self.nget.run('-G test -r testfile') self.vfailUnlessEqual(rcfiles, getrcfilelist()) self.verifyoutput(['0001','0002']) def test_env_ngetcache(self): tmp2dir = os.path.join(self.nget.rcdir, 'tmp2') os.mkdir(tmp2dir) os.environ['NGETCACHE'] = tmp2dir try: self.do_test_cache_location(tmp2dir) finally: os.environ['NGETCACHE'] = '' del os.environ['NGETCACHE'] def test_rc_cachedir(self): tmp2dir = os.path.join(self.nget.rcdir, 'tmp2') os.mkdir(tmp2dir) self.nget.writerc(self.servers.servers, options={'cachedir':tmp2dir}) self.do_test_cache_location(tmp2dir) class MiscTestCase(TestCase, DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.addarticles('0001', 'uuencode_single') #self.servers.start() self.nget = util.TestNGet(ngetexe, self.servers.servers) def tearDown(self): #self.servers.stop() self.verifyoutput([]) self.nget.clean_all() def verify_help(self, output): lines = output.splitlines() preusage=usage=options=None for i in range(0,len(lines)): if lines[i].count("USAGE"): preusage=lines[0:i] usage=lines[i] options=lines[i+1:] self.failUnless(preusage and usage and options) self.failUnless([l.count("nget v") for l in preusage]) optre=re.compile(r"^(-\S)?\s+(--\S+)?\s+(.+)$") for l in options: x=optre.match(l) self.failUnless(x, l) self.failUnless(x.group(3), l) self.failUnless(x.group(1) or x.group(2), l) x = re.search("copyright\s+(.+)-(.+)\s+Matthew Mueller", output, re.I) self.failUnless(x) self.vfailUnlessEqual(x.group(2), time.strftime("%Y"), "copyright needs updating") def test_noargs(self): output = self.vfailIf_getoutput(self.nget.run_getoutput('', dopath=0)) self.verify_help(output) def test_help(self): output = self.vfailIf_getoutput(self.nget.run_getoutput('--help')) self.verify_help(output) class FatalUserErrorsTestCase(TestCase, DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'fatal_user_errors':1}) self.addarticles('0001', 'uuencode_single') self.servers.start() def tearDown(self): self.servers.stop() self.nget.clean_all() def test_badpath(self): self.vfailUnlessExitstatus(self.nget.run('-p badpath -g test'), 4) self.vfailUnlessExitstatus(self.nget.run('-P badpath -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_baddupepath(self): self.vfailUnlessExitstatus(self.nget.run('--dupepath badpath -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_badhost(self): self.vfailUnlessExitstatus(self.nget.run('-h badhost -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_available_badregex(self): self.vfailUnlessExitstatus(self.nget.run('-A -Tr "*" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expavailable_badexp(self): self.vfailUnlessExitstatus(self.nget.run('-A -TR foo -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expavailable_badregex(self): self.vfailUnlessExitstatus(self.nget.run('-A -TR "group * ==" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_xavailable_badregex(self): self.vfailUnlessExitstatus(self.nget.run('-X -Tr "*" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_retrieve_badregex(self): self.vfailUnlessExitstatus(self.nget.run('-Gtest -r "*" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_retrieve_nogroup(self): self.vfailUnlessExitstatus(self.nget.run('-r . -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expretrieve_nogroup(self): self.vfailUnlessExitstatus(self.nget.run('-R "subject . ==" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expretrieve_badexp(self): self.vfailUnlessExitstatus(self.nget.run('-Gtest -R foo -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expretrieve_badexp2(self): self.vfailUnlessExitstatus(self.nget.run('-Gtest -R "lines 0" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expretrieve_badexp_join_emptystack(self): self.vfailUnlessExitstatus(self.nget.run('-Gtest -R "||" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expretrieve_badexp_join_singleitem(self): self.vfailUnlessExitstatus(self.nget.run('-Gtest -R "lines 0 >= ||" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expretrieve_badexp_nojoin(self): self.vfailUnlessExitstatus(self.nget.run('-Gtest -R "lines 0 >= lines 10 <" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_expretrieve_badregex(self): self.vfailUnlessExitstatus(self.nget.run('-Gtest -R "subject * ==" -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_flush_nogroup(self): self.vfailUnlessExitstatus(self.nget.run('-F host0 -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_flush_badserver(self): self.vfailUnlessExitstatus(self.nget.run('-g test -F badserv -r .'), 4) self.verifyoutput([]) def test_flush_xgroup(self): self.vfailUnlessExitstatus(self.nget.run('-x test -F host0 -r .'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_flush_available_badserver(self): self.vfailUnlessExitstatus(self.nget.run('-A -F badserv -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_bad_arg(self): self.vfailUnlessExitstatus(self.nget.run('badarg -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_bad_option(self): self.vfailUnlessExitstatus(self.nget.run('--badopt -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_list_nonexistant(self): self.vfailUnlessExitstatus(self.nget.run('-@ foo -g test'), 4) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) class UserErrorTestCase(TestCase, DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.addarticles('0001', 'uuencode_single') self.servers.start() self.nget = util.TestNGet(ngetexe, self.servers.servers) def tearDown(self): self.servers.stop() self.nget.clean_all() def test_silly_options(self): args = "-mfoo --test-multiserver=foo --fullxover=-2 --text=foo --save-binary-info=foo --tries=-2 --delay=-1 --timeout=0 --limit=-1 --maxlines=-2 -dz" output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput(args + ' -g test -r .'), 4) self.verifyoutput('0001') self.vfailUnlessEqual(output.count("ERRORS: %i user"%(args.count(' ')+1)), 1) def test_missing_optarg(self): self.vfailUnlessExitstatus(self.nget.run('-g'), 4) class ConfigErrorTestCase(TestCase, DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.addarticles('0001', 'uuencode_single') self.servers.start() def tearDown(self): self.servers.stop() self.nget.clean_all() def test_config_file_silly_values(self): options={'debug':-1,'quiet':-1,'tries':0,'limit':-1,'delay':-1,'timeout':0,'case':-1,'complete':-1,'dupeidcheck':-1,'dupefilecheck':-1,'dupefilemark':-1,'tempshortnames':-1,'save_binary_info':-1,'autopar':-1,'test_multiserver':'foo','text':'foo','makedirs':-1, 'usegz':-20,'fullxover':-1,'fatal_user_errors':-1,'autopar_optimistic':-1,'unequal_line_error':-1,'maxstreaming':-1,'maxconnections':-2,'idletimeout':0,'penaltystrikes':-2,'initialpenalty':0,'penaltymultiplier':0, 'fooobaar':'baz'} hostoptions={'idletimeout':0,'fullxover':-1,'maxstreaming':-1,'linelenience':'foo', 'helloworld':'!'} self.nget = util.TestNGet(ngetexe, self.servers.servers, options=options, hostoptions=[hostoptions]) output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 4) self.verifyoutput('0001') self.vfailUnlessEqual(output.count("ERRORS: %i user"%(len(options)+len(hostoptions))), 1) def test_empty_and_invalid_values(self): self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'debug':'foo','tries':''}) output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 4) self.verifyoutput('0001') self.vfailUnlessEqual(output.count("ERRORS: 2 user"), 1) def test_unbalanced_section(self): self.nget = util.TestNGet(ngetexe, self.servers.servers, extratail="}\n") output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 4) self.verifyoutput('0001') self.vfailUnlessEqual(output.count("ERRORS: 1 user"), 1) def test_unbalanced_section2(self): self.nget = util.TestNGet(ngetexe, self.servers.servers, extratail="{galias\n") output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 4) self.verifyoutput('0001') self.vfailUnlessEqual(output.count("ERRORS: 1 user"), 1) def test_dupe(self): self.nget = util.TestNGet(ngetexe, self.servers.servers, extratail="fullxover=1\nfullxover=1\n{galias\n}\n{galias\n}\n") output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 4) self.verifyoutput('0001') self.vfailUnlessEqual(output.count("ERRORS: 2 user"), 1) def test_junk_and_emptylines(self): self.nget = util.TestNGet(ngetexe, self.servers.servers, extratail="foo\n\n\n\nbar\n") output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 4) self.verifyoutput('0001') self.vfailUnlessEqual(output.count("ERRORS: 2 user"), 1) def test_unused(self): self.nget = util.TestNGet(ngetexe, self.servers.servers, extratail="foo=1\n{bar\n}\n") output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 4) self.verifyoutput('0001') self.vfailUnlessEqual(output.count("ERRORS: 2 user"), 1) def test_NGETRC(self): self.nget = util.TestNGet(ngetexe, self.servers.servers, rcfilename='_config1') rc=os.path.join(self.nget.rcdir,'_config1') output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 128) #is 128 really the best exit status for this? self.failUnless(output.count("ngetrc")) os.environ['NGETRC'] = rc try: self.vfailIf(self.nget.run('-g test -r .')) self.verifyoutput('0001') finally: os.environ['NGETRC'] = "" del os.environ['NGETRC'] def test_bad_NGETRC(self): os.environ['NGETRC'] = "foobar1" try: self.nget = util.TestNGet(ngetexe, self.servers.servers) output = self.vfailUnlessExitstatus_getoutput(self.nget.run_getoutput('-g test -r .'), 128) #is 128 really the best exit status for this? finally: os.environ['NGETRC'] = "" del os.environ['NGETRC'] self.failUnless(output.count("foobar1")) class XoverTest_base(DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(1) self.servers.start() def tearDown(self): self.servers.stop() self.nget.clean_all() self.fxnget.clean_all() self.fx2nget.clean_all() def verifynonewfiles(self): nf = os.listdir(self.nget.tmpdir) fxnf = os.listdir(self.fxnget.tmpdir) fx2nf = os.listdir(self.fx2nget.tmpdir) self.failIf(nf or fxnf or fx2nf, "new files: %s %s %s"%(nf, fxnf, fx2nf)) def run_all(self, args): self.vfailIf(self.nget.run(args)) self.vfailIf(self.fxnget.run(args)) self.vfailIf(self.fx2nget.run(args)) def verifyoutput_all(self, testnum): self.verifyoutput(testnum) self.verifyoutput(testnum, tmpdir=self.fxnget.tmpdir) self.verifyoutput(testnum, tmpdir=self.fx2nget.tmpdir) def test_newarticle(self): self.addarticle_toserver('0002', 'uuencode_multi', '001', self.servers.servers[0]) self.run_all("-g test -r .") self.verifynonewfiles() self.addarticle_toserver('0002', 'uuencode_multi', '002', self.servers.servers[0]) self.run_all("-g test -r .") self.verifyoutput_all('0002') def test_newarticle_reverse(self): self.addarticle_toserver('0002', 'uuencode_multi', '002', self.servers.servers[0]) self.run_all("-g test -r .") self.verifynonewfiles() self.addarticle_toserver('0002', 'uuencode_multi', '001', self.servers.servers[0]) self.run_all("-g test -r .") self.verifyoutput_all('0002') def test_oldarticle(self): self.addarticle_toserver('0002', 'uuencode_multi', '001', self.servers.servers[0], anum=2) self.run_all("-g test -r .") self.verifynonewfiles() self.addarticle_toserver('0002', 'uuencode_multi', '002', self.servers.servers[0], anum=1) self.run_all("-g test -r .") self.verifyoutput_all('0002') def test_insertedarticle(self): self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0], anum=1) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0], anum=3) self.run_all("-g test -r .") self.verifynonewfiles() self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0], anum=2) self.vfailIf(self.nget.run("-g test -r .")) self.verifynonewfiles() #fullxover=0 should not be able to find new article self.vfailIf(self.fxnget.run("-g test -r .")) self.vfailIf(self.fx2nget.run("-g test -r .")) self.verifyoutput('0002', tmpdir=self.fxnget.tmpdir) self.verifyoutput('0002', tmpdir=self.fx2nget.tmpdir) def test_fullxover2_listgroup_appropriateness(self): self.addarticles('0001', 'uuencode_single') self.vfailIf(self.fx2nget.run("-g test")) self.vfailUnlessEqual(self.servers.servers[0].count("listgroup"), 0) #shouldn't do listgroup on first update of group self.vfailIf(self.fx2nget.run("-g test")) self.vfailUnlessEqual(self.servers.servers[0].count("listgroup"), 1) #should do listgroup on second update of group self.addarticles('0002', 'uuencode_multi') self.rmarticles('0001', 'uuencode_single') self.vfailIf(self.fx2nget.run("-g test -r .")) self.vfailUnlessEqual(self.servers.servers[0].count("listgroup"), 1) #shouldn't do listgroup if all cached anums are lower than all available ones self.verifyoutput('0002', tmpdir=self.fx2nget.tmpdir) self.vfailIf(self.fx2nget.run("-g test")) self.vfailUnlessEqual(self.servers.servers[0].count("listgroup"), 2) def test_removedarticle(self): self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0], anum=1) article = self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0], anum=2) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0], anum=3) self.run_all("-g test") self.verifynonewfiles() self.servers.servers[0].rmarticle(article.mid) self.vfailIf(self.fx2nget.run("-g test -r .")) self.verifynonewfiles()#fullxover=2 should notice the missing article and thus not try to get the now incomplete file self.vfailUnlessExitstatus(self.nget.run("-g test -r ."), 8) self.vfailUnlessExitstatus(self.fxnget.run("-g test -r ."), 8) def test_largearticlenumbers(self): self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0], anum=1) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0], anum=2147483647) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0], anum=4294967295L) self.run_all("-g test -r .") self.verifyoutput_all('0002') def test_lite_largearticlenumbers(self): self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0], anum=1) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0], anum=2147483647) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0], anum=4294967295L) litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.verifynonewfiles() self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') class XoverTestCase(TestCase, XoverTest_base): def setUp(self): XoverTest_base.setUp(self) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'fullxover':0}) self.fxnget = util.TestNGet(ngetexe, self.servers.servers, options={'fullxover':1}) self.fx2nget = util.TestNGet(ngetexe, self.servers.servers, options={'fullxover':2}) def tearDown(self): XoverTest_base.tearDown(self) class CmdlineXoverTestCase(TestCase, XoverTest_base): def setUp(self): XoverTest_base.setUp(self) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.fxnget = util.TestNGet(ngetexe, self.servers.servers) self.fx2nget = util.TestNGet(ngetexe, self.servers.servers) def RunnerFactory(nget, fullxover): oldrun = nget.run def runner(args): return oldrun("--fullxover=%i %s"%(fullxover, args)) return runner self.nget.run = RunnerFactory(self.nget, 0) self.fxnget.run = RunnerFactory(self.fxnget, 1) self.fx2nget.run = RunnerFactory(self.fx2nget, 2) def tearDown(self): XoverTest_base.tearDown(self) class UpdateTestCase(TestCase, DecodeTest_base): def setUp(self): self.servers = nntpd.NNTPD_Master(2) self.servers.start() self.nget = util.TestNGet(ngetexe, self.servers.servers) def tearDown(self): self.servers.stop() self.nget.clean_all() def test_addnew(self): self.addarticle_toserver('0002', 'uuencode_multi', '001', self.servers.servers[0]) output = self.vfailIf_getoutput(self.nget.run_getoutput('-g test -T -i -R "updateage 1s <="')) self.vfailUnlessEqual(output.count('joystick.jpg'),1) time.sleep(2) output = self.vfailIf_getoutput(self.nget.run_getoutput('-G test -T -i -R "updateage 1s <="')) self.vfailUnlessEqual(output.count('joystick.jpg'),0) self.addarticle_toserver('0002', 'uuencode_multi', '002', self.servers.servers[1]) output = self.vfailIf_getoutput(self.nget.run_getoutput('-g test -T -R "updateage 1s <="')) self.vfailUnlessEqual(output.count('joystick.jpg'),1) def test_addsamenoupdate(self): self.addarticle_toserver('0002', 'uuencode_multi', '001', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi', '002', self.servers.servers[1]) output = self.vfailIf_getoutput(self.nget.run_getoutput('-g test -T -R "updateage 1s <="')) self.vfailUnlessEqual(output.count('joystick.jpg'),1) time.sleep(2) output = self.vfailIf_getoutput(self.nget.run_getoutput('-G test -T -R "updateage 1s <="')) self.vfailUnlessEqual(output.count('joystick.jpg'),0) self.addarticle_toserver('0002', 'uuencode_multi', '001', self.servers.servers[1]) self.addarticle_toserver('0002', 'uuencode_multi', '002', self.servers.servers[0]) output = self.vfailIf_getoutput(self.nget.run_getoutput('-g test -T -R "updateage 1s <="')) self.vfailUnlessEqual(output.count('joystick.jpg'),0) class CounterMixin: def __init__(self): self.__Count = {} self.__Limit = {} def limitReached(self, name): if self.__Count.get(name,0) >= self.__Limit.get(name,0): return 1 self.__Count[name] = self.__Count.get(name,0) + 1 return 0 def setLimit(self, name, val): self.__Limit[name] = val def resetLimit(self, name): self.__Limit[name] = 0 class NoDateCmdNNTPRequestHandler(nntpd.NNTPRequestHandler): cmd_date=None class NoListNewsgroupsCmdNNTPRequestHandler(nntpd.NNTPRequestHandler): cmd_list_newsgroups=None class ExtraneousListNewsgroupsNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_list_newsgroups(self, args): self.nwrite("215 information follows") self.nwrite("%s %s"%("foo.bar.group", "this is the foo.bar.desc. Whee")) self.nwrite(".") class DelayBeforeWriteNNTPRequestHandler(nntpd.NNTPRequestHandler): def nwrite(self, s): if getattr(self.server, '_do_delay', 0): time.sleep(2) nntpd.NNTPRequestHandler.nwrite(self, s) class DelayBeforeCommandNNTPRequestHandler(nntpd.NNTPRequestHandler): def call_command(self, *args): time.sleep(1) nntpd.NNTPRequestHandler.call_command(self, *args) class DelayBeforeArticleNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_article(self, args): time.sleep(1) nntpd.NNTPRequestHandler.cmd_article(self, args) class DelayAfterArticle2NNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_article(self, args): nntpd.NNTPRequestHandler.cmd_article(self, args) time.sleep(2) class TemporarilyUnavailableNNTPRequestHandler(nntpd.NNTPRequestHandler): def handle(self): self.server.incrcount("_400conns") self.nwrite("400 Service temporarily unavailable") class ChangingRequestHandlerNNTPTCPServer(nntpd.NNTPTCPServer, CounterMixin): def __init__(self, addr, *handlers): CounterMixin.__init__(self) nntpd.NNTPTCPServer.__init__(self, addr, handlers[0]) self.__handlers = handlers[1:] def finish_request(self, *args): if self.limitReached("handle"): self.RequestHandlerClass = self.__handlers[0] self.__handlers = self.__handlers[1:] if self.__handlers: self.resetLimit("handle") nntpd.NNTPTCPServer.finish_request(self, *args) class DiscoingNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_article(self, args): nntpd.NNTPRequestHandler.cmd_article(self, args) raise nntpd.NNTPDisconnect class ErrorDiscoingNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_article(self, args): nntpd.NNTPRequestHandler.cmd_article(self, args) raise nntpd.NNTPDisconnect("503 You are now disconnected. Have a nice day.") class Article400DiscoingNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_article(self, args): raise nntpd.NNTPDisconnect("400 BOFH hits you for 137 damage. You die.") class OverArticleQuotaDiscoingNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_article(self, args): raise nntpd.NNTPDisconnect("502 Over quota. Goodbye.") class OverArticleQuotaShutdowningNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_article(self, args): self.nwrite("502 Over quota. Shutdown.") #If how is 0, further receives are disallowed. If how is 1, further sends are disallowed. If how is 2, further sends and receives are disallowed. self.connection.shutdown(1) while 1: rcmd = self.rfile.readline() if not rcmd: raise nntpd.NNTPDisconnect class OverXOverQuotaDiscoingNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_xover(self, args): raise nntpd.NNTPDisconnect("502 Over quota. Goodbye.") class OverArticleQuotaNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_article(self, args): raise nntpd.NNTPError(502, "Over quota.") class OverXOverQuotaNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_xover(self, args): raise nntpd.NNTPError(502, "Over quota.") class XOver1LineDiscoingNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_xover(self, args): self.discocountdown = 2 #allow a single xover result to pass before disconnecting nntpd.NNTPRequestHandler.cmd_xover(self, args) def nwrite(self, s): if hasattr(self, 'discocountdown'): if self.discocountdown==0: raise nntpd.NNTPDisconnect self.discocountdown -= 1 nntpd.NNTPRequestHandler.nwrite(self, s) class _XOverFinisher(Exception): pass class XOverStreamingDropsDataNNTPRequestHandler(nntpd.NNTPRequestHandler): def cmd_xover(self, args): time.sleep(0.2)#ensure the client has time for its streamed commands to get here. import select rf,wf,ef=select.select([self.rfile], [], [], 0) if rf: #if client is streaming, do the screw up stuff. self.discocountdown = 2 #allow a single xover result to pass before disconnecting elif hasattr(self,'discocountdown'): del self.discocountdown try: nntpd.NNTPRequestHandler.cmd_xover(self, args) except _XOverFinisher: pass def nwrite(self, s): if hasattr(self, 'discocountdown'): if self.discocountdown==0: raise _XOverFinisher self.discocountdown -= 1 nntpd.NNTPRequestHandler.nwrite(self, s) class ConnectionTestCase(TestCase, DecodeTest_base): def tearDown(self): if hasattr(self, 'servers'): self.servers.stop() if hasattr(self, 'nget'): self.nget.clean_all() def test_DeadServer(self): servers = [nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)] self.nget = util.TestNGet(ngetexe, servers) servers[0].server_close() self.vfailUnlessExitstatus(self.nget.run("-g test -r ."), 16, "nget process did not detect connection error") def test_DeadServerRetr(self): self.servers = nntpd.NNTPD_Master(1) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test")) self.servers.stop() del self.servers self.vfailUnlessExitstatus(self.nget.run("-G test -r ."), 8, "nget process did not detect connection error") def test_DeadServerPenalization(self): self.servers = nntpd.NNTPD_Master(1) deadservers = nntpd.NNTPD_Master(1) #by setting tries and maxconnections to 1, we can observe how many times nget tried to connect to the dead server by how many times it had to (re)connect to the good server self.nget = util.TestNGet(ngetexe, deadservers.servers+self.servers.servers, priorities=[3, 1], options={'tries':1, 'penaltystrikes':2, 'maxconnections':1}) self.servers.start() deadservers.start() self.addarticles('0002', 'uuencode_multi3') self.addarticles('0002', 'uuencode_multi3', deadservers.servers) self.vfailIf(self.nget.run("-g test")) deadservers.stop() self.vfailIf(self.nget.run("-G test -r .")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) self.verifyoutput('0002') def test_SleepingServerPenalization(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), DelayBeforeWriteNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, priorities=[3,1], options={'tries':1, 'timeout':1, 'penaltystrikes':2, 'maxconnections':1}) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test")) self.servers.servers[0]._do_delay=1 self.vfailIf(self.nget.run("-G test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 3) def test_OverXOverQuotaDiscoingServerPenalization(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverXOverQuotaDiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':1, 'penaltystrikes':2, 'maxconnections':1}) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test -g test -g test -g test -g test")) self.vfailUnlessEqual(self.servers.servers[0].count("group"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("group"), 5) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) def test_OverXOverQuotaServerPenalization(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverXOverQuotaNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':1, 'penaltystrikes':2}) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test -g test -g test -g test -g test")) self.vfailUnlessEqual(self.servers.servers[0].count("group"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("group"), 5) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) def test_OverArticleQuotaDiscoingServerPenalization(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverArticleQuotaDiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, priorities=[3,1], options={'tries':1, 'penaltystrikes':2, 'maxconnections':1}) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test")) self.vfailIf(self.nget.run("-G test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 3) def test_OverArticleQuotaShutdowningServerPenalization(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverArticleQuotaShutdowningNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, priorities=[3,1], options={'tries':1, 'penaltystrikes':2, 'maxconnections':1}) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test")) self.vfailIf(self.nget.run("-G test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 3) def test_OverArticleQuotaServerPenalization(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverArticleQuotaNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, priorities=[3,1], options={'tries':1, 'penaltystrikes':2}) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) def test_lite_OverArticleQuotaDiscoingServerHandling(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverArticleQuotaDiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, priorities=[3,1], options={'tries':1, 'penaltystrikes':2, 'maxconnections':1}) self.servers.start() self.addarticles('0002','uuencode_multi3') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 4) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 4) def test_lite_OverArticleQuotaDiscoingSingleServerHandling(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverArticleQuotaDiscoingNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':1, 'penaltystrikes':2}) self.servers.start() self.addarticles('0002','uuencode_multi3') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput([]) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 4) def test_lite_OverArticleQuotaShutdowningSingleServerHandling(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverArticleQuotaShutdowningNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':1, 'penaltystrikes':2}) self.servers.start() self.addarticles('0002','uuencode_multi3') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput([]) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 4) def test_lite_OverArticleQuotaServerHandling(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverArticleQuotaNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, priorities=[3,1], options={'tries':1, 'penaltystrikes':2}) self.servers.start() self.addarticles('0002','uuencode_multi3') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 4) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 4) def test_lite_OverArticleQuotaSingleServerHandling(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), OverArticleQuotaNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':1, 'penaltystrikes':2}) self.servers.start() self.addarticles('0002','uuencode_multi3') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput([]) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) def test_TemporarilyUnavailableNNTPServer(self): self.servers = nntpd.NNTPD_Master([ChangingRequestHandlerNNTPTCPServer((nntpd.serveraddr,0), TemporarilyUnavailableNNTPRequestHandler, nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':3}) self.servers.servers[0].setLimit("handle",2) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("_400conns"), 2) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) def test_TemporarilyUnavailableNNTPServerPenalty(self): self.servers = nntpd.NNTPD_Master([ChangingRequestHandlerNNTPTCPServer((nntpd.serveraddr,0), TemporarilyUnavailableNNTPRequestHandler, nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':3,'penaltystrikes':2}) self.servers.servers[0].setLimit("handle",2) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailUnlessExitstatus(self.nget.run("-g test -r ."), 16) self.verifyoutput('') self.vfailUnlessEqual(self.servers.servers[0].count("_400conns"), 2) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) def test_lite_TemporarilyUnavailableNNTPServer(self): self.servers = nntpd.NNTPD_Master([ChangingRequestHandlerNNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler, TemporarilyUnavailableNNTPRequestHandler, nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.servers[0].setLimit("handle",1) self.addarticles('0002','uuencode_multi3') self.servers.start() litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("article"), 3) self.vfailUnlessEqual(self.servers.servers[0].count("_400conns"), 1) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) def test_Article400DiscoingNNTPServer(self): self.servers = nntpd.NNTPD_Master([ChangingRequestHandlerNNTPTCPServer((nntpd.serveraddr,0), Article400DiscoingNNTPRequestHandler, nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':3}) self.servers.servers[0].setLimit("handle",2) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) def test_Article400DiscoingNNTPServerPenalty(self): self.servers = nntpd.NNTPD_Master([ChangingRequestHandlerNNTPTCPServer((nntpd.serveraddr,0), Article400DiscoingNNTPRequestHandler, nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':3,'penaltystrikes':2}) self.servers.servers[0].setLimit("handle",2) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailUnlessExitstatus(self.nget.run("-g test -r ."), 8) self.verifyoutput('') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) def test_lite_Article400DiscoingNNTPServer(self): self.servers = nntpd.NNTPD_Master([ChangingRequestHandlerNNTPTCPServer((nntpd.serveraddr,0), Article400DiscoingNNTPRequestHandler, nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.servers[0].setLimit("handle",3) self.servers.start() self.addarticles('0002','uuencode_multi3') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 4) self.vfailUnlessEqual(self.servers.servers[0].count("article"), 5) def test_NoPenalty_g(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'maxconnections':1, 'penaltystrikes':1}) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test -g test -g test")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) def test_NoPenalty_g_NoGroup(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'maxconnections':1, 'penaltystrikes':1}) self.servers.start() self.vfailUnlessExitstatus(self.nget.run("-g test -g test -g test"), 16) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) def test_NoPenalty_r(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'maxconnections':1, 'penaltystrikes':1}) self.servers.start() self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[1]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0]) self.vfailIf(self.nget.run("-g test")) self.vfailIf(self.nget.run("-G test -r .")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) self.verifyoutput('0002') def test_NoPenalty_r_Expired(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'maxconnections':1, 'penaltystrikes':1}) self.servers.start() self.addarticles('0001', 'uuencode_single') self.addarticles('0002', 'uuencode_multi3') self.addarticles('0004', 'input') self.vfailIf(self.nget.run("-g test")) self.rmarticles('0001', 'uuencode_single') self.rmarticles('0002', 'uuencode_multi3') self.rmarticles('0004', 'input') self.vfailUnlessExitstatus(self.nget.run("-G test -r ."), 8) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 3) def test_OneLiveServer(self): self.servers = nntpd.NNTPD_Master(1) deadserver = nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler) self.nget = util.TestNGet(ngetexe, [deadserver]+self.servers.servers+[deadserver], priorities=[3, 1, 3]) deadserver.server_close() self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') def test_OneLiveServerRetr(self): self.servers = nntpd.NNTPD_Master(1) deadservers = nntpd.NNTPD_Master(1) self.nget = util.TestNGet(ngetexe, deadservers.servers+self.servers.servers+deadservers.servers, priorities=[3, 1, 3]) deadservers.start() self.servers.start() self.addarticles('0002', 'uuencode_multi') self.addarticles('0002', 'uuencode_multi', deadservers.servers) self.vfailIf(self.nget.run("-g test")) deadservers.stop() self.vfailIf(self.nget.run("-G test -r .")) self.verifyoutput('0002') def test_DiscoServer(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), DiscoingNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) def test_TwoDiscoServers(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), DiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), DiscoingNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') def test_ForceDiscoServer(self): "Test if errors are handled correctly in article retrieval with force_host" self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), DiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), DiscoingNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test")) self.vfailIf(self.nget.run("-h host1 -G test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 3) def test_TwoXOverDiscoServers(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), XOver1LineDiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), XOver1LineDiscoingNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':3}) self.servers.start() self.addarticles('0001', 'yenc_multi') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0001') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 3) def test_ForceXOverDiscoServer(self): "Test if errors are handled correctly in header retrieval with force_host" self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), XOver1LineDiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), XOver1LineDiscoingNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'tries':3}) self.servers.start() self.addarticles('0001', 'yenc_multi') self.vfailIf(self.nget.run("-h host1 -g test")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 3) self.vfailIf(self.nget.run("-G test -r .")) self.verifyoutput('0001') def test_ForceWrongServer(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles_toserver('0002', 'uuencode_multi', self.servers.servers[0]) self.vfailIf(self.nget.run("-g test")) self.vfailUnlessExitstatus(self.nget.run("-h host1 -G test -r ."), 8, "nget process did not detect retrieve error") self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) def test_ForceServer(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles('0001', 'yenc_multi') self.vfailIf(self.nget.run("-h host1 -g test")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) self.vfailIf(self.nget.run("-h host0 -g test")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) self.vfailIf(self.nget.run("-h host1 -G test -r .")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) self.verifyoutput('0001') def test_Available_ForceServer(self): self.servers = nntpd.NNTPD_Master(3) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.vfailIf(self.nget.run("-h host1 -a")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 0) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[2].count("_conns"), 0) def test_FlushServer(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles_toserver('0002', 'uuencode_multi', self.servers.servers[0]) self.addarticles_toserver('0001', 'yenc_multi', self.servers.servers[1]) self.vfailIf(self.nget.run("-g test")) self.vfailIf(self.nget.run("-G test -F host0")) self.vfailIf(self.nget.run("-G test -r .")) self.verifyoutput('0001') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) def test_Available_FlushServer(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.servers.servers[0].addgroup("test", "aaa") self.servers.servers[1].addgroup("test", "bbb") self.servers.servers[0].addgroup("foo", "ccc") self.servers.servers[1].addgroup("foo", "ccc") self.servers.servers[0].addgroup("0only") self.servers.servers[1].addgroup("1only") self.vfailIf(self.nget.run("-a")) self.vfailIf(self.nget.run("-A -Fhost0")) output = self.vfailIf_getoutput(self.nget.run_getoutput('-A -T -r .')) self.failUnless(re.search(r"^h1\ttest\tbbb \[h1\]$",output, re.M)) self.failUnless(re.search(r"^h1\tfoo\tccc \[h1\]$",output, re.M)) self.failUnless(re.search(r"^h1\t1only$",output, re.M)) self.failIf(output.find("h0")>=0) self.failIf(output.find("0only")>=0) def test_MetaGrouping_FlushServer(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticle_toserver('0001', 'yenc_multi', '001', self.servers.servers[0], groups=["test2"]) self.addarticle_toserver('0001', 'yenc_multi', '002', self.servers.servers[0], groups=["test3"]) self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[1], groups=["test"]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[1], groups=["test2"]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[1], groups=["test3"]) self.addarticle_toserver('0004', 'input', '001', self.servers.servers[1], groups=["test2"]) self.vfailIf(self.nget.run("-g test,test2,test3")) self.vfailIf(self.nget.run("-G test,test2,test3 -F host1")) self.vfailIf(self.nget.run("-G test,test2,test3 -r .")) self.verifyoutput('0001') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) def test_MetaGrouping_ismultiserver_no(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles_toserver('0002', 'uuencode_multi3', self.servers.servers[0], groups=["test"]) self.addarticles_toserver('0001', 'uuencode_single', self.servers.servers[0], groups=["test2"]) tpath = os.path.join(self.nget.rcdir, 'test.out') output = self.vfailIf_getoutput(self.nget.run_getoutput('-g test,test2 -q -r .')) self.failUnless(output.find("h0 1 (-1/0): ")<0) self.failUnless(output.find("h0 1 (1/3): ")<0) def test_MetaGrouping_ismultiserver_yes(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles_toserver('0002', 'uuencode_multi3', self.servers.servers[0], groups=["test"]) self.addarticles_toserver('0001', 'uuencode_single', self.servers.servers[1], groups=["test2"]) output = self.vfailIf_getoutput(self.nget.run_getoutput('-g test,test2 -q -r .')) self.failUnless(output.find("h1 1 (-1/0): ")>=0) self.failUnless(output.find("h0 1 (1/3): ")>=0) def test_AbruptTimeout(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), DiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[1]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0]) self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') def test_ErrorTimeout(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), ErrorDiscoingNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[1]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0]) self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') def test_SockPool(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[1]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0]) self.vfailIf(self.nget.run("-g test -r .")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) self.verifyoutput('0002') def test_XOverStreaming_BuggyServerWhichDropsTheEndsOfReplies(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), XOverStreamingDropsDataNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'fullxover':1, 'timeout':3, 'tries':2}) self.servers.start() #set up article list with holes in it so next run will use xover streaming self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0], anum=1) self.addarticle_toserver('0001', 'yenc_multi', '001', self.servers.servers[0], anum=5) self.addarticle_toserver('0003', 'newspost_uue_0', '002', self.servers.servers[0], anum=8) self.vfailIf(self.nget.run("-g test")) #now fill in holes with articles and try again self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0], anum=2) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0], anum=3) self.addarticle_toserver('0001', 'yenc_multi', '002', self.servers.servers[0], anum=6) self.addarticle_toserver('0003', 'newspost_uue_0', '001', self.servers.servers[0], anum=4) self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput(['0001','0002','0003']) def test_timeout(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), DelayAfterArticle2NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'timeout':1}) self.servers.start() self.addarticles('0002','uuencode_multi3') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) def test_idletimeout(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), DelayBeforeArticleNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), nntpd.NNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'idletimeout':1}) self.servers.start() self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[1]) self.vfailIf(self.nget.run("-g test -r .")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) self.verifyoutput('0002') def test_maxconnections(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'maxconnections':1}) self.servers.start() self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[1]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0]) self.vfailIf(self.nget.run("-g test -r .")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 3) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) self.verifyoutput('0002') def test_maxconnections_2(self): self.servers = nntpd.NNTPD_Master([nntpd.NNTPTCPServer((nntpd.serveraddr,0), DelayBeforeCommandNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), DelayBeforeCommandNNTPRequestHandler), nntpd.NNTPTCPServer((nntpd.serveraddr,0), DelayBeforeCommandNNTPRequestHandler)]) self.nget = util.TestNGet(ngetexe, self.servers.servers, options={'maxconnections':2}) self.servers.start() self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[2]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[1]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[0]) self.vfailIf(self.nget.run("-g test -r .")) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[2].count("_conns"), 1) self.verifyoutput('0002') def test_force_host_reset(self): self.servers = nntpd.NNTPD_Master(2) self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticle_toserver('0002', 'uuencode_multi3', '001', self.servers.servers[1]) self.addarticle_toserver('0002', 'uuencode_multi3', '002', self.servers.servers[0]) self.addarticle_toserver('0002', 'uuencode_multi3', '003', self.servers.servers[1]) self.vfailIf(self.nget.run('-g test')) self.vfailIf(self.nget.run('-G test -h host0 -r nothing -h "" -r .')) self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 2) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 2) self.verifyoutput('0002') class AuthTestCase(TestCase, DecodeTest_base): def tearDown(self): if hasattr(self, 'servers'): self.servers.stop() if hasattr(self, 'nget'): self.nget.clean_all() def test_GroupAuth(self): self.servers = nntpd.NNTPD_Master(1) self.servers.servers[0].adduser('ralph','5') #ralph has full auth self.servers.servers[0].adduser('','',{'group':0}) #default can't do GROUP self.nget = util.TestNGet(ngetexe, self.servers.servers, hostoptions=[{'user':'ralph', 'pass':'5'}]) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') def test_NoSuchGroupAuth(self): #test if the command we were authenticating for failing is handled ok self.servers = nntpd.NNTPD_Master(3) self.servers.servers[1].adduser('ralph','5') #ralph has full auth self.servers.servers[1].adduser('','',{'group':0}) #default can't do GROUP self.nget = util.TestNGet(ngetexe, self.servers.servers, hostoptions=[{},{'user':'ralph', 'pass':'5'},{}]) self.servers.start() self.addarticles_toserver('0002', 'uuencode_multi',self.servers.servers[0]) self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') self.vfailUnlessEqual(self.servers.servers[0].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[1].count("_conns"), 1) self.vfailUnlessEqual(self.servers.servers[2].count("_conns"), 1) def test_lite_GroupAuth(self): self.servers = nntpd.NNTPD_Master(1) self.servers.servers[0].adduser('ralph','5') #ralph has full auth self.servers.servers[0].adduser('','',{'group':0}) #default can't do GROUP self.nget = util.TestNGet(ngetexe, self.servers.servers, hostoptions=[{'user':'ralph', 'pass':'5'}]) self.servers.start() self.addarticles('0002', 'uuencode_multi') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') def test_ArticleAuth(self): self.servers = nntpd.NNTPD_Master(1) self.servers.servers[0].adduser('ralph','5') #ralph has full auth self.servers.servers[0].adduser('','',{'article':0}) #default can't do ARTICLE self.nget = util.TestNGet(ngetexe, self.servers.servers, hostoptions=[{'user':'ralph', 'pass':'5'}]) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') def test_lite_ArticleAuth(self): self.servers = nntpd.NNTPD_Master(1) self.servers.servers[0].adduser('ralph','5') #ralph has full auth self.servers.servers[0].adduser('','',{'article':0}) #default can't do ARTICLE self.nget = util.TestNGet(ngetexe, self.servers.servers, hostoptions=[{'user':'ralph', 'pass':'5'}]) self.servers.start() self.addarticles('0002', 'uuencode_multi') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') def test_FailedAuth(self): self.servers = nntpd.NNTPD_Master(1) self.servers.servers[0].adduser('ralph','5') #ralph has full auth self.servers.servers[0].adduser('','',{'group':0}) #default can't do GROUP self.nget = util.TestNGet(ngetexe, self.servers.servers, hostoptions=[{'user':'ralph', 'pass':'WRONG'}]) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailUnlessExitstatus(self.nget.run("-g test -r ."), 16, "nget process did not detect auth error") def test_NoAuth(self): self.servers = nntpd.NNTPD_Master(1) self.servers.servers[0].adduser('ralph','5') #ralph has full auth self.servers.servers[0].adduser('','',{'group':0}) #default can't do GROUP self.nget = util.TestNGet(ngetexe, self.servers.servers) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailUnlessExitstatus(self.nget.run("-g test -r ."), 16, "nget process did not detect auth error") def test_ServerClone(self): self.servers = nntpd.NNTPD_Master(1) self.servers.servers[0].adduser('','',{'*':0}) #default can't do anything self.servers.servers[0].adduser('ralph','5',{'article':0}) #ralph can't retrieve articles self.servers.servers[0].adduser('bob','6',{'xover':0}) #bob can't retrieve headers self.nget = util.TestNGet(ngetexe, self.servers.servers*2, hostoptions=[{'user':'ralph', 'pass':'5', 'id':1},{'user':'bob','pass':'6', 'id':1}], priorities=[5,2]) self.servers.start() self.addarticles('0002', 'uuencode_multi') self.vfailIf(self.nget.run("-g test -r .")) self.verifyoutput('0002') def test_lite_ServerClone(self): self.servers = nntpd.NNTPD_Master(1) self.servers.servers[0].adduser('','',{'*':0}) #default can't do anything self.servers.servers[0].adduser('ralph','5',{'article':0}) #ralph can't retrieve articles self.servers.servers[0].adduser('bob','6',{'xover':0}) #bob can't retrieve headers self.nget = util.TestNGet(ngetexe, self.servers.servers*2, hostoptions=[{'user':'ralph', 'pass':'5', 'id':1},{'user':'bob','pass':'6', 'id':1}], priorities=[5,2]) self.servers.start() self.addarticles('0002', 'uuencode_multi') litelist = os.path.join(self.nget.rcdir, 'lite.lst') self.vfailIf(self.nget.run("-w %s -g test -r ."%litelist)) self.vfailIf(self.nget.runlite(litelist)) self.vfailIf(self.nget.run("-N -G test -r .")) self.verifyoutput('0002') #if os.system('sf --help'): if os.system('sf date'): class SubterfugueTestCase(TestCase): def test_SUBTERFUGUE_NOT_INSTALLED(self): raise "SUBTERFUGUE does not appear to be installed, some tests skipped" else: trickdir=os.path.abspath('tricks') ppath = os.environ.get('PYTHONPATH', '') if ppath.find(trickdir)<0: if ppath: ppath = ppath + ':' os.environ['PYTHONPATH'] = ppath + trickdir class SubterfugueTest_base(DecodeTest_base): def setUp(self): self.do_setUp(1, getattr(self,'ngetoptions',{})) def do_setUp(self, numservers, ngetoptions): self.servers = nntpd.NNTPD_Master(numservers) self.addarticles('0001', 'uuencode_single') self.nget = util.TestNGet(ngetexe, self.servers.servers, **ngetoptions) self.servers.start() self.sfexe = "sf -t ExitStatus" self.outputfn = os.path.join(self.nget.rcdir, "output.log") self.post = " > %s 2>&1"%self.outputfn self._exitstatusre = re.compile(r'### \[.*\] exited (.*) = (.*) ###$') def tearDown(self): self.servers.stop() self.nget.clean_all() def readoutput(self): self.output = open(self.outputfn,'rb').read() #print 'output was:',`self.output` print self.output x = self._exitstatusre.search(self.output) if not x: return ('unknown', -1) if x.group(1) == 'status': return int(x.group(2)) return x.group(1), x.group(2) def check_for_errormsg(self, msg, err=errno.EIO, dupe=0): errmsg = re.escape(os.strerror(err)) self.failUnless(re.search(msg+'.*'+errmsg, self.output), "did not find expected error message in output") self.failIf(re.search(msg+'.*'+msg+'.*'+errmsg, self.output), "name duplicated in error message") dupe2=re.search(msg+'.*'+errmsg+'.*'+msg+'.*'+errmsg, self.output, re.DOTALL) if not dupe: self.failIf(dupe2, "expected error message duplicated in output") else: self.failIf(not dupe2, "expected error message not duplicated in output") def runnget(self, args, trick): self.nget.run(args + self.post, self.sfexe + " -t \""+trick+"\" ") return self.readoutput() def runlite(self, args, trick): self.nget.runlite(args + self.post, self.sfexe + " -t \""+trick+"\" ") return self.readoutput() class FileTest_base: "Holds all the tests that need to be done with both usegz and without" def test_cache_openread_error(self): self.vfailUnlessEqual(self.runnget("-G foo -r bar", "IOError:f=[('foo,cache','r',-1)]"), 128) self.check_for_errormsg(r'foo,cache') def test_cache_read_error(self): self.vfailIf(self.nget.run("-g test")) self.vfailUnlessEqual(self.runnget("-G test -r bar", "IOError:f=[('test,cache','r',60)]"), 128) self.check_for_errormsg(r'test,cache') self.vfailUnlessEqual(self.runnget("-G test -r bar", "IOError:f=[('test,cache','r',20)]"), 128) self.check_for_errormsg(r'test,cache') self.vfailUnlessEqual(self.runnget("-G test -r bar", "IOError:f=[('test,cache','r',10)]"), 128) self.check_for_errormsg(r'test,cache') def test_cache_zerobyte_read_error(self): self.vfailIf(self.nget.run("-g test")) self.vfailUnlessEqual(self.runnget("-G test -r bar", "IOError:f=[('test,cache','r',0)]"), 128, self.UpgradeZLibMessage) self.check_for_errormsg(r'test,cache') def test_cache_close_read_error(self): self.vfailIf(self.nget.run("-g test")) self.vfailUnlessEqual(self.runnget("-G test -r bar", "IOError:f=[('test,cache','r','c')]"), 128) self.check_for_errormsg(r'test,cache') def test_cache_openwrite_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:f=[('test,cache','w',-1)]"), 128) self.check_for_errormsg(r'test,cache') def test_cache_zerobyte_write_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:f=[('test,cache','w',0)]"), 128) self.check_for_errormsg(r'test,cache') def test_cache_empty_zerobyte_write_error(self): self.vfailIf(self.nget.run("-g test -r .")) self.rmarticles('0001', 'uuencode_single') self.vfailUnlessEqual(self.runnget("-g test", "IOError:f=[('test,cache','w',0)]"), 128) self.check_for_errormsg(r'test,cache') def test_cache_write_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:f=[('test,cache','w',20)]"), 128) self.check_for_errormsg(r'test,cache') def test_cache_rename_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:r=[('test,cache.*tmp','test,cache')]"), 128) self.check_for_errormsg(r'test,cache.*tmp.*test,cache') def test_cache_close_write_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:f=[('test,cache','w','c')]"), 128) self.check_for_errormsg(r'test,cache') def test_midinfo_open_read_error(self): self.vfailUnlessEqual(self.runnget("-G foo -r bar", "IOError:f=[('foo,midinfo','r',-1)]"), 128) self.check_for_errormsg(r'foo,midinfo') def test_midinfo_read_error(self): self.vfailIf(self.nget.run("-g test -M -r .")) self.vfailUnlessEqual(self.runnget("-G test -r bar", "IOError:f=[('test,midinfo','r',20)]"), 128) self.check_for_errormsg(r'test,midinfo') def test_midinfo_close_read_error(self): self.vfailIf(self.nget.run("-g test -M -r .")) self.vfailUnlessEqual(self.runnget("-G test -r bar", "IOError:f=[('test,midinfo','r','c')]"), 128) self.check_for_errormsg(r'test,midinfo') def test_midinfo_zerobyte_read_error(self): self.vfailIf(self.nget.run("-g test -M -r .")) self.vfailUnlessEqual(self.runnget("-G test -r bar", "IOError:f=[('test,midinfo','r',0)]"), 128, self.UpgradeZLibMessage) self.check_for_errormsg(r'test,midinfo') def test_midinfo_zerobyte_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -M -r .", "IOError:f=[('test,midinfo','w',0)]"), 128) self.check_for_errormsg(r'test,midinfo') def test_midinfo_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -M -r .", "IOError:f=[('test,midinfo','w',20)]"), 128) self.check_for_errormsg(r'test,midinfo') def test_midinfo_close_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -M -r .", "IOError:f=[('test,midinfo','w','c')]"), 128) self.check_for_errormsg(r'test,midinfo') def test_midinfo_rename_error(self): self.vfailUnlessEqual(self.runnget("-g test -M -r .", "IOError:r=[('test,midinfo.*tmp','test,midinfo')]"), 128) self.check_for_errormsg(r'test,midinfo.*tmp.*test,midinfo') class GZFileErrorTestCase(FileTest_base, SubterfugueTest_base, TestCase): UpgradeZLibMessage = "nget did not detect read error on 0-th byte. *** Upgrade zlib. See http://nget.sf.net/patches/ ***" #update with version number when fixed version gets released ngetoptions={'options':{'usegz':9}} class FileErrorTestCase(FileTest_base, SubterfugueTest_base, TestCase): UpgradeZLibMessage = None ngetoptions={'options':{'usegz':0}} def test_ngetrc_open_error(self): self.vfailUnlessEqual(self.runnget("-G foo", "IOError:f=[('ngetrc$','r',-1)]"), 128) self.failUnless(self.output.find('man nget')<0, "nget gave config help message for io error") self.check_for_errormsg(r'ngetrc\b') def test_ngetrc_read_error(self): self.vfailUnlessEqual(self.runnget("-G foo", "IOError:f=[('ngetrc$','r',0)]"), 128) self.failUnless(self.output.find('man nget')<0, "nget gave config help message for io error") self.check_for_errormsg(r'ngetrc\b') def test_ngetrc_close_error(self): self.vfailUnlessEqual(self.runnget("-G foo", "IOError:f=[('ngetrc$','r','c')]"), 128) self.failUnless(self.output.find('man nget')<0, "nget gave config help message for io error") self.check_for_errormsg(r'ngetrc\b') def test_tempfile_open_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('\.[-0-9][0-9]{2}$','w',-1)]"), 128) self.check_for_errormsg(r'\.[-0-9][0-9]{2}\b') self.verifyoutput([]) def test_tempfile_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('\.[-0-9][0-9]{2}$','w',0)]"), 128) self.check_for_errormsg(r'\.[-0-9][0-9]{2}\b') self.verifyoutput([]) #ensure bad tempfile is deleted def test_tempfile_close_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('\.[-0-9][0-9]{2}$','w','c')]"), 128) self.check_for_errormsg(r'\.[-0-9][0-9]{2}\b') self.verifyoutput([]) #ensure bad tempfile is deleted def test_tempfile_open_read_error(self): self.vfailIf(self.nget.run("-g test -K -r .")) self.vfailUnlessEqual(self.runnget("-G test -r .", "IOError:f=[('\.[-0-9][0-9]{2}$','r',-1)]"), 1)####128? self.check_for_errormsg(r'\.[-0-9][0-9]{2}\b') def test_tempfile_zerobyte_read_error(self): self.vfailIf(self.nget.run("-g test -K -r .")) self.vfailUnlessEqual(self.runnget("-G test -r .", "IOError:f=[('\.[-0-9][0-9]{2}$','r',0)]"), 1, UpgradeUULibMessage)####128? self.check_for_errormsg(r'\.[-0-9][0-9]{2}\b') def test_tempfile_read_error(self): self.rmarticles('0001', 'uuencode_single') self.addarticles('0002', 'uuencode_multi')#need a bigger part self.vfailIf(self.nget.run("-g test -K -r .")) self.vfailUnlessEqual(self.runnget("-G test -r .", "IOError:f=[('\.001$','r',9900)]"), 1)####128? self.check_for_errormsg(r'\.[-0-9][0-9]{2}\b') #def test_tempfile_close_read_error(self): # self.vfailIf(self.nget.run("-g test -K -r .")) # self.vfailUnlessEqual(self.runnget("-G test -r .", "IOError:f=[('\.[-0-9][0-9]{2}$','r','c')]"), 1)####128? # self.check_for_errormsg(r'\.[-0-9][0-9]{2}\b') def test_uutempfile_open_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('^/tmp/[^/]*$','w',-1)]"), 1) self.check_for_errormsg(r'uu_msg.*/tmp/[^/]*[ :]') def test_uutempfile_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('^/tmp/[^/]*$','w',0)]"), 1, UpgradeUULibMessage) self.check_for_errormsg(r'uu_msg.*temp file') #uulib doesn't say the filename in this message def test_uutempfile_close_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('^/tmp/[^/]*$','w','c')]"), 1, UpgradeUULibMessage) self.check_for_errormsg(r'uu_msg.*temp file') #uulib doesn't say the filename in this message def test_uutempfile_open_read_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('^/tmp/[^/]*$','r',-1)]"), 1) self.check_for_errormsg(r'uu_msg.*/tmp/[^/]*[ :]') def test_uutempfile_read_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('^/tmp/[^/]*$','r',0)]"), 1) self.check_for_errormsg(r'uu_msg.*/tmp/[^/]*[ :]') #def test_uutempfile_close_read_error(self): # self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('^/tmp/[^/]*$','r','c')]"), 1) # self.check_for_errormsg(r'uu_msg.*/tmp/[^/]*[ :]') def test_destfile_open_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('testfile\.txt$','w',-1)]"), 1) self.check_for_errormsg(r'testfile\.txt\b') def test_destfile_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('testfile\.txt$','w',0)]"), 1, UpgradeUULibMessage) self.check_for_errormsg(r'testfile\.txt\b') def test_destfile_close_write_error(self): self.vfailUnlessEqual(self.runnget("-g test -r .", "IOError:f=[('testfile\.txt$','w','c')]"), 1, UpgradeUULibMessage) self.check_for_errormsg(r'testfile\.txt\b') def test_dupefile_src_open_error(self): self.vfailIf(self.nget.run("-g test -r .")) self.vfailUnlessEqual(self.runnget("-G test -D -r .", "IOError:f=[('testfile\.txt$','r',-1)]"), 128) self.check_for_errormsg(r'testfile\.txt[^.]') def test_dupefile_src_read_error(self): self.vfailIf(self.nget.run("-g test -r .")) self.vfailUnlessEqual(self.runnget("-G test -D -r .", "IOError:f=[('testfile\.txt$','r',0)]"), 128) self.check_for_errormsg(r'testfile\.txt[^.]') def test_dupefile_dst_open_error(self): self.vfailIf(self.nget.run("-g test -r .")) self.vfailUnlessEqual(self.runnget("-G test -D -r .", "IOError:f=[('testfile\.txt\..*\..*$','r',-1)]"), 128) self.check_for_errormsg(r'testfile\.txt\..*\.') def test_dupefile_dst_read_error(self): self.vfailIf(self.nget.run("-g test -r .")) self.vfailUnlessEqual(self.runnget("-G test -D -r .", "IOError:f=[('testfile\.txt\..*\..*$','r',0)]"), 128) self.check_for_errormsg(r'testfile\.txt\..*\.') class SockErrorTestCase(SubterfugueTest_base, TestCase): ngetoptions={'options':{'tries':1}} def test_socket_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:s=[('rw',-2)]"), 16) self.check_for_errormsg(r'error.*'+nntpd.serveraddr+'.*socket') def test_connect_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:s=[('rw',-1)]"), 16) self.check_for_errormsg(r'error.*'+nntpd.serveraddr+'.*connect') def test_sock_write_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:s=[('w',0)]"), 16) self.check_for_errormsg(r'error.*write.*'+nntpd.serveraddr) def test_sock_read_error(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:s=[('r',0)]"), 16) self.check_for_errormsg(r'error.*read.*'+nntpd.serveraddr) def test_sock_close_error_onexit(self): self.vfailUnlessEqual(self.runnget("-g test", "IOError:s=[('rw','c')]"), 0) #error on sock close doesn't really need an error return, since it can't cause any problems. (Any problem causing errors would be caught before sock.close() gets called.) self.check_for_errormsg(r'error.*'+nntpd.serveraddr)#'TransportEx.*'+nntpd.serveraddr) def test_sock_close_error(self): #somewhat hacky stuff since we need 2 servers for this test only. self.tearDown() self.do_setUp(2, {'options':{'tries':1, 'maxconnections':1}}) self.vfailUnlessEqual(self.runnget("-g test", "IOError:s=[('rw','c')]"), 0) #error on sock close doesn't really need an error return, since it can't cause any problems. (Any problem causing errors would be caught before sock.close() gets called.) self.check_for_errormsg(r'error.*'+nntpd.serveraddr, dupe=1)#'TransportEx.*'+nntpd.serveraddr) class LiteErrorTest_base(SubterfugueTest_base): def setUp(self): SubterfugueTest_base.setUp(self) self.litelist = os.path.join(self.nget.rcdir, 'lite.lst') try: self.vfailIf(self.nget.run("-w %s -g test -r ."%self.litelist)) except: self.tearDown() raise class LiteFileErrorTestCase(LiteErrorTest_base, TestCase): def test_list_open_error(self): self.runlite(self.litelist, "IOError:f=[('lite\.lst$','r',-1)]") #ngetlite doesn't signal this .. hrm self.check_for_errormsg(r'lite\.lst\b') self.verifyoutput([]) def test_list_read_error(self): self.runlite(self.litelist, "IOError:f=[('lite\.lst$','r',0)]") #ngetlite doesn't signal this .. hrm self.check_for_errormsg(r'lite\.lst\b') self.verifyoutput([]) def test_tempfile_open_error(self): self.vfailUnlessEqual(self.runlite(self.litelist, r"IOError:f=[('ngetlite\.\d+$','w',-1)]"), 255) self.check_for_errormsg(r'ngetlite\.\d+\b') self.verifyoutput([]) def test_tempfile_write_error(self): self.vfailUnlessEqual(self.runlite(self.litelist, r"IOError:f=[('ngetlite\.\d+$','w',0)]"), 255) self.check_for_errormsg(r'ngetlite\.\d+\b') #self.verifyoutput([]) def test_tempfile_close_error(self): self.vfailUnlessEqual(self.runlite(self.litelist, r"IOError:f=[('ngetlite\.\d+$','w','c')]"), 255) self.check_for_errormsg(r'ngetlite\.\d+\b') #self.verifyoutput([]) class LiteSockErrorTestCase(LiteErrorTest_base, TestCase): def setUp(self): LiteErrorTest_base.setUp(self) os.environ['NGETLITE_TRIES'] = '1' os.environ['NGETLITE_TIMEOUT'] = '10' def test_socket_error(self): #self.failUnlessEqual( self.runlite(self.litelist, "IOError:s=[('rw',-2)]")#, 64) self.check_for_errormsg(r'TransportEx.*'+nntpd.serveraddr) def test_connect_error(self): #self.failUnlessEqual(self.runlite(self.litelist, "IOError:s=[('rw',-1)]"), 64) self.runlite(self.litelist, "IOError:s=[('rw',-1)]") self.check_for_errormsg(r'TransportEx.*'+nntpd.serveraddr) def test_sock_write_error(self): #self.failUnlessEqual( self.runlite(self.litelist, "IOError:s=[('w',0)]")#, 64) self.check_for_errormsg(r'TransportEx.*'+nntpd.serveraddr) def test_sock_read_error(self): #self.failUnlessEqual( self.runlite(self.litelist, "IOError:s=[('r',0)]")#, 64) self.check_for_errormsg(r'TransportEx.*'+nntpd.serveraddr) def test_sock_close_error(self): self.failUnlessEqual(self.runlite(self.litelist, "IOError:s=[('rw','c')]"), 0) #error on sock close doesn't really need an error return, since it can't cause any problems. (Any problem causing errors would be caught before sock.close() gets called.) self.check_for_errormsg(r''+nntpd.serveraddr)#'TransportEx.*'+nntpd.serveraddr) class CppUnitTestCase(TestCase): def test_TestRunner(self): self.vfailIf(util.exitstatus(os.system(os.path.join(os.curdir,'TestRunner'))), "CppUnit TestRunner returned an error") if __name__ == '__main__': #little hack to allow to run only tests matching a certain prefix #run with ./test_nget.py [unittest args] [TestCases...] -X if len(sys.argv)>1 and sys.argv[-1].startswith('-X'): myTestLoader=unittest.TestLoader() myTestLoader.testMethodPrefix=sys.argv[-1][2:] unittest.main(argv=sys.argv[:-1], testLoader=myTestLoader) else: unittest.main() nget-0.27.1/test/Makefile.in0000644000175000017500000000171010013046307016057 0ustar donutdonut00000000000000CXXFLAGS=@CXXFLAGS@ @DEFS@ CPPFLAGS=@UUINC@ @CPPFLAGS@ -I.. LDFLAGS=@LDFLAGS@ CXX=@CXX@ LIBS=@LIBS@ EXEEXT=@EXEEXT@ srcdir=@srcdir@ NGET=../nget$(EXEEXT) NGETLITE=../ngetlite$(EXEEXT) all: TestRunner $(NGET) $(NGETLITE): ../*.cc ../*.h ../%: $(MAKE) -C .. $(subst ../,,$@) test: all $(NGET) $(NGETLITE) ./test_nget.py OBJS=TestRunner.o dupe_file_test.o misc_test.o nrangetest.o rcount_test.o auto_container_test.o strtoker_test.o knapsack_test.o ../file.o ../sockstuff.o ../nrange.o ../log.o ../dupe_file.o ../myregex.o ../strtoker.o ../misc.o ../path.o ../knapsack.o ../compat/compat.a TestRunner: $(OBJS) $(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $@ $(LIBS) `cppunit-config --libs` Makefile: Makefile.in ../config.status cd .. && ./config.status clean: -rm TestRunner *.o *.d *.py[co] tricks/*.py[co] distclean: clean -rm config.status config.h config.cache config.log Makefile stamp-h .PHONY: all clean install dist distclean test -include *.d nget-0.27.1/test/strtoker_test.cc0000644000175000017500000000202310056212771017242 0ustar donutdonut00000000000000#include "strtoker.h" #include class strtoker_Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(strtoker_Test); CPPUNIT_TEST(testClass); CPPUNIT_TEST(testFunc); CPPUNIT_TEST_SUITE_END(); protected: char buf[40]; public: void setUp(void) { strcpy(buf, "a1\tb2\t\tc4"); } void testClass(void) { strtoker toker(5,'\t'); CPPUNIT_ASSERT(toker.tok(buf) == 0); CPPUNIT_ASSERT(strcmp(toker[0],"a1") == 0); CPPUNIT_ASSERT(strcmp(toker[1],"b2") == 0); CPPUNIT_ASSERT(strcmp(toker[2],"") == 0); CPPUNIT_ASSERT(strcmp(toker[3],"c4") == 0); CPPUNIT_ASSERT(toker[4] == NULL); } void testFunc(void) { char *cur=buf; CPPUNIT_ASSERT(strcmp(goodstrtok(&cur,'\t'), "a1") == 0); CPPUNIT_ASSERT(strcmp(goodstrtok(&cur,'\t'), "b2") == 0); CPPUNIT_ASSERT(strcmp(goodstrtok(&cur,'\t'), "") == 0); CPPUNIT_ASSERT(strcmp(goodstrtok(&cur,'\t'), "c4") == 0); CPPUNIT_ASSERT(goodstrtok(&cur,'\t') == NULL); } }; CPPUNIT_TEST_SUITE_REGISTRATION( strtoker_Test ); nget-0.27.1/test/tricks/0002775000175000017500000000000010162001761015316 5ustar donutdonut00000000000000nget-0.27.1/test/tricks/ExitStatusTrick.py0000644000175000017500000000047107737475665021040 0ustar donutdonut00000000000000from Trick import Trick class ExitStatus(Trick): def __init__(self, options): pass def exit(self, pid, exitstatus, signal): if signal: print '### [%s] exited signal = %s ###' % (pid, signal) else: print '### [%s] exited status = %s ###' % (pid, exitstatus) def callmask(self): return {} nget-0.27.1/test/tricks/IOErrorTrick.py0000644000175000017500000001751410012301713020204 0ustar donutdonut00000000000000from __future__ import nested_scopes import Memory from Trick import Trick import errno import os # The FCNTL module which used to have O_ACCMODE (and other O_* constants) no # longer does in python2.2, so we'll have to make due with this. O_ACCMODE = (os.O_RDWR | os.O_RDONLY | os.O_WRONLY) import re import socket import tricklib import ptrace class _info: def __init__(self): self.failed = 0 self.bytes = 0 class FDInfo: def __init__(self, errs): self.w = _info() self.r = _info() self.errs = errs self.rerrs = [] self.werrs = [] self.cerrs = [] self.modes = '' for err in errs: if err.after=='c': self.cerrs.append(err) else: if 'r' in err.modes: self.rerrs.append(err) if 'w' in err.modes: self.werrs.append(err) if 'r' in err.modes and 'r' not in self.modes: self.modes += 'r' if 'w' in err.modes and 'w' not in self.modes: self.modes += 'w' class FError: def __init__(self, match, modes, after): self.match = re.compile(match) self.modes = modes self.after = after class SError: def __init__(self, modes, after): self.modes = modes self.after = after class RenameError: def __init__(self, sfn, dfn): self.srcmatch = re.compile(sfn) self.dstmatch = re.compile(dfn) class IOError(Trick): #somewhat unfortunate, you must name Trick class as , so IOErrorTrick becomes the possibly confusing IOError. doh. def __init__(self, options): self.__do_fail = {} self.ferrs = [] self.serrs = [] self.renameerrs = [] self._catchmodes = '' def updatemodes(mode, after): if after=='c' and 'C' not in self._catchmodes: self._catchmodes+='C' else: if 'r' in mode and 'r' not in self._catchmodes: self._catchmodes+='r' if 'w' in mode and 'w' not in self._catchmodes: self._catchmodes+='w' defopts = "rw", 0 if options.has_key('f'): for opts in options['f']: if type(opts)==type(""): opts = (opts,) + defopts else: opts = opts + defopts[len(opts)-1:] updatemodes(opts[1], opts[2]) fe = FError(*opts) self.ferrs.append(fe) if options.has_key('s'): for opts in options['s']: if type(opts)==type(""): opts = (opts,) + defopts[1:] else: opts = opts + defopts[len(opts):] updatemodes(opts[0], opts[1]) fe = SError(*opts) self.serrs.append(fe) if options.has_key('r'): for opts in options['r']: re = RenameError(*opts) self.renameerrs.append(re) def callbefore(self, pid, call, args): # print pid, call, args def doreadwrite(callt, args): # print 'doreadwrite',call,callt,args, fd = args[0] pfd = pid,fd fdinfo = self.__do_fail.get(pfd, None) # if fdinfo: # print fdinfo if fdinfo and callt in fdinfo.modes: if callt == 'r': #after = self.afterr if not fdinfo.rerrs: return after = min([err.after for err in fdinfo.rerrs]) failinfo = fdinfo.r else: #after = self.afterw if not fdinfo.werrs: return after = min([err.after for err in fdinfo.werrs]) failinfo = fdinfo.w failcount, bytes = failinfo.failed, failinfo.bytes if failcount > 5: print 'exiting on %ith failed %s of %i'%(failcount, callt, pfd) import sys sys.exit(1) if bytes < after: size = args[2] if bytes + size > after: size = after - bytes print pfd, callt, (fd, args[1], size), 'was', args return (pfd, None, None, (fd, args[1], size)) failinfo.failed += 1 print pid,'failing',call,callt,'#%i'%failcount, 'for fd', fd return (pfd, -errno.EIO, None, None) # else: # print 'allowing',call,'for',args[0] if call == 'read': return doreadwrite('r',args) elif call == 'write': return doreadwrite('w',args) elif call == 'close': fd = args[0] pfd = pid,fd fdinfo = self.__do_fail.get(pfd, None) # print pfd, call, args, fdinfo if fdinfo and fdinfo.cerrs: return (pfd, -errno.EIO, None, None) return (pfd, None, None, None) elif call == 'dup' or call == 'dup2': return (args[0], None, None, None) elif call == 'open': getarg = Memory.getMemory(pid).get_string fn = getarg(args[0]) # print pid,call,[fn]+args[1:],args[1]&O_ACCMODE fes = [] m = '' flags = args[1] & O_ACCMODE for fe in self.ferrs: if (flags == os.O_RDWR or (flags == os.O_WRONLY and 'w' in fe.modes) or (flags == os.O_RDONLY and 'r' in fe.modes)): if fe.match.search(fn): fes.append(fe) if fes: fdinfo = FDInfo(fes) #if flags == FCNTL.O_WRONLY: # after = min([err.after for err in fdinfo.werrs]) #elif flags == FCNTL.O_RDONLY: # after = min([err.after for err in fdinfo.rerrs]) #else: #elif flags == FCNTL.O_RDWR: after = min([err.after for err in fdinfo.errs]) if after<0: print pid,'failing',call,[fn]+args[1:] return (None, -errno.EIO, None, None) return (fdinfo, None, None, None) elif call == 'socketcall': # print pid, call, args subcall = args[0] do = 0 if subcall == 1: # socket # FIX: might fail if ptrace.peekdata(pid, args[1]) in (socket.AF_INET, socket.AF_INET6): do = -2 elif subcall == 3: # connect do = -1 elif subcall == 4: # listen do = -1 elif subcall == 5: # accept do = -1 elif subcall in (9,10): # send/recv if subcall == 9: # send r = doreadwrite('w', (ptrace.peekdata(pid, args[1]), ptrace.peekdata(pid, args[1]+4), ptrace.peekdata(pid, args[1]+8))) subcalln = 'write' elif subcall == 10: # recv r = doreadwrite('r', (ptrace.peekdata(pid, args[1]), ptrace.peekdata(pid, args[1]+4), ptrace.peekdata(pid, args[1]+8))) subcalln = 'read' if not r or r[1]: # if default return or error, we can return it with no probs. return r #otherwise we have to convert from doreadwrite return which is in read()/write() format to socketcall format ptrace.pokedata(args[1]+8, r[3][2]) # set new recv/write size return ((subcalln,r[0]), r[1], r[2], args) if do: #ses = [] #for se in self.serrs: after = min([err.after for err in self.serrs]) if after==do: print pid,'failing',call,args return (None, -errno.EIO, None, None) errs = [err for err in self.serrs if err.after>=0] if errs: fdinfo = FDInfo(errs) return (('open',fdinfo), None, None, None) elif call == 'rename': getarg = Memory.getMemory(pid).get_string sfn = getarg(args[0]) dfn = getarg(args[1]) # print pid,call,sfn,dfn for rene in self.renameerrs: if rene.srcmatch.search(sfn) and rene.dstmatch.search(dfn): print pid,'failing',call,sfn,dfn return (None, -errno.EIO, None, None) def callafter(self, pid, call, result, state): if call == 'socketcall': if not state: return call, state = state if call == 'read': if result>0 and state!=None: self.__do_fail[state].r.bytes += result elif call == 'write': if result>0 and state!=None: self.__do_fail[state].w.bytes += result elif call == 'open' and result != -1: self.__do_fail[pid,result] = state elif (call == 'dup' or call == 'dup2') and result != -1: self.__do_fail[pid,result] = self.__do_fail.get((pid,state), None) elif call == 'close': if result==0 and state!=None and self.__do_fail.has_key(state): del self.__do_fail[state] def callmask(self): d = {} if self.renameerrs: d['rename']=1 if self.serrs: d['socketcall']=1 if self.ferrs: d['open']=1 if self.serrs or self.ferrs: # Always watch close, and dup2 so that we can know when an fd goes out of usage, and thus avoid causing erroneous failures on any other reuse of the fd later. # And always watch dup and dup2 to catch any access to the same file through a new fd. d['close']=1 d['dup']=1 d['dup2']=1 if 'r' in self._catchmodes: d['read']=1 if 'w' in self._catchmodes: d['write']=1 if 'C' in self._catchmodes: d['close']=1 return d nget-0.27.1/test/util.py0000644000175000017500000001016310056212771015352 0ustar donutdonut00000000000000# util.py - nget test utility stuff # Copyright (C) 2002-2004 Matthew Mueller # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import os, random, sys, shutil, nntpd def exitstatus(st): if not hasattr(os, 'WEXITSTATUS'): #the os.W* funcs are only on *ix return st if os.WIFSTOPPED(st): return 'stopped',os.WSTOPSIG(st) if os.WIFSIGNALED(st): return 'signal',os.WTERMSIG(st) if os.WIFEXITED(st): return os.WEXITSTATUS(st) return 'unknown',st def spawnstatus(st): if st<0: return 'signal',-st return st def vsystem(cmd): print 'running %r'%cmd return exitstatus(os.system(cmd)) def vspawn(cmd, args, spawn=getattr(os,"spawnvp",os.spawnv)): print 'running %r %r'%(cmd,args) return spawnstatus(spawn(os.P_WAIT, cmd, [cmd]+args)) class TestNGet: def __init__(self, nget, servers, **kw): self.exe = nget self.rcdir = os.path.join(os.environ.get('TMPDIR') or '/tmp', 'nget_test_'+hex(random.randrange(0,sys.maxint))) os.mkdir(self.rcdir) self.tmpdir = os.path.join(self.rcdir, 'tmp') os.mkdir(self.tmpdir) self.writerc(servers, **kw) def writerc(self, servers, priorities=None, options=None, hostoptions=None, extratail="", rcfilename=None): defaultoptions = { # 'tries': 1, 'tries': 2, 'delay': 0, # 'penaltystrikes': 1, # 'debug': 3, # 'debug': 2, # 'fullxover': 1 } if rcfilename is None: rcfilename = '_ngetrc' if os.sep not in rcfilename: rcfilename = os.path.join(self.rcdir, rcfilename) rc = open(rcfilename, 'w') if options: defaultoptions.update(options) for k,v in defaultoptions.items(): rc.write("%s=%s\n"%(k,v)) rc.write("{halias\n") for i in range(0, len(servers)): defaulthostoptions = { 'addr': nntpd.addressstr(servers[i].socket.getsockname()), 'shortname': 'h%i'%i, 'id': str(i+1), } rc.write(" {host%i\n"%i) if hostoptions: defaulthostoptions.update(hostoptions[i]) for k,v in defaulthostoptions.items(): rc.write("%s=%s\n"%(k,v)) rc.write(" }\n") rc.write("}\n") if priorities: rc.write("{hpriority\n") rc.write(" {default\n") for i,p in zip(range(0, len(servers)), priorities): rc.write(" host%i=%s\n"%(i, p)) rc.write(" }\n") rc.write("}\n") rc.write(extratail) rc.close() #print 'begin ngetrc:\n',open(os.path.join(self.rcdir, '_ngetrc'), 'r').read() #print '--end ngetrc' def runv(self, args): os.environ['NGETHOME'] = self.rcdir #return vspawn(self.exe, ["-p",self.tmpdir]+args) return vspawn(self.exe, args) def run(self, args, pre="", dopath=1): os.environ['NGETHOME'] = self.rcdir if dopath: args = "-p "+self.tmpdir+" "+args return vsystem(pre + self.exe+" "+args) def run_getoutput(self, args, pre="", dopath=1): outputpath = os.path.join(self.rcdir,'output.'+hex(random.randrange(0,sys.maxint))) status = self.run(args+' > '+outputpath+' 2>&1', pre=pre, dopath=dopath) #the 2>&1 will break win9x, but I'm not sure if the test suite ever actually worked there anyway. f = open(outputpath, "r") output = f.read() f.close() return status, output def runlite(self, args, pre=""): olddir = os.getcwd() try: ngetliteexe = os.path.join(os.path.split(self.exe)[0], 'ngetlite') os.chdir(self.tmpdir) return vsystem(pre + ngetliteexe+" "+args) finally: os.chdir(olddir) def clean_tmp(self): shutil.rmtree(self.tmpdir) os.mkdir(self.tmpdir) def clean_all(self): if os.environ.get('TEST_NGET_NOCLEAN'): return shutil.rmtree(self.rcdir) nget-0.27.1/test/nrangetest.cc0000644000175000017500000002301710056212771016506 0ustar donutdonut00000000000000#include "nrange.h" #include class nrangeTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(nrangeTest); CPPUNIT_TEST(testCreate); CPPUNIT_TEST(testInsert); CPPUNIT_TEST(testInsertMiddle); CPPUNIT_TEST(testInsertNothing); CPPUNIT_TEST(testInsertMulti); CPPUNIT_TEST(testInsertMulti2); CPPUNIT_TEST(testInsertMulti3); CPPUNIT_TEST(testInsertMulti4); CPPUNIT_TEST(testRemove); CPPUNIT_TEST(testRemoveBeg); CPPUNIT_TEST(testRemoveEnd); CPPUNIT_TEST(testRemoveNothingBeg); CPPUNIT_TEST(testRemoveNothingEnd); CPPUNIT_TEST(testInvertEmpty); CPPUNIT_TEST(testInvertEnds); CPPUNIT_TEST(testInvertNoEnds); CPPUNIT_TEST_SUITE_END(); protected: c_nrange *range; public: void setUp(void) { range = new c_nrange(); } void tearDown(void) { delete range; } void testCreate(void) { CPPUNIT_ASSERT(range->empty()); CPPUNIT_ASSERT(range->get_total() == 0); CPPUNIT_ASSERT(range->check(0) == 0); CPPUNIT_ASSERT(range->check(1) == 0); CPPUNIT_ASSERT(range->check(ULONG_MAX) == 0); } void testInsert(void) { range->insert(1); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->get_total() == 1); CPPUNIT_ASSERT(range->low() == range->high() == 1); range->insert(2); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 2); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 2); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(range->check(1)); CPPUNIT_ASSERT(range->check(2)); CPPUNIT_ASSERT(!range->check(3)); } void testInsertNothing(void) { range->insert(1); range->insert(1); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 1); CPPUNIT_ASSERT(range->low() == range->high() == 1); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(range->check(1)); CPPUNIT_ASSERT(!range->check(2)); } void testInsertMiddle(void) { range->insert(1); range->insert(3); CPPUNIT_ASSERT(range->get_total() == 2); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 3); range->insert(2); CPPUNIT_ASSERT(range->get_total() == 3); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 3); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(range->check(1)); CPPUNIT_ASSERT(range->check(2)); CPPUNIT_ASSERT(range->check(3)); CPPUNIT_ASSERT(!range->check(4)); } void testInsertMulti(void) { range->insert(1,2); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->get_total() == 2); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 2); range->insert(3,4); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 4); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 4); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(range->check(1)); CPPUNIT_ASSERT(range->check(2)); CPPUNIT_ASSERT(range->check(3)); CPPUNIT_ASSERT(range->check(4)); CPPUNIT_ASSERT(!range->check(5)); } void testInsertMulti2(void) { range->insert(10,15); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 6); CPPUNIT_ASSERT(range->low() == 10); CPPUNIT_ASSERT(range->high() == 15); range->insert(3,7); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 2); CPPUNIT_ASSERT(range->get_total() == 11); CPPUNIT_ASSERT(range->low() == 3); CPPUNIT_ASSERT(range->high() == 15); for (int i=0;i<3;i++) CPPUNIT_ASSERT(!range->check(i)); for (int i=8;i<10;i++) CPPUNIT_ASSERT(!range->check(i)); for (int i=16;i<18;i++) CPPUNIT_ASSERT(!range->check(i)); for (int i=3;i<=7;i++) CPPUNIT_ASSERT(range->check(i)); for (int i=10;i<=15;i++) CPPUNIT_ASSERT(range->check(i)); } void testInsertMulti3(void) { range->insert(10,15); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 6); CPPUNIT_ASSERT(range->low() == 10); CPPUNIT_ASSERT(range->high() == 15); range->insert(3,12); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 13); CPPUNIT_ASSERT(range->low() == 3); CPPUNIT_ASSERT(range->high() == 15); for (int i=0;i<3;i++) CPPUNIT_ASSERT(!range->check(i)); for (int i=16;i<18;i++) CPPUNIT_ASSERT(!range->check(i)); for (int i=3;i<=15;i++) CPPUNIT_ASSERT(range->check(i)); } void testInsertMulti4(void) { range->insert(11,16); range->insert(8); range->insert(3); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 3); CPPUNIT_ASSERT(range->get_total() == 8); CPPUNIT_ASSERT(range->low() == 3); CPPUNIT_ASSERT(range->high() == 16); range->insert(4,12); CPPUNIT_ASSERT(!range->empty()); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 14); CPPUNIT_ASSERT(range->low() == 3); CPPUNIT_ASSERT(range->high() == 16); for (int i=0;i<3;i++) CPPUNIT_ASSERT(!range->check(i)); for (int i=17;i<19;i++) CPPUNIT_ASSERT(!range->check(i)); for (int i=3;i<=16;i++) CPPUNIT_ASSERT(range->check(i)); } void testRemove(void) { range->insert(1,3); range->remove(2); CPPUNIT_ASSERT(range->num_ranges() == 2); CPPUNIT_ASSERT(range->get_total() == 2); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 3); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(range->check(1)); CPPUNIT_ASSERT(!range->check(2)); CPPUNIT_ASSERT(range->check(3)); CPPUNIT_ASSERT(!range->check(4)); } void testRemoveBeg(void) { range->insert(1,3); range->remove(1); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 2); CPPUNIT_ASSERT(range->low() == 2); CPPUNIT_ASSERT(range->high() == 3); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(!range->check(1)); CPPUNIT_ASSERT(range->check(2)); CPPUNIT_ASSERT(range->check(3)); CPPUNIT_ASSERT(!range->check(4)); } void testRemoveEnd(void) { range->insert(1,3); range->remove(3); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 2); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 2); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(range->check(1)); CPPUNIT_ASSERT(range->check(2)); CPPUNIT_ASSERT(!range->check(3)); CPPUNIT_ASSERT(!range->check(4)); } void testRemoveNothingBeg(void) { range->insert(1,2); range->remove(0); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 2); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 2); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(range->check(1)); CPPUNIT_ASSERT(range->check(2)); CPPUNIT_ASSERT(!range->check(3)); } void testRemoveNothingEnd(void) { range->insert(1,2); range->remove(3); CPPUNIT_ASSERT(range->num_ranges() == 1); CPPUNIT_ASSERT(range->get_total() == 2); CPPUNIT_ASSERT(range->low() == 1); CPPUNIT_ASSERT(range->high() == 2); CPPUNIT_ASSERT(!range->check(0)); CPPUNIT_ASSERT(range->check(1)); CPPUNIT_ASSERT(range->check(2)); CPPUNIT_ASSERT(!range->check(3)); } void testInvertEmpty(void) { c_nrange i; i.invert(*range); CPPUNIT_ASSERT(i.num_ranges() == 1); CPPUNIT_ASSERT(i.get_total() == ULONG_MAX+1); CPPUNIT_ASSERT(i.low() == 0); CPPUNIT_ASSERT(i.high() == ULONG_MAX); CPPUNIT_ASSERT(i.check(0)); CPPUNIT_ASSERT(i.check(5)); CPPUNIT_ASSERT(i.check(ULONG_MAX)); } void testInvertEnds(void) { range->insert(0); range->insert(5); range->insert(ULONG_MAX); c_nrange i; i.invert(*range); CPPUNIT_ASSERT(i.num_ranges() == 2); CPPUNIT_ASSERT(i.get_total() == ULONG_MAX-2); CPPUNIT_ASSERT(i.low() == 1); CPPUNIT_ASSERT(i.high() == ULONG_MAX-1); CPPUNIT_ASSERT(!i.check(0)); CPPUNIT_ASSERT(i.check(1)); CPPUNIT_ASSERT(i.check(4)); CPPUNIT_ASSERT(!i.check(5)); CPPUNIT_ASSERT(i.check(6)); CPPUNIT_ASSERT(i.check(ULONG_MAX)-1); CPPUNIT_ASSERT(!i.check(ULONG_MAX)); } void testInvertNoEnds(void) { range->insert(1); range->insert(5); range->insert(9); c_nrange i; i.invert(*range); CPPUNIT_ASSERT(i.num_ranges() == 4); CPPUNIT_ASSERT(i.get_total() == ULONG_MAX-2); CPPUNIT_ASSERT(i.low() == 0); CPPUNIT_ASSERT(i.high() == ULONG_MAX); for (int j=0; j<15; ++j) CPPUNIT_ASSERT(i.check(j)!=range->check(j)); CPPUNIT_ASSERT(i.check(ULONG_MAX)); } }; class nrangeEqTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(nrangeEqTest); CPPUNIT_TEST(testEmpty); CPPUNIT_TEST(testOneEmpty); CPPUNIT_TEST(testUnEqual); CPPUNIT_TEST(testEqual); CPPUNIT_TEST_SUITE_END(); protected: c_nrange *range; c_nrange *rangeb; public: void setUp(void) { range = new c_nrange(); rangeb = new c_nrange(); } void tearDown(void) { delete range; delete rangeb; } void testEmpty(void) { CPPUNIT_ASSERT(*range == *rangeb); CPPUNIT_ASSERT(range != rangeb); } void testOneEmpty(void) { range->insert(1); CPPUNIT_ASSERT(*range != *rangeb); } void testUnEqual(void) { range->insert(1); rangeb->insert(2); CPPUNIT_ASSERT(*range != *rangeb); } void testEqual(void) { range->insert(1); range->insert(2); rangeb->insert(1,2); CPPUNIT_ASSERT(*range == *rangeb); } }; CPPUNIT_TEST_SUITE_REGISTRATION( nrangeTest ); CPPUNIT_TEST_SUITE_REGISTRATION( nrangeEqTest ); nget-0.27.1/test/ngetf.py0000755000175000017500000000343410056212771015506 0ustar donutdonut00000000000000#!/usr/bin/env python # # ngetf.py - run nntpd and nget with a single command # # Copyright (C) 2003-2004 Matthew Mueller # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import nntpd, util import os, sys #allow nget executable to be tested to be overriden with TEST_NGET env var. ngetexe = os.environ.get('TEST_NGET','nget') if os.sep in ngetexe or (os.altsep and os.altsep in ngetexe): ngetexe = os.path.abspath(ngetexe) def main(): if len(sys.argv)<=1: print 'Usage: ngetf.py [articles]... [-- [nget args]...]' return 0 articles,ngetargs = [],[] c = articles for a in sys.argv[1:]: if a=='--' and c is not ngetargs: c=ngetargs else: c.append(a) if not ngetargs: ngetargs = ['-gtest','-r.'] servers = nntpd.NNTPD_Master(1) nget = util.TestNGet(ngetexe, servers.servers) try: for a in articles: servers.servers[0].addarticle(["test"], nntpd.FileArticle(open(a))) servers.start() ret = nget.runv(ngetargs) print "nget exit status: ",ret finally: nget.clean_all() servers.stop() if ret: return 1 return 0 if __name__=="__main__": sys.exit(main()) nget-0.27.1/test/rcount_test.cc0000644000175000017500000000466610056212771016716 0ustar donutdonut00000000000000#include "rcount.h" #include class rcount_Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(rcount_Test); CPPUNIT_TEST(testSimple); CPPUNIT_TEST(testTransfer); CPPUNIT_TEST(testScope); CPPUNIT_TEST(testSelfAssignment); CPPUNIT_TEST(testTransient); CPPUNIT_TEST(testComparison); CPPUNIT_TEST_SUITE_END(); protected: int alive; class RCounted : public c_refcounted { public: int *aliveptr; bool foo(void){return true;} static ptr Create(int *a){return new RCounted(a);} RCounted(int *a):aliveptr(a){*aliveptr=1;} ~RCounted(){*aliveptr=0;} }; public: void setUp(void) { alive = 0; } void testSimple(void) { RCounted::ptr rcounted = new RCounted(&alive); CPPUNIT_ASSERT(alive); CPPUNIT_ASSERT(rcounted->foo()); rcounted = NULL; CPPUNIT_ASSERT(!alive); } void testTransfer(void) { RCounted::ptr rcounted = new RCounted(&alive); RCounted::ptr rc1 = rcounted; CPPUNIT_ASSERT(alive); rcounted = NULL; CPPUNIT_ASSERT(alive); CPPUNIT_ASSERT(rc1->foo()); rc1 = NULL; CPPUNIT_ASSERT(!alive); } void testScope(void) { { RCounted::ptr rcounted = new RCounted(&alive); CPPUNIT_ASSERT(alive); } CPPUNIT_ASSERT(!alive); } void testSelfAssignment(void) { RCounted::ptr rcounted = new RCounted(&alive); CPPUNIT_ASSERT(alive); rcounted = rcounted; CPPUNIT_ASSERT(alive); CPPUNIT_ASSERT(rcounted->foo()); rcounted = NULL; CPPUNIT_ASSERT(!alive); } void testTransient(void) { CPPUNIT_ASSERT(RCounted::Create(&alive)->foo()); CPPUNIT_ASSERT(!alive); } void testComparison(void) { RCounted::ptr a = new RCounted(&alive); RCounted::ptr c; RCounted::ptr b = new RCounted(&alive); RCounted::ptr a1 = a, b1 = b; c = new RCounted(&alive); #define TEST_COMPARE(OP) \ CPPUNIT_ASSERT_EQUAL(a OP b, a.gimmethepointer() OP b.gimmethepointer());\ CPPUNIT_ASSERT_EQUAL(a OP c, a.gimmethepointer() OP c.gimmethepointer());\ CPPUNIT_ASSERT_EQUAL(b OP c, b.gimmethepointer() OP c.gimmethepointer()); TEST_COMPARE(<); TEST_COMPARE(<=); TEST_COMPARE(>); TEST_COMPARE(>=); TEST_COMPARE(==); TEST_COMPARE(!=); CPPUNIT_ASSERT(!(b==a)); CPPUNIT_ASSERT(a==a); CPPUNIT_ASSERT(b==b); CPPUNIT_ASSERT(a1==a); CPPUNIT_ASSERT(b1==b); CPPUNIT_ASSERT(a!=b); CPPUNIT_ASSERT(b!=a); CPPUNIT_ASSERT(!(a!=a)); } }; CPPUNIT_TEST_SUITE_REGISTRATION( rcount_Test ); nget-0.27.1/test/knapsack_test.cc0000644000175000017500000001271610056212771017172 0ustar donutdonut00000000000000#include "knapsack.h" #include class knapsack_Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(knapsack_Test); CPPUNIT_TEST(testSimple); CPPUNIT_TEST(test2); CPPUNIT_TEST(testValue); CPPUNIT_TEST(test3); CPPUNIT_TEST(test4); CPPUNIT_TEST(test4_2); CPPUNIT_TEST(test4_3); CPPUNIT_TEST_SUITE_END(); protected: vector values, sizes; set results, results2, mresults, mresults2; public: void setUp(void) { values.clear(); sizes.clear(); results.clear(); results2.clear(); mresults.clear(); mresults2.clear(); } void testSimple(void) { int foo[] = {1,2,4,8,16,32}; values.insert(values.begin(), foo, foo+sizeof(foo)/sizeof(int)); sizes.insert(sizes.begin(), foo, foo+sizeof(foo)/sizeof(int)); int v = knapsack(values, sizes, 25, results); int ms = knapsack_minsize(values, sizes, 25, mresults); CPPUNIT_ASSERT_EQUAL(25, v); CPPUNIT_ASSERT_EQUAL(25, ms); CPPUNIT_ASSERT_EQUAL(3, (int)results.size()); CPPUNIT_ASSERT(results.count(0)); CPPUNIT_ASSERT(results.count(3)); CPPUNIT_ASSERT(results.count(4)); CPPUNIT_ASSERT(results == mresults); } void test2(void) { int foo[] = {7,23,45,78}; values.insert(values.begin(), foo, foo+sizeof(foo)/sizeof(int)); sizes.insert(sizes.begin(), foo, foo+sizeof(foo)/sizeof(int)); int v = knapsack(values, sizes, 70, results); CPPUNIT_ASSERT_EQUAL(68, v); CPPUNIT_ASSERT_EQUAL(2, (int)results.size()); CPPUNIT_ASSERT(results.count(1)); CPPUNIT_ASSERT(results.count(2)); int ms = knapsack_minsize(values, sizes, 70, mresults); CPPUNIT_ASSERT_EQUAL(75, ms); CPPUNIT_ASSERT_EQUAL(3, (int)mresults.size()); CPPUNIT_ASSERT(mresults.count(0)); CPPUNIT_ASSERT(mresults.count(1)); CPPUNIT_ASSERT(mresults.count(2)); } void testValue(void) { int vfoo[] = {5, 3, 4, 4, 8}; int sfoo[] = {5, 4, 4, 4, 10}; values.insert(values.begin(), vfoo, vfoo+sizeof(vfoo)/sizeof(int)); sizes.insert(sizes.begin(), sfoo, sfoo+sizeof(sfoo)/sizeof(int)); int v = knapsack(values, sizes, 8, results); CPPUNIT_ASSERT_EQUAL(8, v); CPPUNIT_ASSERT_EQUAL(2, (int)results.size()); CPPUNIT_ASSERT(results.count(2)); CPPUNIT_ASSERT(results.count(3)); v = knapsack(values, sizes, 10, results2); CPPUNIT_ASSERT_EQUAL(9, v); CPPUNIT_ASSERT_EQUAL(2, (int)results2.size()); CPPUNIT_ASSERT(results2.count(0)); CPPUNIT_ASSERT(results2.count(2)); int ms = knapsack_minsize(values, sizes, 8, mresults); CPPUNIT_ASSERT_EQUAL(8, ms); CPPUNIT_ASSERT_EQUAL(2, (int)mresults.size()); CPPUNIT_ASSERT(mresults.count(2)); CPPUNIT_ASSERT(mresults.count(3)); ms = knapsack_minsize(values, sizes, 10, mresults2); CPPUNIT_ASSERT_EQUAL(12, ms); CPPUNIT_ASSERT_EQUAL(3, (int)mresults2.size()); CPPUNIT_ASSERT(mresults2.count(1)); CPPUNIT_ASSERT(mresults2.count(2)); CPPUNIT_ASSERT(mresults2.count(3)); } void test3(void) { int foo[] = {1, 2, 2}; values.insert(values.begin(), foo, foo+sizeof(foo)/sizeof(int)); sizes.insert(sizes.begin(), foo, foo+sizeof(foo)/sizeof(int)); int v = knapsack(values, sizes, 2, results); CPPUNIT_ASSERT_EQUAL(2, v); CPPUNIT_ASSERT_EQUAL(1, (int)results.size()); CPPUNIT_ASSERT(results.count(1) || results.count(2)); int ms = knapsack_minsize(values, sizes, 2, mresults); CPPUNIT_ASSERT_EQUAL(2, ms); CPPUNIT_ASSERT_EQUAL(1, (int)mresults.size()); CPPUNIT_ASSERT(mresults.count(1) || mresults.count(2)); } void test4(void) { int foo[] = {8,8,8,8,7,7,7,7,7,7}; values.insert(values.begin(), foo, foo+sizeof(foo)/sizeof(int)); sizes.insert(sizes.begin(), foo, foo+sizeof(foo)/sizeof(int)); int v = knapsack(values, sizes, 9, results); CPPUNIT_ASSERT_EQUAL(8, v); CPPUNIT_ASSERT_EQUAL(1, (int)results.size()); CPPUNIT_ASSERT(!(results.count(4) || results.count(5) || results.count(6) || results.count(7) || results.count(8) || results.count(9))); int ms = knapsack_minsize(values, sizes, 9, mresults); CPPUNIT_ASSERT_EQUAL(14, ms); CPPUNIT_ASSERT_EQUAL(2, (int)mresults.size()); CPPUNIT_ASSERT(!(mresults.count(0) || mresults.count(1) || mresults.count(2) || mresults.count(3))); } void test4_2(void) { int foo[] = {7,7,7,7,7,7,8,8,8,8}; values.insert(values.begin(), foo, foo+sizeof(foo)/sizeof(int)); sizes.insert(sizes.begin(), foo, foo+sizeof(foo)/sizeof(int)); int v = knapsack(values, sizes, 9, results); CPPUNIT_ASSERT_EQUAL(8, v); CPPUNIT_ASSERT_EQUAL(1, (int)results.size()); CPPUNIT_ASSERT(!(results.count(0) || results.count(1) || results.count(2) || results.count(3) || results.count(4) || results.count(5))); int ms = knapsack_minsize(values, sizes, 9, mresults); CPPUNIT_ASSERT_EQUAL(14, ms); CPPUNIT_ASSERT_EQUAL(2, (int)mresults.size()); CPPUNIT_ASSERT(!(mresults.count(6) || mresults.count(7) || mresults.count(8) || mresults.count(9))); } void test4_3(void) { int foo[] = {8,8,7,7,7}; values.insert(values.begin(), foo, foo+sizeof(foo)/sizeof(int)); sizes.insert(sizes.begin(), foo, foo+sizeof(foo)/sizeof(int)); int v = knapsack(values, sizes, 9, results); CPPUNIT_ASSERT_EQUAL(8, v); CPPUNIT_ASSERT_EQUAL(1, (int)results.size()); CPPUNIT_ASSERT(results.count(0) || results.count(1)); int ms = knapsack_minsize(values, sizes, 9, mresults); CPPUNIT_ASSERT_EQUAL(14, ms); CPPUNIT_ASSERT_EQUAL(2, (int)mresults.size()); CPPUNIT_ASSERT(!(mresults.count(0) || mresults.count(1))); } }; CPPUNIT_TEST_SUITE_REGISTRATION( knapsack_Test ); nget-0.27.1/test/nntpd.py0000644000175000017500000003314710161646004015524 0ustar donutdonut00000000000000# nntpd.py - simple threaded nntp server classes for testing purposes. # Copyright (C) 2002-2004 Matthew Mueller # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from __future__ import nested_scopes import os, select import time import threading import SocketServer import socket #allow testing with ipv6. if os.environ.get('TEST_NGET_IPv6'): serveraddr="::1" serveraf=socket.AF_INET6 else: serveraddr="127.0.0.1" serveraf=socket.AF_INET def addressstr(address): host,port=address[:2] if ':' in host: return '[%s]:%s'%(host,port) return '%s:%s'%(host,port) def chomp(line): if line[-2:] == '\r\n': return line[:-2] elif line[-1:] in '\r\n': return line[:-1] return line import fnmatch class WildMat: def __init__(self, pat): ####pat should really be massaged into a regex since the wildmat semantics are not the same as that of fnmatch self.pat = pat def __call__(self, arg): return fnmatch.fnmatchcase(arg, self.pat) def MatchAny(arg): return 1 class NNTPError(Exception): def __init__(self, code, text): self.code=code self.text=text def __str__(self): return '%03i %s'%(self.code, self.text) class NNTPNoSuchGroupError(NNTPError): def __init__(self, g): NNTPError.__init__(self, 411, "No such newsgroup %s"%g) class NNTPNoGroupSelectedError(NNTPError): def __init__(self): NNTPError.__init__(self, 412, "No newsgroup currently selected") class NNTPNoSuchArticleNum(NNTPError): def __init__(self, anum): NNTPError.__init__(self, 423, "No such article %s in this newsgroup"%anum) class NNTPNoSuchArticleMID(NNTPError): def __init__(self, mid): NNTPError.__init__(self, 430, "No article found with message-id %s"%mid) class NNTPBadCommand(NNTPError): def __init__(self, s=''): NNTPError.__init__(self, 500, "Bad command" + (s and ' (%s)'%s or '')) class NNTPSyntaxError(NNTPError): def __init__(self, s=''): NNTPError.__init__(self, 501, "Syntax error" + (s and ' (%s)'%s or '')) class NNTPAuthRequired(NNTPError): def __init__(self): NNTPError.__init__(self, 480, "Authorization required") class NNTPAuthPassRequired(NNTPError): def __init__(self): NNTPError.__init__(self, 381, "PASS required") class NNTPAuthError(NNTPError): def __init__(self): NNTPError.__init__(self, 502, "Authentication error") class NNTPDisconnect(Exception): def __init__(self, err=None): self.err=err class AuthInfo: def __init__(self, user, password, caps=None): self.user=user self.password=password if caps is None: caps = {} self.caps=caps def has_auth(self, cmd): if not self.caps.has_key(cmd): if cmd in ('quit', 'authinfo'): #allow QUIT and AUTHINFO even if default has been set to no auth return 1 return self.caps.get('*', 1) #default to full auth return self.caps[cmd] def split_cmd(rcmd): rs = rcmd.split(' ',1) rs[0] = rs[0].lower() if len(rs)==1: return rs[0], '' else: return rs class NNTPRequestHandler(SocketServer.StreamRequestHandler): def nwrite(self, s): self.wfile.write(s+"\r\n") def call_command(self, cmd, args): func = getattr(self, 'cmd_'+cmd, None) if func and callable(func): if not self.authed.has_auth(cmd): raise NNTPAuthRequired self.server.incrcount(cmd) func(args) else: raise NNTPBadCommand, cmd def handle(self): self.server.incrcount("_conns") readline = self.rfile.readline self.nwrite("200 Hello World, %s"%addressstr(self.client_address)) self.group = None self._tmpuser = None self.authed = self.server.auth[''] while 1: rcmd = readline() if not rcmd: break rcmd = rcmd.strip() cmd,args = split_cmd(rcmd) try: self.call_command(cmd, args) except NNTPDisconnect, d: if d.err: self.nwrite(str(d.err)) return except NNTPError, e: self.nwrite(str(e)) def cmd_authinfo(self, args): cmd,arg = split_cmd(args) if cmd=='user': self._tmpuser=arg raise NNTPAuthPassRequired elif cmd=='pass': if not self._tmpuser: raise NNTPAuthError a = self.server.auth.get(self._tmpuser) if not a: raise NNTPAuthError if arg != a.password: raise NNTPAuthError self.authed = a self.nwrite("281 Authentication accepted") else: raise NNTPSyntaxError, args def cmd_date(self, args): self.nwrite("111 "+time.strftime("%Y%m%d%H%M%S",time.gmtime())) def cmd_list(self, args): subcmd, args = split_cmd(args) self.call_command('list_'+subcmd, args) def cmd_list_newsgroups(self, args): self.nwrite("215 information follows") if args: matcher = WildMat(args) else: matcher = MatchAny for name,group in self.server.groups.items(): if group.description and matcher(name): self.nwrite("%s %s"%(name, group.description)) self.nwrite(".") def cmd_list_(self, args): if args: matcher = WildMat(args) else: matcher = MatchAny self.nwrite("215 list of newsgroups follows") for name,group in self.server.groups.items(): if matcher(name): self.nwrite("%s %i %i %s"%(name, group.low, group.high, "y")) self.nwrite(".") cmd_list_active = cmd_list_ def cmd_newgroups(self, args): #since = time.mktime(time.strptime(args,"%Y%m%d %H%M%S %Z")) since = ''.join(args.split()[0:2]) if len(since)!=14: raise NNTPSyntaxError, args self.nwrite("231 list of new newsgroups follows") for name,group in self.server.groups.items(): #if since < group.creationtime: if since < time.strftime("%Y%m%d%H%M%S",time.gmtime(group.creationtime)): #just do a lexicographical comparison. stupid c library. blah. self.nwrite("%s %i %i %s"%(name, group.low, group.high, "y")) self.nwrite(".") def cmd_listgroup(self, args): if args: group = self.server.groups.get(args) if not group: raise NNTPNoSuchGroupError, args self.group = group if not self.group: raise NNTPNoGroupSelectedError self.nwrite("211 list follows") anums = self.group.articles.keys() anums.sort() for an in anums: self.nwrite(str(an)) self.nwrite(".") def cmd_group(self, args): self.group = self.server.groups.get(args) if not self.group: raise NNTPNoSuchGroupError, args self.nwrite("211 %i %i %i group %s selected"%(self.group.high-self.group.low+1, self.group.low, self.group.high, args)) def cmd_xover(self, args): if not self.group: raise NNTPNoGroupSelectedError rng = args.split('-') if len(rng)>1: low,high = map(long, rng) else: low = high = long(rng[0]) keys = [k for k in self.group.articles.keys() if k>=low and k<=high] keys.sort() self.nwrite("224 Overview information follows "+str(rng)) for anum in keys: article = self.group.articles[anum] self.nwrite(str(anum)+'\t%(subject)s\t%(author)s\t%(date)s\t%(mid)s\t%(references)s\t%(bytes)s\t%(lines)s'%vars(article)) self.nwrite('.') def cmd_xpat(self, args): if not self.group: raise NNTPNoGroupSelectedError field,rng,pat = args.split(' ', 2) field = field.lower() if field == 'message-id': field = 'mid' ####doesn't handle specifing message-id instead of range (nget doesn't use this, though) rng = rng.split('-') if len(rng)>1: low,high = map(long, rng) else: low = high = long(rng[0]) keys = [k for k in self.group.articles.keys() if k>=low and k<=high] keys.sort() matcher = WildMat(pat) self.nwrite("221 %s fields follow"%field) for anum in keys: article = self.group.articles[anum] val = getattr(article, field, "") if matcher(val): self.nwrite(str(anum)+self.server.xpat_field_sep+val) self.nwrite('.') def cmd_article(self, args): if args[0]=='<': try: article = self.server.midindex[args] except KeyError: raise NNTPNoSuchArticleMID, args anum=0 else: if not self.group: raise NNTPNoGroupSelectedError try: anum=long(args) article = self.group.articles[anum] except KeyError: raise NNTPNoSuchArticleNum, args self.nwrite("220 %i %s Article follows"%(anum,article.mid)) self.nwrite(article.text) self.nwrite('.') def cmd_mode(self, args): if args=='reader': self.nwrite("200 MODE READER enabled") else: raise NNTPSyntaxError, args def cmd_quit(self, args): raise NNTPDisconnect("205 Goodbye") class _TimeToQuit(Exception): pass class StoppableThreadingTCPServer(SocketServer.ThreadingTCPServer): def __init__(self, addr, handler): if os.name == "nt": import socket s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s1.bind(('127.0.0.1',0)) s1.listen(1) s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s2.connect(s1.getsockname()) self.controlr = s1.accept()[0] self.controlw = s2 s1.close() else: self.controlr, self.controlw = os.pipe() self.address_family=serveraf SocketServer.ThreadingTCPServer.__init__(self, addr, handler) def stop_serving(self): if hasattr(self.controlw, 'send'): self.controlw.send('FOO') else: os.write(self.controlw, 'FOO') def get_request(self): readfds = [self.socket, self.controlr] while 1: ready = select.select(readfds, [], []) if self.controlr in ready[0]: raise _TimeToQuit if self.socket in ready[0]: return SocketServer.ThreadingTCPServer.get_request(self) def serve_forever(self): try: SocketServer.ThreadingTCPServer.serve_forever(self) except _TimeToQuit: if hasattr(self.controlw, 'close'): self.controlr.close() self.controlw.close() else: os.close(self.controlr) os.close(self.controlw) self.server_close() # Clean up before we leave class NNTPTCPServer(StoppableThreadingTCPServer): def __init__(self, addr, RequestHandlerClass=NNTPRequestHandler): StoppableThreadingTCPServer.__init__(self, addr, RequestHandlerClass) self.groups = {} self.midindex = {} self.auth = {} self.adduser('','') self.lock = threading.Lock() self.counts = {} self.xpat_field_sep = ' ' def count(self, key): return self.counts.get(key, 0) def incrcount(self, key): self.lock.acquire() self.counts[key] = self.count(key) + 1 self.lock.release() def adduser(self, user, password, caps=None): self.auth[user]=AuthInfo(user, password, caps) def addarticle(self, groups, article, anum=None): self.midindex[article.mid]=article for g in groups: #if g not in self.groups: if not self.groups.has_key(g): self.groups[g]=Group() self.groups[g].addarticle(article, anum) def rmarticle(self, mid): article = self.midindex[mid] del self.midindex[mid] for g in self.groups.values(): g.rmarticle(article) def addgroup(self, name, desc=None): if self.groups.has_key(name): self.groups[name].description=desc else: self.groups[name]=Group(description=desc) class NNTPD_Master: def __init__(self, servers_num): self.servers = [] self.threads = [] if type(servers_num)==type(1): #servers_num is integer number of servers to start for i in range(servers_num): self.servers.append(NNTPTCPServer((serveraddr, 0))) #port 0 selects a port automatically. else: #servers_num is a list of servers already created self.servers.extend(servers_num) def start(self): for server in self.servers: s=threading.Thread(target=server.serve_forever) #s.setDaemon(1) s.start() self.threads.append(s) def stop(self): for server in self.servers: server.stop_serving() for thread in self.threads: thread.join() self.threads = [] class Group: def __init__(self, description=None): self.low = 1 self.high = 0 self.articles = {} self.creationtime = time.time() self.description = description def addarticle(self, article, anum=None): if anum is None: anum = self.high + 1 if self.articles.has_key(anum): raise Exception, "already have article %s"%anum self.articles[anum] = article if anum > self.high: self.high = anum if anum < self.low: self.low = anum def rmarticle(self, article): for k,v in self.articles.items(): if v==article: del self.articles[k] if self.articles: self.low = min(self.articles.keys()) else: self.low = self.high + 1 return class FakeArticle: def __init__(self, mid, name, partno, totalparts, groups, body): self.mid=mid self.references='' a = [] def add(foo): a.append(foo) add("Newsgroups: "+' '.join(groups)) if totalparts>0: self.subject="%(name)s [%(partno)i/%(totalparts)i]"%vars() else: self.subject="Subject: %(name)s"%vars() add("Subject: "+self.subject) self.author = " (test)" self.lines = len(body) add("From: "+self.author) self.date=time.ctime() add("Date: "+self.date) add("Lines: %i"%self.lines) add("Message-ID: "+mid) add("") for l in body: if l[0]=='.': add('.'+l) else: add(l) self.text = '\r\n'.join(a) self.bytes = len(self.text) import rfc822 class FileArticle: def __init__(self, fobj): msg = rfc822.Message(fobj) self.author = msg.get("From") self.subject = msg.get("Subject") self.date = msg.get("Date") self.mid = msg.get("Message-ID") self.references = msg.get("References", '') a = [l.rstrip() for l in msg.headers] a.append('') for l in fobj.xreadlines(): if l[0]=='.': a.append('.'+chomp(l)) else: a.append(chomp(l)) self.text = '\r\n'.join(a) self.lines = len(a) - 1 - len(msg.headers) self.bytes = len(self.text) nget-0.27.1/strtoker.h0000644000175000017500000000251710056212771015076 0ustar donutdonut00000000000000/* strtoker.* - good strtok replacements Copyright (C) 1999-2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _STRTOKER_H_incd_ #define _STRTOKER_H_incd_ #ifdef HAVE_CONFIG_H #include "config.h" #endif //goodstrtok: (NOTE: modifies cur!) //*cur should be set to string to tokenize on first call. //returns token, or NULL if finished. //thread safe. char * goodstrtok(char **cur, char sep); //whee! class strtoker { protected: char **toks; int maxtoks; public: int numtoks; char tokchar; char * operator[](int i){return toks[i];} int tok(char *str); strtoker(int num,char tok); ~strtoker(){delete [] toks;} }; #endif nget-0.27.1/mylockfile.h0000644000175000017500000001065710056212770015362 0ustar donutdonut00000000000000/* mylockfile.* - c++ wrapper for file locks (for easy unlocking due to destructors, and abstraction from lowlevel) Copyright (C) 1999-2003 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _MYLOCKFILE_H_ #define _MYLOCKFILE_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "log.h" //liblockfile doesn't support anything but exclusive locks, so these are only "wants" #define WANT_SH_LOCK 1 #define WANT_EX_LOCK 0 #define FLOCK_DEBUG_LEV DEBUG_MED #ifdef HAVE_LIBLOCKFILE #include class c_lockfile{ public: string file; c_lockfile(string filename,int flag){ file=filename; file.append(".lock"); PDEBUG(FLOCK_DEBUG_LEV,"attempting to lock %s",file.c_str()); int ret=lockfile_create(file.c_str(),10,0); if (ret){ file = ""; throw ApplicationExFatal(Ex_INIT,"lockfile_create %s: %i (%s)",filename.c_str(),ret,strerror(errno)); } PDEBUG(FLOCK_DEBUG_LEV,"locked %s",file.c_str()); } ~c_lockfile(){ if (!file.empty()) { lockfile_remove(file.c_str()); PDEBUG(FLOCK_DEBUG_LEV,"unlocked %s",file.c_str()); } } }; #elif HAVE_FLOCK #include #include class c_lockfile{ public: int fd; c_lockfile(string filename,int flag){ PDEBUG(FLOCK_DEBUG_LEV,"attempting to flock %s",filename.c_str()); fd=open(filename.c_str(),O_RDONLY); if (fd<0){ if (errno==ENOENT){ // if (flag&WANT_SH_LOCK) return; } else throw ApplicationExFatal(Ex_INIT,"c_lockfile: open %s (%s)",filename.c_str(),strerror(errno)); } int ret=flock(fd,(flag&WANT_SH_LOCK)?LOCK_SH:LOCK_EX); if (ret) { int savederrno = errno; close(fd); fd = -1; throw ApplicationExFatal(Ex_INIT,"c_lockfile: flock %s: %i (%s)",filename.c_str(),ret,strerror(savederrno)); } PDEBUG(FLOCK_DEBUG_LEV,"flocked %s (%i)",filename.c_str(),fd); // sleep(10); } ~c_lockfile(){ if (fd>=0) { flock(fd,LOCK_UN); close(fd); PDEBUG(FLOCK_DEBUG_LEV,"unflocked %i",fd); } } }; #elif HAVE_LOCKFILE #define WIN32_LEAN_AND_MEAN #undef NOMINMAX #define NOMINMAX 1 #include class c_lockfile{ public: HANDLE hFile; string filename; c_lockfile(string infilename,int flag): hFile(INVALID_HANDLE_VALUE){ filename = infilename + ".lock";//Windows does not allow removing the locked file, (when we rename the .tmp to the real name), so create a seperate lock file instead. PDEBUG(FLOCK_DEBUG_LEV,"attempting to LockFile %s",filename.c_str()); //if (!fexists(filename.c_str())) // return; //hFile = CreateFile(filename.c_str(),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); hFile = CreateFile(filename.c_str(), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile==INVALID_HANDLE_VALUE){ throw ApplicationExFatal(Ex_INIT,"c_lockfile: open %s (%i)",filename.c_str(),GetLastError()); } int tries=1; while (!LockFile(hFile,0,0,0xFFFFFFFF,0)) { if (tries++ >= 10) { CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; throw ApplicationExFatal(Ex_INIT,"c_lockfile: LockFile %s: giving up after %i tries",filename.c_str(), tries); } sleep(1); PDEBUG(FLOCK_DEBUG_LEV,"try %i LockFile %s",tries,filename.c_str()); } PDEBUG(FLOCK_DEBUG_LEV,"locked %s (%p)",filename.c_str(),hFile); } ~c_lockfile(){ if (hFile!=INVALID_HANDLE_VALUE) { UnlockFile(hFile,0,0,0xFFFFFFFF,0); CloseHandle(hFile); DeleteFile(filename.c_str()); PDEBUG(FLOCK_DEBUG_LEV,"unlocked %s(%p)",filename.c_str(),hFile); } } }; #else #warning building without any sort of locking at all class c_lockfile{ public: c_lockfile(string filename,int flag){} ~c_lockfile(){} }; #endif #endif nget-0.27.1/argparser.h0000644000175000017500000000206410056212770015203 0ustar donutdonut00000000000000/* argparser.* - parse a string into a list of args Copyright (C) 2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __ARGPARSER_H__ #define __ARGPARSER_H__ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include typedef list arglist_t; void parseargs(arglist_t &argl, const char *s, bool ignorecomments=false); #endif nget-0.27.1/dupe_file.h0000644000175000017500000000306610056212770015154 0ustar donutdonut00000000000000/* dupe_file.* - dupe file detection code Copyright (C) 1999-2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __DUPE_FILE_H__ #define __DUPE_FILE_H__ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "myregex.h" class file_match { public: c_regex_nosub reg; ulong size; file_match(const char *m,int a,ulong s):reg(m,a), size(s){}; }; typedef multimap filematchmap; class dupe_file_checker { private: filematchmap flist; public: void addfrompath(const string &path); void addfile(const string &path, const char *filename); void add(const char *filename, ulong size); int checkhavefile(const char *f, const string &messageid, ulong bytes) const; bool empty (void) const {return flist.empty();} void clear(void); ~dupe_file_checker() {clear();} }; #endif nget-0.27.1/aclocal.m40000644000175000017500000004421210161634631014706 0ustar donutdonut00000000000000AC_DEFUN(SOCK_CHECK_TYPE, [AC_REQUIRE([AC_HEADER_STDC])dnl AC_MSG_CHECKING(for $1) AC_CACHE_VAL(ac_cv_type_$1, [AC_EGREP_CPP(dnl changequote(<<,>>)dnl <<$1[^a-zA-Z_0-9]>>dnl changequote([,]), [#include #include #if STDC_HEADERS #include #include #endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl AC_MSG_RESULT($ac_cv_type_$1) if test $ac_cv_type_$1 = no; then AC_DEFINE($1, $2, [Define to `$2' if doesn't define]) fi ]) AC_DEFUN(MY_CHECK_POPT_CONST, [AC_CACHE_CHECK([if popt wants const argvs], ac_cv_popt_const_argv, [AC_TRY_COMPILE([#include ], [const char ** targv=NULL;poptContext c=poptGetContext(NULL,1,targv,NULL,0);], ac_cv_popt_const_argv=yes, ac_cv_popt_const_argv=no)]) if test $ac_cv_popt_const_argv = yes; then AC_DEFINE(POPT_CONST_ARGV,1,[Does popt want const argvs?]) fi ]) dnl AC_TRY_COMPILE(INCLUDES, FUNCTION-BODY, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) AC_DEFUN(MY_CHECK_EXCEPTIONS, [ AC_MSG_CHECKING(for exception handling support) AC_CACHE_VAL(my_cv_exceptions,[ AC_TRY_COMPILE([#include ], [try { throw 1; } catch (int i) {int z=i;}], my_cv_exceptions=yes) if test -z $my_cv_exceptions; then CXXFLAGS="$CXXFLAGS -fhandle-exceptions" AC_TRY_COMPILE([#include ], [try { throw 1; } catch (int i) {int z=i;}], my_cv_exceptions=yes, my_cv_exceptions=no) fi ]) AC_MSG_RESULT($my_cv_exceptions) if test "x$my_cv_exceptions" = xno; then AC_MSG_ERROR([exceptions not supported by your compiler, if you need a special flag try CXXFLAGS="-flag-to-enable-exceptions" ./configure]) fi ] ) AC_DEFUN(MY_CHECK_FOMIT_FRAME_POINTER,[ AC_MSG_CHECKING([attempted use of -fomit-frame-pointer on x86]) result=no if echo "$CXX $CXXFLAGS" | grep fomit-frame-pointer ; then if test -n "$host_alias" ; then my_host="$host_alias" else my_host=`uname -m` fi if echo "$my_host" | grep 86 ; then AC_MSG_WARN([cannot build with -fomit-frame-pointer on x86. gcc does not handle exceptions properly in code compiled with -fomit-frame-pointer on x86 platforms. See: http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=2447&database=gcc Removing -fomit-frame-pointer from the compiler flags. ]) CXX=`echo $CXX | sed "s/-fomit-frame-pointer//"` CXXFLAGS=`echo $CXXFLAGS | sed "s/-fomit-frame-pointer//"` result=removed fi fi AC_MSG_RESULT($result) ]) AC_DEFUN(MY_DISABLE_OPT,[ changequote(, )dnl CXXFLAGS=`echo $CXXFLAGS | sed "s/-O[1-9] *//"` changequote([, ])dnl ]) AC_DEFUN([MY_TRY_COMPILE_HASH_MAP],[ AC_TRY_COMPILE([ #ifdef HAVE_HASH_MAP #include #elif HAVE_EXT_HASH_MAP #include #elif HAVE_HASH_MAP_H #include #endif using namespace std; $1 ], [ hash_map h; hash_multimap h2; ], [$2], [$3] ) ]) AC_DEFUN([MY_CHECK_HASH_MAP],[ AC_CHECK_HEADERS(hash_map ext/hash_map hash_map.h) AC_CACHE_CHECK([working hash_map], ac_cv_working_hash_map, [ MY_TRY_COMPILE_HASH_MAP([], [ac_cv_working_hash_map=yes],[ MY_TRY_COMPILE_HASH_MAP([using namespace __gnu_cxx;], [ac_cv_working_hash_map=yes-in_gnu_cxx_namespace], [ac_cv_working_hash_map=no] ) ]) ]) if test "$ac_cv_working_hash_map" = "yes"; then AC_DEFINE(HAVE_WORKING_HASH_MAP,1,[define if system has a usable hash_map]) elif test "$ac_cv_working_hash_map" = "yes-in_gnu_cxx_namespace"; then AC_DEFINE(HAVE_WORKING_HASH_MAP,1,[define if system has a usable hash_map]) AC_DEFINE(HASH_MAP_NEED_GNU_CXX_NAMESPACE,1,[define if hash_map classes are in __gnu_cxx namespace]) fi ]) AC_DEFUN([MY_SEARCH_LIBS],[ AC_CACHE_CHECK([for $5], [my_cv_$1], [ac_func_search_save_LIBS=$LIBS my_cv_$1=no AC_TRY_LINK([$2], [$3], [my_cv_$1="none required"]) if test "$my_cv_$1" = no; then for ac_lib in $4; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" AC_TRY_LINK([$2], [$3], [my_cv_$1="-l$ac_lib" break]) done fi LIBS=$ac_func_search_save_LIBS]) AS_IF([test "$my_cv_$1" != no], [test "$my_cv_$1" = "none required" || LIBS="$my_cv_$1 $LIBS" AC_DEFINE(HAVE_[]translit([$1], [a-z], [A-Z]),1,[Do we have $5?])])dnl ]) AC_DEFUN([MY_CHECK_TERMSTUFF],[MY_SEARCH_LIBS(working_termstuff, [#include #include ], [tputs(clr_bol, 1, putchar);], [termcap curses ncurses], [a working term.h, tputs, and clr_bol]) ]) AC_DEFUN([MY_CHECK_SOCKET],[MY_SEARCH_LIBS(socket, [#include #ifdef HAVE_WINSOCK_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif], [socket(AF_INET, SOCK_STREAM, 0);], [socket ws2_32 wsock32], [library containing socket]) ]) # MY_CHECK_FUNC(FUNCTION, [ARGS], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [HEADERS]) # ----------------------------------------------------------------- AC_DEFUN([MY_CHECK_FUNC], [AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$1])dnl AC_CACHE_CHECK([for $1], ac_var, [AC_LINK_IFELSE([AC_LANG_PROGRAM([$5],[$1($2)])], [AS_VAR_SET(ac_var, yes)], [AS_VAR_SET(ac_var, no)])]) AS_IF([test AS_VAR_GET(ac_var) = yes], [$3], [$4])dnl AS_VAR_POPDEF([ac_var])dnl ])# MY_CHECK_FUNC # MY_CHECK_FUNCS(FUNCTION..., [ARGS], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [HEADERS]) # --------------------------------------------------------------------- AC_DEFUN([MY_CHECK_FUNCS], [AC_FOREACH([AC_Func], [$1], [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func), [Define to 1 if you have the `]AC_Func[' function.])])dnl for ac_func in $1 do MY_CHECK_FUNC($ac_func,[$2], [AC_DEFINE_UNQUOTED([AS_TR_CPP([HAVE_$ac_func])]) $3], [$4],[$5])dnl done ]) dnl @synopsis AC_PROTOTYPE(function, includes, code, TAG1, values1 [, TAG2, values2 [...]]) dnl dnl Try all the combinations of , ... to successfully compile . dnl , , ... are substituted in and with values found in dnl , , ... respectively. , , ... contain a list of dnl possible values for each corresponding tag and all combinations are tested. dnl When AC_TRY_COMPILE(include, code) is successfull for a given substitution, the macro dnl stops and defines the following macros: FUNCTION_TAG1, FUNCTION_TAG2, ... using AC_DEFINE() dnl with values set to the current values of , , ... dnl If no combination is successfull the configure script is aborted with a message. dnl dnl Intended purpose is to find which combination of argument types is acceptable for a dnl given function . It is recommended to list the most specific types first. dnl For instance ARG1, [size_t, int] instead of ARG1, [int, size_t]. dnl dnl Generic usage pattern: dnl dnl 1) add a call in configure.in dnl dnl AC_PROTOTYPE(...) dnl dnl 2) call autoheader to see which symbols are not covered dnl dnl 3) add the lines in acconfig.h dnl dnl /* Type of Nth argument of function */ dnl #undef FUNCTION_ARGN dnl dnl 4) Within the code use FUNCTION_ARGN instead of an hardwired type dnl dnl Complete example: dnl dnl 1) configure.in dnl dnl AC_PROTOTYPE(getpeername, dnl [ dnl #include dnl #include dnl ], dnl [ dnl int a = 0; dnl ARG2 * b = 0; dnl ARG3 * c = 0; dnl getpeername(a, b, c); dnl ], dnl ARG2, [struct sockaddr, void], dnl ARG3, [socklen_t, size_t, int, unsigned int, long unsigned int]) dnl dnl 2) call autoheader dnl dnl autoheader: Symbol `GETPEERNAME_ARG2' is not covered by ./acconfig.h dnl autoheader: Symbol `GETPEERNAME_ARG3' is not covered by ./acconfig.h dnl dnl 3) acconfig.h dnl dnl /* Type of second argument of getpeername */ dnl #undef GETPEERNAME_ARG2 dnl dnl /* Type of third argument of getpeername */ dnl #undef GETPEERNAME_ARG3 dnl dnl 4) in the code dnl ... dnl GETPEERNAME_ARG2 name; dnl GETPEERNAME_ARG3 namelen; dnl ... dnl ret = getpeername(socket, &name, &namelen); dnl ... dnl dnl Implementation notes: generating all possible permutations of dnl the arguments is not easily done with the usual mixture of shell and m4, dnl that is why this macro is almost 100% m4 code. It generates long but simple dnl to read code. dnl dnl @version $Id: ac_prototype.m4,v 1.2 2000/08/11 06:28:24 simons Exp $ dnl @author Loic Dachary dnl AC_DEFUN([AC_PROTOTYPE],[ dnl dnl Upper case function name dnl pushdef([function],translit([$1], [a-z], [A-Z])) dnl dnl Collect tags that will be substituted dnl pushdef([tags],[AC_PROTOTYPE_TAGS(builtin([shift],builtin([shift],builtin([shift],$@))))]) dnl dnl Wrap in a 1 time loop, when a combination is found break to stop the combinatory exploration dnl for i in 1 do AC_PROTOTYPE_LOOP(AC_PROTOTYPE_REVERSE($1, AC_PROTOTYPE_SUBST($2,tags),AC_PROTOTYPE_SUBST($3,tags),builtin([shift],builtin([shift],builtin([shift],$@))))) AC_MSG_ERROR($1 unable to find a working combination) done popdef([tags]) popdef([function]) ]) dnl dnl AC_PROTOTYPE_REVERSE(list) dnl dnl Reverse the order of the dnl AC_DEFUN([AC_PROTOTYPE_REVERSE],[ifelse($#,0,,$#,1,[[$1]],[AC_PROTOTYPE_REVERSE(builtin([shift],$@)),[$1]])]) dnl dnl AC_PROTOTYPE_SUBST(string, tag) dnl dnl Substitute all occurence of in with _VAL. dnl Assumes that tag_VAL is a macro containing the value associated to tag. dnl AC_DEFUN([AC_PROTOTYPE_SUBST],[ifelse($2,,[$1],[AC_PROTOTYPE_SUBST(patsubst([$1],[$2],[$2[]_VAL]),builtin([shift],builtin([shift],$@)))])]) dnl dnl AC_PROTOTYPE_TAGS([tag, values, [tag, values ...]]) dnl dnl Generate a list of by skipping . dnl AC_DEFUN([AC_PROTOTYPE_TAGS],[ifelse($1,,[],[$1, AC_PROTOTYPE_TAGS(builtin([shift],builtin([shift],$@)))])]) dnl dnl AC_PROTOTYPE_DEFINES(tags) dnl dnl Generate a AC_DEFINE(function_tag, tag_VAL) for each tag in list dnl Assumes that function is a macro containing the name of the function in upper case dnl and that tag_VAL is a macro containing the value associated to tag. dnl AC_DEFUN([AC_PROTOTYPE_DEFINES],[ifelse($1,,[],[AC_DEFINE(function[]_$1, $1_VAL, Type of function $1) AC_PROTOTYPE_DEFINES(builtin([shift],$@))])]) dnl dnl AC_PROTOTYPE_STATUS(tags) dnl dnl Generates a message suitable for argument to AC_MSG_* macros. For each tag dnl in the list the message tag => tag_VAL is generated. dnl Assumes that tag_VAL is a macro containing the value associated to tag. dnl AC_DEFUN([AC_PROTOTYPE_STATUS],[ifelse($1,,[],[$1 => $1_VAL AC_PROTOTYPE_STATUS(builtin([shift],$@))])]) dnl dnl AC_PROTOTYPE_EACH(tag, values) dnl dnl Call AC_PROTOTYPE_LOOP for each values and define the macro tag_VAL to dnl the current value. dnl AC_DEFUN([AC_PROTOTYPE_EACH],[ ifelse($2,, [ ], [ pushdef([$1_VAL], $2) AC_PROTOTYPE_LOOP(rest) popdef([$1_VAL]) AC_PROTOTYPE_EACH($1, builtin([shift], builtin([shift], $@))) ]) ]) dnl dnl AC_PROTOTYPE_LOOP([tag, values, [tag, values ...]], code, include, function) dnl dnl If there is a tag/values pair, call AC_PROTOTYPE_EACH with it. dnl If there is no tag/values pair left, tries to compile the code and include dnl using AC_TRY_COMPILE. If it compiles, AC_DEFINE all the tags to their dnl current value and exit with success. dnl AC_DEFUN([AC_PROTOTYPE_LOOP],[ ifelse(builtin([eval], $# > 3), 1, [ pushdef([rest],[builtin([shift],builtin([shift],$@))]) AC_PROTOTYPE_EACH($2,$1) popdef([rest]) ], [ AC_MSG_CHECKING($3 AC_PROTOTYPE_STATUS(tags)) dnl dnl Activate fatal warnings if possible, gives better guess dnl ac_save_CPPFLAGS="$CPPFLAGS" dnl nget is c++, so we can hardcode this since autoconf barfs on the tests if test "$GXX" = "yes" ; then CPPFLAGS="$CPPFLAGS -Werror" ; fi dnl ifelse(AC_LANG,CPLUSPLUS,if test "$GXX" = "yes" ; then CPPFLAGS="$CPPFLAGS -Werror" ; fi) dnl ifelse(AC_LANG,C,if test "$GCC" = "yes" ; then CPPFLAGS="$CPPFLAGS -Werror" ; fi) AC_TRY_COMPILE($2, $1, [ CPPFLAGS="$ac_save_CPPFLAGS" AC_MSG_RESULT(ok) AC_PROTOTYPE_DEFINES(tags) break; ], [ CPPFLAGS="$ac_save_CPPFLAGS" AC_MSG_RESULT(not ok) ]) ] ) ]) AC_DEFUN([AC_PROTOTYPE_RECV],[ AC_PROTOTYPE(recv, [ #include #ifdef WIN32 #include #else #include #endif ], [ ARG2 b = 0; recv(0, b, 0, 0); ], ARG2, [const void*, const char*, void*, char*]) ]) dnl @synopsis AC_FUNC_MKDIR dnl dnl Check whether mkdir() is mkdir or _mkdir, and whether it takes one or two dnl arguments. dnl dnl This macro can define HAVE_MKDIR, HAVE__MKDIR, and MKDIR_TAKES_ONE_ARG, dnl which are expected to be used as follow: dnl dnl #if HAVE_MKDIR dnl # if MKDIR_TAKES_ONE_ARG dnl /* Mingw32 */ dnl # define mkdir(a,b) mkdir(a) dnl # endif dnl #else dnl # if HAVE__MKDIR dnl /* plain Win32 */ dnl # define mkdir(a,b) _mkdir(a) dnl # else dnl # error "Don't know how to create a directory on this system." dnl # endif dnl #endif dnl dnl @version $Id: ac_func_mkdir.m4,v 1.1 2001/03/02 11:39:22 simons Exp $ dnl @author Alexandre Duret-Lutz dnl AC_DEFUN([AC_FUNC_MKDIR], [AC_CHECK_FUNCS([mkdir _mkdir]) AC_CACHE_CHECK([whether mkdir takes one argument], [ac_cv_mkdir_takes_one_arg], [AC_TRY_COMPILE([ #include #if HAVE_UNISTD_H # include #endif ],[mkdir (".");], [ac_cv_mkdir_takes_one_arg=yes],[ac_cv_mkdir_takes_one_arg=no])]) if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then AC_DEFINE([MKDIR_TAKES_ONE_ARG],1, [Define if mkdir takes only one argument.]) fi ]) dnl Note: dnl ===== dnl I have not implemented the following suggestion because I don't have dnl access to such a broken environment to test the macro. So I'm just dnl appending the comments here in case you have, and want to fix dnl AC_FUNC_MKDIR that way. dnl dnl |Thomas E. Dickey (dickey@herndon4.his.com) said: dnl | it doesn't cover the problem areas (compilers that mistreat mkdir dnl | may prototype it in dir.h and dirent.h, for instance). dnl | dnl |Alexandre: dnl | Would it be sufficient to check for these headers and #include dnl | them in the AC_TRY_COMPILE block? (and is AC_HEADER_DIRENT dnl | suitable for this?) dnl | dnl |Thomas: dnl | I think that might be a good starting point (with the set of recommended dnl | ifdef's and includes for AC_HEADER_DIRENT, of course). dnl @synopsis AC_donut_CHECK_PACKAGE(PACKAGE, FUNCTION, LIBRARY, HEADERFILE [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Provides --with-PACKAGE, --with-PACKAGE-include and --with-PACKAGE-lib dnl options to configure. Supports --with-PACKAGE=DIR approach which looks dnl first in DIR and then in DIR/{include,lib} but also allows the include dnl and lib directories to be specified seperately. dnl dnl adds the extra -Ipath to CFLAGS if needed dnl adds extra -Lpath to LD_FLAGS if needed dnl searches for the FUNCTION in the LIBRARY with dnl AC_CHECK_LIBRARY and thus adds the lib to LIBS dnl dnl defines HAVE_PKG_PACKAGE if it is found, (where PACKAGE in the dnl HAVE_PKG_PACKAGE is replaced with the actual first parameter passed) dnl dnl Based on: dnl @version $Id: ac_caolan_check_package.m4,v 1.5 2000/08/30 08:50:25 simons Exp $ dnl @author Caolan McNamara with fixes from Alexandre Duret-Lutz . dnl AC_DEFUN([AC_donut_CHECK_PACKAGE_pre], [ AC_ARG_WITH($1-prefix, [AC_HELP_STRING([--with-$1-prefix=DIR],[use $1 and look in DIR/{include,lib}/])], if test "$withval" != no; then with_$1=yes if test "$withval" != yes; then $1_include="${withval}/include" $1_libdir="${withval}/lib" fi fi ) AC_ARG_WITH($1-include, [AC_HELP_STRING([--with-$1-include=DIR],[specify exact include dir for $1 headers])], $1_include="$withval") AC_ARG_WITH($1-lib, [AC_HELP_STRING([--with-$1-lib=DIR],[specify exact library dir for $1 library])], $1_libdir="$withval") if test "${with_$1}" != no ; then OLD_LIBS=$LIBS OLD_LDFLAGS=$LDFLAGS OLD_CFLAGS=$CFLAGS OLD_CPPFLAGS=$CPPFLAGS if test "${$1_libdir}" ; then LDFLAGS="$LDFLAGS -L${$1_libdir}" elif test "${with_$1}" != yes ; then LDFLAGS="$LDFLAGS -L${with_$1}" fi if test "${$1_include}" ; then CPPFLAGS="$CPPFLAGS -I${$1_include}" CFLAGS="$CFLAGS -I${$1_include}" elif test "${with_$1}" != yes ; then CPPFLAGS="$CPPFLAGS -I${with_$1}" CFLAGS="$CFLAGS -I${with_$1}" fi no_good=no ifelse([$7], , , [$7]) if test "$no_good" = yes; then dnl broken LIBS=$OLD_LIBS LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS CFLAGS=$OLD_CFLAGS ifelse([$6], , , [$6]) else dnl fixed ifelse([$5], , , [$5]) AC_DEFINE(HAVE_PKG_$1,1,[Define if you have $3 and $4]) fi else dnl pointless, but sh barfs if the else..fi is empty (when arg 6 is not used) no_good=yes ifelse([$6], , , [$6]) fi ]) AC_DEFUN([AC_donut_CHECK_PACKAGE_sub], [ AC_donut_CHECK_PACKAGE_pre([$1], [$2], [$3], [$4], [$5], [$6], [ AC_CHECK_LIB($3,$2,,no_good=yes) AC_CHECK_HEADERS($4,,no_good=yes) ]) ]) dnl package that defaults to enabled AC_DEFUN([AC_donut_CHECK_PACKAGE_DEF], [ AC_ARG_WITH($1, AC_HELP_STRING([--without-$1], [disables $1 usage completely]) AC_HELP_STRING([--with-$1=DIR], [look in DIR for $1]), with_$1=$withval , with_$1=yes ) AC_donut_CHECK_PACKAGE_sub([$1], [$2], [$3], [$4], [$5], [$6]) ] ) dnl package that defaults to disabled AC_DEFUN([AC_donut_CHECK_PACKAGE], [ AC_ARG_WITH($1, [AC_HELP_STRING([--with-$1(=DIR)], [use $1, optionally looking in DIR])], with_$1=$withval , with_$1=no ) AC_donut_CHECK_PACKAGE_sub([$1], [$2], [$3], [$4], [$5], [$6]) ] ) dnl fooo AC_DEFUN([AC_donut_SEARCH_PACKAGE_sub], [ AC_donut_CHECK_PACKAGE_pre([$1], [$2], [$3], [$4], [$5], [$6], [ AC_SEARCH_LIBS($2,$3,,no_good=yes) AC_CHECK_HEADERS($4,,no_good=yes) ]) ]) dnl package that defaults to enabled AC_DEFUN([AC_donut_SEARCH_PACKAGE_DEF], [ AC_ARG_WITH($1, AC_HELP_STRING([--without-$1], [disables $1 usage completely]) AC_HELP_STRING([--with-$1=DIR], [look in DIR for $1]), with_$1=$withval , with_$1=yes ) AC_donut_SEARCH_PACKAGE_sub([$1], [$2], [$3], [$4], [$5], [$6]) ] ) dnl package that defaults to disabled AC_DEFUN([AC_donut_SEARCH_PACKAGE], [ AC_ARG_WITH($1, [AC_HELP_STRING([--with-$1(=DIR)], [use $1, optionally looking in DIR])], with_$1=$withval , with_$1=no ) AC_donut_SEARCH_PACKAGE_sub([$1], [$2], [$3], [$4], [$5], [$6]) ] ) nget-0.27.1/cfgfile.cc0000644000175000017500000000704610056212765014763 0ustar donutdonut00000000000000/* cfgfile.cc - hierarchical config file handling Copyright (C) 2003 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "cfgfile.h" #include "status.h" void CfgSection::load(c_file *f, int &level) { char *v,*buf; int slen; while ((slen=f->bgets())>0){ buf=f->rbufp(); if (slen<1) continue; buf+=strspn(buf," \t"); if (!*buf) continue; if (*buf=='}') { // printf("end section\n"); level--; break; } if (*buf=='{') { level++; CfgSection *s=new CfgSection(name(),buf+1,f,level); CfgSection_map::iterator si; if ((si=sections.find(s->key))!=sections.end()) { delete si->second; si->second=s; PERROR("%s: duplicate section", s->name().c_str()); set_user_error_status(); } else sections.insert(CfgSection_map::value_type(s->key,s)); // printf("new section: %s\n",buf+r+1); } else if (*buf=='#') ;//ignore else if (buf[0]=='/' && buf[1]=='/') ;//ignore else if((v=strchr(buf,'='))) { *v=0; v++; CfgItem *i=new CfgItem(name(),buf,v); CfgItem_map::iterator ii; if ((ii=items.find(i->key))!=items.end()) { delete ii->second; ii->second=i; PERROR("%s: duplicate item", i->name().c_str()); set_user_error_status(); } else items.insert(CfgItem_map::value_type(i->key,i)); // printf("new item: %s=%s\n",n,v); } else { PERROR("%s: invalid line '%s'",f->name(),buf); set_user_error_status(); } } } CfgSection::CfgSection(const string &filename) : CfgBase(filename,"") { c_file_fd f(filename.c_str(),O_RDONLY); f.initrbuf(); int level=0; load(&f, level); if (level!=0) { PERROR("%s: unbalanced {}'s: level=%+i", filename.c_str(), level); set_user_error_status(); } f.close(); used=true; } CfgSection::~CfgSection() { for (CfgItem_map::iterator i = items.begin(); i != items.end(); ++i) delete (*i).second; for (CfgSection_map::iterator s = sections.begin(); s != sections.end(); ++s) delete (*s).second; } int CfgSection::check_unused(void) const { int count=0; for (CfgItem_map::const_iterator i = items.begin(); i != items.end(); ++i) if (!i->second->isused()) { count++; PERROR("%s: unused item (possible typo)", i->second->name().c_str()); set_user_error_status(); } for (CfgSection_map::const_iterator s = sections.begin(); s != sections.end(); ++s){ if (s->second->isused()) { count+=s->second->check_unused(); } else { count++; PERROR("%s: unused section (possible typo)", s->second->name().c_str()); set_user_error_status(); } } return count; } const CfgItem *CfgSection::getitem(const char *name) const { used=true; CfgItem_map::const_iterator i=items.find(name); return (i!=items.end()) ? (*i).second : NULL; } const CfgSection *CfgSection::getsection(const char *name) const { used=true; CfgSection_map::const_iterator i=sections.find(name); return (i!=sections.end()) ? (*i).second : NULL; } nget-0.27.1/grouplist.h0000644000175000017500000000607710056212770015255 0ustar donutdonut00000000000000/* grouplist.* - nntp newsgroups list cache code Copyright (C) 2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _GROUPSLIST_H_ #define _GROUPSLIST_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "rcount.h" #include #include #include #include "stlhelp.h" #include "etree.h" #define GLCACHE_VERSION "NGETGL1" class c_grouplist_getinfo : public c_refcounted{ public: nntp_grouplist_pred *pred; int flags; c_grouplist_getinfo(nntp_grouplist_pred *pre,int flag):pred(pre), flags(flag) { } ~c_grouplist_getinfo() { delete pred; } }; typedef list t_grouplist_getinfo_list; class c_nntp_grouplist_server_info : public c_refcounted { public: ulong serverid; string date; c_nntp_grouplist_server_info(ulong sid):serverid(sid) {} c_nntp_grouplist_server_info(ulong sid,string dat):serverid(sid),date(dat) {} }; typedef map t_nntp_grouplist_server_info_map; class c_server_group_description : public c_refcounted { public: string description; set serverids; c_server_group_description(const string &desc):description(desc){} }; typedef map t_server_group_description_map; class c_group_availability : public c_refcounted{ public: string groupname; set serverids; t_server_group_description_map servergroups; bool addserverdescription(ulong serverid, const string &desc); c_group_availability(const string &name):groupname(name){} }; typedef map t_group_availability_map; class c_nntp_grouplist : public c_refcounted{ protected: string filename; bool saveit; t_nntp_grouplist_server_info_map server_info; t_group_availability_map groups; public: c_nntp_grouplist_server_info::ptr getserverinfo(ulong serverid); void addgroup(ulong serverid, string name); void addgroupdesc(ulong serverid, string name, string desc); void printinfos(const t_grouplist_getinfo_list &getinfos) const; void flushserver(ulong serverid); c_nntp_grouplist(void); c_nntp_grouplist(string path); void save(void); ~c_nntp_grouplist(); }; void nntp_grouplist_printinfos(const t_grouplist_getinfo_list &getinfos); #endif nget-0.27.1/log.h0000644000175000017500000000657310056212770014007 0ustar donutdonut00000000000000/* log.* - debug/error logging and exception defines Copyright (C) 1999-2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _LOG_H_ #define _LOG_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "strreps.h" //#include #define PERROR_nnl(a, args...) fprintf(stderr, a, ## args) #define PMSG_nnl(a, args...) {if (quiet<2) printf(a, ## args);} #define PDEBUG_nnl(d, a, args...) {if (debug>=d) printf(a, ## args);} #define PERROR(a, args...) PERROR_nnl(a "\n" , ## args) #define PMSG(a, args...) PMSG_nnl(a "\n" , ## args) #define PDEBUG(d, a, args...) PDEBUG_nnl(d, a "\n" , ## args) extern int debug; #define DEBUG_MIN 1 #define DEBUG_MED 2 #define DEBUG_ALL 3 extern int quiet; class baseEx { protected: string str; const char *mfile; int mline; void set_params(const char *file, int line, const char * s, va_list ap); public: const char* getExFile(void)const{return mfile;} int getExLine(void)const{return mline;} const char* getExStr(void)const{return str.c_str();} virtual bool isfatal(void)const{return false;} virtual const char* getExType(void)const=0; virtual ~baseEx() { } }; #define DEFINE_EX_SUBCLASS(name,base,fatalv) class name : public base {\ protected:\ name(void) { } /* to allow subclasses */ \ public:\ virtual bool isfatal(void)const{return fatalv;}\ virtual const char* getExType(void)const{return #name ;}\ name(const char *file, int line, const char * s, ...) {\ va_list ap;\ va_start(ap,s);\ set_params(file, line, s, ap);\ va_end(ap);\ /*PDEBUG(DEBUG_MIN,"%s:%i:Created exception %s with %s(%p)",mfile,mline,getExType(), getExStr(), getExStr());*/\ }\ }; #define DEFINE_EX_SUBCLASS_SUB(name, sub, fatalv) DEFINE_EX_SUBCLASS(name ## Ex ## sub, name ## Ex, fatalv) #define DEFINE_EX_CLASSES(name,base) class name ## Ex : public base {};\ DEFINE_EX_SUBCLASS_SUB(name, Fatal, true)\ DEFINE_EX_SUBCLASS_SUB(name, Error, false) class baseCommEx: public baseEx {}; DEFINE_EX_CLASSES(Transport, baseCommEx); DEFINE_EX_CLASSES(Protocol, baseCommEx); DEFINE_EX_CLASSES(Path, baseEx); DEFINE_EX_CLASSES(User, baseEx); DEFINE_EX_CLASSES(Config, baseEx); //DEFINE_EX_CLASSES(Application, baseEx); DEFINE_EX_SUBCLASS(ApplicationExFatal, baseEx, true); DEFINE_EX_SUBCLASS(CacheEx, baseEx, false); #define Ex_INIT __FILE__,__LINE__ #define printCaughtEx_nnl(e) PERROR_nnl("%s:%i:caught exception %s:%i:%s: %s",__FILE__,__LINE__,e.getExFile(),e.getExLine(),e.getExType(),e.getExStr()) #define printCaughtEx(e) {printCaughtEx_nnl(e);PERROR_nnl("\n");} void print_ex_with_message(const baseEx &e, const char *m, ...) __attribute__ ((format (printf, 2, 3))); #endif nget-0.27.1/par.h0000644000175000017500000002024510056212770014000 0ustar donutdonut00000000000000/* par.* - parity file handling Copyright (C) 2003 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef NGET__PAR_H__ #define NGET__PAR_H__ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "myregex.h" #include "auto_map.h" #include "cache.h" #include "par2/par2cmdline.h" typedef multimap t_nocase_map; bool par2file_get_sethash(const string &filename, string &sethash); bool parfile_get_sethash(const string &filename, string &sethash); bool parfile_ok(const string &filename, uint32_t &vol_number); int parfile_check(const string &filename, const string &path, const t_nocase_map &nocase_map); // Sort incomplete files to the end of the list, so we try them last. typedef pair t_server_file_key; inline t_server_file_key server_file_key(const c_nntp_file::ptr &f) { float completeness = (f->req >= 1) ? f->have/(float)f->req : 1.0; return t_server_file_key(-completeness, f->badate()); } typedef multimap t_server_file_list; #define server_file_list_value(f) t_server_file_list::value_type(server_file_key(f), f) class ParSetInfo { protected: t_server_file_list serverpars; t_server_file_list serverpxxs; public: void addserverpar(const c_nntp_file::ptr &f) { serverpars.insert(server_file_list_value(f)); } void addserverpxx(const c_nntp_file::ptr &f) { serverpxxs.insert(server_file_list_value(f)); } int get_initial_pars(c_nntp_files_u &fc, const string &path, const string &temppath) { int count=0; for (t_server_file_list::const_iterator spi=serverpars.begin(); spi!=serverpars.end(); ++spi){ fc.addfile(spi->second, path, temppath, false); count++; } if (serverpars.empty() && !serverpxxs.empty()){ t_server_file_list::iterator smallest = serverpxxs.begin(), cur = smallest; for (++cur; cur!=serverpxxs.end(); ++cur) if (cur->second->bytes() < smallest->second->bytes()) smallest = cur; fc.addfile(smallest->second, path, temppath, false); count++; serverpxxs.erase(smallest); } serverpars.clear(); return count; } void release_unclaimed_pxxs(vector &unclaimedfiles){ for (t_server_file_list::const_iterator spi=serverpxxs.begin(); spi!=serverpxxs.end(); ++spi){ unclaimedfiles.push_back(spi->second); } serverpxxs.clear(); } }; typedef auto_multimap t_subjmatches_map; typedef map > t_basenames_map; typedef map > t_basefilenames_map; class LocalParFiles { public: t_subjmatches_map subjmatches; // maps sethash -> subject matches for known basenames of that set t_basenames_map basenames; // maps sethash -> known basenames for that set t_basefilenames_map basefilenames; // maps sethash -> all known filenames for that set set badbasenames; // set of all basenames for which corrupt/non-par files were found void addsubjmatch_par1(const string &key, const string &basename){ if (basenames[key].find(basename)!=basenames[key].end()) return;//only insert one subject match for each basename basenames[key].insert(basename); string matchstr; if (isalnum(basename[0])) matchstr+=regex_match_word_beginning_safe(); regex_escape_string(basename, matchstr); matchstr+="\\.p(ar|[0-9]{2})"; matchstr+=regex_match_word_end(); subjmatches.insert_value(key, new c_regex_r(matchstr.c_str(), REG_EXTENDED|REG_ICASE)); } void addsubjmatch_par2(const string &key, const string &basename){ if (basenames[key].find(basename)!=basenames[key].end()) return;//only insert one subject match for each basename basenames[key].insert(basename); string matchstr; if (isalnum(basename[0])) matchstr+=regex_match_word_beginning_safe(); regex_escape_string(basename, matchstr); matchstr+="(\\.vol([0-9]+)\\+([0-9]+))?\\.par2"; matchstr+=regex_match_word_end(); subjmatches.insert_value(key, new c_regex_r(matchstr.c_str(), REG_EXTENDED|REG_ICASE)); } void addfrompath_par1(const string &path, t_nocase_map *nocase_map=NULL); void addfrompath_par2(const string &path, t_nocase_map *nocase_map=NULL); void check_badbasenames(void); void clear(void){ basefilenames.clear(); basenames.clear(); subjmatches.clear(); badbasenames.clear(); } }; class ParXInfoBase { protected: t_server_file_list serverpars; t_server_file_list serverpxxs; typedef map t_parset_map; set finished_parsets; // which sethashes we have finished (either tested ok, or exhausted all hope) int finished_okcount; // how many of the finished_parsets were ok t_parset_map parsets; LocalParFiles localpars; const string path; const string temppath; ParSetInfo *parset(const string &basename) { return &parsets[basename]; // will insert a new ParSetInfo into parsets if needed. } public: ParXInfoBase(const string &p,const string &t):finished_okcount(0),path(p),temppath(t){//well, saving and using only the first temppath encountered isn't exactly perfect, but I doubt many people really download multiple things to the same path but with different temp paths. And I'm lazy. } int get_initial_pars(c_nntp_files_u &fc); int getNumFinished(void) const { return finished_parsets.size(); } int getNumFinishedOk(void) const { return finished_okcount; } }; class Par1Info : public ParXInfoBase { protected: int get_pxxs(int num, set &havevols, const string &key, c_nntp_files_u &fc); public: Par1Info(const string &p,const string &t):ParXInfoBase(p,t){ localpars.addfrompath_par1(path); } bool maybe_add_parfile(const c_nntp_file::ptr &f, bool want_incomplete); int maybe_get_pxxs(c_nntp_files_u &fc); }; class Par2Info : public ParXInfoBase { protected: int get_extradata(int num, c_nntp_files_u &fc, const Par2Repairer *par2); int get_recoverypackets(int num, set &havepackets, const string &key, c_nntp_files_u &fc, const Par2Repairer *par2); t_server_file_list serverextradata; public: Par2Info(const string &p,const string &t):ParXInfoBase(p,t){ localpars.addfrompath_par2(path); } bool maybe_add_parfile(const c_nntp_file::ptr &f, bool want_incomplete); int maybe_get_pxxs(c_nntp_files_u &fc); }; class ParInfo { protected: const string path; Par1Info par1info; Par2Info par2info; public: ParInfo(const string &p,const string &t):path(p), par1info(p,t), par2info(p,t) { } bool maybe_add_parfile(const c_nntp_file::ptr &f, bool want_incomplete) { return par1info.maybe_add_parfile(f, want_incomplete) || par2info.maybe_add_parfile(f, want_incomplete); } void get_initial_pars(c_nntp_files_u &fc) { par1info.get_initial_pars(fc); par2info.get_initial_pars(fc); } void maybe_get_pxxs(c_nntp_files_u &fc) { int total_added=0; total_added += par1info.maybe_get_pxxs(fc); total_added += par2info.maybe_get_pxxs(fc); if (!total_added) { PMSG("autopar in %s done (%i/%i parsets ok)", path.c_str(), par1info.getNumFinishedOk()+par2info.getNumFinishedOk(), par1info.getNumFinished()+par2info.getNumFinished()); } } }; class ParHandler { protected: typedef auto_map t_parinfo_map; t_parinfo_map parinfos; t_parinfo_map::mapped_type parinfo(const string &path, const string &temppath); t_parinfo_map::mapped_type parinfo(const string &path); public: bool maybe_add_parfile(const c_nntp_file::ptr &f, const string &path, const string &temppath, bool want_incomplete); void get_initial_pars(c_nntp_files_u &fc); void maybe_get_pxxs(const string &path, c_nntp_files_u &fc); }; #endif nget-0.27.1/README0000644000175000017500000000614210161664323013727 0ustar donutdonut00000000000000nget 0.27.1 Copyright 1999-2004 Matthew Mueller Note if you are upgrading from a version 0.16-0.26 to 0.27 or later: The cache file format has changed, so the cache dir is now .nget5. Upgrade should be as simple as "mv ~/.nget4 ~/.nget5; rm ~/.nget5/*,cache*" Requirements: GNU Make (sometimes installed as gmake) uulib >= 0.5.19 http://www.fpx.de/fp/Software/UUDeview/ (included in the +uulib package) zlib http://www.gzip.org/zlib/ (recommended, needed for compressed cache) libpopt http://freshmeat.net/projects/popt/ (recommended, needed for -@ option) libpcre http://www.pcre.org/ (optional, use if you like perl-style regexs) (required for cygwin, since cygwin's regex has some problem with nget) liblockfile http://packages.debian.org/liblockfile-dev (optional, only needed if your cache dir is on NFS) (note: liblockfile uses symlinks, so do not use liblockfile if you will store your .nget5 directory on a fat/vfat/etc filesystem or it will just hang trying to lock the file.) TestSuite Requirements: Python >= 2.2 http://www.python.org/ cppunit >= 1.8.0 http://cppunit.sourceforge.net/ SUBTERFUGUE http://subterfugue.org/ (optional, currently only available for x86 linux >=2.4) Install: (./configure --help will show extra options not described here) 1) ./configure 2) make 3) make test (optional, see TestSuite Requirements) 4) make install Usage: 1) Before the first use, nget must be configured. 1.a) Make nget directory: mkdir $HOME/.nget5 1.b) Copy example .ngetrc: cp .ngetrc $HOME/.nget5/ 1.c) Add your newsservers: vi $HOME/.nget5/.ngetrc (Remember to chmod 600 your .ngetrc if you are using password auth.) 2) See manpage and nget --help output. The manpage thoroughly describes all command line and configuration options, and has an examples section. Portability: nget is developed on linux (glibc2), and has been successfully compiled/tested on: linux x86(gcc 2.95.4, gcc 3.0.4, gcc 3.2, gcc 3.3), linux alpha(gcc 2.95.2), macosx(gcc 2.95.2), freebsd x86(gcc 2.95.4, gcc 3.0.4), solaris sparc(gcc 2.95.2), win32(mingw or cygwin) and should compile without modifications on other systems using g++ 2.95+ or other up to date compliers. Older compilers like gcc 2.7.x can no longer build nget, but can (probably) still build ngetlite, so you can still use it to download on an older comp if you have a recent comp that you can use nget to write the listfiles on (-w option). Copying: 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. See the file 'COPYING' for more information. I would appreciate it if you make modifications if you would send them to me for possible inclusion in the main source. You can find the latest version at http://nget.sourceforge.net/ or http://www.dakotacom.net/~donut/programs.html or http://freshmeat.net/projects/nget/ nget-0.27.1/sockpool.cc0000644000175000017500000001102610056212766015207 0ustar donutdonut00000000000000/* sockpool.* - socket connection pool Copyright (C) 1999-2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "sockpool.h" #include int Connection::putline(int echo,const char * str,...){ va_list ap; va_start(ap,str); int i=doputline(echo,str,ap); va_end(ap); return i; } int Connection::doputline(int echo,const char * str,va_list ap){ char *fpbuf; int i; i=vasprintf(&fpbuf,str,ap); if (!(fpbuf=(char*)realloc(fpbuf,i+3))){ free(fpbuf); close(); throw TransportExError(Ex_INIT,"nntp_putline:realloc(%p,%i) %s(%i)",fpbuf,i+3,strerror(errno),errno); } if (echo) printf("%s << %s\n", server->shortname.c_str(), fpbuf); fpbuf[i]='\r';fpbuf[i+1]='\n'; try { i=sock.write(fpbuf,i+2); } catch (FileEx &e) { free(fpbuf); close(1); throw TransportExError(Ex_INIT,"nntp_putline: %s:%i: %s",e.getExFile(), e.getExLine(), e.getExStr()); } free(fpbuf); return i; } int Connection::getline(int echo){ int i; try { i=sock.bgets(); } catch (FileEx &e) { close(1); throw TransportExError(Ex_INIT,"nntp_getline: %s:%i: %s",e.getExFile(), e.getExLine(), e.getExStr()); } if (i<=0){ close(1); throw TransportExError(Ex_INIT,"nntp_getline: connection closed unexpectedly"); }else { if (echo) printf("%s >> %s\n", server->shortname.c_str(), sock.rbufp()); } return i; } void SockPool::connection_erase(t_connection_map::iterator i) { try { i->second->close(); } catch (FileEx &e) {//ignore transport errors while closing print_ex_with_message(e, "ignored error"); } delete i->second; connections.erase(i); } Connection* SockPool::connect(const c_server::ptr &server){ Connection *c; //use existing connection when possible t_connection_map::iterator i = connections.find(server); if (i!=connections.end()){ c = i->second; if (c->isopen()) { try { while (c->sock.datawaiting()) { c->getline(1); } } catch (baseCommEx &e) {//ignore transport errors (probably server timeout) print_ex_with_message(e, "ignored error"); } } if (c->isopen()) { c->touch(); return c; } else { connection_erase(i); } } //check penalization before expire_old_connection nconfig.check_penalized(server); // (throws exception if penalized) //if we have to create a new one, don't go over max if (nconfig.maxconnections > 0 && (signed)connections.size() >= nconfig.maxconnections) expire_old_connection(); //create new connection try { c = new Connection(server); } catch (FileEx &e) { nconfig.penalize(server); throw TransportExError(Ex_INIT,"Connection: %s",e.getExStr()); } connections.insert(t_connection_map::value_type(server, c)); c->touch(); return c; } void SockPool::release(Connection *connection) { assert(connection); bool keepopen = connection->isopen(); if (connection->server_ok) { nconfig.unpenalize(connection->server); connection->server_ok=false; //reset so that problems later on with this connection can still be caught. } else if (nconfig.penalize(connection->server)) keepopen=false; if (keepopen) connection->touch(); else connection_erase(connections.find(connection->server)); } void SockPool::expire_old_connection(void) { t_connection_map::iterator i, oldest=connections.end(); for (i=connections.begin(); i!=connections.end(); ++i) { Connection *c = i->second; if (!c->isopen()) {//if connection is closed, we can get rid of it right now. oldest = i; break; } if (oldest==connections.end() || c->age()>oldest->second->age()) oldest = i; } assert(oldest!=connections.end());//no old connections to kill?? connection_erase(oldest); } void SockPool::expire_connections(bool closeall) { t_connection_map::iterator i, p; i=connections.begin(); while (i!=connections.end()) { Connection *c = i->second; p=i; ++i; if (closeall || !c->isopen() || (c->age() >= c->server->idletimeout)) { connection_erase(p); } } } nget-0.27.1/configure0000755000175000017500000132324010161664407014763 0ustar donutdonut00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for nget 0.27.1. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='nget' PACKAGE_TARNAME='nget' PACKAGE_VERSION='0.27.1' PACKAGE_STRING='nget 0.27.1' PACKAGE_BUGREPORT='' ac_unique_file="nget.cc" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX RANLIB ac_ct_RANLIB AR ac_ct_AR STRIP ac_ct_STRIP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CXXCPP EGREP LITELIBS NOUU UUINC UUDIR UULIB LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures nget 0.27.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of nget 0.27.1:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-checksum=method Set which method to use for comparing headers and for short-tempnames. Either crc32 or adler32. default is crc32, as it seems to get less repeated values, however adler32 is said to be faster. It probably doesn't make much difference. --disable-checksum Disable usage of checksums for comparing headers as well as for short-tempnames, uses STL hash function instead. --enable-debug Enable debug code, asserts, etc and disable optimization. --enable-maintainer-mode Enable debug code, asserts, etc.. --enable-coverage Enable compiler flags for coverage testing. --disable-ipv6 Do not try to use IPv6 capable netcode. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pcre(=DIR) use pcre, optionally looking in DIR --with-pcre-prefix=DIR use pcre and look in DIR/{include,lib}/ --with-pcre-include=DIR specify exact include dir for pcre headers --with-pcre-lib=DIR specify exact library dir for pcre library --without-lockfile disables lockfile usage completely --with-lockfile=DIR look in DIR for lockfile --with-lockfile-prefix=DIR use lockfile and look in DIR/{include,lib}/ --with-lockfile-include=DIR specify exact include dir for lockfile headers --with-lockfile-lib=DIR specify exact library dir for lockfile library --without-zlib disables zlib usage completely --with-zlib=DIR look in DIR for zlib --with-zlib-prefix=DIR use zlib and look in DIR/{include,lib}/ --with-zlib-include=DIR specify exact include dir for zlib headers --with-zlib-lib=DIR specify exact library dir for zlib library --without-popt disables popt usage completely --with-popt=DIR look in DIR for popt --with-popt-prefix=DIR use popt and look in DIR/{include,lib}/ --with-popt-include=DIR specify exact include dir for popt headers --with-popt-lib=DIR specify exact library dir for popt library --without-gnugetopt disables gnugetopt usage completely --with-gnugetopt=DIR look in DIR for gnugetopt --with-gnugetopt-prefix=DIR use gnugetopt and look in DIR/{include,lib}/ --with-gnugetopt-include=DIR specify exact include dir for gnugetopt headers --with-gnugetopt-lib=DIR specify exact library dir for gnugetopt library --with-uulib(=DIR) look in DIR for uulib --with-uulib-prefix=DIR use uulib and look in DIR/{include,lib}/ --with-uulib-include=DIR specify exact include dir for uulib headers --with-uulib-lib=DIR specify exact library dir for uulib library Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd "$ac_popdir" done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF nget configure 0.27.1 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by nget $as_me 0.27.1, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking attempted use of -fomit-frame-pointer on x86" >&5 echo $ECHO_N "checking attempted use of -fomit-frame-pointer on x86... $ECHO_C" >&6 result=no if echo "$CXX $CXXFLAGS" | grep fomit-frame-pointer ; then if test -n "$host_alias" ; then my_host="$host_alias" else my_host=`uname -m` fi if echo "$my_host" | grep 86 ; then { echo "$as_me:$LINENO: WARNING: cannot build with -fomit-frame-pointer on x86. gcc does not handle exceptions properly in code compiled with -fomit-frame-pointer on x86 platforms. See: http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=2447&database=gcc Removing -fomit-frame-pointer from the compiler flags. " >&5 echo "$as_me: WARNING: cannot build with -fomit-frame-pointer on x86. gcc does not handle exceptions properly in code compiled with -fomit-frame-pointer on x86 platforms. See: http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=2447&database=gcc Removing -fomit-frame-pointer from the compiler flags. " >&2;} CXX=`echo $CXX | sed "s/-fomit-frame-pointer//"` CXXFLAGS=`echo $CXXFLAGS | sed "s/-fomit-frame-pointer//"` result=removed fi fi echo "$as_me:$LINENO: result: $result" >&5 echo "${ECHO_T}$result" >&6 echo "$as_me:$LINENO: checking for exception handling support" >&5 echo $ECHO_N "checking for exception handling support... $ECHO_C" >&6 if test "${my_cv_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { try { throw 1; } catch (int i) {int z=i;} ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then my_cv_exceptions=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test -z $my_cv_exceptions; then CXXFLAGS="$CXXFLAGS -fhandle-exceptions" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { try { throw 1; } catch (int i) {int z=i;} ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then my_cv_exceptions=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 my_cv_exceptions=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $my_cv_exceptions" >&5 echo "${ECHO_T}$my_cv_exceptions" >&6 if test "x$my_cv_exceptions" = xno; then { { echo "$as_me:$LINENO: error: exceptions not supported by your compiler, if you need a special flag try CXXFLAGS=\"-flag-to-enable-exceptions\" ./configure" >&5 echo "$as_me: error: exceptions not supported by your compiler, if you need a special flag try CXXFLAGS=\"-flag-to-enable-exceptions\" ./configure" >&2;} { (exit 1); exit 1; }; } fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_opendir=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_opendir="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_opendir" = no; then for ac_lib in dir; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_opendir="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6 if test "$ac_cv_search_opendir" != no; then test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" fi else echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_opendir=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_opendir="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_opendir" = no; then for ac_lib in x; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_opendir="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6 if test "$ac_cv_search_opendir" != no; then test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" fi fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in fcntl.h sys/time.h unistd.h sstream limits regex.h term.h inttypes.h winsock.h winsock2.h ws2tcpip.h sys/socket.h process.h windows.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stdio.h endian.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in hash_map ext/hash_map hash_map.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking working hash_map" >&5 echo $ECHO_N "checking working hash_map... $ECHO_C" >&6 if test "${ac_cv_working_hash_map+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_HASH_MAP #include #elif HAVE_EXT_HASH_MAP #include #elif HAVE_HASH_MAP_H #include #endif using namespace std; int main () { hash_map h; hash_multimap h2; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_working_hash_map=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_HASH_MAP #include #elif HAVE_EXT_HASH_MAP #include #elif HAVE_HASH_MAP_H #include #endif using namespace std; using namespace __gnu_cxx; int main () { hash_map h; hash_multimap h2; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_working_hash_map=yes-in_gnu_cxx_namespace else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_working_hash_map=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_working_hash_map" >&5 echo "${ECHO_T}$ac_cv_working_hash_map" >&6 if test "$ac_cv_working_hash_map" = "yes"; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_HASH_MAP 1 _ACEOF elif test "$ac_cv_working_hash_map" = "yes-in_gnu_cxx_namespace"; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_HASH_MAP 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HASH_MAP_NEED_GNU_CXX_NAMESPACE 1 _ACEOF fi echo "$as_me:$LINENO: checking for library containing LockFile" >&5 echo $ECHO_N "checking for library containing LockFile... $ECHO_C" >&6 if test "${my_cv_LockFile+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS my_cv_LockFile=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { LockFile(0,0,0,0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then my_cv_LockFile="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$my_cv_LockFile" = no; then for ac_lib in kernel32; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { LockFile(0,0,0,0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then my_cv_LockFile="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $my_cv_LockFile" >&5 echo "${ECHO_T}$my_cv_LockFile" >&6 if test "$my_cv_LockFile" != no; then test "$my_cv_LockFile" = "none required" || LIBS="$my_cv_LockFile $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_LOCKFILE 1 _ACEOF fi echo "$as_me:$LINENO: checking for library containing socket" >&5 echo $ECHO_N "checking for library containing socket... $ECHO_C" >&6 if test "${my_cv_socket+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS my_cv_socket=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef HAVE_WINSOCK_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif int main () { socket(AF_INET, SOCK_STREAM, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then my_cv_socket="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$my_cv_socket" = no; then for ac_lib in socket ws2_32 wsock32; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef HAVE_WINSOCK_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif int main () { socket(AF_INET, SOCK_STREAM, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then my_cv_socket="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $my_cv_socket" >&5 echo "${ECHO_T}$my_cv_socket" >&6 if test "$my_cv_socket" != no; then test "$my_cv_socket" = "none required" || LIBS="$my_cv_socket $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_SOCKET 1 _ACEOF fi echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5 echo $ECHO_N "checking for library containing gethostbyname... $ECHO_C" >&6 if test "${ac_cv_search_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_gethostbyname=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_gethostbyname="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_gethostbyname" = no; then for ac_lib in nsl; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_gethostbyname="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_search_gethostbyname" >&6 if test "$ac_cv_search_gethostbyname" != no; then test "$ac_cv_search_gethostbyname" = "none required" || LIBS="$ac_cv_search_gethostbyname $LIBS" fi echo "$as_me:$LINENO: checking for library containing hstrerror" >&5 echo $ECHO_N "checking for library containing hstrerror... $ECHO_C" >&6 if test "${ac_cv_search_hstrerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_hstrerror=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char hstrerror (); int main () { hstrerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_hstrerror="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_hstrerror" = no; then for ac_lib in resolv; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char hstrerror (); int main () { hstrerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_hstrerror="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_hstrerror" >&5 echo "${ECHO_T}$ac_cv_search_hstrerror" >&6 if test "$ac_cv_search_hstrerror" != no; then test "$ac_cv_search_hstrerror" = "none required" || LIBS="$ac_cv_search_hstrerror $LIBS" fi # Check whether --with-pcre or --without-pcre was given. if test "${with_pcre+set}" = set; then withval="$with_pcre" with_pcre=$withval else with_pcre=no fi; # Check whether --with-pcre-prefix or --without-pcre-prefix was given. if test "${with_pcre_prefix+set}" = set; then withval="$with_pcre_prefix" if test "$withval" != no; then with_pcre=yes if test "$withval" != yes; then pcre_include="${withval}/include" pcre_libdir="${withval}/lib" fi fi fi; # Check whether --with-pcre-include or --without-pcre-include was given. if test "${with_pcre_include+set}" = set; then withval="$with_pcre_include" pcre_include="$withval" fi; # Check whether --with-pcre-lib or --without-pcre-lib was given. if test "${with_pcre_lib+set}" = set; then withval="$with_pcre_lib" pcre_libdir="$withval" fi; if test "${with_pcre}" != no ; then OLD_LIBS=$LIBS OLD_LDFLAGS=$LDFLAGS OLD_CFLAGS=$CFLAGS OLD_CPPFLAGS=$CPPFLAGS if test "${pcre_libdir}" ; then LDFLAGS="$LDFLAGS -L${pcre_libdir}" elif test "${with_pcre}" != yes ; then LDFLAGS="$LDFLAGS -L${with_pcre}" fi if test "${pcre_include}" ; then CPPFLAGS="$CPPFLAGS -I${pcre_include}" CFLAGS="$CFLAGS -I${pcre_include}" elif test "${with_pcre}" != yes ; then CPPFLAGS="$CPPFLAGS -I${with_pcre}" CFLAGS="$CFLAGS -I${with_pcre}" fi no_good=no echo "$as_me:$LINENO: checking for pcre_compile in -lpcre" >&5 echo $ECHO_N "checking for pcre_compile in -lpcre... $ECHO_C" >&6 if test "${ac_cv_lib_pcre_pcre_compile+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpcre $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pcre_compile (); int main () { pcre_compile (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_pcre_pcre_compile=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pcre_pcre_compile=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_pcre_pcre_compile" >&5 echo "${ECHO_T}$ac_cv_lib_pcre_pcre_compile" >&6 if test $ac_cv_lib_pcre_pcre_compile = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBPCRE 1 _ACEOF LIBS="-lpcre $LIBS" else no_good=yes fi for ac_header in pcreposix.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else no_good=yes fi done if test "$no_good" = yes; then LIBS=$OLD_LIBS LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS CFLAGS=$OLD_CFLAGS else echo "$as_me:$LINENO: checking for main in -lpcreposix" >&5 echo $ECHO_N "checking for main in -lpcreposix... $ECHO_C" >&6 if test "${ac_cv_lib_pcreposix_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpcreposix $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_pcreposix_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pcreposix_main=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_pcreposix_main" >&5 echo "${ECHO_T}$ac_cv_lib_pcreposix_main" >&6 if test $ac_cv_lib_pcreposix_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBPCREPOSIX 1 _ACEOF LIBS="-lpcreposix $LIBS" fi cat >>confdefs.h <<\_ACEOF #define HAVE_PKG_pcre 1 _ACEOF fi else no_good=yes fi LITELIBS="$LIBS" echo "$as_me:$LINENO: checking for a working term.h, tputs, and clr_bol" >&5 echo $ECHO_N "checking for a working term.h, tputs, and clr_bol... $ECHO_C" >&6 if test "${my_cv_working_termstuff+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS my_cv_working_termstuff=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { tputs(clr_bol, 1, putchar); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then my_cv_working_termstuff="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$my_cv_working_termstuff" = no; then for ac_lib in termcap curses ncurses; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { tputs(clr_bol, 1, putchar); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then my_cv_working_termstuff="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $my_cv_working_termstuff" >&5 echo "${ECHO_T}$my_cv_working_termstuff" >&6 if test "$my_cv_working_termstuff" != no; then test "$my_cv_working_termstuff" = "none required" || LIBS="$my_cv_working_termstuff $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_TERMSTUFF 1 _ACEOF fi # Check whether --with-lockfile or --without-lockfile was given. if test "${with_lockfile+set}" = set; then withval="$with_lockfile" with_lockfile=$withval else with_lockfile=yes fi; # Check whether --with-lockfile-prefix or --without-lockfile-prefix was given. if test "${with_lockfile_prefix+set}" = set; then withval="$with_lockfile_prefix" if test "$withval" != no; then with_lockfile=yes if test "$withval" != yes; then lockfile_include="${withval}/include" lockfile_libdir="${withval}/lib" fi fi fi; # Check whether --with-lockfile-include or --without-lockfile-include was given. if test "${with_lockfile_include+set}" = set; then withval="$with_lockfile_include" lockfile_include="$withval" fi; # Check whether --with-lockfile-lib or --without-lockfile-lib was given. if test "${with_lockfile_lib+set}" = set; then withval="$with_lockfile_lib" lockfile_libdir="$withval" fi; if test "${with_lockfile}" != no ; then OLD_LIBS=$LIBS OLD_LDFLAGS=$LDFLAGS OLD_CFLAGS=$CFLAGS OLD_CPPFLAGS=$CPPFLAGS if test "${lockfile_libdir}" ; then LDFLAGS="$LDFLAGS -L${lockfile_libdir}" elif test "${with_lockfile}" != yes ; then LDFLAGS="$LDFLAGS -L${with_lockfile}" fi if test "${lockfile_include}" ; then CPPFLAGS="$CPPFLAGS -I${lockfile_include}" CFLAGS="$CFLAGS -I${lockfile_include}" elif test "${with_lockfile}" != yes ; then CPPFLAGS="$CPPFLAGS -I${with_lockfile}" CFLAGS="$CFLAGS -I${with_lockfile}" fi no_good=no echo "$as_me:$LINENO: checking for lockfile_create in -llockfile" >&5 echo $ECHO_N "checking for lockfile_create in -llockfile... $ECHO_C" >&6 if test "${ac_cv_lib_lockfile_lockfile_create+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-llockfile $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char lockfile_create (); int main () { lockfile_create (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_lockfile_lockfile_create=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_lockfile_lockfile_create=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_lockfile_lockfile_create" >&5 echo "${ECHO_T}$ac_cv_lib_lockfile_lockfile_create" >&6 if test $ac_cv_lib_lockfile_lockfile_create = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBLOCKFILE 1 _ACEOF LIBS="-llockfile $LIBS" else no_good=yes fi for ac_header in lockfile.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else no_good=yes fi done if test "$no_good" = yes; then LIBS=$OLD_LIBS LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS CFLAGS=$OLD_CFLAGS else cat >>confdefs.h <<\_ACEOF #define HAVE_PKG_lockfile 1 _ACEOF fi else no_good=yes fi # Check whether --with-zlib or --without-zlib was given. if test "${with_zlib+set}" = set; then withval="$with_zlib" with_zlib=$withval else with_zlib=yes fi; # Check whether --with-zlib-prefix or --without-zlib-prefix was given. if test "${with_zlib_prefix+set}" = set; then withval="$with_zlib_prefix" if test "$withval" != no; then with_zlib=yes if test "$withval" != yes; then zlib_include="${withval}/include" zlib_libdir="${withval}/lib" fi fi fi; # Check whether --with-zlib-include or --without-zlib-include was given. if test "${with_zlib_include+set}" = set; then withval="$with_zlib_include" zlib_include="$withval" fi; # Check whether --with-zlib-lib or --without-zlib-lib was given. if test "${with_zlib_lib+set}" = set; then withval="$with_zlib_lib" zlib_libdir="$withval" fi; if test "${with_zlib}" != no ; then OLD_LIBS=$LIBS OLD_LDFLAGS=$LDFLAGS OLD_CFLAGS=$CFLAGS OLD_CPPFLAGS=$CPPFLAGS if test "${zlib_libdir}" ; then LDFLAGS="$LDFLAGS -L${zlib_libdir}" elif test "${with_zlib}" != yes ; then LDFLAGS="$LDFLAGS -L${with_zlib}" fi if test "${zlib_include}" ; then CPPFLAGS="$CPPFLAGS -I${zlib_include}" CFLAGS="$CFLAGS -I${zlib_include}" elif test "${with_zlib}" != yes ; then CPPFLAGS="$CPPFLAGS -I${with_zlib}" CFLAGS="$CFLAGS -I${with_zlib}" fi no_good=no echo "$as_me:$LINENO: checking for gzopen in -lz" >&5 echo $ECHO_N "checking for gzopen in -lz... $ECHO_C" >&6 if test "${ac_cv_lib_z_gzopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gzopen (); int main () { gzopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_z_gzopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_gzopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzopen" >&5 echo "${ECHO_T}$ac_cv_lib_z_gzopen" >&6 if test $ac_cv_lib_z_gzopen = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" else no_good=yes fi for ac_header in zlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else no_good=yes fi done if test "$no_good" = yes; then LIBS=$OLD_LIBS LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS CFLAGS=$OLD_CFLAGS else cat >>confdefs.h <<\_ACEOF #define HAVE_PKG_zlib 1 _ACEOF fi else no_good=yes fi # Check whether --with-popt or --without-popt was given. if test "${with_popt+set}" = set; then withval="$with_popt" with_popt=$withval else with_popt=yes fi; # Check whether --with-popt-prefix or --without-popt-prefix was given. if test "${with_popt_prefix+set}" = set; then withval="$with_popt_prefix" if test "$withval" != no; then with_popt=yes if test "$withval" != yes; then popt_include="${withval}/include" popt_libdir="${withval}/lib" fi fi fi; # Check whether --with-popt-include or --without-popt-include was given. if test "${with_popt_include+set}" = set; then withval="$with_popt_include" popt_include="$withval" fi; # Check whether --with-popt-lib or --without-popt-lib was given. if test "${with_popt_lib+set}" = set; then withval="$with_popt_lib" popt_libdir="$withval" fi; if test "${with_popt}" != no ; then OLD_LIBS=$LIBS OLD_LDFLAGS=$LDFLAGS OLD_CFLAGS=$CFLAGS OLD_CPPFLAGS=$CPPFLAGS if test "${popt_libdir}" ; then LDFLAGS="$LDFLAGS -L${popt_libdir}" elif test "${with_popt}" != yes ; then LDFLAGS="$LDFLAGS -L${with_popt}" fi if test "${popt_include}" ; then CPPFLAGS="$CPPFLAGS -I${popt_include}" CFLAGS="$CFLAGS -I${popt_include}" elif test "${with_popt}" != yes ; then CPPFLAGS="$CPPFLAGS -I${with_popt}" CFLAGS="$CFLAGS -I${with_popt}" fi no_good=no echo "$as_me:$LINENO: checking for poptGetContext in -lpopt" >&5 echo $ECHO_N "checking for poptGetContext in -lpopt... $ECHO_C" >&6 if test "${ac_cv_lib_popt_poptGetContext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpopt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char poptGetContext (); int main () { poptGetContext (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_popt_poptGetContext=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_popt_poptGetContext=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_popt_poptGetContext" >&5 echo "${ECHO_T}$ac_cv_lib_popt_poptGetContext" >&6 if test $ac_cv_lib_popt_poptGetContext = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBPOPT 1 _ACEOF LIBS="-lpopt $LIBS" else no_good=yes fi for ac_header in popt.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else no_good=yes fi done if test "$no_good" = yes; then LIBS=$OLD_LIBS LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS CFLAGS=$OLD_CFLAGS # Check whether --with-gnugetopt or --without-gnugetopt was given. if test "${with_gnugetopt+set}" = set; then withval="$with_gnugetopt" with_gnugetopt=$withval else with_gnugetopt=yes fi; # Check whether --with-gnugetopt-prefix or --without-gnugetopt-prefix was given. if test "${with_gnugetopt_prefix+set}" = set; then withval="$with_gnugetopt_prefix" if test "$withval" != no; then with_gnugetopt=yes if test "$withval" != yes; then gnugetopt_include="${withval}/include" gnugetopt_libdir="${withval}/lib" fi fi fi; # Check whether --with-gnugetopt-include or --without-gnugetopt-include was given. if test "${with_gnugetopt_include+set}" = set; then withval="$with_gnugetopt_include" gnugetopt_include="$withval" fi; # Check whether --with-gnugetopt-lib or --without-gnugetopt-lib was given. if test "${with_gnugetopt_lib+set}" = set; then withval="$with_gnugetopt_lib" gnugetopt_libdir="$withval" fi; if test "${with_gnugetopt}" != no ; then OLD_LIBS=$LIBS OLD_LDFLAGS=$LDFLAGS OLD_CFLAGS=$CFLAGS OLD_CPPFLAGS=$CPPFLAGS if test "${gnugetopt_libdir}" ; then LDFLAGS="$LDFLAGS -L${gnugetopt_libdir}" elif test "${with_gnugetopt}" != yes ; then LDFLAGS="$LDFLAGS -L${with_gnugetopt}" fi if test "${gnugetopt_include}" ; then CPPFLAGS="$CPPFLAGS -I${gnugetopt_include}" CFLAGS="$CFLAGS -I${gnugetopt_include}" elif test "${with_gnugetopt}" != yes ; then CPPFLAGS="$CPPFLAGS -I${with_gnugetopt}" CFLAGS="$CFLAGS -I${with_gnugetopt}" fi no_good=no echo "$as_me:$LINENO: checking for library containing getopt_long" >&5 echo $ECHO_N "checking for library containing getopt_long... $ECHO_C" >&6 if test "${ac_cv_search_getopt_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_getopt_long=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getopt_long (); int main () { getopt_long (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_getopt_long="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_getopt_long" = no; then for ac_lib in gnugetopt; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getopt_long (); int main () { getopt_long (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_getopt_long="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_getopt_long" >&5 echo "${ECHO_T}$ac_cv_search_getopt_long" >&6 if test "$ac_cv_search_getopt_long" != no; then test "$ac_cv_search_getopt_long" = "none required" || LIBS="$ac_cv_search_getopt_long $LIBS" else no_good=yes fi for ac_header in getopt.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else no_good=yes fi done if test "$no_good" = yes; then LIBS=$OLD_LIBS LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS CFLAGS=$OLD_CFLAGS else cat >>confdefs.h <<\_ACEOF #define HAVE_PKG_gnugetopt 1 _ACEOF fi else no_good=yes fi else echo "$as_me:$LINENO: checking if popt wants const argvs" >&5 echo $ECHO_N "checking if popt wants const argvs... $ECHO_C" >&6 if test "${ac_cv_popt_const_argv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { const char ** targv=NULL;poptContext c=poptGetContext(NULL,1,targv,NULL,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_popt_const_argv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_popt_const_argv=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_popt_const_argv" >&5 echo "${ECHO_T}$ac_cv_popt_const_argv" >&6 if test $ac_cv_popt_const_argv = yes; then cat >>confdefs.h <<\_ACEOF #define POPT_CONST_ARGV 1 _ACEOF fi cat >>confdefs.h <<\_ACEOF #define HAVE_PKG_popt 1 _ACEOF fi else no_good=yes # Check whether --with-gnugetopt or --without-gnugetopt was given. if test "${with_gnugetopt+set}" = set; then withval="$with_gnugetopt" with_gnugetopt=$withval else with_gnugetopt=yes fi; # Check whether --with-gnugetopt-prefix or --without-gnugetopt-prefix was given. if test "${with_gnugetopt_prefix+set}" = set; then withval="$with_gnugetopt_prefix" if test "$withval" != no; then with_gnugetopt=yes if test "$withval" != yes; then gnugetopt_include="${withval}/include" gnugetopt_libdir="${withval}/lib" fi fi fi; # Check whether --with-gnugetopt-include or --without-gnugetopt-include was given. if test "${with_gnugetopt_include+set}" = set; then withval="$with_gnugetopt_include" gnugetopt_include="$withval" fi; # Check whether --with-gnugetopt-lib or --without-gnugetopt-lib was given. if test "${with_gnugetopt_lib+set}" = set; then withval="$with_gnugetopt_lib" gnugetopt_libdir="$withval" fi; if test "${with_gnugetopt}" != no ; then OLD_LIBS=$LIBS OLD_LDFLAGS=$LDFLAGS OLD_CFLAGS=$CFLAGS OLD_CPPFLAGS=$CPPFLAGS if test "${gnugetopt_libdir}" ; then LDFLAGS="$LDFLAGS -L${gnugetopt_libdir}" elif test "${with_gnugetopt}" != yes ; then LDFLAGS="$LDFLAGS -L${with_gnugetopt}" fi if test "${gnugetopt_include}" ; then CPPFLAGS="$CPPFLAGS -I${gnugetopt_include}" CFLAGS="$CFLAGS -I${gnugetopt_include}" elif test "${with_gnugetopt}" != yes ; then CPPFLAGS="$CPPFLAGS -I${with_gnugetopt}" CFLAGS="$CFLAGS -I${with_gnugetopt}" fi no_good=no echo "$as_me:$LINENO: checking for library containing getopt_long" >&5 echo $ECHO_N "checking for library containing getopt_long... $ECHO_C" >&6 if test "${ac_cv_search_getopt_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_getopt_long=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getopt_long (); int main () { getopt_long (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_getopt_long="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_getopt_long" = no; then for ac_lib in gnugetopt; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getopt_long (); int main () { getopt_long (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_getopt_long="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_getopt_long" >&5 echo "${ECHO_T}$ac_cv_search_getopt_long" >&6 if test "$ac_cv_search_getopt_long" != no; then test "$ac_cv_search_getopt_long" = "none required" || LIBS="$ac_cv_search_getopt_long $LIBS" else no_good=yes fi for ac_header in getopt.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else no_good=yes fi done if test "$no_good" = yes; then LIBS=$OLD_LIBS LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS CFLAGS=$OLD_CFLAGS else cat >>confdefs.h <<\_ACEOF #define HAVE_PKG_gnugetopt 1 _ACEOF fi else no_good=yes fi fi # Check whether --with-uulib or --without-uulib was given. if test "${with_uulib+set}" = set; then withval="$with_uulib" with_uulib=$withval else if test -d uulib; then with_uulib=no else with_uulib=yes fi fi; # Check whether --with-uulib-prefix or --without-uulib-prefix was given. if test "${with_uulib_prefix+set}" = set; then withval="$with_uulib_prefix" if test "$withval" != no; then with_uulib=yes if test "$withval" != yes; then uulib_include="${withval}/include" uulib_libdir="${withval}/lib" fi fi fi; # Check whether --with-uulib-include or --without-uulib-include was given. if test "${with_uulib_include+set}" = set; then withval="$with_uulib_include" uulib_include="$withval" fi; # Check whether --with-uulib-lib or --without-uulib-lib was given. if test "${with_uulib_lib+set}" = set; then withval="$with_uulib_lib" uulib_libdir="$withval" fi; if test "${with_uulib}" != no ; then OLD_LIBS=$LIBS OLD_LDFLAGS=$LDFLAGS OLD_CFLAGS=$CFLAGS OLD_CPPFLAGS=$CPPFLAGS if test "${uulib_libdir}" ; then LDFLAGS="$LDFLAGS -L${uulib_libdir}" elif test "${with_uulib}" != yes ; then LDFLAGS="$LDFLAGS -L${with_uulib}" fi if test "${uulib_include}" ; then CPPFLAGS="$CPPFLAGS -I${uulib_include}" CFLAGS="$CFLAGS -I${uulib_include}" elif test "${with_uulib}" != yes ; then CPPFLAGS="$CPPFLAGS -I${with_uulib}" CFLAGS="$CFLAGS -I${with_uulib}" fi no_good=no echo "$as_me:$LINENO: checking for UUInitialize in -luu" >&5 echo $ECHO_N "checking for UUInitialize in -luu... $ECHO_C" >&6 if test "${ac_cv_lib_uu_UUInitialize+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-luu $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char UUInitialize (); int main () { UUInitialize (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_uu_UUInitialize=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_uu_UUInitialize=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_uu_UUInitialize" >&5 echo "${ECHO_T}$ac_cv_lib_uu_UUInitialize" >&6 if test $ac_cv_lib_uu_UUInitialize = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBUU 1 _ACEOF LIBS="-luu $LIBS" else no_good=yes fi for ac_header in uudeview.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------- ## ## Report this to the nget lists. ## ## ------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else no_good=yes fi done if test "$no_good" = yes; then LIBS=$OLD_LIBS LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS CFLAGS=$OLD_CFLAGS else cat >>confdefs.h <<\_ACEOF #define HAVE_PKG_uulib 1 _ACEOF fi else no_good=yes fi if test "$with_uulib" = no; then UUDIR=uulib UUINC=-I$UUDIR UULIB=$UUDIR/libuu.a cat >>confdefs.h <<\_ACEOF #define HAVE_LIBUU 1 _ACEOF else NOUU=# fi # Check whether --enable-checksum or --disable-checksum was given. if test "${enable_checksum+set}" = set; then enableval="$enable_checksum" if test "$enableval" != "no"; then if test "$enableval" != "yes"; then cat >>confdefs.h <<_ACEOF #define CHECKSUM $enableval _ACEOF else cat >>confdefs.h <<\_ACEOF #define CHECKSUM crc32 _ACEOF fi fi else cat >>confdefs.h <<\_ACEOF #define CHECKSUM crc32 _ACEOF fi; nget_ndebug=yes nget_noopt=no nget_coverage=no # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" if test "$enableval" != "no"; then nget_noopt=yes nget_ndebug=no fi fi; # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" if test "$enableval" != "no"; then nget_ndebug=no fi fi; # Check whether --enable-coverage or --disable-coverage was given. if test "${enable_coverage+set}" = set; then enableval="$enable_coverage" if test "$enableval" != "no"; then nget_noopt=yes nget_coverage=yes fi fi; if test "$nget_noopt" = "yes"; then CXXFLAGS=`echo $CXXFLAGS | sed "s/-O[1-9] *//"` fi if test "$nget_coverage" = "yes"; then CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage" fi if test "$nget_ndebug" = "yes"; then cat >>confdefs.h <<\_ACEOF #define NDEBUG 1 _ACEOF fi nget_ipv6=yes # Check whether --enable-ipv6 or --disable-ipv6 was given. if test "${enable_ipv6+set}" = set; then enableval="$enable_ipv6" nget_ipv6="$enableval" fi; echo "$as_me:$LINENO: checking for socklen_t" >&5 echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6 if test "${ac_cv_type_socklen_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if STDC_HEADERS #include #include #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "socklen_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then ac_cv_type_socklen_t=yes else ac_cv_type_socklen_t=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5 echo "${ECHO_T}$ac_cv_type_socklen_t" >&6 if test $ac_cv_type_socklen_t = no; then cat >>confdefs.h <<\_ACEOF #define socklen_t int _ACEOF fi echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long long *) 0) return 0; if (sizeof (long long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 if test $ac_cv_type_long_long = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LONG_LONG 1 _ACEOF fi echo "$as_me:$LINENO: checking for int_fast64_t" >&5 echo $ECHO_N "checking for int_fast64_t... $ECHO_C" >&6 if test "${ac_cv_type_int_fast64_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int_fast64_t *) 0) return 0; if (sizeof (int_fast64_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int_fast64_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int_fast64_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int_fast64_t" >&5 echo "${ECHO_T}$ac_cv_type_int_fast64_t" >&6 if test $ac_cv_type_int_fast64_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INT_FAST64_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for uint_fast64_t" >&5 echo $ECHO_N "checking for uint_fast64_t... $ECHO_C" >&6 if test "${ac_cv_type_uint_fast64_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((uint_fast64_t *) 0) return 0; if (sizeof (uint_fast64_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_uint_fast64_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_uint_fast64_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_uint_fast64_t" >&5 echo "${ECHO_T}$ac_cv_type_uint_fast64_t" >&6 if test $ac_cv_type_uint_fast64_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_UINT_FAST64_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for int32_t" >&5 echo $ECHO_N "checking for int32_t... $ECHO_C" >&6 if test "${ac_cv_type_int32_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int32_t *) 0) return 0; if (sizeof (int32_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int32_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int32_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5 echo "${ECHO_T}$ac_cv_type_int32_t" >&6 if test $ac_cv_type_int32_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INT32_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for uint32_t" >&5 echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6 if test "${ac_cv_type_uint32_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((uint32_t *) 0) return 0; if (sizeof (uint32_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_uint32_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_uint32_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 echo "${ECHO_T}$ac_cv_type_uint32_t" >&6 if test $ac_cv_type_uint32_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_UINT32_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for int64_t" >&5 echo $ECHO_N "checking for int64_t... $ECHO_C" >&6 if test "${ac_cv_type_int64_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int64_t *) 0) return 0; if (sizeof (int64_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int64_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int64_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5 echo "${ECHO_T}$ac_cv_type_int64_t" >&6 if test $ac_cv_type_int64_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INT64_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for uint64_t" >&5 echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6 if test "${ac_cv_type_uint64_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((uint64_t *) 0) return 0; if (sizeof (uint64_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_uint64_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_uint64_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5 echo "${ECHO_T}$ac_cv_type_uint64_t" >&6 if test $ac_cv_type_uint64_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_UINT64_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for intptr_t" >&5 echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 if test "${ac_cv_type_intptr_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((intptr_t *) 0) return 0; if (sizeof (intptr_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_intptr_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_intptr_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 if test $ac_cv_type_intptr_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTPTR_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for uintptr_t" >&5 echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 if test "${ac_cv_type_uintptr_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((uintptr_t *) 0) return 0; if (sizeof (uintptr_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_uintptr_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_uintptr_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 if test $ac_cv_type_uintptr_t = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_UINTPTR_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for int_fast64_t" >&5 echo $ECHO_N "checking for int_fast64_t... $ECHO_C" >&6 if test "${ac_cv_type_int_fast64_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int_fast64_t *) 0) return 0; if (sizeof (int_fast64_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int_fast64_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int_fast64_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int_fast64_t" >&5 echo "${ECHO_T}$ac_cv_type_int_fast64_t" >&6 echo "$as_me:$LINENO: checking size of int_fast64_t" >&5 echo $ECHO_N "checking size of int_fast64_t... $ECHO_C" >&6 if test "${ac_cv_sizeof_int_fast64_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int_fast64_t" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int_fast64_t=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast64_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int_fast64_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int_fast64_t)); } unsigned long ulongval () { return (long) (sizeof (int_fast64_t)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int_fast64_t))) < 0) { long i = longval (); if (i != ((long) (sizeof (int_fast64_t)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int_fast64_t)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int_fast64_t=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast64_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int_fast64_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int_fast64_t=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_fast64_t" >&5 echo "${ECHO_T}$ac_cv_sizeof_int_fast64_t" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT_FAST64_T $ac_cv_sizeof_int_fast64_t _ACEOF echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long *) 0) return 0; if (sizeof (long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long long *) 0) return 0; if (sizeof (long long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 echo "$as_me:$LINENO: checking size of long long" >&5 echo $ECHO_N "checking size of long long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long long)); } unsigned long ulongval () { return (long) (sizeof (long long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF echo "$as_me:$LINENO: checking for ulong" >&5 echo $ECHO_N "checking for ulong... $ECHO_C" >&6 if test "${ac_cv_type_ulong+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((ulong *) 0) return 0; if (sizeof (ulong)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_ulong=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_ulong=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_ulong" >&5 echo "${ECHO_T}$ac_cv_type_ulong" >&6 if test $ac_cv_type_ulong = yes; then : else cat >>confdefs.h <<_ACEOF #define ulong unsigned long _ACEOF fi echo "$as_me:$LINENO: checking for uchar" >&5 echo $ECHO_N "checking for uchar... $ECHO_C" >&6 if test "${ac_cv_type_uchar+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((uchar *) 0) return 0; if (sizeof (uchar)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_uchar=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_uchar=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_uchar" >&5 echo "${ECHO_T}$ac_cv_type_uchar" >&6 if test $ac_cv_type_uchar = yes; then : else cat >>confdefs.h <<_ACEOF #define uchar unsigned char _ACEOF fi echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 if test "${ac_cv_c_bigendian+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # See if sys/param.h defines the BYTE_ORDER macro. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # It does; now see whether it defined to BIG_ENDIAN or not. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_bigendian=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # It does not; compile a test program. if test "$cross_compiling" = yes; then # try to guess the endianness by grepping values into an object file ac_cv_c_bigendian=unknown cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } int main () { _ascii (); _ebcdic (); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_bigendian=yes fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 echo "${ECHO_T}$ac_cv_c_bigendian" >&6 case $ac_cv_c_bigendian in yes) cat >>confdefs.h <<\_ACEOF #define WORDS_BIGENDIAN 1 _ACEOF ;; no) ;; *) { { echo "$as_me:$LINENO: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&5 echo "$as_me: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} { (exit 1); exit 1; }; } ;; esac echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned _ACEOF fi echo "$as_me:$LINENO: checking for ssize_t" >&5 echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6 if test "${ac_cv_type_ssize_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((ssize_t *) 0) return 0; if (sizeof (ssize_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_ssize_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_ssize_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5 echo "${ECHO_T}$ac_cv_type_ssize_t" >&6 if test $ac_cv_type_ssize_t = yes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 if test "${ac_cv_struct_tm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { struct tm *tp; tp->tm_sec; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_struct_tm=time.h else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_struct_tm=sys/time.h fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 echo "${ECHO_T}$ac_cv_struct_tm" >&6 if test $ac_cv_struct_tm = sys/time.h; then cat >>confdefs.h <<\_ACEOF #define TM_IN_SYS_TIME 1 _ACEOF fi echo "$as_me:$LINENO: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #ifdef signal # undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main () { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_signal=void else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_signal=int fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6 cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF for ac_func in strftime do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else # strftime is in -lintl on SCO UNIX. echo "$as_me:$LINENO: checking for strftime in -lintl" >&5 echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6 if test "${ac_cv_lib_intl_strftime+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strftime (); int main () { strftime (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_intl_strftime=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_intl_strftime=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5 echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6 if test $ac_cv_lib_intl_strftime = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STRFTIME 1 _ACEOF LIBS="-lintl $LIBS" fi fi done for ac_func in stricmp strcasecmp do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in strchr memcpy do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in hstrerror do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { $ac_func(0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in inet_aton do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { $ac_func(NULL,NULL) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in gethostbyname do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { $ac_func(NULL) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in gethostbyaddr do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { $ac_func(NULL,0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "$nget_ipv6" != "no"; then for ac_func in gai_strerror do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { $ac_func(0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getaddrinfo do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { $ac_func(NULL,NULL,NULL,NULL) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in freeaddrinfo do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { $ac_func(NULL) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getnameinfo do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { $ac_func(NULL,0,NULL,0,NULL,0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for struct addrinfo" >&5 echo $ECHO_N "checking for struct addrinfo... $ECHO_C" >&6 if test "${ac_cv_type_struct_addrinfo+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include "compat/socketheaders.h" int main () { if ((struct addrinfo *) 0) return 0; if (sizeof (struct addrinfo)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_struct_addrinfo=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_struct_addrinfo=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_struct_addrinfo" >&5 echo "${ECHO_T}$ac_cv_type_struct_addrinfo" >&6 if test $ac_cv_type_struct_addrinfo = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_ADDRINFO 1 _ACEOF fi fi for ac_func in mktime regcomp strerror atoul asprintf vsnprintf vasprintf timegm gmtime_r localtime_r getopt_long flock setlinebuf fcntl fsync getpid do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for i in 1 do echo "$as_me:$LINENO: checking recv ARG2 => const void* " >&5 echo $ECHO_N "checking recv ARG2 => const void* ... $ECHO_C" >&6 ac_save_CPPFLAGS="$CPPFLAGS" if test "$GXX" = "yes" ; then CPPFLAGS="$CPPFLAGS -Werror" ; fi cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef WIN32 #include #else #include #endif int main () { const void* b = 0; recv(0, b, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CPPFLAGS="$ac_save_CPPFLAGS" echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 cat >>confdefs.h <<\_ACEOF #define RECV_ARG2 const void* _ACEOF break; else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CPPFLAGS="$ac_save_CPPFLAGS" echo "$as_me:$LINENO: result: not ok" >&5 echo "${ECHO_T}not ok" >&6 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: checking recv ARG2 => const char* " >&5 echo $ECHO_N "checking recv ARG2 => const char* ... $ECHO_C" >&6 ac_save_CPPFLAGS="$CPPFLAGS" if test "$GXX" = "yes" ; then CPPFLAGS="$CPPFLAGS -Werror" ; fi cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef WIN32 #include #else #include #endif int main () { const char* b = 0; recv(0, b, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CPPFLAGS="$ac_save_CPPFLAGS" echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 cat >>confdefs.h <<\_ACEOF #define RECV_ARG2 const char* _ACEOF break; else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CPPFLAGS="$ac_save_CPPFLAGS" echo "$as_me:$LINENO: result: not ok" >&5 echo "${ECHO_T}not ok" >&6 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: checking recv ARG2 => void* " >&5 echo $ECHO_N "checking recv ARG2 => void* ... $ECHO_C" >&6 ac_save_CPPFLAGS="$CPPFLAGS" if test "$GXX" = "yes" ; then CPPFLAGS="$CPPFLAGS -Werror" ; fi cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef WIN32 #include #else #include #endif int main () { void* b = 0; recv(0, b, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CPPFLAGS="$ac_save_CPPFLAGS" echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 cat >>confdefs.h <<\_ACEOF #define RECV_ARG2 void* _ACEOF break; else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CPPFLAGS="$ac_save_CPPFLAGS" echo "$as_me:$LINENO: result: not ok" >&5 echo "${ECHO_T}not ok" >&6 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: checking recv ARG2 => char* " >&5 echo $ECHO_N "checking recv ARG2 => char* ... $ECHO_C" >&6 ac_save_CPPFLAGS="$CPPFLAGS" if test "$GXX" = "yes" ; then CPPFLAGS="$CPPFLAGS -Werror" ; fi cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef WIN32 #include #else #include #endif int main () { char* b = 0; recv(0, b, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CPPFLAGS="$ac_save_CPPFLAGS" echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 cat >>confdefs.h <<\_ACEOF #define RECV_ARG2 char* _ACEOF break; else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CPPFLAGS="$ac_save_CPPFLAGS" echo "$as_me:$LINENO: result: not ok" >&5 echo "${ECHO_T}not ok" >&6 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext { { echo "$as_me:$LINENO: error: recv unable to find a working combination" >&5 echo "$as_me: error: recv unable to find a working combination" >&2;} { (exit 1); exit 1; }; } done for ac_func in mkdir _mkdir do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking whether mkdir takes one argument" >&5 echo $ECHO_N "checking whether mkdir takes one argument... $ECHO_C" >&6 if test "${ac_cv_mkdir_takes_one_arg+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if HAVE_UNISTD_H # include #endif int main () { mkdir ("."); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_mkdir_takes_one_arg=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_mkdir_takes_one_arg=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_mkdir_takes_one_arg" >&5 echo "${ECHO_T}$ac_cv_mkdir_takes_one_arg" >&6 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then cat >>confdefs.h <<\_ACEOF #define MKDIR_TAKES_ONE_ARG 1 _ACEOF fi if test "$GXX" = "yes"; then CXXFLAGS="$CXXFLAGS -Wall -MMD" echo "$as_me:$LINENO: checking if $CXX accepts -MP" >&5 echo $ECHO_N "checking if $CXX accepts -MP... $ECHO_C" >&6 if $CXX -MP 2>&1 | grep -- -MP ; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 else echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 CXXFLAGS="$CXXFLAGS -MP" fi fi if test "$GCC" = "yes"; then CFLAGS="$CFLAGS -Wall -MMD" echo "$as_me:$LINENO: checking if $CC accepts -MP" >&5 echo $ECHO_N "checking if $CC accepts -MP... $ECHO_C" >&6 if $CC -MP 2>&1 | grep -- -MP ; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 else echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 CFLAGS="$CFLAGS -MP" fi fi ac_config_files="$ac_config_files Makefile test/Makefile compat/Makefile par2/Makefile nget.spec" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by nget $as_me 0.27.1, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ nget config.status 0.27.1 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "compat/Makefile" ) CONFIG_FILES="$CONFIG_FILES compat/Makefile" ;; "par2/Makefile" ) CONFIG_FILES="$CONFIG_FILES par2/Makefile" ;; "nget.spec" ) CONFIG_FILES="$CONFIG_FILES nget.spec" ;; "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CXXCPP@,$CXXCPP,;t t s,@EGREP@,$EGREP,;t t s,@LITELIBS@,$LITELIBS,;t t s,@NOUU@,$NOUU,;t t s,@UUINC@,$UUINC,;t t s,@UUDIR@,$UUDIR,;t t s,@UULIB@,$UULIB,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in default ) echo timestamp > stamp-h ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi nget-0.27.1/stlhelp.h0000644000175000017500000000210110056212770014660 0ustar donutdonut00000000000000/* stlhelp.* - common stl helper structs Copyright (C) 2000-2001 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _STLHELP_H_ #define _STLHELP_H_ struct eqstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) == 0; } }; struct ltstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; #endif nget-0.27.1/server.cc0000644000175000017500000002065610161634633014673 0ustar donutdonut00000000000000/* server.* - nget configuration handling Copyright (C) 2000-2003 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "server.h" #include "strreps.h" #include "nget.h" #include "status.h" #include #include #include bool c_nget_config::penalize(c_server::ptr server) const { if (penaltystrikes<=0) return false;//penalization disabled ++server->penalty_count; if (server->penalty_count == penaltystrikes) { server->penalty_time = initialpenalty; } else if (server->penalty_count > penaltystrikes) { server->penalty_time = (time_t)(server->penalty_time * penaltymultiplier); } server->last_penalty = time(NULL); PDEBUG(DEBUG_MED, "penalized %s: count %i, last %li, time %li", server->alias.c_str(), server->penalty_count, server->last_penalty, server->penalty_time); return server->penalty_count >= penaltystrikes; } c_server::ptr c_nget_config::getserver(const string &name) const { serv_match_by_name name_matcher; name_matcher.mname=name.c_str(); t_server_list::const_iterator sli=find_if(serv.begin(),serv.end(),name_matcher); if (sli!=serv.end()) return (*sli).second; return NULL; } int parse_int_pair(const char *s, int *l, int *h){ const char *p; char *erp; int i; if (!s || *s=='\0')return -1; p=strchr(s,','); if (p){ int i2; p++; if (*p=='\0')return -1; i=strtol(s,&erp,0); if (*erp!=',') return -1; i2=strtol(p,&erp,0); if (*erp!='\0') return -1; if (i<=i2){ *l=i;*h=i2; }else{ *l=i2;*h=i; } }else{ i=strtol(s,&erp,0); if (*erp!='\0') return -1; if (i<0)i=-i; *l=-i;*h=i; } return 0; } c_server::c_server(ulong id, const CfgSection *ds) : serverid(id), alias(ds->key) { addr = ds->gets("addr"); user = ds->gets("user"); pass = ds->gets("pass"); shortname = ds->gets("shortname"); if (shortname.empty()) shortname = alias[0]; ds->get("idletimeout",idletimeout,1,INT_MAX,nconfig.idletimeout); ds->get("fullxover",fullxover,0,2,nconfig.fullxover); ds->get("maxstreaming",maxstreaming,0,INT_MAX,nconfig.maxstreaming); if (ds->getitem("linelenience")){ const char *ll = ds->geta("linelenience"); int l,h; if (!parse_int_pair(ll,&l,&h)){ lineleniencelow=l;lineleniencehigh=h; }else{ PERROR("%s: invalid linelenience %s",ds->name().c_str(),ll); set_user_error_status(); lineleniencelow=lineleniencehigh=0; } }else{ lineleniencelow=lineleniencehigh=0; } penalty_count=0; last_penalty=0; penalty_time=0; } void c_nget_config::setlist(const CfgSection *cfg,const CfgSection *hinfo,const CfgSection *pinfo,const CfgSection *ginfo){ c_server::ptr server; CfgSection_map::const_iterator dli; CfgItem_map::const_iterator dii; const CfgSection *ds; const CfgItem *di; ulong tul; //cfg assert(cfg); cfg->get("curservmult",curservmult); cfg->get("usegz",usegz,-1,9); cfg->get("fullxover", fullxover, 0, 2); cfg->get("fatal_user_errors", fatal_user_errors, false, true); cfg->get("autopar_optimistic", autopar_optimistic, false, true); cfg->get("unequal_line_error",unequal_line_error,0,1); cfg->get("maxstreaming",maxstreaming,0,INT_MAX); cfg->get("maxconnections",maxconnections,-1,INT_MAX); cfg->get("idletimeout",idletimeout,1,INT_MAX); cfg->get("penaltystrikes",penaltystrikes,-1,INT_MAX); cfg->get("initialpenalty",initialpenalty,1,INT_MAX); cfg->get("penaltymultiplier",penaltymultiplier,1.0f,1e100f); //halias assert(hinfo); for (dli=hinfo->sections_begin();dli!=hinfo->sections_end();++dli){ ds=(*dli).second; assert(ds); if (!ds->getitem("addr")){ PERROR("host %s no addr",ds->key.c_str()); set_user_error_status(); continue; } if (!ds->getitem("id")){ PERROR("host %s no id",ds->key.c_str()); set_user_error_status(); continue; } if (!ds->get("id",tul,1UL,ULONG_MAX)) continue; server = new c_server(tul, ds); serv.insert(t_server_list::value_type(server->serverid,server)); } //hpriority if (pinfo) for (dli=pinfo->sections_begin();dli!=pinfo->sections_end();++dli){ ds=(*dli).second; assert(ds); c_server_priority_grouping *pgrouping=new c_server_priority_grouping(ds->key); for (dii=ds->items_begin();dii!=ds->items_end();++dii){ di=(*dii).second; if (di->key=="_level"){ di->get(pgrouping->deflevel); }else if (di->key=="_glevel"){ di->get(pgrouping->defglevel); }else{ server=getserver(di->key); if (!server){ PERROR("prio section %s, server %s not found",ds->key.c_str(),di->key.c_str()); set_user_error_status(); continue; } c_server_priority *sprio=new c_server_priority(server,atof(di->gets().c_str())); pgrouping->priorities.insert(t_server_priority_grouping::value_type(sprio->server,sprio)); } } if (pgrouping->alias=="trustsizes") trustsizes=pgrouping; else prioritygroupings.insert(t_server_priority_grouping_list::value_type(pgrouping->alias.c_str(),pgrouping)); } if (getpriogrouping("default")==NULL){ c_server_priority_grouping *pgrouping=new c_server_priority_grouping("default"); prioritygroupings.insert(t_server_priority_grouping_list::value_type(pgrouping->alias.c_str(),pgrouping)); } if (trustsizes==NULL){ trustsizes=new c_server_priority_grouping("trustsizes"); } //galias if (ginfo) { for (dii=ginfo->items_begin();dii!=ginfo->items_end();++dii){ di=(*dii).second; addgroup_or_metagroup(di->key,di->gets()); } for (dli=ginfo->sections_begin();dli!=ginfo->sections_end();++dli){ ds=(*dli).second; assert(ds); int susegz; ds->get("usegz",susegz,-1,9,-2); addgroup(ds->key,ds->gets("group"),ds->gets("prio"),susegz); } } } void c_nget_config::addgroup_or_metagroup(const string &alias, const string &name){ if (name.find(',')!=string::npos) addmetagroup(alias,name); else addgroup(alias,name,""); } void c_nget_config::addmetagroup(const string &alias, const string &name){ metagroups.insert(t_metagroup_list::value_type(alias,name)); } c_group_info::ptr c_nget_config::addgroup(const string &alias, const string &name, string prio, int usegz){ if (prio.empty())prio="default"; c_server_priority_grouping *priog=getpriogrouping(prio); if (!priog){ printf("group %s(%s), prio %s not found\n",name.c_str(),alias.c_str(),prio.c_str()); set_user_error_status(); return NULL; } assert(priog); c_group_info::ptr group(new c_group_info(alias,name,priog,usegz)); if (group){ if (!alias.empty()) groups.insert(t_group_info_list::value_type(group->alias.c_str(),group)); groups.insert(t_group_info_list::value_type(group->group.c_str(),group)); } return group; } void c_nget_config::dogetallcachedgroups(vector &groups) { DIR *dir=opendir(ngcachehome.c_str()); struct dirent *de; if (!dir) throw PathExFatal(Ex_INIT,"opendir: %s(%i)",strerror(errno),errno); while ((de=readdir(dir))) { char *endp; if ((endp=strstr(de->d_name,",cache"))){ string groupname(de->d_name, endp - de->d_name); groups.push_back(getgroup(groupname.c_str())); } } closedir(dir); } void c_nget_config::dogetgroups(vector &groups, const char *names) { char *foo = new char[strlen(names)+1]; char *cur = foo, *name = NULL; strcpy(foo, names); while ((name = goodstrtok(&cur, ','))) { if (strcmp(name,"*")==0) dogetallcachedgroups(groups); else { t_metagroup_list::const_iterator mgi=metagroups.find(name); if (mgi!=metagroups.end()) dogetgroups(groups, mgi->second.c_str()); else groups.push_back(getgroup(name)); } } delete [] foo; } void c_nget_config::getgroups(vector &groups, const char *names) { groups.clear(); vector tmpgroups; dogetgroups(tmpgroups, names); for (vector::const_iterator gi=tmpgroups.begin(); gi!=tmpgroups.end(); ++gi) if (find(groups.begin(), groups.end(), *gi)==groups.end()) groups.push_back(*gi); // return only unique groups } nget-0.27.1/strreps.h0000644000175000017500000000364410056213731014722 0ustar donutdonut00000000000000/* strreps.* - replacements for some string funcs that aren't always available Copyright (C) 1999-2002,2004 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _STRREPS_H_incd_ #define _STRREPS_H_incd_ #ifdef HAVE_CONFIG_H #include "config.h" #ifndef HAVE_ASPRINTF int asprintf(char **str,const char *format,...) __attribute__ ((format (printf, 2, 3))); #endif #ifndef HAVE_VSNPRINTF #include int vsnprintf(char *str, size_t size, const char *format, va_list ap); #endif #ifndef HAVE_VASPRINTF #include int vasprintf(char **str,const char *format,va_list ap); #endif #ifndef HAVE_ATOUL //inline ulong atoul(const char *str){return strtoul(str,NULL,10);} #define atoul(str) strtoul(str,NULL,10) #endif #ifndef HAVE_STRERROR #define NEED_CRAPPY_STRERROR const char * crappy_strerror(int err); inline const char * strerror(int err) {return crappy_strerror(err);} #endif //tests if hstrerror might be a define, too, since autoconf can't find that. #if (!defined(HAVE_HSTRERROR) && !defined(hstrerror)) #define NEED_CRAPPY_STRERROR const char * crappy_strerror(int err); inline const char * hstrerror(int err) {return crappy_strerror(err);} #endif #endif //HAVE_CONFIG_H #include #endif nget-0.27.1/lite.cc0000644000175000017500000001120610161662625014313 0ustar donutdonut00000000000000/* lite.* - ngetlite main files Copyright (C) 2000-2004 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "log.h" #include "path.h" #include "lite.h" #include "litenntp.h" #include #include "strreps.h" #include "sockstuff.h" char *newstrcpy(char *&dest, const char *src){ int l; if (dest) free(dest); l=strlen(src); dest=(char*)malloc(l+1); return strcpy(dest,src); } int maxretry=20; c_prot_nntp nntp; void showhelp(void){ printf("ngetlite v"PACKAGE_VERSION" - 'lite' nntp fetcher for nget\n" "Copyright 2000-2004 Matthew Mueller \n"); printf("USAGE: ngetlite \n"); printf("listfiles are generated with nget and the -w param\n"); exit (0); } char *Bfgets(char *buf,int len,FILE*f){ char *r=fgets(buf,len,f); if (!r)return NULL; int l=strlen(buf); if (l>0 && (buf[l-1]=='\n' || buf[l-1]=='\r')){ buf[--l]=0; if (l>0 && (buf[l-1]=='\n' || buf[l-1]=='\r')) buf[--l]=0; } return r; } void dofile(const char *arg){ FILE *listf=fopen(arg,"r+"); if (listf==NULL){ printf("couldn't open %s: %s\n",arg,strerror(errno)); return; } char buf[2048]; printf("using litelist file: %s\n",arg); char *group=NULL; char *outfile=NULL; char *host=NULL, *user=NULL, *pass=NULL; char *cp; int tempi,i,partdone,retry; long flagpos,temppos; char *article=NULL; ulong lines,bytes; #define FCHK(a) {if (a) {if (ferror(listf)) {printf(__FILE__":%i ",__LINE__);} goto dofile_ferror;}} #define Lfgets(buf) {FCHK(Bfgets(buf,2048,listf)==NULL);} while (!feof(listf)){ FCHK((flagpos=ftell(listf))<0); Lfgets(buf); if (strcmp(buf,"1")==0) partdone=1; else{ if (strcmp(buf,"0")){ printf("invalid litelist file\n"); goto dofile_error; return; } partdone=0; } Lfgets(buf); newstrcpy(group,buf); Lfgets(buf); newstrcpy(outfile,buf); if (fexists(outfile)) { printf("%s already exists, skipping\n", outfile); partdone=1; } Lfgets(buf); tempi=atoi(buf); for (i=0;i 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "file.h" #include #include #include "strreps.h" #ifdef HAVE_LIBZ c_file_gz::c_file_gz(const char *name,const char * mode):c_file(name){ if (!(gzh=gzopen(name,mode))) THROW_OPEN_ERROR("gzopen %s (%s)", name, strerror(errno)); } const char *c_file_gz::dostrerror(void) { if (gzh) { int foo; const char *err = gzerror(gzh, &foo); if (foo!=Z_ERRNO) return err; } return strerror(errno); } int c_file_gz::doflush(void){ if (gzh) return gzflush(gzh,Z_SYNC_FLUSH); return 0; } int c_file_gz::doclose(void){ int i=0; i=gzclose(gzh); gzh=NULL; return i; } int c_file_gz::isopen(void)const{ return (gzh!=0); } ssize_t c_file_gz::dowrite(const void *data,size_t len){ return gzwrite(gzh,(void*)data,len); } ssize_t c_file_gz::doread(void *data,size_t len){ return gzread(gzh,data,len); } #endif nget-0.27.1/.ngetrc0000644000175000017500000000503210161664323014327 0ustar donutdonut00000000000000//example .ngetrc, copy to your ~/.nget5/ dir, and edit to your liking. #lines that start with either '#' or '//' are considered comments and ignored. #Before running nget you must configure at least one host in the halias section #See the "CONFIGURATION" section of the nget manpage for full details. //global settings - (defaults, merely listed for your convenience) #tries=20 #delay=1 #case=0 #complete=1 #dupeidcheck=1 #dupefilecheck=1 #dupefilemark=0 #limit=0 #quiet=0 #debug=0 #tempshortnames=0 #curservmult=2.0 #makedirs=no #usegz=-1 #timeout=180 #unequal_line_error=0 #//cachedir=/home/user/.nget5 #test_multiserver=no #fullxover=0 #maxstreaming=64 #idletimeout=300 #maxconnections=-1 #penaltystrikes=3 #initialpenalty=180 #penaltymultiplier=2.0 #fatal_user_errors=0 #text=files #save_binary_info=0 #autopar=1 #autopar_optimistic=0 //hostname aliases {halias { addr= id=1 #optional host config settings: # user= # pass= # fullxover=1 # shortname= # maxstreaming=64 # idletimeout=300 # linelenience=0 } #Examples: # {host1 # addr=news.host1.com # fullxover=1 # id=384845 # linelenience=0,2 # } # {goodhost # addr=nntp.goodhost.net # user=yourname # pass=hahahahah # id=384846 # } # {badhost # addr=hah.bad.host.org:3876 # id=384847 # linelenience=3 # } } //multi-server priorities {hpriority #The "default" hpriority section will be used for all groups that don't #specify their own prio= setting in the galias section. # {default # host1=1.9 # goodhost=2.0 # badhost=0.9 # } #The "trustsizes" specifies how much we trust each server's reports of article #bytes/lines count. # {trustsizes # goodhost=5.0 # badhost=0.1 # } #The "_grouplist" specifies which groups -a updates automatically. #(if _grouplist section doesn't exist, "default" is used instead) # {_grouplist # _glevel=2 # goodhost=2 # host1=2 # } #Any number of additional hpriority sections may be specified here, and then #referenced from prio= settings in the galias section. # {chocoboprios # _level=0.94 # _glevel=1.5 # host1=1.8 # badhost=1.2 # goodhost=0.9 # } } //newsgroup aliases {galias # ayg=alt.your.group # mygroup=rec.my.group # {chocobo # group=alt.chocobo # prio=chocoboprios # } # {wark # group=alt.chocobo.wark.wark.wark # prio=chocoboprios # } # chocobos=chocobo,wark # {idunno # group=alt.idunno.why.but.this.one.isnt.compressed # usegz=0 # } # {less # group=alt.this.one.is.compressed.less.but.it.should.be.faster # usegz=3 # } # {more # group=alt.slower.but.more.compression # usegz=9 # } } nget-0.27.1/auto_map.h0000644000175000017500000000612610064403161015020 0ustar donutdonut00000000000000/* auto_map.h - map that manages its contents Copyright (C) 2003-2004 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef AUTO_MAP_H__ #define AUTO_MAP_H__ #include "rcount.h" #include #include template class Base> class auto_map_base : public Base > { protected: typedef Base > super; public: typedef typename super::iterator iterator; void clear(void){ while (!this->empty()) erase(this->begin()); } void erase(iterator i){ T* p=(*i).second.gimmethepointer(); super::erase(i); delete p; } auto_map_base(void){} ~auto_map_base() { clear(); } private: void insert(void); //private insert func to hide std::map's insert members void delete_all(void) { for (iterator i=this->begin(); i!=this->end(); ++i) delete (*i).gimmethepointer(); } auto_map_base(const auto_map_base &v); //private copy constructor to disallow copying auto_map_base& operator= (const auto_map_base &m); //private operator= to disallow assignment }; template class auto_map : public auto_map_base { public: typedef typename auto_map_base::super super; typedef typename super::iterator iterator; typedef typename super::value_type value_type; /*super::value_type value_type(const K &k, T*p) { return super::value_type(k, restricted_ptr(p)); } pair insert(const super::value_type &v) { assert(find(v.first)==end()); return super::insert(v); }*/ std::pair insert_value(const K &k, T* p) { //we can't really use the normal insert funcs, but we don't want to just name it insert since it would be easy to confuse with all the normal map insert funcs assert(find(k)==this->end()); return super::insert(value_type(k, restricted_ptr(p))); } }; template class auto_multimap : public auto_map_base { public: typedef typename auto_map_base::super super; typedef typename super::iterator iterator; typedef typename super::value_type value_type; iterator insert_value(const K &k, T* p) { //we can't really use the normal insert funcs, but we don't want to just name it insert since it would be easy to confuse with all the normal map insert funcs return super::insert(value_type(k, restricted_ptr(p))); } }; #endif nget-0.27.1/cache.cc0000644000175000017500000010102710056212765014421 0ustar donutdonut00000000000000/* cache.* - nntp header cache code Copyright (C) 1999-2004 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "cache.h" #include "strreps.h" #include "log.h" #include #include #include #include #include "auto_vector.h" #include "nget.h" #include "status.h" #include "mylockfile.h" #include "strtoker.h" #include "path.h" #include "par.h" static inline bool count_partnum(int partnum, int req) { if (req>0) return (partnum>0 && partnum<=req); else return (partnum == req); } int c_nntp_header::parsepnum(const char *str,const char *soff){ const char *p; assert(str); assert(soff>=str); if ((p=strpbrk(soff+1,")]"))){ char m,m2=*p; if (m2==')') m='('; else m='['; tailoff=p-str; for(p=soff;p>str;p--) if (*p==m){ p++; char *erp; partoff=p-str; partnum=strtol(p,&erp,10); if (*erp!='/' || erp==p) return -1; int req=strtol(soff+1,&erp,10); if (*erp!=m2 || erp==soff+1) return -1; if (partnum>req) return -1; if (partnum==0) req=0;//handle 0-files seperatly from the binary they accompany return req; } } return -1; } t_id c_nntp_file::getfileid(void) const { #ifdef CHECKSUM t_id fileid=CHECKSUM(0L, Z_NULL, 0); fileid=CHECKSUM(fileid,(Byte*)subject.data(),subject.size()); fileid=CHECKSUM(fileid,(Byte*)author.data(),author.size()); for (t_references::const_iterator ri = references.begin(); ri != references.end(); ++ri) fileid=CHECKSUM(fileid,(Byte*)ri->data(),ri->size()); if (req<=0){ const string &mid=bamid(); fileid=CHECKSUM(fileid,(Byte*)mid.data(),mid.size()); } #else hash H; t_id fileid=H(subject.c_str())+H(author.c_str());//prolly not as good as crc32, but oh well. for (t_references::const_iterator ri = references.begin(); ri != references.end(); ++ri) fileid+=H(ri->c_str()); if (req<=0) fileid+=H(bamid().c_str()); #endif return fileid; } void c_nntp_header::set(char * str,const char *a,ulong anum,time_t d,ulong b,ulong l,const char *mid, char *refstr){ assert(str); assert(a); author=a;articlenum=anum;date=d;bytes=b;lines=l; messageid=mid; references.clear(); if (refstr && *refstr) { char *ref, *refstr_copy=refstr; while ((ref = goodstrtok(&refstr_copy,' '))) { references.push_back(ref); } } const char *s=str+strlen(str)-3;//-1 for null, -2 for ), -3 for num req=0; for (;s>str;s--) { if (*s=='/') if ((req=parsepnum(str,s))>=0){ if (req==0) { subject=str; } else { subject=""; subject.append(str,partoff); subject.append("*"); subject.append(s); } return; } } partoff=-1;tailoff=-1; // partnum=0; partnum=-1; subject=str; } c_nntp_server_article::c_nntp_server_article(ulong _server,const c_group_info::ptr &_group,ulong _articlenum,ulong _bytes,ulong _lines):serverid(_server),group(_group),articlenum(_articlenum),bytes(_bytes),lines(_lines){} //c_nntp_part::c_nntp_part(c_nntp_header *h):partnum(h->partnum),articlenum(h->articlenum),date(h->date),bytes(h->bytes),lines(h->lines){} c_nntp_part::c_nntp_part(c_nntp_header *h):partnum(h->partnum),date(h->date),messageid(h->messageid){ addserverarticle(h); } void c_nntp_part::addserverarticle(c_nntp_header *h){ c_nntp_server_article *sa; #ifndef NDEBUG if (debug>=DEBUG_MIN){ t_nntp_server_articles::iterator sai=articles.find(h->serverid); if (sai!=articles.end()){ sa=(*sai).second; printf("adding server_article we already have %lu %lu %lu %lu(%lu %lu %lu %lu)\n",h->serverid,h->articlenum,h->bytes,h->lines,sa->serverid,sa->articlenum,sa->bytes,sa->lines); // return;//could be useful, lets add it. } } if (h->date!=date) printf("adding server_article with different date, date=%li h->date=%li mid=%s\n",date,h->date,h->messageid.c_str()); #endif sa=new c_nntp_server_article(h->serverid,h->group,h->articlenum,h->bytes,h->lines); articles.insert(t_nntp_server_articles::value_type(h->serverid,sa)); } c_nntp_part::~c_nntp_part(){ t_nntp_server_articles::iterator i; for(i = articles.begin();i!=articles.end();++i){ assert((*i).second); delete (*i).second; } } void c_nntp_file::addpart(c_nntp_part *p){ assert(p); //assert((req==-1 && p->partnum<=0) || (p->partnum<=req));//#### req==-1 hack for old version that set non-multipart messages partnum to 0 instead of -1 // parts[p->partnum]=p; #ifndef NDEBUG t_nntp_file_parts::iterator nfpi=parts.find(p->partnum); assert(nfpi==parts.end()); #endif parts.insert(t_nntp_file_parts::value_type(p->partnum,p)); if (count_partnum(p->partnum, req)) have++; // bytes+=p->apxbytes;lines+=p->apxlines; } void c_nntp_file::addnewpart(c_nntp_part *p){ time(&update); addpart(p); } void c_nntp_file::mergefile(c_nntp_file::ptr &f){ if (f->update>update) update=f->update; t_nntp_file_parts::iterator fpi=f->parts.begin(); while (fpi!=f->parts.end()){ const c_nntp_part *p = fpi->second; t_nntp_file_parts::iterator nfpi=parts.find(p->partnum); if (nfpi==parts.end()) { addpart(new c_nntp_part(p->partnum, p->date, p->messageid)); nfpi=parts.find(p->partnum); }else{ if (nfpi->second->messageid!=p->messageid){ PDEBUG(DEBUG_MED,"%s was gonna merge, but already have this part(sub=%s part=%i omid=%s)?\n",p->messageid.c_str(),f->subject.c_str(),p->partnum,nfpi->second->messageid.c_str()); ++fpi; continue; } } for (t_nntp_server_articles::const_iterator fsai=p->articles.begin(); fsai!=p->articles.end(); ++fsai){ c_nntp_server_article *nsa = new c_nntp_server_article(*fsai->second); nfpi->second->articles.insert(t_nntp_server_articles::value_type(nsa->serverid,nsa)); } t_nntp_file_parts::iterator del_pi = fpi; ++fpi; delete del_pi->second; f->parts.erase(del_pi); } } //fill a mapping of how many parts of the file each server has void c_nntp_file::get_server_have_map(t_server_have_map &have_map) const{ t_nntp_file_parts::const_iterator pi(parts.begin()); for (;pi!=parts.end();++pi){ t_nntp_server_articles::const_iterator nsai(pi->second->articles.begin()); ulong serverid; int partnum=pi->second->partnum; set servers_already_found; for (;nsai!=pi->second->articles.end();++nsai) { serverid=nsai->first; //don't increment count twice if a server has multiple server_articles for a single part if (servers_already_found.insert(serverid).second){ t_server_have_map::iterator hmi(have_map.insert(t_server_have_map::value_type(serverid, 0)).first); if (count_partnum(partnum, req)) ++hmi->second; } } } } c_nntp_file::c_nntp_file(int r,ulong f,const char *s,const char *a,int po,int to,time_t ud):c_nntp_file_base(r, po, a, s),have(0),flags(f),tailoff(to),update(ud){ // printf("aoeu1.1\n"); } c_nntp_file::c_nntp_file(c_nntp_header *h):c_nntp_file_base(*h),have(0),flags(0),tailoff(h->tailoff),update(0){ // printf("aoeu1\n"); } c_nntp_file::~c_nntp_file(){ t_nntp_file_parts::iterator i; for(i = parts.begin();i!=parts.end();++i){ assert((*i).second); delete (*i).second; } } c_nntp_getinfo::c_nntp_getinfo(const string &pat, const string &temppat, const vector &dupepaths, nntp_file_pred *pre,int flag):path(pat), temppath(temppat), pred(pre), flags(flag) { if (!(flags&GETFILES_NODUPEFILECHECK)) { for (vector::const_iterator si=dupepaths.begin(); si!=dupepaths.end(); ++si) flist.addfrompath(*si); flist.addfrompath(path); } } static void nntp_cache_getfile(c_nntp_files_u *fc, ParHandler *parhandler, meta_mid_info *midinfo, const t_nntp_getinfo_list &getinfos, const c_nntp_file::ptr &f) { pair firange; t_nntp_getinfo_list::const_iterator gii, giibegin=getinfos.begin(), giiend=getinfos.end(); c_nntp_getinfo::ptr info; for (gii=giibegin; gii!=giiend; ++gii) { info = *gii; if ( (!(info->flags&GETFILES_AUTOPAR_DISABLING_FLAGS) || info->flags&GETFILES_GETINCOMPLETE || f->iscomplete()) // --autopar or -i or file_is_complete && (info->flags&GETFILES_NODUPEIDCHECK || !(midinfo->check(f->bamid()))) // -dI or file_not_in_midinfo && (*info->pred)(f.gimmethepointer()) // matches user spec ){ if (!(info->flags&GETFILES_AUTOPAR_DISABLING_FLAGS)) { if (parhandler->maybe_add_parfile(f, info->path, info->temppath, info->flags&GETFILES_GETINCOMPLETE)) continue; if (!(info->flags&GETFILES_GETINCOMPLETE || f->iscomplete())) // autopar_didnt_want_it and -I and file_incomplete continue; } firange=fc->files.equal_range(f->badate()); for (;firange.first!=firange.second;++firange.first){ if ((*firange.first).second->file->bamid()==f->bamid()) return; } if (!(info->flags&GETFILES_NODUPEFILECHECK) && info->flist.checkhavefile(f->subject.c_str(),f->bamid(),f->bytes())){ if (info->flags&GETFILES_DUPEFILEMARK) midinfo->insert(f); continue; } fc->addfile(f,info->path,info->temppath); return; } } } void c_nntp_cache::getfiles(c_nntp_files_u *fc, ParHandler *parhandler, meta_mid_info *midinfo, const t_nntp_getinfo_list &getinfos) { t_nntp_files::const_iterator fi; for(fi = files.begin();fi!=files.end();++fi){ nntp_cache_getfile(fc, parhandler, midinfo, getinfos, (*fi).second); } } static bool cache_ismultiserver(const t_nntp_server_info &server_info) { int num=0; for (t_nntp_server_info::const_iterator sii=server_info.begin(); sii!=server_info.end(); ++sii) if (sii->second.num > 0) num++; return num > 1; } bool c_nntp_cache::ismultiserver(void) const { return cache_ismultiserver(server_info); } c_nntp_server_info* c_nntp_cache::getserverinfo(ulong serverid){ t_nntp_server_info::iterator i = server_info.find(serverid); if (i != server_info.end()) return &i->second; return &server_info.insert(t_nntp_server_info::value_type(serverid, serverid)).first->second; } int c_nntp_cache::additem(c_nntp_header *h){ assert(h); c_nntp_file::ptr f; t_nntp_files::iterator i; pair irange = files.equal_range(h); // t_nntp_files::const_iterator i; // pair irange = files.equal_range(h->mid); c_nntp_server_info *servinfo=getserverinfo(h->serverid); if (h->articlenum > servinfo->high) servinfo->high = h->articlenum; if (h->articlenum < servinfo->low) servinfo->low = h->articlenum; servinfo->num++; saveit=1; // printf("%lu %s..",h->articlenum,h->subject.c_str()); for (i=irange.first;i!=irange.second;++i){ f=(*i).second; assert(!f.isnull()); t_nntp_file_parts::iterator op; if ((op=f->parts.find(h->partnum))!=f->parts.end()){ c_nntp_part *matchpart=(*op).second; if (matchpart->messageid==h->messageid){ matchpart->addserverarticle(h); return 0; } PDEBUG(DEBUG_MED,"%s was gonna add, but already have this part(sub=%s part=%i omid=%s)?\n",h->messageid.c_str(),f->subject.c_str(),h->partnum,matchpart->messageid.c_str()); continue; } // printf("adding\n"); c_nntp_part *p=new c_nntp_part(h); f->addnewpart(p); totalnum++; return 0; } // printf("new\n"); f=new c_nntp_file(h); c_nntp_part *p=new c_nntp_part(h); f->addnewpart(p); totalnum++; //files[f->subject.c_str()]=f; files.insert(t_nntp_files::value_type(f.gimmethepointer(),f)); return 1; } void c_nntp_cache::getxrange(c_nntp_server_info *servinfo,ulong newlow,ulong newhigh, c_nrange *range) const { range->clear(); range->insert(newlowlow?newlow:servinfo->low,newhigh); getxrange(servinfo, range); } void c_nntp_cache::getxrange(c_nntp_server_info *servinfo, c_nrange *range) const { t_nntp_files::const_iterator i; c_nntp_file::ptr nf; t_nntp_file_parts::const_iterator pi; c_nntp_part *np; pair sarange; c_nntp_server_article *sa; for(i = files.begin();i!=files.end();++i){ nf=(*i).second; assert(!nf.isnull()); assert(!nf->parts.empty()); for(pi = nf->parts.begin();pi!=nf->parts.end();++pi){ np=(*pi).second; assert(np); sarange=np->articles.equal_range(servinfo->serverid); while (sarange.first!=sarange.second){ sa=(*sarange.first).second; assert(sa); range->remove(sa->articlenum); ++sarange.first; } } } } ulong c_nntp_cache::flushlow(c_nntp_server_info *servinfo, ulong newlow, meta_mid_info *midinfo){ assert(newlow>0); c_nrange flushrange; flushrange.insert(0, newlow-1); ulong r = flush(servinfo, flushrange, midinfo); servinfo->low=newlow; return r; } ulong c_nntp_cache::flush(c_nntp_server_info *servinfo, c_nrange flushrange, meta_mid_info *midinfo){ ulong count=0,countp=0,countf=0; t_nntp_files::iterator i,in; c_nntp_file::ptr nf; t_nntp_file_parts::iterator pi,pic; c_nntp_part *np; pair sarange; t_nntp_server_articles::iterator sai; c_nntp_server_article *sa; c_mid_info rel_midinfo(""); //restrict the message to the range of headers we actually have, since showing 0-4294967295 or something isn't too useful ;0 flushrange.remove(0,servinfo->low-1); flushrange.remove(servinfo->high+1,ULONG_MAX); if (flushrange.empty()) return 0; if (quiet<2) {printf("Flushing headers %lu-%lu(%lu):", flushrange.low(), flushrange.high(), flushrange.get_total());fflush(stdout);} for(in = files.begin();in!=files.end();){ i=in; ++in; nf=(*i).second; assert(!nf.isnull()); assert(!nf->parts.empty()); for(pi = nf->parts.begin();pi!=nf->parts.end();){ pic=pi; ++pi; np=(*pic).second; assert(np); sarange=np->articles.equal_range(servinfo->serverid); while (sarange.first!=sarange.second){ sai=sarange.first; ++sarange.first; sa=(*sai).second; assert(sa); if (flushrange.check(sa->articlenum)){ delete sa; np->articles.erase(sai); if (np->articles.empty()){ if (count_partnum(np->partnum,nf->req)) nf->have--; midinfo->set_delete(np->messageid); delete np; np=NULL; nf->parts.erase(pic); countp++; } count++; } } if (np && midinfo->check(np->messageid)) rel_midinfo.insert(np->messageid); } if (nf->parts.empty()){ // nf->dec_rcount(); // delete nf; files.erase(i); countf++; //#ifdef HAVE_HASH_MAP_H // in=files.begin();//not needed, apparantly. //#endif } } servinfo->num-=count; totalnum-=countp; #ifndef NDEBUG for(in = files.begin();in!=files.end();++in){ nf=(*in).second; assert(!nf.isnull()); assert(!nf->parts.empty()); for(pi = nf->parts.begin();pi!=nf->parts.end();++pi){ np=(*pi).second; assert(np); sai=np->articles.find(servinfo->serverid); if (sai!=np->articles.end()){ sa=(*sai).second; assert(!flushrange.check(sa->articlenum)); } } } #endif if (quiet<2){printf(" %lu (%lu,%lu)\n",count,countp,countf);} if (count)saveit=1; midinfo->do_delete_fun(rel_midinfo); return count; } void setfilenamegz(string &file, int gz=-2){ #ifndef HAVE_LIBZ gz=0; #endif if (gz==-2) gz=nconfig.usegz; if (gz) file.append(".gz"); } c_file *dofileopen(string file, string mode, int gz=-2){ c_file *f=NULL; #ifndef HAVE_LIBZ gz=0; #endif if (gz==-2) gz=nconfig.usegz; #ifdef HAVE_LIBZ if (gz){ if (gz>0){ char blah[10]; sprintf(blah,"%i",gz); mode.append(blah); } f=new c_file_gz(file.c_str(),mode.c_str()); } #endif if (!gz){ f=new c_file_fd(file.c_str(),mode.c_str()); } if (mode[0]=='r' || mode.find('+')>=0) f->initrbuf(); return f; } enum { START_MODE=2, SERVERINFO_MODE=4, FILE_MODE=0, PART_MODE=1, SERVER_ARTICLE_MODE=3, REFERENCES_MODE=5, }; class c_nntp_cache_reader { protected: c_file *f; meta_mid_info *midinfo; c_group_info::ptr group; public: int cache_sortver; ulong count,counta,curline,countdeada,totalnum; c_nntp_cache_reader(c_file *cf, meta_mid_info*mi, t_nntp_server_info &server_infoi, const c_group_info::ptr &grou); c_nntp_file::ptr read_file(void); const char *filename(void) const {return f->name();} void check_counts(void); }; c_nntp_cache_reader::c_nntp_cache_reader(c_file *cf, meta_mid_info *mi, t_nntp_server_info &server_info, const c_group_info::ptr &grou):f(cf), midinfo(mi), group(grou){ count=0;counta=0;curline=0;countdeada=0;totalnum=0;cache_sortver=-1; char *t[5]; int i; if (f->beof()) throw CacheEx(Ex_INIT, "unexpected EOF on cache file line %lu",curline); curline++; //(mode==START_MODE) i = f->btoks('\t',t,2); if (i==2 && (strcmp(t[0],CACHE_VERSION)==0)){ totalnum=atoul(t[1]); char *subvercp=strchr(t[1], ' '); if (subvercp) cache_sortver = atoi(subvercp); }else{ if (i>0 && strncmp(t[0],"NGET",4)==0) throw CacheEx(Ex_INIT,"cache is from a different version of nget"); else throw CacheEx(Ex_INIT,"cache does not seem to be an nget cache file"); } while (1) { if (f->beof()) throw CacheEx(Ex_INIT, "unexpected EOF on cache file line %lu",curline); curline++; //(mode==SERVERINFO_MODE) if (f->bpeek()=='.') { if (f->bgetsp()[1]!=0) { printf("warning: stuff after . line %lu mode %i\n",curline,SERVERINFO_MODE); set_cache_warn_status(); } //mode=FILE_MODE;//start new file mode return; } i = f->btoks('\t',t,4); if (i==4){ ulong serverid=atoul(t[0]); if (nconfig.hasserver(serverid)) { server_info.insert(t_nntp_server_info::value_type(serverid, c_nntp_server_info(serverid, atoul(t[1]), atoul(t[2]), atoul(t[3])))); }else{ printf("warning: serverid %lu not found in server list\n",serverid); set_cache_warn_status(); } }else{ printf("invalid line %lu mode %i (%i toks)\n",curline,SERVERINFO_MODE,i);//mode); set_cache_warn_status(); } } } c_nntp_file::ptr c_nntp_cache_reader::read_file(void) { int mode=FILE_MODE; //c_nntp_file *nf=NULL; c_nntp_file::ptr nf=NULL; c_nntp_part *np=NULL; c_nntp_server_article *sa; char *t[8]; int i; while (!f->beof()){ curline++; if (mode==SERVER_ARTICLE_MODE && np){//new server_article mode if (f->bpeek()=='.'){ if (f->bgetsp()[1]!=0) { printf("warning: stuff after . line %lu mode %i\n",curline,mode); set_cache_warn_status(); } mode=PART_MODE;//go back to new part mode continue; }else{ i = f->btoks('\t',t,4); if (i==4){ ulong serverid=atoul(t[0]); if (nconfig.hasserver(serverid)) { sa=new c_nntp_server_article(serverid,group,atoul(t[1]),atoul(t[2]),atoul(t[3])); //np->addserverarticle(sa); np->articles.insert(t_nntp_server_articles::value_type(sa->serverid,sa)); counta++; }else countdeada++; }else{ printf("invalid line %lu mode %i (%i toks)\n",curline,mode,i); set_cache_warn_status(); } } } else if (mode==PART_MODE && nf){//new part mode if (np && np->articles.empty()) { midinfo->set_delete(np->messageid); nf->parts.erase(np->partnum); delete np; np=NULL; count--; } if (f->bpeek()=='.'){ if (f->bgetsp()[1]!=0) { printf("warning: stuff after . line %lu mode %i\n",curline,mode); set_cache_warn_status(); } if (nf->parts.empty()){ set_cache_warn_status(); printf("empty nntp_file finished at line %lu mode %i\n",curline,mode); nf=NULL; np=NULL; mode=FILE_MODE;//go back to new file mode }else return nf; }else{ i = f->btoks('\t',t,3); if (i==3){ np=new c_nntp_part(atoi(t[0]),atoul(t[1]),t[2]); nf->addpart(np);//add at '.' section (above) ... o r not. count++; mode=SERVER_ARTICLE_MODE;//start adding server_articles }else{ printf("invalid line %lu mode %i (%i toks)\n",curline,mode,i); set_cache_warn_status(); } } } else if (mode==FILE_MODE){//new file mode i = f->btoks('\t',t,7); if (i==7){ nf=new c_nntp_file(atoi(t[0]),atoul(t[1]),t[2],t[3],atoi(t[4]),atoi(t[5]),atoul(t[6])); mode=REFERENCES_MODE; }else{ printf("invalid line %lu mode %i (%i toks)\n",curline,mode,i); set_cache_warn_status(); } } else if (mode==REFERENCES_MODE && nf){//adding references on new file char *buf=f->bgetsp(); if (buf[0]=='.' && buf[1]==0){ mode=PART_MODE; np=NULL; continue; }else{ if (buf[0]=='.') buf++;//unescape any invalid references that started with . nf->references.push_back(buf); } }else{ assert(0);//should never get here } } if (nf) throw CacheEx(Ex_INIT, "unexpected EOF on cache file line %lu",curline); return NULL; } void c_nntp_cache_reader::check_counts(void) { if (countdeada){ printf("warning: read (and ignored) %lu articles with bad serverids\n",countdeada); set_cache_warn_status(); } if (count!=totalnum){ printf("warning: read %lu parts from cache, expecting %lu\n",count,totalnum); totalnum=count; set_cache_warn_status(); } } c_nntp_cache::c_nntp_cache(void):totalnum(0), saveit(0){ fileread=-1; } c_nntp_cache::c_nntp_cache(string path,c_group_info::ptr group_,meta_mid_info *midinfo):totalnum(0),group(group_){ saveit=0; //file=nid; c_file *f; file=path_join(path,group->group + ",cache"); setfilenamegz(file,group->usegz); fileread=0; try { f=dofileopen(file.c_str(),"rb",group->usegz); }catch(FileNOENTEx &e){ return; } auto_ptr fcloser(f); try{ c_nntp_cache_reader reader(f, midinfo, server_info, group_); c_nntp_file::ptr nf; while ((nf=reader.read_file())) files.insert(t_nntp_files::value_type(nf.gimmethepointer(),nf)); fileread=1; if (reader.cache_sortver!=CACHE_SORTVER) saveit=1; //if the cache is from a version with different sorting, force saving it with new sorting even if nothing is changed otherwise. PDEBUG(DEBUG_MIN,"read %lu parts (%lu sa) %lu files",reader.count,reader.counta,(ulong)files.size()); reader.check_counts(); totalnum = reader.totalnum; } catch (CacheEx &e) { set_cache_warn_status(); printf("%s: %s\n", file.c_str(), e.getExStr()); } f->close(); } c_nntp_cache::~c_nntp_cache(){ t_nntp_files::iterator i; if (fileread!=-1 && saveit && (fileread || !files.empty())){ string tmpfn; tmpfn=file+".tmp"; try { c_file *f=dofileopen(tmpfn,"wb",group->usegz); ulong count=0,counta=0; try { auto_ptr fcloser(f); if (quiet<2){printf("saving cache: %lu parts, %lu files..",totalnum,(ulong)files.size());fflush(stdout);} c_nntp_file::ptr nf; t_references::iterator ri; t_nntp_file_parts::iterator pi; t_nntp_server_articles::iterator sai; c_nntp_server_article *sa; c_nntp_part *np; f->putf(CACHE_VERSION"\t%lu %i\n",totalnum,CACHE_SORTVER);//START_MODE //vv SERVERINFO_MODE for (t_nntp_server_info::const_iterator sii=server_info.begin(); sii!=server_info.end(); ++sii) { const c_nntp_server_info &si = sii->second; f->putf("%lu\t%lu\t%lu\t%lu\n",si.serverid,si.high,si.low,si.num);//mode 4 } f->putf(".\n"); //end SERVERINFO_MODE //vv FILE_MODE for(i = files.begin();i!=files.end();++i){ nf=(*i).second; assert(!nf.isnull()); assert(!nf->parts.empty()); f->putf("%i\t%lu\t%s\t%s\t%i\t%i\t%lu\n",nf->req,nf->flags,nf->subject.c_str(),nf->author.c_str(),nf->partoff,nf->tailoff,nf->update);//FILE_MODE for(ri = nf->references.begin();ri!=nf->references.end();++ri){ if ((*ri)[0]=='.') f->putf("."); //escape possible invalid references that might start with . f->putf("%s\n",ri->c_str());//REFERENCES_MODE } f->putf(".\n");//end REFERENCES_MODE for(pi = nf->parts.begin();pi!=nf->parts.end();++pi){ np=(*pi).second; assert(np); f->putf("%i\t%lu\t%s\n",np->partnum,np->date,np->messageid.c_str());//PART_MODE for (sai = np->articles.begin(); sai != np->articles.end(); ++sai){ sa=(*sai).second; assert(sa); f->putf("%lu\t%lu\t%lu\t%lu\n",sa->serverid,sa->articlenum,sa->bytes,sa->lines);//SERVER_ARTICLE_MODE counta++; } f->putf(".\n");//end SERVER_ARTICLE_MODE count++; } f->putf(".\n");//end PART_MODE (*i).second=NULL; //free cache as we go along instead of at the end, so we don't swap more with low-mem. //nf->storef(f); //delete nf; //nf->dec_rcount(); } f->close(); }catch(FileEx &e){ printCaughtEx(e); if (unlink(tmpfn.c_str())) perror("unlink:"); fatal_exit(); } if (quiet<2) printf(" done. (%lu sa)\n",counta); if (count!=totalnum){ printf("warning: wrote %lu parts from cache, expecting %lu\n",count,totalnum); set_cache_warn_status(); } xxrename(tmpfn.c_str(), file.c_str()); return; }catch (FileEx &e){ printCaughtEx(e); fatal_exit(); } } if (quiet<2){printf("freeing cache: %lu parts, %lu files..\n",totalnum,(ulong)files.size());}//fflush(stdout);} // for(i = files.begin();i!=files.end();++i){ //delete (*i).second; // (*i).second->dec_rcount(); // } // if (!quiet) printf(" done.\n"); } c_nntp_files_u::~c_nntp_files_u(){ // t_nntp_files_u::iterator i; // for(i = files.begin();i!=files.end();++i){ // (*i).second->dec_rcount(); // } } static inline bool ltfp(const c_nntp_file::ptr &f1, const c_nntp_file::ptr &f2) { return *f1 < *f2; } void nntp_cache_getfiles(c_nntp_files_u *fc, ParHandler *parhandler, bool *ismultiserver, string path, const vector &groups, meta_mid_info*midinfo, const t_nntp_getinfo_list &getinfos){ set usedservers; auto_vector cachefiles; vector server_infos; vector readers; vector nfiles; ulong mergedcount=0, numfiles=0, mergedfiles=0, count=0, counta=0; c_nntp_file::ptr nf, mergef; for (vector::const_iterator gi=groups.begin(); gi!=groups.end(); ++gi) { const c_group_info::ptr &group = *gi; string file=path_join(path,group->group + ",cache"); setfilenamegz(file,group->usegz); c_file *f=NULL; try { f=dofileopen(file.c_str(),"rb",group->usegz); }catch(FileNOENTEx &e){ //pass } if (f) { cachefiles.push_back(f); try{ t_nntp_server_info server_info; c_nntp_cache_reader reader(f, midinfo, server_info, group); if (reader.cache_sortver!=CACHE_SORTVER) throw CacheEx(Ex_INIT, "cache file must be updated with this version of nget before it can be used with metagrouping"); for (t_nntp_server_info::const_iterator sii=server_info.begin(); sii!=server_info.end(); ++sii) if (sii->second.num > 0) usedservers.insert(sii->first); if ((nf=reader.read_file())) { //printf("initial file %i\n", nfiles.size()); nfiles.push_back(nf);//initialize with first nntp_file. readers.push_back(reader); numfiles++; } } catch (CacheEx &e) { set_cache_warn_status(); printf("%s: %s\n", file.c_str(), e.getExStr()); } } } *ismultiserver = usedservers.size() > 1; vector::iterator nfi_m; while (!nfiles.empty()) { nfi_m = min_element(nfiles.begin(), nfiles.end(), ltfp); mergef = *nfi_m; //printf("pre-loop. nfiles.size=%u, merged=%lu, numfiles=%lu\n", nfiles.size(), mergedfiles, numfiles); for (unsigned i = 0; imergefile(nfiles[i]); } if (nfiles[i]==mergef || nfiles[i]->parts.empty()) { try{ //printf("reading file %u\n", i); nf=readers[i].read_file(); } catch (CacheEx &e) { nf=NULL; set_cache_warn_status(); printf("%s: %s\n", readers[i].filename(), e.getExStr()); } //printf("file %u = %p\n", i, nf.gimmethepointer()); if (nf) { assert(!(*nf < *nfiles[i])); numfiles++; nfiles[i]=nf; } else { nfiles.erase(nfiles.begin()+i); count+=readers[i].count; counta+=readers[i].counta; readers[i].check_counts(); readers.erase(readers.begin()+i); continue; } } } ++i; } //printf("post-loop. nfiles.size=%u, merged=%lu, numfiles=%lu\n", nfiles.size(), mergedfiles, numfiles); nntp_cache_getfile(fc, parhandler, midinfo, getinfos, mergef); mergedfiles++; mergedcount+=mergef->parts.size(); } PDEBUG(DEBUG_MIN,"scanned %lu parts %lu files (total: %lu parts (%lu sa) %lu files)",mergedcount,mergedfiles,count,counta,numfiles); for (vector::iterator cri=readers.begin(); cri!=readers.end(); ++cri) cri->check_counts(); for (auto_vector::iterator cfi=cachefiles.begin(); cfi!=cachefiles.end(); ++cfi) (*cfi)->close(); } void nntp_cache_getfiles(c_nntp_files_u *fc, ParHandler *parhandler, bool *ismultiserver, string path, c_group_info::ptr group, meta_mid_info*midinfo, const t_nntp_getinfo_list &getinfos){ string file=path_join(path,group->group + ",cache"); setfilenamegz(file,group->usegz); c_file *f; try { f=dofileopen(file.c_str(),"rb",group->usegz); }catch(FileNOENTEx &e){ return; } auto_ptr fcloser(f); try{ t_nntp_server_info server_info; ulong numfiles=0; c_nntp_cache_reader reader(f, midinfo, server_info, group); *ismultiserver = cache_ismultiserver(server_info); c_nntp_file::ptr nf; while ((nf=reader.read_file())) { nntp_cache_getfile(fc, parhandler, midinfo, getinfos, nf); numfiles++; } PDEBUG(DEBUG_MIN,"scanned %lu parts (%lu sa) %lu files",reader.count,reader.counta,numfiles); reader.check_counts(); } catch (CacheEx &e) { set_cache_warn_status(); printf("%s: %s\n", file.c_str(), e.getExStr()); } f->close(); } #define MID_INFO_MIN_KEEP (14*24*60*60) #define MID_INFO_MIN_KEEP_DEL (7*24*60*60) void c_mid_info::do_delete_fun(const c_mid_info &rel_mid){ t_message_state_list::iterator i=states.begin(); c_message_state::ptr s; int deld=0; time_t curtime=time(NULL); for (;i!=states.end();++i){ s=(*i).second; if (rel_mid.check(s->messageid)) continue; if ((s->date_removed==TIME_T_MAX1 && s->date_added+MID_INFO_MIN_KEEPdate_added+MID_INFO_MIN_KEEPdate_removed+MID_INFO_MIN_KEEP_DELdate_removed=TIME_T_DEAD;//let em just not get saved. changed=1;deld++; } } PDEBUG(DEBUG_MIN,"c_mid_info::do_delete_fun: %i killed",deld); } c_mid_info::c_mid_info(string path){ load(path); } void c_mid_info::load(string path,bool merge,bool lock){ if (!merge){ clear(); changed=0; } if (path.empty()) return; c_file *f=NULL; if (!merge) setfilenamegz(path);//ugh, hack. file=path; int line=0; //c_lockfile locker(path,WANT_SH_LOCK); auto_ptr locker; if (lock) locker.reset(new c_lockfile(path,WANT_SH_LOCK)); // c_regex_r midre("^(.+) ([0-9]+) ([0-9]+)$"); char *t[3]; int i; try { f=dofileopen(path.c_str(),"rb"); }catch(FileNOENTEx &e){ return; } auto_ptr fcloser(f); while (!f->beof()){ line++; i = f->btoks(' ',t,3); if (i==3) insert_full(t[0],atol(t[1]),atol(t[2]));//TODO: shouldn't set changed flag if no new ones are actually merged. else { printf("c_mid_info::load: invalid line %i (%i toks)\n",line,i); set_cache_warn_status(); } } f->close(); PDEBUG(DEBUG_MIN,"c_mid_info::load read %i lines",line); if (!merge) changed=0; return; } c_mid_info::~c_mid_info(){ try { save(); } catch (FileEx &e) { printCaughtEx(e); fatal_exit(); } clear(); } void c_mid_info::save(void){ if (!changed) return; if (file.empty()) return; c_file *f=NULL; c_lockfile locker(file,WANT_EX_LOCK);//lock before we read, so that multiple copies trying to save at once don't lose changes. { unsigned long count1=states.size(); load(file,1,0);//merge any changes that might have happened if (count1!=states.size()){ if (debug){printf("saving mid_info: merged something...(%lu)\n",(ulong)states.size()-count1);} } } int nums=0; string tmpfn=file+".tmp"; f=dofileopen(tmpfn,"wb"); try { auto_ptr fcloser(f); if (debug){printf("saving mid_info: %lu infos..",(ulong)states.size());fflush(stdout);} t_message_state_list::iterator sli; c_message_state::ptr ms; for (sli=states.begin(); sli!=states.end(); ++sli){ ms=(*sli).second; if (ms->date_removed==TIME_T_DEAD) continue; f->putf("%s %li %li\n",ms->messageid.c_str(),ms->date_added,ms->date_removed); nums++; } if (debug) printf(" (%i) done.\n",nums); f->close(); }catch(FileEx &e){ if (unlink(tmpfn.c_str())) perror("unlink:"); throw; } xxrename(tmpfn.c_str(), file.c_str()); return; } nget-0.27.1/configure.in0000644000175000017500000001452510161664324015365 0ustar donutdonut00000000000000dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.53) AC_INIT(nget,0.27.1) AC_CONFIG_SRCDIR(nget.cc) AC_CONFIG_HEADER(config.h) AH_TOP([#ifndef _NGET_CONFIG_H_ #define _NGET_CONFIG_H_ ]) AH_BOTTOM([ /* tests for some features that depend on other features */ #include "_subconf.h" #endif /* _NGET_CONFIG_H_ */ ]) AC_LANG_CPLUSPLUS dnl Checks for programs. AC_PROG_CC AC_PROG_CXX AC_PROG_RANLIB AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(STRIP, strip) AC_PROG_INSTALL dnl AC_PROG_MAKE_SET MY_CHECK_FOMIT_FRAME_POINTER MY_CHECK_EXCEPTIONS dnl Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h sstream limits regex.h term.h inttypes.h winsock.h winsock2.h ws2tcpip.h sys/socket.h process.h windows.h) AC_CHECK_HEADERS(stdio.h endian.h) MY_CHECK_HASH_MAP dnl due to windows' linking methods, you need the correct prototype to find some funcs, eg LockFile MY_SEARCH_LIBS(LockFile,[#include ], [LockFile(0,0,0,0,0);], [kernel32], [library containing LockFile]) dnl SunOS/win32 needs seperate libs for network stuff. MY_CHECK_SOCKET AC_SEARCH_LIBS(gethostbyname, nsl) AC_SEARCH_LIBS(hstrerror, resolv) dnl Checks for libraries needed by both nget and ngetlite AC_donut_CHECK_PACKAGE(pcre, pcre_compile, pcre, pcreposix.h, AC_CHECK_LIB(pcreposix,main)) dnl All the libraries we check for after this point are not needed by ngetlite, so save its LIBS now. LITELIBS="$LIBS" AC_SUBST(LITELIBS) dnl Checks for libraries only needed by nget. MY_CHECK_TERMSTUFF AC_donut_CHECK_PACKAGE_DEF(lockfile, lockfile_create, lockfile, lockfile.h) AC_donut_CHECK_PACKAGE_DEF(zlib, gzopen, z, zlib.h) AC_donut_CHECK_PACKAGE_DEF(popt, poptGetContext, popt, popt.h, MY_CHECK_POPT_CONST, [AC_donut_SEARCH_PACKAGE_DEF(gnugetopt, getopt_long, gnugetopt, getopt.h)] ) dnl check for uulib. We need a bit of special handling to support the dnl nget+uulib source. AC_ARG_WITH(uulib, [AC_HELP_STRING([--with-uulib(=DIR)], [look in DIR for uulib])], with_uulib=$withval , if test -d uulib; then with_uulib=no else with_uulib=yes fi ) AC_donut_CHECK_PACKAGE_sub(uulib, UUInitialize, uu, uudeview.h) if test "$with_uulib" = no; then UUDIR=uulib UUINC=-I$UUDIR UULIB=$UUDIR/libuu.a AC_DEFINE(HAVE_LIBUU) dnl AC_DEFINE(HAVE_PKG_UULIB) else NOUU=# fi AC_SUBST(NOUU) AC_SUBST(UUINC) AC_SUBST(UUDIR) AC_SUBST(UULIB) AC_ARG_ENABLE(checksum, [ --enable-checksum=method Set which method to use for comparing headers and for short-tempnames. Either crc32 or adler32. default is crc32, as it seems to get less repeated values, however adler32 is said to be faster. It probably doesn't make much difference. --disable-checksum Disable usage of checksums for comparing headers as well as for short-tempnames, uses STL hash function instead.], if test "$enableval" != "no"; then if test "$enableval" != "yes"; then AC_DEFINE_UNQUOTED(CHECKSUM,$enableval,[checksum method to use]) else AC_DEFINE(CHECKSUM,crc32) fi fi , AC_DEFINE(CHECKSUM,crc32) ) nget_ndebug=yes nget_noopt=no nget_coverage=no AC_ARG_ENABLE(debug, [ --enable-debug Enable debug code, asserts, etc and disable optimization.], if test "$enableval" != "no"; then nget_noopt=yes nget_ndebug=no fi ) AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode Enable debug code, asserts, etc..], if test "$enableval" != "no"; then nget_ndebug=no fi ) AC_ARG_ENABLE(coverage, [ --enable-coverage Enable compiler flags for coverage testing.], if test "$enableval" != "no"; then nget_noopt=yes nget_coverage=yes fi ) if test "$nget_noopt" = "yes"; then MY_DISABLE_OPT fi if test "$nget_coverage" = "yes"; then CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage" fi if test "$nget_ndebug" = "yes"; then AC_DEFINE(NDEBUG,1,[debug mode?]) fi nget_ipv6=yes AC_ARG_ENABLE(ipv6, [ --disable-ipv6 Do not try to use IPv6 capable netcode.], nget_ipv6="$enableval" ) dnl AC_ARG_ENABLE(debug_cache, dnl [ --enable-debug_cache Enable consistancy checks when loading and saving header cache], dnl if test "$enableval" != "no"; then dnl AC_DEFINE(DEBUG_CACHE,,[check consistancy ]) dnl fi dnl ) dnl checks for socklen_t SOCK_CHECK_TYPE(socklen_t, int) AC_CHECK_TYPES([long long, int_fast64_t, uint_fast64_t, int32_t, uint32_t, int64_t, uint64_t, intptr_t, uintptr_t]) AC_CHECK_SIZEOF(int_fast64_t) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) dnl checks for ulong AC_CHECK_TYPE(ulong, unsigned long) dnl checks for uchar AC_CHECK_TYPE(uchar, unsigned char) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_BIGENDIAN AC_TYPE_SIZE_T AC_CHECK_TYPE(ssize_t, int) AC_HEADER_TIME AC_STRUCT_TM dnl Checks for library functions. AC_TYPE_SIGNAL AC_FUNC_STRFTIME dnl AC_FUNC_VPRINTF AC_CHECK_FUNCS(stricmp strcasecmp) AC_CHECK_FUNCS(strchr memcpy) dnl again, due to windows' linking methods, you need the correct prototype to find some funcs.. AC_DEFUN([MY_CHECK_SOCKFUNCS],[MY_CHECK_FUNCS([$1],[$2],,,[#include "compat/socketheaders.h"])]) MY_CHECK_SOCKFUNCS([hstrerror],[0]) MY_CHECK_SOCKFUNCS([inet_aton],[NULL,NULL]) MY_CHECK_SOCKFUNCS([gethostbyname],[NULL]) MY_CHECK_SOCKFUNCS([gethostbyaddr],[NULL,0,0]) if test "$nget_ipv6" != "no"; then MY_CHECK_SOCKFUNCS([gai_strerror],[0]) MY_CHECK_SOCKFUNCS([getaddrinfo],[NULL,NULL,NULL,NULL]) MY_CHECK_SOCKFUNCS([freeaddrinfo],[NULL]) MY_CHECK_SOCKFUNCS([getnameinfo],[NULL,0,NULL,0,NULL,0,0]) AC_CHECK_TYPES([struct addrinfo],,,[#include "compat/socketheaders.h"]) fi AC_CHECK_FUNCS(mktime regcomp strerror atoul asprintf vsnprintf vasprintf timegm gmtime_r localtime_r getopt_long flock setlinebuf fcntl fsync getpid) AC_PROTOTYPE_RECV AC_FUNC_MKDIR dnl enable warnings and automatic dependancies if using gcc if test "$GXX" = "yes"; then CXXFLAGS="$CXXFLAGS -Wall -MMD" AC_MSG_CHECKING(if $CXX accepts -MP) if $CXX -MP 2>&1 | grep -- -MP ; then AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) CXXFLAGS="$CXXFLAGS -MP" fi fi if test "$GCC" = "yes"; then CFLAGS="$CFLAGS -Wall -MMD" AC_MSG_CHECKING(if $CC accepts -MP) if $CC -MP 2>&1 | grep -- -MP ; then AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) CFLAGS="$CFLAGS -MP" fi fi AC_OUTPUT(Makefile test/Makefile compat/Makefile par2/Makefile nget.spec,[echo timestamp > stamp-h]) nget-0.27.1/termstuff.cc0000644000175000017500000000376610056212767015412 0ustar donutdonut00000000000000/* termstuff.* - terminal control functions Copyright (C) 2001 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "termstuff.h" #include "log.h" #include #include #ifdef HAVE_WORKING_TERMSTUFF #include #endif typedef void voidfunc(void); //Fake clr_bol function incase we can't use termcap. Assumes that we will be //writing another line of near the same length after clearing, thus we don't //really need to clear the whole line, only the end of it. void generic_clr_bol(void) { printf("\b\b\b\b "); } voidfunc *clr_bol_func = generic_clr_bol; #ifdef HAVE_WORKING_TERMSTUFF void tputs_clr_bol(void) { if (tputs(clr_bol, 1, putchar)<0) { generic_clr_bol(); PDEBUG(DEBUG_MIN, "tputs_clr_bol: error"); } } #endif void init_term_stuff(void) { #ifdef HAVE_WORKING_TERMSTUFF char tbuf[1024]; char *term = getenv("TERM"); if (!term){ PDEBUG(DEBUG_MIN, "init_term_stuff: TERM env not set"); return; } if (tgetent(tbuf, term) != 1){ PDEBUG(DEBUG_MIN, "init_term_stuff: tgetent failure"); // err(2, "tgetent failure"); return; } clr_bol_func = tputs_clr_bol; PDEBUG(DEBUG_MIN, "init_term_stuff: using tputs_clr_bol"); #else PDEBUG(DEBUG_MIN, "init_term_stuff: using generic_clr_bol"); #endif } void clear_line_and_return(void) { clr_bol_func(); printf("\r"); } nget-0.27.1/nrange.h0000644000175000017500000000463010056212770014470 0ustar donutdonut00000000000000/* nrange.* - stores a set of numbers in a non-memory-hogging way (and speedy too?) Copyright (C) 1999-2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _NRANGE_H_ #define _NRANGE_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include typedef map t_rlist;//we are going to use high as the key, and low as the value class c_nrange{ public: static const ulong varmin=0; static const ulong varmax=ULONG_MAX; //int changed; t_rlist rlist; ulong get_total(void) const { ulong tot=0; for (t_rlist::const_iterator i=rlist.begin();i!=rlist.end();++i) tot += i->first - i->second + 1; return tot; } ulong low(void) const { if (rlist.empty()) throw runtime_error("low() of empty nrange"); return rlist.begin()->second; } ulong high(void) const { if (rlist.empty()) throw runtime_error("high() of empty nrange"); return rlist.rbegin()->first; } t_rlist::size_type num_ranges(void) const {return rlist.size();} bool empty(void) const {return rlist.empty();} bool check(ulong n) const { t_rlist::const_iterator i=rlist.lower_bound(n); if (i!=rlist.end() && (*i).second<=n) return true; return false; } void insert(ulong n); void insert(ulong l,ulong h); void remove(ulong n){remove(n,n);} void remove(ulong l, ulong h); void clear(void){ if (!rlist.empty()){ rlist.erase(rlist.begin(),rlist.end()); //changed=1; } } void invert(const c_nrange &r); c_nrange(const c_nrange &r):/*changed(r.changed),*/rlist(r.rlist){} c_nrange(){}; bool operator==(const c_nrange &b) const {return rlist==b.rlist;} bool operator!=(const c_nrange &b) const {return rlist!=b.rlist;} }; #endif nget-0.27.1/ngetlite.10000644000175000017500000000200610161774523014743 0ustar donutdonut00000000000000.TH ngetlite 1 "16 May 2002" .SH NAME ngetlite \- retrieve files from NNTP hosts .SH SYNOPSIS .B ngetlite .SH DESCRIPTION .B ngetlite retrieves messages as described in each listfile. Listfiles are generated with: .br .B nget \-w .PP In almost all circumstances, you will want to download and decode directly with nget. However, in some cases ngetlite can be useful on computers with low ram or cpu, that can't handle the large cache files needed for some groups. You can run nget \-w on some other computer and then do the actual downloading with ngetlite using very little resources. .SH EXAMPLES The following sequence of commands demonstrates a typical usage: .br nget \-w foo.list \-G alt.foo \-r "\\.png" .br ngetlite foo.list .br nget \-N \-G alt.foo \-r "\\.png" .SH ENVIRONMENT .PP .IP "NGETLITE_TIMEOUT" Socket timeout value in seconds. .IP "NGETLITE_TRIES" Max number of attempts per article. .SH AUTHOR Matthew Mueller .SH "SEE ALSO" .BR nget (1) nget-0.27.1/_hash_map.h0000644000175000017500000000233110056212770015131 0ustar donutdonut00000000000000/* _hash_map.h - handle the different types of hash_map extensions Copyright (C) 2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __HASH_MAP_H_ #define __HASH_MAP_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_WORKING_HASH_MAP #ifdef HAVE_HASH_MAP #include #elif HAVE_EXT_HASH_MAP #include #elif HAVE_HASH_MAP_H #include #endif #ifdef HASH_MAP_NEED_GNU_CXX_NAMESPACE using namespace __gnu_cxx; #endif #else //!HAVE_WORKING_HASH_MAP #include #endif #endif nget-0.27.1/decode.cc0000644000175000017500000002445310056212765014610 0ustar donutdonut00000000000000/* decode.* - uu/yenc/etc decoding (wrapper around uulib) Copyright (C) 1999-2004 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "decode.h" #include "strreps.h" #include "texthandler.h" #include "path.h" #include "misc.h" #include "myregex.h" #include "status.h" #include "_sstream.h" #include #ifndef PROTOTYPES #define PROTOTYPES //required for uudeview.h to prototype function args. #endif #ifdef HAVE_UUDEVIEW_H #include #else #include "uudeview.h" #endif int uu_info_callback(void *v,char *i){ TextHandler *th = static_cast(v); th->addinfo(i); return 0; }; struct uu_err_status { int derr; int last_t; TextHandler *th; // string last_m; uu_err_status(void):derr(0),last_t(-1),th(NULL){} }; void uu_msg_callback(void *v,char *m,int t){ if (t!=UUMSG_MESSAGE) {//###### uu_err_status *es = (uu_err_status *)v; es->derr++; es->last_t = t; if (es->th && t!=UUMSG_NOTE) { es->th->adddecodeinfo(m); } // es->last_m = m; //++(*(int *)v); } if (quiet>=2 && (t==UUMSG_MESSAGE || t==UUMSG_NOTE)) return; printf("uu_msg(%i):%s\n",t,m); }; int uu_busy_callback(void *v,uuprogress *p){ // if (!quiet) printf("uu_busy(%i):%s %i%%\r",p->action,p->curfile,(100*p->partno-p->percent)/p->numparts); if (!quiet) {printf(".");fflush(stdout);} return 0; }; string fname_filter(const char *path, const char *fn){ const char *fnp=fn; int slen=strlen(fnp); if (*fnp=='"') { fnp++; slen--; } if (fnp[slen-1]=='"') slen--; if (path) return path_join(path,string(fnp,slen)); else return string(fnp,slen); } char * uu_fname_filter(void *v,char *fn){ static string filtered; const string *s=(const string *)v; filtered = fname_filter(s->c_str(),fn); PDEBUG(DEBUG_MED,"uu_fname_filter: filtered %s to %s",fn,filtered.c_str()); return const_cast(filtered.c_str()); //uulib isn't const-ified } const char *uutypetoa(int uudet) { switch (uudet){ case YENC_ENCODED:return "yEnc"; case UU_ENCODED:return "UUdata"; case B64ENCODED:return "Base64"; case XX_ENCODED:return "XXdata"; case BH_ENCODED:return "BinHex"; case PT_ENCODED:return "plaintext"; case QP_ENCODED:return "qptext"; default:return "unknown"; } } string make_dupe_name(const string &path, const string &fn, c_nntp_file::ptr f) { string s; while (1) { ostringstream ss; ss << fn << '.' << f->badate() << '.' << rand(); s = ss.str(); if (!fexists(is_abspath(s.c_str())?s:path_join(path,s))) return s; } } int find_duplicate(const string &nfn, const string &orgfn) { string path(orgfn), orgfntail; path_split(path,orgfntail); int found = 0; DIR *dir=opendir(path.c_str()); struct dirent *de; if (!dir) throw PathExFatal(Ex_INIT,"opendir: %s(%i)",strerror(errno),errno); while ((de=readdir(dir))) { if (strcmp(de->d_name,"..")==0) continue; if (strcmp(de->d_name,".")==0) continue; string de_fnp = path_join(path,de->d_name); if (de_fnp==nfn) continue; //it's the new file itself if (!strstartswith(de_fnp, orgfn)) continue; //not a matching file. PDEBUG(DEBUG_MED,"find_duplicate: comparing %s and %s\n", nfn.c_str(), de_fnp.c_str()); if (filecompare(nfn.c_str(),de_fnp.c_str())){ found = 1; break; } } closedir(dir); return found; } int remove_if_duplicate(const string &nfn, const string &orgfn) { int found_dup = find_duplicate(nfn,orgfn); if (found_dup){ // if identical to a previously decoded file, delete the one we just downloaded unlink(nfn.c_str()); printf("Duplicate File Removed %s\n", nfn.c_str()); set_dupe_ok_status(); } return found_dup; } void Decoder::addpart(int partno,char *fn) { fnbuf.push_back(pair(partno,fn)); } int Decoder::decode(const nget_options &options, const c_nntp_file_retr::ptr &fr, dupe_file_checker &flist) { if (fnbuf.empty()) return 0; int optionflags = options.gflags; c_nntp_file::ptr f = fr->file; uu_err_status uustatus; c_regex_nosub uulib_textfn_re("^[0-9][0-9][0-9][0-9]+\\.txt$",REG_EXTENDED); int r,un; TextHandler texthandler(options.texthandling, options.save_text_for_binaries, options.mboxfname, fr, fnbuf.front().second); uustatus.th = &texthandler; if ((r=UUInitialize())!=UURET_OK) throw ApplicationExFatal(Ex_INIT,"UUInitialize: %s",UUstrerror(r)); UUSetOption(UUOPT_DUMBNESS,1,NULL); // "smartness" barfs on some subjects //UUSetOption(UUOPT_FAST,1,NULL);//we store each message in a seperate file //actually, I guess that won't work, since some messages have multiple files in them anyway. UUSetOption(UUOPT_OVERWRITE,0,NULL);//no thanks. UUSetOption(UUOPT_USETEXT,1,NULL);//######hmmm... UUSetOption(UUOPT_DESPERATE,1,NULL); UUSetMsgCallback(&uustatus,uu_msg_callback); UUSetBusyCallback(NULL,uu_busy_callback,1000); UUSetFNameFilter((void*)&fr->path,uu_fname_filter); for(t_fnbuf_list::const_iterator fncurb = fnbuf.begin();fncurb!=fnbuf.end();++fncurb){ UULoadFileWithPartNo((*fncurb).second,NULL,0,(*fncurb).first); } uulist * uul; for (un=0;;un++){ if ((uul=UUGetFileListItem(un))==NULL)break; if (uul->filename==NULL) { printf("invalid uulist item, uul->filename==NULL\n"); uustatus.derr++; //continue; // if not using UUOPT_DESPERATE. UURenameFile(uul,"noname"); } if (!(uul->state & UUFILE_OK)){ printf("%s not ok\n",uul->filename); texthandler.adddecodeinfo(string(uul->filename) + " not ok"); uustatus.derr++; //continue; // if not using UUOPT_DESPERATE. } // printf("\ns:%x d:%x\n",uul->state,uul->uudet); r=UUInfoFile(uul,&texthandler,uu_info_callback); if ((uul->uudet==PT_ENCODED || uul->uudet==QP_ENCODED) && uul->filename==uulib_textfn_re){ continue; //ignore, as this should be handled by the UUInfoFile already.. } //check if dest file exists before attempting decode, avoids having to hack around the uu_error that occurs when the destfile exists and overwriting is disabled. //also rename the file if it is not ok to avoid the impression that you have a correct file. int pre_decode_derr = uustatus.derr; string orig_fnp = fname_filter(fr->path.c_str(), uul->filename); if ((uul->state & UUFILE_OK) && !fexists(orig_fnp)) { r=UUDecodeFile(uul,NULL); if ((r!=UURET_OK || uustatus.derr!=pre_decode_derr) && fexists(orig_fnp)) { string nfnp; nfnp = make_dupe_name(fr->path.c_str(), orig_fnp, f); xxrename(orig_fnp.c_str(), nfnp.c_str()); remove_if_duplicate(nfnp, orig_fnp); } } else { //all the following ugliness with fname_filter is due to uulib forgetting that we already filtered the name and giving us the original name instead. // Generate a new filename to use string nfn(make_dupe_name(fr->path.c_str(), fname_filter(NULL,uul->filename), f)); UURenameFile(uul,const_cast(nfn.c_str())); //uulib isn't const-ified r=UUDecodeFile(uul,NULL); // did it decode something? (could still be incomplete or broken though) if (r == UURET_OK){ string nfnp(path_join(fr->path,nfn)); int removed_dup = remove_if_duplicate(nfnp, orig_fnp); if (fexists(orig_fnp) && !removed_dup){ set_dupe_warn_status(); } } } if (r!=UURET_OK){ uustatus.derr++; printf("decode(%s): %s\n",uul->filename,UUstrerror(r)); texthandler.adddecodeinfo(string("error decoding ")+uutypetoa(uul->uudet)+" "+uul->filename+": " + UUstrerror(r)); continue; } else if (pre_decode_derr!=uustatus.derr){ printf("decode(%s): %i derr(s)\n",uul->filename,uustatus.derr-pre_decode_derr); texthandler.adddecodeinfo(string("error decoding ")+uutypetoa(uul->uudet)+" "+uul->filename+": " + tostr(uustatus.derr-pre_decode_derr) + "derr(s)"); continue; }else{ texthandler.adddecodeinfo(string(uutypetoa(uul->uudet))+" "+uul->filename); if (!(optionflags&GETFILES_NODUPEFILECHECK)) flist.addfile(fr->path, uul->filename); //#### is this the right place? what about dupes saved as different names?? switch (uul->uudet){ case YENC_ENCODED:set_yenc_ok_status();break; case UU_ENCODED:set_uu_ok_status();break; case B64ENCODED:set_base64_ok_status();break; case XX_ENCODED:set_xx_ok_status();break; case BH_ENCODED:set_binhex_ok_status();break; case PT_ENCODED:set_plaintext_ok_status();break; case QP_ENCODED:set_qp_ok_status();break; default:set_unknown_ok_status(); } } } UUCleanUp(); //handle posts that uulib says "no encoded data" for as text. (usually is posts with no body) if (uustatus.derr==1 && uustatus.last_t==UUMSG_NOTE && un==0 && f->req<=0 && fnbuf.size()==1) { uustatus.derr--; //HACK since this error will also cause a uu_note "No encoded data found", which will incr derr, but we don't want that. texthandler.set_save_whole_tempfile(true);//sometimes uulib will get confused and think a text post is an incomplete binary and will say "no encoded data" for it, so tell the texthandler to save the body of the message, if there is one. un++; } if (uustatus.derr==0) texthandler.save(); if (uustatus.derr>0) { set_decode_error_status(); printf(" %i decoding errors occured, keeping temp files.\n",uustatus.derr); } else if (un==0) { uustatus.derr=1; set_undecoded_warn_status(); printf("hm.. nothing decoded.. keeping temp files\n"); } else { assert(uustatus.derr==0); set_total_ok_status(); if (optionflags&GETFILES_KEEPTEMP) { if (quiet<2) printf("decoded ok, keeping temp files.\n"); } else { if (quiet<2) printf("decoded ok, deleting temp files.\n"); delete_tempfiles(); } } return uustatus.derr; } void Decoder::delete_tempfiles(void) { for(t_fnbuf_list::iterator fncurb = fnbuf.begin();fncurb!=fnbuf.end();++fncurb) unlink((*fncurb).second); } Decoder::~Decoder() { for(t_fnbuf_list::iterator fncurb = fnbuf.begin();fncurb!=fnbuf.end();++fncurb) free((*fncurb).second); } nget-0.27.1/dupe_file.cc0000644000175000017500000000525010056212765015313 0ustar donutdonut00000000000000/* dupe_file.* - dupe file detection code Copyright (C) 1999-2003 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "dupe_file.h" #include "log.h" #include "path.h" #include #include #include #include #include void dupe_file_checker::add(const char *filename, ulong size){ file_match *fm; string buf; if (isalnum(filename[0])) //only add word boundry match if we are actually next to a word, or else there isn't a word boundry to match at all. buf+=regex_match_word_beginning(); regex_escape_string(filename, buf); if (isalnum(buf[buf.size()-1])) buf+=regex_match_word_end(); fm=new file_match(buf.c_str(),REG_EXTENDED|REG_ICASE|REG_NOSUB,size); flist.insert(filematchmap::value_type(fm->size, fm)); } void dupe_file_checker::addfile(const string &path, const char *filename) { ulong size=0; struct stat stbuf; if (stat(path_join(path,filename).c_str(), &stbuf)==0) size=stbuf.st_size; add(filename, size); } void dupe_file_checker::addfrompath(const string &path){ DIR *dir=opendir(path.c_str()); struct dirent *de; if (!dir) throw PathExFatal(Ex_INIT,"opendir: %s(%i)",strerror(errno),errno); while ((de=readdir(dir))) { if (strcmp(de->d_name,"..")==0) continue; if (strcmp(de->d_name,".")==0) continue; addfile(path, de->d_name); } closedir(dir); } int dupe_file_checker::checkhavefile(const char *f, const string &messageid, ulong bytes) const { filematchmap::const_iterator curl = flist.upper_bound(bytes/2); //find first fm with size*2 > bytes file_match *fm; for (;curl!=flist.end() && curl->firstsecond; if ((fm->reg.match(f)==0/* || fm->reg.match((messageid+".txt").c_str())==0*/)){//TODO: handle text files saved. PMSG("already have %s",f); return 1; } } return 0; } void dupe_file_checker::clear(void){ filematchmap::iterator curl; for (curl=flist.begin();curl!=flist.end();++curl) delete curl->second; flist.clear(); } nget-0.27.1/format-TODO0000644000175000017500000001473707537073135015046 0ustar donutdonut00000000000000wishlist of things to add to nget: - less verbose reporting modes: all standard information, but no percentage counters (to include statistics) ability to put logging/statistics information to stdout or stderr, and percentage counters to the other - make --text=mbox filename configurable (relative(to -p) and absolute) - verbosity levels: (<- superceded below) * 0: print nothing * 1: print group, directory, and regexp, one per line, for every regexp in the options. * 2: as 1, but also print one line - format lines: have one for each possible action along the way (mostly). Command line or .ngetrc file. For now: -g, -G, -p, -P, -r, -R, -d * then two for every article downloaded (pre and post), two for each article decoded (pre and post), and * one auto-update line for interactive update information. * newlines are not automatic, "\n" will need to be explicit * each status line will use the same nested format style and replacement characters as follows: %[][&][!][][. ...][{[:s/// ...]}] ie: "%p" might substitute the path, "%<-20r" might left-justify the regex used in a field of 20 characters, chopping extra characters if the width is exceeded. (some codes, such as header size, will not apply to every format line) %p current d/l path %P current temp path %r current regex or expression %g current groupalias %G current groupname %d download flags set %T whether testmode is set %t current time %i number of bytes downloaded for this regexp/expression so far %I total expected for this -r/-R %j # bytes so far for this path %J total expected for this -p %k total number of bytes downloaded this session %K expected total number of bytes to download %% literal "%" character, unless is specified, in which case of those are inserted. (per-article codes) %B size of article in bytes %l number of lines in article %a author %s subject %n part number %N maximum part number %D date and time %z article number %h{
} the specified header (ie, from, subject, etc.) (interactive and post-download codes) - includes per-article codes %R download rate %b number of bytes downloaded %e time elapsed %E estimated (total) time until completion (ie, # of seconds) %x transfer start time %X estimated (actual) time of completion location codes: < left justify | center justify = outer justify (if the code specifies a field with 2 segments, segments are split > right justify chop code: - truncates line on the right if it is too long for the fieldwidth. Preserves column integrity. without it, no truncation will occur. Or the system could be implemented with a heirarchy of specifiers. %[][&][!][][. ...][{[:s/// ...]}] ie: "%p" might substitute the path, "%<-20r" might left-justify the regex used in a field of 20 characters, chopping extra characters if the width is exceeded. Top hierarchy letter codes: p[cdt] paths: c.urrent, d.ownload, t.emp R current regexp or expression g groupaliases G group spec (dotted) c.Tif? : conditional: T.est code enabled, i.n midfile do check, f.ile exists do check s[].-=afrptsl file/stream/string size (in unit blocks: characters, Kb, etc.) r[[/]].afrptsl transfer (d/l) rate (uc: average, lc: current snapshot) l[].afrptsl lines so far (lowercase) or total expected (uppercase) for s type sub specifiers n.pP number: current p.art, total P.arts d.ca date/time specification: c.urrent, a.article t.afrptsl time duration: same sub-specs as for s h.aispdAISPD header shortcut extractors (uppercase: entire line, lower: header word + ":" excluded): a.uthor, article i.d, s.ubject, p.ath, d.ate of post, etc... {} header line extraction code // header match extraction code (any match from within header will trigger inclusion) is a trackable unit, separated with . for current, = for total, and - for remaining a.rticle f.ile r.egexp same downloaded files combined p.ath same t.emp path same s.ession same l.og same is one of: unspecified (sized to fit field width, but will append abbrev. unit as specified below) b: bits B: bytes k: 1000 bytes K: kilobytes (1024) m: 10^6 M: 2^20 (mega) g: 10^9 G: 2^30 (giga) t: 10^12 T: 2^40 (tera) (some codes, such as header size, will not apply to every format spec) %p.c current base path (where nget was initiated from) %p.d current d/l path %p.t current temp path %R current regex or expression %g current groupalias %G current groupname %c.T?: whether testmode is set %c.f?: download flag f set %c.i?: download flag i set %d.c current date/time %d.u date of current group update %s.r total number of bytes downloaded for this regexp/expression so far %s.R total expected for this -r/-R %s.p # bytes so far for this path %s.P total expected for this -p %s.s total number of bytes downloaded this session %s.S expected total number of bytes to download %% literal "%" character, unless is specified, in which case of those are inserted. (per-article codes) %s.A (expected) size of article in bytes %l.A (expected) number of lines in article %h.a author %h.s subject %h.i message id %h.p post path %{
} the specified header (ie, from, subject, etc.) %n.p part number %n.P maximum part number %n.o [x/X] part display (part x of X total) %n.a article number %d.p date and time of article postage (interactive and post-download codes) - includes per-article codes %r.t (pseudo-)current transfer rate %r.T average transfer rate %s.a total number of bytes downloaded so far %l.a number of lines downloaded so far %t.a time elapsed %t.A estimated (total) time until completion (ie, # of seconds) %d.p transfer start time %d.P estimated (actual) time of completion location codes: < left justify | center justify = outer justify (if the code specifies a field with 2 segments, segments are split > right justify chop codes: - truncates line on the right if it is too long for the fieldwidth. Preserves column integrity. without it, no truncation will occur. On two segment fields, truncates at division * chops an extra character to insert a * to show truncation. . chops 3 extra characters to insert a ... if to long. + inserts width worth of + if line to long, fortran style. Not recommended nget-0.27.1/_subconf.h0000644000175000017500000000476010064377154015027 0ustar donutdonut00000000000000/* get rid of stupid undefined errors for (v)asprintf */ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif /* If we're not using GNU C, elide __attribute__ */ #ifndef __GNUC__ # define __attribute__(x) /*NOTHING*/ #endif #ifndef HAVE_LIBZ #undef CHECKSUM #endif #include #define GETOPT_ARGV_T (char * const *) #ifdef POPT_CONST_ARGV #define POPT_NAME_T #define POPT_ARGV_T #define POPT_ARGV_p_T #else #define POPT_NAME_T (char *) #define POPT_ARGV_T (char **) #define POPT_ARGV_p_T (char ***) #endif /*#ifdef CHECKSUM #define CACHE_USE_CHECKSUM #else #undef SHORT_TEMPNAMES #endif*/ #ifdef __cplusplus using namespace std; #endif #ifdef HAVE_INTTYPES_H # ifndef __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS # endif # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS # endif # include #elif HAVE_STDINT_H # include #endif #ifndef HAVE_INT_FAST64_T # undef SIZEOF_INT_FAST64_T # ifdef HAVE_LONG_LONG # define SIZEOF_INT_FAST64_T SIZEOF_LONG_LONG # define int_fast64_t long long # define uint_fast64_t unsigned long long # else //well, they may not be 64 bits but at least it should still work. # define SIZEOF_INT_FAST64_T SIZEOF_LONG # define int_fast64_t long # define uint_fast64_t unsigned long # endif #endif #ifndef PRIuFAST64 # ifdef HAVE_LONG_LONG # define PRIuFAST64 "llu" # else # define PRIuFAST64 "lu" # endif #endif #ifndef HAVE_INT32_T # define int32_t int #endif #ifndef HAVE_UINT32_T # define uint32_t unsigned int #endif #ifndef HAVE_INT64_T # define int64_t int_fast64_t #endif #ifndef HAVE_UINT64_T # define uint64_t uint_fast64_t # if (SIZEOF_INT_FAST64_T!=8) # error "my uint64_t isn't 8 bytes." # endif #endif #ifndef HAVE_INTPTR_T typedef int intptr_t; #endif #ifndef HAVE_UINTPTR_T typedef unsigned int uintptr_t; #endif #define SWAP16(type) ((((type) >> 8) & 0x00ff) | \ (((type) << 8) & 0xff00)) #define SWAP32(type) ((((type) >>24) & 0x000000ff) | \ (((type) >> 8) & 0x0000ff00) | \ (((type) << 8) & 0x00ff0000) | \ (((type) <<24) & 0xff000000)) #define SWAP64(type) ((((type) >>56) & 0x00000000000000ff) | \ (((type) >>40) & 0x000000000000ff00) | \ (((type) >>24) & 0x0000000000ff0000) | \ (((type) >> 8) & 0x00000000ff000000) | \ (((type) << 8) & UINT64_C(0x000000ff00000000)) | \ (((type) <<24) & UINT64_C(0x0000ff0000000000)) | \ (((type) <<40) & UINT64_C(0x00ff000000000000)) | \ (((type) <<56) & UINT64_C(0xff00000000000000))) #ifdef WIN32 #define sleep(x) _sleep(x*1000) #endif nget-0.27.1/knapsack.cc0000644000175000017500000000567610056212765015166 0ustar donutdonut00000000000000/* knapsack.* - 0-1 knapsack algorithm, and variants Copyright (C) 2003 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "knapsack.h" #include #include int knapsack(const vector &values, const vector &sizes, int target_size, set &result) { assert(result.empty()); assert(values.size() == sizes.size()); int *V = new int[target_size+1]; vector *best = new vector[target_size+1]; int i,j; const int n = values.size(); for (i=0; i<=target_size; ++i){ V[i]=0; } for (i=0; i=sizes[i]; --j) { int othersol = V[j - sizes[i]] + values[i]; if (othersol > V[j]) { V[j] = othersol; best[j].push_back(i); } } } const int result_value = V[target_size]; #ifndef NDEBUG i=0; #endif j = target_size; int last = INT_MAX; while (j>0) { vector::reverse_iterator bi, bend=best[j].rend(); for (bi=best[j].rbegin(); bi!=bend; ++bi) { // At the point in time when a value is entered into the best array, // it is valid only for it and the preceeding values that have been // calculated. So if we have used the result of a value X, then any // further results we use can only be from values before X. if (*bi= 0);//== assert(sum([sizes[i] for i in result]) <= target_size) assert(i == result_value); delete[] V; delete[] best; return result_value; } // In order to find the minimum size with at least target_value, we // find the max size in the values we _don't_ want, then invert // the result. int knapsack_minsize(const vector &values, const vector &sizes, int target_value, set &result) { const int sum_values = accumulate(values.begin(), values.end(), 0); const int sum_sizes = accumulate(sizes.begin(), sizes.end(), 0); const int targetprime = sum_values - target_value; set resultprime; int result_sizeprime = 0; if (targetprime>=0) { result_sizeprime = knapsack(sizes, values, targetprime, resultprime); } for (unsigned int i=0; i 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "strtoker.h" #include // threadsafe. char * goodstrtok(char **cur, char sep){ char * tmp, *old; if (!*cur) return NULL; old=*cur; if ((tmp=strchr(*cur,sep))==NULL){ *cur=NULL; return old; } tmp[0]=0; *cur=tmp+1; return old; } strtoker::strtoker(int num,char tok){ toks=new char*[num]; maxtoks=num; numtoks=0; tokchar=tok; } int strtoker::tok(char *str){ for (numtoks=0;numtoks 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef AUTO_VECTOR_H__ #define AUTO_VECTOR_H__ #include "rcount.h" #include template class auto_vector : public std::vector > { private: typedef std::vector > super; public: typedef typename super::iterator iterator; void push_back(T* v) {super::push_back(restricted_ptr(v));} void clear(void){ delete_all(); super::clear(); } void pop_back(void) { delete this->back().gimmethepointer(); super::pop_back(); } iterator erase(iterator i){ delete (*i).gimmethepointer(); return super::erase(i); } auto_vector(void){} ~auto_vector() { delete_all(); } private: void delete_all(void) { for (iterator i=this->begin(); i!=this->end(); ++i) delete (*i).gimmethepointer(); } void insert(void); //private insert func to hide std::vector's insert members auto_vector(const auto_vector &v); //private copy constructor to disallow copying auto_vector& operator= (const auto_vector &v); //private operator= to disallow assignment }; #endif nget-0.27.1/autogen.sh0000775000175000017500000000040707422067107015053 0ustar donutdonut00000000000000#!/bin/sh # Does everything needed to get a fresh cvs checkout to compilable state. set -e echo "running autoconf" autoconf echo "running autoheader" autoheader echo "running ./configure --enable-maintainer-mode" "$@" ./configure --enable-maintainer-mode "$@" nget-0.27.1/file.cc0000644000175000017500000001530410056212765014277 0ustar donutdonut00000000000000/* file.* - file io classes Copyright (C) 1999-2004 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "file.h" #include #include #include #include #include #include "sockstuff.h" #include "strreps.h" #include "path.h" void xxrename(const char *oldpath, const char *newpath) { #ifdef WIN32 //On windows rename will not replace an existing file, so check first and remove it. if (fexists(newpath)) { if (unlink(newpath)) throw FileEx(Ex_INIT, "rename: unlink %s: %s(%i)\n",newpath,strerror(errno),errno); } #endif if (rename(oldpath, newpath)) throw FileEx(Ex_INIT, "rename %s > %s: %s(%i)\n",oldpath,newpath,strerror(errno),errno); } void copyfile(c_file *of, c_file *nf) { char buf[4096]; int len; while ((len=of->read(buf, 4096)) != 0) nf->write(buf, len); } int c_file_buffy::bfill(uchar *b,int l){ return fileptr->read(b,l); } c_file::c_file(const char *fname): m_name(fname){ rbuffer=NULL; } c_file::~c_file(){ // close();//cant call it here, since doclose is already gone delete rbuffer; } ssize_t c_file::vputf(const char *buf, va_list ap){ char *fpbuf; int i,l; l=vasprintf(&fpbuf,buf,ap); try { i=write(fpbuf,l); } catch (...) { free(fpbuf); throw; } free(fpbuf); return i; } ssize_t c_file::putf(const char *data,...){ va_list ap; va_start(ap,data); ssize_t r=vputf(data, ap); va_end(ap); return r; } ssize_t c_file::read(void *data,size_t len){ ssize_t i=doread(data,len); if (i<0) throw FileEx(Ex_INIT,"read %s (%s)", name(), dostrerror()); return i; } void c_file::readfull(void *data,size_t len){ size_t cur=0; ssize_t i; while (cur < len) { i=doread((char*)data+cur, len-cur); if (i<0) throw FileEx(Ex_INIT,"readfull %s (%s)", name(), dostrerror()); else if (i==0) throw FileEx(Ex_INIT,"readfull %s: unexpected EOF", name()); cur += i; } assert(cur == len); } ssize_t c_file::write(const void *data,size_t len){ size_t sent=0; ssize_t i; while (sent < len) { i=dowrite((char*)data+sent, len-sent); if (i <= 0) throw FileEx(Ex_INIT,"write %s: %i!=%i (%s)", name(), sent, len, dostrerror()); sent += i; } assert(sent == len); return sent; } void c_file::flush(int local){ // int i=0; //###########3 dowrite(buffers..) if (!local) { int r=doflush(); if (r != 0) throw FileEx(Ex_INIT,"flush %s: %i (%s)", name(), r, dostrerror()); } } void c_file::close(void){ if (isopen()){ flush(1); if (doclose() != 0) throw FileEx(Ex_INIT,"close %s (%s)", name(), dostrerror()); } if (rbuffer)rbuffer->clearbuf(); } int c_file::close_noEx(void){ try { close(); return 0; } catch (FileEx &e) { return -1; } } void c_file::initrbuf(void){ if (!rbuffer){ rbuffer=new c_file_buffy(this); } }; c_file_fd::c_file_fd(int dfd, const char *name):c_file(name){ fd=::dup(dfd); if (fd<0) throw FileEx(Ex_INIT,"dup %s(%i) (%s)", name, dfd, strerror(errno)); } c_file_fd::c_file_fd(const char *name,int flags, int mode):c_file(name){ fd=::open(name,flags,mode); if (fd<0) THROW_OPEN_ERROR("open %s (%s)", name, strerror(errno)); //throw FileEx(Ex_INIT,"open %s (%s)", name, strerror(errno)); } int fopen2open(const char *mode){ int m = 0; switch(mode[0]) { case 'r': m = strchr(mode,'+')?O_RDWR:O_RDONLY; break; case 'w': m = (strchr(mode,'+')?O_RDWR:O_WRONLY) | O_CREAT | O_TRUNC; break; case 'a': m = (strchr(mode,'+')?O_RDWR:O_WRONLY) | O_CREAT | O_APPEND; break; default:assert(0); } if (strchr(mode,'b')) m |= O_BINARY; return m; } c_file_fd::c_file_fd(const char *name,const char *mode):c_file(name){ int flags=fopen2open(mode); fd=::open(name,flags,PUBMODE); if (fd<0) THROW_OPEN_ERROR("open %s (%s)", name, strerror(errno)); } const char *c_file_fd::dostrerror(void) { return strerror(errno); } int c_file_fd::doflush(void){ #ifdef HAVE_FSYNC if (fd>=0) return fsync(fd); #endif return 0; } int c_file_fd::doclose(void){ int i=0; i=::close(fd); fd=-1; return i; } int c_file_fd::isopen(void)const{ return (fd>=0); } ssize_t c_file_fd::dowrite(const void *data,size_t len){ return ::write(fd,(char*)data,len); } ssize_t c_file_fd::doread(void *data,size_t len){ return ::read(fd,data,len); } int c_file_fd::seek(int offset, int whence){ int r = lseek(fd, offset, whence); if (r<0) throw FileEx(Ex_INIT,"seek %s: %s", name(), dostrerror()); return r; } #ifdef USE_FILE_STREAM int c_file_stream::c_file_stream(const char *name,const char * mode):c_file(name){ if (!(fs=fopen(name,mode))) THROW_OPEN_ERROR("fopen %s (%s)", name, strerror(errno)); } const char c_file_stream::*dostrerror(void) { return strerror(errno); } int c_file_stream::doflush(void){ if (fs) return fflush(fs); return 0; } int c_file_stream::doclose(void){ int i=0; i=fclose(fs); fs=NULL; return i; } int c_file_stream::isopen(void)const{ return (fs!=0); } ssize_t c_file_stream::dowrite(const void *data,size_t len){ return fwrite(data,1,len,fs); } ssize_t c_file_stream::doread(void *data,size_t len){ return fread(data,1,len,fs); } #endif c_file_tcp::c_file_tcp(const char *host,const char * port):c_file(host){ if (m_name.find(':')<0){//this isn't quite right with ipv6 addrs, but its only for error messages so who cares ;) m_name+=':'; m_name+=port; } try { sock=make_connection(host,port); } catch (FileEx &e) { throw FileEx(Ex_INIT,"open %s (%s)", name(), e.getExStr()); } } const char *c_file_tcp::dostrerror(void) { return sock_strerror(sock_errno); } int c_file_tcp::doflush(void){ #ifdef HAVE_FSYNC if (sock_isvalid(sock)) return fsync(sock); #endif return 0; } int c_file_tcp::doclose(void){ int i=0; i=sock_close(sock); sock=SOCK_INVALID; return i; } int c_file_tcp::isopen(void)const{ return sock_isvalid(sock); } ssize_t c_file_tcp::dowrite(const void *data,size_t len){ //don't need to use sock_write_ensured since c_file::write handles the looping. return sock_write(sock,(char*)data, len); } ssize_t c_file_tcp::doread(void *data,size_t len){ return sock_read(sock,data,len); } bool c_file_tcp::datawaiting(void) const { return sock_datawaiting(sock); } nget-0.27.1/etree.h0000644000175000017500000000320410056212770014316 0ustar donutdonut00000000000000/* etree.* - handles expression trees.. Allows to create a predicate that can then be tested against many objects (of the same ClassType) to see if they match the expression. Copyright (C) 1999,2001-2002 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _ETREE_H_ #define _ETREE_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "argparser.h" template struct pred { virtual bool operator()(const ClassType*) const=0; virtual ~pred(){} }; class c_nntp_file; typedef pred nntp_file_pred; nntp_file_pred * make_nntpfile_pred(const char *optarg, int gflags); nntp_file_pred * make_nntpfile_pred(const arglist_t &e_parts, int gflags); class c_group_availability; typedef pred nntp_grouplist_pred; nntp_grouplist_pred * make_grouplist_pred(const char *optarg, int gflags); nntp_grouplist_pred * make_grouplist_pred(const arglist_t &e_parts, int gflags); #endif nget-0.27.1/misc.cc0000644000175000017500000003061010056212765014310 0ustar donutdonut00000000000000/* misc.* - misc functions Copyright (C) 1999-2004 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "misc.h" #include "strreps.h" #include "log.h" #include "file.h" #include "path.h" #include #include #include #include "myregex.h" #include "_sstream.h" #include const char hexchar[] = "0123456789abcdef"; string hexstr(const string &s){ string ret; for (string::const_iterator i=s.begin(); i!=s.end(); ++i) { uchar c=*i; ret += hexchar[c>>4]; ret += hexchar[c&15]; } return ret; } void parsestr_valcheck(const string &val, bool is_signed) { if (val.empty()) throw parse_error("empty val"); if (!is_signed && val.find('-')!=string::npos) throw parse_error("invalid unsigned value"); } void parsestr_isscheck(istringstream &iss) { if (iss.fail() || iss.bad()) throw parse_error("invalid value"); if (!iss.eof() && iss.peek()!=EOF) throw parse_error("trailing junk"); } string strtolower(const string &s){ string sl = s; lowerstr(sl); return sl; } void lowerstr(string &s){ for (string::iterator i=s.begin(); i!=s.end(); ++i) *i=tolower(*i); } bool strstartswith(const string &s, const string &t) { return s.substr(0,t.size()) == t; } string regex2wildmat(const string &repat, bool ignorecase){ if (repat.empty()) return "*"; string wildmat; unsigned int pos=0; if (repat[0]=='^') pos++; else wildmat += '*'; //wildmats are anchored by default, while regexs are the opposite while (pos=repat.size()) throw RegexEx(Ex_INIT,"error converting regex(%s) to wildmat on char %i: %c", repat.c_str(), pos, c); char nc = repat[pos]; if (nc == '*' || nc == '?' || nc == '[' || nc == ']') { wildmat += c; wildmat += nc; ++pos; } else if (nc == '(' || nc == ')' || nc == '{' || nc == '}' || nc == '|' || nc == '.') { wildmat += nc; ++pos; } else if (nc == '<' || nc == '>' || isalnum(nc)) throw RegexEx(Ex_INIT,"error converting regex(%s) to wildmat on char %i: %c", repat.c_str(), pos, c); else { wildmat += nc; ++pos; } } else if (c == '?' || c == '*' || c == '+' || c == '(' || c == ')' || c == '{' || c == '}' || c == '|') throw RegexEx(Ex_INIT,"error converting regex(%s) to wildmat on char %i: %c", repat.c_str(), pos, c); else if (pos==repat.size() && c == '$') break;//wildmats are anchored by default, while regexs are the opposite else if (ignorecase && isalpha(c)) { wildmat += '['; wildmat += tolower(c); wildmat += toupper(c); wildmat += ']'; } else if (c == '[') { wildmat += '['; int nc = -1; unsigned int opos=pos; while (pos%s\n",repat.c_str(),wildmat.c_str());//###### return wildmat; } #ifndef HAVE_TIMEGM time_t timegm (const struct tm *gmtimein) { /* The timegm manpage suggests a strategy of setting the TZ env var to "" * and then running tzset(), mktime() and then resetting the TZ var to its * previous value, but unfortunatly it doesn't seem to work on all arches. * So rather than try to figure out when it does we'll use this routine * by Yitzchak Scott-Thoennes that should work on all arches. * (found at http://ais.gmd.de/~veit/os2/mailinglist3/0863.html) */ struct tm tm; time_t t, t2; tm = *gmtimein; /* make a local copy to fiddle with */ tm.tm_isdst = 0; /* treat it as standard time */ t2 = t = mktime(&tm); /* calculate the time as a local time */ tm = *gmtime(&t2); /* now calculate the difference between */ tm.tm_isdst = 0; /* gm and local time */ t2 = mktime(&tm); t += t - t2; /* and adjust our answer by that difference */ return t; } #endif size_t tconv(char * timestr, int max, time_t *curtime,const char * formatstr, int local) { // static char timestr[80]; struct tm *time_now; if (local) time_now = localtime(curtime); else time_now = gmtime(curtime); return strftime(timestr,max,formatstr,time_now); // return timestr; } char *text_month[13]={"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; int decode_textmonth(const char * buf){ for (int i=0;i<12;i++){ if (!strncasecmp(text_month[i],buf,3)) return i; } return -1; } int decode_texttz(const char * buf){ int i=0; if (*buf=='-' || *buf=='+'){ i=atoi(buf+1); i=((i/100)*60+(i%100))*60; if (*buf=='-') return -i; } return i; } //Tue, 25 May 1999 06:23:23 GMT //21 Jun 99 01:58:12 //Last-modified: Friday, 13-Nov-98 20:41:28 GMT //012345678901234567890123456789 //Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 //23 May 1999 22:46:41 GMT ; no textual day //25 May 99 01:01:48 +0100 ; 2 digit year //21 Jun 99 01:58:12 ; no timezone //Mon, 24 May 99 11:53:47 GMT ; 2 digit year //3 Jun 1999 12:35:14 -0500 ; non padded day. blah. //Tue, 1 Jun 1999 20:36:29 +0100 ; blah again //Sun, 23 May 1999 19:34:35 -0500 ; ack, timezone //12 July 1999 01:23:05 GMT // full length month //Sun, 15 Aug 1999 19:56 +0100 (BST) // no seconds //Sun, 7 Jul 2002 15:6:5 GMT //1 digit minutes, seconds //Tue, 07 Aug 2002 0:21:00 GMT //1 digit hour with space pad //Sun, 8 Sep 2002 0:19:2 GMT //1 digit hour, no pad //Sunday, // 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 //Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format (note, this is used by ls -l --full-time) //Jan 4 17:11 ;ls -l format, 17:11 may be replaced by " 1998" //easy format 06/11/94[ 23:34[:23][ -300]] //c_regex rfc1123("^[A-Za-z, ]*([0-9]{1,2}) (...) ([0-9]{2,4}) ([0-9]{1,2}):([0-9]{2}):([0-9]{2}) (.*)$"), // rfc850("^[A-Za-z, ]*([0-9]{1,2})-(...)-([0-9]{2,4}) ([0-9]{1,2}):([0-9]{2}):([0-9]{2}) (.*)$"), //#define TIME_REG "([0-9]{1,2}):([0-9]{2}):([0-9]{2})" //allows for optional seconds #define TIME_REG2 "([0-9 ]?[0-9]):([0-9]{1,2})(:([0-9]{1,2}))?" c_regex_r xrfc("^[A-Za-z, ]*([0-9]{1,2})[- ](.{3,9})[- ]([0-9]{2,4}) "TIME_REG2" *(.*)$"), xasctime("^[A-Za-z,]* *(...) +([0-9]{1,2}) "TIME_REG2" ([0-9]{2,4}) *(.*)$"), xlsl("^(...) +([0-9]{1,2}) +([0-9:]{4,5})$"), xeasy("^([0-9]{1,4})[-/]([0-9]{1,2})[-/]([0-9]{2,4})( *"TIME_REG2" *(.*))?$"), xiso("^([0-9]{4})-?([0-9]{2})-?([0-9]{2})([T ]?([0-9]{1,2})(:?([0-9]{2})(:?([0-9]{2}))?)?)? *([-+A-Z].*)?$"); c_regex_nosub xtime_t("^[0-9]+$")//seconds since 1970 (always gmt) ; time_t decode_textdate(const char * cbuf, bool local){ struct tm tblock; memset(&tblock,0,sizeof(struct tm)); char *tdt=NULL; int td_tz=local?0x7FFFFFFF:0; int yearlen=0; c_regex_subs rsubs; if (!xrfc.match(cbuf,&rsubs)){ tdt="xrfc*-date"; tblock.tm_mday=atoi(rsubs.subs(1)); tblock.tm_mon=decode_textmonth(rsubs.subs(2)); tblock.tm_year=atoi(rsubs.subs(3)); yearlen=rsubs.sublen(3); tblock.tm_hour=atoi(rsubs.subs(4)); tblock.tm_min=atoi(rsubs.subs(5)); if(rsubs.sublen(6)>0) tblock.tm_sec=atoi(rsubs.subs(7)); if(rsubs.sublen(8)>0) td_tz=decode_texttz(rsubs.subs(8)); }else if (!xiso.match(cbuf,&rsubs)){ tdt="iso"; yearlen=rsubs.sublen(1); tblock.tm_year=atoi(rsubs.subs(1)); tblock.tm_mon=atoi(rsubs.subs(2))-1; tblock.tm_mday=atoi(rsubs.subs(3)); if(rsubs.sublen(4)>0){ tblock.tm_hour=atoi(rsubs.subs(5)); if(rsubs.sublen(6)>0){ tblock.tm_min=atoi(rsubs.subs(7)); if(rsubs.sublen(8)>0){ tblock.tm_sec=atoi(rsubs.subs(9)); } } } if(rsubs.sublen(10)>0) td_tz=decode_texttz(rsubs.subs(10)); }else if (!xasctime.match(cbuf,&rsubs)){ tdt="asctime-date"; tblock.tm_mon=decode_textmonth(rsubs.subs(1)); tblock.tm_mday=atoi(rsubs.subs(2)); tblock.tm_hour=atoi(rsubs.subs(3)); tblock.tm_min=atoi(rsubs.subs(4)); if(rsubs.sublen(5)>0) tblock.tm_sec=atoi(rsubs.subs(6)); tblock.tm_year=atoi(rsubs.subs(7)); yearlen=rsubs.sublen(7); }else if (!xlsl.match(cbuf,&rsubs)){ tdt="ls-l-date"; tblock.tm_mon=decode_textmonth(rsubs.subs(1)); tblock.tm_mday=atoi(rsubs.subs(2)); if (rsubs.subs(3)[2]==':'){ time_t curtime; time(&curtime); struct tm *lt = localtime(&curtime); tblock.tm_hour=atoi(rsubs.subs(3)); tblock.tm_min=atoi(rsubs.subs(3)+3); if (lt->tm_mon>=tblock.tm_mon) tblock.tm_year=lt->tm_year; else tblock.tm_year=lt->tm_year-1; }else{ yearlen=rsubs.sublen(3); tblock.tm_year=atoi(rsubs.subs(3)); } }else if (!xeasy.match(cbuf,&rsubs)){ tdt="easy-date"; int a=atoi(rsubs.subs(1)),b=atoi(rsubs.subs(2)),c=atoi(rsubs.subs(3)); if((rsubs.sublen(1)>2 || a>12 || a<=0) && (b>=1 && b<=12 && c>=1 && c<=31)){ //year/mon/day format... tblock.tm_mon=b-1; tblock.tm_mday=c; tblock.tm_year=a; yearlen=rsubs.sublen(1); }else{ //mon/day/year format... tblock.tm_mon=a-1; tblock.tm_mday=b; tblock.tm_year=c; yearlen=rsubs.sublen(3); } if(rsubs.sublen(4)>0){ tblock.tm_hour=atoi(rsubs.subs(5)); tblock.tm_min=atoi(rsubs.subs(6)); if(rsubs.sublen(7)>0){ tblock.tm_sec=atoi(rsubs.subs(8)); } if(rsubs.sublen(9)>0) td_tz=decode_texttz(rsubs.subs(9)); } }else if (!xtime_t.match(cbuf)){ tdt="time_t-date"; return atol(cbuf); } if(yearlen>=4) tblock.tm_year-=1900; else if(yearlen==2 && tblock.tm_year<70) tblock.tm_year+=100;//assume anything before (19)70 is 20xx if(!tdt){ PERROR("decode_textdate: unknown %s",cbuf); return 0; }else PDEBUG(DEBUG_ALL,"decode_textdate: %s %i %i %i %i %i %i %i",tdt,tblock.tm_year,tblock.tm_mon,tblock.tm_mday,tblock.tm_hour,tblock.tm_min,tblock.tm_sec,td_tz); if (local && td_tz==0x7FFFFFFF){//if local=1 and time string didn't contain a timezone, just use mktime directly. tblock.tm_isdst = -1; return mktime(&tblock); }else return timegm(&tblock)-td_tz; } c_regex_r xduration("^ *([0-9]+ *ye?a?r?s?)? *([0-9]+ *mon?t?h?s?)? *([0-9]+ *we?e?k?s?)? *([0-9]+ *da?y?s?)? *([0-9]+ *ho?u?r?s?)? *([0-9]+ *mi?n?u?t?e?s?)? *([0-9]+ *se?c?o?n?d?s?)? *$", REG_ICASE|REG_EXTENDED); time_t decode_textage(const char *cbuf) { time_t now=time(NULL); struct tm tblock = *localtime(&now); c_regex_subs rsubs; if (!xduration.match(cbuf,&rsubs)){ // if(rsubs.sublen(1)>0) // age+=atol(rsubs.subs(1))*31556952; //365.2425*24*60*60 if(rsubs.sublen(1)>0) tblock.tm_year-=atol(rsubs.subs(1)); if(rsubs.sublen(2)>0) tblock.tm_mon-=atol(rsubs.subs(2)); if(rsubs.sublen(3)>0) tblock.tm_mday-=atol(rsubs.subs(3))*7; if(rsubs.sublen(4)>0) tblock.tm_mday-=atol(rsubs.subs(4)); if(rsubs.sublen(5)>0) tblock.tm_hour-=atol(rsubs.subs(5)); if(rsubs.sublen(6)>0) tblock.tm_min-=atol(rsubs.subs(6)); if(rsubs.sublen(7)>0) tblock.tm_sec-=atol(rsubs.subs(7)); }else { PERROR("decode_textage: unknown %s",cbuf); return 0; } //return now - mktime(&tblock); return mktime(&tblock); } int filecompare(const char *old_fn,const char *nfn){ off_t old_size, new_size; if (!fsize(old_fn,&old_size) && !fsize(nfn, &new_size) && old_size!=new_size) return 0; c_file_fd old_f(old_fn, O_RDONLY|O_BINARY); c_file_fd new_f(nfn, O_RDONLY|O_BINARY); char old_buf[4096], new_buf[4096]; int old_len, new_len; // read and compare the files while(1){ old_len=old_f.read(old_buf, 4096); new_len=new_f.read(new_buf, 4096); if (old_len == new_len){ if (old_len == 0){ return 1; } if (memcmp(old_buf, new_buf, old_len)){ return 0; } } else { return 0; } } } nget-0.27.1/etree.cc0000644000175000017500000002554610056212765014475 0ustar donutdonut00000000000000/* etree.* - handles expression trees.. Copyright (C) 1999,2001-2004 Matthew Mueller 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "etree.h" #include "cache.h" #include "grouplist.h" #include "myregex.h" #include "misc.h" #include "nget.h" #include "strreps.h" #include "getter.h" #include #define MAKE_BINARY_OP(name,op) template \ struct Op_ ## name { \ bool operator()(const T v1,const T2 v2) const {return v1 op v2;} \ }; MAKE_BINARY_OP(gt,>); MAKE_BINARY_OP(ge,>=); MAKE_BINARY_OP(lt,<); MAKE_BINARY_OP(le,<=); MAKE_BINARY_OP(eq,==); MAKE_BINARY_OP(ne,!=); //use real operators here (rather than a predComparison with Op template) to take advantage of short-circuit evaluation. template class predAnd : public pred { private: pred *p1, *p2; public: predAnd(pred *n1, pred *n2):p1(n1), p2(n2) { } virtual ~predAnd() {delete p1; delete p2;} virtual bool operator()(ClassType* f) const { return (*p1)(f) && (*p2)(f); } }; template class predOr : public pred { private: pred *p1, *p2; public: predOr(pred *n1, pred *n2):p1(n1), p2(n2) { } virtual ~predOr() {delete p1; delete p2;} virtual bool operator()(ClassType* f) const { return (*p1)(f) || (*p2)(f); } }; template