From b748bf5dc8f2cd645e1209fdcbae7ecaf7e921b9 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Tue, 13 May 2014 23:22:49 +0000 Subject: [PATCH 01/81] [FAST486] Fix a BOP-related stack corruption. CORE-8199 #resolve #comment Fixed in revision r63286. svn path=/trunk/; revision=63286 --- reactos/include/reactos/libs/fast486/fast486.h | 3 ++- reactos/lib/fast486/fast486.c | 5 +++++ reactos/lib/fast486/opcodes.c | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/reactos/include/reactos/libs/fast486/fast486.h b/reactos/include/reactos/libs/fast486/fast486.h index 339ecb6a77e..5fa729159fb 100644 --- a/reactos/include/reactos/libs/fast486/fast486.h +++ b/reactos/include/reactos/libs/fast486/fast486.h @@ -159,7 +159,8 @@ typedef enum _FAST486_INT_STATUS { FAST486_INT_NONE = 0, FAST486_INT_EXECUTE = 1, - FAST486_INT_SIGNAL = 2 + FAST486_INT_SIGNAL = 2, + FAST486_INT_DELAYED = 3 } FAST486_INT_STATUS, *PFAST486_INT_STATUS; typedef diff --git a/reactos/lib/fast486/fast486.c b/reactos/lib/fast486/fast486.c index c47814bb526..1c35d8feb17 100644 --- a/reactos/lib/fast486/fast486.c +++ b/reactos/lib/fast486/fast486.c @@ -121,6 +121,11 @@ Fast486ExecutionControl(PFAST486_STATE State, FAST486_EXEC_CMD Command) /* Set the interrupt status to execute on the next instruction */ State->IntStatus = FAST486_INT_EXECUTE; } + else if (State->IntStatus == FAST486_INT_DELAYED) + { + /* Restore the old state */ + State->IntStatus = FAST486_INT_EXECUTE; + } } while ((Command == FAST486_CONTINUE) || (Command == FAST486_STEP_OVER && ProcedureCallCount > 0) diff --git a/reactos/lib/fast486/opcodes.c b/reactos/lib/fast486/opcodes.c index 3dffdaacc18..1a8f1260484 100644 --- a/reactos/lib/fast486/opcodes.c +++ b/reactos/lib/fast486/opcodes.c @@ -4397,6 +4397,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes) /* Call the BOP handler */ State->BopCallback(State, BopCode); + /* + * If an interrupt should occur at this time, delay it. + * We must do this because if an interrupt begins and the BOP callback + * changes the CS:IP, the interrupt handler won't execute and the + * stack pointer will never be restored. + */ + if (State->IntStatus == FAST486_INT_EXECUTE) + { + State->IntStatus = FAST486_INT_DELAYED; + } + /* Return success */ return TRUE; } From a2e7e58fcc7a20fab60d84c17f2e41ad7d7a1026 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Wed, 14 May 2014 02:35:26 +0000 Subject: [PATCH 02/81] [NTVDM] The value of USER_MEMORY_SIZE depends on FIRST_MCB_SEGMENT. svn path=/trunk/; revision=63287 --- reactos/subsystems/ntvdm/dos/dos32krnl/dos.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h index f3e9140fec3..6fe399e33dc 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h @@ -27,7 +27,7 @@ #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT" #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT" #define FIRST_MCB_SEGMENT 0x1000 -#define USER_MEMORY_SIZE 0x8FFE +#define USER_MEMORY_SIZE (0x9FFE - FIRST_MCB_SEGMENT) #define SYSTEM_PSP 0x08 #define SYSTEM_ENV_BLOCK 0x800 From 3284022bfc270986e4805aa4b347d033f1535634 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Wed, 14 May 2014 03:29:58 +0000 Subject: [PATCH 03/81] [NTVDM] Implement INT 21h function AH = 67h (Set Handle Count). svn path=/trunk/; revision=63288 --- reactos/subsystems/ntvdm/dos/dos32krnl/dos.c | 94 ++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c index 6ce7e3faf76..8a03448bfc2 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c @@ -584,6 +584,87 @@ static VOID DosCopyHandleTable(LPBYTE DestinationTable) } } +static BOOLEAN DosResizeHandleTable(WORD NewSize) +{ + PDOS_PSP PspBlock; + LPBYTE HandleTable; + WORD Segment; + + /* Get the PSP block */ + PspBlock = SEGMENT_TO_PSP(CurrentPsp); + + if (NewSize == PspBlock->HandleTableSize) + { + /* No change */ + return TRUE; + } + + if (PspBlock->HandleTableSize > 20) + { + /* Get the segment of the current table */ + Segment = (LOWORD(PspBlock->HandleTablePtr) >> 4) + HIWORD(PspBlock->HandleTablePtr); + + if (NewSize <= 20) + { + /* Get the current handle table */ + HandleTable = FAR_POINTER(PspBlock->HandleTablePtr); + + /* Copy it to the PSP */ + RtlCopyMemory(PspBlock->HandleTable, HandleTable, NewSize); + + /* Free the memory */ + DosFreeMemory(Segment); + + /* Update the handle table pointer and size */ + PspBlock->HandleTableSize = NewSize; + PspBlock->HandleTablePtr = MAKELONG(0x18, CurrentPsp); + } + else + { + /* Resize the memory */ + if (!DosResizeMemory(Segment, NewSize, NULL)) + { + /* Unable to resize, try allocating it somewhere else */ + Segment = DosAllocateMemory(NewSize, NULL); + if (Segment == 0) return FALSE; + + /* Get the new handle table */ + HandleTable = SEG_OFF_TO_PTR(Segment, 0); + + /* Copy the handles to the new table */ + RtlCopyMemory(HandleTable, + FAR_POINTER(PspBlock->HandleTablePtr), + PspBlock->HandleTableSize); + + /* Update the handle table pointer */ + PspBlock->HandleTablePtr = MAKELONG(0, Segment); + } + + /* Update the handle table size */ + PspBlock->HandleTableSize = NewSize; + } + } + else if (NewSize > 20) + { + Segment = DosAllocateMemory(NewSize, NULL); + if (Segment == 0) return FALSE; + + /* Get the new handle table */ + HandleTable = SEG_OFF_TO_PTR(Segment, 0); + + /* Copy the handles from the PSP to the new table */ + RtlCopyMemory(HandleTable, + FAR_POINTER(PspBlock->HandleTablePtr), + PspBlock->HandleTableSize); + + /* Update the handle table pointer and size */ + PspBlock->HandleTableSize = NewSize; + PspBlock->HandleTablePtr = MAKELONG(0, Segment); + } + + return TRUE; +} + static BOOLEAN DosCloseHandle(WORD DosHandle) { BYTE SftIndex; @@ -2433,6 +2514,19 @@ VOID WINAPI DosInt21h(LPWORD Stack) break; } + /* Set Handle Count */ + case 0x67: + { + if (!DosResizeHandleTable(getBX())) + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(DosLastError); + } + else Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + + break; + } + /* Unsupported */ default: { From b697a1d7ea81f4b3ae24e0b16c4a376a293be91f Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 May 2014 11:03:21 +0000 Subject: [PATCH 04/81] [CRT] * Update msvcrt_{init,free}_io(). CORE-8080 svn path=/trunk/; revision=63289 --- reactos/lib/sdk/crt/stdio/file.c | 94 +++++++++++++++----------------- 1 file changed, 43 insertions(+), 51 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index 9573a3e439b..7c95116a01d 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -156,6 +156,13 @@ static int tmpnam_unique; * protection, rather than locking the whole table for every change. */ static CRITICAL_SECTION file_cs; +static CRITICAL_SECTION_DEBUG file_cs_debug = +{ + 0, 0, &file_cs, + { &file_cs_debug.ProcessLocksList, &file_cs_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": file_cs") } +}; +static CRITICAL_SECTION file_cs = { &file_cs_debug, -1, 0, 0, 0, 0 }; #define LOCK_FILES() do { EnterCriticalSection(&file_cs); } while (0) #define UNLOCK_FILES() do { LeaveCriticalSection(&file_cs); } while (0) @@ -429,8 +436,6 @@ void msvcrt_init_io(void) unsigned int i; ioinfo *fdinfo; - InitializeCriticalSection(&file_cs); - file_cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": file_cs"); GetStartupInfoA(&si); if (si.cbReserved2 >= sizeof(unsigned int) && si.lpReserved2 != NULL) { @@ -456,53 +461,36 @@ void msvcrt_init_io(void) if (get_ioinfo(fdstart)->handle == INVALID_HANDLE_VALUE) break; } - if(!__pioinfo[0]) - set_fd(INVALID_HANDLE_VALUE, 0, 3); + fdinfo = get_ioinfo(STDIN_FILENO); + if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE) { + HANDLE h = GetStdHandle(STD_INPUT_HANDLE); + DWORD type = GetFileType(h); - fdinfo = get_ioinfo(0); - if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE) - { - HANDLE std = GetStdHandle(STD_INPUT_HANDLE); -#ifndef __REACTOS__ - if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std, - GetCurrentProcess(), &fdinfo->handle, - 0, TRUE, DUPLICATE_SAME_ACCESS)) -#else - fdinfo->handle = std; -#endif - fdinfo->wxflag = WX_OPEN | WX_TEXT; + set_fd(h, WX_OPEN|WX_TEXT|((type&0xf)==FILE_TYPE_CHAR ? WX_NOSEEK : 0) + |((type&0xf)==FILE_TYPE_PIPE ? WX_PIPE : 0), STDIN_FILENO); } - fdinfo = get_ioinfo(1); - if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE) - { - HANDLE std = GetStdHandle(STD_OUTPUT_HANDLE); -#ifndef __REACTOS__ - if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std, - GetCurrentProcess(), &fdinfo->handle, - 0, TRUE, DUPLICATE_SAME_ACCESS)) -#else - fdinfo->handle = std; -#endif - fdinfo->wxflag = WX_OPEN | WX_TEXT; + fdinfo = get_ioinfo(STDOUT_FILENO); + if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE) { + HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD type = GetFileType(h); + + set_fd(h, WX_OPEN|WX_TEXT|((type&0xf)==FILE_TYPE_CHAR ? WX_NOSEEK : 0) + |((type&0xf)==FILE_TYPE_PIPE ? WX_PIPE : 0), STDOUT_FILENO); } - fdinfo = get_ioinfo(2); - if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE) - { - HANDLE std = GetStdHandle(STD_ERROR_HANDLE); -#ifndef __REACTOS__ - if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std, - GetCurrentProcess(), &fdinfo->handle, - 0, TRUE, DUPLICATE_SAME_ACCESS)) -#else - fdinfo->handle = std; -#endif - fdinfo->wxflag = WX_OPEN | WX_TEXT; + fdinfo = get_ioinfo(STDERR_FILENO); + if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE) { + HANDLE h = GetStdHandle(STD_ERROR_HANDLE); + DWORD type = GetFileType(h); + + set_fd(h, WX_OPEN|WX_TEXT|((type&0xf)==FILE_TYPE_CHAR ? WX_NOSEEK : 0) + |((type&0xf)==FILE_TYPE_PIPE ? WX_PIPE : 0), STDERR_FILENO); } - TRACE(":handles (%p)(%p)(%p)\n", get_ioinfo(0)->handle, - get_ioinfo(1)->handle, get_ioinfo(2)->handle); + TRACE(":handles (%p)(%p)(%p)\n", get_ioinfo(STDIN_FILENO)->handle, + get_ioinfo(STDOUT_FILENO)->handle, + get_ioinfo(STDERR_FILENO)->handle); memset(_iob,0,3*sizeof(FILE)); for (i = 0; i < 3; i++) @@ -1012,24 +1000,28 @@ int CDECL _fcloseall(void) /* free everything on process exit */ void msvcrt_free_io(void) { - int i; + unsigned int i; + int j; + _flushall(); _fcloseall(); - /* The Win32 _fcloseall() function explicitly doesn't close stdin, - * stdout, and stderr (unlike GNU), so we need to fclose() them here - * or they won't get flushed. - */ - fclose(&_iob[0]); - fclose(&_iob[1]); - fclose(&_iob[2]); for(i=0; i=_iob+_IOB_ENTRIES) + { + ((file_crit*)file)->crit.DebugInfo->Spare[0] = 0; + DeleteCriticalSection(&((file_crit*)file)->crit); + } + } + for(i=0; iSpare[0] = 0; DeleteCriticalSection(&file_cs); } From 41b9a3a5560692719f394960111d4ba7343ea838 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 May 2014 14:35:13 +0000 Subject: [PATCH 05/81] [CRT] * Update read_i(). * Fixes some msvcrt tests. CORE-8080 svn path=/trunk/; revision=63290 --- reactos/lib/sdk/crt/stdio/file.c | 356 ++++++++++++++++++++++++++----- 1 file changed, 305 insertions(+), 51 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index 7c95116a01d..12f20d02410 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -2066,6 +2066,190 @@ int CDECL _rmtmp(void) return num_removed; } +static inline int get_utf8_char_len(char ch) +{ + if((ch&0xf8) == 0xf0) + return 4; + else if((ch&0xf0) == 0xe0) + return 3; + else if((ch&0xe0) == 0xc0) + return 2; + return 1; +} + +/********************************************************************* + * (internal) read_utf8 + */ +static int read_utf8(int fd, wchar_t *buf, unsigned int count) +{ + ioinfo *fdinfo = get_ioinfo(fd); + HANDLE hand = fdinfo->handle; + char min_buf[4], *readbuf, lookahead; + DWORD readbuf_size, pos=0, num_read=1, char_len, i, j; + + /* make the buffer big enough to hold at least one character */ + /* read bytes have to fit to output and lookahead buffers */ + count /= 2; + readbuf_size = count < 4 ? 4 : count; + if(readbuf_size<=4 || !(readbuf = malloc(readbuf_size))) { + readbuf_size = 4; + readbuf = min_buf; + } + + if(fdinfo->lookahead[0] != '\n') { + readbuf[pos++] = fdinfo->lookahead[0]; + fdinfo->lookahead[0] = '\n'; + + if(fdinfo->lookahead[1] != '\n') { + readbuf[pos++] = fdinfo->lookahead[1]; + fdinfo->lookahead[1] = '\n'; + + if(fdinfo->lookahead[2] != '\n') { + readbuf[pos++] = fdinfo->lookahead[2]; + fdinfo->lookahead[2] = '\n'; + } + } + } + + /* NOTE: this case is broken in native dll, reading + * sometimes fails when small buffer is passed + */ + if(count < 4) { + if(!pos && !ReadFile(hand, readbuf, 1, &num_read, NULL)) { + if (GetLastError() == ERROR_BROKEN_PIPE) { + fdinfo->wxflag |= WX_ATEOF; + return 0; + }else { + _dosmaperr(GetLastError()); + return -1; + } + }else if(!num_read) { + fdinfo->wxflag |= WX_ATEOF; + return 0; + }else { + pos++; + } + + char_len = get_utf8_char_len(readbuf[0]); + if(char_len>pos) { + if(ReadFile(hand, readbuf+pos, char_len-pos, &num_read, NULL)) + pos += num_read; + } + + if(readbuf[0] == '\n') + fdinfo->wxflag |= WX_READNL; + else + fdinfo->wxflag &= ~WX_READNL; + + if(readbuf[0] == 0x1a) { + fdinfo->wxflag |= WX_ATEOF; + return 0; + } + + if(readbuf[0] == '\r') { + if(!ReadFile(hand, &lookahead, 1, &num_read, NULL) || num_read!=1) + buf[0] = '\r'; + else if(lookahead == '\n') + buf[0] = '\n'; + else { + buf[0] = '\r'; + if(fdinfo->wxflag & (WX_PIPE | WX_NOSEEK)) + fdinfo->lookahead[0] = lookahead; + else + SetFilePointer(fdinfo->handle, -1, NULL, FILE_CURRENT); + } + return 2; + } + + if(!(num_read = MultiByteToWideChar(CP_UTF8, 0, readbuf, pos, buf, count))) { + _dosmaperr(GetLastError()); + return -1; + } + + return num_read*2; + } + + if(!ReadFile(hand, readbuf+pos, readbuf_size-pos, &num_read, NULL)) { + if(pos) { + num_read = 0; + }else if(GetLastError() == ERROR_BROKEN_PIPE) { + fdinfo->wxflag |= WX_ATEOF; + if (readbuf != min_buf) free(readbuf); + return 0; + }else { + _dosmaperr(GetLastError()); + if (readbuf != min_buf) free(readbuf); + return -1; + } + }else if(!pos && !num_read) { + fdinfo->wxflag |= WX_ATEOF; + if (readbuf != min_buf) free(readbuf); + return 0; + } + + pos += num_read; + if(readbuf[0] == '\n') + fdinfo->wxflag |= WX_READNL; + else + fdinfo->wxflag &= ~WX_READNL; + + /* Find first byte of last character (may be incomplete) */ + for(i=pos-1; i>0 && i>pos-4; i--) + if((readbuf[i]&0xc0) != 0x80) + break; + char_len = get_utf8_char_len(readbuf[i]); + if(char_len+i <= pos) + i += char_len; + + if(fdinfo->wxflag & (WX_PIPE | WX_NOSEEK)) { + if(i < pos) + fdinfo->lookahead[0] = readbuf[i]; + if(i+1 < pos) + fdinfo->lookahead[1] = readbuf[i+1]; + if(i+2 < pos) + fdinfo->lookahead[2] = readbuf[i+2]; + }else if(i < pos) { + SetFilePointer(fdinfo->handle, i-pos, NULL, FILE_CURRENT); + } + pos = i; + + for(i=0, j=0; iwxflag |= WX_ATEOF; + break; + } + + /* strip '\r' if followed by '\n' */ + if(readbuf[i] == '\r' && i+1==pos) { + if(fdinfo->lookahead[0] != '\n' || !ReadFile(hand, &lookahead, 1, &num_read, NULL) || !num_read) { + readbuf[j++] = '\r'; + }else if(lookahead == '\n' && j==0) { + readbuf[j++] = '\n'; + }else { + if(lookahead != '\n') + readbuf[j++] = '\r'; + + if(fdinfo->wxflag & (WX_PIPE | WX_NOSEEK)) + fdinfo->lookahead[0] = lookahead; + else + SetFilePointer(fdinfo->handle, -1, NULL, FILE_CURRENT); + } + }else if(readbuf[i]!='\r' || readbuf[i+1]!='\n') { + readbuf[j++] = readbuf[i]; + } + } + pos = j; + + if(!(num_read = MultiByteToWideChar(CP_UTF8, 0, readbuf, pos, buf, count))) { + _dosmaperr(GetLastError()); + if (readbuf != min_buf) free(readbuf); + return -1; + } + + if (readbuf != min_buf) free(readbuf); + return num_read*2; +} + /********************************************************************* * (internal) read_i * @@ -2075,69 +2259,139 @@ int CDECL _rmtmp(void) */ static int read_i(int fd, void *buf, unsigned int count) { - DWORD num_read; - char *bufstart = buf; - HANDLE hand = fdtoh(fd); - ioinfo *fdinfo = get_ioinfo(fd); + DWORD num_read, utf16; + char *bufstart = buf; + HANDLE hand = fdtoh(fd); + ioinfo *fdinfo = get_ioinfo(fd); - if (count == 0) - return 0; + if (count == 0) + return 0; - if (fdinfo->wxflag & WX_READEOF) { - fdinfo->wxflag |= WX_ATEOF; - TRACE("already at EOF, returning 0\n"); - return 0; - } - /* Don't trace small reads, it gets *very* annoying */ - if (count > 4) - TRACE(":fd (%d) handle (%p) buf (%p) len (%d)\n",fd,hand,buf,count); - if (hand == INVALID_HANDLE_VALUE) - return -1; - - /* Reading single bytes in O_TEXT mode makes things slow - * So read big chunks - */ - if (ReadFile(hand, bufstart, count, &num_read, NULL)) + if (fdinfo->wxflag & WX_ATEOF) { + TRACE("already at EOF, returning 0\n"); + return 0; + } + /* Don't trace small reads, it gets *very* annoying */ + if (count > 4) + TRACE(":fd (%d) handle (%p) buf (%p) len (%d)\n",fd,hand,buf,count); + if (hand == INVALID_HANDLE_VALUE) { + *_errno() = EBADF; + return -1; + } + + utf16 = (fdinfo->exflag & EF_UTF16) != 0; + if (((fdinfo->exflag&EF_UTF8) || utf16) && count&1) + { + *_errno() = EINVAL; + return -1; + } + + if((fdinfo->wxflag&WX_TEXT) && (fdinfo->exflag&EF_UTF8)) + return read_utf8(fd, buf, count); + + if (fdinfo->lookahead[0]!='\n' || ReadFile(hand, bufstart, count, &num_read, NULL)) + { + if (fdinfo->lookahead[0] != '\n') + { + bufstart[0] = fdinfo->lookahead[0]; + fdinfo->lookahead[0] = '\n'; + + if (utf16) + { + bufstart[1] = fdinfo->lookahead[1]; + fdinfo->lookahead[1] = '\n'; + } + + if(count>1+utf16 && ReadFile(hand, bufstart+1+utf16, count-1-utf16, &num_read, NULL)) + num_read += 1+utf16; + else + num_read = 1+utf16; + } + + if(utf16 && (num_read&1)) + { + /* msvcr90 uses uninitialized value from the buffer in this case */ + /* msvcrt ignores additional data */ + ERR("got odd number of bytes in UTF16 mode\n"); + num_read--; + } + if (count != 0 && num_read == 0) { - fdinfo->wxflag |= (WX_ATEOF|WX_READEOF); + fdinfo->wxflag |= WX_ATEOF; TRACE(":EOF %s\n",debugstr_an(buf,num_read)); } else if (fdinfo->wxflag & WX_TEXT) { DWORD i, j; - if (bufstart[num_read-1] == '\r') - { - if(count == 1) - { - fdinfo->wxflag &= ~WX_READCR; - ReadFile(hand, bufstart, 1, &num_read, NULL); - } - else - { - fdinfo->wxflag |= WX_READCR; - num_read--; - } - } - else - fdinfo->wxflag &= ~WX_READCR; - for (i=0, j=0; iwxflag |= WX_READNL; + else + fdinfo->wxflag &= ~WX_READNL; + + for (i=0, j=0; iwxflag |= (WX_ATEOF|WX_READEOF); + fdinfo->wxflag |= WX_ATEOF; TRACE(":^Z EOF %s\n",debugstr_an(buf,num_read)); break; } - /* in text mode, strip \r if followed by \n. - * BUG: should save state across calls somehow, so CR LF that - * straddles buffer boundary gets recognized properly? - */ - if ((bufstart[i] != '\r') - || ((i+1) < num_read && bufstart[i+1] != '\n')) - bufstart[j++] = bufstart[i]; + + /* in text mode, strip \r if followed by \n */ + if (bufstart[i]=='\r' && (!utf16 || bufstart[i+1]==0) && i+1+utf16==num_read) + { + char lookahead[2]; + DWORD len; + + lookahead[1] = '\n'; + if (ReadFile(hand, lookahead, 1+utf16, &len, NULL) && len) + { + if(lookahead[0]=='\n' && (!utf16 || lookahead[1]==0) && j==0) + { + bufstart[j++] = '\n'; + if(utf16) bufstart[j++] = 0; + } + else + { + if(lookahead[0]!='\n' || (utf16 && lookahead[1]!=0)) + { + bufstart[j++] = '\r'; + if(utf16) bufstart[j++] = 0; + } + + if (fdinfo->wxflag & (WX_PIPE | WX_NOSEEK)) + { + if (lookahead[0]=='\n' && (!utf16 || !lookahead[1])) + { + bufstart[j++] = '\n'; + if (utf16) bufstart[j++] = 0; + } + else + { + fdinfo->lookahead[0] = lookahead[0]; + fdinfo->lookahead[1] = lookahead[1]; + } + } + else + SetFilePointer(fdinfo->handle, -1-utf16, NULL, FILE_CURRENT); + } + } + else + { + bufstart[j++] = '\r'; + if(utf16) bufstart[j++] = 0; + } + } + else if((bufstart[i]!='\r' || (utf16 && bufstart[i+1]!=0)) + || (bufstart[i+1+utf16]!='\n' || (utf16 && bufstart[i+3]!=0))) + { + bufstart[j++] = bufstart[i]; + if(utf16) bufstart[j++] = bufstart[i+1]; + } } num_read = j; } @@ -2147,7 +2401,7 @@ static int read_i(int fd, void *buf, unsigned int count) if (GetLastError() == ERROR_BROKEN_PIPE) { TRACE(":end-of-pipe\n"); - fdinfo->wxflag |= (WX_ATEOF|WX_READEOF); + fdinfo->wxflag |= WX_ATEOF; return 0; } else @@ -2157,9 +2411,9 @@ static int read_i(int fd, void *buf, unsigned int count) } } - if (count > 4) - TRACE("(%u), %s\n",num_read,debugstr_an(buf, num_read)); - return num_read; + if (count > 4) + TRACE("(%u), %s\n",num_read,debugstr_an(buf, num_read)); + return num_read; } /********************************************************************* From e5361e27bda4317adb178f8a708f8f2556d935aa Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 May 2014 14:45:08 +0000 Subject: [PATCH 06/81] [CRT] * Update alloc_buffer(). CORE-8080 svn path=/trunk/; revision=63291 --- reactos/lib/sdk/crt/stdio/file.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index 12f20d02410..df9c92127bd 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -533,19 +533,24 @@ int CDECL _isatty(int fd) } /* INTERNAL: Allocate stdio file buffer */ -/*static*/ void alloc_buffer(FILE* file) +/*static*/ BOOL alloc_buffer(FILE* file) { - file->_base = calloc(BUFSIZ,1); - if(file->_base) { - file->_bufsiz = BUFSIZ; - file->_flag |= _IOMYBUF; - } else { - file->_base = (char*)(&file->_charbuf); - /* put here 2 ??? */ - file->_bufsiz = sizeof(file->_charbuf); - } - file->_ptr = file->_base; - file->_cnt = 0; + if((file->_file==STDOUT_FILENO || file->_file==STDERR_FILENO) + && _isatty(file->_file)) + return FALSE; + + file->_base = calloc(BUFSIZ,1); + if(file->_base) { + file->_bufsiz = BUFSIZ; + file->_flag |= _IOMYBUF; + } else { + file->_base = (char*)(&file->_charbuf); + /* put here 2 ??? */ + file->_bufsiz = sizeof(file->_charbuf); + } + file->_ptr = file->_base; + file->_cnt = 0; + return TRUE; } /* INTERNAL: Convert integer to base32 string (0-9a-v), 0 becomes "" */ @@ -2886,7 +2891,7 @@ wint_t CDECL fgetwc(FILE* file) wint_t ret; int ch; - _lock_file(file); + _lock_file(file); if((get_ioinfo(file->_file)->exflag & (EF_UTF8 | EF_UTF16)) || !(get_ioinfo(file->_file)->wxflag & WX_TEXT)) { From 05ef5aeeeddc65a76bb9f3e985d9dead58ade8be Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 May 2014 14:52:00 +0000 Subject: [PATCH 07/81] [CRT] * Update fread(). CORE-8080 svn path=/trunk/; revision=63292 --- reactos/lib/sdk/crt/stdio/file.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index df9c92127bd..ec22bfe570b 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -3293,13 +3293,8 @@ size_t CDECL fread(void *ptr, size_t size, size_t nmemb, FILE* file) while(rcnt>0) { int i; - /* Fill the buffer on small reads. - * TODO: Use a better buffering strategy. - */ - if (!file->_cnt && size*nmemb <= BUFSIZ/2 && !(file->_flag & _IONBF)) { - if (file->_bufsiz == 0) { - alloc_buffer(file); - } + if (!file->_cnt && rcnt_flag & _IONBF) + && (file->_bufsiz != 0 || alloc_buffer(file))) { file->_cnt = _read(file->_file, file->_base, file->_bufsiz); file->_ptr = file->_base; i = ((unsigned int)file->_cnt_cnt : rcnt; @@ -3313,8 +3308,12 @@ size_t CDECL fread(void *ptr, size_t size, size_t nmemb, FILE* file) file->_cnt -= i; file->_ptr += i; } + } else if (rcnt > UINT_MAX) { + i = _read(file->_file, ptr, UINT_MAX); + } else if (rcnt < BUFSIZ) { + i = _read(file->_file, ptr, rcnt); } else { - i = _read(file->_file,ptr, rcnt); + i = _read(file->_file, ptr, rcnt - BUFSIZ/2); } pread += i; rcnt -= i; From 74d68f462410e2f0fea80ed0ebf32a1e2e4e6f29 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 May 2014 14:55:37 +0000 Subject: [PATCH 08/81] [CRT] * Update ungetc(). CORE-8080 svn path=/trunk/; revision=63293 --- reactos/lib/sdk/crt/stdio/file.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index ec22bfe570b..ae6164e94f0 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -3880,13 +3880,19 @@ int CDECL ungetc(int c, FILE * file) return EOF; _lock_file(file); - if(file->_bufsiz == 0) { - alloc_buffer(file); + if(file->_bufsiz == 0 && alloc_buffer(file)) file->_ptr++; - } if(file->_ptr>file->_base) { file->_ptr--; - *file->_ptr=c; + if(file->_flag & _IOSTRG) { + if(*file->_ptr != c) { + file->_ptr++; + _unlock_file(file); + return EOF; + } + }else { + *file->_ptr = c; + } file->_cnt++; clearerr(file); _unlock_file(file); From 721fc08b87ccb7d8322ef6bb032cc9fd40cb164b Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 May 2014 17:05:42 +0000 Subject: [PATCH 09/81] [BZIP2] * Cleanup this folder. svn path=/trunk/; revision=63294 --- reactos/lib/3rdparty/bzip2/Makefile-libbz2_so | 59 - .../bzip2/README.COMPILATION.PROBLEMS | 58 - reactos/lib/3rdparty/bzip2/bzip2.1 | 454 - .../lib/3rdparty/bzip2/bzip2.1.preformatted | 399 - reactos/lib/3rdparty/bzip2/bzip2.txt | 391 - reactos/lib/3rdparty/bzip2/dlltest.dsp | 93 - reactos/lib/3rdparty/bzip2/libbz2.dsp | 130 - reactos/lib/3rdparty/bzip2/makefile.msc | 63 - reactos/lib/3rdparty/bzip2/manual.ps | 72843 ---------------- reactos/lib/3rdparty/bzip2/manual.texi | 2215 - reactos/lib/3rdparty/bzip2/manual_1.html | 47 - reactos/lib/3rdparty/bzip2/manual_2.html | 484 - reactos/lib/3rdparty/bzip2/manual_3.html | 1773 - reactos/lib/3rdparty/bzip2/manual_4.html | 528 - reactos/lib/3rdparty/bzip2/manual_toc.html | 173 - reactos/lib/3rdparty/bzip2/sample1.ref | Bin 98696 -> 0 bytes reactos/lib/3rdparty/bzip2/sample2.ref | Bin 212340 -> 0 bytes reactos/lib/3rdparty/bzip2/sample3.ref | 30007 ------- reactos/lib/3rdparty/bzip2/words0 | 9 - reactos/lib/3rdparty/bzip2/words1 | 4 - reactos/lib/3rdparty/bzip2/words2 | 5 - reactos/lib/3rdparty/bzip2/words3 | 30 - 22 files changed, 109765 deletions(-) delete mode 100644 reactos/lib/3rdparty/bzip2/Makefile-libbz2_so delete mode 100644 reactos/lib/3rdparty/bzip2/README.COMPILATION.PROBLEMS delete mode 100644 reactos/lib/3rdparty/bzip2/bzip2.1 delete mode 100644 reactos/lib/3rdparty/bzip2/bzip2.1.preformatted delete mode 100644 reactos/lib/3rdparty/bzip2/bzip2.txt delete mode 100644 reactos/lib/3rdparty/bzip2/dlltest.dsp delete mode 100644 reactos/lib/3rdparty/bzip2/libbz2.dsp delete mode 100644 reactos/lib/3rdparty/bzip2/makefile.msc delete mode 100644 reactos/lib/3rdparty/bzip2/manual.ps delete mode 100644 reactos/lib/3rdparty/bzip2/manual.texi delete mode 100644 reactos/lib/3rdparty/bzip2/manual_1.html delete mode 100644 reactos/lib/3rdparty/bzip2/manual_2.html delete mode 100644 reactos/lib/3rdparty/bzip2/manual_3.html delete mode 100644 reactos/lib/3rdparty/bzip2/manual_4.html delete mode 100644 reactos/lib/3rdparty/bzip2/manual_toc.html delete mode 100644 reactos/lib/3rdparty/bzip2/sample1.ref delete mode 100644 reactos/lib/3rdparty/bzip2/sample2.ref delete mode 100644 reactos/lib/3rdparty/bzip2/sample3.ref delete mode 100644 reactos/lib/3rdparty/bzip2/words0 delete mode 100644 reactos/lib/3rdparty/bzip2/words1 delete mode 100644 reactos/lib/3rdparty/bzip2/words2 delete mode 100644 reactos/lib/3rdparty/bzip2/words3 diff --git a/reactos/lib/3rdparty/bzip2/Makefile-libbz2_so b/reactos/lib/3rdparty/bzip2/Makefile-libbz2_so deleted file mode 100644 index e58791b3b33..00000000000 --- a/reactos/lib/3rdparty/bzip2/Makefile-libbz2_so +++ /dev/null @@ -1,59 +0,0 @@ - -# This Makefile builds a shared version of the library, -# libbz2.so.1.0.6, with soname libbz2.so.1.0, -# at least on x86-Linux (RedHat 7.2), -# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). -# Please see the README file for some important info -# about building the library like this. - -# ------------------------------------------------------------------ -# This file is part of bzip2/libbzip2, a program and library for -# lossless, block-sorting data compression. -# -# bzip2/libbzip2 version 1.0.6 of 6 September 2010 -# Copyright (C) 1996-2010 Julian Seward -# -# Please read the WARNING, DISCLAIMER and PATENTS sections in the -# README file. -# -# This program is released under the terms of the license contained -# in the file LICENSE. -# ------------------------------------------------------------------ - - -SHELL=/bin/sh -CC=gcc -BIGFILES=-D_FILE_OFFSET_BITS=64 -CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) - -OBJS= blocksort.o \ - huffman.o \ - crctable.o \ - randtable.o \ - compress.o \ - decompress.o \ - bzlib.o - -all: $(OBJS) - $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.6 $(OBJS) - $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.6 - rm -f libbz2.so.1.0 - ln -s libbz2.so.1.0.6 libbz2.so.1.0 - -clean: - rm -f $(OBJS) bzip2.o libbz2.so.1.0.6 libbz2.so.1.0 bzip2-shared - -blocksort.o: blocksort.c - $(CC) $(CFLAGS) -c blocksort.c -huffman.o: huffman.c - $(CC) $(CFLAGS) -c huffman.c -crctable.o: crctable.c - $(CC) $(CFLAGS) -c crctable.c -randtable.o: randtable.c - $(CC) $(CFLAGS) -c randtable.c -compress.o: compress.c - $(CC) $(CFLAGS) -c compress.c -decompress.o: decompress.c - $(CC) $(CFLAGS) -c decompress.c -bzlib.o: bzlib.c - $(CC) $(CFLAGS) -c bzlib.c diff --git a/reactos/lib/3rdparty/bzip2/README.COMPILATION.PROBLEMS b/reactos/lib/3rdparty/bzip2/README.COMPILATION.PROBLEMS deleted file mode 100644 index 667d0d6dfe4..00000000000 --- a/reactos/lib/3rdparty/bzip2/README.COMPILATION.PROBLEMS +++ /dev/null @@ -1,58 +0,0 @@ ------------------------------------------------------------------- -This file is part of bzip2/libbzip2, a program and library for -lossless, block-sorting data compression. - -bzip2/libbzip2 version 1.0.6 of 6 September 2010 -Copyright (C) 1996-2010 Julian Seward - -Please read the WARNING, DISCLAIMER and PATENTS sections in the -README file. - -This program is released under the terms of the license contained -in the file LICENSE. ------------------------------------------------------------------- - -bzip2-1.0.6 should compile without problems on the vast majority of -platforms. Using the supplied Makefile, I've built and tested it -myself for x86-linux and amd64-linux. With makefile.msc, Visual C++ -6.0 and nmake, you can build a native Win32 version too. Large file -support seems to work correctly on at least on amd64-linux. - -When I say "large file" I mean a file of size 2,147,483,648 (2^31) -bytes or above. Many older OSs can't handle files above this size, -but many newer ones can. Large files are pretty huge -- most files -you'll encounter are not Large Files. - -Early versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide variety -of platforms without difficulty, and I hope this version will continue -in that tradition. However, in order to support large files, I've had -to include the define -D_FILE_OFFSET_BITS=64 in the Makefile. This -can cause problems. - -The technique of adding -D_FILE_OFFSET_BITS=64 to get large file -support is, as far as I know, the Recommended Way to get correct large -file support. For more details, see the Large File Support -Specification, published by the Large File Summit, at - - http://ftp.sas.com/standards/large.file - -As a general comment, if you get compilation errors which you think -are related to large file support, try removing the above define from -the Makefile, ie, delete the line - - BIGFILES=-D_FILE_OFFSET_BITS=64 - -from the Makefile, and do 'make clean ; make'. This will give you a -version of bzip2 without large file support, which, for most -applications, is probably not a problem. - -Alternatively, try some of the platform-specific hints listed below. - -You can use the spewG.c program to generate huge files to test bzip2's -large file support, if you are feeling paranoid. Be aware though that -any compilation problems which affect bzip2 will also affect spewG.c, -alas. - -AIX: I have reports that for large file support, you need to specify --D_LARGE_FILES rather than -D_FILE_OFFSET_BITS=64. I have not tested -this myself. diff --git a/reactos/lib/3rdparty/bzip2/bzip2.1 b/reactos/lib/3rdparty/bzip2/bzip2.1 deleted file mode 100644 index ce3a78e6b4f..00000000000 --- a/reactos/lib/3rdparty/bzip2/bzip2.1 +++ /dev/null @@ -1,454 +0,0 @@ -.PU -.TH bzip2 1 -.SH NAME -bzip2, bunzip2 \- a block-sorting file compressor, v1.0.6 -.br -bzcat \- decompresses files to stdout -.br -bzip2recover \- recovers data from damaged bzip2 files - -.SH SYNOPSIS -.ll +8 -.B bzip2 -.RB [ " \-cdfkqstvzVL123456789 " ] -[ -.I "filenames \&..." -] -.ll -8 -.br -.B bunzip2 -.RB [ " \-fkvsVL " ] -[ -.I "filenames \&..." -] -.br -.B bzcat -.RB [ " \-s " ] -[ -.I "filenames \&..." -] -.br -.B bzip2recover -.I "filename" - -.SH DESCRIPTION -.I bzip2 -compresses files using the Burrows-Wheeler block sorting -text compression algorithm, and Huffman coding. Compression is -generally considerably better than that achieved by more conventional -LZ77/LZ78-based compressors, and approaches the performance of the PPM -family of statistical compressors. - -The command-line options are deliberately very similar to -those of -.I GNU gzip, -but they are not identical. - -.I bzip2 -expects a list of file names to accompany the -command-line flags. Each file is replaced by a compressed version of -itself, with the name "original_name.bz2". -Each compressed file -has the same modification date, permissions, and, when possible, -ownership as the corresponding original, so that these properties can -be correctly restored at decompression time. File name handling is -naive in the sense that there is no mechanism for preserving original -file names, permissions, ownerships or dates in filesystems which lack -these concepts, or have serious file name length restrictions, such as -MS-DOS. - -.I bzip2 -and -.I bunzip2 -will by default not overwrite existing -files. If you want this to happen, specify the \-f flag. - -If no file names are specified, -.I bzip2 -compresses from standard -input to standard output. In this case, -.I bzip2 -will decline to -write compressed output to a terminal, as this would be entirely -incomprehensible and therefore pointless. - -.I bunzip2 -(or -.I bzip2 \-d) -decompresses all -specified files. Files which were not created by -.I bzip2 -will be detected and ignored, and a warning issued. -.I bzip2 -attempts to guess the filename for the decompressed file -from that of the compressed file as follows: - - filename.bz2 becomes filename - filename.bz becomes filename - filename.tbz2 becomes filename.tar - filename.tbz becomes filename.tar - anyothername becomes anyothername.out - -If the file does not end in one of the recognised endings, -.I .bz2, -.I .bz, -.I .tbz2 -or -.I .tbz, -.I bzip2 -complains that it cannot -guess the name of the original file, and uses the original name -with -.I .out -appended. - -As with compression, supplying no -filenames causes decompression from -standard input to standard output. - -.I bunzip2 -will correctly decompress a file which is the -concatenation of two or more compressed files. The result is the -concatenation of the corresponding uncompressed files. Integrity -testing (\-t) -of concatenated -compressed files is also supported. - -You can also compress or decompress files to the standard output by -giving the \-c flag. Multiple files may be compressed and -decompressed like this. The resulting outputs are fed sequentially to -stdout. Compression of multiple files -in this manner generates a stream -containing multiple compressed file representations. Such a stream -can be decompressed correctly only by -.I bzip2 -version 0.9.0 or -later. Earlier versions of -.I bzip2 -will stop after decompressing -the first file in the stream. - -.I bzcat -(or -.I bzip2 -dc) -decompresses all specified files to -the standard output. - -.I bzip2 -will read arguments from the environment variables -.I BZIP2 -and -.I BZIP, -in that order, and will process them -before any arguments read from the command line. This gives a -convenient way to supply default arguments. - -Compression is always performed, even if the compressed -file is slightly -larger than the original. Files of less than about one hundred bytes -tend to get larger, since the compression mechanism has a constant -overhead in the region of 50 bytes. Random data (including the output -of most file compressors) is coded at about 8.05 bits per byte, giving -an expansion of around 0.5%. - -As a self-check for your protection, -.I -bzip2 -uses 32-bit CRCs to -make sure that the decompressed version of a file is identical to the -original. This guards against corruption of the compressed data, and -against undetected bugs in -.I bzip2 -(hopefully very unlikely). The -chances of data corruption going undetected is microscopic, about one -chance in four billion for each file processed. Be aware, though, that -the check occurs upon decompression, so it can only tell you that -something is wrong. It can't help you -recover the original uncompressed -data. You can use -.I bzip2recover -to try to recover data from -damaged files. - -Return values: 0 for a normal exit, 1 for environmental problems (file -not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt -compressed file, 3 for an internal consistency error (eg, bug) which -caused -.I bzip2 -to panic. - -.SH OPTIONS -.TP -.B \-c --stdout -Compress or decompress to standard output. -.TP -.B \-d --decompress -Force decompression. -.I bzip2, -.I bunzip2 -and -.I bzcat -are -really the same program, and the decision about what actions to take is -done on the basis of which name is used. This flag overrides that -mechanism, and forces -.I bzip2 -to decompress. -.TP -.B \-z --compress -The complement to \-d: forces compression, regardless of the -invocation name. -.TP -.B \-t --test -Check integrity of the specified file(s), but don't decompress them. -This really performs a trial decompression and throws away the result. -.TP -.B \-f --force -Force overwrite of output files. Normally, -.I bzip2 -will not overwrite -existing output files. Also forces -.I bzip2 -to break hard links -to files, which it otherwise wouldn't do. - -bzip2 normally declines to decompress files which don't have the -correct magic header bytes. If forced (-f), however, it will pass -such files through unmodified. This is how GNU gzip behaves. -.TP -.B \-k --keep -Keep (don't delete) input files during compression -or decompression. -.TP -.B \-s --small -Reduce memory usage, for compression, decompression and testing. Files -are decompressed and tested using a modified algorithm which only -requires 2.5 bytes per block byte. This means any file can be -decompressed in 2300k of memory, albeit at about half the normal speed. - -During compression, \-s selects a block size of 200k, which limits -memory use to around the same figure, at the expense of your compression -ratio. In short, if your machine is low on memory (8 megabytes or -less), use \-s for everything. See MEMORY MANAGEMENT below. -.TP -.B \-q --quiet -Suppress non-essential warning messages. Messages pertaining to -I/O errors and other critical events will not be suppressed. -.TP -.B \-v --verbose -Verbose mode -- show the compression ratio for each file processed. -Further \-v's increase the verbosity level, spewing out lots of -information which is primarily of interest for diagnostic purposes. -.TP -.B \-L --license -V --version -Display the software version, license terms and conditions. -.TP -.B \-1 (or \-\-fast) to \-9 (or \-\-best) -Set the block size to 100 k, 200 k .. 900 k when compressing. Has no -effect when decompressing. See MEMORY MANAGEMENT below. -The \-\-fast and \-\-best aliases are primarily for GNU gzip -compatibility. In particular, \-\-fast doesn't make things -significantly faster. -And \-\-best merely selects the default behaviour. -.TP -.B \-- -Treats all subsequent arguments as file names, even if they start -with a dash. This is so you can handle files with names beginning -with a dash, for example: bzip2 \-- \-myfilename. -.TP -.B \--repetitive-fast --repetitive-best -These flags are redundant in versions 0.9.5 and above. They provided -some coarse control over the behaviour of the sorting algorithm in -earlier versions, which was sometimes useful. 0.9.5 and above have an -improved algorithm which renders these flags irrelevant. - -.SH MEMORY MANAGEMENT -.I bzip2 -compresses large files in blocks. The block size affects -both the compression ratio achieved, and the amount of memory needed for -compression and decompression. The flags \-1 through \-9 -specify the block size to be 100,000 bytes through 900,000 bytes (the -default) respectively. At decompression time, the block size used for -compression is read from the header of the compressed file, and -.I bunzip2 -then allocates itself just enough memory to decompress -the file. Since block sizes are stored in compressed files, it follows -that the flags \-1 to \-9 are irrelevant to and so ignored -during decompression. - -Compression and decompression requirements, -in bytes, can be estimated as: - - Compression: 400k + ( 8 x block size ) - - Decompression: 100k + ( 4 x block size ), or - 100k + ( 2.5 x block size ) - -Larger block sizes give rapidly diminishing marginal returns. Most of -the compression comes from the first two or three hundred k of block -size, a fact worth bearing in mind when using -.I bzip2 -on small machines. -It is also important to appreciate that the decompression memory -requirement is set at compression time by the choice of block size. - -For files compressed with the default 900k block size, -.I bunzip2 -will require about 3700 kbytes to decompress. To support decompression -of any file on a 4 megabyte machine, -.I bunzip2 -has an option to -decompress using approximately half this amount of memory, about 2300 -kbytes. Decompression speed is also halved, so you should use this -option only where necessary. The relevant flag is -s. - -In general, try and use the largest block size memory constraints allow, -since that maximises the compression achieved. Compression and -decompression speed are virtually unaffected by block size. - -Another significant point applies to files which fit in a single block --- that means most files you'd encounter using a large block size. The -amount of real memory touched is proportional to the size of the file, -since the file is smaller than a block. For example, compressing a file -20,000 bytes long with the flag -9 will cause the compressor to -allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 -kbytes of it. Similarly, the decompressor will allocate 3700k but only -touch 100k + 20000 * 4 = 180 kbytes. - -Here is a table which summarises the maximum memory usage for different -block sizes. Also recorded is the total compressed size for 14 files of -the Calgary Text Compression Corpus totalling 3,141,622 bytes. This -column gives some feel for how compression varies with block size. -These figures tend to understate the advantage of larger block sizes for -larger files, since the Corpus is dominated by smaller files. - - Compress Decompress Decompress Corpus - Flag usage usage -s usage Size - - -1 1200k 500k 350k 914704 - -2 2000k 900k 600k 877703 - -3 2800k 1300k 850k 860338 - -4 3600k 1700k 1100k 846899 - -5 4400k 2100k 1350k 845160 - -6 5200k 2500k 1600k 838626 - -7 6100k 2900k 1850k 834096 - -8 6800k 3300k 2100k 828642 - -9 7600k 3700k 2350k 828642 - -.SH RECOVERING DATA FROM DAMAGED FILES -.I bzip2 -compresses files in blocks, usually 900kbytes long. Each -block is handled independently. If a media or transmission error causes -a multi-block .bz2 -file to become damaged, it may be possible to -recover data from the undamaged blocks in the file. - -The compressed representation of each block is delimited by a 48-bit -pattern, which makes it possible to find the block boundaries with -reasonable certainty. Each block also carries its own 32-bit CRC, so -damaged blocks can be distinguished from undamaged ones. - -.I bzip2recover -is a simple program whose purpose is to search for -blocks in .bz2 files, and write each block out into its own .bz2 -file. You can then use -.I bzip2 -\-t -to test the -integrity of the resulting files, and decompress those which are -undamaged. - -.I bzip2recover -takes a single argument, the name of the damaged file, -and writes a number of files "rec00001file.bz2", -"rec00002file.bz2", etc, containing the extracted blocks. -The output filenames are designed so that the use of -wildcards in subsequent processing -- for example, -"bzip2 -dc rec*file.bz2 > recovered_data" -- processes the files in -the correct order. - -.I bzip2recover -should be of most use dealing with large .bz2 -files, as these will contain many blocks. It is clearly -futile to use it on damaged single-block files, since a -damaged block cannot be recovered. If you wish to minimise -any potential data loss through media or transmission errors, -you might consider compressing with a smaller -block size. - -.SH PERFORMANCE NOTES -The sorting phase of compression gathers together similar strings in the -file. Because of this, files containing very long runs of repeated -symbols, like "aabaabaabaab ..." (repeated several hundred times) may -compress more slowly than normal. Versions 0.9.5 and above fare much -better than previous versions in this respect. The ratio between -worst-case and average-case compression time is in the region of 10:1. -For previous versions, this figure was more like 100:1. You can use the -\-vvvv option to monitor progress in great detail, if you want. - -Decompression speed is unaffected by these phenomena. - -.I bzip2 -usually allocates several megabytes of memory to operate -in, and then charges all over it in a fairly random fashion. This means -that performance, both for compressing and decompressing, is largely -determined by the speed at which your machine can service cache misses. -Because of this, small changes to the code to reduce the miss rate have -been observed to give disproportionately large performance improvements. -I imagine -.I bzip2 -will perform best on machines with very large caches. - -.SH CAVEATS -I/O error messages are not as helpful as they could be. -.I bzip2 -tries hard to detect I/O errors and exit cleanly, but the details of -what the problem is sometimes seem rather misleading. - -This manual page pertains to version 1.0.6 of -.I bzip2. -Compressed data created by this version is entirely forwards and -backwards compatible with the previous public releases, versions -0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and above, but with the following -exception: 0.9.0 and above can correctly decompress multiple -concatenated compressed files. 0.1pl2 cannot do this; it will stop -after decompressing just the first file in the stream. - -.I bzip2recover -versions prior to 1.0.2 used 32-bit integers to represent -bit positions in compressed files, so they could not handle compressed -files more than 512 megabytes long. Versions 1.0.2 and above use -64-bit ints on some platforms which support them (GNU supported -targets, and Windows). To establish whether or not bzip2recover was -built with such a limitation, run it without arguments. In any event -you can build yourself an unlimited version if you can recompile it -with MaybeUInt64 set to be an unsigned 64-bit integer. - - - -.SH AUTHOR -Julian Seward, jsewardbzip.org. - -http://www.bzip.org - -The ideas embodied in -.I bzip2 -are due to (at least) the following -people: Michael Burrows and David Wheeler (for the block sorting -transformation), David Wheeler (again, for the Huffman coder), Peter -Fenwick (for the structured coding model in the original -.I bzip, -and many refinements), and Alistair Moffat, Radford Neal and Ian Witten -(for the arithmetic coder in the original -.I bzip). -I am much -indebted for their help, support and advice. See the manual in the -source distribution for pointers to sources of documentation. Christian -von Roques encouraged me to look for faster sorting algorithms, so as to -speed up compression. Bela Lubkin encouraged me to improve the -worst-case compression performance. -Donna Robinson XMLised the documentation. -The bz* scripts are derived from those of GNU gzip. -Many people sent patches, helped -with portability problems, lent machines, gave advice and were generally -helpful. diff --git a/reactos/lib/3rdparty/bzip2/bzip2.1.preformatted b/reactos/lib/3rdparty/bzip2/bzip2.1.preformatted deleted file mode 100644 index 63c33be99e7..00000000000 --- a/reactos/lib/3rdparty/bzip2/bzip2.1.preformatted +++ /dev/null @@ -1,399 +0,0 @@ -bzip2(1) bzip2(1) - - - -NNAAMMEE - bzip2, bunzip2 − a block‐sorting file compressor, v1.0.6 - bzcat − decompresses files to stdout - bzip2recover − recovers data from damaged bzip2 files - - -SSYYNNOOPPSSIISS - bbzziipp22 [ −−ccddffkkqqssttvvzzVVLL112233445566778899 ] [ _f_i_l_e_n_a_m_e_s _._._. ] - bbuunnzziipp22 [ −−ffkkvvssVVLL ] [ _f_i_l_e_n_a_m_e_s _._._. ] - bbzzccaatt [ −−ss ] [ _f_i_l_e_n_a_m_e_s _._._. ] - bbzziipp22rreeccoovveerr _f_i_l_e_n_a_m_e - - -DDEESSCCRRIIPPTTIIOONN - _b_z_i_p_2 compresses files using the Burrows‐Wheeler block - sorting text compression algorithm, and Huffman coding. - Compression is generally considerably better than that - achieved by more conventional LZ77/LZ78‐based compressors, - and approaches the performance of the PPM family of sta­ - tistical compressors. - - The command‐line options are deliberately very similar to - those of _G_N_U _g_z_i_p_, but they are not identical. - - _b_z_i_p_2 expects a list of file names to accompany the com­ - mand‐line flags. Each file is replaced by a compressed - version of itself, with the name "original_name.bz2". - Each compressed file has the same modification date, per­ - missions, and, when possible, ownership as the correspond­ - ing original, so that these properties can be correctly - restored at decompression time. File name handling is - naive in the sense that there is no mechanism for preserv­ - ing original file names, permissions, ownerships or dates - in filesystems which lack these concepts, or have serious - file name length restrictions, such as MS‐DOS. - - _b_z_i_p_2 and _b_u_n_z_i_p_2 will by default not overwrite existing - files. If you want this to happen, specify the −f flag. - - If no file names are specified, _b_z_i_p_2 compresses from - standard input to standard output. In this case, _b_z_i_p_2 - will decline to write compressed output to a terminal, as - this would be entirely incomprehensible and therefore - pointless. - - _b_u_n_z_i_p_2 (or _b_z_i_p_2 _−_d_) decompresses all specified files. - Files which were not created by _b_z_i_p_2 will be detected and - ignored, and a warning issued. _b_z_i_p_2 attempts to guess - the filename for the decompressed file from that of the - compressed file as follows: - - filename.bz2 becomes filename - filename.bz becomes filename - filename.tbz2 becomes filename.tar - filename.tbz becomes filename.tar - anyothername becomes anyothername.out - - If the file does not end in one of the recognised endings, - _._b_z_2_, _._b_z_, _._t_b_z_2 or _._t_b_z_, _b_z_i_p_2 complains that it cannot - guess the name of the original file, and uses the original - name with _._o_u_t appended. - - As with compression, supplying no filenames causes decom­ - pression from standard input to standard output. - - _b_u_n_z_i_p_2 will correctly decompress a file which is the con­ - catenation of two or more compressed files. The result is - the concatenation of the corresponding uncompressed files. - Integrity testing (−t) of concatenated compressed files is - also supported. - - You can also compress or decompress files to the standard - output by giving the −c flag. Multiple files may be com­ - pressed and decompressed like this. The resulting outputs - are fed sequentially to stdout. Compression of multiple - files in this manner generates a stream containing multi­ - ple compressed file representations. Such a stream can be - decompressed correctly only by _b_z_i_p_2 version 0.9.0 or - later. Earlier versions of _b_z_i_p_2 will stop after decom­ - pressing the first file in the stream. - - _b_z_c_a_t (or _b_z_i_p_2 _‐_d_c_) decompresses all specified files to - the standard output. - - _b_z_i_p_2 will read arguments from the environment variables - _B_Z_I_P_2 and _B_Z_I_P_, in that order, and will process them - before any arguments read from the command line. This - gives a convenient way to supply default arguments. - - Compression is always performed, even if the compressed - file is slightly larger than the original. Files of less - than about one hundred bytes tend to get larger, since the - compression mechanism has a constant overhead in the - region of 50 bytes. Random data (including the output of - most file compressors) is coded at about 8.05 bits per - byte, giving an expansion of around 0.5%. - - As a self‐check for your protection, _b_z_i_p_2 uses 32‐bit - CRCs to make sure that the decompressed version of a file - is identical to the original. This guards against corrup­ - tion of the compressed data, and against undetected bugs - in _b_z_i_p_2 (hopefully very unlikely). The chances of data - corruption going undetected is microscopic, about one - chance in four billion for each file processed. Be aware, - though, that the check occurs upon decompression, so it - can only tell you that something is wrong. It can’t help - you recover the original uncompressed data. You can use - _b_z_i_p_2_r_e_c_o_v_e_r to try to recover data from damaged files. - - Return values: 0 for a normal exit, 1 for environmental - problems (file not found, invalid flags, I/O errors, &c), - 2 to indicate a corrupt compressed file, 3 for an internal - consistency error (eg, bug) which caused _b_z_i_p_2 to panic. - - -OOPPTTIIOONNSS - −−cc ‐‐‐‐ssttddoouutt - Compress or decompress to standard output. - - −−dd ‐‐‐‐ddeeccoommpprreessss - Force decompression. _b_z_i_p_2_, _b_u_n_z_i_p_2 and _b_z_c_a_t are - really the same program, and the decision about - what actions to take is done on the basis of which - name is used. This flag overrides that mechanism, - and forces _b_z_i_p_2 to decompress. - - −−zz ‐‐‐‐ccoommpprreessss - The complement to −d: forces compression, - regardless of the invocation name. - - −−tt ‐‐‐‐tteesstt - Check integrity of the specified file(s), but don’t - decompress them. This really performs a trial - decompression and throws away the result. - - −−ff ‐‐‐‐ffoorrccee - Force overwrite of output files. Normally, _b_z_i_p_2 - will not overwrite existing output files. Also - forces _b_z_i_p_2 to break hard links to files, which it - otherwise wouldn’t do. - - bzip2 normally declines to decompress files which - don’t have the correct magic header bytes. If - forced (‐f), however, it will pass such files - through unmodified. This is how GNU gzip behaves. - - −−kk ‐‐‐‐kkeeeepp - Keep (don’t delete) input files during compression - or decompression. - - −−ss ‐‐‐‐ssmmaallll - Reduce memory usage, for compression, decompression - and testing. Files are decompressed and tested - using a modified algorithm which only requires 2.5 - bytes per block byte. This means any file can be - decompressed in 2300k of memory, albeit at about - half the normal speed. - - During compression, −s selects a block size of - 200k, which limits memory use to around the same - figure, at the expense of your compression ratio. - In short, if your machine is low on memory (8 - megabytes or less), use −s for everything. See - MEMORY MANAGEMENT below. - - −−qq ‐‐‐‐qquuiieett - Suppress non‐essential warning messages. Messages - pertaining to I/O errors and other critical events - will not be suppressed. - - −−vv ‐‐‐‐vveerrbboossee - Verbose mode ‐‐ show the compression ratio for each - file processed. Further −v’s increase the ver­ - bosity level, spewing out lots of information which - is primarily of interest for diagnostic purposes. - - −−LL ‐‐‐‐lliicceennssee ‐‐VV ‐‐‐‐vveerrssiioonn - Display the software version, license terms and - conditions. - - −−11 ((oorr −−−−ffaasstt)) ttoo −−99 ((oorr −−−−bbeesstt)) - Set the block size to 100 k, 200 k .. 900 k when - compressing. Has no effect when decompressing. - See MEMORY MANAGEMENT below. The −−fast and −−best - aliases are primarily for GNU gzip compatibility. - In particular, −−fast doesn’t make things signifi­ - cantly faster. And −−best merely selects the - default behaviour. - - −−‐‐ Treats all subsequent arguments as file names, even - if they start with a dash. This is so you can han­ - dle files with names beginning with a dash, for - example: bzip2 −‐ −myfilename. - - −−‐‐rreeppeettiittiivvee‐‐ffaasstt ‐‐‐‐rreeppeettiittiivvee‐‐bbeesstt - These flags are redundant in versions 0.9.5 and - above. They provided some coarse control over the - behaviour of the sorting algorithm in earlier ver­ - sions, which was sometimes useful. 0.9.5 and above - have an improved algorithm which renders these - flags irrelevant. - - -MMEEMMOORRYY MMAANNAAGGEEMMEENNTT - _b_z_i_p_2 compresses large files in blocks. The block size - affects both the compression ratio achieved, and the - amount of memory needed for compression and decompression. - The flags −1 through −9 specify the block size to be - 100,000 bytes through 900,000 bytes (the default) respec­ - tively. At decompression time, the block size used for - compression is read from the header of the compressed - file, and _b_u_n_z_i_p_2 then allocates itself just enough memory - to decompress the file. Since block sizes are stored in - compressed files, it follows that the flags −1 to −9 are - irrelevant to and so ignored during decompression. - - Compression and decompression requirements, in bytes, can - be estimated as: - - Compression: 400k + ( 8 x block size ) - - Decompression: 100k + ( 4 x block size ), or - 100k + ( 2.5 x block size ) - - Larger block sizes give rapidly diminishing marginal - returns. Most of the compression comes from the first two - or three hundred k of block size, a fact worth bearing in - mind when using _b_z_i_p_2 on small machines. It is also - important to appreciate that the decompression memory - requirement is set at compression time by the choice of - block size. - - For files compressed with the default 900k block size, - _b_u_n_z_i_p_2 will require about 3700 kbytes to decompress. To - support decompression of any file on a 4 megabyte machine, - _b_u_n_z_i_p_2 has an option to decompress using approximately - half this amount of memory, about 2300 kbytes. Decompres­ - sion speed is also halved, so you should use this option - only where necessary. The relevant flag is ‐s. - - In general, try and use the largest block size memory con­ - straints allow, since that maximises the compression - achieved. Compression and decompression speed are virtu­ - ally unaffected by block size. - - Another significant point applies to files which fit in a - single block ‐‐ that means most files you’d encounter - using a large block size. The amount of real memory - touched is proportional to the size of the file, since the - file is smaller than a block. For example, compressing a - file 20,000 bytes long with the flag ‐9 will cause the - compressor to allocate around 7600k of memory, but only - touch 400k + 20000 * 8 = 560 kbytes of it. Similarly, the - decompressor will allocate 3700k but only touch 100k + - 20000 * 4 = 180 kbytes. - - Here is a table which summarises the maximum memory usage - for different block sizes. Also recorded is the total - compressed size for 14 files of the Calgary Text Compres­ - sion Corpus totalling 3,141,622 bytes. This column gives - some feel for how compression varies with block size. - These figures tend to understate the advantage of larger - block sizes for larger files, since the Corpus is domi­ - nated by smaller files. - - Compress Decompress Decompress Corpus - Flag usage usage ‐s usage Size - - ‐1 1200k 500k 350k 914704 - ‐2 2000k 900k 600k 877703 - ‐3 2800k 1300k 850k 860338 - ‐4 3600k 1700k 1100k 846899 - ‐5 4400k 2100k 1350k 845160 - ‐6 5200k 2500k 1600k 838626 - ‐7 6100k 2900k 1850k 834096 - ‐8 6800k 3300k 2100k 828642 - ‐9 7600k 3700k 2350k 828642 - - -RREECCOOVVEERRIINNGG DDAATTAA FFRROOMM DDAAMMAAGGEEDD FFIILLEESS - _b_z_i_p_2 compresses files in blocks, usually 900kbytes long. - Each block is handled independently. If a media or trans­ - mission error causes a multi‐block .bz2 file to become - damaged, it may be possible to recover data from the - undamaged blocks in the file. - - The compressed representation of each block is delimited - by a 48‐bit pattern, which makes it possible to find the - block boundaries with reasonable certainty. Each block - also carries its own 32‐bit CRC, so damaged blocks can be - distinguished from undamaged ones. - - _b_z_i_p_2_r_e_c_o_v_e_r is a simple program whose purpose is to - search for blocks in .bz2 files, and write each block out - into its own .bz2 file. You can then use _b_z_i_p_2 −t to test - the integrity of the resulting files, and decompress those - which are undamaged. - - _b_z_i_p_2_r_e_c_o_v_e_r takes a single argument, the name of the dam­ - aged file, and writes a number of files - "rec00001file.bz2", "rec00002file.bz2", etc, containing - the extracted blocks. The output filenames are - designed so that the use of wildcards in subsequent pro­ - cessing ‐‐ for example, "bzip2 ‐dc rec*file.bz2 > recov­ - ered_data" ‐‐ processes the files in the correct order. - - _b_z_i_p_2_r_e_c_o_v_e_r should be of most use dealing with large .bz2 - files, as these will contain many blocks. It is clearly - futile to use it on damaged single‐block files, since a - damaged block cannot be recovered. If you wish to min­ - imise any potential data loss through media or transmis­ - sion errors, you might consider compressing with a smaller - block size. - - -PPEERRFFOORRMMAANNCCEE NNOOTTEESS - The sorting phase of compression gathers together similar - strings in the file. Because of this, files containing - very long runs of repeated symbols, like "aabaabaabaab - ..." (repeated several hundred times) may compress more - slowly than normal. Versions 0.9.5 and above fare much - better than previous versions in this respect. The ratio - between worst‐case and average‐case compression time is in - the region of 10:1. For previous versions, this figure - was more like 100:1. You can use the −vvvv option to mon­ - itor progress in great detail, if you want. - - Decompression speed is unaffected by these phenomena. - - _b_z_i_p_2 usually allocates several megabytes of memory to - operate in, and then charges all over it in a fairly ran­ - dom fashion. This means that performance, both for com­ - pressing and decompressing, is largely determined by the - speed at which your machine can service cache misses. - Because of this, small changes to the code to reduce the - miss rate have been observed to give disproportionately - large performance improvements. I imagine _b_z_i_p_2 will per­ - form best on machines with very large caches. - - -CCAAVVEEAATTSS - I/O error messages are not as helpful as they could be. - _b_z_i_p_2 tries hard to detect I/O errors and exit cleanly, - but the details of what the problem is sometimes seem - rather misleading. - - This manual page pertains to version 1.0.6 of _b_z_i_p_2_. Com­ - pressed data created by this version is entirely forwards - and backwards compatible with the previous public - releases, versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, - 1.0.2 and above, but with the following exception: 0.9.0 - and above can correctly decompress multiple concatenated - compressed files. 0.1pl2 cannot do this; it will stop - after decompressing just the first file in the stream. - - _b_z_i_p_2_r_e_c_o_v_e_r versions prior to 1.0.2 used 32‐bit integers - to represent bit positions in compressed files, so they - could not handle compressed files more than 512 megabytes - long. Versions 1.0.2 and above use 64‐bit ints on some - platforms which support them (GNU supported targets, and - Windows). To establish whether or not bzip2recover was - built with such a limitation, run it without arguments. - In any event you can build yourself an unlimited version - if you can recompile it with MaybeUInt64 set to be an - unsigned 64‐bit integer. - - - - -AAUUTTHHOORR - Julian Seward, jsewardbzip.org. - - http://www.bzip.org - - The ideas embodied in _b_z_i_p_2 are due to (at least) the fol­ - lowing people: Michael Burrows and David Wheeler (for the - block sorting transformation), David Wheeler (again, for - the Huffman coder), Peter Fenwick (for the structured cod­ - ing model in the original _b_z_i_p_, and many refinements), and - Alistair Moffat, Radford Neal and Ian Witten (for the - arithmetic coder in the original _b_z_i_p_)_. I am much - indebted for their help, support and advice. See the man­ - ual in the source distribution for pointers to sources of - documentation. Christian von Roques encouraged me to look - for faster sorting algorithms, so as to speed up compres­ - sion. Bela Lubkin encouraged me to improve the worst‐case - compression performance. Donna Robinson XMLised the docu­ - mentation. The bz* scripts are derived from those of GNU - gzip. Many people sent patches, helped with portability - problems, lent machines, gave advice and were generally - helpful. - - - - bzip2(1) diff --git a/reactos/lib/3rdparty/bzip2/bzip2.txt b/reactos/lib/3rdparty/bzip2/bzip2.txt deleted file mode 100644 index d2deb394911..00000000000 --- a/reactos/lib/3rdparty/bzip2/bzip2.txt +++ /dev/null @@ -1,391 +0,0 @@ - -NAME - bzip2, bunzip2 - a block-sorting file compressor, v1.0.6 - bzcat - decompresses files to stdout - bzip2recover - recovers data from damaged bzip2 files - - -SYNOPSIS - bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ] - bunzip2 [ -fkvsVL ] [ filenames ... ] - bzcat [ -s ] [ filenames ... ] - bzip2recover filename - - -DESCRIPTION - bzip2 compresses files using the Burrows-Wheeler block - sorting text compression algorithm, and Huffman coding. - Compression is generally considerably better than that - achieved by more conventional LZ77/LZ78-based compressors, - and approaches the performance of the PPM family of sta- - tistical compressors. - - The command-line options are deliberately very similar to - those of GNU gzip, but they are not identical. - - bzip2 expects a list of file names to accompany the com- - mand-line flags. Each file is replaced by a compressed - version of itself, with the name "original_name.bz2". - Each compressed file has the same modification date, per- - missions, and, when possible, ownership as the correspond- - ing original, so that these properties can be correctly - restored at decompression time. File name handling is - naive in the sense that there is no mechanism for preserv- - ing original file names, permissions, ownerships or dates - in filesystems which lack these concepts, or have serious - file name length restrictions, such as MS-DOS. - - bzip2 and bunzip2 will by default not overwrite existing - files. If you want this to happen, specify the -f flag. - - If no file names are specified, bzip2 compresses from - standard input to standard output. In this case, bzip2 - will decline to write compressed output to a terminal, as - this would be entirely incomprehensible and therefore - pointless. - - bunzip2 (or bzip2 -d) decompresses all specified files. - Files which were not created by bzip2 will be detected and - ignored, and a warning issued. bzip2 attempts to guess - the filename for the decompressed file from that of the - compressed file as follows: - - filename.bz2 becomes filename - filename.bz becomes filename - filename.tbz2 becomes filename.tar - filename.tbz becomes filename.tar - anyothername becomes anyothername.out - - If the file does not end in one of the recognised endings, - .bz2, .bz, .tbz2 or .tbz, bzip2 complains that it cannot - guess the name of the original file, and uses the original - name with .out appended. - - As with compression, supplying no filenames causes decom- - pression from standard input to standard output. - - bunzip2 will correctly decompress a file which is the con- - catenation of two or more compressed files. The result is - the concatenation of the corresponding uncompressed files. - Integrity testing (-t) of concatenated compressed files is - also supported. - - You can also compress or decompress files to the standard - output by giving the -c flag. Multiple files may be com- - pressed and decompressed like this. The resulting outputs - are fed sequentially to stdout. Compression of multiple - files in this manner generates a stream containing multi- - ple compressed file representations. Such a stream can be - decompressed correctly only by bzip2 version 0.9.0 or - later. Earlier versions of bzip2 will stop after decom- - pressing the first file in the stream. - - bzcat (or bzip2 -dc) decompresses all specified files to - the standard output. - - bzip2 will read arguments from the environment variables - BZIP2 and BZIP, in that order, and will process them - before any arguments read from the command line. This - gives a convenient way to supply default arguments. - - Compression is always performed, even if the compressed - file is slightly larger than the original. Files of less - than about one hundred bytes tend to get larger, since the - compression mechanism has a constant overhead in the - region of 50 bytes. Random data (including the output of - most file compressors) is coded at about 8.05 bits per - byte, giving an expansion of around 0.5%. - - As a self-check for your protection, bzip2 uses 32-bit - CRCs to make sure that the decompressed version of a file - is identical to the original. This guards against corrup- - tion of the compressed data, and against undetected bugs - in bzip2 (hopefully very unlikely). The chances of data - corruption going undetected is microscopic, about one - chance in four billion for each file processed. Be aware, - though, that the check occurs upon decompression, so it - can only tell you that something is wrong. It can't help - you recover the original uncompressed data. You can use - bzip2recover to try to recover data from damaged files. - - Return values: 0 for a normal exit, 1 for environmental - problems (file not found, invalid flags, I/O errors, &c), - 2 to indicate a corrupt compressed file, 3 for an internal - consistency error (eg, bug) which caused bzip2 to panic. - - -OPTIONS - -c --stdout - Compress or decompress to standard output. - - -d --decompress - Force decompression. bzip2, bunzip2 and bzcat are - really the same program, and the decision about - what actions to take is done on the basis of which - name is used. This flag overrides that mechanism, - and forces bzip2 to decompress. - - -z --compress - The complement to -d: forces compression, - regardless of the invocation name. - - -t --test - Check integrity of the specified file(s), but don't - decompress them. This really performs a trial - decompression and throws away the result. - - -f --force - Force overwrite of output files. Normally, bzip2 - will not overwrite existing output files. Also - forces bzip2 to break hard links to files, which it - otherwise wouldn't do. - - bzip2 normally declines to decompress files which - don't have the correct magic header bytes. If - forced (-f), however, it will pass such files - through unmodified. This is how GNU gzip behaves. - - -k --keep - Keep (don't delete) input files during compression - or decompression. - - -s --small - Reduce memory usage, for compression, decompression - and testing. Files are decompressed and tested - using a modified algorithm which only requires 2.5 - bytes per block byte. This means any file can be - decompressed in 2300k of memory, albeit at about - half the normal speed. - - During compression, -s selects a block size of - 200k, which limits memory use to around the same - figure, at the expense of your compression ratio. - In short, if your machine is low on memory (8 - megabytes or less), use -s for everything. See - MEMORY MANAGEMENT below. - - -q --quiet - Suppress non-essential warning messages. Messages - pertaining to I/O errors and other critical events - will not be suppressed. - - -v --verbose - Verbose mode -- show the compression ratio for each - file processed. Further -v's increase the ver- - bosity level, spewing out lots of information which - is primarily of interest for diagnostic purposes. - - -L --license -V --version - Display the software version, license terms and - conditions. - - -1 (or --fast) to -9 (or --best) - Set the block size to 100 k, 200 k .. 900 k when - compressing. Has no effect when decompressing. - See MEMORY MANAGEMENT below. The --fast and --best - aliases are primarily for GNU gzip compatibility. - In particular, --fast doesn't make things signifi- - cantly faster. And --best merely selects the - default behaviour. - - -- Treats all subsequent arguments as file names, even - if they start with a dash. This is so you can han- - dle files with names beginning with a dash, for - example: bzip2 -- -myfilename. - - --repetitive-fast --repetitive-best - These flags are redundant in versions 0.9.5 and - above. They provided some coarse control over the - behaviour of the sorting algorithm in earlier ver- - sions, which was sometimes useful. 0.9.5 and above - have an improved algorithm which renders these - flags irrelevant. - - -MEMORY MANAGEMENT - bzip2 compresses large files in blocks. The block size - affects both the compression ratio achieved, and the - amount of memory needed for compression and decompression. - The flags -1 through -9 specify the block size to be - 100,000 bytes through 900,000 bytes (the default) respec- - tively. At decompression time, the block size used for - compression is read from the header of the compressed - file, and bunzip2 then allocates itself just enough memory - to decompress the file. Since block sizes are stored in - compressed files, it follows that the flags -1 to -9 are - irrelevant to and so ignored during decompression. - - Compression and decompression requirements, in bytes, can - be estimated as: - - Compression: 400k + ( 8 x block size ) - - Decompression: 100k + ( 4 x block size ), or - 100k + ( 2.5 x block size ) - - Larger block sizes give rapidly diminishing marginal - returns. Most of the compression comes from the first two - or three hundred k of block size, a fact worth bearing in - mind when using bzip2 on small machines. It is also - important to appreciate that the decompression memory - requirement is set at compression time by the choice of - block size. - - For files compressed with the default 900k block size, - bunzip2 will require about 3700 kbytes to decompress. To - support decompression of any file on a 4 megabyte machine, - bunzip2 has an option to decompress using approximately - half this amount of memory, about 2300 kbytes. Decompres- - sion speed is also halved, so you should use this option - only where necessary. The relevant flag is -s. - - In general, try and use the largest block size memory con- - straints allow, since that maximises the compression - achieved. Compression and decompression speed are virtu- - ally unaffected by block size. - - Another significant point applies to files which fit in a - single block -- that means most files you'd encounter - using a large block size. The amount of real memory - touched is proportional to the size of the file, since the - file is smaller than a block. For example, compressing a - file 20,000 bytes long with the flag -9 will cause the - compressor to allocate around 7600k of memory, but only - touch 400k + 20000 * 8 = 560 kbytes of it. Similarly, the - decompressor will allocate 3700k but only touch 100k + - 20000 * 4 = 180 kbytes. - - Here is a table which summarises the maximum memory usage - for different block sizes. Also recorded is the total - compressed size for 14 files of the Calgary Text Compres- - sion Corpus totalling 3,141,622 bytes. This column gives - some feel for how compression varies with block size. - These figures tend to understate the advantage of larger - block sizes for larger files, since the Corpus is domi- - nated by smaller files. - - Compress Decompress Decompress Corpus - Flag usage usage -s usage Size - - -1 1200k 500k 350k 914704 - -2 2000k 900k 600k 877703 - -3 2800k 1300k 850k 860338 - -4 3600k 1700k 1100k 846899 - -5 4400k 2100k 1350k 845160 - -6 5200k 2500k 1600k 838626 - -7 6100k 2900k 1850k 834096 - -8 6800k 3300k 2100k 828642 - -9 7600k 3700k 2350k 828642 - - -RECOVERING DATA FROM DAMAGED FILES - bzip2 compresses files in blocks, usually 900kbytes long. - Each block is handled independently. If a media or trans- - mission error causes a multi-block .bz2 file to become - damaged, it may be possible to recover data from the - undamaged blocks in the file. - - The compressed representation of each block is delimited - by a 48-bit pattern, which makes it possible to find the - block boundaries with reasonable certainty. Each block - also carries its own 32-bit CRC, so damaged blocks can be - distinguished from undamaged ones. - - bzip2recover is a simple program whose purpose is to - search for blocks in .bz2 files, and write each block out - into its own .bz2 file. You can then use bzip2 -t to test - the integrity of the resulting files, and decompress those - which are undamaged. - - bzip2recover takes a single argument, the name of the dam- - aged file, and writes a number of files - "rec00001file.bz2", "rec00002file.bz2", etc, containing - the extracted blocks. The output filenames are - designed so that the use of wildcards in subsequent pro- - cessing -- for example, "bzip2 -dc rec*file.bz2 > recov- - ered_data" -- processes the files in the correct order. - - bzip2recover should be of most use dealing with large .bz2 - files, as these will contain many blocks. It is clearly - futile to use it on damaged single-block files, since a - damaged block cannot be recovered. If you wish to min- - imise any potential data loss through media or transmis- - sion errors, you might consider compressing with a smaller - block size. - - -PERFORMANCE NOTES - The sorting phase of compression gathers together similar - strings in the file. Because of this, files containing - very long runs of repeated symbols, like "aabaabaabaab - ..." (repeated several hundred times) may compress more - slowly than normal. Versions 0.9.5 and above fare much - better than previous versions in this respect. The ratio - between worst-case and average-case compression time is in - the region of 10:1. For previous versions, this figure - was more like 100:1. You can use the -vvvv option to mon- - itor progress in great detail, if you want. - - Decompression speed is unaffected by these phenomena. - - bzip2 usually allocates several megabytes of memory to - operate in, and then charges all over it in a fairly ran- - dom fashion. This means that performance, both for com- - pressing and decompressing, is largely determined by the - speed at which your machine can service cache misses. - Because of this, small changes to the code to reduce the - miss rate have been observed to give disproportionately - large performance improvements. I imagine bzip2 will per- - form best on machines with very large caches. - - -CAVEATS - I/O error messages are not as helpful as they could be. - bzip2 tries hard to detect I/O errors and exit cleanly, - but the details of what the problem is sometimes seem - rather misleading. - - This manual page pertains to version 1.0.6 of bzip2. Com- - pressed data created by this version is entirely forwards - and backwards compatible with the previous public - releases, versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, - 1.0.2 and above, but with the following exception: 0.9.0 - and above can correctly decompress multiple concatenated - compressed files. 0.1pl2 cannot do this; it will stop - after decompressing just the first file in the stream. - - bzip2recover versions prior to 1.0.2 used 32-bit integers - to represent bit positions in compressed files, so they - could not handle compressed files more than 512 megabytes - long. Versions 1.0.2 and above use 64-bit ints on some - platforms which support them (GNU supported targets, and - Windows). To establish whether or not bzip2recover was - built with such a limitation, run it without arguments. - In any event you can build yourself an unlimited version - if you can recompile it with MaybeUInt64 set to be an - unsigned 64-bit integer. - - -AUTHOR - Julian Seward, jsewardbzip.org. - - http://www.bzip.org - - The ideas embodied in bzip2 are due to (at least) the fol- - lowing people: Michael Burrows and David Wheeler (for the - block sorting transformation), David Wheeler (again, for - the Huffman coder), Peter Fenwick (for the structured cod- - ing model in the original bzip, and many refinements), and - Alistair Moffat, Radford Neal and Ian Witten (for the - arithmetic coder in the original bzip). I am much - indebted for their help, support and advice. See the man- - ual in the source distribution for pointers to sources of - documentation. Christian von Roques encouraged me to look - for faster sorting algorithms, so as to speed up compres- - sion. Bela Lubkin encouraged me to improve the worst-case - compression performance. Donna Robinson XMLised the docu- - mentation. The bz* scripts are derived from those of GNU - gzip. Many people sent patches, helped with portability - problems, lent machines, gave advice and were generally - helpful. - diff --git a/reactos/lib/3rdparty/bzip2/dlltest.dsp b/reactos/lib/3rdparty/bzip2/dlltest.dsp deleted file mode 100644 index 4b1615edcda..00000000000 --- a/reactos/lib/3rdparty/bzip2/dlltest.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dlltest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 5.00 -# ** ҏWȂł ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=dlltest - Win32 Debug -!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB -!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ -!MESSAGE -!MESSAGE NMAKE /f "dlltest.mak". -!MESSAGE -!MESSAGE NMAKE ̎sɍ\wł܂ -!MESSAGE ײݏϸۂ̐ݒ`܂B: -!MESSAGE -!MESSAGE NMAKE /f "dlltest.mak" CFG="dlltest - Win32 Debug" -!MESSAGE -!MESSAGE I”\ Ӱ: -!MESSAGE -!MESSAGE "dlltest - Win32 Release" ("Win32 (x86) Console Application" p) -!MESSAGE "dlltest - Win32 Debug" ("Win32 (x86) Console Application" p) -!MESSAGE - -# Begin Project -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dlltest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x411 /d "NDEBUG" -# ADD RSC /l 0x411 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"minibz2.exe" - -!ELSEIF "$(CFG)" == "dlltest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "dlltest_" -# PROP BASE Intermediate_Dir "dlltest_" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "dlltest_" -# PROP Intermediate_Dir "dlltest_" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x411 /d "_DEBUG" -# ADD RSC /l 0x411 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"minibz2.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "dlltest - Win32 Release" -# Name "dlltest - Win32 Debug" -# Begin Source File - -SOURCE=.\bzlib.h -# End Source File -# Begin Source File - -SOURCE=.\dlltest.c -# End Source File -# End Target -# End Project diff --git a/reactos/lib/3rdparty/bzip2/libbz2.dsp b/reactos/lib/3rdparty/bzip2/libbz2.dsp deleted file mode 100644 index a21a20f75fb..00000000000 --- a/reactos/lib/3rdparty/bzip2/libbz2.dsp +++ /dev/null @@ -1,130 +0,0 @@ -# Microsoft Developer Studio Project File - Name="libbz2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 5.00 -# ** ҏWȂł ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=libbz2 - Win32 Debug -!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB -!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ -!MESSAGE -!MESSAGE NMAKE /f "libbz2.mak". -!MESSAGE -!MESSAGE NMAKE ̎sɍ\wł܂ -!MESSAGE ײݏϸۂ̐ݒ`܂B: -!MESSAGE -!MESSAGE NMAKE /f "libbz2.mak" CFG="libbz2 - Win32 Debug" -!MESSAGE -!MESSAGE I”\ Ӱ: -!MESSAGE -!MESSAGE "libbz2 - Win32 Release" ("Win32 (x86) Dynamic-Link Library" p) -!MESSAGE "libbz2 - Win32 Debug" ("Win32 (x86) Dynamic-Link Library" p) -!MESSAGE - -# Begin Project -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "libbz2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 -# ADD BASE RSC /l 0x411 /d "NDEBUG" -# ADD RSC /l 0x411 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"libbz2.dll" - -!ELSEIF "$(CFG)" == "libbz2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 -# ADD BASE RSC /l 0x411 /d "_DEBUG" -# ADD RSC /l 0x411 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"libbz2.dll" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "libbz2 - Win32 Release" -# Name "libbz2 - Win32 Debug" -# Begin Source File - -SOURCE=.\blocksort.c -# End Source File -# Begin Source File - -SOURCE=.\bzlib.c -# End Source File -# Begin Source File - -SOURCE=.\bzlib.h -# End Source File -# Begin Source File - -SOURCE=.\bzlib_private.h -# End Source File -# Begin Source File - -SOURCE=.\compress.c -# End Source File -# Begin Source File - -SOURCE=.\crctable.c -# End Source File -# Begin Source File - -SOURCE=.\decompress.c -# End Source File -# Begin Source File - -SOURCE=.\huffman.c -# End Source File -# Begin Source File - -SOURCE=.\libbz2.def -# End Source File -# Begin Source File - -SOURCE=.\randtable.c -# End Source File -# End Target -# End Project diff --git a/reactos/lib/3rdparty/bzip2/makefile.msc b/reactos/lib/3rdparty/bzip2/makefile.msc deleted file mode 100644 index 6a628a753a0..00000000000 --- a/reactos/lib/3rdparty/bzip2/makefile.msc +++ /dev/null @@ -1,63 +0,0 @@ -# Makefile for Microsoft Visual C++ 6.0 -# usage: nmake -f makefile.msc -# K.M. Syring (syring@gsf.de) -# Fixed up by JRS for bzip2-0.9.5d release. - -CC=cl -CFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64 -nologo - -OBJS= blocksort.obj \ - huffman.obj \ - crctable.obj \ - randtable.obj \ - compress.obj \ - decompress.obj \ - bzlib.obj - -all: lib bzip2 test - -bzip2: lib - $(CC) $(CFLAGS) -o bzip2 bzip2.c libbz2.lib setargv.obj - $(CC) $(CFLAGS) -o bzip2recover bzip2recover.c - -lib: $(OBJS) - lib /out:libbz2.lib $(OBJS) - -test: bzip2 - type words1 - .\\bzip2 -1 < sample1.ref > sample1.rb2 - .\\bzip2 -2 < sample2.ref > sample2.rb2 - .\\bzip2 -3 < sample3.ref > sample3.rb2 - .\\bzip2 -d < sample1.bz2 > sample1.tst - .\\bzip2 -d < sample2.bz2 > sample2.tst - .\\bzip2 -ds < sample3.bz2 > sample3.tst - @echo All six of the fc's should find no differences. - @echo If fc finds an error on sample3.bz2, this could be - @echo because WinZip's 'TAR file smart CR/LF conversion' - @echo is too clever for its own good. Disable this option. - @echo The correct size for sample3.ref is 120,244. If it - @echo is 150,251, WinZip has messed it up. - fc sample1.bz2 sample1.rb2 - fc sample2.bz2 sample2.rb2 - fc sample3.bz2 sample3.rb2 - fc sample1.tst sample1.ref - fc sample2.tst sample2.ref - fc sample3.tst sample3.ref - - - -clean: - del *.obj - del libbz2.lib - del bzip2.exe - del bzip2recover.exe - del sample1.rb2 - del sample2.rb2 - del sample3.rb2 - del sample1.tst - del sample2.tst - del sample3.tst - -.c.obj: - $(CC) $(CFLAGS) -c $*.c -o $*.obj - diff --git a/reactos/lib/3rdparty/bzip2/manual.ps b/reactos/lib/3rdparty/bzip2/manual.ps deleted file mode 100644 index cbc6f924dff..00000000000 --- a/reactos/lib/3rdparty/bzip2/manual.ps +++ /dev/null @@ -1,72843 +0,0 @@ -%!PS-Adobe-3.0 -%%Creator: PassiveTeX 1.25 -%%LanguageLevel: 2 -%%DocumentSuppliedResources: (atend) -%%DocumentMedia: plain 612 792 0 () () -%%BoundingBox: 0 0 612 792 -%%Pages: 38 -%%EndComments -%%BeginDefaults -%%PageMedia: plain -%%EndDefaults -%%BeginProlog -%%BeginResource: procset xpdf 3.00 0 -%%Copyright: Copyright 1996-2004 Glyph & Cog, LLC -/xpdf 75 dict def xpdf begin -% PDF special state -/pdfDictSize 15 def -/pdfSetup { - 3 1 roll 2 array astore - /setpagedevice where { - pop 3 dict begin - /PageSize exch def - /ImagingBBox null def - { /Duplex true def } if - currentdict end setpagedevice - } { - pop pop - } ifelse -} def -/pdfStartPage { - pdfDictSize dict begin - /pdfFillCS [] def - /pdfFillXform {} def - /pdfStrokeCS [] def - /pdfStrokeXform {} def - /pdfFill [0] def - /pdfStroke [0] def - /pdfFillOP false def - /pdfStrokeOP false def - /pdfLastFill false def - /pdfLastStroke false def - /pdfTextMat [1 0 0 1 0 0] def - /pdfFontSize 0 def - /pdfCharSpacing 0 def - /pdfTextRender 0 def - /pdfTextRise 0 def - /pdfWordSpacing 0 def - /pdfHorizScaling 1 def - /pdfTextClipPath [] def -} def -/pdfEndPage { end } def -% PDF color state -/cs { /pdfFillXform exch def dup /pdfFillCS exch def - setcolorspace } def -/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def - setcolorspace } def -/sc { pdfLastFill not { pdfFillCS setcolorspace } if - dup /pdfFill exch def aload pop pdfFillXform setcolor - /pdfLastFill true def /pdfLastStroke false def } def -/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if - dup /pdfStroke exch def aload pop pdfStrokeXform setcolor - /pdfLastStroke true def /pdfLastFill false def } def -/op { /pdfFillOP exch def - pdfLastFill { pdfFillOP setoverprint } if } def -/OP { /pdfStrokeOP exch def - pdfLastStroke { pdfStrokeOP setoverprint } if } def -/fCol { - pdfLastFill not { - pdfFillCS setcolorspace - pdfFill aload pop pdfFillXform setcolor - pdfFillOP setoverprint - /pdfLastFill true def /pdfLastStroke false def - } if -} def -/sCol { - pdfLastStroke not { - pdfStrokeCS setcolorspace - pdfStroke aload pop pdfStrokeXform setcolor - pdfStrokeOP setoverprint - /pdfLastStroke true def /pdfLastFill false def - } if -} def -% build a font -/pdfMakeFont { - 4 3 roll findfont - 4 2 roll matrix scale makefont - dup length dict begin - { 1 index /FID ne { def } { pop pop } ifelse } forall - /Encoding exch def - currentdict - end - definefont pop -} def -/pdfMakeFont16 { - exch findfont - dup length dict begin - { 1 index /FID ne { def } { pop pop } ifelse } forall - /WMode exch def - currentdict - end - definefont pop -} def -% graphics state operators -/q { gsave pdfDictSize dict begin } def -/Q { - end grestore - /pdfLastFill where { - pop - pdfLastFill { - pdfFillOP setoverprint - } { - pdfStrokeOP setoverprint - } ifelse - } if -} def -/cm { concat } def -/d { setdash } def -/i { setflat } def -/j { setlinejoin } def -/J { setlinecap } def -/M { setmiterlimit } def -/w { setlinewidth } def -% path segment operators -/m { moveto } def -/l { lineto } def -/c { curveto } def -/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto - neg 0 rlineto closepath } def -/h { closepath } def -% path painting operators -/S { sCol stroke } def -/Sf { fCol stroke } def -/f { fCol fill } def -/f* { fCol eofill } def -% clipping operators -/W { clip newpath } def -/W* { eoclip newpath } def -/Ws { strokepath clip newpath } def -% text state operators -/Tc { /pdfCharSpacing exch def } def -/Tf { dup /pdfFontSize exch def - dup pdfHorizScaling mul exch matrix scale - pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put - exch findfont exch makefont setfont } def -/Tr { /pdfTextRender exch def } def -/Ts { /pdfTextRise exch def } def -/Tw { /pdfWordSpacing exch def } def -/Tz { /pdfHorizScaling exch def } def -% text positioning operators -/Td { pdfTextMat transform moveto } def -/Tm { /pdfTextMat exch def } def -% text string operators -/cshow where { - pop - /cshow2 { - dup { - pop pop - 1 string dup 0 3 index put 3 index exec - } exch cshow - pop pop - } def -}{ - /cshow2 { - currentfont /FontType get 0 eq { - 0 2 2 index length 1 sub { - 2 copy get exch 1 add 2 index exch get - 2 copy exch 256 mul add - 2 string dup 0 6 5 roll put dup 1 5 4 roll put - 3 index exec - } for - } { - dup { - 1 string dup 0 3 index put 3 index exec - } forall - } ifelse - pop pop - } def -} ifelse -/awcp { - exch { - false charpath - 5 index 5 index rmoveto - 6 index eq { 7 index 7 index rmoveto } if - } exch cshow2 - 6 {pop} repeat -} def -/Tj { - fCol - 1 index stringwidth pdfTextMat idtransform pop - sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse - pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj16 { - fCol - 2 index stringwidth pdfTextMat idtransform pop - sub exch div - pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj16V { - fCol - 2 index stringwidth pdfTextMat idtransform exch pop - sub exch div - 0 pdfWordSpacing pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing add 0 exch - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj1 { - 0 pdfTextRise pdfTextMat dtransform rmoveto - currentpoint 8 2 roll - pdfTextRender 1 and 0 eq { - 6 copy awidthshow - } if - pdfTextRender 3 and dup 1 eq exch 2 eq or { - 7 index 7 index moveto - 6 copy - currentfont /FontType get 3 eq { fCol } { sCol } ifelse - false awcp currentpoint stroke moveto - } if - pdfTextRender 4 and 0 ne { - 8 6 roll moveto - false awcp - /pdfTextClipPath [ pdfTextClipPath aload pop - {/moveto cvx} - {/lineto cvx} - {/curveto cvx} - {/closepath cvx} - pathforall ] def - currentpoint newpath moveto - } { - 8 {pop} repeat - } ifelse - 0 pdfTextRise neg pdfTextMat dtransform rmoveto -} def -/TJm { pdfFontSize 0.001 mul mul neg 0 - pdfTextMat dtransform rmoveto } def -/TJmV { pdfFontSize 0.001 mul mul neg 0 exch - pdfTextMat dtransform rmoveto } def -/Tclip { pdfTextClipPath cvx exec clip newpath - /pdfTextClipPath [] def } def -/Tclip* { pdfTextClipPath cvx exec eoclip newpath - /pdfTextClipPath [] def } def -% Level 2 image operators -/pdfImBuf 100 string def -/pdfIm { - image - { currentfile pdfImBuf readline - not { pop exit } if - (%-EOD-) eq { exit } if } loop -} def -/pdfImM { - fCol imagemask - { currentfile pdfImBuf readline - not { pop exit } if - (%-EOD-) eq { exit } if } loop -} def -/pr { 2 index 2 index 3 2 roll putinterval 4 add } def -/pdfImClip { - gsave - 0 2 4 index length 1 sub { - dup 4 index exch 2 copy - get 5 index div put - 1 add 3 index exch 2 copy - get 3 index div put - } for - pop pop rectclip -} def -/pdfImClipEnd { grestore } def -% shading operators -/colordelta { - false 0 1 3 index length 1 sub { - dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { - pop true - } if - } for - exch pop exch pop -} def -/funcCol { func n array astore } def -/funcSH { - dup 0 eq { - true - } { - dup 6 eq { - false - } { - 4 index 4 index funcCol dup - 6 index 4 index funcCol dup - 3 1 roll colordelta 3 1 roll - 5 index 5 index funcCol dup - 3 1 roll colordelta 3 1 roll - 6 index 8 index funcCol dup - 3 1 roll colordelta 3 1 roll - colordelta or or or - } ifelse - } ifelse - { - 1 add - 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch - 6 index 6 index 4 index 4 index 4 index funcSH - 2 index 6 index 6 index 4 index 4 index funcSH - 6 index 2 index 4 index 6 index 4 index funcSH - 5 3 roll 3 2 roll funcSH pop pop - } { - pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul - funcCol sc - dup 4 index exch mat transform m - 3 index 3 index mat transform l - 1 index 3 index mat transform l - mat transform l pop pop h f* - } ifelse -} def -/axialCol { - dup 0 lt { - pop t0 - } { - dup 1 gt { - pop t1 - } { - dt mul t0 add - } ifelse - } ifelse - func n array astore -} def -/axialSH { - dup 0 eq { - true - } { - dup 8 eq { - false - } { - 2 index axialCol 2 index axialCol colordelta - } ifelse - } ifelse - { - 1 add 3 1 roll 2 copy add 0.5 mul - dup 4 3 roll exch 4 index axialSH - exch 3 2 roll axialSH - } { - pop 2 copy add 0.5 mul - axialCol sc - exch dup dx mul x0 add exch dy mul y0 add - 3 2 roll dup dx mul x0 add exch dy mul y0 add - dx abs dy abs ge { - 2 copy yMin sub dy mul dx div add yMin m - yMax sub dy mul dx div add yMax l - 2 copy yMax sub dy mul dx div add yMax l - yMin sub dy mul dx div add yMin l - h f* - } { - exch 2 copy xMin sub dx mul dy div add xMin exch m - xMax sub dx mul dy div add xMax exch l - exch 2 copy xMax sub dx mul dy div add xMax exch l - xMin sub dx mul dy div add xMin exch l - h f* - } ifelse - } ifelse -} def -/radialCol { - dup t0 lt { - pop t0 - } { - dup t1 gt { - pop t1 - } if - } ifelse - func n array astore -} def -/radialSH { - dup 0 eq { - true - } { - dup 8 eq { - false - } { - 2 index dt mul t0 add radialCol - 2 index dt mul t0 add radialCol colordelta - } ifelse - } ifelse - { - 1 add 3 1 roll 2 copy add 0.5 mul - dup 4 3 roll exch 4 index radialSH - exch 3 2 roll radialSH - } { - pop 2 copy add 0.5 mul dt mul t0 add - radialCol sc - encl { - exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - 0 360 arc h - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - 360 0 arcn h f - } { - 2 copy - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - a1 a2 arcn - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - a2 a1 arcn h - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - a1 a2 arc - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - a2 a1 arc h f - } ifelse - } ifelse -} def -end -%%EndResource -%%EndProlog -%%BeginSetup -xpdf begin -%%BeginResource: font PYRIYB+NimbusSanL-Bold -%!PS-AdobeFont-1.0: NimbusSanL-Bold 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file COPYING (GNU General Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Sans L Bold) readonly def -/FamilyName (Nimbus Sans L) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -155 def -/UnderlineThickness 69 def -end readonly def -/FontName /PYRIYB+NimbusSanL-Bold def -/PaintType 0 def -/WMode 0 def -/FontBBox {-173 -307 1003 949} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -currentdict end -currentfile eexec -d9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae -6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27 -bf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf -045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670 -0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4 -1b2b9e8f09253b61177e95ea219474796072f4b363fd772dae3a9d9385cd2163 -c2c8062ef9af240bc02404e5411b401d68ee5d983d33df8a63b6da7ed443e71a -e94a32ce1db15d759113b684bdc92cb4c920e35cb677534219abcea434fba862 -2fbc8237219af7943fb467616d86b4251b350647c43c8df74289646adecf0367 -7c838d720affd234259e947e6ac432993323e8fc0b1c7609675558ae470b19fc -ba7b5ca1eff86dfe4d9ef0356f5d57d03f0b2d0f449d6165b92c78c00162b164 -648ca123b1ffa8c2bcdf125864ccc81c7d58f19374b71dcdacc3c43450bca81c -364753c7d444062a98ce202aa990c652d540b1dd09459bd4818f7675d21cd2e1 -45a0d2670c3136a6c56fed36fa640520c0a880f954cf4bea74789d14c9b7ca0a -e91f4ece020bb0d3cf1890cb79d94675c25c7ca667199195134e70ef0db9949a -416f0a0443f1191421f2323202445f5af44871eed6956d3a3de21a34e302d41b -d7eef2a4023a66862fef89ca6386a8e47ba55e6f89db590cc810feb27b68238a -205275e7573968693cfe1f8a60b5af3fc965dc05bbac5bbd6d2ef74c4f140423 -9fb13eda8457a5b26248ca5ca4d3f896b0a93b69a9045b0adc25b43df700e90b -820f28307cc6f6ff2fa4a06a8a6deb8cba4cb0d136da07593fabc1c8ba1149d9 -1c422f461a429ece40b7c90417320167d99ffa9490f9abc3101f2359bef6c6f2 -15c5585c8733ca06a9cb793d618247757063ff41c5fce1a209ea5a138777dad8 -943b73186bc17e03fb06ba658e5b3305e39078f5de984bfe093ab3d782150e2f -8545c9601bd2a531a8196e157f8f18017c0331881abf07d6c21931fcf9b81c51 -be05d2ace462ab8899e2929f0d821eddb18e9887cb7e8e3ae0beda34ccd0428a -38c4429417cebce5ef4bebf7f64eedca8769d004d2432ded2240b732481a6da7 -458cd26e4730c4aecdc1078ee3fbaf6cd275b426bbca2d0cbd42eb7b100b1c58 -f043391fc5929fca7ccb7d2188b6cec6bbdb78079e36d67129c17aef9fa72fa7 -5357dda5167e3c0ddb4f9266f3ef69c2ce9b6191ba911c1fc740549496aa76af -b86e4fddc0f31f92595f8bc0bdd3ac613b16426d722c0d27822944899572bdd7 -96d248b1adba5ec18a7f0cab096e134c36b2fcccd0b2104e43b2123936dbf7d6 -e0706616a7676da73a30a36cfe2231fba5e1fe69952a2f0ac15145c5cff411a8 -b57db37742efd6b78096d0fc69fbcdea39cb05d034f31c23b04ee90fcb4484ab -2053e8dd69a2eaf120a6bb64bd55409ab4b6a6e92d305e40974b0df80009f4d9 -8fe9e8aceddb346f8e75941c1189aeb685f4f02d20814ad6bbe3c4364bd1c64f -9c1f111790dd74d635520606a6bc978b65ccb6e8bcfd8fdbae26ea62e36d0317 -5564995f2a07393255d7c3450303f5a26b783afa95962e9438fc3b10239fc8be -7809f48340aa9a61ded2e1de62b8ece240dbd1dc8be3819ac3e9aacb6e165923 -4a264036c6017b46af959f7e574185e66a3a161eed1f99b8496a9fcfac13492d -fe3f21bf1c0c1dd432fb523701060720730e9f51b76082ef4e72d2f2ebae7a00 -ecc0e1a922d6ded5c4f0a76eef3f6e157210a3a46a4a30114f032ba029d8207a -5946b8242fc9b939559654b5c9831eab6bc2f1a8cd2779f95698f26bdfe2e421 -cccfadd7e6684364a8ce71574f2d675239e404f754237da4cb564bc7b23d7159 -5b1dd8a0b62d6bc044fe0bd2ea98458fb2188b8ab1af6438e9693ebf939c7c9e -db285c87698d8eb206cf58d89a05e74a150ae0f0f0300dc1b3bcf1f3d6b73bd4 -70e604c23d313121a4cdcfedcc834feec5b1894e5384979966f496fea5cbf1db -7f3645abc9a5e9fe04f056648f8b5882a5399fafad915207a1434b7184b48949 -43aa2c3ae059f96905277ec06fc91c4536efe679c6fa6e71167496cc0d2f297d -d07159b01a02731e578879fb16f9ffd84768207629ba38f902230a03fc844eee -f9fb458929cc8e1c988b486e9cdc3d00a84de8bf078ba4f1c73cf88a2cbb20a4 -e19a8c02d1bd767103c08b8ce14162a9cd99d167fd5cdbf53bc39fa14cab520b -2e91ef7a2952c936c9825e30e3ed350ce9ad799b27b1091a0b2f3be2208838d3 -1bcdb3aad13a1299bd93b3f1a972c04f117f05bd9e5029b6c799eb25e3e98734 -a0ca4a814d824ee4ca5383c6eb8c6c45882289cf2a52934fb7764f3556eaebba -2823e5007f83f6a3d3a6eb0f7fbc3b91320de755745ab44513deeb65d6d81c0d -838125bc1480d494b8cdecb253a230fb950df5fd1cfdf3b8b0c56aa0168b01aa -a690593f22c25e6ea9d2de70b8bb93cccde841d2b923b4a70c7cccfdc1c400e5 -d3d71cf640a201397f09e13d27faec5d041b9d904467c4c573c6fb1820a55c1a -8d0ec1f6ad502bbda597925ab353429a5bbdf3df01066e5cb3c2bf2d19e7df4c -285766c06ea868f915e051139ecfe22ac9b8466a5da38e4e2f92c01428ac9051 -4930a9e9420c49bb8dac35d2a7e9846b0c9c8db992bd5dd95fdc0c8d5bf2e7d0 -baefc4ce8fe265e57b7b6c8c91e1797db85d90eb1888170744db916ca7e353bc -4edb9fc4a1d42013ba275d3efc76259e25860a3549d104880157db843cc75fcd -5a14800ab8743fdacc4c5ff064cbf3ba6e737833850e618ad9674d0fb01918e8 -ba87eb21aab2c494c6f6ff275d1501d78a9a97d2774ef4d5fbc8032955669b04 -69e354b9984fcf4c0b890e4e8a7796d3b7b3855815f5565b13d95b139c32ee02 -4a2057235cef0b98b1c0bb84d64921dce789c2eccf58364e832cc2bef739d807 -012512769f57dfefa384083415b668285db3f6f9e5c850205dba7c66b2da0280 -f771183b302ff529a691590321a6b06dff8593a28e83a7c66008ae45b2989da0 -0455253031ed2da983e9f1ad6fbaaf85035b4715cc1525cc8d7f1a3c0ec40f9c -9eca905a50a0f4b1f5db072918617213f7863ef202c0adf926e3be1c8307b571 -2c94daf13b6a659d0f613cb319e8782a0a2781b3a61227424ff5e554eba32b55 -de5bae43483ff916e37a129c877f10f7c8c0ec1fee0fe10b3fc813d976e6e54c -8ea8aeaa179727d3335f86662bd318260fbc314986a2f97f919ccd564e001903 -eec90c13abbf988114cd330ccd7e9fde42e218a9484b565a0cd7e9c1807ada0e -e6a7f916c5a38d64dae17faae3e84822e6c63bf32148ae3dffc010920509491b -424d27fc1970abe5ac799936aac46c4a98cf4c66b3182e73df72431e53ab1f36 -460e6c6a9b2db27e38eda8972835ba64210b45dd04a778d59c5751b8478312b4 -38012796f5a8be056c8e3a9e656bfa909f7ebfb7f32fa1ae99dc291b0f002a0f -8873351e9684adbefe40d607631559c78f5688a708160ad3803db743282353bc -20098c6212dfad417f106d92527506ca0c9a8864c1eb61997dfedbbbf1d052d9 -81ea593f2a6c4a90676aec9354a6598436d1de7e15e4979344eb976a917471cf -c85e52ecf3437ebb4b6f8e9b292b7db33be0a9ead500b9353f3f367ceff8dd77 -32b67a559e56ffa3b5311fb52689c1e296c01a362a5c33bbf54b84624f2373bd -2c25e90644683376f03da577dad1fb9a9903c5ee9f531a5f9da82aadb2098e3d -15896c3c727d60ee5de0ee1cefa7e4aa3a5336ad2f1a845d16bb2ee58c50d2e8 -055e3e11272224b23c689f2e7ca0051d10ae4d4514b89483ed8d97c2a77894a5 -640d45bc86b1f66de1fd24b08034e70a443cf1c3ee17f2e7c7e11da524781c7a -75a1f69de55aad4a309e27fc8ae9b1ce1c7d52f94fc84c59f37165e35f0f721a -9d3d5c3bcead85d8150408c1387e5a348d1f0f376b3cc2d24346280af119df86 -b62f46e2ddf46f38db4aeaa456accf3f29082f73e9c5f003d77d99eea3d5156f -2043e9b573fe34694910236ef3a1ce03ffb205406f3466e028b635f3ec5173e7 -482c796060bcb0efae62308e3624c466df5b49b1dfd3445233a03cff1f58bf86 -0a2b46225d1784e91f65ecd52504c8605aaf2a5dca560db5b8ce7eb86187e6df -677c977ab4d1fec4f124324bc896ee7d669aa295897fec0b881221434fae3a4b -1a3a1f1457fca374bca91885e74543ee919b881181642cb1f6c34ff817fa8e81 -18aa5e21c994d8aa12e1fdf5d6ff6726dd3d075dcd056f046ddd86894235d7db -fc11532518f8d8695ae74dfbb769528840e8c30572ad06d6ef7b0ed471db9418 -11ea9cd32b4ba6205b5c198bd528b06092df3f50b9714fc1275aa5105a3a7422 -823d4a30d7fd19f77bb2cc4c5df23202d6a74092a710a9a855d8059031ec6ec9 -4d4fc86b37186c46a5cd183a81fc12a743c7168837953d2b5202ade986b4b00d -86e41a88fad5ba0d91c150f4a7c396a02aef1ae9b96c0cea83b3306785ab3ba5 -39c49d9f984a08a9e8c06d282af94d87606d5601296456b6a0ef4ea8c88a1fcb -96cd1b1bc0e287adfd1b9aa1a8c8a7d4a6b14ed3b04b1f0532ed5d40238ebf71 -5bd8c8b032afdccd26a940b19a1340b1e93041b2265b8534c099d14f00b82fbb -2b55d8dc64691c3e5a6dd7c0cdc1212d0c80be2f454a7d8613d0cf64ac5bcc7c -64d4166bfda12bc262de9cdfc614d7dc1bc569109bb84bf469071963e5a576db -b19f3e748799d49c30612c1d7fa918d72051db6cfba44520b5b5689c87541560 -292dd6bf1f40f6a5af97c3ff71b1fb57cb36234be973890a1a610551a724abb6 -b01bb5bd1fc5191c9f99b389b6445a99de978b0d81e4baa92e8b121a1e1b32b1 -601a34dbe6cd348e56f59a92af56caa782b3b416958a6f1bb73771f35000fb9e -a55a132f9b151bea59cafa3a1cc72f7cd60952852c53379530e0a6bd4e9545bd -f78da021349902332707106bbb5d307960ea2bd811adf35b869bb210e44a5717 -8893af229268d805262725a0904bcb5ea7c17a39552a1f26283f54ae45449943 -5270b17b9afe2e0c0729e5f10461a8ddb85efc35dc8a32bcfebfdb16a0642e5c -c69e5a25a661cfbd1f3a9386aa2433b68a356f36404f96d97fff817b42a58a62 -a5fcb5653373df412068876f541169bf642bce8458297fb6a6e936d80af2004c -e9a248e1c92fb63b3e53caadd749924c390fd9f542496cf2347a3a429cc25917 -c31fc437291fa9856a7d3b2b6a5644d82e23a14d0281ed4d8f9dd687e06f23a0 -d0e8a3dab5fe6ded172ebbcac68218092f4480c7ceabc55b059877d7e82d2846 -b4f9e82aabc56f397be2c6b67040dc71a9d1f39b1a60c33288bbae4e41457830 -f8d8c96c8dce7c01bc6efd70e021a0c2d160a61b906a3ea551b7e3fe8c1f9952 -7e9583c6b6010e0887560f1c3e19e0be82efe91f0114e726c888f580d6b514cb -a0933ccde04de0872dd0e07b1a7cede67bf9f4e73400d118a6d600e13debe6f2 -aa1d895dcc127c76ff82e579a06d8a3a323458808bad060afc953c2158d476d0 -fe0725dee6886bde038e2726886d255dec9052e9ba886a318c75b8c7a218edc5 -78783ab8dd90b738b16cfb47ef8610f428a4315c703763d6b3dda570cd0a89af -4e6c215ea5395b13a5c1f0883faa2eb2d6de918ec5fef99c21758e4b6bf72861 -b684a28787b63d3ae7f1096b1c56e4862e7f3650884d0803db03362c587e2ed7 -bf5c7f2847bebe35327f1f7fb76f3cf7e9fec9a5c057acedf6245c724a8e754b -d44e028181b75ad590b3989a7f340fd59c3b75cc4a8e28b155b5da0fbf3cc358 -375edb0992206514347924c69ab28e30c707f24199767937bd7990bc70bd5849 -5c335a752c06bdd9f0520c6d8b2f5fffce931b601151b37f1be9885e41864e31 -1ea0f33e17fb4b844425ee7de31d839ad3a8609bfc9e393079b9a7891e17b48f -2e5fed17943313afccc55826cc0144c2e7ac9784261bb40d51bbd4467103f432 -865cd4b821dd5be8fc760171b49b70141ce2042376e879013edf8180d185d988 -591f9084536cbf97816291ee77255315987422c2c2489d209d78e0a2fd3fa71c -28edfc1577db5c080e7881848222220a63605f00205c205b35d0a017013ca099 -deb71a9ffd511549c61f9ee36a63ee00b0610d1b290e073b8a067dd91bf52f9c -ab53a258ccd29d9220a659e44717f84062d39dd554294996c46e69608ca111e1 -088494c6c3c0b75cf06c2b39a08172700b35d1efd0526d78f2ca5388056b02d8 -28962b456a44b1348bc4c199c2425217cee4297873ba2018259ad02cdb518b24 -023f4ffc5fd7c2b7b022d8f61aecd1e97bf78c7d0448611c0af788af2447d5a7 -b66b496dfde8522f9dc0ff8513baf8b19b51256da57159b87df032545708fad8 -0b15a0764cb951263a5008d1a61a1b69f171a5d7449f1c1d2cba92e9ae340e13 -ee455edc278caf37e5733a34a5c1b2206833d4ec3c41db8e8c760624c6031550 -7124f71f9d18399c3df46c5023a753a08ecc991b61acb6ad781cd9c258af17ae -33a2f8c5a86b5dae8ae1061893bdbca4e76473fb073cc9c5c3389e525553a879 -16c23e3fb51d65f3cc3bf3e87f97a02eedfbb928cd37a770e7e7b5413cbfb0c1 -3281f30eac6290a85ffe8ebf68a7fe77b4a68982d010a2284051861a35230401 -234b3278bd810686b1ee0c63104adfeaeb7ec79e0a4fae757018fc05fb12db3d -81e0400f7760b46fa0ac5f9e52583f2af265843cbb2ec1d1392ee68c7410c9f5 -87351a0f3247036a01080242732f5453b54a88de2d7515b5b570d94bd2b97f2a -d3894658627178dc90029c8e7131855b422c912c9fb6141439042b1df9f3739f -063d8d054258cb1c9cc893aed8097aa06fbb7e923b3756409c61b7cff54c2c87 -51cc2f11c2b7bc0be6868584f64bbbc22a1e0ed325b6c2064cc0ef2fa8acfde8 -6fa40b544ab6d2c360b6786c29b69e80d20566e1e25cbb075f9a687b428f4ed2 -10c028936c8f5e7308d2a3984290d96e5c8df5c959a563b4be5b7ce15c24d5d2 -fd6dfeee85e0e9595f52ef13aa08f52db73e858a3932e9e913f5ba674289523d -0eaaefd670f3ba4fb5a0295816fcfc042f7141c64ce577b103558455dbd0852b -730b2acb37b3115ca4ff017602f9428879e96a621a760e7961c006801c5908c5 -f291981da07820a11aaafc3f4ae613c7cb4424b0e1b797094ddd88829d5d4eff -d8613b50b2df38eef34ad0b05a9f13dac5b3c31d44c06bcc58d737f7d239ebe3 -eee1a4f981b35641482b536ee869389888c2eb28b56a5d0864a7f451f7d362e3 -d56ef1ec01fc6eb85c40c78d791b16aedf904c7d75890bf99bfef9783fdff55d -ee19cdf9e0217133b8af29fd87ad09382b8f64a6690f4ece0ff8116d44bac576 -be9a602084c63bd4dbf56354dfe69300cfcbbb99ae3c8226d02b1bef022851fd -896d83549c594e8fa709d23465207626632319b253dbb32a74155939d9fa0631 -8aaeaf9c26c04a55e1fe935fc5d21f1d798107a625fc25cb90d2ca72c31b3eb2 -c2aef7615eeb8c7f0e7f767aa672ffc236271f98c01bf41acd72da9d108792e4 -66ed133eced633ba0fe7503aaf68ebb226ed6d0e18561eb03c9b9763680f9295 -7709b653d3940ddc7703da6c3fcd893ace04627cc6bd92b65b80cfba4d0a50c6 -d48c5239a76bdaa4319fa9f0382e5ff6bb51c5a390678ef4bcb6a56a13828f32 -fa51ba7bd7d6a11405b0873d4e96b93fc693f21bada72f9f257d89630711cca0 -c3a78e2a0e5735617e77a7a77881b37d77877df4eff9da9d465239f1f2dfb5dc -9351a5dd8216e98c15cf443250b85be6a463526d8aaed42fabc1cdc095ef9e42 -8f956a2abed2cb7fa127f49bd2b5accf7ed80cef4fe96fea42c0ed4991bbb734 -596379a991607836c6ea74bbc359ecf2eb52d015910b847534a519cfc32d5216 -9510940a9ded08ed2a83fe52ee1275b05d19666994836add094ad38cc0a3e081 -bed96e0cec2d8e17d51bbe3a63a34884da909733ab092c9ce8d8e411ca3b2831 -a022e5a3fd1abccb902647e484833b8181d1b9edcb5448098e13b5ad289c9aa5 -8e4726f0c2df0ceb089401871c26c7ddfc5d5cbeeae249871ac5604056b69e96 -3c1bf9b8ce006b701c9523b5b9b145be6f6c7b9e513973df94cc2d37694850ec -e54c80d2ce79309ce51515d2ba0d44855014654d1a999cad1a5e9dd53a34e44c -9cb32ea91176d5c3294e3064016e8554b9b6c6d2e6c03b4e655bf2a7957d95ff -01cae1dc020e577abe5775f656caf198f1073b7bfe06ea127ba3b1edf4784917 -51d41bea93204e6ad3aada6f2415a8bcd5c987b6629874253852ca417bf6a259 -27b0e7f34e0ed0f9dfbe1be2c64d805c2edf0bd62c77be4224613f2e788c56eb -0dccd0a467bb30d529610944338ea0b832d3ecedd85ad4da22ea2b47e799a1a1 -1cd56274f7dcd9a66a32d8509f3d0eb4c4a160a723a9e71f504da5549eab101c -70c73efbf1ee0805c0f8e394f94f3e6623eb2fb5896563404fe4a7f0d47e802f -698295ca19ad813ae552e8dce8d6f73a7e676308a07f230edb99902132ca5b6e -0e95558764ff3f6f854cc29b338a5e1bc14c9468b5528f5b5dc8bcce69bcd0b8 -e295f3ff96dff56779de49a1157c7d1fe777e3a94cf95e3c707d6c1fb41b279e -9abf7b4077fe611a1669c689c1d9a81c933e8075af7b5b440c24318b26a1206e -92266a64a0577abd20659d83fbc433621c7a01f74c6863d43b02651ea96fd0a1 -e1a553a05978a4fbff7d591254a5e3a2642c0eec9b4a0988e4aae449964323b7 -9bade117a3ce68969f62944d027dd0bf7ff0f73b0283c8843e9a3001bd096baa -f61833401353462890af71b05b84b2e8a8a3bce954febceeaf5c10ec704a68ff -24364e70e1749dbc2b1299887309e014f82b805c37aecf05fd413220403e48c3 -3cb49d0c265ec2511211833f8c475d7bdc3959c3378597773f02b5d41fbded8f -eb58a06037a79c3424e56d48a1cf82672026b3122e379a0012322a325bef16b1 -f95958c7b22cce273e8aaa1e8e40978abf5626000a2563577e164b89e24e4d06 -483f503454a37fac420c7945ad53a6c102f1713208c99ab6ccb0bb3e50a70b6a -38b38bce6444a7951cd669008776a1720790b0b6722be634f90120f42e3b5cdf -9007d9b8fcfeb1c2042367c5f7445e69bbc19cbea5b305b1bca2f6398211ca07 -96d5bd57d23639b1a7d7a5f50b609dff3c7622e922714dffc7dbd6b820460c67 -e8ea1c017e57fd172fa3cac1678df44f20e718542342847e33698d382ec37f60 -21b7d901ca384beec87374854e4a1372610ef8fe5c69a141b860b5a9c51af0be -8e33cd57dc6f1d2fe672e72fd0f370cef74a02fef6a0e6303b7445efa72758ff -b98b3549de42d525c166c92b652ef1e71c92b0ed3c1ba2418dd13a2d301ea894 -7b3d54d469676944a58f147851fcd8500747899ec3bd885f25e1631a3dedd10b -4eeb87c74ac62e316d2ebd3aa0ce027e91b39450ea3e30cb01baafab02ed0567 -cd83c482d6e92d7835fe387cd6c050d8f4f2f64b95fc44e1101d89e112b971e6 -61d975a98183617bc942f425b837e4e868136b17ecde0e1380ce8a52b95881da -2bf547a37f38c603e43ae53f32b5a347e4b43c0bb86d8aaf447bb5f4c983616e -be1a48c7dc636242f20e876baef484506e2888f0913d8b76b1086b60409a2a03 -e82ac9970d6c120a6621bd68250d88e95c01abb861af559132e6d9b8f5abbb66 -4152d65779019e678cc86909e31bee3d13a16d764998d94ae5df24f02fc8153d -72b41953605ca86a99bc3dd05ca620e7a28d51beddff28596ec8eb878c09c041 -74baef8d2fc52b3b0c55e95b7482dde018c706a3fb83b945d3df90cffeb1380b -09c4576040668f537083afc50a1e26d28c4d58bad52b17964871210ecb2f148c -daa07db5d3780ecd1635cc5d5dc23867a13e152872c78e20b95f11a4afb8508e -813f4c580f80546b2d5dcda546a6fa4b28a906511be9ae09f3adf926fa237825 -ac9f250d275294c5f21466af681e4e61ea6915d623c7d48837d0bbfd7f893a2c -d347cd7514ace7badbbff683aa9c6eef46d1c830afac64a9f64b95a6fba4bc48 -a33135b70cf12c2eb19c2af6a45b9be09619e4b89f47ef4b9d3d234466822c1f -3ce559a85fc52ac8aa947f981fb5fe7605a373f5484d4929932590eb79a504e5 -ec35c263a30ab3e50ca900c2488baf5f1c1c23cd42d6401bfd7b09172be16f1a -df93f41ab0b4465a4f1e2ab556078dbe76729d69434690fec8f59894a77d3b8b -bbd3a87346b6706fb127da2f6b458208befdd75d68207bc88ca1f2e36b65d170 -922071549c382790beee82ba0dfde07d7d5f58ebd02b19feeaeb6aaad59792cf -461d467665cb3a0cda48058fb5181273c8632075e2f11f8de7181373a9b73901 -a816cfde3e2029a04b1139eb306132f989f4a2e85cbebfdc52bda2e88bd8d1df -3f331602fe0fc1802abcb35b8e6dbe5bff9740a4af24077a725d17660fee662b -209db93c54baffeffbce92a9e2e696d5f56f5d7c81b29cd00a59ccaa389183b0 -ae2507f0ec1a9e224097be40e0db4c8099a96a858425c6a680365704f39a05cd -4887bf94f49e4f8efacdab96877a18272900237356ce576042dcb16e5851e1b9 -4fa0ef754cc9d84e91486d771871151a5983f158b7e05cecad73ba064c258397 -cd00cd6b8cecbb898c5d4609531d387ebf15a5c38b80efe629bedc9314736e90 -d4117c763f18dda7974d519ef1bef9824934159d0fe29edaea2173c69c56967e -ff9c37eea1e8b38eaed338699c6a3763c6353dfb2584f6da9923ab74b18cbe05 -278a5ed2936b193c75c986e8bfdcc63904a25ecb4a04e998ef8789e9c3ec618f -1fefe74fe5a23d368b563579e318bbe956f29d191748ee26bc883bec714e1f8c -88c98dc012b95385e894919f1de5afc62c9c513014d6105baf24ecaf88275909 -4d13079cccc3f103d6751b4f79b785577686abc760a6c56bf34db0f2ac3d0b82 -ee63f9e750c7790d7a3a1626d66e70d26617459a8103e08b6f14af71c017d3c4 -e5b4450986908ec345af9bfc4d650cf35f337026ae940513a9b3de95df3e16c0 -588a59a7f2f1d5e2a418410b5e2fcb4692998921834fa44f30f2117228005347 -9a3a82341434ea71f82d87e1bbcaed725ede9f6001ae4c8651da9afa36b3e6ef -07a8b311afe1bda98e3143c8e2417fc188bfd48627d9b6aae94f510054dab99c -12fa0d5d73069f48c86391d27e37265c91ab1c06ce4d4bf0af63db65e16e783f -7dc649a88967284c9d9fe861add619a3ffde0a31a5719bb456d1ab8010ccc8ec -89615ae875db7a321398ff923c088a6ab51ffe2fd21d3541474d79f07e536709 -46d1a8c65e8dd6ba6f19410b76ee7b5468462b9aadd9f8ddb68c32b08b0df0c4 -f3b909fe714f453bb1ebe914752c5eb5f68377a82e5d5b90abc19402bd589b43 -05f905efc12878733902c54391c267fd81aecb8cd692aaaac3218d34a4c1612a -5aa9844d171e6ebf94f4d8900236e8e27c5bd7460fa1e195c1077da5918afdc3 -90abc6db247885a42158c3cd36ee89d82cbf2471c6daf51120ba3f6937d537e9 -370af7ce73f3b50b742ade8264df9288120dd74094a064909c00764e9347d2f9 -a3f92bb53d8263053a3082809e04e9bc7c9f3b8a7c97c5cc1f9f886115676a18 -cc04c656aa33535e5893b8db3ba5d627f8810048b2a7a28e6d1374afd6af6980 -ace96ee05d890339773f6dbdc92f2f840b50770213bf6188dcdd1bad8d527e71 -9692ab1dfc47e7673c175a1b9841d56e2e0b30e8685b01a68ce561bfc6463a6a -d34557d05276f7befbc1fec7bd56a18bf0292cd25eae57450b3b590e60181258 -4b35e2004e7b1e27f3b26d7108a03c94dea662b7342e38f8300adbd92261809e -bee8ec971a7f2f59487c89357580f9aa8145a1825573f037a0ade5b98be24a86 -530435bcb82e17054f67fa873946c732c8840b9eaa9130bbd360ef27fe72ecfb -b421627d2d52578373ca7ef9fc6f850f4b7f22e6501378de0a9dd56f5f5815f2 -7ea81d8ee3a4f7b98e59ea1cb3159f5816fa703b18f03c5b0aafbbdcc979df41 -7258af2ed57f7da62871c0efdab55fafcbda5fbef92ce65aa0ff37b92ce6c953 -a9d92a8c6e02b8a1f9a9f0c66461c5a62097e12e9f656c87ae283e6f3b63ed10 -a6a723316b9beb28b62a55d372b9a22bdc669b51533c5690e593f2a409619b2a -d73655a40a33e83c65e66f18a40c8e77b048674fad760b9a7d86621181d498b5 -59707d36440af3e015851ce43cfad5d1d96e9274ad714ef46cac1a02974245a8 -d25d894caa256c320af31f954bf574dd95bf32e5841333063d32709b93b009fe -e680d5b2bb5f95275d118a085e98506d0272fd1b8220a2343979bb1467f9006a -1f17b2ae2941413683c3cbbaa1c0a3aa55193d46a2573f2cbb8b7adc7e74d0d0 -135dfa18405bfaeda37f3d4787a965192ca64e4462a0c701de5c361088b3319e -7b5d19a14337068661abc7c36002ff4dbe90e7b655b8e06bd70e283cad1c5d88 -de63628c638083b303ee6b038836893707f6e1121ef56292a75bd9301d987ae1 -ada2acdf61ef74f2b3dc4f87c6374254f865f6e8f6c0933c54265e9a5cc7ef62 -432baad5fa08dd485c3b1d0e75ffd5180e99df967b85861d9710ff294e93cfc3 -7ba6c006164690c10339aae9c1113cb48687672e8a2dd88ea9af6d0cae13ac05 -9b61095b999c87bc3c80748fe6722bb76818b2339223dc051a4938f435b92629 -4395dc3d2b9b3a0e370363535d960735fca855ffcba0aefe767732f7991c5977 -46fb683b9a0c11fcd6a3eb370bb56d6611e7c20dfa1d9fdb3b90ef31bf0a6aaa -d8bee6d7ceb116373e74f072d2c61b646f0da308955829be7578d1909b03c4d9 -307709be75ab3d72d0864af89bb713da0938f038ffb3459b793d06bb37d6efd5 -5d4e755f3403c32c28201fa5f979f51f3a9d4c521480e58ccf06cc60a056a5b1 -c48f27872ef36da126d580ec0520ee9d252cd27c207b6a12b27b1861ae0debbc -21e549144604b277ac8e7b4caaf5f7220d67fa9a985001488c128e1a4c9ebaa9 -de54a13cd4baedcd50653b73a6514ac47bb5411d8094854212c9219caa4e4c7c -447324ab35edc9ceeeef505fb71a2348c3be2082fba20b8ab572bf9276e84e2b -0b328828eb0c636750dc104e741c5df9caf3808a061484a23dd0aafcf5bfd1a7 -319c50d09cb55d73c87d3ab59e74e29de58723ea32cb96a0b497e2e530b54b9a -355a27d988ef4387d8260863e8beecbcc27e4b051961aeffcb8475d7da9bdec6 -42d6a55f06ae9af2450545811fc6486c6be309955c53121db95ac255263e93ef -3adb9e07e56b1133c491b550a511204ed55c8dd911e2fc0669c90fd904267f0e -79d56ddeb72895002a7f795349da2137b6eedcc300c1206dbdfdc3a52f71c86b -8141b63c3d33957c66a9e074bfa703ba2344d802028d787878f9fea87fa9ccdf -f4ed49f4daa6e6839fd64c91e60f99b8e10652bffdac46169c413a36e8105d8d -9343496c1a9b5bc33cb5e573166d4097fb4f3f5517b38f9298de2ac6d51121e2 -0eb9f07ecaf4d70c56a5280948c67e506e47fe9d3465c7cd156e5768b70f694c -57c11c80e7a4d1417c25690197d058d02216a81d7104ef27003dadb3ed10c742 -4b03f54aeba13d17f681fee3a8797754348b134d89572a2083225178a9db4466 -ababce914cf2777d3ae7effca5f4973eb2945672c0218c420173d8d2fdb8d60a -a1b40773a74f904955e7991bc973d12eb5bffc4dd0032b1a1397cb5ba3b431cf -92b76b1f7bf1f9eec8389e525553a8791692a9a9eb495822684df34bc5209953 -1b38bc4875beb62a391a8e0fdef5b0ad35190c44c782e374e3ca17b9f5e2f5b7 -c8566acd0df90ef22b50100f501a80c17a32ef4eb28da320c20ff407fa116404 -aef81d37037013406eb51aa024605e01257fd78c625bd120d4bbbed7bfd4f95f -a3c3088a0fb237d44fdf4aa0bff28254063416918e276e7b68c545def20f896e -509cdc2c31b65668200637bbfa587b547b77f81bad98ff0b70805d9c6fd17abd -f107e1d39d98d9ba1a7bcdf98ed607a3770508ada6bc25fcb63f5bb642a4e028 -bed525fcd1a9dbf1e1520c5164a53c0ddb1b3974366b8feaaf766f02a4085f57 -948854365bad4f6cf18fc871256f9ba3c60a79f3d08617f6a483fb6b50ef2dd5 -0755b2b824dad8935247fcff268b7cd152cab7e7a876b381491589f3d4c65c50 -3353d07c94786db7346cb89cf5350b585cf890fde7a891e7646e5fb912b71db0 -10e73de1100848dd1bd100d0daf43c4bef2b43440513be6281ea0359ae0be4ff -a861b07d06a311b97028daf2fcfb14eb8e8f713bca854befa5a46172dbc0dbd4 -448a8c20ce02a71d33457d4c52704733b90b005b03fe89fa90b73e747f273118 -4bc20d38fca2e51eb0d5bd5454a23e0fa6616a330d61e5a487aa516daa6ca1d7 -b8cfc260bedbfcdfd3d3d0c115359c73a67c1921df252899298bc9015a6c96dd -e70e6dee29597cc7c111a565a6877ec4efe425783478bd79ae97b5d1bac5d10f -5cf77c6c026966155264c7ff1dd30028f21bfe0b7948edb1710f30ee09747272 -81aa09b166177f5e507ce6a09a6368505a1d7b58d5aa2d63dac1b073442be702 -9b2ba6a5a6073bb8aa8c6f741e1b135a73675ef22ea810435f4b1a899d180e2e -be37106d4db6ac2c01d2d962117c4b6a62b1eafdd923d89cc830c00f4cacf98a -3e02d0863389d2dd73db37d8af50cee306da798989047e47c165d47926ec533d -5e1f5fd0d039ff2fb3e01c61509b3ddc62754cc30b7946c4a705d56f16730b99 -8a40275da604170fe8da1f8d8c5e4a393c701aa708f916fb66939adf2546097f -2ad583fd795ad2fd059e9450c6df7be3a22f36c359ddcd8de44e1106b1edeed8 -65e317c06382f6473e3d15fd731ee92b39d3a3dc42c9107ca046febf2ed214f8 -014ea9efdd078b94dfe6a53e5357dcb99a937583a89b90105349829575a5f474 -ce7519336dedef19083bf6d9312f19c78f09085db567895a10edb5a6cfbf3532 -5cec8e3db206815af7bd78c8dcde6a910eb9232eea4b9e68684be8083f335761 -916fc1f64c649fefda1b3fd499e851cdfa7ad22acd535a04986f35b62c2adf2e -74519f043c7c1864c6b3a9d5126fd87c105f123711b560531f46628f872b085d -ad00961bf770b386b416ca2c5a738ba54f7a7a2e234dd97b2918d007c135aabe -9ba541eaa0d19c216b5a6f245cd33a1666e26bcd5ece41bbd5bfb3aea9511bd7 -da27388e8b62f49f0b4db0b190c5dbb7bfdb1fec5a786bf43783cbecf09d8056 -15ce4179710883f8fe7bf4fde22e8a7b46273172e9a4751b4fdf6ec099e8d685 -32a4c9c4708902285df499de4a6b0e143d72c13b747461bda19f5e3a34f1dc8a -96dd2194b6083c75715f9f5261947ef0eb21c496effe37f407f45c5f66aadb99 -cf42aea5fab6694a64cd89daecab44bcc134280a3614f02c432b98054ff8be39 -7cb464de7b1ee896f798a90377bdd07afbc9394ba931c3fe490d11fc60506a3e -476d86bff5d3d850683942744d651355cb081b39d8d2147409a4bbf3ec699da2 -d79303ca40261fa3b6ab5b17ff331eb3d9f01896590905a2c7841d1f4b1f85a0 -b4afeb0183a61e21958ab3f541d321ac6bc81dafc5dc633cf1f4231b0e4dbc9e -bd3c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F116_0 /PYRIYB+NimbusSanL-Bold 1 1 -[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright - /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash - /zero/one/two/three/four/five/six/seven - /eight/nine/colon/semicolon/less/equal/greater/question - /at/A/B/C/D/E/F/G - /H/I/J/K/L/M/N/O - /P/Q/R/S/T/U/V/W - /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore - /quoteleft/a/b/c/d/e/f/g - /h/i/j/k/l/m/n/o - /p/q/r/s/t/u/v/w - /x/y/z/braceleft/bar/braceright/asciitilde/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section - /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl - /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet - /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown - /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent - /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron - /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef - /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef - /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef - /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font XDVKOU+NimbusRomNo9L-Regu -%!PS-AdobeFont-1.0: NimbusRomNo9L-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file COPYING (GNU General Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Roman No9 L Regular) readonly def -/FamilyName (Nimbus Roman No9 L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /XDVKOU+NimbusRomNo9L-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-168 -281 1000 924} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -currentdict end -currentfile eexec -d9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae -6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27 -bf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf -045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670 -0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4 -1b2b9e8f09253b61177e95ea219474796072f4b363fe05fa763773acd59cb757 -ae119355777a1bfbd6751f24f58ee0133199ed331e67ff4101e33040d6628f4b -77ee87860b8e32a4923e2c1fca43cf544a5eb1bcd649ebd836daecb23e3a986b -9bd8398e690be6b48bd6479823a435defe1156284048c4d49b5a869164485630 -3810995159568b3dcf3734b11a3f25453e0e8b40b080c9aa94e140a58d5ebb74 -7d1e083dbe00ad5498c3b19deb502dc63d69032d8d31e6778af4713c30404059 -6a862aeb8cf607fa52a9348e3fe23c1a0296ddb41642aacd6aacd2c6d905073f -98b58ebd11af774beee32533fa19871148dd6db41f3a8c499f25f37cf3955eb7 -bf5bbdbe984535820dd33f60cfe7c2b44ba6e10879b3c65948beed00a84b093e -8e4ea07e34955aebfd0ed462afc5b4b42c5b8be85ce0ab1b9cba42969bbf8a36 -e2943b1d9b20f6ef3416e226763f55a196ca0d86788a6b0ed38ec5b0124ac901 -f55f2f67306ce94aae5809b2203bbb5a8b185b66b2f8a18a456d028f62d8e17f -4cfccddc0743fb02567f0294ab77dca0b9708b262570e3097c76769bd590a09f -ad1523e3bd1ed5fd8475c0b57b95011759d1a55c70b39970dccf76069cdb9690 -68a4626bc863ae1d579604011354cd3ebd51b54a1ba9789f7678546bdef64c9c -51cb6f654c25578c3b4b7c2bbfad476423ab58c57f48b2a54c9d44ad356d106d -8186a85f8578b1735610f6767883701431f5a2503341005020b639f45810440f -f341eda457f8ad2213058a3369016452185f849ee25140060264a04eda7e04b8 -afedf6924f2da0adf944e4ee346e33735f6e78691634e18c4179f28fdb673ec1 -6a2b093eec51a4611030ffe1d4c1a1456e3ead051b01c94e5d9ee94c855cf31b -b8e544e687f2e2a99fd8865ad44eb929430ed39ac0985e4a5c382e16aa2d6ec3 -3b396fe9643124dc587fde09d3d867e9efde49c283dd44fd33b04ba4eacded81 -b3e7d3f7c09d565a6412ac30fc8e81be8821a9031850579b02cefe615c8e7c22 -61a77e73f5382e58ae160043a5defca7470ea62b90e0260faaf5a97a7254b091 -2a187ace29ac6adfa49c7d6f35cdab93ad32553137363ba2f0dcbafd40fa8ffa -7747eb9bb51dcd01291bc073331531dbdcea7db24c9a0302c9896a1c2cd0191a -d88b33d0b0352b356c93987ed9613720cf2be3b164c6a4a3360bf41c9f178831 -62fb73ae514d9c57675572e8c1f93313fbd1b05302f57bbebaa2e76feefea0b8 -9c83d511164b53b481bc920f40d59d152bb1f5674344801f0dc7e71ca5de4e24 -cc79207c66d0b692fe7c1c258be75488f2a0bfd5c81ec5bd0585986d0c5d4575 -82e9ce40b7477b87facaa826ebf147bddb1dc60788dec671c199d18dcd2ca48a -4653963ca85e8944074c501c8143685306d4f133037fea449b0d1cb4ab3bce89 -04a311f9410984d754a3509f51d89a4ef73ffa7f9f3bccd80daa0a34e0e10912 -b7897005607925758237d0bd3b92ac9669b1a1dcf19ff0864f84a993bf7cf266 -1d1b3981fbc5e4fdc3a5b70bd79bce35c6fcfc0a5aca0006433bc0c120073e96 -dd4ae86f022260fcfe119fd4655c3bf00be48c470b0d86e721afca140fe6bf31 -836d578fdae49d71676c77ebe2d09016e1ab71d7c681c8c0565cff9b73d79920 -1ee2def2f16d65647262f96082dd5c44fa3993d3bd1d10c217ea56b73b38428c -767dd9b71530c5f01be2d2611cf9644c28f3f52fd814e463358d70de7bc6bafe -cd377b48633d0107b05ad2472ad6652a1ad30c39adce69ebde3aadb1c5fcdaa6 -96fa9b3c3e63a7c4dac907e3b5cb7a3713505c5ad53c8dd8710acdb3786a919f -b356cc2695cb227540a5f235ae1ba3c6f3547ff24606651e5887fe889cd8913d -de9f3b04019ce0d724c1f6521925bd4fd8154f6f4d640ff94a0b0b027e483f9a -bd1188942cdff486f1a234fdf8adeb552b7e7e10aa577ed3d559010aea480709 -fa1f644fe5b7ca3479599a7e708dcd3ba33a6b2d640f8e39492565965e3b7c74 -bc8c48f3ea9a6048e86197146abc446788a3c83782f797cd278ee1b740627726 -3e1703246bc561faa060de93d224ed3eb1bf548892bc64806c4e9186a2b276d0 -fed43a3021b5a54530de20db8168d44e1947cce7fa1dc8f7927a591d6798c5a2 -b51185c3e74bb6ac782af6f089a4204b6379298617c8f67e38900ac231610ab9 -79400dfaf270c91679c516d2062b949a8d91bd5c8c1a0af1e7401489ad6e8101 -b9103cb5f50dc53ddcf2b32afa218289e9f1b5e29e5c5a2a0f67238558343524 -78cb11a68006685e13f8b9ae54732c180b4949f09839b935b1f7a944f1d4bd84 -a5074b583202cc4aeccb4b8e18096e258bff705476440b9864e746f18703321e -5d5e2f8ca5e2d07b195779f6a0d6a731116f1a26a484fb0d9931dfaafef53b41 -e56e00f32e3952261c0205afbb6f2afaffee7cc1fd39b2e108841f39dc8df97c -0f776adaf41423b47c551d48add01398dad167f4590dccc3106a5a4386499462 -78831779383abaae807b3b03b5dbd4b973219f2d1d19369889dd72e446ec95e1 -37017fbf85f4064f81f27cdb4f9117be248a8d5a65225edca22e833df98da456 -98a428edafa84085c323399562865aaa8286eb5dc63dad6839b597386e0558d2 -11bc45d66e0e60a86c968519b8b305d5ba7ebc2fad7cb5004559544330668c1a -7b77dc9762baafb4190dcc1aae670824824e00f023c574e1c017e33650e24fb5 -d4ad701ab8d93f0fd91867bd21299867f966e93cd621ec0332fa04a2a691ae0b -179d1dd6364166f94716b69027d8d0bcfc6622a086dbe92198e5c625699d0bbf -a9dee06d20554b4d82584108208ca24d7509c4ea30e71ec44f014f8cd97b8eeb -f1322fd5b116009584559a3b0574e24329aef35d2964756d50ee8a0fdae1be91 -19e20fb52c3437ef677f37b549851cc9bb60c04cbee8d80b6f1442cd8676b0e7 -bc4b2c4883d212135bcde4fc15eff6d20269a6f4463b12c214d99e68f113c5c6 -7c2d25384d8e7b9eb31d79e2c4607421389827e2fac887dbf08a43a5ddbc5797 -797a1fd10143a4e97ad79bd0bd7f3f1205130061a6581a4d30183e71fe80d570 -42083823e3ecdb6d6352b6bd54413a9b6bbaab94a76d12ad93ff99f9433e3ec6 -bab36ccf8168cfb64c4b15987379cc129f6c7c1761df5d7dc46e0996e5588298 -b329b023056dd59f4befb792c4e43fa095d63df49b6e25f821b999b56ae05919 -16346777c2579ecd17b5a87f1505f4686ba2aad3045cb414cc65cde98b92c76f -20a9be4a42b77e077b9c00eaa3914709c3fc1a16787e639a2c7fd9a30d9e8ffa -1d5a900dc9cfd5c319ec34570cb758bae3a342d936a30915dbd5160922aaf241 -74c014836eb17224a681c1d7cae7fe0d0627bd5af08286c59e2640cadf9e33db -6636197d955a073214899ae76156146452d063a460fdc5a82df0eafe9ad88a24 -905f7db7dc8097c0d9b0f9319aea0aaf7aaed4a85c93979445e8d1e5a9bdd3b5 -4d74320a1b797ace38376db0b2f6566432b8a90ca4fc7842b90623603f7aa2e5 -a2f0298157822d42f334b8f9f80fb04c36bfde0eb1187c1b15ad0666031c5c09 -62bab12d2476f696939130c5b59fe70b61320e4510be29e04f13236cbcc78a8f -93bd11c24fcc4b45405a13a65ea47c13be1f82075662c316b4de144f89beb6aa -cfb84f0d288c67d488faed8dbfff92be9a24bed443e9db3f1deab63ae94eecef -43ae1d68455826cb3a48c456d7e9a849a9822c77503e5b9f029fe70168831ea5 -2ec0c2c4471627fb5f2d03bdf8726bcce14a8a162bd9bb26137253ba8b581941 -e759a7ca7917d4244da33f45df6684d3dc361bda88b4a0a02e5e55a1efb0d851 -b4e418bc6a0e213172a08b7596b1fd93aaf111f2778006da546ca1db88d5db98 -4ae9658c1d31adf6ecd3180c19791c85a0ddd1547fdb800479a6dfea56ff1e11 -9b3c1dc388c0f372a44712954373ab66cc420b2cc80a92c2fa011d91c441bab2 -f54dbbea462e186e0617b2f3921f1aa33dcd2c1c5eccbcc37dc50bc29d0ffb03 -e45372aefe3b44d8584035f3bf5ad94459a65fa170516c271b722a2f08bd241b -7816ae887856fef57292179987b26bbff4cf1da6cd2bb092df2f6ae3064d61b9 -e7bed1d13e534b991610a2c067a1c107ec6b0a8dfa6f6c4c2539c8747ad33057 -f5a9d083a689e34c8ca2957263786c1f78cff0347ba42730544865be79b7c461 -7ebf003f8cec1e4b6af75689fa6f6dcc317c7f6975df451eada5382583a1d1c6 -510ca60fd85e55c6e16ed39a86dea378d6f41c00beed05ff2f9f1a2219e6838c -819e9576e4ef216802c4a913de00062e70df8d83754166a27708337ec6b8a031 -04a426a1c31371eaf807c8d638d16e6515ef0693651bc2dfc870a1a7e340d504 -be0feabf24b5bc879e75801d188856be2225a82eae90a792fb4e0d66ca0c4a64 -a5064e1c9c2fbe84b5d6578c2af56fef340a49911a0a346813fd5da9e694726e -a0dea4f42008ef28f8d6ea9f974327fe71889fe76945b30fa99c4c8c7bd3c40c -ccaa4f19c0e0e0c4cc88611829bdca334cd69463228c2f83e1467125b7eb3c9e -812c62fdaf831871ea0af75efe4c81224eff156fb21bf1a27123d020beb9e1a4 -d72626ddf4dfd474b98694e87ef0691b71a8aa4d346d03eb56e0715d8f6148fc -424cc472407f00bbff0cb49d05b0b5923821fccfc27869a85fedae1ecd60b31b -1c8e8810879809ec069ca308454613df0f673b5516598fb5b822833fe3e0c0fd -1b3684f7a66ff0f9132de78d198fb6dd459c42208ddd13ecf433d4c9901b0aaf -4c8ca7685711deb49d9a2cfa4209a0d058aa8490963164652bbd3cf858e53975 -0af2b20db08bad60ac71809271597b65071e7946d81c02d8e8eac13adf5d5249 -ac0b42f5c602e16b6199dde3666d58abec0c1485ba6ba71086c36481229891a6 -89bd1c4d67e91e5ad6d75ae80420cac489198821227c1ac94954cd0c94098773 -ef4313cd8aa49aacd7d34bec814e77f9aa794e57bd14f678a5f3d9311036fcf3 -d39a94b0b23b982214469f645fdb728751627c28359d6613978a340b2b2ba9b6 -a0304f87a77389a09a36a660cc983072063683920005b2434951a9c8ff375cb8 -17ce6c78b6991ab5a5efd7dd4e8b3171133da1cb44af59bd84724150d09f13b4 -39a1046904d4d3ec3d2a90cf5275a9527f8c3c62a0ae24a60e9e7d1765eabd75 -cdfc9a14c4043fd34ea73afa2e08cec40386f048879987699fb8123ded9709a8 -75b020943bfafac56dcbe4a2101223949b0179cf7de6b550657c91bf3116ee7c -66e23e4ff64cedac326536ca1f75ed1bc7113f0267ea7a26fd44728714e2a1a3 -13e88daf24c9a46de29e3767648e961b346ddc72a6724a0857078c9a2ed39df9 -d17c65b89136a6cc0c954e0c46e9f23900c7ce91ae71d74237ea1128637a673c -f6ea0c8286ef99801cc6d45bb780e21c5a7464d16f77b45236bb9819ed3a8c4c -7e1b15400eac8a99511e77effdceaf8af6cef034b79862eaaaaa00bd02f5667a -c1a03c0188d09fe4d1fcc0b0d3354c880b2943b9666224238db22257a3873b36 -be9a8a55e01165f4e8d3c8eb3521ed57aa834a4f88b97f2fd77b3b3c39ae4bbe -869a24a4714476b3d396eff67982ba0a8f9ac34bf7b247951c0c241a01f347f7 -84bf841495d76f9fb2ac130779145677c799a07678eb8a3ea3de9fd00430d46c -b1b3b6c392afd853df1d0bcee9a053d6fecad859bb9bad0bf186a6196b89fcb8 -44799928b4da77817a8cd1c36cf9515090cbf63f373aaf151154a769cb58704c -2c0263028c641e1ae224235cdb17d89af5398f3d1daf44254089e6b4db47475a -1fc228e0151f244b025e5c14411c8834486e483e4cb4406752788fa99336d980 -a7a6e6f1afecbd87f2c615880f3a6bc21524abd7076eaba6ea1bae0f995fee85 -f938283c60a7a1dfdfc053a8353051b18bd03129dfe6b472e73958d11467aded -ced7829ddf6e7879dced36391a1d113cb87969b0465d64b96b5360f774a98596 -1272aefdb74ea23d85c8af588ae0f6b43ec47292c880217c0ad03d87e1cc22bd -8117ee06e36394a8fa5e72cab0825bc3af8bea7256e7f8abe7fcf57a38e38df6 -b60d783d56905a5d7794904c0cb95e2aa835145062e022b159fa7247af415890 -117a2c9a99674891b134760def15804badb8d4ae414a1410886eff8d5284b042 -9586db6610fc1e7c2ff53f19060e6b43dfb0d8bf8dd94efd5105ee20ae0bddd9 -58176c666d2ccdbaa1a3b0a8cda0b452409c8cf61b9e085d9a9164b7eac06dad -f878ef8ff5e36bbd6414aa86e1d73d211175ab042ed5ff72030b44aba32b970b -917282a1d69f3005b0a110f90942ea6f9cb2d9eb57a43000c48bfc2af2b572c3 -f8387ab21c90facde17d772ed98280b44061671ea4d98e901f33b8a8bf0f97a3 -d87d0c4d81d6e29d895f50c1552fcbef2df93a75e3b0046c794d20229d7eae01 -7f230053c4c2f463020d060b8552cfd6463018b4c03275dea0ac42977b3dbe97 -3d7efc22c9ddbf499f2a2358f6287a8c9946fd16e6e998dc763b5abaa6888484 -c2430f2fb9f2b0ae84984af32ba54cb191274f7b85695f5faa3cd5eb154b0f1b -fa2a0b9ae93d591648d33b6c23e27f9a18e0b8548bf1f45158ba7c171bd1136c -d045e9dd27e4f23dbfe5b29a66695628a87949cd0d4d15cd066916eeddc6cbc6 -f0a5c77201d4cd352584ae70d1b8e4ad2d5278a472d230997c7c03d16cb5ea0d -d04df0bccfc7a277a0ec9516e10134a9ff93b3e6267c5ede4e5b848bdeb76b87 -52249e458b602c175ce8717e89da05ceb850d2538c340ef6142f0b5cf5906f99 -c271b6e5b9e614d64a7c72372835ec4a99bb39a7aecbc41d021118dd56d21326 -c818bff4de332c9c00e96755e71288117c19e3b920c23766f249b1abf4ebb173 -3f9d38f1772128cad4514c4c06fee49abf401feaf2368edf5b4f78fb13336189 -5040b953d2ec56876cc72fdf69ea7692da01a508c2ff7096e17d78e2f61a04b5 -400d9c28610aa8d48b790edb4bd5cf08646923b0d5a86178956bf7940f291242 -1c4f3bc76fd991e36e18d40f813095c5b9165700cf94403b23b2b7887458c4d4 -4a4f160ceee87c7d50fb4ddc3d4e3242d9ac170b060d472889e553c988126096 -dd343532e74b54d664d63141b1eda0e6ffd1d82ce4d084352e97f09e2e05a17d -cd8bed5a8adc08494e5ba8b57ce522758413cbe5e5d74e6d3b251a6567fbea78 -5d838a9506c98691e0ee47be4421a95e6b02e8c66aa06f9c88b0ab94a1a32660 -fa0d8a24f2d5873ac94ff8e0670b96d4eb007ab89f1c77e0f1d1be46155fa2c4 -5930779b70c9a6d559a3646af2b83590b2f1ac3a3f1c9e8d465e145c69fc07cb -5df5093b7cda7f1780def8060d7daf747491b0486e7ca427857946d2f3d0e22e -018cf12b04b2ecfe3accb88e5e52dde2d9118a1747917e6a9f211c1d210b2b15 -8f31adac46b63cc00beed35638a2e8155805bc068a00b757d6f9dca2ae540883 -11ed782d682b511c557ab8c413e95ea8b6dd3a6c12ea9716d670fe4446629890 -d14a1ff76cdb4eb9e2ff314ed9094148bb33db76e4f6bbd5b6ec76aac13c6660 -38b1790d9c6ecf2f33b6d4ece409f012d58a75a1a4ef5e580986db61edcd97c9 -7ae81fa20bd7fcb07053311dbd6f3f73077ddd3949fa6dc327ad2fc056a8b798 -53b22c193126e73803c83fc4b7bd9cdc54c2fb1f6353ebddc027d3925bd32d89 -219a778cdc38e5f9621b41a27cb8fee8ffc1a2fc48ebd25828373b9bca8742c3 -0a58b2473a33b4805383415deeed7197a840f6c39267de16ecfcafe7d585f672 -b5ff6bb9d143e8e615d349ed779b847f2b5930aa83b08792e193d64aa163a090 -586a383d4ef4bc273f162164154d9abe6e68e23078cbbbd0a357a771bbc427c2 -3b6a3f24401e31edd9fd7091e8849c8e37d83ef396dc505f8f843f4ef305c505 -53776af2c088aaaa5a5efc05258cf692b579cba82efe7dd3f3394d985a5518cf -93c258a168969d01842a624f56b4a6e50fde64083aa7cd0a8f3c0eea6e6d9a06 -d24b1f96d34d66c2fed66cf844b490b537561865299d18dbea55e025643f78d0 -2419619759dbcd65ed0ac4a2866c61f37383902b4e1665b2fd9414d348b4d41f -ebaf2a1e4bc97f5497de6237170ec27597c98e6cdbefee9c6a7b106b3b6aff2f -7dbc6ba1b2d145285029bed2766715781b230aedca4dbe0c92945bb7954d9fd6 -1702f5a981dc0c5c876c28659d744803202a5929f03db99b32f776a794afbec5 -3f03ab51fbdf52c98de52fcae577c7ef0a72cb1f4170bffa48734f1df30ac772 -9f23e8541aed00a2cb2bfa219626421f669494c472c88e288e5698541185b862 -29881c30d6b6124b276110bca39fc496691eb1c61432cf296b055401f2f63e03 -22b0f37395a0489a031945a21fba843a881730d3298008bb4c023b24b195dd5a -1e30b76210c17a06095e3222bd39ff2b7f7b6366a173a9e0cb527172e1da2308 -5eb7568000e9e9fa521f977c341e7c4cefc883522696ab5617d6f6854bcaaafe -ccb82352f821fd30f6edbab80310bfff84779899bc62743894dd9e726c6a585d -b4a2883fddf1d1ccb7dc8242c6d0f16d008d551ee9e02cddd4a21a28cb56bba4 -0bcaaaf95dc41650643302346318e7eef6bba6f4fb6eb956f99457f2d2ebf601 -65b6b1e4405501ddedc0d2cce1a9cc7ee6282a2432e88ff45ac520a8155a2b4c -4bfbef1e1a860ac2a2f2d25c1bcbd864001a54be48c3686cf72e98856e8d4e4f -2b3f382c3e3a75bef479a567bab3764282da78b388d27a6dec10e31db5088362 -d3586e219c55ec4e24bdfcd77b920f5ea332d29630559785a900d05813400556 -d1d0721754258799fb25bb59a79699f6f4e56f0e58f6748bf8091d848e4bf22b -728c913b0db74e9bae863413ba5ba04ec732d6f50d838424dd1a47b29e51aaaf -8ee4831f52722e1627bc84cbc737535206f251d92549b8e2d24bc6b3d2cd5687 -9c4bdc972846bceecb47b5ad23df0a82cc481e37d74ff3389ad3535d0d6254d6 -d8ec450fa1e3b81b7be26897b75025a64f480dada26aa777cda828ed66cd65fc -9d02717638bdb88571460a45aaf9abe1b460659f7893c1c64008192e38cef686 -8a076a626165bb53e34766580ea78b2bb63e45d6fa0ec31687bc4f243760d452 -b459dbed951640b1f5083a19705a3384af93eaf503a000e3f2384062bb52559e -1e0d8bdaf66cdacfaaf91636d01f7a76dd5424b7b620a706304cae6fc50f0dd3 -8d395cf39dc796c7ec271721e13b1dcff35f06b5bf5cbb6b2eb908714f4fdd35 -9763585e39484118b080504f1bdb293321cfd1b2913fb217c7b41d7212b1daac -1c4d770cfe91a1f649d760c132fd77024f7a0a4e8d0cfb275f5435f3dd911be1 -1db381c01a9c04645631fd9e1c871c5d2c91ac39a18d8b9dc563633d709a909d -614024729bbb2824c33c216612efe88278d6b1082e18f486631fde76aefda526 -2a194ecb406ec7315a43695256b1f7503d323c8fcce1f572ce5410edc931f97a -fe2671156d0167b444ab02691b81fa57696d07e235dda15640ce4d2a936d1dbc -a0d1f41aff8f3ca1792ac1c146021056a40ba5b30278222286a89825638edeaf -429cfba89cc85ff869cc5d51e41a8ffe937e03744732e3fab250127c9eb21d53 -48e3f6fbfa7d4abb16dac3c45e68e355e43d59c67a717495a6acdff50208c2c9 -7ecc5243915c0ba12e420d4fbc39c5332db7d681e51158af491169d7f7212fdf -47b9a9dd0af18a2c28bf94199e0480f9cd97c2ed0e79a57a02adae4b0cd3c1c8 -f91521a111933abee28bfa1ee0810db409fe8dfa17195a9a7637f180ec400844 -e497a7f9cbafb57866834f37b2937cd71cfd5a88eb86b64a01e33e9a639ee133 -89460417242cec260f151b9613f6aca727b2578770e86b45b395b951caba7afd -94c3442bd844ff531d069b8a2bc52710d341882860864884714eacfe23bc1cb9 -e4823b3c2315c09342cf097030f14fd7e663c2d030d2d71079b6d53799e5917c -9798624793a0f850b6046e7c987f7b1b01b586a83e8fea61486dcbe8b1362ba3 -a2ddf29c622fa55d54800823824af57e426b41b6aeb440da475e13240445d467 -26a6d4518ca92a6003209d30974a40872e176ec005233706148979aa159c2b7e -dcd5136921bb9116855f20b0de9f99a919854a9fb381d71265dbe5375b06ffcd -490b11631704a069a04c0cf952ea0d9c4176d5acfbc48d8a48074357b1b4a8d7 -1a9bff215c77e14d23e09393eb10015a5474701d12005e66a31aaaafcae6a030 -34e2281bec8d06f7b41e9b2dabb7783daec99bc7a3a8dd48e90d36848efdde98 -c09309fb1c506f5a1c0af132020b07afb2a9b3c457cb0f1a66684e043872b794 -534308404c4d7faeb296d9f1561cac5fac91f4b02f89b429212c58c55cb96fc8 -bd812563b864833a0f9fd69422d24eb4a4acc9cb2bebc4ff8b9d8e891a63babe -c423cda2fcb7cd52a04774b3738108a19eeb1208256540bfcea23ba55f4dce15 -e1d176c21f166ddc1c2bb79b75d40e38050c6658a23c416650a1dadd17e15584 -b382a148d2df13b0d186484217ce6e11308856598534befb42a76389263e975b -0a17b79be1c651630970b99d5956213b5da9d41d160dfdbb14de1e25f83725df -ee7b04c5f1eb6cf4914ce25d050de1e1fd701490f5e4d82dd51b28cdd8cce9e9 -e39bba025c012e85b2b1c125c45943798f8b93c791b06f159bbbe9a3ab1e0fde -320164f98cb091b751a57d86d15a0fe812f9a8de5306b3cb033c9e7eaaba9054 -54af59e9d61518b06302c9aad9a4884c222a41898ed8e340c7b0163e5152a394 -ded4c2abb46fa6e763e27b55fad2c1f9c5e4ddf0bc39fb7178f9f5c84eb6d793 -04815fb8fe12ba84b91019d3c52d36febd917e5fc58c423b5c9e09ea31bf78f1 -da64ca6686189475dbdaa3fa111c24cd98c82e2a9f4c768969ca12ab4d160b85 -7aff1f4af235f5127e7735fd8a4e1f4023de13c477e98d7190bf7b6e45b4f867 -38f0c045e958f0e2e20fef19fe492044c0c04fa16a3a0d33dcdbded65d83cc01 -38ae67b6b6c82ce18705e39c04ad8308ff32f03939586fade451f2dc110ab4dc -fb3125e09d8edeeb9c0ebf3d289f9354973ed883cc9df86e126f0cdf91d07622 -8d14814c51a72aaf37bf555a0e2e8ea5eb932165a430a9d0364247f0ef15886d -fb61e13710f14ee5ff73120542ea256894a17034c5b5d2db4089ee4ae8a5aaa2 -cedfa0b8453c045c75ccf036b34d53f810c2a219e2765e0f6b1aa7c7d78dd6ed -27df905f4874e65d79c161371032be490231487d9b877b3a2c6e8a9840e8f421 -7c2a536aa271ac2f44ee7037758b75f5eccdf5ffc7cb94cb100a8710a118e0cd -cdee5ffe9a3cb0797b1015e78da676e14b78a252fe4f86deb0bda164d4058b46 -3cbc28247564d64fca96b4e6f54499e08714982e495918059ef68b396226aaeb -e5ea86f697256fbb59abc1c752d459d585ddeec5792b769e8f1c55c79f9dccf9 -cb52f236496e84fd5e9a7e4e63d037835b976d5cbad20aa538a07fca3e44ee5e -f03e7b4acf304a825c3d1783a46fe5c046e30f75e8935fd323a022161f2636d7 -287b209d2aff608abf3074cba61563cbe724afa0f51b8e2b49023d2165aba623 -aac35969666595b7f010b911eac958005ac45a5b756a9a1b711f79f2d64067a9 -d4258ff5e7b4fb2142de1e561d8d098a11d63934a065585dafb5693d7b9a546a -ec40b879bb5b7c167e85cc4e9df665cbf0ea67d12e230d9bd922af96eb39dfb5 -e7bf1751f575552d9df1da8402ef816ba3be8f3c19b8912004e1da13463baf48 -ff7b3b33a57aed2a3e9e9f145be50f2e84900daa0b996632263af132f7e6b374 -35d91cbcf393cb46649ff8ee35a93b7e27a9bf39734b53cf410ab3f3a2fc4027 -af2c873a42c13aff732acc9bb83bf2862e7da328eecac95b7c0f0bf79744ea95 -363f54a5b19fd37f0282ffc0c1779d733f531ff661381dc983de2858e791ff20 -17a15a90500c579a5f61209d9a1f503788babb313bfb33f3ca0732c984c398db -687dd0868699e20655fa21040c952224811bceceb52c86e3666430e4fec39c47 -4462ea17dbd53ce9feb02d52615b93ffd7928c8f6d24b3be92f7731b8b087c0c -1d51c663dba72b2a6879c6f55c1de28f339676d7bb9af94fbe12af5488d4b3f5 -b529a6a3474e3f0cc46869343243748527080265184bbfb93eb971bdcb298e54 -16030d4076d4402b653b180ca984be40eebf024d2a7faf3910fa14a5545c6242 -fc6d8a9b6380cae5e75df338e07b8784bcbbd5369ad30a2c6a7ec32cf5d78219 -41b18b7aa533b522565cfa592c54a428813751b5943328dcd2c6a622ebd2ba11 -c6d2d65f03b4f419ba4375c714e62974b83a5a5c4392c26da2650e0ef90e5905 -402cbcac72fe007cdc6dd09bab715b7776e327215024acc013cc55f0a3a26859 -2a02a0a9f87370cc81e5c185db2e6090b6b2e947170a41ebd0cc6d71a264f0ca -16eb08e781695fd8d35777542ba057443ec42bf0a822c27327b1e064af38db65 -9233639f837a74efb758b74a117ec8841779afda95ef3f0f916c97936ec16bbe -f2b917a8e8e686aca6930649129fbe9dfd1f8247b34dbc586678999dbff6a12a -c51c1881425432805a253cfeb23c5ea0cdf05c62f99d34aa7f73d90272af0969 -68ab75f3f1ebb30b5ddd6233202fdae3573f67a51662367833673f7ff1344346 -446dcd3e29699b9028c7bbed09471ebc899cb3139284a914b98fabb1d50119b2 -347ed0d201cfd78dee828badc1655fa2c70191b24e20e699454570fb31850dac -38ae12ca5cdbbe2b0f22f0de8ef8b927dc6c54ecf3801e5c2544710a2e8f726d -cf297becfb7a93b4b422089200aafafb934334704c3d384379d34147f7d163af -3cb42599ea902106ca1befeae26d641d49b7a3490f09bf16b8d17c026e40a2f0 -8d727fa2aefcbe4ac82dafeef86eb672a95f413b73858600c7d9dc544694e25f -259b039558da35ba48443e6c931f6cc6ed108e765c879314e532d888a79c1b2d -460204838fb662dc90465032792f03f18ceb654a379648ba449922c9447c00d5 -08b81dddf1fd0304b2b803785ee94ae63b9700b36fcc894782782f51f397ccff -2a1734032660685070d6d5fe94636e6de386bf347f063dff5819b6b8554ea416 -59da8bb46c01807fdc883e15a200a6cedd4b95810da0a805c3d71c6467d84899 -6b88c60191c3a5e3c4dff6863ff024a5c4d4092164792a397b7d390b4306b56d -b002e6533752ab431804dcd2ec8c9cf242efc7b93dd9c3fdb21824068d3abb6a -831d89d241613946e097ce77a82f68c92da11dfcbde58e3450f2830a3a049bdf -c6e9bdff298b4800f150ad3833a612643316cb420af3db29f008ba36a2ef0181 -f64b4bdbb6334233c58e0e68876a6d2048db062b61a9cd020ed7ef071525cdb9 -3880a24eaeadf171b5c077e4de8527b5ed5b7e5005f73c09b2279ecf72e1ec79 -a3e4837d33cfd614e6d82df617f77eab048e71b51b3ba4334d8be27798576a28 -a21ed866fa75cd39ad747a1fea7a57446111ca317372060aacb159ee90e5efbc -dc5fd16b41a5e63363b41f13c0160f719ce353b913d069e4126743b420562d52 -e56b970fe3e660f4a850e8ef45f7262128f936ab5610401756ebeb0d9b5dab1c -8ef2d95e0cbe3542bfe0c6f29febf3f5a39fbd16a5c27d652c4a0c542124855f -4b53071df5537a5fd5bcf653c0578b4e324bfd7587ed10318333382ea137d90b -f0f83b4eb5d4796e42fb7053d4cd9feeb842d909cb67ba4bedf8592c876a83cf -48e4a2f7e92558e57a5cc6c3c6a4eddd68bba96359eef224fd78f909e016c5f0 -ad7740a686e566386c4f000764c8b6e97a1f3e9e98b047f75cad6b84d502c377 -846904339303da4c0436f1f67fcefa9fc0581f769b319c38d4221576b74b949e -532b99ed1cc90a2de4189b346dab2d48777ba5bd5cfc80bb15f0c8d4f478d007 -b84aff3121f7c0cc0887dc20cf195b1d964e14685acd86aabdecf09337ac26bb -b0e45caec8be479279364fb840c6ff36d164b7be25f9f811a466ce04c2ce5a77 -4ee329b9bd773657737db17709d3a6913793de0357bdea11ddd259b5bdc94e1a -bf95d33b8396ae9b26342cc1d2a2831e95939a0ef5f13443a9150f35aac5623b -cbaf6cc5d24d51225c2920e3bcee9d09ca5c60f22b07f24a26dd856f8efec9ef -b184f8a92781ea228c2f15ad9ab1da75002c9b352316a588d00af46a86b73aac -feb16d461c9cf969977681a88806c8e6330c1e9e8d428c91de717fe3908802ec -38abd40d988b018fd7a4c02a20f2f3c18d8364fb18692c310d4d1977be4108a8 -56f807519b471ded405d1e7ed6c02676970c2a1df6cdcda3b38edad9b5cee11e -5b221716f3137083d4a433e6af2eafe4760b0cf8ccbd5c15af998b5d5785a3f9 -b79a81aeaa9a6706b2dcd217ed437b23de309a360ff60ca82a8251be5671a625 -a90de4daee9941d44d8d1e3a19399f13b93d9b567b2ab2f9cf2b71058ccd9776 -3b6a3f95ea470066f36b343c0429655f8f25c89e65074a52cc6047885f4105de -2ceb8f80846530a88228b1f44c73e8cf8ff1e99d5cdcd3c91487caba9cce19ac -bee693c2479d8dc2c8799895e188155502f957b20e26619874cebe43d125f6e8 -638092ae98ef4429bf719bf6cbd17b1f1fd9a7c90bbb6b0b34614b32234a7f4b -1c259e4b10ec72d3a2e5526473e551450a11d8537cd6d3dfc472576307ad3354 -b2a9c24ae22c90aa37b1ac70352969e2aeb30d0fa894724d5e47a87e7319bb35 -7b76e95d7f665952ce39e05815e5718a7ec0d09dfb566e589c3655e87588b6b6 -95a272aba75b07eff8041298b7a1bf6fd1b10c5ce008180940df9f4235fab68d -bc3d2ab597192b0912b5d9486b5c8f6cd5238cb94a0c807f4baabe7e81f072ca -0b626d0a5cb1b8254a4ef588149c84c53d27ca3cbc729416976bf6a20bbed57c -6c0fd85c86dabd7ade406b27a8890bef705bf3c5c8a59615d858ca2707c47404 -78f55c4d6da862b50f90997989ce492d884f97482166d5ddd4eae075395d7be3 -cb0dfed4d966b2fd24c41acb6ba9f1280ca84aa8cf607bf1d2cae3c6dae6871e -c5eb10a943c84b83095fe1b7b9bc3682b5681a850001be80a48a2b1bf22790ec -f53a1ddb50e2325392f118cd56727005b947495ae8ca6e46cab765670ea03488 -39275b5711fd6b227ed1a6b66c02c9f199c8d54b46609a0804fcffcfe0cc8b65 -0f1ec83354d395ae89ef02d548088674fcbc0ac0daed78ab47e3ed00df77c01f -2d0e5967da9348fc0434d71eaf90785c3666694604f48bf2043bd54dae61ea1d -3e2da8efc1ae867ecb0e7d11093ba20786413e80c8f05dabcf474d6d9a1149b1 -be96ad65eeb5b865f4b321de61ff8904a072092910bbfce7bd5a42f10c355e73 -c0890e342af2f2f4d7fac20c846d372877c7b12776b76756a9002723d5ee71fe -5b1c0e5fbed5c354cf4b9cfb843f01b9e378e90e7a56994325c7c447e5269204 -c83b98d99dafc77ddb6a3fcfbbf430f6d0ab8a832c262f879369fd9ddd33b1df -602f5462b9f2b29360f1a1b7d7eecacc4f10f188e7e2ba08005878b1d9c3762c -ab8a29d01c0c164efe8d37328deb51567d5f17b25c11590a1078d53a36bee786 -5813fee10723c1acefe111dbc08b796895f2e1bb190f3da6accd6dc6c884eb44 -ec4d78df308ae7e774cef87ed4d6200bde349c35d7262448f165a6706c33563d -24d04d409c69924949aae19c13d07ee64910d1c29d15ac711fb56e3dd05a980f -acc11d9c08863c32a28bf94eb2c8fd1fa0ee61b939ed944b017a46b681e95cbd -0365d77433a27195df9d20a3483ec94192fec56b9af5c656bfc2924ca0c19fef -ad23207ac6d0169a15cc273d66899cc044b5efca9ef4078b9bc1e91f83842624 -c08a91c1c0d20306b1479e749386cc50fed78f22a27579fcfe943b033738bd67 -db8c4cba7f60e8ebbefeb2ceba747c757e902b70dc09622aa4ba96347b6948fb -3ed5c54ac78148b5976001bd3f0474d93f4903d15a6cd68727714ebcda244345 -d9a4b0020bde3e2c74385736f244206da78d0331de35feb4960d8fcd0ef4bb75 -5ab20087c2aa1da104d16ade37b9159caa0f8bf528b55cc005f017d6823268d9 -b13d199ce47d3c95e492ac8067fc44b42ac8be86b639770a91c75b7f7a55ff60 -0181451587fca8bea1721f4950b3322dd9c8a09cf8e4d2abef3ec038c8302e9a -3194d54745d5798e3b3844696d3c4566b179c98b7adcff4bd2a4fb402ab275f4 -30f2c77eecfb3c473d2e7102592e101c3d38f79a08021227f8f782a59d20cdf9 -c9750a8c0ac70e34d983356c313f85acb56ced4467357e07e23a62ab3fb6ed71 -9f9bf85edd20af93c1c1736b6112dfc8447b6d06ca12202f84b34f892a1a13af -4423b723c13701aa57982dbf20ed6ca129b72f79f77f1705485967980db5df42 -c662f0ed38a02b55cf048e713c0c6a1a85c900acaeaf6d045dc96bea5d45ecf2 -8ae85d1accc9b38a45d6f516078c72388e5337b9c1a2023d086e97e3affd3f64 -517df9ece75c3afd0e3dc74e2ed3b4aef8a8c032cdd70127ec4698db19c78646 -58f9dcd6b98676dede88a1efae04d182ba73475290ba87fdc71cee2737057855 -c9b151917eb5b3cde9f70db961ab5c8a10443a7aff427bae1d1e720a604c39a0 -14de8b45e528237198f086421b5938871ef89008148eac965bfcc850ed7aeae5 -ec3e8e37b9762a8a6580c791cd89c4d25fcdbe778bae071bb1e18257fefe9771 -255f977611825be7f64134c3521ebe7c549741265838ef00f0687ce14c463d97 -884893e5c967d3ca5286b52d0aaca5ada20e778a4f4c807a9cd97f0c05ed4876 -1cb09c787085e213a86b7aaf33acf64552ce5d8c3459c261447024035997ae76 -85d1d4337cd1a1def984e185779b2a0a8a3c8da6212730f96174f4c3b104d096 -3e0e395fb85f918cdd5f98c77daeb09a64169dfac253730c7da4122a7025ef19 -dec6042fc24d4565a1f8a7b37da00d170b6c4be72475544dc73b111c775e5c20 -401ad5b382559c2dde0bc3ec0e46c07e42a08de477b3c07159666bda273e29d1 -8ef5b8e6d514e510d8210e0a998508c3062ae26b504abb3613f3d1f167c87bc6 -48308196ff8fe6ca97db5fe0baadbfa22593c01bfab9640edc31410fa037bc90 -f6ca35ea8010a6b3c031b43e19c38a010e84f1c5c97b73fb3330ac18268c16bb -88648034875df43ea61c877c3278caddd457ee47509154aef00a86d801f8ddb1 -44e43f5ee5683e3ae84b7f6ba7aaa51f038607beb96ad79183364c49793ff0c6 -98c2a8fb0ac71b8f38eb7479a4995e1fbac92278b9f3528261d822db91d5d4f1 -9876784d0651ec7291f19a5437e987cd727afdcd267f983eabe8e5f3879805d1 -3f2089d9fca9d35e4fbfae0d72d7d0021c386bf7608fbfaa87d26a57933bb6ec -95739fbc3f7229a82efe4343b679165df1ed79eb650fac11cb7f1e74d6fdc9b9 -a8847a85bd24f58e2d988aea2f26eaea9d27f5892d2cdd77669b849a92f8d0d7 -5c54ed9682ba9d0c7058e04997279bdb3454d2b6a44598267a269a814aa9e1f0 -abf598a1b6c2afb75e173eb6fc2634253c04fcee9cb2a896523aad92457ef0eb -321e0a037eb6cfe349911c148473f86b5aff5b8985533a5f6d3b406ddac73d35 -23071332a8fc34a4816171b2c8a19bf458b4ce7259270785060b9d673f3c4997 -2da999ce0f2e7ebc2b2cce6de818d40f020d5e53b882f0d3754c341d5740ae72 -2868f364a2faa97e8c8143de444a9f3ae27eab6c4f7c838f3a5f8b9600d70831 -cbc2dc64ed3189f33030d0b32211b757f6682949ab889db99693f4dea2f670cf -057032d3034aaa6c3e75a0bbdc092c5f4886b169e59ad2d7f4d41cf7ad2f5882 -77914fdb7253e198a40b2186b1a9a0aa958ba9fb99f21a074825e053e562c2af -8cd8866861ae914042dc4b8b5342089b21013d519c44c28482cb8801c73de3a4 -9d6dd060294e4ccdc55f000f0ab7900b088e141fc2d8ce68cf771a068541657a -8b41e95fd2b1b452949716ad5bb0b8c2ece99d07a41f3c3ec381212baf8cca9d -801a993c8a3926b0e0d60637618f69facf70c7b3e6af9762afde0deb9e5be5a9 -105c3164b4d8372414fbee3181066f1772d21da04d0b350c806935669fd69cf9 -6073c324b8ea582638b11e58e43267c3854fa35c3deb3160d7756d66b87c8385 -92f86ab8a97bc9d6260e2723d435769d15dce8cec387318add815687ddb99d5f -1980da44a5332e5c98c59c8d6ba28a995ef8d809d783a9b2510e1c6b820c25bb -90f52ccb9fa3fdeaa661a69921794a60a591fc9157e755c28aa399f30e93d298 -9e7b35fcce14d5fe6bedab37c173d384d3f67323e702b14ea74951c5c07917af -f9f9fcc450950a8232cfc4744dd38ba79b9fc41a37205c97f44ddac6ea5d423d -7af9883610084080de39e5a71db472081595235f72c7ccea69a20cac059f2357 -b4d60e158834ad26f85fc1e9bbc948db8fe7a03c5c401ac2ed880fef8803e464 -76b00961ff910f1fcc897e1fa4f6b697a616f07aa95f5616a313ca01f39aa99e -8a5a9fcd389c99d750ccfa38bdbdd9a0376452970f91859aefebe5b55779516e -665c6f786b3d22a1cc781a729e477c5f82a65027c87b54a97d9130bd4464956d -735fa5b8f710cea51eb9bb909e89716160cdb112e44876ac49494f62b8f46e63 -c978f80f3a57d99ede832bb7bc1ae59ad0025944669343f432bfeadf8d7408f0 -50c7568da4400df96139c1d243b8634b19f2134fd13c783fe9012a58a7e7843d -55bc3b7c768579bee6f5931f1ea9caa44bd6808b12bf4550c852c1ee3cfa72b3 -5c883f0b6a4f4e5d768f93aed79bb5c70b681c3a9d604b6eecb7026c1b22e28d -c184d2fdade4c6afb6b9fe8d7495abe07547d092bdd73c5701696e6f256cda8e -1a6e58f3335e51498df75cf37a7213fa50f6d9a7a4ea4a251c3cd004b75b8805 -8c8b8efba9f66bbe5e8f321981aa2d8f5d455b47347e368686689d00fa5f996a -b6922e325bf4e72ac9cb09fd5802f365e4a15045683884b45f15175cabb62651 -3e71fdf4e7ac9b4b91772644ca8e55c530a9459719e181f9f2d211601d1bc5d0 -55731eebc2964f4add0f713c6b22abd36bd9163902a147f5172c4e054ff44ff1 -1999337a57a673028374a04b65e7e77ef2ce24a75c90fa2bb48cad9e9fa77111 -24514b9400e2cadf75e9d7f62fb7993f82cc336c77716bea4c00c931ac21e95b -04f35462cee46670514510bfa22ded3ea18bbb8b511f42c637bbd06134280404 -05d4355a5d252d9bc291c14cc81d77c491f62a54387442b9a884b3d21e0adc5e -1c120ac2c0b03a0355204eda408570d379547d40314f5c61f8c97971b91c521c -a5e86c1c321a90ae21dfbed0688e8c7287e7a35a1f0807b0a9a811a6d2d68636 -0fe12a04126f19c9b0fbed1083265ef6b2f4d463563df3b1be5b9fd0d277d53f -f4f5ee43b113f580be21183338592a57e29c025bfcbd56dad49e4b5bef14363a -db5594baba9ec550bd4cda1759277595d677a71c91925e6e1960f31a24117609 -4213750579cf163fdf9b3590951bb5e2a8f117412025f1807584ce1a4cd382f0 -9da5d7b56954f85327c0eb4ae556b79c08048b127101d2fb38f16996f1b66fbe -0040841b5578762c35849b0641d3343d8290f2aba7f075a0e2721718e08f0a85 -1fc82805f23c2cb0cd67740ce3d5bc6b97f98f8818cd39ad76ea2779c48ce48d -43302c382ec8d61904242e9a5e28527ea6a3bfcf9dce17a9d36398152c7c47ed -777c944db9ba4bec4f30a1261a0096081ceb94708ebe98e7165ebcbd768240be -d03fa2a0904086e1a4fbae8788315c7f864754e63f2399702bf2dca498b2b352 -09ce951389384a9e8ec4f01b207f61112956e9a59c0bf46677b9b1f8459b41e1 -b8323e5bb1ecde22bf2c47938e0e2f548cb02758dc7135004e448d9e689cf431 -11d2fa0a98f3e31b3882cf8689c76d276b85177cb27357bcb2ff0de3cb032166 -c58f25e0ddec5971b6a81325abcad1fc2a27cf0b20332769e80028ea27b841aa -16506f7c22dd55171341687682311e1f884ef87494bccfec13f5b0b217333376 -fb86573ee65386e19628e78f49c6cd9fbe4cfdaf21ab25e6f62a99cba323ebbf -c5eeaa523613eddbf85de5dbb9c66de1748624c271d8fdbc16bb8f9196428516 -f85e26d904878f9da7bd61848e96250c225e09dbd4f15180759e3e5da86d0dc3 -f5f4c5df81625a466d31872b9644afa35c81cd8a84a052b954bbada87c1e50c2 -c39594078c068c9b0aed83074cf941bc7afa3afbbcf3f40f34e4e3d1f133a57e -9c10799313813684dc597fe5ae551cec1f61802dd873526fde81f323b6c62530 -0a5ad9bec4131b9cc9cf26a4554d6d64bbd5c7eb59024b2526f12f3f9352dad4 -7043446118b2339223dc051a4938bc6a2c691029d693b8bd3d35fcc458f7df7d -bc2e51ea969285ad222a233e5331f99ee402eaf6d76403f6fec3114e6315a2db -23659ff88a0cf2738c290fb6ccacc2472bcaa3e0ce03f9e9d8357b89580c95f6 -f97c1ef3f0bad43253b8e97e6613f0ac04f55f2f321b5688fbe4076558738b71 -b378712d45c48ff6ec34057bb2a0aa7086c27716aed9c3e6ca6703ffdcfc451a -0471ae9d6512f0fa82155ae17e133b685717138397757d0230b62cda0ab1ee9b -b1f0bb791daad5f3789ec0f22d13b44143b63250f09ac760e86ce3219292c6f1 -ca0e77313611d8282d8f62c986fd525baf75a8ab194038359f6e0217d1a5fde7 -ec7de056f4fc6893e740dd8c9efcd629fe529d5116db5482d12bf39b0e3a40bc -bf1b3f99f627cbe937656f38909e3924b89ef1478be176320b6fb8a7c750f41b -90dfa427229c900b51d806d959be3b8b2b6e6187fb1bd406fd179dac8af5e70d -be10e747e198dd6cb67872b48585f33aec68a3ca94a22224056a32a8139cdba7 -aa07ea5cecad1d2e1054cd265d35c6b2ec0a25a0dc415955186cffd2c4b6a86c -028129fe12b4fd07dde82836ded99925994f058cf323bd1b362a86a8b4ac5aa5 -dbad763abb2613b41ae6b947fb79a7edf3ad23eb7d732727376a1fa9ee0e8d79 -3b5871fc0e4535563bccef6ce24a71b717f90590a7317652d7978bfa78a72454 -353fcf512ec5e804ff6d2984c3e905401b69246e1b040693c581e794e6d57ed2 -5dba59acdedbc4114116da97b749c4007f51addf7dc9bec79c77cfe29b6a93c2 -61e2007b01a0b8d6f95a9e6c25551a20ed592c90c7ab5071280e5d85200d776d -938df156ecd2d863f8b1848dfbe5d3a40d4b817deab66d5c191b4b05035e0009 -5f04c4cdfa26de785889829564c27377ff1f2518da932d4559017881aa68a802 -5bdaacfd2611e101ac667d3b69e7895337d522e56b4d9698c4c5f9a0e83c2386 -f084f40a75282c72b2fcc12973e5edf34e810fd247f9c0317899fe6efc833822 -8a788d33265883fcb78366ce69783b9a15e8c041e4556293f61c571bcc985d69 -b1761aca9460781c4b9f9035370dda95c777de8d35e1d7aac234987fe1a8ff45 -37888fde3267d97e27c8fb6d95088f0d207e4b8d3e3d689172b2d89b8dc28b34 -43d14646b23e3807afeaf3c83a22f45cbfe9eabdcee160ab7b1a664bb5fdba38 -4446b84b6b863c892a6ecf33f7a569d82df118582e514c11314dc73fdb04be15 -b6bc9b3be801419d90b74cdc52ac40e1342167440621fcaaeaaf9db8f78f9e20 -045d3a26e1b51f2c786b23c09cb94f9cc91df0b5236e3f54062925ce8804113b -c93c3ab041948a2027d00e112043ef82ce54365fe241a2c503fa334df6973406 -3402fc6d246a8694f436b318bd5558f69c9f182746a25aea1bf1993f61ca48b3 -b04074f8a44206716d6a6d834ed3c455e272b41810c6d70133c455f246aa7764 -a104c482caff864d86eebb2e1764735775e78850006f959de537d66dfcea3f2a -45e24e7d905439a59ab155474bb3dc63897c1dcb7e8f298366dd49b9b1e42f94 -816a3c275460375dbdf175ca420b46df137a34bb1ad7983807677f093a05b90e -81fd0ee6b6de147a9813a1a1ec0c7d859777c0b2945edf2901f883b8b54aca59 -814b951e4c97fdbf48aaff19cb9fe7c6c0de6532f656e5b1f03193b58ee693f8 -4684114fdbbc86134a483ba1be41cf4fd823a23f5a52ceab00021c2954e5c04c -865ec7222d33d82f19e09375610ff6dfcea95e0a25a1cd3d6156b63bcfa13740 -63bfe1d8a5e45659b0c924eb81cb3d4e70e59515ca1be45f66faadb5993ec547 -966f70f5d761c8731063422a510984f7b4587efe6799d2f28d90236b49ac10b6 -fbc45ecb7d91017e16e4fbf716709b37120d3586363e33d94ac92b01d1349c00 -18825eddd5cd9cccbf8c70046ca295d885209aa3fb0b6209c5298ef4843c39ed -d64dc504c278334107d322cde4a388a4a079bd303c4d5588be979eaa6cbdf8b4 -942ffd0d27b2ebe1533f1d31b3da2c7fb5c8b663391151fe897cffda8c227d45 -e292e9113ed2538712b40601f1f0c8f3d0d69ccb584abe6db54b4044034791b7 -d7a0838aa9d80c971f45486b4304f20d68b76ebc6e55bb683dc20c356176006c -b1f902f8d0be642da9f9209703c23e48235c35778221689c16d426fbd2903d19 -7fd00e071a1989e8b2ccef17d51e7d73d7189c06adcda120cd3e849c603729f8 -85006337a3a1136ca31e0e41d674620f97f0101a297a1b731b1d0348c51d72c1 -4be0366a2667999067d102d7007d510f31074799ec5cf6ee355e59bb68dd85fe -3e3f553168c337afddf1bbf895c0df509355dd9120735dec0715fac5804075fd -cd57fda443cffeb9e9d8e6f24a3daf1d9523ddbd29532a6c5a79e6b1ea1f2b1e -55e0369cff1bf0c074873ac1226354a6a74e62faf42f1a15c863c0ba21c3c399 -b9c1ddc4ff6e9bc9a3ba58581b6bf67b89b7045b9542694b9c2dc3e185a1390b -67aacd3c344d37467671f728fddce8bb08e2c6b8cd4a8abc60de087fdd560130 -3f40599da3a1d4abe2e93cffc5628e62d972f034681db1c6b07cdd0e7f9963dc -0b146051fe8140004c5cb27f0f0411027ba88646baa9d6f02931a762300a8085 -7aba1853932d380a72753ebcf4c9c24a03fedbb2dc057c6f62f31695d35a7e8d -da73ea4a610f515fb52ad509605b8deed5e44c36b7210dbafb46cf2c5ca7f42e -00571a8a157a953226cc00a87592050135386c5e7fa1c5e3c023edb0359cc26e -96762eff0ea623651b10ff61835614486760930756e59d54919f0dfe0b8fe93b -9b28c474055246750aa1679389c5204657d283981a5cb160e21c1737503ab109 -044a661a3b3d100ec7f4581bf7b67b50970078319890d5a67d133bdc07265d22 -99504698a00ed8c9747feb1e747737e19850d39c03a837f0d504f9b43c8fe9a5 -725eba04ee6cd478f8416470ed154a11484aed5822bf9979b1ebd5e56af698f3 -4b865aecd29c67ca74814b0cd0109767f6d582205574670b0182e0ec6d23675a -11e489fcd58f0965af4c2f2b891aabd05185de26ba4e0a86b4fce3ba710d9c81 -3a97ecb07ce16ba156e2627048da3a2155ae68a5063f6c2eebc0091711290605 -b540ca4ddd10838e2a64835ba38ecba8043074be230baddd628d8b253734397a -a213b0a9bee70d623dd5411eb58e25855209b3648a42e4681f90d51b13354f28 -267d48d1b8aaec412be2dc199ea3ed041bc3edaace1af401d01e56b5762f7c71 -cadaf26892f3e1f6ab0438a4ba0e3f5ad953fb15a7d821f6444efc966c67082e -47e1af0e6e0d199189a994239c9716711f9ed82f6fc2fa1f923b4e3aa45e5ad8 -c0dc71bb5481fa6a105b90a77bf4b8b9b852714cdf4fa814e9d0d89d349ba57e -dce13210f79ceb8733526aff221386f826a435af47f027d81bfd4d263b84f8a2 -a807c55d1bada31a59649717a4ed8d560d4f5b81ae7f6943c66e9b2ba9739c3b -559d49fe652de7c968c64030d91099ceacb9ac69417e8210f64eeb6dbec7ab1e -fe4a3babea0a42ed49cba2e70a6db7018ea0ff1b2b0af498dc6b5e686eecd7a2 -a6b85e07401e08b825457e99d0b5fe48ef13a14fc0ceaea7bd7748b2c7414522 -59ef4ddcd6a12d5e84ad402badb6af6b8d50738250677ac12324e4e3c5d72887 -c3f36f99c04cc898704bada948b431f543765f3112175412fdb80af9850ac5cd -19b65b018df357498fb4255439913acd686e3edd9a3bed54235ca6a3d93ac968 -6ccc1400b8ecc647ad4fb7334eb768ee32d3213b8a30ac2caae37e99ebd9e903 -b319139533fffa9289c29424a030940ab2b43df031c3f72542e7a8227d56c29c -a3b07551a0be3cc4d406d2b0db792e9e72942777388d1dcb4d48704c64a99434 -885c4f4f170294c7179dd43944d60739ba9412245f2c34699d04f9815db6db1e -b3835adbf1d8d9cba2da0d217562a25e0adeaa51bd8258b9b49f1ab66fb1e72b -d0312788da672625511e07ba68cb0eaf05485044acd338305f55c7b67e52af4c -124e54d8e3bbd2c6ec6080dd3e191416acaef07bfecc0e77acc92236749ecd88 -96577190a9e86b7ee306b613e0b19015af7bd544e26c6a3e98c51d98cbef559b -29d79e6bc3ff0966663de38b24b2449d38846e6652159ea825303122ffb55333 -a108e242a05d015a9abb0089a5b9974cffa5eef0de271c243fd9a4f5ebed3b53 -324de92d22fae131fc7676b747460fdcf199076cb5d922e2098446275946481d -681674c97c00466e79ed31008c4f83626ac2dda6b0464b589f01082e5ed3d7b3 -1caaff1052012b1da1e37f3c0049623555b7d1525f44c0824a53903b54d4da9c -083d7acf2717e26be8596a07574661a53c504866959e13dfe3547fb8c5ee9c54 -e4d16952d25f0d32c103c1b2381a3b06ab7a26262f95755e2cef7a028266ffdf -3687304ec78638f3607e1d4c76af0cea8a30bdb7afd9fed23b79acabfe622c82 -9059c90c5bc732c53d8ae7e55f6385ab5d78e0c4e0b55bb9c5867ff9a498d3d8 -dbe4f0c548de9edc0944f1119bd9a2c33d5d1c8de7c5156bccf7d4e52265464e -5e58d93fd79f40f0ad593f50bafdad06a77fbb22982b35516497305e78f50471 -746076b77160149dd7a38f2fdd678ddc2a954ed788a19ddac34ba6ecfa9f0ed2 -f7bcb5f97eb077bf90e7c3852ea49b1a64b3a1e618cc83bffeabd15abb82fcd5 -38b644942b6b9741b3eff1409c67632c6a40d77c42ee0846d8edeedf56100f28 -ce8a9fb58b4aea6fd3fa0345832062d748ede2877fbe30187b635ae95227a7ae -e15f86beee2718058ee928c73d0e6f2bfba3c144d5fcabdfdcd499f8b8db426e -0553781a197bad1798327e3bdd32060bb55c660c24f3ea4e658d4e95f69fd589 -e9b35a2153bd45fde6f56e50a7cbdf803e26103a62824b24ee929b16add5f9d3 -5817264fbd1d0b3171fff576d67bf6aecb15eb25c5bc6024d558725718ea8406 -de77df6446ce372a13fc2d96fa72f65932fc34e7caf2ea065d3c94367070ad57 -84e94fef2858bcaf7c60f999caa4d0a483fcf77bfda5ead04c77b87c69a3bda4 -9e752456a8a91e78c89e72b3d805cddf729c8d13346df0c1150a7e16f37abdf4 -07f8a69b062fa83cc8996e8857d26bb0c09d5a5182cacc745772b78b584cde14 -6f5e78de240c5f6bc995606afd03afb003e0f8f07f4f62478caf38494a162a82 -ecbcedb9ba0d4f074611e68f0cb7bbfb76bb11615cf4cf26772a57d635613fbb -9fae0485183a90656c81750e962f35cb61689ec21f11539df17b2662006e2391 -b5d31851ae55c40d408649349ae3500bd52990f1ad042a09d0f31fef1a5c7c89 -5ea1118ea0c1576b630bdba01bc628ceded0ad35e6decc10c02be1a05be5259c -f318b84f4a0d5eeef0ef8d991e029c55213d73a07306160751c8fa142d010c1b -9e85dce81b6c4638de70603f7dddf7fc3a80540151b985066926c581d21cda9e -9a2a0b9f428fca992ef1970a985b3f5fa6e80e5923db4de6ed7898c508852a47 -439a8c50e416c2b75d7b3c8046513d91af6de66ee4b6f26f6b639d492b105b1c -9049b04aeb7962405871e868f15b6e1a8e8806253672c6eba1d9447c1b453d36 -59860fc02c285f5f2d773f0e76c75d5fb2493a5c26901d9559a9f3550411039c -129fa2d0fb9f5aa4d6a11f490488a08fb3de699fe868ce02120fa973fa0ae84f -fb524eb2d7823fe52ed58ebf40ef5c7609b7b8a5e1d47cdb9f624d53d35a40fe -c7ae7c17bc941a7fe4c9c50777595a97573e3ef83582033e1851577036e02f5a -65aea4282fe5171269ab39a07939b2a71890ca4043102dfd0afcd8688996a45e -7b6a858c30e54a6f32fb19bd71adabd584ab82ebb85535e53788081e553fa09a -d97345c2ff7e6b7dda5093bb78844783002adae6217581860729e94f5455e6bf -8050a1df07128cfd83f682b4d11696a62d204a7d7be0a43a653d1cb6f58a760e -cc565ef2e33662ddd7daf376653963f1485cd1c523d9341b1131d527ddc5e166 -f49f08b1bf9344bf9f7551a2688bb258cf46775a6a31a4e38dd1114fe2e44e5b -3b56d7f3d7f44e3c9f09c6e9e098d425370daf4dc3c638581a3f34336e80e8de -9016f94e65ef7664a4ffc441c52d073d47da7b90c39aea70ee619b199ef79773 -bbf5ad46ce9dd19afdb335492d31fe45cd69650eac723a9d6d0a3c9c00eea011 -daae00acdde96c901f111c402703f7b1732e1527aabdab32fe1355348e76081b -27491e40f472c84e26568e8fe043ae3b0813137b34205d5a005eecd8003b244c -20e0fd57bdb3755e7bed94304a77ddf69a9c6ad5f286bd2e95e4f4f37b6b6004 -b9f7436171c6a17af1136c05bea345577c488112c7c8cecfe7c57f2601265076 -dc5cbfd0d2e66b8587d92d02ecf628c297f4d08c149fb2efd989e9ad7a41cdea -03b48ae9853b03768a1528cef605f9d64045b1c1de64a5e0d26ec5af66ff278d -296f02349a6344767f0b0983530d314a370687f2019ef6c778654c011206e8a7 -c47e5572f904f2946372e8ce442bef2cca4fde1ada3a06580539088c11804c76 -e66c32e076f0e3de041e9c9950dab9d79886a404c081f61d1eb5e0bb4ff05df3 -8412f34b01dac78411e4cd8c6322b956fdce30b66dbaa9e8df62f797e553b83e -e379d96df6a2b11fa7edb9ea2f1fd8ec4b89b5ddf937bf91d3b574ea667a9847 -5737f2bce293b7f9ed9ae06ec39ca2befe1d4378b707e266ee3363acba05eef4 -7a9d71f8a205bbe81569ff184de2e187735829b17680534888904fe67fdadf4b -146c1d80f3453840667908b0bd497d22c8ffbfd1400fbd57e140afe219fa8f51 -c8354af1cb982ef423f250eb9e8aebf30166780d631400ec33bd84bf71140403 -f5cd03fe38b27f08167cbe99bcaa3fbca13d734c74148a4321627b672468905e -c93b528e396a0d2a917ce042d8dfa63eb2575723962063a2487f044c365462fc -907b42eee612f0fb4e34a3fe9ea1a0f168da2cb89cccc1b5422e81f09bfa175e -3479915053e90007ad92ab92a2a0644726bf022737f3b7b0ee7579fb7731ac29 -e7e043175277ef22942a9030e0bf91a1e775f9fa3f6d86ea3b72c8ddb42a670c -68694780e5a7ab25968592d823bdc6e812d19641c1e176e26351ea5355435739 -7f0f92c33c67 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F122_0 /XDVKOU+NimbusRomNo9L-Regu 1 1 -[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright - /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash - /zero/one/two/three/four/five/six/seven - /eight/nine/colon/semicolon/less/equal/greater/question - /at/A/B/C/D/E/F/G - /H/I/J/K/L/M/N/O - /P/Q/R/S/T/U/V/W - /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore - /quoteleft/a/b/c/d/e/f/g - /h/i/j/k/l/m/n/o - /p/q/r/s/t/u/v/w - /x/y/z/braceleft/bar/braceright/asciitilde/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section - /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl - /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet - /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown - /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent - /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron - /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef - /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef - /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef - /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font QYKIKI+NimbusMonL-Regu -%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file COPYING (GNU General Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /QYKIKI+NimbusMonL-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-12 -237 650 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -currentdict end -currentfile eexec -d9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae -6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27 -bf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf -045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670 -0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4 -1b2b9e8f09253b61177e95ea219474796072f4b363fe05fa763777e13b518310 -ac032eeb94b88c7dc8741fef59c541b57b0441c6888237a2b66a182599d1517f -9ec474a9539f1632c9a5a1801fd646b529cec2b430f1cd205feff509b4092535 -29e0b7b372145ddf62052c9c08b7673d36dce58e3e78a8e4788b34e36eb543c0 -d68a36e2831e23c440c3e5f1ba2248633aec75ba8d6c9e7fc0da01af08776246 -9a8009a4f3a93241f2f34c72db3361e701c06538a631f6a8cc47b1b5df7cbf9e -9029d42fad4b90f81cdc2b4cf52c09864f657c7c357180375c0b64206515e472 -c6d71a2c5d03c5143600d0dd439998956b9896ffbcbbb77fc1b6675f1e428390 -144b29367ed224ea9e5f51cb3e349dd118422bda8b6adfe217a02320be72983f -d6fa232c9289e529552708746c4c76df4ff0c7b27fbca194c650679504c0fcaf -0c643c945a2563ed47cd8538edd441bfee93dc4160421cd9efe6cb32d81a8e1d -e1c446eb5ec2a6c855e4449731ed3da1c3ebbc3cfb6553c0f78fe88bea6edb14 -a4abb572eaea91681b7e9f6a2a08005164340dc1983f75b8abe75fc02747fc2f -0c5b31e0f9a8960410d5cc677ea77d0b1b28681ab5e6b3ac11368b1e493f594e -9d037f4fa4c47ee06351cb471af4c1966aad3e51415d70e57eb0d84ec3a655d2 -b0e3a818baebfcc472b485625414c4e20d63b9673b0a0780d8838b0b4004df79 -da0444405db6a534a7571cb1aaff7d4975ea8a578ac37044cb1395a056c7d9e1 -ccd617391a2e852a4d71101cdc3c9350e57657b376cfc7cf7e387414e4a017f9 -943ba9c3aa45e955812e6b8173acbb5e5fd0f0654868def282d134d0b4533159 -c2bf0fb6959689dde7e8e5d22618fe9c8a973a87ac0e853af5542de5b89e7b94 -44ad4496afb696be0eafc9dd7a421856b1c0baf95b5fa887669124ad3698b544 -5e82a4c5cfba4e5083784e52462f3724e7273de6e00e84a1d83b6a8c0e79afcd -1df167b97e2dd796b6826231d31fd02991e990dcf2dbbb0026f9a151c0720467 -e68e2cc0a5fce825564902efd08e2ce18896ca20df47d2df8928baa632825543 -d0f6a5c94630e63411a6adb264443eb7d0f6c3883d195661ca3a1bbaea7bcb41 -d5c18fee8453579ee23f1785112e31c6dfd8e9ecb8681b248f0ce3d77aef339f -b455f3817cf7182d1fb0c53589750be5bd6543beb9c341427d0a4107dd5d6ef6 -2197b85088749f3cafa40a6a3223d4ced495d6228b3398fbbd0d4765cad178a6 -f93c5217bd254777c20cbfbd33673c5ba58e2b021580d63c76bf196391815c05 -d05159b171c9034edbd0e861c5a26f2dd38736457fcd38003882a66a4cf8d7b1 -e2803ccfc1c9fc2abda0271c331247360b7f2cee58ad9cef1b325f62dbe2be6c -babe23a220f662247df70428c1f79c79684890324e6b7166b269b174b98ec8cf -f33b589cc3d3daf1aba6835a22aa2f59f8d386610bfe936a05794242e99cddea -8da5b4e5e56a875c49267e2d48ccae616053235b4b64ae53a573922009e8a05c -a56fe84205488200ac68b62fe4f07572392940638301363c4131ccb86462c242 -afa463e3f7f036f63e622243893261e7ef744ed489397030a6604318da3f592d -037a620fcdc10da51b8f31c816f91016d38efc65b6d463779720ebe8df03be2d -0ec52886ef9205fbfc6563ca80accfecb7c686f0212f85da5024129f01bd81b0 -bb90d58eefd17fb353ca143a4757421323238c5653a3bf9f28cabdce6ff9d946 -867a33fc9ffe0adabd3679b555a9ed3c181d3e108f776e13bb39794cb9f4edd7 -7a607e017fe054811b3ea3f5b02c95343a5eb449723c9fe7857441feab37cc93 -70c285d3d91df0a0e1bb21d022f68f0c0c8bfb311b8efd056f47c67b03b45dc9 -0bd78333d366796421469cda8df6f0095a5eee1a56621d055a5b12d6464cceee -9f5fb6a40ce44ab669786f4f0ff1f348c9d3712761a07eb8aac26c35c694e1cd -65b01b32a2319a381734864a06a349db71a2fba74ddd58010c94aeec901ddeb5 -41e0205df489d02664b4e2fa03a404c8aeeddd6d1506bfe56e2e8a6d3a83f79f -35f2d552dfff754bad59df45582e3aa87e6bd45725b2c44260e651b70af70186 -8b168e440bd70014be5c4ff89028997bde67279b107f9fec9b4b2f2dc112d811 -4dae65205429ffb3c9734df32328ede30565ad65d8a1aa620bd543286908d747 -d13cec2a2f19cafbd2ad480206f8b2b39524a2fee286cea20b22b67dde321e3e -3ed87d8f7d9b253a16c648de1c9c8cd84c4f2304510ee263083ac617954b7c9e -62f397daee458e60e6058addaa14ea573888162b6777c4b5e80c2fbfc8f75ebb -2026c01a1ea38b85c4fca949d15b9a470f36e0b697ef5dcee10c45f01230dc48 -728f50abafaa52ec5f2899b09db8b74f46ed55c8efbd3f54f6afb0691a992b15 -e1bfe3b6fcb6764227aabba94c4450183f139da7e12df63878b0aff0d07c51e5 -21a29ab9fa0482e9dcb043cf704f17bdc1fa1f79bac725d6fb01dda18a700eff -5d691d1573cb0ba677a9b1a62dc483fbbb7e4fb0ee0c87cd631f7145b710d181 -85d5bf85df1cff42d9dda4430a8f6f4b6f6c01d20055d8d9cf1d48f268e046a4 -9bc64bcbd7742d090608a1c025f39d44bad9a05ec2c7b5ea4b48959f1cab0974 -537bdbb8828a830843ecb3b6bac3589cb8a35fddf8a55fe4445ee3419ecb9dc1 -3c9a3045f5fa5264860b6e310854cfec5bf920061c6a4784d911fbd82c6b5353 -72cdc7ff3dba22cbd02303654e4d1ce6c5f03ea5719bb456d1ab804a6a9e08e1 -15d0ddbc46f2ff494f0703fcb9f6c079e5af3f4a7bb5a4546f9ef8d708732fbb -1bb4d11a942470e0a96d5c83d20343876d89fd6db3ae1fe60034cb97659382b8 -03a4c8ee4a01738285c8af5812c4de7a97b1eae85315c9497c082b28990e232d -7603a06ade5075fa217ef86ed78492c31ce4082f14a6952e0d07ca9d8e15589e -7c3f49cfde17055e8695923477b71b4c09986c62875e25576dfc3a3854c1cf5f -73004b97da00a3deef1be0aec1920342613d3e4f805eda2ac121809b02a42d3f -de9e9245943a23627ae0c1c34b5e6bb1504ceb67966e9b6f104fddff62e82b16 -cbe3d401aaff4d9b44236ef0d04b7edf16eb08b7d19862effe88b696d05008ae -ffbfd118722a55a1597604e232416c2190b36c30928f82b208006c26b85d7428 -7153fccc92a65f04229c8d7b2c27ac4294034a051b45f6ed5b0fa3e23af3b5a3 -5f996bb65cf298c4e15e98d228a719e1c968e7d5d0a75a9bc3cdf8b5c4a136cd -a6995d94f5dbe307ae1ca6beb56dfd09a6683bb1437fdcd537e43cb1633a72bc -1e72a5f98497227072d863dee990660c137064f8f73d78d9c5a40096dcff10a9 -4e3c9dff0d2bb80c429e2c135895b2b3c5be663adb1bf39e3125e4017a6050c5 -d4dac24a8149a6166cf87493f766d9706e13a4c3b443722d7ddedf777c5d0bdd -780e839b10a61dcbb8c06caf2246feccc66c6fbaaaf8270e06a4838391d7ba0a -a3d35b278235fff9a707e8da8344c078d88e8eb2b5e2f8cd8f2134d458221623 -1dd96524af97b92662292f6e1759e004e2255dbdc4e0a9fe007e550144af357a -32cd32e348fd2e60d4c10c33d032fc02ff8a897c4b4b5c35992e6caa8bc4c966 -6a520e2e98184efcb59e2d534fa34c428bb51998e68e91dc9382e28798845da1 -ae9d6e418c2e3b05373fe26901654e1e1a7849431681479cf05e0c19392ac9e0 -562794d94316670bdf9afe2d368fdc31fc2a2a98dc8f23bc236690d897e209b1 -c6048724f4ad378857640140a356919180b348fd6ceeb5da8e4b3f9dae1cda65 -fc155e10b53a271f23c65397711cedf404dc45dcfd9d3c87d57c1365cf9e6f9d -64a11df0f71f72ff52a8a4c899879f38e797867570844ce904c3104e28f1b85c -e31f5e4dc09852f5b47b4fcf2b1fb394f4a8c9cc8b807eaa9ad4d8ddd816a28d -7bdea3811e47722cb0a11f3967bfdc501f5f19f5b7f925455da271243465b55f -56030748235d6c1e8cda657c5fb7c1ef58427b148713c569d2fa172a2d32e50f -7440f4cb961d34feff587acfc3009b39005f8ef1b91c28718601d140034b4030 -05dcca93b5d4a0778cfc1a3fbf7e489221c88c27e05652d3c3aacae2cbcd9b5a -439d3687e32bdaa54a317a6f70833c88af86056dcd68e8546832e7662713ce20 -98e5bd9dcfee48545391246e794e408adbeba57fc3a3ba4e18e487abd6f26a3d -085eed9bf8e30a77c85271294eff2f8e3def17482c5455dd60fb942f85dc73ec -9f57db31ce83e7e3574e17004ebe6fd903f485e5ea88c8294ac48ed09afa41d3 -80ea17e2cd33190477a0492a51ba20be31a367e6260d0dbab050cedae7659cf5 -a67d94540d7022178ae1d4463f84630d51af81054a6b7ecf1229d9ba0a6773c8 -e3aa1a9d95416fbeea9ed901f1dab166058080d42f90499b415ad8aafd99ac0b -7220401edb7a32b298bd9b9010679a1f9369a5bbe7cbe04b2c395f1159c2a2fe -b4a85292714a8f491e29c703932acd583f6405828ca8331612f5f580c049da26 -22a27b7aef2806c427af57147beef345e56a2ad82b0fa3662a31828bab7f6b6a -abf00d5bdcf2d595ef576d7da2ea634a82458444145803d443560553a7d17313 -b67ce7fa22fe118e9e8187dae14e79860b371c83ae2ae787210a86a6fdcb95d0 -c05f1b2ac98eaf239af2469397fd8afa989eb8ba0c15412b9f90c1555cbef583 -25c0999b1b10ce4345e6e949b375a91ec348eda0b0d418ad25ae482e02cb47d9 -ec19b444406d720a45986bdf85b4181b8064872f65e7a93bde15ff80ebe555dd -8adfc28b6ab58525a6a72bbe50cde6461edd83ac9359c0042709e63ffda54a50 -a5a6e72058b498b7c494b2a7e68014bf1c354506c4dda52d7173e6530340f834 -7db62785ac8e70a8f560574249630f3f89c159f31ce437b8a86cac7f5b25ccfd -b2fc41fc8392430c296146477d501ea752cf52ec9bfbf462d12b39291f49ae74 -28485eec80df5a1fa01806b3013bda44477e671e87e82f58fab32ffc10c111cb -76e7099f297d6a67a7374e26109f751361768ef8118dca742c8f20774549a2d4 -da72d15706888cec1edbfba70bb8149b54655eba7caaa85529df4bea9ce0c633 -38837abff2597c6b75bd058dfe7091d3719efc3964d1a386b7c6b93d491b02ac -86b08ff115b548abdb68f67de3b6cd280ee1544ddf344782fe30913a21eadc6e -314f3ea2ab3d9a3783d5f9be76c4caed815af7def664098cf1a167444f31cf02 -b9229bfdd8109322df0cce8fe0405d523bd8020753f3d80f49365d5006829fed -63cb9571b219b3869dddfdc2212f0fd468aa3a8c78d06f58fc6be0753bf19eb2 -b014e28d06053e931257185ff8a46b2c443b163f9d9997cd2225a33ec6bef513 -41aeafb9f384bdb7f3c78de5d4adb511c16259b1916b29440fd8cc01dde8ccf4 -e8bf0a4dc53a1e26c020f813cab07eda515e7d395348ecbf8c64186fa5a81390 -7653da3f3143382a374b96398d14bf60fcc5f7603512bed7e8b33e7b20529244 -187795b01754b61d5aaab742be9be4532ddcbe6b88671076aa9551ffd58e4930 -1f3fa48529d85586f1e197dd896f91f0c64ce80bd48519f8c1bf9c4816622cad -d9cbbb97e7628a64f96b6816c5b0312bb98a23715c3de2a797015203e2787aa5 -ef40b3e17cac398805fe76a33819d4825f80654270445ba955779204f5e8fb5f -418edf66b627b992cd3db5f04b18b5dd3f742689b3182d41760bfe95be97e313 -ed97e32ecdc16d3d574a2ba1092408b5ad6c165a39eb148b2513bcdd01141a77 -0720028f31693360e9909897d85bcb5364188d391e34dc98d86d4909fb41a13a -cd4e43c7f943889aaf1d430714d1b0f3302432135a39b11be63f77d04780a191 -cb686729a89c7badec30d3a9b416c32350eb416fbd37104d038b0252a8b91f77 -45b543618155a76f06274dfcc284bfea8726e55ee8b47df6b4760e22c8f2020c -e0da1fbba9564cd974075c1670bbbfa32b5b1598d198a1a9b82d87a7814f5d6a -e5a97d890ae6e9307f3147d78d4fa40f5388b9759429acdb0e20d9ddc923f4cf -f2865f95a8fc0595724b0043e90091a2315ea8c071ab631ccd04c3ea77541646 -b2fae2bd69c5bb80849b85fcc583ed6bc743c7ab0e83634e9625262ca557911a -3715e19e727337fd16171908a75e44fd7f6ba76157167a214f11c228bb1f132a -b6cb965beb1aeb597276e4e1bf52614076a37eb859f9d61669257c195560586b -b567183114c9895464a71774bae8eb31e9de3c11e0011f85024f749a571a3e2f -0fa7d8ce0d53deb20fd2f10895bb8aed95ac89f8956a8c93e809536e9087cca8 -09106a42a59417359e0ec681c5905a6024bd3208fed44320b723392e3f900e90 -767a6af4c4e67b407b215422a6f409d59c309d1999f973fd9b3746d983b0bb9e -1675aa41b9f6713630710faa59328b3659f559a5e547451191d88e336863256e -d43a577b77f81bad982c3d06cbe5a12321cf45da2d300346d8534c4ed6f449e5 -14ad627693dd361913862aa14548113a553b5558f8da4f5fe5cce86ef8b6efec -00b188a5fa1ac6cf819110e6feb793411cfac4f900a379178c2d7990f8adfe06 -4d741594d2134678e7f9789fd72e87985334ce7e531f0855525b9dcac36196cd -2d75d8bbe2b02ad9b20184d54e9ac6bbcfdb0d13367e2b4b4310b9f89172d59c -385866af42d06f9477dbb56e8d3bc8ee8c129849080ced3d7b83d9dc1a32da0d -b79f6e1760b7b836e2d9a0b59dc7312a3cd10932fc771d14f0f2278479e7168f -2f4e058c0177456811b2de2b5358ef33a162bdbd4d908e3332930d0e1bfdcf35 -ebaad4210a5f80a39279c5faad2803a748d96651778d0ce97289bb70ba010d93 -60ca05073141c30ee35fb9b8d9eb3ba37cb97fe42fdeef382fd604a1cccbee9a -65716ccdb777bee502ce3b654612362291ab13fcb507ab797d697f4f32d85763 -39b9cf437eb119eba024e775fe01501a8e7982d266531a5a9316abcbaf5b9672 -8ffdd900cd9814cf82b9ee6e789309cbf1dfc11f715b1a201dda33cf7527da51 -cff0e36d2f4856808b522d5344596058508302f36554419f9654f941ca0804e6 -b38a6d596ca3fd660901d1c3553aa92bcc95703219cdb0cc8bb540c2e60ce0ad -0eaeab36ac18b3ae477967bf586ddc3a45b5949ca5fad78910e834d8c83faed8 -3cd8b0546efd2575a42e8d4e44c80f375c9d960686e6885a6cd283ad3c1f1a9e -8e0cd7ed0590ffcad9da423285a26c04960dfbde0a5315d81e5170ae081644b0 -2aee581ab984fc189b5adbfb155a52d9f7ed759091062e9d2b2c2b03c9272ebc -a0101422d252aeba66664b23a123ab5fb05da5c62e83934c10f7a9489fe6a26e -72ae45fa17dfe3c1badf296c09a375d2451b7b7ed5dfd262a7c74fa4a9a4f5d1 -f431bfd1e79decc99db3f7eddfa78dfc46a47c0881f500f8fdb96aeb4fc4dcaa -ae0f9687e6edb2519ea85fef772477c3e33ddb52900657f018ff227701992647 -c9db8e4802cb0d6976b1cb0e3dccbc573bfb38ecc9db8a95bed9c4d90c97d3b7 -0f87ecba2fc8b03a7088f1eb02875c27cbfa32efbbf38ddfa77ab23c8fb36d1b -ce1112bfc0de7f911f1b096461faf86cc41be0bf61ef31581847b1b478fe28c2 -cf6a34770e43a95e08ba67e429545a65bb9e6e18a6c4dd2a34ca9cfbdba9cfe6 -63826142391f15c543076928f9867bde8b2b1acefe68c777fbcb70707f4f91e4 -7eff73b0c3c26986d1ca582bd05873f4e40179723271d1799dc4fc5e3dd9cf77 -64e41b8aa8dfb907abf53e3a0007a714d6c941114f5beaac82c46927441e3402 -36c2fb70de002ae35627ee5119577ad7fcb9fe5deefc239aa09e6bef15aee873 -db24b3cd614565415a3077b20c1b095a5726ae475c889cd9341c93d4a1984709 -5ffa8e8ef4f31ea7dcf6375177f319a05e551a8905bb47c9f23cc5c0e5fcd8e0 -29b3072632a060e6891f2b77bc1da20cf7da33173db210baaaf8270e0315b6ff -3fd6c2207b1a429577d5d9d66a0f8268d4aaeb29681a21f7319ab813e2a1eadc -39b8eb7aec1c33cc62809a10ef560d2453ed7551f097960efb4e4708858d5729 -6307189fdfd3ab62c75a7c501fada7428e157752fcabfe629902715193acb11f -ca4aff2b0ed13442450e4f2a4873d5cc3689f7d4f7e372326e2f7093bd7df4d0 -ca957794a61a2e813e24155ee3a67c4312a06c72f84acba679e67e6c71f43027 -cdf8a21da3bb5f68e576405c1283016e541a3e9eadd67a20ff9ad7a658a8b831 -2f30c18c451f553c1149960156b201304263eff2f2549fef2e4906909c1b4904 -ced62fd9c0c973b82dd66044bfcd36e1991e0b6b84b6102258e205a458952aa9 -53832d094e6915c3a1669d4f532132424fc707dce60bf9ee9e06d4035394192d -922641adf5777d563ae7960c8cd6175dafb255747737b02c40687953c766601e -caf56e747afdc67f8163de81bec4dbd48b3712c0d24e92747d98d5d1da952de3 -eb9ccb3a132121cb1c9b2de42fe1417bea313043b5aec119bb0d1e3058a82087 -bea4d00203fefed8ac113723b1081e92ca7e91363b86eec7bb5dc2e123e41c66 -577dce271c93c667cd8665372d5d3b906070bd229489a91867551f3127591bca -b1ce86d7d9bbd5f265bebdca4c58af03023e9ba2c291d78b629ef48bdd731c45 -591edf98d4eae6290a00c331780943d1c6671ac237a2844cbb84082c06d39cd6 -b04a2e5819d27a25da749ee7c94488fff5f59eb0a3789522ea85eb999c66f359 -d1ecc77cfe14774fd76b97270e30e95bec696aef56f99123db82304bc662d8d4 -6b342e53171a512e7d435f3009de3613d91a6f32f9ec2e11bc98b09c4dc4d516 -8a2ed64ac351109e5e38a68caac84ab583421eafafee02980bf8d8fc700f1a00 -129564d5efcd4f7896130e76fbcc6c6ad66411285958e3d17c2d408960cecab4 -02c5068c43df99d4de6b9876ec4fa2128d9ddcb0f10aa89aa8935f22c9445804 -4c1b0ce6cd07c272cfaddab0719ef5cc8c597960b7eea7b4cb5a10c826bed1b8 -219d464d72a0be58ae80de6edf876c04dd2abdca41253efcefc0552989dea491 -9605795e6ecbac4ffbc39307ce1fc794d4bd78b64ae38b2750546b8613378f70 -7c5c29640874f1bc3549f9a381ec1d13ab38b1c20d59f90dbd2397a573ffc9df -525a4d4e995618a58148687c5c949e14c0879316236284a571a5a386fc94cb2c -c5f7327f9269996e2483e9c4f22a813db3ba38cd036a454d335497f53d654d6f -e28e4583febc2fe34cac50be37bb6e42b8f92f694cfd4f805c6423089bba4461 -8e36e92d90a06f749d8a1dfd93bd0645dc66cd18ee797ffc06d4938ed9fe7959 -ee2ee5daac4e5f2e15a8b4c311eff43f5ea1a13fb288ac57267b71bd0ae02964 -f1901a7b5005a834e366399eae62532648625bbc13c64c006c372491878ef7fc -645667f249fc7ba564e152012e485320fb3c5dffbfcd936a93916045e0ddf257 -992e927120370994664643e2d57678fb19f0754ec4c483a8b6ceae60d39703d9 -f309e68388cf20bc752caee575c86ba39575a07528b65400cbe9fdae6a5f307a -b199a54aaf70c5889bc64a30d5cce65c2276ed1d9fb30bcdc94a65941a2b0e76 -3940f7d243c8de8120b5b2f2995d2ec3c7be6421aa1f7a5f8b6050c17771c5f9 -d61330fb818df90f3062f9f21c23fd0a59d6ad28e023e0d3d7eb4dfbcf0c6bc9 -9fdfb74f740579c8460fa6755dfc800c5327da99e494d9e18efc6752f1e6eb31 -5e399606ddfe98339d085bf92634d2f557d2a07db440f45fc2e60732c51fc4c3 -047f9f6dfaccaea71a9b14ae1e22223987cfc33856fa6d78be0c8b4cfbd8d608 -96c0699ff248a80af31d111d3d7437427688430782e1e99858a2379852ca04de -bf7d0922b11865b5771d902dae865c3ff7aba28da86ce91a6c031a647b6d5676 -672480a7ea057dd805ade4318482e9f5c7e2592df1672342b98c8b67cf25dda2 -f69d55e28f1c35b070acca2e4c5100c18b102164f534b151375bf8e9ec27cd8e -e43a7a23cca2c5462ea92b202d9eaae4da36f8df69c38a4689b04ba3e6e6a2a7 -8b06763decd52595b21d5348e3f6fbfa775f8b88330a4f35bc3213a5ba19d277 -4fa8c256d06787e6aced43124b422d3ed2ca884c64da93933135926880b21cac -35e222c4b6076bb2b391357e0c643f04d209788fc140c7303c90a3c3faf5fccc -046d3b268154e017f1e4082819de8a5bef0c1725f008b936a243b2eb850d0900 -4560651003c30ae5fd462d8e68e4ae51d17b636bf9d45c7fe07255e470d2748e -f9720203181e528304f71c1fa2fdde7872ccfe55bb77c8a04b529cc5ff114c64 -544c4896f091965dafaa0eef5e8671d258f4303512567dfe2eacc764f0ab9a78 -206ddb0942d1dc868d52241185e7c830c57f31ca9c08453c6a8f35bfd7220a52 -3e3148beb6fca0c2d56048b7755f068220d59d4fc713056bde03b1146e8e4b37 -cb5cb8a90858920236e561fa21f179c12f7be7cb63eba15759bf0b6299ef3835 -b8d41edd37c1f1098fa2bf3cbbfe0f7a98620e7b072f5ce1c90bdb8d5f6fa9e7 -8629f3c6b4bfb047c9ac1869daf234e4a95bc0bb73f036de76595dcfa2d5e856 -22b48bec72edc8a798ae673dd434b01e89019a908f59089c9789f58b8350a43d -b00ca1fe192390daa4e85e7235492ce567dc403ae5fe8f0761274973e07ec119 -1b0ae1cb7f6f31076771d896139920861da5c58d3403a416f243f1b58cf54e94 -f3dbc9351633887e8d7ea6f88fc4a0dc6d2a471a78f98ebdc2a98613499a80fe -b166a4b803b7b4ed05ccabefb2405745f1ff28921a05a0245bfae09355910031 -180305de2f64f071a7abb75a72eff13539eecbc4cf54ff0bc87f6d72d8a742cf -5073aaf7942a137ab2f273e22391ad1d0dec9dafd58ec68553be5fc4e6c4936f -a3e67a86f4ec045cf294a1cb7f9a60ebe5178026fda700042cf5bfadac3d7ad3 -17f9bfb62ebd5946992569e9aedbdce9f3abfaecd6d8fee82559f0888d48f794 -697c54b805026ceb1d708751d88af0e5cf88332068833ceeb24223f5b5025384 -066f67ce49e586ebc4249bfb15074cb522c3626bf2571af43f0164b044b5aa66 -9d8217230edeae2453fe02f018bf8a8043cfd63d744388c12cc8430ca4157c81 -e7018b963021ef43aeb42f1f5246eedde76ad7507e65225430f2ed40877214ad -78a2e199f951e52790e30ca09c0ea8bb318756137639532e638661228e314364 -1b1d60aefb5222a3b724674ab6fbbc3445b878f99b629de47e52e36693dc4060 -9fcb048910f3d70211659cdbce05f0733af96afad264d1841b2fe33f3df5262a -92e98f7a5873f70b931a7c78863dbaacfde460906281d5ba5accd188edb2924a -bfc1c6313cf0cd29ac91d2d374734280adb1ec4b2dac9b53da1134b7ef26d10e -e05685ea4b31e5396c4281ba371b59b12516816675ef303fe4f01f1f84de922d -69edc0d18568c06d4dc79be0b9754b8f88632fc3a74fa418833aa2943c05c912 -b7b60343a7dc7a3f6f1aea9d83011afcc00619ca95cd8f97ea85176570bcb441 -e9b74ce8b100efa22290b3dc8113db1b383ec98f8367eca2844bf1742d752d29 -7cca604ed822c3f7b560300b39afe9fc8d9340735a718b09064157fd10d43dbf -96302c60195fa1d5bde0c68c4f235184898d0381849a6011239ed7d6c47814e0 -a163b82e56389248e7594fb9f4a2522ccea4eca0d36e1295b3ef67aead84cc8b -c297009eb5d21eaad7ab4176a443acadee13915c5ca44ff41ccc2bb9abb47fd9 -6461ec3d38876df77e5fa9993a300c39813f788e17320de56592806658b42a04 -dbcdaf7bd0684f445884e6f1a574467e52019ee8fc129ff3fe74fb03a5d67047 -80155de767defb2964317f6d058d5b8cc35324368469291ebb15cd320d566b96 -c5079d12493a8f84dda5005f8f3fd7038c40d1e704b4faade3ccbbdc7e90903d -fd3da3bfeb37ba41db2557640f2bbd6f3f49d9e37925007cb97f98c6e365d06d -282a433e1aa95dbef41be2facde3f5a08254a366a74b7a2f5c14898881d4be99 -aec4b0ee10022dcc55501637ef6f6570d437dc8120e63045002d7419057e5c15 -6a5539ebefa7d632d343a41df8804a6f855eaa3186b3f97fb7f79fe1377f5472 -04e186f1a97011fb950ecfbdeec1ff992b1ebc6837afbc0d9362c1712b114bb4 -4747c291759e7fee3f81b000f9ce65feaed5c16287f5e812f152ec27815bc6aa -35aaa245c882c9176baabcbb81548b5f271c42169287da48a7c6140af35f09a6 -b82abdc84b8220577cbf0ecf0d8edfd303f468ab9d6a2b89d806b3e19297eb13 -eedade8e405ae9e0e9412525f95e6a7716948fa2ac037dce19d67a156c5b813c -0af189b9b778bbfdf730c2050091018865e23d6cff0ea4fc0d26a0cc510ddf5f -456f6aa4f1c33fe7b40f5f8576b477970d6487275389ce7b2444f09e3fa5c426 -9090dc59354fba985544a261230fb1758bac67e142c4a1e71664d7f66eafd525 -22b83d1f2cbb5f97f04924e8cc4645b27331eae812266982efccbccc4ee93bed -e1e0ae7e88768e690cfaa0abba98973caff66daa632834527b26260e0a4b1655 -3994bdc9c729f2d45f72ba1c510a000b731ac3d9191e1faa5c9cbb7b94056d90 -f65df04c47abd4bc12b9ba0c1f84e4d77081d773a9dd939ba4c4b32785bbb337 -ab4df32d20ce0df7ef0374dcbf88be107e8813b5a769d530cded5649ec7de7de -0f7f373f006ce997b6f7bef0c52d49b8a62a620a37069ee851e7d23244f6a014 -4d50911d347551a63f9ea59cfe0159797af521c09bdf75e12a4a8e4c38ede4c4 -4e7a9712340d42110b7cbf4061ba2f2a5ddcf67a39eef57345975a9198fb8573 -f34b9a350845815873e4ddb7866c702ba7193fb92d21bb74d8bb4c49f2f3c7fc -3b703bcee9e7745fa637a9383786fc2729c73c29d2efa5ea274d9573265df506 -c1ddb510c9f3fdcd3a80c0ab90748651537efa2d8e0bf374472b5c7bb50b0101 -7263ffae7f90a979c3e5f3cd8a5cea478627890536251c4c16c0f63c1c822efa -66a75e01a68758fd97c5928bb2b1df6f2b74d2950015f2eacca793e7888c26ee -723e78f3cd926b1979bdf422bc83b4b51d1a0ae3ce120540e9b653728d769265 -c03c0a3cbee6240c0de90646e7ab730e5e0cf1124566bc16ec17989c1052f8e1 -84590223348e5b4510204322929d8632c4bd136c89169d45718a88babd7f2cda -62afba21cc46bb3207676b96695d911fb99bbf37b375ff4fb8be949fcc4b0481 -3776a3451fe65a47d623565160358c977d4bebce7aadea5648814b8769dfbaee -b8bc2da767da69b10daaff6a50b6a7006ab74f8bd0ec64e5681199b7f3bafeb9 -bd0ebd1a79554e8cf3e5896956d279d4d27202a4667afbc46b84c6b9873e8ef6 -9d5b0777a750a5c8ce86f3d5851cf3203e8b47edaabcc6c6256872f31ff228d5 -7b686b38b35d5dca23c755a5ab9e661630e61d1d376a46466b1f0100f66affcb -fd1d6befb5b196143998848e48119456d6f5791bf1473a2cacb9973bb80421fa -781d90e0c1e6912dcff9ff07ebe821aaff09597bdea4e71e72136c4e37946f0c -146b9d507ee79dc7a715cf4d65db2614cd87c5709112938acf9bb2e01187fc03 -5cea0fd5c2ca980adb6bbf5b9eb427971bed47970a13775be150a7a87bb2b8df -a92f8c86b98a36ab956ece9f5c562071306642d74f177ea0ebc1eadf96cda6ee -4c53703763505ff273c296a11adf59c4919f63c78f9b7c2fa998f5befc631ab5 -4dfec01d96fbd7d076357fd85f26eef6c10aaf99a7639c5111b3a13bd144bdfa -daf1fa9633b69feb2590a878ce4621251a2b860b3e1ad8d7a6ac1a896380f206 -158dbd525bde081e9e7c58f7aba0ba68a22065d3fb7638ab4b2027cfdf4dd926 -0f624b197d19691e1219f705d63781d6eac4ed8bddc3cbe2e7c735f73aabbfa8 -01081532536832bb4455483b827fa9f37d547a4d2cfc98707e5a4efe77037671 -faafb5489b64ea22fa51f2df96a89e8f986b3fa39e113be69438f1a4bb1b5d1f -33ed7ca77228938a98bf47fa54eeb2da8d81ecedec102f71c278d824c2bf5bb5 -37cde6342b1ac156946de7f6c4c12e1d639d83cbe78d8775cce11584a4edbcf4 -59c05abd0b590172401b83fe9cd49b347c01671277ea43400b1ff4212b3d02fa -cc6d384f815d7fdb652ab34d7bacca2e9b2b120de79e3532f81d778b6081d631 -32c88f10184f07abe8830a3f5efe712e7e3cac875f3b157ca3a0dd8a0417d512 -9554ac58171e09ae6ad91f69d3235be00c67d41e00b6988b7df3a07e5d65538b -6f600988178e4c98db360c5ded8f7f8b7866e6d3168a085ca9a823a347519ab3 -5f4fb80774aa4bcee175c02cbe39ea9a0ca56044f50ffb2fd637f925339d30ba -8f4f7fd7ea5a606dfd7b82ba69b4724c960a5cb49ad40f1900a0969cd912957f -345c08603ed7e8292789984bcfafc504dcfc19eadb79ee198dcb6539164db7bd -4d210c9bde5bfe4207c363af21967146511d70f7a0fd682afb045cf22a37bfaa -edf500dc18251dd086a8d2a91ceb979d2a1e9cb45a6b59afedf66174b764dfc1 -1048356c96b585d142f943ec97c62de95f9b8a8253ee0d6b2b0153c445563826 -787921b9a60417cd4075922332dfd82be6d45b581b581c24c4548ac5782f726b -0bf70d2d08493e9a96668054bccea2db3f66cfa6a4d37b36418f9fc8d8058c9f -e713810483a5e75b3f61cfc012dae494dfc2b717cc59e417e25e8c0e21f62186 -acab4158cdf47343ad8b73dc8e43dc792dd29897d8aa1fbb977e9a3dd20fd247 -d0ceb53d2fcc627179dabb49f2920cf8a1fa4d57f39da7e5ca0a94d377cbb20e -2c98445881201bebff5e33ce17d8089f552c3dea96bc70b99cdad2289a3686dc -b5aea099076ae9450c3aa43f18a3d98d711e43835c31f566866ca556b2945738 -f359ef7e7ade8e1f56bfbb0317fc2d08846163cf343c919adbe19686ab94f7b0 -7a06f3d97d5545df781e11a06b06b175fbdd1316580a66af1d94f4247f158c59 -d8e1fee6ecb6ad565e772fdcfead3898a5be123f2d0303ddda02b8e86c7baeea -70eca3cbd43509a85b853eb3286deae9e29921782ed417b13cf1e6775921b2dc -ff5b2424f98bf14408d446d0ab530d88f49d231315c6739ccd0cc8d01cfdc259 -f47bedfe7a53dd893cd5be51674e6ba162e1a8aeb2b21ad54819bd3d648318e5 -4d651933c280e81a327934ef0eebb83b795b3b384a129c16536bdb05bb2ea560 -72241eeb5f35e10fa050fc0f05fe4deb3e2e8eb52a97450c56594746d0278802 -9559abdc108ddd3431c2cea2da1886ebc7a973ef73038004fa13752c80a35ee2 -8e5772676df858dc9ff0d05c735576262b80e3e49751d78f2febd65ae4c1d0d7 -66cb53656583299d2c058bc94f272d398f72728e72368362a69f69af06a708f7 -ceac24a0846496457635fdfae466621eb4e0755230abb71bb5abe293abf7cc5f -8ea2fc15c66a5b2fc6a6d510a6730d9fb678a485616374f5c1c01b2ce834add5 -6f8dba31a95983c97af9e9ec5b8406fc67dc045c551ddf6131834edd18f79d55 -983aec1d18d5fb2209e87f1157df947772de42d04da8085d3691dc7010505c0f -a9724190d9a82611cf435b360971bdcd2e569629d98d439da052bda080ce1e33 -bfa5ebd35ef2e7dd77bd517f1cae2250b13a031c69bfe0d147919c53ad773024 -142ecb1a3ba1ab50a941fb54e63ef49edf844306f7e5d12c9090d2819dc6e450 -42936015482c7bd75693e910eaae10f04385f624083d00276d0499cf9891cecc -d31b06128a7afa49154eed960f37e7fc260e1372f1d4559062471db4f0db6faf -efd3e6e06b578e2ba8ffa1e9c3f5a787124a22e0111ae960bd85fb1d62b6ca5c -b2b3a87e3081470706237fcf936e37dc5b408d0c41299f921d810e01b5052751 -cfcc27024185194c147fe01bc1c4409c520b3e3a5c0f5514aea4cc899ca9e9ff -7834dfe5bb0b4b0b019c1e8163f294fb6ee50b05fec276b53f04160fce3defca -2c33ff34f6b1515705ecaba0aebd40a99fba99942bd8d451e1c1e489655daf7d -39437b97be715b11ff28fb291b972b143da98f5c66b2d02a47850765017bf4e9 -82e2bb732dc64b51fd4fdd3d8144d1231548dcc29bb9927280492da505dfe82a -dd17fb67b02ef0804bc82339d60dcc1c0f8789074747a805a7250f494dd1e9b9 -173110c4b3f2154e865371295ebad4e321f15826b3d3e61a400bdcd15ead2adc -2a5f00bc25e36413e46e195eab01069a35f34fe5c00f46b90d2e444c8d5e8a53 -bfaf1fa61745cec24611b2854a7ee8532b54b40ad523f955a4fa2a9c546dea87 -e6d9e2de21fc4b3b2da747fb3075a641b29f6d6cfc3ecd725f26972e31594686 -111bfe80caba23be92b04171b738c1709bad40060fb0b603d3a2ed6e7d49daa2 -627ea6916d3fc19815fbd0fcbe5d1ec8a8c7a6a7488b465973d3c1991664bf71 -003353d2b025d571348227ec1700407e16fc5bda2cae07dbe55bcd7dd0207219 -f4e61479f22c8b7aaa0ec7281e933379b5d25a6ad9ce46a1c67a488cbb315f2c -08fece286194bb86c66bfcda0fbc668b8b84c2af3e9cc85d065e17f55863529c -d1668f07dcd6e51caca4eca02811c1ffb9a4eaea01a41e8bbb12b1d23cdd10a4 -97d1a6b9ad43927837f9b12b9f703d414070ee06729c1e0f78d5f63629739f5d -95cbfaa9a695db4862149ee51c566b8f94f79ef9a3de87c0ebfd3bcdf4940bfb -314e1bcd17595f3d041b65e4e7765b60a192c4ed917b8361ba0b5fb4fce8f49c -b09412a1ae8f99d878a8fbdd375de3631a63119042e11e6d742f909fcd775784 -1f5a40a168b4da3dddc65d947ad0950a1a275fc72a923422db5fda3d54e4ed03 -a1ae04ab0f59134abf88aa65d6944affa2bd46ed8c5596062e4d32536d2c8ffd -e5cee1bf927d1affbf9dd4e214ef0f323a9f48af8ce0ef87e858edac7a6cbc3f -9ee530f7609cf023032a19298b334306ab3f5ed123b7652aaf77ef421dfa4ea2 -e1dbc68390082b50940aef52f583767e8a5d9eb33142f9883ec9dd26a4c0a446 -31e1b1e55031a9defc48060e783c7a56426e4f690aa6cd006c5a9fa76310d351 -9f8ba5c79c301bb370d30c7b3adcab60adb70e4b4cb9b9dbeac8bb08f07aba62 -3fa6c7805a38a4cf9c5b7f2ddd6dd510b174f7c63b2d5f4e391005bacb81b7e8 -5249518ce22a99e8811376e7a464e22fbdc4574ab3684b416dab3526b3bd0c75 -0acea306c0d448fc4942d2c61d44566f8a058ab93651eb319affdd9ecf2655c1 -d00500943b59360b6c75b780beaa2f1b98165ce2ea6a64aa9435ad5b4d57a089 -0fb6274b5f137ff957e2dc801dfcc8f778fec72a96b31e7457f421399dbd9dfa -c99e611405a24bdf0bdce785d6ade5a5c09ffb66f787bcc2ca4b7e0f5dad5453 -b3d87e5ba383065143952a9364df8cf4063b2f7b3ab30c263e5b92ec64c43c30 -502894c1b01fee36aac472a6e2adbb9b74129074e25e4cfa3c70e8ac2b3d645c -8f54f45ba3ed89629cb4f2f35c418ef74a194c496c4b2518429067932d57bc0f -7569bf4fcac26e621327db71e19eeb5335d8a6f25c99d6aea57bc6ca73238c6f -ea54a43c09c65c83d5319231adc05299a668372a9f77833064c460b312fd39e7 -49426fa209cb1f5d3d90c043603c8f997470de5cded5bef35daf0145f5dca5da -50de2bb8b678e6f36c53643aa97f3fb0bfb3191ef20abf0022d160732455237d -45d23239e4700ca5d7b71231d537bd032c3f2e7fee61b5e32caafd5de34b2a31 -9a4745e6e94da94286497233f66637586af51856552b0430710606bb3aefe457 -acaae21b8cdcd140b2bc4ff16705fcc80d04e0bd9b6a3207d933388b624893fc -349fce3e420690841637e1ce83247d5de15a109350c60944853a42fc3adabeeb -69e78bb11a5143fd2c465be7f72c9478a96883d1369414bcbc5b20bb60457eb5 -22e748594f23e082c29689369e48e01187efc53b3637218a36813cc4da7faa36 -9e29596f5de513074eb3a364b82e1af8a0cdcc513ec66d60f1173dd50937ee3f -dc888950c9a6b86ceebd3bf64b6319eee63db2199b824dc84e53553442b80e6a -6f29d9ed68d767c3d1ae78037e2c7835800e08a67c5be8f57571a71426c25e30 -a80439f9976ba351cc64a15249905b04742ab07e98b867d4985444e7a9096346 -8f70bfe63fe94f0a4f23257703e8793d059ffdc798ef3cf642a870aa311abca2 -c2a19fcbe68054c2bc94e2d030e8bede94db3c839e3d85302c297369903b9c9a -fc45596809d3c3f2be2c287d8b49273640d1dde3c7a4000616cb0821a01ee775 -e7e1b96c796acb7764ce16478e2c98547840df255eb133fe407b5081d808f368 -c575cc039dfd5fcc9e332e629e8565cf227079d25627dcd5e4d6a0710b486b00 -7189b9cc441a094d4be628d1990b63cbc5cb7fa127f49bd2b5ac659115bbb018 -dfb667d4154218d907abe558d4fa3ea3c753aef0e05b94772e6ddba0b88961ce -49d8d6f1d85930efde0fbd9dfa0682c5a8adb81d8d0be2fcd209238765af1977 -dcb18c4f80bbafa42b4cccb09f9da4db574398d30754f0c2870f0ff1d628dd4c -b57e3791ffd27ee4a9793f3ee5e105a917cbf9b6dc9fb7a32c752519b8334b71 -8fbdd41eb77d5e6c5438c6cb200559b914cb5b562cb914d777f889dc0af180a0 -3d2c2036358f8a105ec2a6f6313155cb96c5d792e2dd3c2fec6c56084f295047 -c1ef4ce1317930046ee382913d7df30626801fc5f6d1501fa31e643345128e7c -1f9dbd43ba580ef2bffd9af99a7a325a4e39f02f4ff5d372fd1ad895c3741914 -b1b944da9fefbe268e9a4763767718dae9d44728591c4e60845231f31ee5e929 -30f7c26c3235548323c5d14c3d7bc73033940071739c215441a9e72f2ff242f5 -5c65173ef32f00001340a53936c3f926a54e0818aa8cb28dd6fe9fd1c62ea09e -141fd00782dc1203b43dadebeb2104286082a14af250bf64ec9bc75371a9542a -2d27f971d3ff426371bfaae72a51d2aba44e859625120ccdfb350ba1c7f31413 -4669405f69b8515e23b0e305f3cfb9b0f29b410d26062bc8a1930ca753184e1e -dc97b40c9769450780c4a742ece35d726475e7d5ca91700e23cd325c7853b6c2 -b9b439ea12ea4576d7267e7e19baa00665f42d0cd312715e3b92493bb6a3a6db -54afd1f4c5e7f7bb20be232591b37778de18eecb0d6cfd30d247240b777501c8 -82b269a8959952836bf7d26713019f7677937a97354fd1106f6ee6d09f6c75d0 -296b22831ecac76882f68bb9434dfeef9d18f0d5b8ff6615dcafb348ec7a9866 -6fd749afbcf651be1ed1ca671a6013ce0c183f1ea86566dc9159cd9383b9e5ea -9900ae6c384ce3409aa4db1603fdc010083db0f0ee139b27c6090b8135799e8b -420f8f7b10e7334d53df7a0b1581485bc449776ca4b2678a490f9d0ec5207514 -de7bf64d8cf9711cbaef78b6b599d518d77b4544434b8cd95d04149e1b546204 -32b266a48da343d0704d10661485e4c11d4fd05fb727ab2db4975482edbc7c42 -b9b3af2806828da2173a304f83b9cff0ac4c5d4f553fe7276caec477bef48321 -ba153884a05e23002239cef2f5c95d8f6e99dc9554ea767409ce0108e73b76a4 -273aa49f123dfd32d27fb45f80622c7f61bc3242b8e00e6f50ea21d0b2c35f0f -10308818835feeb760d0ae64c755aae98e40eacb8f0ce744c8aa6d6b5c1d256a -0a476118f5f2d1de2bf12a0dfa68ca2a2e99f5cc0fb1aeb3e56cd8ee3221dd3d -5ad1fd57901727acb63a9aac3aef6c753f57e34aec57d0876b442066c2e324cf -b6637243db0a9cb9d2fe8e82e0dd2d513ad2b33f99bdf99b5c551cc0114da38e -392ac1ba0d3f536963f6e078a6a123f973395ae4846dbd335e30af20c3c23134 -91e2bc5987f44b6d377af7c5242e4f9ffb43517017dc7340f54460977dd8f8b5 -d1461c6707040c47de84d198d4164ddd7e7715a70abd458507fb336b824ba24c -ac0e6901295372b2863c119d0ee2fab224f7c0b56af33c8b82436ba9303cc0ee -3a809129e3c15b8c7a45538ec88fd1597406f696adc7ecdce383d3715325bcec -7563f1f4baaad70af9d24dbe272710dbff77d95c3462aec9e75a1e24e9f0f716 -2f82f1410d4b77344983fcae866279a98112d6718ff23da33bf16255c1b10736 -e8f98e8ef876d73ab139009bda89836d18dd03dfb13e332c50227032ff403ec7 -26dc8fa78d77aaef79bee7e0656275fbb6cc6aba6bec4920167380a1b07f8ede -5fa970f56f530ea2cb06be96def3b5327ff0f35d2d2152d23d712013bfb47b1f -e34f9339712f75c84d90df05f9ba2e8ab689f7804c588e5e075942b6dd11d875 -c56c016d18f48d569ff5ddcf4e323fd9fe03d5c702da6b98776601e925c73ff1 -7943756f5a4867c8d9c3f0a23280e873a891a6371c258e1cca3c4dd8be44e16c -267512e5fcf49a6db090e47da0f7a2f56804992df1c5387639b67aea74912727 -2d54a49823165ad330dd59020f1351f22d2172d018383555b8bd88bd50d5f715 -0839576ac6b14c3d651b54411167189c9b93f44e1783880a4c1b31f671988e19 -be05d3e519b72857420d6053ee7e459e98b31ee77dbe9242fb65d39e7065b67d -4c4b6619bb0a8bf1f860b98111710a61e2038d8ecf06c4f825322a66d327a631 -0bc1e8941fc36ff52d7286dfa8d2c38b76864f062457c198ee7335602cd975ec -1958a3930918b4959aeee256b98e0bbba1c370c9ea62913e9ef33ec799bcccea -de68997283d202476f1f065861c7d611478ffca395677e4152bc82e9686bc4fa -a82c0cc2a7e8b025eabf0fdc11e0564eab69bcdd8c4a05e5c249164c117ba859 -3b0d1c7293455320b0dd104b95afbfde7a03c0ec5b25f9d9ac6accc4de9ce736 -eab4c6726b23a116ff885b29258a57981be31f03ea5c5bf6db8c9ba21b831f37 -41c32223133c36127a0b3ea1d378a31002722f439564eaa70bf9c6465c3a7d03 -da8deaf66b1534bf11654562b6f4ee776d5fd7f3d288b51bb1e78808d261120b -b367cab8ac4ad2e910abe6bd80f9d421127cacdd282116a4bd376ff6999746f1 -4202272291588b6acc250700f32398d7ca3229bdad1e2244fa8d5a93af30fd0b -98f114afb0e4f4f917aa0935f735ec4d5d3293ba3c9d70af980d3fc9b9ba6db0 -ec2d4038a4c9872775c3ff227583bf4a0bb3baa3a14fa3757b01c461b2f6b1c9 -4e549e58ea596670aa747ee95f8b881391593f409cf52daeed278831aaede2f4 -b7dc53a8ea279127c7ac74bd500f97c86a513e546e05b343a3d590b7081df88a -3acc4d21a3c8bb060bd4ac8cf01971a8ba33d1e7828a5e64453028be2731bb48 -dec51bd85a6114c8dbb2f6ee87ed07af749318c90fb75a672b2b9c656c0b760c -ee4c6c462f9d6fae1d26469b37a043720fc710031abe62cf4deb987749340f27 -43a142310687a8b5822724b7b0657e7b291e803d14d2eee8b795b432a983f54e -53b17161d32c7a2d937fc8151c37866d3e25469c346b59c13930312fbbed651b -3019b9f09ef2c2a217780eebe098bb92f43e86c1062e161110d23b17b9b92682 -e32feb15891454b1c6201c375d58c4f66bb0a322fa8cdcdb2ad5556a9b6f0eea -2b3066c1c89a44adf94a7ee1cf4e15d51ae4c17052ac66df51d27e2b1cc36871 -14867d0fc33ea44338e9823c1016ee6263b1bf8365b900d2acdf2dc41b53429c -b64e9e89bf148370f62822b51bc4faf675fac2c9cf47a29f34f37628a471c4e3 -6daa47bc0b23ea7c1933d849ed2cec6eecc3ca56cc93a14a4258ce5148c0dc0c -f4f236316363140a32b91a4a7d78f7bd49e9e138b037621e52dd5e8e30062fb4 -1c537aac83e2e85b2e57cb43102568966d75c37fedd7799108a24de96670fd6a -4e5d9b9b778b6d25d0030070ba7329e482c82696e65df223e0579823f0db7323 -e7ff8a4bbe8ed37afde9a15deb7fc8521a1179e9197e2d3e6640e591c50606e9 -11815ea278b0809d5b7ed1dac77d333638b027e340fb624e9f1d6fdc40ad7cf5 -bc8b03e4cae755be841a9c72c86930024006b17f89f9d4ee22bef17b5baf4cd1 -364f889aecf94c1cce61909dd22f6d35a389136125d44a6b4c27efac337d8e46 -6d657a804eefea97ad0b436468e088a93764365d2481aa2d5e79ab437ecde035 -43f6023c3b75a1eb4c5b1685bf0eb3b9e3944a78c9aa0d410d20f7e366670095 -8f17d09d8b713ba121c46774ce83b09ce675193b845ace5496ed1ed96bd0f1bf -505353ed69f2aab2eef00169531e57f8ae498ec78d5d01aa45f4d7e2c96c486b -e14a1b21a1b61f6e73c970630692e385184d32c08036af05fe240976397d06e1 -18892245ebace16be7ad3445945b9edfd4794f190bc4bdd159813aba09f80544 -58a0c5d5b5624fe081c09dcf2b1707890dbc43def71d3222f8f853a5d169fdaa -95a33d1667b9e9bd7bf5883cdab58f17708bed530ebf7eee4acb2c9bae6b8337 -f1b4cb61b37c32cc0b3e390fdf35df5bb198a2d704ffbee24e27c4c1248f3f85 -606de45396611b4ba6ddbe1e9434e7e48273365ec73dd8df8aa378822e6f1f6f -8f35454c47ac054c77d62fddaa17b41f60997bb9f1ba5b700e7f840f1cbad1cd -e2305a92564e0f4c88bc4f3ccc6ee1175af3b2f83cbc57fcf10f0e63e7f635e7 -1e428064be1542f59407f2a18f70adb7d0eeff6baf6ed415d7a2a0237d17a726 -e84344dd77c48b43f47451142ae90d22b0e90e993715c55d0be8c808944f24d7 -d3b167f8f6f6469aba9fba2bde048298e85784ade8d96fe228ae328a0c8532b8 -1d97be36095fb1a3930417db8c50713f86e647113b607c7c93bfb424316e1aa4 -4f8543880efeb8b9be6fc7b978a4acaae9782a2721757f32173cc39142103963 -9da323208310b292114a62ff42e3cc0c986f709f986e07b9364634fad4a3be7a -8a63cb7b26036eb8515b8ae6af058874ca36054c184f2626ec2683bf21304e1b -5fde01772a0895de5ae8caa031125b614a83b949bf40681252218b10f5d4ec6c -21e8190dafab34551a3b8712b13d195ad6c934cf96b9da70302e84b34e6f8bc0 -ef3d383ccb7adb2e5d67ee464f9b2124cd034dd4ffb20962a6abd3764694e07f -4b4d244fad6fcee6167f5f44f943a02caa9b326726e949a8424496a79f5acb37 -d8c7c3b10d5fec76b568ee77b02061eec7bfc67c9e75ea1784e15ecaf2bade6b -48a80532beea72fbe2ce5062da978663984b2cfcf067ddef4de6155f60a6c34b -b469c3db6fdc40e5f79f3562cf6f8bc43ff8032692ec0f95a03263e2cd7cbfe7 -5b2f4a7c4dc6b8445dbecf16b800f43a6835ba3226b5b112cb09a18bb0161210 -4ab91a24919291406a436f4cafde0ed998da1b99718d003d3afa3729203b5999 -a87df0b91c5adda6e678039344bb36495fb1b5e5965fcfc86f6f61763d48c0d3 -7c55d221b1fded8a9a359371f8c08c778e269334c2af994b75186f3b75b7f61f -6d6d48def0aa6856962f7b9c468c795abec3b622ed16241f4c506963acf2cb36 -29ab91296d06193741f36343fe0f315877a090df94858d93c527d44670760ba5 -68b61609a3d750e4153c0f17dcd5f870b3a38b7d2272ee60a24668afc2b54084 -63664a6fff7ebdf7d2bdf9b1636b17041bb12f49ee3cda336f84c77746fb5036 -61b18775cf02fbb4c635fd09886798b09085b8cdb795bab93438ad36f4e9c23b -b30e1fcff1bab17fe49566f755ff904cbc11da5e966a545c6c7d7259ba4c729a -391ae47953a99bc4d500d68420204e23a07f6c0e137bd1a7034d670e1e9d8804 -1bc039653a023a6edcae8f73c93ddcd8a2e85396f5debed0d0565be384f21c5f -1171e37ce2443cd8ea5b20da6bab9b62ce5e8f1f485a4b3fd7fb22ba4bdd28df -f76493059c56b7a5c65209ee98f2e81ab6e25cd0a0f81cb511004e9da7fcd65a -8e73b549ee33577db68adc05e0b24e820500cd50523470eb760844155d4ffcd1 -759d5f50b803888f3bb3a616f99aad9a18a745fc6c248684c2b0df40e38234fe -1d21017d2a7a1def67c9dd2884d2239e9e1790910a8486e5cd001d2aed32e05c -bf6fd016f4e70e6af610330f47048bfc8d0a490e60b9e27cc75098a74147b30f -267ca6983b5940b8ce47d4fdbfc3a7f89f78ff4c35ec0a50228aed5907e05dd7 -ea33ef10c079981b1ab1c361d78f58f78fcbb3d9d4a569e0c8e1f86067bd61a6 -cdcc34c490078ea150b792d466b7a6a1a4ed7c46f4ca2e46800f5498820464f2 -c88c8e6ea79bac3535fe2c12f9e121a07588426e60067e13e77999939ac6e36d -9b63c024d67d2dd1a1e7172a6441a051b2e1405877aea4ad0e78cabb4cff67cb -82535954d4ba25bbffaf67dfa0d2a889592d2ba5718168b3a620ed8fcc10720f -b25da0cabd8265af47ce144b68c6058350d643d8f0746c43ace3b7445efebca4 -8d48d6f46c9154a95a4f4b8962fe1392418ab22e84ffe824554c74679bfd6662 -09b79c6d147858aa4ea978389503c1b8f0dd5ce10af89739f19a42a932c3cc14 -25882a16c505ddd2547572b93581ae8f0eea2c7725f91b8b2bddfed70ce9b39c -398a0beb2d83471822dc81039695f6fda204907ea0078d854dc4b86318921169 -c744ac7d846af8980e123b6219f8663b9fdbaa3416e6cba8ae367755309372ee -84b812650858053cd0f7f2d4e62d8905b0cd349112adac19953517ac36219044 -3cfb831fbe6e045dc567c182337d4148036e6e715a366a7e2be5bf0da704808d -7bf418275826e99d696b0c296e7b5a15f5e63f9c90c5ac093822290c8d254e7e -828104afc3ef7c5a8d8fe631f191e266434f34d9e10619a7f4b7df6566c86463 -a86f6dfff94f01f8b4c7688e999f306a65628679ab9123af6dca39e88808dfe3 -e99107b918a8dbb02b1d5ed0f6bb82d115cb36889e5aa14c9cef78bf09d3b429 -c1e3cf2ff96d289a6279d186130ec5cfcdd5a7dea4d23124f012646dca173108 -2ad555c142a587d98fca7b8308cccf3856b0901dbb3ca53082b368cd2850613b -32da388cffd23ab28d932eeff2a7388295286539aaf03746f35eb28338ad23f9 -f4fb3c91c79ab2fef1e061cdf2aa1f2a991b39fd0afa1063cd54dae5d31d2f44 -516cd6be0ee051bbb0201cc747a04d5b171d4f13686e77b9ebf9ba2236886c4a -505461037b7a5f2ee8db790e6fdfd047033354f60786c1f2c00aa6847c8fa0f6 -3ab3215c78229d47364fc91ac88f98eec9e5d96ecaf41c0aedb88dc216964a52 -54bf9f88a7bc9f5ed16fd210252dd2f8e7f54ca4b4ef4a7356023556fb69a31e -72df664882f57b786417d6955b17783e9c206fd33064f6d9a9e23ca274189782 -1c18375d12d1ee22e74713f6911c3ab08b1d7f35f00f18f5e9b669ad15d4e1ad -0831fb8edaa74fc257fcc5ab9ade88ed85a19cc22d32b2a9e2ff3830e76caa2d -15f5c1fe3fc21bd1eb96d1d35e8966ac563d1ea40d6d3d2b79a9c602bafadceb -31cc10aa90012955cef8982620ae3d6d01ce14bc184f5dcdbebf94cfb5b10c42 -d174ae261dbed22fb969fcf1bb64f2bdfe0e43ef54eacce5fb5e537e872eb1bd -d7070d3bee6768186c4bc824cb828830b8696af783d3410a62fca2b996aaafab -4ee639122e65f121b941485cfb581c57df7e0c5b7e4c912b75eb6409352ff5c0 -33b1c7e4dca272245235cd8b23a5e9452652d212fad18eaa899935b90bebf320 -3c50b223eb1caaa160a4ce8469a1311c69ba2ae787edc9ee304f32afa013a0e9 -092d80c29dde16413909f3d00f9844e86dc234442748128e96b3ee0d243ac8a8 -00d872aba50e81604e5270aa9972e57b021dbb1eac08a064d250df6acf727c6a -098c99b2074af3b4bf14913fe867707fe0f9b058e05c38205d1603925f7fe1a2 -54eaa39ce49ff00bfb494cbfeec9b738750b53feaead8bce2bfa1e20cedb5e2f -d815755c40352198c1daa5d092c700d3745eaf183bc281b86e7762985bb5f730 -baa1ffa889dbb0e2f7aee08d5abc2180466eecef7c588a1c0f78453685526911 -165bcbf5cf3e9e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F124_0 /QYKIKI+NimbusMonL-Regu 1 1 -[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright - /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash - /zero/one/two/three/four/five/six/seven - /eight/nine/colon/semicolon/less/equal/greater/question - /at/A/B/C/D/E/F/G - /H/I/J/K/L/M/N/O - /P/Q/R/S/T/U/V/W - /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore - /quoteleft/a/b/c/d/e/f/g - /h/i/j/k/l/m/n/o - /p/q/r/s/t/u/v/w - /x/y/z/braceleft/bar/braceright/asciitilde/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section - /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl - /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet - /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown - /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent - /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron - /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef - /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef - /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef - /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font BITXNG+CMMI10 -%!PS-AdobeFont-1.0: CMMI10 003.002 -%%Title: CMMI10 -%Version: 003.002 -%%CreationDate: Mon Jul 13 16:17:00 2009 -%%Creator: David M. Jones -%Copyright: Copyright (c) 1997, 2009 American Mathematical Society -%Copyright: (), with Reserved Font Name CMMI10. -% This Font Software is licensed under the SIL Open Font License, Version 1.1. -% This license is in the accompanying file OFL.txt, and is also -% available with a FAQ at: http://scripts.sil.org/OFL. -%%EndComments -FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup -/UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse -{save true}{false}ifelse}{false}ifelse -11 dict begin -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def -/FontName /BITXNG+CMMI10 def -/FontBBox {-32 -250 1048 750 }readonly def -/UniqueID 5087385 def -/PaintType 0 def -/FontInfo 10 dict dup begin -/version (003.002) readonly def -/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def -/FullName (CMMI10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -/ascent 750 def -end readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 45 /arrowhookright put -dup 58 /period put -readonly def -currentdict end -currentfile eexec -d9d66f633b846ab284bcf8b0411b772de5ce3c05ef98f858322dcea45e0874c5 -45d25fe192539d9cda4baa46d9c431465e6abf4e4271f89eded7f37be4b31fb4 -7934f62d1f46e8671f6290d6fff601d4937bf71c22d60fb800a15796421e3aa7 -72c500501d8b10c0093f6467c553250f7c27b2c3d893772614a846374a85bc4e -bec0b0a89c4c161c3956ece25274b962c854e535f418279fe26d8f83e38c5c89 -974e9a224b3cbef90a9277af10e0c7cac8dc11c41dc18b814a7682e5f0248674 -11453bc81c443407af56dca20efc9fa776eb9a127b62471340eb64c5abdf2996 -f8b24ef268e4f2eb5d212894c037686094668c31ec7af91d1170dc14429872a0 -a3e68a64db9e871f03b7c73e93f77356c3996948c2deade21d6b4a87854b79da -d4c3d1e0fc754b97495bcfc684282c4d923dfeace4ec7db525bd8d76668602ba -27b09611e4452b169c29ea7d6683a2c6246c9ddcf62885d457325b389868bc54 -3ea6dc3984ba80581133330d766998ae550e2fb5e7c707a559f67b7a34fea2f3 -bebe4226da71af8b6e8d128c7ae0b3dc7c9aa4a1faef312fc9b46399b18c437a -776de1f67caf78e15d4cc76d6fa57dad7abc6d35ede0d7118e8c6f3a201f9ea9 -eabf8a848d182eba8922addbe3c488f51eac02906400a84ea0abfaf48116cdc6 -6fbc00330a76a8818cfaeb7afdeb029a204e0a70b47a05aa50153b56d2bf6736 -c7a2c50b023ed92cfff13eba974f804a346d4130ccfd5233b6d6b92a14c87bbe -2ba216bae4123911e1856975e5cf4d94e44f400f687d2d13db288e0d821451c8 -83e9928f8cbc41e0f4b99f8b29d3b11bd4ed0cbca83d81082e39a9e79cebf433 -671b1af39c3d0e1f5bbe5f1fff62ff6f5f15f0421c56a4dffac682cb07b6f257 -221fed1902e4b69d9bc2e061f2e96f5a46734f91298494a425ef6432f2b9778c -4ebbadd3483ef5447df5f008db9d91c559950ebcedb4b1316a5aae8367a80e06 -bf3162beb99c4aaa617c60be688da7627f29c1775983ef635b26306a94f0b258 -003779f8670a1398681953b785a226057f7d1270fe2dd2ea66d65e2061fbd65f -0ac51b6c347a56e9f3e86e52f3e0bf1d5f8d6540afb32a027a7c96919557692e -b739cc298ec7999b4286538edf7333cf8f8f6ba02c5e8c62929af07acbb90861 -0bcb85345f4206e3ea130512dcfbc6cefa31ef2bd1da11d3010fec57b5b232ca -706f9c44fb9cab8903be783eca66d748b3fa5b1f5d5445f6c16a9a52c88a7e2f -2bfb0be4e416ea209a9810dd6c38e47a58dc9270b2f49f9b9d482156f7dc8164 -b621b6803b6434a2a354a50fd9353a2ce3fa761423634b8f2adcd63b2b7acf15 -07588caf127a0d6b2017a451d3df77c53e6171c66236e5318d49fab9ce4b1026 -853f65d0d5f7913d88ea66b9b63cf06a4bfc8ed3246bb86cf6de255ff46d245d -109939e32dc483a0e5176b614ccb7f1adcf99854cf50317bd081131a146ea089 -8ed59e46da7b6254bdccbc660686e2eda0ad7b894cd2eb2688c0c00aca589d39 -e3caa6e0faf7eeb5df3e3f8113dae4b454a0d8c86fee52779ad3e13a0a871e9b -65b9ef0a2ff20989bae81d1cc1181679fbedb80e7d84a08774e6da58a283ba22 -3780f2717484e066fa7dc012e6d19429b08638045352d358957917123c9c73b4 -326a954f5ebce183ba1025c00c8f559dba85e07b3ed48d2fa0acafa9436d6fdf -e530ce25ac7da170db1764e77b6816343e8a128a075e7744a6f0406551f4640e -c403ea61696459d15ee040bfb53f08700c69333b1cb28142c5b9411d65fbfb1e -c7f4f50c03d122ad4b63e9e65f0a0af43efcc9fc546fd13da42a1c13b8c9cbfa -79a480d923701306249955ce1c61a680b2809d3551325a333a189db71bc83c59 -47d17b31f8ff63564919b00336285f724d22f889748564808083ddaa4eeb8632 -5d636961e1f634f3ff3def1dcd7299bb7679dbaf685e2ac1484bd9b17c5cf4d8 -59897713b51a4deba3332c2ab5c48a76357d2eaaa539a617b09f223661bcb411 -0e6559e99a7d900336a9327d4b8330ee5f56b016cebb8c07dbcc2fa736c07ecb -8930f26b429288c6fe6cee3e7792de58ea3ce248598db0c604787612bd137d80 -e4462d249b229b62142128b57a6b44515262743bb3c70ee96aa4b8c49d6b0be4 -4e19f634add30634f999f4dfb3dcff6a412a9b6067d28751aab1b20928a6e73b -cb81b0510d551f84437062e8cd403bf8c343003965e926465b288b0aa2fc85f9 -90f9a63fce188d72008aed98bcba5ff4ae850711d2664f0857ded002e3a89fa8 -75f930ddf7918d6b2f92ae26af35f50cc9d2a8f9b5d5d80981b12ddf4c59565a -aa62ec34589e5bcc3075cc6a163e45d46bb280b22158c5c04c90beb6f8a1c791 -5597b0f69be3204d876cfa54481cc86ed2fe799bc46555c6c6fffc73854104dc -9c8a6f85331fce7c5d1f20af5d99e4e61b7ab981dd4eae26951a9447d5553140 -b5862e2f39023bc7d14901eacf467a9424a6be8055d82f4b02036cd766367871 -e0a01d09790ab2777db18248482fb32a25fadb62956b93affc59b1796f78d0b6 -6aaeee9778a3b253bd98035c79b5296e173fba9e56e8824ab6191ef9062b1fc8 -1b6b6185a05b167adccc6698b1801297d766492add5b66193d024d121633d329 -25bcf1a9ae109371aaaeb64f2805bf5c2d5a218c191e9eeb4ac30a48291c7251 -f690b51d5135f6a37f5418624c7d2f3ece356b12ec18f73d5177a24ffe371635 -fc88231b3a95d72ca2555f164c503f91b5c7ca174e43aee6534df6d569efd50d -da3e950e11c6cff788e50ce5f1332ad76a2357c39d44ea38e88b24f2d37cf29e -21b7468adfcacc8ab8fe1ae9da4c933b5f7f0a6451964a4924b6ba96c359c828 -d818166d5271e813f7a34a5b18927e66d61003392c96ab36b3e2175f31faa3d3 -7e77200bbbeba91c532c053f318f3f83080bf3d641d4c5df796c2882e34c01b9 -cf74bba01f03ef559012eeece809c019ab6d40d22a16fb9054143990db45b902 -a5574f672dda96d6c18c0fb048e970e6180e6148061e22085c7aa4fdc2102fd2 -d31e84456a56057b9d3189f331cc8354b195564cfdd23579574b7c7a80d2f3e3 -97f07cdab67407a46a4264e985563dae7ad933dac054d64a7ebce65bb2beb5fe -d53360fd76a0fe706e7283550c4d5657aa9bf62ee713592d74e89998e9b0adb2 -327a9dd5f19184a500870a3c53367431b56cc4dd60bb629ae68a009fba0049eb -16d11d5f299d5a99f3d45f6510450e53740da5556335eccd43e1408b826fc535 -10c7784c44cdbf41988ab67ffdc54ea61dd05208204c8bed9c66c678e6324428 -9682cc6ea0b2dad69cdb69dc8daacfd1a98c730dc3d9bc8d83e2fa2e72de08b0 -031ef3455ba92d03acfdb7ecf50ee883a8817abd96e58f72ae050feae0d224a5 -42aa0b4c022f8a90e73ab84216f520d6ded72680471b9ed2ce317536305d7360 -810a92f4957c9aba9328b116349fdfa728e9f042b2fd2d116bbcbbb99ec6966b -a5e1f4fbbb4b1eae6d8bdd40de5fa44127e6d7c05abad3c012082c245265096d -d4445b03ad8dc08d707ecbf0aef0890b0658dc9341fd386d417ad9f5e79c0464 -be4e3b22e4997e1806d192a8be70dfbcf69715b8194347a60e80934ed09fb08e -c4df7c3b204b07ee3610c041dff7d4c76060e4be6a3a2f0b0217005ab38f80ff -fe55a6252afa361b5cd8f3b642e6e193da913ccaeae5508c2470036aad80c0c6 -e977c374852b69a8de69aea44aaad49eb7fcd420bd55a5c5cbf073e859ba9d6a -857da20a5cc2744843ea07efcaf91e992f0a44e1e520bbca097b6965c4e30c99 -03ac3ca1af1bbeeacffd7cc22e7b9763b0876cf8308ea38828a716da7f430898 -2beecd1cb81cd95ab8fe70242026f11061a70fb42445aa9246488d6d0029df17 -dea43305ac74df52e5699b6c243025786b21fd43993a8039e9e75fce2dbb7d6b -7e4cd140e7edacc20dcb473dc45eab68d8ea296baf9bb969093862d391f84073 -5e17f87847ff2e9186080feb184ff7869a5a8bee6aafe3461454dcbcd00d2c24 -61ef831a52dbb0fa736694b4a3a4d85c6d80636b316fb12be67f0887cce6df04 -80c145ea8762ef8b2c43ae71f3c32686fd5813eb49a39bc6d4980472bd5cdbb6 -c282c9ffe2fb52656f607692e1ba726417703feccfd4aeaf9c66d543ce1506b1 -a9d6b95705f67086d4f36b06a283cec841a01f1028d95d4de419d7110f091014 -f6dc905e81add1d54f95b16cddcfd0793d1cf4a85e7a35458c81197a24fe82cb -63edde30cb6b538a708fbd41f00268a772730b85bd8860054acd93fe6b8bbcb9 -cc474568d426e83f15838520a313e0ae1b60959de340398b21986f5c404c9361 -54975d52740bec0f7abfaf271a2ac1f7553b862d45d11ae585936fbb5462e2dd -bf35e4afb7bffcbd3294be3eabec4b787133c3a5e0c95f74a71dad9be990d07c -d157d7258830a3cc3de6459140afba942eef325ee072b3a53a9f281d483eac65 -e8da50ccddb3d43baff7d8c7d7a1847d6d579ce92df1b54de141ce7a73607362 -7d909e8cd9fdc373b840145f9373bc2f02979ee34688bf840f4f9245c2ab976c -ee8bde685c47606201f6611e38a49ab72428def2c85e553313af719ab4d4f5ef -e3f3430522abff76bf8bb8f56afe11008d3f989ffadccb411dd3b7e6352ea873 -3abe5dc71b3b4832ae85bdb23f6cbfb4b2631412e4fe0050a5f7f4216508a3db -ea2d74318ed82f1a2fc791623c869593dcfd6bfb2fe57bdf06e9d1946f9bcea0 -13848fcdc603e3eca5384725118970cebcc9ebc6b74df13ad395fa6efdc22463 -5380eb1b3521aa929eba30958ae2da40852196b67ee44409d323383b0c7fa1f2 -b4fff373041d9f5eeab03d6743f0a291b481dd3ff9e8ebd77a073b8d5f5d93bc -727e6566204893af892f74fc0bc3f3e83643a93747678eb998f9c91b3a0ff942 -3d3924f507f1c7eb18249b2ab73691f5fac868720ff52183091f65ac3be8cb0e -80d257c52ea8647ef747fe304598e1ce0900a4de4031e4b6a58d7869b08a56aa -710c91ccb8afab94ad10d670e767a44e0177795ddfd65c9cdc7332716deefe3f -9e2ed8a54bb6faf63b7bf5f554b934821086c09fc28fa74ea2efd410e006be6b -ebe0c464e078c14968453dc783a788a55d925d72205492c07d0dbaee4982fbed -9b32dd19ae230da5870499feeac55b09b0970ad5926375fd79b95552816be003 -90515262b5ca891babcd81bf86847cbc5850d4a056bdc528e97aded1ea6d7b76 -bd8ec34e742a9fccf19a6310004499b1cc1a920b5f3b746bd4de2d9b9dea341d -25a7a7b60546a8f9ef99190cf8ddedb21a0103414f9f28ae8673c966b12528dc -fb70ce44db4822322605982d708a0b4bef7eb08962e3f433213d7545f351e994 -970828eb443c3bb36ab0c4cab7fadfd949e5f93273141da2b6dffb41b4678647 -93cd4e53c78a63c632d4fcbad772122e86dde337d5438e5e4342a0e18be8b014 -3ddd7290d16096f2149c6c71ad28325dddbf994e651b9d4be89430b31dec3fa7 -d2703196f7f10b5e8d98f20e14151160507e53ff1f3d4bddff3f45f9e64b1b9b -9b26b32bf389a3725c243209245bd78c2f78d67033be00ebe25955a1ac718305 -b52a0260a07220a9f7410bad935538c6c7c56f902a70730c1cf90d45a5f66c6b -a762406e512bf3cc3b52918c6e9e92893279cf86af1684d9b67d1ebbe84be9d8 -4b56548323ab381ae18c9e9570453abe77ca9d9ed1164563120b939fc3acc33d -49f5e989a74ac760f0c99458295278efde92e99003c4780935d12eda68a82308 -ba444819ea9fd930c80263b57ec1b9164aa50ce386b8ef81a53a710416c6c868 -794bddb4fe463b3c59ff9fd085fc7ec37cf2abb7df09d41113f4542f72bffda6 -1fafef41c462eabcc7a3b4fbe46cac256c7af4309a617e73e7934450434e344b -5cb6ddf2e63f4523f1526ed2f79522eae16b23dd9ff4924053a0fa7c4a0b29ff -f4485c041b06147d2c94d276553f443c2980cb96ef5da49bfda4ee95bbf092ac -e2dee947d0c711c1930500b79a5424e8494df6e1798b009a3816342f4d1d7cb0 -b7bf239f3d60361ac605020591740d13ce386bca1e69a2e8063c62f9959c9fb9 -010ae39f18882b1e3b3d0d9b0447db7f7f7a3810375372702686b224896bf5e4 -cd40e308b5a6988b614d8088c296171423cab2657cfb98f462afe21e990b0c74 -4c8738d1b13097ca887ccfd3eabe4f1e29df71d0e51046957409964f9f02a33d -78b2a5bac5058bda0dd8a65fe6c53dff9310fd2b97afd24f39e586417dcc18a1 -5c0be1795e0f2c3d785f8cc1ab5505bb8fc0dfa1364f08876a42dae3383f853f -84e7e54405bb8d00911c5b8ef4794494d9bf076d57a65f2392628b61ff967c77 -29114960e00fadc36961617c61c673bd2d2e4a9d54702233c8414026e67940bd -ed16e2d3822f06068502c0966f2ff68f74d11a0b780b95f3f52bcc162a37b6ef -48cf5ff8513cf4183176734f80b9835401b3db6bd53597645873fa96488eb183 -646b577037e5717952d23cc71ee1780b3df42d9c768804fc47cf147db059b9ee -7a6399d4f4afcf2d296902f16d56d6df28ac4c9a96e357678ba901fe72ce3d2f -b10fbf263146547d455df1bc33a1dfa753251c264db8798da35943a4940962f9 -e3b8a68d2b094177154ba30af7bd201cad919c09a34536e41d6c5772873c0634 -fef84dca5f1a5d5488997e279876af1dfb3f51790a6ae085d09ea4e1947fc10b -987c2db0634c100484f4b45404119fee7a7ec81111029cff1b4cfa1a8637d4a5 -ad472b5ac0cb9f428cb1df8abfea3db8082a26cc815437ab387e7f87902398d2 -e0c6bf6c95c2381f15b61fb2c5bdb8684afbb7a6c1a01ca2286a8dff62e52a16 -3d7c748c1b2c63d2933012c5306cb7efb0b4cd733c56ba7700acc731d294f7a1 -1f2a1f8f461983f2972da8c3dbb3f9117f7a6f3583c8a5dcabb364ac0310457f -93fbca26c31482d806c6a7a4f87f4cb92e3f30b4dd2dd5e3da5360430c008237 -7165549aa416a73c62a50b707074b2b7ded2b07454574f60861cd2f0342e4f78 -24789278e711f18ef858b819a0accb67384b47145fee30b32181d66ff47aa657 -83f0cccb693ac70657bc2bf204974bb3bcbffcd6540477e7a973718754acbe68 -823672daeaf24c93263a57598ac4bc999120e367aaa4b54c643e8c8987024b07 -9b0d40fb33d55cee534e3a38a1a316276704e9a6df08553fde29e4d4526225d1 -fbda6f8cb78098e83e8a360de3c4c77e2998094f920aaba9c7587735cd2f22cb -e17c6b99a8286519242f18de4aabbe470bb8e0931ec7f5c19e1c304df56f2368 -70d154e925c4f2e5012d52a0283ea52acefa09d2a8ecc832358868bce8efba7c -492e3575c1605150a3f7d6822960f1a9975151c7b6e928fc07f73493351895b3 -5ea783de8482144ddfaf6f881d0835472a603fcd52464da80de0c380fed5cc67 -e38eea70c066dadf026e03fe00be35c6310f64aca4b991ed4bc4eb125b4c0a79 -b87109b442c0b624c340271988ca36e92157ebe00ace90fa4515b6c649b9ef36 -f82cfb4954c124878dfece799bd987ee930148967069b9e6ff5663689e5d186c -26dbdfa146c3dd3ab9c2104fa4e92423c88a0821443aa8008b11008525290207 -146118e39b4d7893fdc8c7225f4c97fa3f1cc264122afa3a87d630ef325d3778 -28ecba34700bae5038bc2a1c2e0476351d9e73cb623cf58eb35d4c518630ef2a -f8b64bed95d72bb7403e652e2dda6faad38fe8fe4319ae190f0496a1c6806cca -10efc6d15c7e19522b152476c36f9644a599da6786df08fe7981f9eaa0e8611f -880ce7444e6e72e82aefccf6ae7aa0ae68f883d9f85b8126a6c52687c0ffe6d4 -fc712eae8bcaf81dbfddd0a58717c4cea5ebc76c94567833f5549daa0cf6254c -627a1a0662537ad3b43c6f3a90d553bd6e7e841769777c502e4dd5fb8b15431a -61ad9b26cd69b5d7d2b28776074e7b7beb25da2d5b8ce39e2d982b9fb9122e6f -401cdba8684365458bd82680150de4ea9c386dc6666e613f4de18bcf4540ce5e -663a6f3de86e8ff97339085dd62fc33bdaed076740de76c1830a14618ced99f8 -07519a5526f787b5f96e8086ff187ddc36ab3b385520dd23ceb0b0a779c97537 -496cdcbd8b82bc87bd2473acc490c6a86a6e6f85496a2dabbe2c92f4394c23bb -714c0cdce7c02a397f2a66862ac165931eadc3dd374873357e315c8cd99f00b9 -20d3c62c04401d15413d4c640c2aa4caf5fa5db6eecf4ecf43478b2ed317e06f -cdbab783a6921463b346d8bf72e98a4d7fbe011cbe565cb54a7157af3fa4d5c9 -d6a36c7600f5a884595278efddf5085f74c3d7d8e9beb3be3f7f6131e8233b08 -4b16dfda9cc778dc10adda42786156d707750d12c920cc297e8f58578d5084a8 -6d68a5180a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F230_0 /BITXNG+CMMI10 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/arrowhookright/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/period/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font ZWXELK+NimbusMonL-Bold -%!PS-AdobeFont-1.0: NimbusMonL-Bold 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file COPYING (GNU General Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Bold) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /ZWXELK+NimbusMonL-Bold def -/PaintType 0 def -/WMode 0 def -/FontBBox {-43 -278 681 871} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -currentdict end -currentfile eexec -d9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae -6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27 -bf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf -045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670 -0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4 -1b2b9e8f09253b61177e95ea219474796072f4b363fe05fa7637750ee32abe88 -6f7c1368d9ce6c8e0c490dfce9b86d093c646a926013616599be4a08eeab1ef9 -4d9066aa43407ce8754ca1bb33035af23db30794e2d3368c4fa14ccccbdeaf01 -2caf3cd75f4a9430011661c1bf054a530ddc57f032ecffb56ef20be97a76074d -a40f2ab5f5ca4b83c12482c76211aebb54d996a3771a33008145b436f16e5100 -3c766da4e9fc3ac88ac60879f47b0d72099a606f615cd397a05aed4a92a6e86b -6a9685a3fce4cb303371639026c74f19dd67a353e70a7f40b4d317f830c0342a -9f2fec7a3304e4c4009e2bc3f0dcee97c8381bc7682c6d3f80d93a69ce5d74bb -b3ae9b016bca6cf044056c8ab210f7f1ab28c6b4c457d0184278951c4e2bd743 -41f9c9c8fafb9f11da77c2ce9f820e65ba3b7184d08598f9ecc956d38ffa3d71 -0ef485905434474fbb7cf4b43b193a537efe076c26a9251d45d06ff575a5b9a6 -20ec66effcfa67a9e089a1a78ab7331d3841898dd7476d70a2a97c8f6c283fae -4010a9eb770604ba65878fa2105d063a44c56e21bd4847b542af04cec1cfc7d5 -ec2b1ee2103bd35e162f2dc6d1f224925a0d7eb5b883a6eff782245605bb8fcc -1e0453694af4725205d9225ffa329bbdd4392fcccb8dac6a0e8be2059177757e -2fc359426f4e1ed2e19ca9b5311c2e77ef9f97618b0c337a906ff39926d2b0b7 -883abba6508102d9f4fb0387d88d82973b53718c98d58c9b83d2a62386b74c16 -9cb5c33dda965420dd78aa19ff23f88bd2355f93ebaca543d8b18ea36b4ee8fc -b5924e01f73a9501819be812383107d361fe8c805163a6957de6aa4af7fa6963 -e77ac8e5d39349be33448d2f6258da61aaf47917c66c7c5ae99a990b727c6c70 -20f14175225efea39202b489cb6623c51f41fe9a5f6d3be27796e51be6945774 -6cdc1ec49ed6114400f4724ecff05fe0bed476dd3d5650ce735475ff6f232456 -5918f9ed222319d2a544aa4a74be19f45cd466fcf191e7ea641ea38f9d3133f8 -872bafe19691dcdf0bce48ed6fd0e0ee9a81faa6dff8b239874ffe2072a73107 -0ffb5095f90a653a1690655a9b4287545138b8049e04eeb928256a05a73edf71 -4e0c8692f37cf1d7e3defd43b2b428f853f35bd79f3811fa7bf788d1c1cf4a61 -65b8eebc60521fac324403d3bca11817c9d15012e0be84e194435fd27361e68d -79b52b6c9a96c1a40596f048a31c49088b883ee21d9bd24b48e4d1e03e7378c0 -5b62dc00623f9c5dbe5087eb9122de23199ac72b491ff847674d6141ca7facd9 -6bdbfc373e1e1f87881fd7bc3a7d64292c55a687f3837424612103bd6be8fe2c -0b3f529ff61d27d3fe8cbb25636f48e6a41f205d04a802e50fd974cfa67f94ec -19c3ec32aa714e650af284926ec5f2e29bb880efc696d77d210536d7d1148ac9 -ea9263bc02d2ba97369f2ab531944e132484c3f2c2638b01fc97731f1b39a492 -4822b5265773a5e86a17a41e7346b7c4c48029f58450663e0d09836d75ca7f8a -d9a78eeea4f41976945501f32bb383455467d217777e642f32777bbd74cff9c7 -97041d0a982ab1c0d4999077201cc9ab52a92cf959cafd2e6790ab45f6927c7e -96f24481280a0242e823e22a4e32669bc829ef1b7ec3fa34e9cdd920b0f7e2c3 -8f138ee0922fbdd3d7bec614805aa562591c3969760019c54ede008db2c2f8af -bc66034e5810bc32c823b819eb39a15c0f25be8f2dfe5a01b90848a5adcc95de -49241dc602f4b71f8901fbb38725ee7ff097f769c017f16598b835a0b93cc6aa -c437310f1a7d586cc05048684af27ef3c09f72ac62adb2f4fe7f99d1340d27c4 -479c144afdc37e4131d8fc6479afbb1004ba15e3e5d0ee470b9811a0f51294c6 -dee3fa7431267cb6ec7a96c590ebc1cc7333a103eddc21219f392ddbea601d6d -dce7a8645953235a0ab6d46578e8e438ffc41be6b509b844b73e586131f694bf -f0ed77a7847f7c747410cbba2473f5869eda83ec8118d800f3b2a7b5ea03e16b -204962bc68ac47bcc5d29f88aee951c2452d22aa967d32c3f37a91ba88baad3d -bc74cf2c7fbf0c76faa4eb347390dd08303b439cb1f1a3363d265fec5734c81c -bf1af913f88820cc29f4a3b54c712e006e1d6bd993668999c3ad54676c71fda5 -e29df4c794a4fa812b13ad32b28bc57e05c7908b8334bd4fe842d57b04423fd0 -db3a43eb047f86eb925dfe31a012031f36d5f6099187724b0e2203ca1da764db -623d1e0a59b9fe47d7d4d67c241d297bc5a6641770f5e9f75c572675ae6e69e7 -ae37627c1e4d3ba60b95605da55c67c5f6ef7ae2049ea3d1246a0c03309ebd39 -951a398883fc919a711e8e891d914459d4296bc3a584610663af1c2ff053c137 -9f447f918ca55c5dd4a52a060d1725c26e6940371eb4fd9d254749d04ebc0f11 -06f62a30d3f714a33e4f65f4dd0b20daaa10aa02b9a6e6eeec07fd93d19f9c0a -6cd6bde1d7ccd1a973bf297fe6a8821e03a381c468b9adfde87a4b7f484a55ff -a5b83052ac23f4b3644234d935485f912cba1c84227a609b32509552ad1d7ce4 -6f564f7f9da1e131d9921befbf53cad1adfee699702cb6bc949688b30f0b4f3f -d3afc9caa04a796e5afe2aa8f8e14a7959731a74dc4b215d7ec095ebe86a3863 -ef6d7975c3d2edc2e7c2f5d2c8cfc5f6fda37368a54dc07a7026ebe9e2d290b1 -eedfe0322838aad2f5be5c299a658f47d0487584b1f9e7def39aaddd212138e0 -8a8d2479be76477e5193944353796d86aa5e2ebce0a453bae8cd9bc976a14910 -93b30d44f25a29808227330b98bb42bad91b4964f6832f2946b0ff1701853c49 -dc522636d5b7fb6ef764097a17da725c3af793585d24c91627f49e83271b7498 -cbd67abde015c94f5f24579852564ef01dc4ad98f15d522bd15fb9043b241350 -2b1f128d874c1d119798ebb0e11be341f78db622204aef7778aa81055bf4b7e8 -c455a6398d7d5dac94a5007b4f76265bc8875392b5354bd38ddc111dbb8b5b92 -15beaf72f041f17d55b49b81f3d1279bb7a5ccb1a9daaf125e79d5ad7dab0595 -9e694040bce7da09f795dd3cd508b405c6bd07cc7ee9bfe298156ff2620bc3cb -cc7b27d9618e04a2ee6e3744d7a344f6554e0baa2290b2082f996026adc420c6 -76ad5978868e062323522240a388179de4d224f19182ba7a35c3aa952844df49 -f6c532d429e5c86f89d1e697fce1b50861cca95504dd63423bf603b14459b7c6 -91bf64bed93e5ca158ed057c9bf9160f61584608ee366e3be548bf2dc46c219e -9e0acdbaaca1a5b02770bbf21dede6a80f3af65ae92a9089683dce3ec5e6ec68 -9de2dc208f7304afddf88f35e1f428dbe74e7042766346ec02e1eda87b8c246f -89a0eb22d1c6fdb17142af0c8c0b565ab6db819d2ae2bb3bad7c7778c53b2686 -72191116278357d8659bcc81753c2906eac08fc3fb966aa5ded522da2a5edf40 -9a3eeb5735617e77a7a77009cd38c2b62bcb89ab73052cce4526f4f02bbec777 -e6ca65c90ff5931dadf03da48afb8561fc2e71008fb1d1d4343512ada1b78e71 -0a10079f211faa5227eb0b30588e9e03fad6d901dca2b6bac956eb8cd2ccfad8 -80e8cb37e31fa6a8206f6a9a2a9e1cfff1205345019a0feaecde57fb0fa418c6 -f4cb83025e7180e50394f52064d8ea0383b80482e48ac91c24d10c7ddabe98b2 -13eaacad917275e916fc0803796efc1f9597f8952547d27dee1fad9ac1fa6d10 -27127514e0f2dcdf9ca30393cefc7cda027c85e53d10ce53796529fb13b079c2 -0c7402109235a0c25965b3b7d741e90e500ec2476c5dd11dfae57d6f57b218c4 -b9cce956161aff0a55a52eb58a59d7a62d90b110f9a0dd26b8c902122271a38b -7923957a15d11cf1427ce56323c7e4428d2ee1ec6b1c465be35668b0a7ac8eb8 -af1f080a993c3c74871e4b7bdb2602d07587aed96ddb05374c2aadaa24486f9a -831ba1179b2ea3602d071411f1756b58168f9ffb572d787b2ffe01bc07c04d48 -f893271ee576454a86a0c216b224e0de81d66ace456d352a5b2537eb96be26e0 -342e4165d30208448c9314ec962ac31ee36f887d0cf61a575444b31180850172 -10ce125407e77e5c63c947fa320845efd26c85ae8813a99e518d679137ae1dfa -9e9f19c49b461da073dc1be4a9d32f6ad62d05afdcdce4e33091132d471edcae -38607b7f5a17e7340b4e1a110bf7ed2bbbb9ad9b8ab909430f29f87b1db0a04f -a4a80796d144bc1875a846990df6fb3f14a1457be695a3cf1a5c16878d44be38 -107e327ec4096cd66caa90efb30bf9837ad04d995c4f9165b1ef14d394b71ff1 -281b0d67d4d3cd375c79603efa6e0830183be17f77e7d5423dbe0776fa1387d7 -df0dccfbda67f6ada4d87dc8c6325f0460690be677aa6db7e0250b5196b420d0 -cc8d66fec329d81a7584a5d001c2c3e42350eb22313f036b5ae64868fc6aeed9 -af95ec8f2aeefe4a95e69cc77f321fb7e7aeaa45b2f56d92d0956bf321ad859b -d2e2bbe984b17fe9303f13428a68d6a1959288ffb63d800c11ffb6226920324f -6517eb5373f2b8f058be35adbc7ff15a2b0a81683aea4ff11071451a49efd1cc -f15664182fc26672cf89416da86a3b8cfb45510e1ebbe11060963434bcb7581c -4816bbd63c6d79dbdca7dcf26a4217bff8060ad7955402af67fe4743997a028c -c33d49847b57712e0e23a1c5b72da33198426130a132be52890df4423fe21d4d -2625e646ce72588478bf941f1f74e875812f7d7ac9c54d0ddcd12178abf50bcf -f5131713cf9c42d0faf6cde696534896406a8a5234a8ac19bfd531ca934c35e1 -576099082701fce199811dd294cc46ca147d5a187c3737d3d128ee8d437a2afb -114183da45b49ddc768c31e35c395c3bf67a79f8b1ac292f38ab2ef721453256 -523e9dc08e80bedabece9bc9af135276c819140d7a0e966156dea6e2f7aae463 -c634c4de83feff86407b556651a455077d64b52c5ff4b80250d312dbdf83dc0e -b9ebd541aa9fbfddef1f775be0c411788b054aad44c85d8723ca7d2a6b00cca2 -4ac55e90ec48e4acc15be17b9544bb71ad967c4b8437470e4d020fc6e8677251 -92e2307b51148b2cf46fc1b7f2b149ebc1ebb02c33477b4c56e56a9f06566377 -d2de31c00d90ff5ddb509f8ed457e915c6fee8103da73b5d782bffad7f7c029e -12e1930e95fd7b7bb37c48b7cc48d99dc9aa79388c90bf6c7c0b83c7f7fc0935 -8fd5f673dcc906c7e0fa7711abe8258828289ef48a40723e39b7ec79f2d3822c -6f45a6ae0745413ce860467d7cc0aef52c680b8cf1767915d3550d9813b5bde7 -1c21b0f7b7119bb0e1eae6a7874ff0588adf14626d101b4e117c63f2e7a60627 -dc40cb9ab16032434469f390804b9039e21f1afc9380f26571e3b2c64a86c851 -74fc32a61b787769985079d60cf71131977accec6954da9032b1333396fd5450 -00e364e7e6a79bdbc9f1e842e222ca480f1f22089a38079692312519392296ef -08f00707ec53e1cf114795631e3b14687b9e351f1b7bd44d6f7d41ac91e8404d -8ae952c3c78e4a6bc9ad64ac1baeb952053c409cfad43a877a7c420006ce3e9e -0278a33cebd6d9d9737432c982165ed82c45d26f55c133162a41be27005cd6fd -e60cc41bc098314a5a1619dedc6bd9acc637f398219f9a3c543f8421ad4c4e58 -9265d23edb6cb45f2273a908ca416ad8c32c2992d9efa95d86e631ac8fad778f -ef9936c2dff4053cfb253c24c65bd20fd534d6509c0c141a358d4ad95bd9b5af -8abb5cacb94788cbf6c43bb54d52751d05a1a2e6848c33ab9b769ca9bccd8e3b -ee742c0d93ecba4c5c31c1d32a567d4213522f2a5687b014351cc01a42c14208 -69ef5852aa703ba076abcd4c6653fe6c4100bfbe047e34d4d6e9c62a6e5532e3 -f9ac9e7cac24e076546134c226f38ad0f51f8f2dd8501a001b5c0da65d9286eb -3560b947ee38fa27a502e87f8c99ffcd54b1d128096360be6c5b6f3e536c57e9 -1acffa0392e87026f5acadd1d81295d54155ac6154e247d95bad5d9ace11215a -e0ca996979f6dd8e94e7567ea17b8827ea4d5d5c9a8484ca568332bac134f993 -91505c7fbd8ba336f9c37d6dedd17261483c232995658b078fe8f1a312cf74ca -de87453964bc73a936a0ea09f74e9b0822b8336cc888f0f1f399061c342c8b18 -1d93b17a0afe2a2a69acf2f91ecbc8441db2aa35091968a0408b2abbfa35e4cc -77208f81b76a199312d8b3c3426e49e08f8359e6ceb694550f4b8fb113f2b977 -937eb20585083e72e0abd60e60ca4ac0f216b65b7a9bcbe1005c5b8bbddb702d -ca9da36f1fd416315266905f3ca5ed221be1ec496c5b16070bbe38ea094ae5ef -be93eb0eacb95603d7c36ba04f606a11ad22580b1ee5498ffae48f218108b774 -d71bde64b7de26f696d95abd3c13853aa368cd2582f2b03be9b7ac59e9bf0207 -df0ad55054c594811c5e89277d3804d058e1fa5419b15d11605066742d284108 -7411f111e7375c6710060d26e0b60f6aa8387f348cf2bcc5762c16ef320e24c1 -755f88376f5f2ec00b4121861518c97145a7105bd0d571454c177da407fbfbc3 -4a93ee4852b09cb436f682f9f84da4d61ecf72f8f801a548a9304f19163d6bb8 -12f5de6e1f2b4ccc494015627416d54877ee71221b95fe357bf67271242a8f17 -a4eb4be3b7a649c234524b2554a8fd24210b7acefdecb2198265167b8bb28593 -07ed7a654e9a6e2119e6dd14fb33faa084c71e930b8035952b87fe8b4a297dc0 -e4a89d17214cf1063caac03d4bdd5b4fd62bfa6897811c3494ec3018c558282c -2efa94538edde156727152eea21c6e3f88f68a0176aaee333b79e6b37344bfe2 -77292544c72d4023a3728c2e39d2841c2450465852d02503fe0a871700b470c1 -a73d8c1db644db39e9c1ce3ccbf2149625e915599ecc3091e15e0a74768ed5b1 -8271fc242e10bd83e73b4636cf874ca6e6d756e707e671d99fc43d61ce6bf80c -3a3be178d9f5d3cb32ca669cf99b70b10dad7d270d0cd85a9865d60df07fdd94 -cd -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F440_0 /ZWXELK+NimbusMonL-Bold 1 1 -[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright - /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash - /zero/one/two/three/four/five/six/seven - /eight/nine/colon/semicolon/less/equal/greater/question - /at/A/B/C/D/E/F/G - /H/I/J/K/L/M/N/O - /P/Q/R/S/T/U/V/W - /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore - /quoteleft/a/b/c/d/e/f/g - /h/i/j/k/l/m/n/o - /p/q/r/s/t/u/v/w - /x/y/z/braceleft/bar/braceright/asciitilde/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section - /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl - /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet - /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown - /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent - /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron - /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef - /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef - /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef - /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font FRBTTO+CMSY10 -%!PS-AdobeFont-1.0: CMSY10 003.002 -%%Title: CMSY10 -%Version: 003.002 -%%CreationDate: Mon Jul 13 16:17:00 2009 -%%Creator: David M. Jones -%Copyright: Copyright (c) 1997, 2009 American Mathematical Society -%Copyright: (), with Reserved Font Name CMSY10. -% This Font Software is licensed under the SIL Open Font License, Version 1.1. -% This license is in the accompanying file OFL.txt, and is also -% available with a FAQ at: http://scripts.sil.org/OFL. -%%EndComments -FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup -/UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse -{save true}{false}ifelse}{false}ifelse -11 dict begin -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def -/FontName /FRBTTO+CMSY10 def -/FontBBox {-29 -960 1116 775 }readonly def -/UniqueID 5096651 def -/PaintType 0 def -/FontInfo 9 dict dup begin -/version (003.002) readonly def -/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def -/FullName (CMSY10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 32 /arrowleft put -readonly def -currentdict end -currentfile eexec -d9d66f633b846ab284bcf8b0411b772de5cd06dfe1be899059c588357426d7a0 -7b684c079a47d271426064ad18cb9750d8a986d1d67c1b2aeef8ce785cc19c81 -de96489f740045c5e342f02da1c9f9f3c167651e646f1a67cf379789e311ef91 -511d0f605b045b279357d6fc8537c233e7aee6a4fdbe73e75a39eb206d20a6f6 -1021961b748d419ebeeb028b592124e174ca595c108e12725b9875544955cffd -028b698ef742bc8c19f979e35b8e99caddddc89cc6c59733f2a24bc3af36ad86 -1319147a4a219ecb92c71915919c4ab77300264235f643a995902219a56d8626 -de036037defbd3a2c6bb91c73375b5674e43810b4f7eccb675b36f35d63d9ec2 -def21c5fe49b54f92f0d18b89289682cb097244225af6400f6ca98efaf336c9f -c304161e2006b3bedbff4dd36fa7a8f7594c02dab68c077e83335ee6d018f860 -8d9a9131325d953d6c38c7e0a34236506c1e70cb6657dafc3c9520131a251350 -49034e216ae175cb232c2ef5a3c569ab581f936ef4e8b8c8bccac287f06f24ee -1d15d2819058bd9aebc4ea91b74935f6d411562a453674b14bd76fbf5f298f9e -8fd37f529f9e0450bbbe473b5a4039d8d0228f56330fa15411d7544ce700984e -09593a854180d3100e136beea91daedaac36cca03d82b83d953880307edbd0f0 -014451ec8f10b1e30b51c2f9055e906272f02f32085e4b9fbe5a6860a74e274a -74349069b6eb90fce84259d281f037d6de9f42fe557f5f13a87e5c9f668dfb8e -f5e7f4b5ef9f5841b3885a6c8994bfd27fe35fa3cc1dbd5ac68e1c98c0d0ecc3 -bd2795e77848b5faf604f01362ca473ac72284a56cabb68f35ba43ddc6158955 -5bc6614cbcf4b80872c2cc66b6f4f90c315bf73b34e481705ee8b54eef70fbaa -71424420120f27d8853933e3ad4d8026397b040c88567f440df538120d61d0b5 -8232d66e2e006866b60ae46c3f4bda16a2eb5b248bb88a11b3fa4770f0f6c31c -dd13bab11c2f4ac77a63f703a5824638fb765033dce02f584f36c879416fbfb1 -ee7eebe75d57711b44824db906885934dfa7f386b811a2598fd5cca2585045f0 -4cfd32e35f32b90badb9a96f48957b0a311778d21914c9ea27bfbc75197cbb6f -0df8f6fa574e1f1d529a4594f2a6ed99b98fd302f4fb2694e3986c1f46ff165c -7f4c1102526831ae1e469e62f1a6adcf7d2b876c0d43f85d20a6a5dbc2280884 -1c7666d56f832b66cf189c4debed1fb37df76c3f1c632ade8822eead5e7f52ac -e65daa6d86e410d469a7844baa4fc9d28e21490b8cb2d3b2fbe718f55211fe5f -74d3573b99bfccf198c775402823aa742acca713d30b55a09c7b7ce3f5f5517d -6133e546a86c0395bef3387804ac1b07a4d27492485741a8c2ade23bb321da56 -ded0fe0d43baca1483566fb397db76ba9eec923fc2b3941f3b949cb13dcbdc3e -2c84c6e3a7abbe5c22abf9b6959a17d152ed0576524395d8a5049c5144680a19 -0ed3405f2c9ec716cb9c0fbd6b12168d62666ce74149f8505e02aab39977d99a -13a66449c9487a6b2863f7338378fb901e8ac981ec53ca555049b3667b4bcea9 -cd731a850ceecd59afbca1ed2fec76c18fcf5ba1b9fbd81eb84c254fa140eb99 -48838693123cde50278e4aa3cbdb7f7691d52cc624b4226855a74d3ff4b3eb3f -e193702ad68437760ed7173ddb5031737de3470f9340a44e92355ef033958954 -e5b33866ba86201a7951a68783b94f2984b40dac3037d3e6d2250e850984470c -a4fa92527aa313f3f366e97b87d05e114468dcf43ce4a27b9999e24295cbead6 -7dfac0c6d99e7332662743f379dee2b05fc7aed3ae405d631e3893b16e1a3771 -278319e6014b88fc346b4f3d17edfeab40d6552092a8dc6c2cdd506f458bde17 -e66b02d4992a0e370871035bda2106ecf7fab7ced8e8d35c6fbb825ed724b726 -8ce5f3f25d11386c958fe4b773b9268484c12f90e2e25e299a2154e5c480610d -f302e1aceed9d0b3e11681bd5322a13b8fe895fc755e0053890a4135f2993642 -3d11dba2766edb9954e308ad998fb1cfbc2285d1f7a9135d2f06cd2d7f7d7b88 -d1c6c9409fd3962b8b1c9a690e01fda96361ce706ec9dbe3b4d3e0d57baa0d4e -a98200ef682573f9aae9f09e2000b9d7e14ea41682e4e5ac56dae4cec783bf61 -a99a5df4e83fd52c0c02edf26274a16c939868103691ff4f8876c25fa70652e9 -ccb3399053205e0350ed215170f709c1901bf7b97236f7bcc13ba5b35a96e8bf -c6e476d81e396b0c79118e16b5489279703b1a44c9d7e320936a19ed319cd03a -f052845dacdd9b627a47433f2225827c65dda57721e8b196cd368dcba55250e8 -24e6b7b93affbdd429c9bd8e4523d8e8a56427acc3e5bf1b2db9b60cc832002f -1bc52025f18e7d87d9bf1b8cd8dc170c6dcb85af5afc1ac4a24c0e38cfc0f4d9 -8d63cbf3b5cf6f14d902ac8a9b4c48a5d4ba4bdcf4f3b69e2998f507719e2bd7 -db63597995c5cdbba59f9b010a135f4dcc8cfd602d40b30730125606fd1b27f4 -9ccfb1d0f6a97453a8c9a40f643fddb1581504132883598385c4f76b4e57b559 -c0ed46d83ce8427db396e96bb3dbc307df52ed28dad5cf5e32d82510300241fc -fdec6d84bb008cce0fe96c7c6d836fd3c8eca9341951e5ba15ad84a1799d137c -938fda761f12ef2b7e90a49f1ec49445b5638ed4b2d903924dc6ebd72fadf61d -16eb74d88503fc48659a86d95043b4e9764eeee72247367d0ca6ec0dee079f9e -5db531a1411790c08c942b7ce7b028e4b956d5f1df8a47a8ac6c37824b661b57 -147ade729f5fed3dfb47227b27aa34cb86584d20a628bf18c395b186ef197a2f -dcb3b6d97ad24cc35a847cb98944011ec6342d0ff9e13045ed70b68a1a5a53fa -b8f341c7e187ac0888b3c8e119d8b841e494b9c1bd746cbeb1ce48fda15b0054 -817873ce4da21d8550892ab4a06565a98fa666a6be00776bda87181ef8483129 -3708a88f69228dd0c3ef8224301dd8fe81b4abc3563f69bf1212897af3e738c6 -c57cbfa53e64ff6a79549a8d81c3b5566dc7e697e11971a7cc6743ca1991f391 -efd8c0ba9a01397a05bbe5548843de7f2fc4747eba91c5988605a76f1d2aed97 -398cc672cfd5498ba16f6aaf55ed4bf613786aa1ba2e092c06cdf82b6231b0d6 -b2f10cc3499b6c444cef515a033381f7b6502d6e6ff4bcf2bd273cd059bddf06 -652dec312ff80e8c9f37818c2a453523976487f1a46f8e967b5d43aa3e24fe03 -46097a6721d0882aa36fba00d3056a8ad42d4efb81edcda5cdad6ff2388fc54b -775167dd8d709c2a315e130e822ed68a889dcec2ebb10c4c56897ef4c8fffcf8 -6d0d146c61ce0d5d2514ec2e22a66090bba95fae51b7691c7f1ae470c0f6c58e -1eca070773920235792e58838f031cd2cdae29f1e61ca254a1ed00a6f664314b -9fa26bababcc8a6add7faba2081b6e307a17aa47ae1de11f7189b78feb61a957 -51e9257a84d3184ab2b9d858a41aa2c23374497930c4bea32e04d32389c55b93 -23a41d83442345d482927070af462aaba8f5b1de9876ef724fd364ce6e376e0b -a411d2036639832aaf1bec583af5bee73ec7bc9a3a2acdde4c1d6602cd8d15c3 -39922661926a3b2b1d7b15bb30870929d0da419267c3b04b2aea81584bc202db -56b6277ad95af3cc411dda29096eeef6cf0bb3d554bc9411c39990db4ccedf0e -4aebeff2e95e4469a8fd5ba6f03a733c9ddcb832c221f114de5587fa7c9b0096 -2306f9355684eb66d1558aea7150817df7fcd27c3dff8c9abbbe47c2354f7c50 -c306e8739a39f1a71e8e7de4e5932a0a1d2b677041802cb02cc13d7c6aab3235 -1143c982379bf5d50c92ef96afb597d81c107f2ee92f46a81b1bc9b9cb30a296 -74529ce1ba8a022e221c77650c681a19bf0e5080a065e4d66d70f2ee4a876fb4 -40b0b1e29681ff5ff0ea41d27f33a7e25115e9bf421e56f47e24f03945a2ba16 -906a3d0a8b5d3f20abe89d7b7705af5f0f3533f7a546ee67d3bfb3349d4299e8 -e49bec41a8ab12e1bd71b2cff0cb0f1fdfc0ded134b5078a1e87a490d0ee31ae -506618d409acf32cd653c59f36f4e3bc051ca072a4a75b91ddc17660e00cbcb5 -b1fb8d17f4bf7f78f74724ff9f1b84a5eacf2e7da1b9ce0bcc94b7a817dccfbe -46cd999463b0b19a91823d18adc1662117011f2acbbdaa2e062fe77706c48952 -38ba2840d9d98b9a7a0d63b8bd40c34e26496d979edda33e5821c86d9565f1ca -40ce6c160e57ff22d2564348e8f89d38d46b17d591053c79f89c4e750d619407 -eaa5a8bdc52ea6c6ef02744eb4a5c4886c32b210b86b41495d8729174df80f7f -b653a2e6ff5996d96eb51a828d0606998fd526a82a5e8e1dc79127fc6340000f -e218fc26b7c97c3cdfcec5a497f7be1ed11aedb012ffead9aa2b94630ead80b6 -3ca17e79276dec733c9955e9813970215fbe02a751bcdaf5e427a64e9b47b4ef -e105983e0e02c5a8cdc06a5db4126ef333583e4aa17a3fd944ed803d4ef88501 -bd626e0d1d8d7b71176259283e22d9382ae88bbec9cd6ba87933f86fe28af800 -dc2080f38948e3c20d8f4477e2b9f85da4800cbd1b9015eb64a07b459215caa5 -c38b7781d919e199112e241556e1e7681a749cf67a6b246b6b245d34ebaf1504 -f06366b8a1faaf10bb4304579640f2cbf3fb339df697701f6c51afa09351e699 -890462e1a8152f70f301b5f3a01c549371be46d138045ffed5411192bf6eeb13 -51d407ffa26d4b8e7b267a3b3cd5bf9e06816df2e35b6937cccf16b4eb9ca3f1 -272a16fd71588054016ef2743c1bd58c6bf22f083fa9326d19299ecbcf66f4b9 -afed95e1e2a2f8792328e3af6025da7baa1b10a721bc511e9c2f302673df78b9 -f466e742ab2bacd5728bef45dfef5b74d1da674f4b1c8d51a324fa24b23d141a -e082d79c3fea6440336329105d33aa1a960eead51cd500252a4d7d481cc31a99 -e9a59e3b4364a3e19805c97270bd19b031146afd9f46111a10bf886385731d74 -95ed4727f7e2435c96ba702904ad29f606fe9c5f1f9a11a229b1d528b9fa9ba5 -b50b4d4dba0ab5b3840d71c67626b6afcaf743dfe5334e00b64c5a73b3775450 -757b911673bcbacfb0f8509e8b2b2d9dada9a1558b97b146f555f85022bb4bce -86862babbcd259be6537133f30ab2895f60869641b1b9a4cb43b676b0739c112 -2859492d908c6c60aef5ee3b60d515e7e641d008483ab4aea0e159481d623193 -b5e2bb48c77bb87783c7525e59d19a190e2c0aa02446a8d4964844d9f2561a3f -70f20779d197b91450de25463dbb82c2c7c6428706f6d9f6a1474bd85068b37e -4eb45bb80449ca5fea88804308f054167aded26609e7093cd396948cfc810160 -347c6d834531d64a27bcfde1dd24607d5209060f8207da7f5ca88011e24e326b -66a261f36f754a37339d7f10eab4f276e1eabff47f4bdb577b9c4dd3de333fd7 -8f8da94df25df93a57193b1411761f908510980558e23b0584421f920989a758 -138f2e50e1493b3f9f2154a488202e0bb77316ec03f6555de4ae83923dd1588a -fe0bfd9235b4c08a8072804d743e793daf862ae381624303be7e5e0dbd74c51b -4172b1a16c27b6f8c5a695fcf3015cf4f7d89fc91c4c8102eb83a15093263774 -740f02f675477a3b4b6734daf3d18d1e3bb7752922e9b33bfadc539596c276bd -cbf0fcf5437eb33fbf4a83bb2f92462236552eb0303ee70602f42bdc4b51d384 -301922cad3abd13deb81f173e9deed83786f4a5de1d7aa21cc77fc364fdd2e7d -8b9e8074ebcb7f3511f0a256e2cba9b32bac11a5b7acadc0fc1d378ab3557382 -9aaed6a9c679e7e5cac49307549f8c4335fc477267e25506c41035cc248f8797 -8c267cb08fb5bf8a087e95dd47aae4d8389e97ea0da1af064d76e5df286a1774 -a783e3df200df1cfa26ef1ed9b5dce5dc55102cc5718854fd8911a886d0e2e8c -a38eadf009525bbe17d0986f4e3c6a23e608fe2782e7c4bc31ad13d80ec03b7d -1f0ff0855c4d7f9d63d6283ad8658fb13ff68586e3135a99341e4b88678704a9 -c5e8a4c2a9e70f13408c9c54ac9420d52761f62225c64b7c60514b7de0a2c8e3 -f27544869c93890e7df32680fdc438392efdd6a7bbe7621a7642632b7f45bf2b -3f0cc935a688266c39f458b9503ed06e67f4094946e73a3fc27494d890065355 -4fce63c60e6a32436d5ba5e0ab4f373e816b57fa6ba5a2a9bd02cb58af2783b2 -ee1da6169c0f15c23c55a7b2d74edb384c6f646adb73d70e3310873e0c99231b -1af196d1742758956415392b4537b1f04ee4060899648c387bc55df28c6db99d -2f87190bc6f1109ebbd78e15a5641a76198b590286065996f6fe1f776f7013f4 -e999219945c4509d37463f6f18cfc46a500f39e2f2ad229bc16793428a9d8cce -c5d950ee8ef43b425e518f4fa99333f9bf2a420b33b383756ebb0324b7df49c6 -0eeaff9f5f4f0665fe60d40a1f9824c0df60827d2d3915512fc4a5e54db36580 -9e3fd8c1c7c9ead2b0b5011e10ec68e4035d8aa662f0bf09fde9bbeaab5fea32 -3cd1f8cd96c62b0410ec741cc2aab05bcf9cb188194aa1fea94f40a4254d9149 -82dee90d74a6b5d876068386d55c1ab92f62e3d1c3f24d564615ca3035ffce2b -6b49e53257393e66967da9b72010d0f8c4b6f4337487b6abffbaa16aaa86a6c3 -7c22a7b4e6f4ee90d60a9fc7c95b15d34c8a689f028e591215b329d86f35376b -15dffe9323257f0748925c002cac78ce7cf473af7378eda5489e3c464b11e3e4 -87d805cded68a70bb95a36d01885006d2cded168532d575a128f0e03ce4a1827 -b7b0f7ca3da8e4dc774ee59db3616caa3a8924f84f35df50e48477c35fd08945 -308a214bde3389d0cb225ee5d1f96771fe3930b16645c6283b70223dfeca6663 -d72e9b6b4773edd543cbeb81e38a094ff9f1eb6012ca08a77092987bb8dfa849 -361743964bfd43032f77b09d6d1407abdcca53d424ae51fb1ed1434cf4a2f391 -b81678987709e0bea61d8546b8de9b05260d7e2284e445933ecd867cb63b6004 -0fc50c76fb25f81fdaaf545bed63d6065def8265028a224797551a6a8ddfab06 -84798af0747678d53a7564519116755a795f14b254642293aaa3622be7c14f86 -5dd86caf78e0273677f2e33658b24310bf444b1e4f0719c187669b286740775d -66a65699cbc25bea7f7eeb8c3146f9e91e5e0f413376ac09c7e24f9b76d2af1c -b63201760c0a7afae554b8defacb30d9dd146223f69b015b9b7a79cf92d52404 -6531acdb6bd53597645241ec6028c585407b903d0579573ebff088e43efa91af -e77940e6c5ffb955e1fa083b949cb13dc3483bc7637b96f03c79426237a96c21 -26788fbaf00540a987d4ef95082d64a104dbbd75e4ea5c00c2cd02e622987ff7 -2775eeca7c15213edb33fb30b48d17c3bca35ed5ae941829d5992d7bb74f8fb9 -b04fd6fa321052a8c2b40f78c8e8eb081f8851c508f4774267d091e2bcfd53fd -bb9e9b22d7aa6c9b62f0f67a3bb9b1984979d55c45d705c1cbea897072a86b4d -0cb7400640c26526c0a03395986cc3ca897453f7e6c4251d81ed29e82f7052c7 -f8ded9c0aa221832b5750a9845659235f82bc4d9b073a75af2271a0814b1b9a7 -f598e0e7628851b21af4f0b0536c129f6ac5f62090191a7a0776190010de80e2 -7e252e134b7a5c4e14a18a84e7fce3f71645ea072ce3655632d2113d4d176f13 -29142d814a63c756e0a43ad21a55d932d1b83ec93188d7c893220fbf5157baa0 -834ffdf5d191342a4f7afbba2e63b8f36a6394ab5926fcdfdcd8d8cf138fecea -3deb371294591899b4f6f8c8f0ea2c41356eca49df468a952f9c3ffccc8a99e1 -0d5d61732eb44e2ae7b254bab320d13990ffcdb63f3d541ed21ae022e86ddf20 -1eac6701a072aaf27664dd4e7874c4e428682c44de9d9b14c25fa8c2e8760acd -79f11c13e198602be9d9573f6f04643b80abae1cb6269e00c8ab419d49c3606b -11b1f8f46e7977789b19ee83c5bc35bfc48da6d32dd4d16c1303b0799dfe98fa -0cf8531205195af9e992dac76c6cb79ef51865e6b012f29df6d3333daae56b36 -8ede2fc26a580344fdedcdf9c61366f5887fb1e7300f7898e38de35b4dac436d -c4f79f7b365cdf9b6a32d842b6f8494b7b6c91c122af116dd8a3c3c1a35a21a9 -509f5c0c8479c5e57b2c0e175fbb4a85d3b52c927a20fd0cfdf3e2273ec8726b -58c23b0d4f56d69ec2c59d8ce896ea7dd86cea423c2f7250170a09991fdba4f2 -40a6df094cd170ee83bab69d4b8706441730cf417284c8206c646b5105d592da -9274bc54d07e141fcdcd130e51bacc353ea2e99dfae63ecfb9138e0aaa07178e -de98a4f4d365375190585c8579e73929b840667afbc659f5ba4b9f25fe55c75a -2a42fe330a4b90f3a088202806baa50fa1e99fb32973f23819fba8 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F548_0 /FRBTTO+CMSY10 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /arrowleft/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font AMYDOG+NimbusRomNo9L-ReguItal -%!PS-AdobeFont-1.0: NimbusRomNo9L-ReguItal 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file COPYING (GNU General Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Roman No9 L Regular Italic) readonly def -/FamilyName (Nimbus Roman No9 L) readonly def -/Weight (Regular) readonly def -/ItalicAngle -15.5 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /AMYDOG+NimbusRomNo9L-ReguItal def -/PaintType 0 def -/WMode 0 def -/FontBBox {-169 -270 1010 924} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -currentdict end -currentfile eexec -d9d66f633b846a989b9974b0179fc6cc445bc2c03103c68570a7b354a4a280ae -6fbf7f9888e039ab60fcaf852eb4ce3afeb979d5ea70fde44a2ae5c8c0166c27 -bf9665eea11c7d2329c1a211dd26bb372be5822f5ea70d99eb578c7befd44cdf -045a363056e5e1cc51525ea6fc061dcebb337208eff729802376a2801424f670 -0e7e6397b28f15bc10b40012b0a3eaeb2693e8f7f627c4c9c7c6c5bff105c1e4 -1b2b9e8f09253b61177e95ea219474796072f4b363fe05fa7637750b770d7b13 -99fd7523816e22986f43b17ad2f9328028bba7f383ce5c429773b3d968b4307a -efc6f468433d2320871c85fc9a377c8146b0238e6386f2f010e4c23bf50f301c -95de2b4a559abd765880f5b3d8960d7c462f28339aec4978f261a05761583468 -b73b46da2852db1d9b0b53f6427551b6e87f1a1492a19dd774ccc6a1d0bf8d1f -afb24bc1b3a56e452791e8fb9206a2c9df1677e848a67c4dc754cd0833116c84 -25127a919ffae922f6ec724252ae53662f3eeab1dba230a6ab6ad98cf27afcb2 -6837487ece5214be13a113d27d5ec449ac017cc7f12ff7b731b6aea24462f3bf -e743debd18a99eda36d085ad3602ee939e3c2a40fb9551f4e5e904578e8df0ae -a6e10910d5205c917b45b0d0f44caa993ea6fc2e17ea43b83e62abb31717b3cf -d783d25486084caa1c642a4d9719906889510d7e60c8ba0b48b9d40222d36a01 -1aa4c8148ba57f165bb7181534df0a597bcd1df98fd644fd3e3a09a21bb018bf -637e620e494eeb843c575bdc71016214e19d0d3d030b8a9eaea88822ee97d8ba -ffbd2f522d3ac2f34927961e189b0c163c365ebb410088e95a5bd200e62bd5b5 -e846bdf4c127018a54a78bce6dc744c4c1aec0087df470d72e461c8079f1e8a5 -12794d770d391a02d428fccaaa4fc4ce3eefcf12b553d8fc59588b922565aba2 -c179b29dcecea5254dd73f388bb94a7ea4f16c0ea0278deaa11f2be56dadb4b0 -43bf781fb5151a4d2491bfa2d439082e8cf7a05cbc84393aa92f1d09af1e69f1 -692065dfb293c7d7bb552469bead4b1479ad1b75e552af4c162d37027dda9863 -5e1ff0b4c3ba9cdb41e9c292e901446d40a10906ca0c3f649f7968b4ffd2c653 -650bb2320e55fa19938e4c3775f286a05a1011cff4e4c7f353bfdd88ce318584 -799cd9350da919e462621dc3556b48bf53edce91940eab01870741f0fbbebd2b -c6a26e593fd78e7ab5d05af43231c262477a5309acf964c0fbc114419c98df24 -279612da5ae02b2db3eb07c329891aeab0da742593183a92a619912d6e53b33e -f9489dfb011045b4f20c79a7038e473f435dcc8dfed5b9071acab5a322d4e4b9 -f225eef68b8281688882693085432c16d81dbadaa3df3c2ed508a5547c4b8b18 -2cbe2aab5bfd98acf80d5927a07da8a3aa987a899e28e69a49aca9aa960b45b0 -53079246f09b1f8be89a5912784ef566497df949ac722c37b8b4c641f602217d -e1c7fcd757c04c263aa2a4a08d7e08055e5b922d850c2a898cf32baf2418e0a1 -fa6e54e2459ef6283fbcdd406b9079950669763106c9d8b16d0aac8815fe894b -e1c7af9702ca13b36325fdd90110f1b8a03ce3e7aff614a0a2b1b15a1041800b -b72ceea17cf4a939410c53d5bac0b89eeeb9e2f9cfc6bcdfd9a438c109784adf -9d2843fc809a040b9287f0c71d93f7c2b3273d39c5ed535a8e130b46d3c97f4d -e0bf14ef07eec07f1c747a6b5d294cf4d47ac12f1d9282d2de0f808a4c609e4a -0e2a68646e9583b6b9a75c95840bab3fe259ad8846a82af91f44923f25bac677 -3c8ad0a810731fafb0a95a5445b5800d0be0378909aec60f544c3e7438760b6b -feb2b9b16652caab36f65ac444ce9358670e060a90cc422043b8ea8f0b065446 -0b4ed94690003cc77027d8a3c0a06a48bccdf5d6d6770402b4f44ed2673b1329 -06d4f88bf12a3445794fc9db3f1bb4afb8d380def7dc1dc78624c748192fa321 -c96b32dc26b30e54dffe770165d1759d82a5542cfc4a772d8c2cadcd2e2fb1ca -1517ac15deb0bccf94ce83436e989adba2903489abb6b2eb9f977f3f4d690b31 -e8f6e27faa56bde2c4fd331ceb502ad286857dd67d898f8b86e13a98044f77c9 -ef13c7b14a754fd0e07c68a90940f3fe3594afe83c605102c08ccb046b807975 -e69c165c9b833f41da40d17653b80730495803061fe194ca599d53a3367ba3c2 -8db6183ae68f6564178dc0372c58a103da58de056b7b0f8795cccb1cbd4239ee -a2b6af7eeec2f7da99f12110e07d663dfbdc0645dbf9e051f91924855405f022 -13933f1c51af2ca7a39ae3204ed31d68b15f2b74914bf86548d87316170a909e -e9638b25282a209e9d8bbea3ecfa3ed46c2dba5cb3b38d8fadd66baf9417f5cb -6b3a9186e34d1710c011e3a16fe8f9dbc207edeaa72c2f7d4b7b7112bfdd1b0a -1330a7f88ee867f55c828a9154dda3c57b6e596b830b33ff636e46d8d00fb39e -cc497f82e037ae6f7975a36876d66694e3dfccdd4a5f9ee70883fde704969531 -9cf38a1bbe0c7fbea056326e41636e17d93850a1df92ee50089f30f3c4ade4d3 -07305271d998208c7ac0f998b96ab3e3e182e29b819fd861e52b04e00f9b6be0 -8f5766fa4f3557d0ccc9edf31bf84531d664fc186ae2e7f9c81fe8c4f9f1f2ae -3b9560c9df5fe69d969a0d6c120a6621bd68991fd5593f3197223c9f09613eb7 -1ae0c78d9ffad6be1e36df5885f657994ffb6eefb5e0949674c34768f001827f -12f1ba77ae821657e3e96f17de324f9355152cd28c7bc3bb93b0bd0d40d17d35 -2b303f2518e05cfdc4dfa697683ecbd6a949a2eab9cce57b8b14c53ba2265a49 -5c28d22dab35e36b5b02d2fc02738aa6fa7c4cc66c88f5bf25b2be88a4987cfd -39ca40be4ebe0174ba827e7dba9579fe52b869142fe488f9ea5cff30111d6400 -ac3cdd3e1476468fb113f2b977937e70b7214069a06007d987d0f3ade59460c4 -35361b9ee2378b0b2365178ce4fdaff19dc8e52a4eba7cea25387a2e330bea1f -dac191c9e385c837ee253220a279f05876328864c9c2248258814f7a16030c60 -5a0da56b130757b262ba58ab68340b32d30ba67ae01efd748994a6510bdfb15b -50c31f5dedaa1866ee9123cfc235591e6516e8210dc0157687a8f081c3aae846 -7481d16e8af6d8caa9c8596c801dd5948cf7361cafb8e01268eaf0cb40ae29d0 -de3bb879970e06fea94930ffce9d4a15ff822de7486a4023fb6bcf27d496e0a5 -2c73d409ed6aea6923de8e6ddcd7615d76b5af4f2be2cee210bb781fd622574e -042b2fa03ff6e45cbefae7dfb53447fc56da42938717098806352776208567e1 -f07e8372e0bd8a19332de3a09320e82dfb6ac58689a65ec1fb97808e3ecfc84c -1173378bbcabc629bb8d4f2642cfbe1bfa1a25137db295526810f349baa1e4fe -9bc755f32a1ed330171ada792e10540d41b177bffbd9b94c2c008ff74a20138b -eb2d0b23fcdc136e434d7fc5e7710559b91756ad1171ed3bae249960384eb4b8 -4ec4c71e91d872b1db3b7ee412aa9b4e66c8e5a03d5f1d98de47ab51dd77014c -2926ab5e994a095d9ee5fb336746bba506603279bfa91724f6cc868abb2ce5b2 -c145dae2b6128e6c913c8814a5a0b4134c30edc7f97908ddc6e7bb65cf8a58de -88ffab9273afe5819be1d31040559f763e95cfe230d48681d0b4103ebb92a3f8 -01177bde9bdd61e288e9c5dbd18163eac0a67899acfc1c386f8b261fabd320ab -89fe9be450e41549b3753c32e2cd3069e82101530513728dc24d8c2c25b06ae0 -91db97dcde55f701a63895445c0bcce07ccf4c82b318494f42c776d9482c8c19 -46fce4e987e770a4a7512b5276e36ec3072c6dc9812e56e11b34baaaf9bed596 -e52d1ac1768e8e0a8b20b94f320d56406f4ea3202920fe665809102ba71932b5 -51ad5c83f6f34b1e87272e8ac300761cb99c9104a20557c09df9cf7ac51625ab -05c5a60689321d8cef7eb8edd092b9feaba272a94e133aa84a9b7cded15c6824 -3f7ef11eee530323afe1153fbd6285b2302588252609824ed75c05416beae011 -98155779dec43c2e7fc92532951a1ce0dd6613afb3f9c73055f528f993a342c2 -3ea326391cb99feae1d61d95af36536b1c53d0a2c19709f7c85f07715f95a98a -cdb7722e297692fc187c000a9e64bdfb0c56852bf7ff946f932852d3931043f2 -60b7beabb6b6faf76bd8ff3f2a6fca03fb36ef04f59a9f67d26da5ddbc23bf20 -d82e99326a41155cfc7b4fedb80f69d361c31826743ec395b7aa83c10f9b5eed -80044f3c258d7e2052d2cfe08f6046189bd0022ad8e6e7890cd31848b2477ecd -095ba2ca9f4e9ad4bc8c7b2dae33d20d4cd01885c2f172052c1f8bcea593fff3 -4821540e79f626f4d7fa64c0bb4cc5485309e67071d0277a61369645ad3a4d8c -fbfb1722ef6011fa6b2095aa4e5b32746f64c16af093df2e9bc175409949d440 -795f6f2b72a69435be1621154ade8d4dfb1bfbb0e28da8f08c76cd0521ff176a -d2e7dd44916af6a1dfa3ecd6194189190b428cb56e2ef4a1bdc5d739ff1cbefc -39eac4b5934d3707bd30caf67adb3612b37056151b45e9eb73c3bde4b4350148 -23c3ea6ad5be04886842418ea1872bc169f92a890670fe0b8bdd86421400b49d -57e5ae8fdded5d706eebe573a5a172004e59b9c81fc990d2cf7036344c4335b1 -842a5c879354a84cc837d76b2babf981d4e60c857649054fc69fc59bf14aea72 -51210ac8babc95d58f4f3b497d5db3395a638fe339c5149f284b8dfd340c0b0c -1984d43b5951b7bdb82423182dce8af2baad5eb25e037c5d976b534a3459f742 -751b5ed1c5bbe4915a7b281d1b1c806c58bbf900d5ca092fe2119ce099e52872 -0e5c8231dd6d7ed8fa5d2c953bd8bdc13781119d2b31a94bf39948d4b3688e58 -8aeae48e2d66e17935058ed16528d28e50e37bbeb1d155450364517018b1b44d -bb0703befedb3681a2b609063302129628fcc24d88653589b431fb84e4ddb650 -c2f783594de613ebdad8a1324574cad1fd05a37844799928b4da778710e3a4cf -b85afd46ed46ccad840106074f69ae7c306abf4cead6c66f4fbc0fdeef002570 -25305004426efca887ed5b4f2ef6dcb912ff552089f383d270c1312811b510f4 -11622aab22c5add53e1979fa80a9ac5ab80b3255c901cda700904e4254725a18 -6925971163b35469c55ddf9d36d2e690c988678e2be17e2668807c0fee64d264 -5a8f26899ceae3abc5553bc58674333d43f27d0ead9297619e8169554512d7f2 -9984c12dd44285a3d8a75dd20ebdb5280b95471bcbe5473447fcf750c3b061ba -bf491a61adf487ccefc79cc514569978f12a7a3420ee046e1c28776c96c550e7 -fb0e2b46b3e57b2b8a6ae7d306fd0eaeb026beb5b13b8c980828f78905369fad -aa7ac9c3b91df9a4d1be00b3aea709995849ae4ece16c126b99c3d0fc0bdc084 -f8486d70022e0d5a8e50a27e9439e37d3bc175c3a3bb19914a4bded2feb81ec1 -fa7e274b027f4f4bfb331bf4fcb58fcdd1b999a775bd2a9002e846d7fe61c6d2 -e29fedf3121af6edcef90f23f54b128efad5fcc3e2236e1f9f59218994460d1a -f21eb9a2999501fc489873e9eafb986d9e9e780b4eddf332aa72697ec956f63a -4307133ed0fd2dfafe283677469b7b14b155b17a8da4a81cbce56da716149124 -bb3b20fa7a2b64b58d6eab90dbaff1d560e5e5492f17615b7308cf7670f09a04 -6115d454937c733ed45b1156c2e7d0ed43c093d6416b91533637d5d5f649bca5 -50a5ca5522b0f8362042caa30a4bc87a4a4339710e2de9b2c0c84baebedd073f -25cacf0e4c4bdba46f4c545e27d20536827ea4a4d5f5e19518fae6ba2d45b5e0 -b247f20752a795594d9ce548b5c0217ef480cc5a0be6794178fc7c017aa8a3bd -74686310f635ae6153d9e18a0514882d4ccfe9d7dae9f24b393985e8da776880 -1d9a6515ed7bfad3cabd1e13f2a9be17d42dda60f38dc5dd5412b03b938bed86 -0f9cc900eba7eb281e619edc39b5413af1e242ab56171d3a01203c76788d9024 -2f72c89b7adb10f5caf6851acd3a4369972f796d5a1a9816023f5a454dbf5bfa -5ea34c00df81a76fd79a0198e91ea01efbf7d89d78f9da5253250bb29770c4e8 -df955af85d48c33fbdff3845d6868920a3b09ceb0b7de798354e80d1f3ec05d6 -3ceeb37751ab5f9d5f7e682958235c0fb224551296108eeded2e000bf86193ad -5f290f698375727743a699633867f03f2d7801b18627f25628c0b65ace0e766e -ed22bae384ad0305bbba6a3cbb913641106259e2947e77caa437856febd8b604 -7621e8be93bf909cf3893cb2e0b4c75afabcac6ee9ebfa30dc6ba5e9bb572318 -ba844429bd3b5bec550ebf2b7a3776f11dcb71c930489a792bbad9f6a1679b6e -22a32048d0652fe2e3c1dfebce17cf97281087ed892b5d02d83a97dba1b3b221 -4f52eaa45592670902f979905281d7e92e9bbeebb909d5152f97aa49068d3b2e -8ce26b784b48936a3f8e569e5d96d8f3cf19335c7ca5f139815f26b62ef0be05 -2f436d3d7ad037451cef14021a15b0b10a07048ffd4cc4b4ca987cde5290318d -7100cdfb146fa044c694c79f3ff3ac98f1067bcdddc054cb3867af0b7e340e39 -81cc10ba0763901afa3f492590664fbddc6fe2ef568d6765579eaa5ff1501a1e -6b6b303c415557a70b4d60994b9841785a8791b51814f08ce8f0b048c690dc05 -fce223f392df0b93c030960e7a4717203c957f428fa52cf5d206eac92a7ec569 -b1353585ae6a14877eebbd8c402163bec563feab67ed764809e5205bc3f50fcb -557af616a430215a7f9915872478572a2335fa3817abd8ff113020f023c513b4 -202a3015e22d173b07d87e6d6eeeb3e0b0891c00831843c6a2613c15bfbcaf5a -8bad5d9e69a88eed3a1965e1876b223b74dedd8f16a2302c7f70ed7c8b5e60e2 -25c39cd88e4b559888007abc4f48955fe377c69b00be16bf9eec8248ebeb6808 -5a80b2f60ae03c29fa29b91f30efb4ca29bc51fb2bc09a7343d0b107ffd02a03 -b26ffb1c6b1d2b5adb3647d37bdb45420e8a115beadb142e3aeedbcc8d0ecd93 -8777fb9ee661d5db7088e3faf04e91f1865418e2723565fe2617d2d8e106a230 -a2dcb6a4502528d22457a4399cb7f9e4f788a03d6c8b5757cf59267fd86ac4f9 -21675f6da1a90156bbdfa77facf6df331491cd2cde707e509b8e5d03ba1b6781 -eacd2ac3eeabb5f5ac4d0d8f5b10676e7357557c23bd6412c625d7944302c969 -561c704f937fe5304e1704b20352a758d6237e52c4a356a08f9893743a5c20da -6a817899bb2edbadbf4234e1ece52b9b3f3e29095f0975259c931b67595f0ce0 -db8e4ccd5f6fdfdda07663d252bd05fd4ca58fa54a9fa6acceabd97f2313c59d -195cbc3bfb55f9050d5e3ec4e42f883635f18d17efb2a0ab333e09c2521705be -aa147b6717c816e57d38adfb2f4658249a3a345b337251b7537cd305c6424dbf -b204417f4c36086edaa8da348dc065aa5a7f68a0ad3e3676a7c240e76ddc8786 -96b56cd4e70c28c3009185ae13ad4e96c8522735074ad649cabf39201903e974 -12967a45b574790d727dc68222dff726fd162dbfee4964afbe6549abeead5264 -a033fb29e70f1d17fe58934bfdd5ee6defe6056ea4a0e39a39b7fc1a6da06713 -f952bc20c689bdddb94bd67997f60f31fa6239387089deee5b687455a5c06fa9 -fe941781f0d9835d8d020cc6286c2fb8ed5906eccffacadd71ee0b7c7b67d8c7 -aaa95f9cb24fd22bea989e0e0919a4ea35fac630a9090346da895bb5b6e1c1ba -ff90f1e16665998ab7612444979edefd96f1f701d13950e0ca2daa7787735fc8 -4b268e36cba6d7de0506dc5353f3d13ad666cba8f8c56e27e44b57873adee581 -fafd1f33a85b6169d4794b1d73940c134f11dfde03ccc5709f6d806cfffdb6fd -f9361520d0023ac6aa3c93b843d8cd8a652a665eb31d6b75d752e7679a9e1327 -d0adf92820acc78b0793b9f0307c776c201a408a883f99f9d2ade3960b1e62e2 -db5d6ca4115a028f87f77651c95bd71456ba087709827b05a80ff78746cd3c09 -72eec0baa7ebc8a05043e18e63517fb66e333973dfa6bc796af520e8efbae640 -a2f4b94f244d365b76fb3e229726dd7c61478dff4d616cdceaec1ad70d9cefd6 -0e9e6affa41f34b777da7174b3281acda204977bcedb3f5f9f0c5d77607237a6 -9d6780dd18cef875257fd719d237a35864498978239cc0933a9ad0fb8ac74f3d -869fab0c30e8001a2df0ada8f56de43c5e9a7dc78220720dae05f0fff948adf9 -0e8319eafa3fc8e936c9c040b1498e7eafc36f03bb4cd11a6fed37b7a8d05b1d -00b5f36799e9556526f5e5f2205dd641ee39a4bd6c8ec20a36473eadfe1a499e -88284d2fb544b7bdb637868345ae4b3dca6bc0754bad59df4558d2d608faf166 -68daeac6bfb73db431a3146628d371c2d158a1ba65c8d2d47ceec7addae77864 -042ef587a6d6c04dce664bf83492d164d2fc00c1313c220bfdd7a30dede201c5 -1e84d9573c79235a8d847d0a4c231fe009058f5848c775e343c61835c7c8e025 -44dbe77ccfff9e9c950ace49091771604234e586c1335904da22349a847ade3c -060aec69c2987eb1f3332d8b66e59be53edab3da137d59cc6efa0f579f8a1d03 -882c720c27834570c10bf892f79b30340ead8535881b11171b2040fb6637140b -e927369f803a4ff311d78d7e68f4b5f8628fdcfa2cc376442d78e6f47cb378eb -31f079902cd32d6aec688f02a7365b66797de1ea022afec2f3aae36fe01a3e5e -6cc49c79ca23dc10ed8071eea3a0f8924a0dcc610f842e4e30c1104f859ac970 -06c7490195599c65393be11269c8dd7247c96d632523256f59edeb144329b8da -b35303c922432e92394a95196dad464e35858f00e6a27320cf515b7b8af90d06 -82e89f09afb605862d14eab6a99218b3f66f11ea2f345629c402bd9aeb25e3e9 -8734a0ca4a814d824ee4ca5383c6eb8ff1458c767dd9b71530c5f01be2d2611c -f9644c28f3f52ac748749b54eb652f76630e3a62b63a3562a54144c306beddfd -557e154c7d4931bafe9a9136c3aae071b00e7204150cece0d45e10bd736b633c -8abf3817168828ba17b23c8ef8ee35119c43cd7fe068e1f016aadc734d4338d7 -8abd60567f307d6ec471f99b03cc7b5e8140dc07f726303c2185590f9f2224c1 -52bf01b038ae1e963098a309edf98ce5ba1ab235e1190ba23732e42841b2bf69 -36560701e1653df36a29c8c3254d402d0140f5ffeda15ded4728c176e3f39c35 -48b5a2be25266587b52bda256f255c940adddbfcaf37ba2500213239f12dc7e0 -0b61230190a4380917962c18effc6774f6db08b799c5966ca7133fadfd7e2b25 -75116286d1c2a40545f973870cbb5cf97691afe304ca7b586f198c426a71dfa8 -cedbe3d94bda4267b9b5ff1454ac7d54f59c5d94588bb274601cee186b9ee892 -5f359ec5bc402442bba33b2663d564461ca130d7f1405b0467027ec1e27bbec4 -8d51c674c81b66ec733c4c57410956520f9c16708aaee0d9ae34f1050f6412c7 -7a23c8c3364dad8e407319772c9b201c49b75dea4685566d9c912acdb47aece3 -f9786e47398891c07b0269e74e2eb935991c9d7a835eb88bc04eb2b195ddeb02 -38dcd1e4bb773e269ad58fa9e2f5482db94a661f065bfafee3ccc1c812e9fac3 -31fd70975e3a0c72d37207d6c90f998103a821c35734f0153950e5f72ff6a8ac -cb831f57267142dcc4079c915a4d01807fdc883e15a15b67e8cea1ef8d26e4fc -b55c69418d7a4dcef51473a037050cc43e204fc7de2392905800993bbccaf459 -3bd84187fd1c295d111867930dd068988631f5d0abb9adc48b7ca8134f8a3baf -3569f5ffbf19291022b3e13fdabbf0ddf64fef601cf97dc70ed2e4355de38f1c -0ca81966adfc95cf03e794d875025af92bbeaacd9ee58b49c3f0b67d72b13a0a -971076819781d91814c47a0a3b53f767b7630fb55df3d2706d834b127d56fc95 -b9b30ab934839b8324c9ee0147f0bbec998eb1b2939a2102c59c896b9f57c9b2 -fc138cfd94fd5c512bd83e30e8356e983cceb0de72224f78b3c8a98359e46f22 -c19ab808b70c4287397eade3b28a311244385d3d49fb80adc4f90f32366fcf42 -eaea8d05392164a48f03184563922bcbeb78376f512b9a289325a61c0c357e40 -bb3dbeebf870ec12ef096a8997bb6ec55251ad55bd881ebdda84056556380935 -b0b8eb1f74ef96bf02375a30dc53795da638252a12a2e9bc18bfd7ff5aa7a8f4 -4a6bb4a34f1c94a781a129fc975823bd16a6df7c5d75b7f6dff55ac5f82e3e2f -572f339f48024e93f0c59fb1fc95bacf7bf5fd7c683c9b159c3b5d937c3a2110 -e78889021ebbbbe76b1f984317d310ea61f7b5cdb4ed1754a35adc9c6924c3e0 -2e3b157261eea5092e0e7a914a259eea2b14192343680a18710db9f82e54c920 -369587bcdeed8f8acb72d2565ca89ea92b6b58bb861012ccab7270200ed5cef3 -9bdc58f4831161e8ce4ef5c6fc839deb8216482d906d60c1a3292de191b40c79 -85529eae01de8fadd442ec8bfa775366070a9e193138a4c6f6eca7ff554c57a0 -19346015d6ed5dfe8b9dd876a207e7247deaa1e42a41c3edccb32d47e5fa97c0 -9bf3f8324a366856d6c6df8f295da2a9164a99b6e66adf4247dd79bbf54525dd -bcf518651fd8b374cbca6ac532ed443a1c952ce148a67cc655d92b670ab76c64 -cba90089f1d252ab55d93cfd0ec1545e79b65c5337fc57e46ad6ddcf5ca56204 -867e467d3982d77c2e603fee7ec4b57bd8718e5be9203666459815b7428679b2 -134188b7c2c89f64b7426e0dde73f586a7a86a4cc4136bcd5b09b2482aaf3ea2 -6a9c99cdc852ae0a7262b57c06143f1a6528b02cdd69b9fd5edc635873997b4d -7c5644daa467783e154ad0a787e72bf5a627f712267198d9368b480a4e764627 -b268d7f1500b8e155615bf9e59bedc125774802dcbe33451e222f6a9ba24afc1 -92933742c74822f138baac4bddcfbf447dea77a4e913028db069e802014b5d57 -b0c7d6b7a727742eebb6a7c7a2231c94d63fbe66fa8030f3b378006027ceb4b2 -74d8d75d001c7b4d0225ec9cb04ca7f5e1668b44682847a8b14dda4ecd87fda2 -6b1694a2810f90537c403ff242d0accc8b73fa0088d668fb4fd50c4a0b0aafe3 -0dddc6e893c1bb127147fd1b35254e2ef659f023cd826cbf5e400dfba85f4df9 -f70b30a42df485bf5dd6c620e37c82bedef5841131716bc5eeb40aefec8c0379 -f9348a1d7ad0618a422d85300bc0f4208a5b4baf9dd1f568da943f0023eec988 -21187716ec2104282a7fed77b0c5b01e78d5d9d5d99994a9f232859ce68a62a9 -e6960f557f153d7101dd98b7836d7841d3180be3b34a99d4434af82db181de42 -e7f3fd86d86678ea86c4ea4d0af845955141ca4f9266f3ef69c2ce9b73ae1558 -9dd98a8a0802572fba00fc509918a64f1dcabd06286039e75042d53d472ae66e -38ecb6e6795e3dd12757255e786909f306fc17d14ed432f5107aac6cc50236b7 -d381ad2c4da239669d94cb276610a846e991f508a75e1a3a851be789b9a3f75b -f5d7dfde15eadd55e7710d79b5a4127b5e9f85f6bceace031aa9ad412541848d -59dd3f66886672db5d90f51fd15334eb973e64baa4181186cc3c090b2a5bbb70 -e9e1fd9420a31674e9e517b1dc0196fcb5624668785a65dfa60a0944386beda0 -66e2a3d871913d23001c0b5f22c4136fa48e6fbd636fe0bbc104cba53ecd15b7 -0034db9200070b7924ab31ea318cffc35cb44bbda45e04f64516b48bbaceed37 -56a2aaa5d5c0a2d06f71a5ca689c8c8afc991638fff960d060555d9ee7a13868 -434853e22d4d9aed6231039517aa713e67e7c08467c687a21bfb00e6c99c9b15 -51859fb8f437c77bca2b0fc97a36ee9b552645b83ddcd2ae48049085693c356c -53b214b9216d5466852340dbb92eadc60bb6225d9c08bb9f5e9f50e40dfb7c12 -2b5126c6e11393d04691831af2707bf11e0c4e887511a59442469df76bc8eb2e -d2e97d09b6b2f1b533ac64d85d454f57702af92cc88d5ddc46388d6c203ba06a -f57846d420ef1727d97d964da29018245d91f1e37e3e3f9f04e02d997b0c28fe -4c99293e87c978606c3a0c7ca1d121c60ac58fad627be407057eae2ebc2074dd -fd2bd9fb017ad048ead3d1243b7634701508034a934c81a9f63a05b7319676d7 -bb9af94fbe826f84d4149e81b46424e482c8c1c655affecb4393177d768eaa24 -a68a71e4faf578e57865b15f459315a26ddf6e39bd3d16958a3a8cbeab793eaa -533eaa3d89e78d292fe37f0c23e32abfd50b2c9fba8261331c66458340bb4cd5 -4e7a7cac3df5ca530fbffd93789357877ad2fe127377b899340416d6100e2165 -64c62ed803d484656ef5ff7587902285671f280de39228b9432ba46c3ecbdd23 -46222998ef3c528cec6da555eb72092d97664cf35ea21e31ffb70e8b8102ddf6 -0203d3dddaa7593a8dc0b1c6af796d891e80860e6bba501e4c38dd5c6b5a6f35 -a38ef0c7cd4ab7cce0e17fae913eec2572565070169cce8517c37b21699fe4d3 -58439dcec0066047253d42a74ba564d2fc7ccf34b3b4e77fbac09d950c3c134c -5671c64b9964c124d123a299d2070826fde61b7f637bf87739e7a0de70ef82af -c901821eabb31969a27596e9826dd506912d05918ddd2981d5fb153526683f83 -04bbb13678af6d8a65aaae58240688caf7a8419f7bacf078dae7495ab646fc40 -c9004cbabf4c76143e33fe49fed460a102129b9f6cdda0797e53df9b9db99890 -7dc89ecb49ee18cd7556b44b096c9337f6a5618b589c6d7c87ea0f292bb446fe -c901b120180e3b514e3e7e32e52028a30cfd6879068a68b7ef5db202f575a6f3 -52748c45a3509d747d672b446efd09b0dcab7b3f8808c011a0470eb5c9d8d632 -0f413186fdf227c7f9c45c403ef93db5fb63819de4ca368f1b9387dfb0f039e8 -2c47f56fa0d3073c901393803ae628eba7313821a01b07918efa4d901aca044e -90d0227813c537cdc2c906e44140bdcb8717e95b7597ad7c01b51b7dac732e65 -fa3870fe8865ae6dbc96b5a984e2e363c4b67a3a07fe4eb42044112ecfff74f4 -09329f03a55e1f57656f88a08e597bfccb97a2b0bc0c26db9aa5bc5f1d1bafa3 -65f32c6ae5de5f798233ed6878583d8335e8988021438e992be94f6b73608413 -b83693b45e539261664f851652bd9458e643bd60628d0acb48a0edd350749e13 -9e480bb10cfb50b4fa0e37348d2f5ebc3e3f3457128b9793ef1359076da9e92d -e3bbd59ccc0c0327867bd7895a19cb93fdcd6ef8d459ccabadb1e0bc6896b456 -b13cab755da348b349da1b485947a23d05e9bb5dfeb8300f8fef30d7f09d288f -681ee6e23d21f76f806440680e7913d323a264fd6d69d4be33527e050856f8d7 -20fcf33f81e5021271c2cefd7b1c6a2dc9e207140be0030fd866fb65e33cf5fb -8879dd70eed5e887537c45d136be8bb191bd9dc4cea400137903a12b66dcd359 -9b6c2e43306759110af0878c8f37c8daf847657c2bd68d5c3ca105b332d18d5e -03269eedc1ae92f4e45c79915981c1f32b5a39c46c358708460301ca4298bbb4 -5b91e0d45fd1de756c6885545bdf5bce1cd40bb0c92c481a629b0d8dafb6b895 -995c6777d9355af0b03720d3c7456ad60eaa5a80549bb54c0820e000eb30a3e6 -f81c1cdc55b70d902a432d13a233c63ae54f98718d6ddae3c6aabebc65760e59 -d87abb67a5171a4ec2b2377bb5a39f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F621_0 /AMYDOG+NimbusRomNo9L-ReguItal 1 1 -[ /.notdef/.notdef/fi/fl/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright - /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash - /zero/one/two/three/four/five/six/seven - /eight/nine/colon/semicolon/less/equal/greater/question - /at/A/B/C/D/E/F/G - /H/I/J/K/L/M/N/O - /P/Q/R/S/T/U/V/W - /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore - /quoteleft/a/b/c/d/e/f/g - /h/i/j/k/l/m/n/o - /p/q/r/s/t/u/v/w - /x/y/z/braceleft/bar/braceright/asciitilde/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section - /currency/copyright/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl - /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet - /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown - /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent - /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron - /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef - /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef - /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef - /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -612 792 false pdfSetup -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -117.435 701.916 Td -/F116_0 24.7902 Tf -(bzip2) 63.3638 Tj --278 TJm -(and) 44.077 Tj --278 TJm -(libbzip2,) 99.1856 Tj --278 TJm -(ver) 37.2101 Tj -15 TJm -(sion) 50.9687 Tj --278 TJm -(1.0.6) 55.1334 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -90.493 661.631 Td -/F116_0 20.6585 Tf -(A) 14.9154 Tj --278 TJm -(pr) 20.6585 Tj -20 TJm -(ogram) 63.1324 Tj --278 TJm -(and) 36.7308 Tj --278 TJm -(librar) 51.6669 Tj --10 TJm -(y) 11.4861 Tj --278 TJm -(f) 6.8793 Tj -20 TJm -(or) 20.6585 Tj --278 TJm -(data) 42.4739 Tj --278 TJm -(compression) 128.5785 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -207.676 503.285 Td -/F116_0 11.9552 Tf -(J) 6.6471 Tj -20 TJm -(ulian) 27.9034 Tj --278 TJm -(Se) 14.6212 Tj -15 TJm -(war) 20.5988 Tj -20 TJm -(d,) 10.6282 Tj --278 TJm -(http://www) 61.103 Tj -40 TJm -(.bzip.or) 42.5127 Tj -15 TJm -(g) 7.3046 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 2 2 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 709.534 Td -/F116_0 14.3462 Tf -(bzip2) 36.6689 Tj --489 TJm -(and) 25.5075 Tj --488 TJm -(libbzip2,) 57.3991 Tj --542 TJm -(ver) 21.5336 Tj -15 TJm -(sion) 29.4958 Tj --488 TJm -(1.0.6:) 36.6832 Tj --766 TJm -(A) 10.358 Tj --488 TJm -(pr) 14.3462 Tj -20 TJm -(ogram) 43.842 Tj --489 TJm -(and) 25.5075 Tj --489 TJm -(librar) 35.8798 Tj --10 TJm -(y) 7.9765 Tj --488 TJm -(f) 4.7773 Tj -20 TJm -(or) 14.3462 Tj --489 TJm -(data) 29.4958 Tj -72 692.319 Td -(compression) 89.2907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 680.364 Td -/F122_0 9.9626 Tf -(by) 9.9626 Tj --250 TJm -(Julian) 23.8007 Tj --250 TJm -(Se) 9.9626 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(ard) 12.7222 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 663.427 Td -(V) 7.193 Tj -111 TJm -(ersion) 24.3486 Tj --250 TJm -(1.0.6) 19.9252 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(6) 4.9813 Tj --250 TJm -(September) 42.61 Tj --250 TJm -(2010) 19.9252 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 651.472 Td -(Cop) 16.6077 Tj -10 TJm -(yright) 23.8007 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --250 TJm -(\251) 7.5716 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --250 TJm -(1996-2010) 43.1679 Tj --250 TJm -(Julian) 23.8007 Tj --250 TJm -(Se) 9.9626 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(ard) 12.7222 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 633.938 Td -/F122_0 7.9701 Tf -(This) 14.1708 Tj --250 TJm -(program,) 28.9952 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -119.151 633.938 Td -/F124_0 7.9701 Tf -(bzip2) 23.9103 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -143.061 633.938 Td -/F122_0 7.9701 Tf -(,) 1.9925 Tj --250 TJm -(the) 9.7395 Tj --250 TJm -(associated) 32.7571 Tj --250 TJm -(library) 21.2483 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -216.768 633.938 Td -/F124_0 7.9701 Tf -(libbzip2) 38.2565 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -255.025 633.938 Td -/F122_0 7.9701 Tf -(,) 1.9925 Tj --250 TJm -(and) 11.5088 Tj --250 TJm -(all) 7.9701 Tj --250 TJm -(documentation,) 49.3668 Tj --250 TJm -(are) 9.7315 Tj --250 TJm -(cop) 11.5088 Tj -10 TJm -(yright) 19.0406 Tj --250 TJm -(\251) 6.0573 Tj --250 TJm -(1996-2010) 34.5344 Tj --250 TJm -(Julian) 19.0406 Tj --250 TJm -(Se) 7.9701 Tj -25 TJm -(w) 5.7544 Tj -10 TJm -(ard.) 12.1703 Tj --310 TJm -(All) 10.1858 Tj --250 TJm -(rights) 18.1559 Tj --250 TJm -(reserv) 19.471 Tj -15 TJm -(ed.) 9.5163 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 616.404 Td -(Redistrib) 29.2264 Tj -20 TJm -(ution) 16.3865 Tj --250 TJm -(and) 11.5088 Tj --250 TJm -(use) 10.6241 Tj --250 TJm -(in) 6.2007 Tj --250 TJm -(source) 20.802 Tj --250 TJm -(and) 11.5088 Tj --250 TJm -(binary) 20.3636 Tj --250 TJm -(forms,) 20.5868 Tj --250 TJm -(with) 14.1708 Tj --250 TJm -(or) 6.6391 Tj --250 TJm -(without) 24.3566 Tj --250 TJm -(modi\002cation,) 42.2894 Tj --250 TJm -(are) 9.7315 Tj --250 TJm -(permitted) 30.5494 Tj --250 TJm -(pro) 10.6241 Tj -15 TJm -(vided) 17.7096 Tj --250 TJm -(that) 11.9552 Tj --250 TJm -(the) 9.7395 Tj --250 TJm -(follo) 15.0555 Tj -25 TJm -(wing) 15.9402 Tj --250 TJm -(conditions) 33.2114 Tj --250 TJm -(are) 9.7315 Tj --250 TJm -(met:) 14.1708 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -73.993 590.899 Td -(\225) 2.7895 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(Redistrib) 29.2264 Tj -20 TJm -(utions) 19.4869 Tj --250 TJm -(of) 6.6391 Tj --250 TJm -(source) 20.802 Tj --250 TJm -(code) 15.0475 Tj --250 TJm -(must) 15.5018 Tj --250 TJm -(retain) 18.1479 Tj --250 TJm -(the) 9.7395 Tj --250 TJm -(abo) 11.5088 Tj -15 TJm -(v) 3.9851 Tj -15 TJm -(e) 3.5387 Tj --250 TJm -(cop) 11.5088 Tj -10 TJm -(yright) 19.0406 Tj --250 TJm -(notice,) 21.4714 Tj --250 TJm -(this) 11.5168 Tj --250 TJm -(list) 9.7474 Tj --250 TJm -(of) 6.6391 Tj --250 TJm -(conditions) 33.2114 Tj --250 TJm -(and) 11.5088 Tj --250 TJm -(the) 9.7395 Tj --250 TJm -(follo) 15.0555 Tj -25 TJm -(wing) 15.9402 Tj --250 TJm -(disclaimer) 33.2034 Tj -55 TJm -(.) 1.9925 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -73.993 573.365 Td -(\225) 2.7895 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(The) 12.3935 Tj --285 TJm -(origin) 19.0406 Tj --284 TJm -(of) 6.6391 Tj --285 TJm -(this) 11.5168 Tj --285 TJm -(softw) 17.7096 Tj -10 TJm -(are) 9.7315 Tj --284 TJm -(must) 15.5018 Tj --285 TJm -(not) 10.1858 Tj --285 TJm -(be) 7.5238 Tj --285 TJm -(misrepresente) 44.2659 Tj -1 TJm -(d;) 6.2007 Tj --303 TJm -(you) 11.9552 Tj --284 TJm -(must) 15.5018 Tj --285 TJm -(not) 10.1858 Tj --285 TJm -(claim) 17.7096 Tj --284 TJm -(that) 11.9552 Tj --285 TJm -(you) 11.9552 Tj --285 TJm -(wrote) 18.1479 Tj --284 TJm -(the) 9.7395 Tj --285 TJm -(original) 24.795 Tj --285 TJm -(softw) 17.7096 Tj -10 TJm -(are.) 11.724 Tj --828 TJm -(If) 5.3081 Tj --285 TJm -(you) 11.9552 Tj --285 TJm -(use) 10.6241 Tj --284 TJm -(this) 11.5168 Tj --285 TJm -(softw) 17.7096 Tj -10 TJm -(are) 9.7315 Tj --285 TJm -(in) 6.2007 Tj --284 TJm -(a) 3.5387 Tj -79.97 563.801 Td -(product,) 26.3412 Tj --250 TJm -(an) 7.5238 Tj --250 TJm -(ackno) 19.0326 Tj -25 TJm -(wledgment) 35.4191 Tj --250 TJm -(in) 6.2007 Tj --250 TJm -(the) 9.7395 Tj --250 TJm -(product) 24.3487 Tj --250 TJm -(documentation) 47.3743 Tj --250 TJm -(w) 5.7544 Tj -10 TJm -(ould) 14.1708 Tj --250 TJm -(be) 7.5238 Tj --250 TJm -(appreciated) 36.7342 Tj --250 TJm -(b) 3.9851 Tj -20 TJm -(ut) 6.2007 Tj --250 TJm -(is) 5.3161 Tj --250 TJm -(not) 10.1858 Tj --250 TJm -(required.) 28.5489 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -73.993 546.267 Td -(\225) 2.7895 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(Altered) 23.9023 Tj --250 TJm -(source) 20.802 Tj --250 TJm -(v) 3.9851 Tj -15 TJm -(ersions) 22.5793 Tj --250 TJm -(must) 15.5018 Tj --250 TJm -(be) 7.5238 Tj --250 TJm -(plainly) 22.1409 Tj --250 TJm -(mark) 16.3786 Tj -10 TJm -(ed) 7.5238 Tj --250 TJm -(as) 6.6391 Tj --250 TJm -(such,) 16.6017 Tj --250 TJm -(and) 11.5088 Tj --250 TJm -(must) 15.5018 Tj --250 TJm -(not) 10.1858 Tj --250 TJm -(be) 7.5238 Tj --250 TJm -(misrepresented) 48.251 Tj --250 TJm -(as) 6.6391 Tj --250 TJm -(being) 17.7096 Tj --250 TJm -(the) 9.7395 Tj --250 TJm -(original) 24.795 Tj --250 TJm -(softw) 17.7096 Tj -10 TJm -(are.) 11.724 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -73.993 528.733 Td -(\225) 2.7895 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(The) 12.3935 Tj --250 TJm -(name) 17.2632 Tj --250 TJm -(of) 6.6391 Tj --250 TJm -(the) 9.7395 Tj --250 TJm -(author) 20.3636 Tj --250 TJm -(may) 13.7245 Tj --250 TJm -(not) 10.1858 Tj --250 TJm -(be) 7.5238 Tj --250 TJm -(used) 14.6092 Tj --250 TJm -(to) 6.2007 Tj --250 TJm -(endorse) 24.787 Tj --250 TJm -(or) 6.6391 Tj --250 TJm -(promote) 26.5643 Tj --250 TJm -(products) 27.449 Tj --250 TJm -(deri) 12.3935 Tj -25 TJm -(v) 3.9851 Tj -15 TJm -(ed) 7.5238 Tj --250 TJm -(from) 15.4939 Tj --250 TJm -(this) 11.5168 Tj --250 TJm -(softw) 17.7096 Tj -10 TJm -(are) 9.7315 Tj --250 TJm -(without) 24.3566 Tj --250 TJm -(speci\002c) 24.3487 Tj --250 TJm -(prior) 15.4939 Tj --250 TJm -(written) 22.5793 Tj --250 TJm -(permission.) 36.9733 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 511.198 Td -(THIS) 17.7096 Tj --401 TJm -(SOFTW) 27.0107 Tj -120 TJm -(ARE) 15.9402 Tj --401 TJm -(IS) 7.0854 Tj --400 TJm -(PR) 9.7474 Tj -40 TJm -(O) 5.7544 Tj -50 TJm -(VIDED) 24.787 Tj --401 TJm -(BY) 11.0705 Tj --401 TJm -(THE) 15.4939 Tj --401 TJm -(A) 5.7544 Tj -55 TJm -(UTHOR) 27.449 Tj --401 TJm -("AS) 13.4376 Tj --401 TJm -(IS") 10.3372 Tj --401 TJm -(AND) 17.2632 Tj --400 TJm -(ANY) 17.2632 Tj --401 TJm -(EXPRESS) 34.1041 Tj --401 TJm -(OR) 11.0705 Tj --401 TJm -(IMPLIED) 32.3188 Tj --401 TJm -(W) 7.5238 Tj -120 TJm -(ARRANTIES,) 46.7128 Tj --401 TJm -(INCLUDING,) 46.2585 Tj --401 TJm -(B) 5.3161 Tj -11 TJm -(UT) 10.6241 Tj -72 501.634 Td -(NO) 11.5088 Tj -40 TJm -(T) 4.8697 Tj --304 TJm -(LIMITED) 32.7571 Tj --304 TJm -(T) 4.8697 Tj -18 TJm -(O,) 7.7469 Tj --305 TJm -(THE) 15.4939 Tj --304 TJm -(IMPLIED) 32.3188 Tj --304 TJm -(W) 7.5238 Tj -120 TJm -(ARRANTIES) 44.7202 Tj --304 TJm -(OF) 10.1858 Tj --304 TJm -(MERCHANT) 44.7202 Tj -93 TJm -(ABILITY) 31.8724 Tj --304 TJm -(AND) 17.2632 Tj --305 TJm -(FITNESS) 31.442 Tj --304 TJm -(FOR) 15.5018 Tj --304 TJm -(A) 5.7544 Tj --304 TJm -(P) 4.4314 Tj -92 TJm -(AR) 11.0705 Tj -60 TJm -(TICULAR) 34.5344 Tj --304 TJm -(PURPOSE) 34.9887 Tj --304 TJm -(ARE) 15.9402 Tj --305 TJm -(DIS) 12.8398 Tj -1 TJm -(-) 2.654 Tj -72 492.07 Td -(CLAIMED.) 38.2963 Tj --576 TJm -(IN) 8.4085 Tj --287 TJm -(NO) 11.5088 Tj --288 TJm -(EVENT) 26.118 Tj --288 TJm -(SHALL) 25.6797 Tj --288 TJm -(THE) 15.4939 Tj --287 TJm -(A) 5.7544 Tj -55 TJm -(UTHOR) 27.449 Tj --288 TJm -(BE) 10.1858 Tj --288 TJm -(LIABLE) 28.3337 Tj --288 TJm -(FOR) 15.5018 Tj --288 TJm -(ANY) 17.2632 Tj --287 TJm -(DIRECT) 28.78 Tj -74 TJm -(,) 1.9925 Tj --288 TJm -(INDIRECT) 37.1885 Tj -74 TJm -(,) 1.9925 Tj --288 TJm -(INCIDENT) 37.6268 Tj -93 TJm -(AL,) 12.6167 Tj --288 TJm -(SPECIAL,) 34.3193 Tj --288 TJm -(EXEMPLAR) 42.9509 Tj -65 TJm -(Y) 5.7544 Tj -129 TJm -(,) 1.9925 Tj -72 482.506 Td -(OR) 11.0705 Tj --299 TJm -(CONSEQ) 31.8804 Tj -10 TJm -(UENTIAL) 34.5265 Tj --300 TJm -(D) 5.7544 Tj -40 TJm -(AMA) 18.5942 Tj -40 TJm -(GES) 15.0555 Tj --299 TJm -(\(INCLUDING,) 48.9125 Tj --299 TJm -(B) 5.3161 Tj -10 TJm -(UT) 10.6241 Tj --299 TJm -(NO) 11.5088 Tj -40 TJm -(T) 4.8697 Tj --300 TJm -(LIMITED) 32.7571 Tj --299 TJm -(T) 4.8697 Tj -18 TJm -(O,) 7.7469 Tj --299 TJm -(PR) 9.7474 Tj -40 TJm -(OCUREMENT) 49.59 Tj --299 TJm -(OF) 10.1858 Tj --300 TJm -(SUBSTITUTE) 47.8206 Tj --299 TJm -(GOODS) 27.449 Tj --299 TJm -(OR) 11.0705 Tj --300 TJm -(SER) 14.6172 Tj -80 TJm -(VICES) 23.0256 Tj -1 TJm -(;) 2.2157 Tj -72 472.942 Td -(LOSS) 19.4869 Tj --360 TJm -(OF) 10.1858 Tj --360 TJm -(USE,) 17.048 Tj --360 TJm -(D) 5.7544 Tj -40 TJm -(A) 5.7544 Tj -111 TJm -(T) 4.8697 Tj -93 TJm -(A,) 7.7469 Tj --360 TJm -(OR) 11.0705 Tj --359 TJm -(PR) 9.7474 Tj -40 TJm -(OFITS;) 24.3566 Tj --360 TJm -(OR) 11.0705 Tj --360 TJm -(B) 5.3161 Tj -10 TJm -(USINESS) 32.3267 Tj --360 TJm -(INTERR) 28.78 Tj -40 TJm -(UPTION\)) 31.8724 Tj --360 TJm -(HO) 11.5088 Tj -35 TJm -(WEVER) 28.3337 Tj --360 TJm -(CA) 11.0705 Tj -55 TJm -(USED) 20.8099 Tj --359 TJm -(AND) 17.2632 Tj --360 TJm -(ON) 11.5088 Tj --360 TJm -(ANY) 17.2632 Tj --360 TJm -(THEOR) 26.5643 Tj -65 TJm -(Y) 5.7544 Tj --360 TJm -(OF) 10.1858 Tj --360 TJm -(LIABI) 21.2483 Tj -1 TJm -(LITY) 18.1479 Tj -128 TJm -(,) 1.9925 Tj -72 463.378 Td -(WHETHER) 38.9578 Tj --247 TJm -(IN) 8.4085 Tj --247 TJm -(CONTRA) 32.7651 Tj -40 TJm -(CT) 10.1858 Tj -74 TJm -(,) 1.9925 Tj --247 TJm -(STRICT) 27.457 Tj --247 TJm -(LIABILITY) 39.3962 Tj -129 TJm -(,) 1.9925 Tj --247 TJm -(O) 5.7544 Tj -1 TJm -(R) 5.3161 Tj --247 TJm -(T) 4.8697 Tj -18 TJm -(OR) 11.0705 Tj -60 TJm -(T) 4.8697 Tj --247 TJm -(\(INCLUDING) 46.92 Tj --247 TJm -(NEGLIGENCE) 50.4667 Tj --247 TJm -(OR) 11.0705 Tj --247 TJm -(O) 5.7544 Tj -40 TJm -(THER) 20.8099 Tj -55 TJm -(WISE\)) 22.133 Tj --247 TJm -(ARISING) 32.3188 Tj --247 TJm -(IN) 8.4085 Tj --247 TJm -(ANY) 17.2632 Tj --247 TJm -(W) 7.5238 Tj -120 TJm -(A) 5.7544 Tj -105 TJm -(Y) 5.7544 Tj --247 TJm -(OUT) 16.3786 Tj -72 453.814 Td -(OF) 10.1858 Tj --250 TJm -(THE) 15.4939 Tj --250 TJm -(USE) 15.0555 Tj --250 TJm -(OF) 10.1858 Tj --250 TJm -(THIS) 17.7096 Tj --250 TJm -(SOFTW) 27.0107 Tj -120 TJm -(ARE,) 17.9327 Tj --250 TJm -(EVEN) 21.2483 Tj --250 TJm -(IF) 7.0854 Tj --250 TJm -(AD) 11.5088 Tj -40 TJm -(VISED) 23.464 Tj --250 TJm -(OF) 10.1858 Tj --250 TJm -(THE) 15.4939 Tj --250 TJm -(POSSIBILITY) 47.8206 Tj --250 TJm -(OF) 10.1858 Tj --250 TJm -(SUCH) 21.2563 Tj --250 TJm -(D) 5.7544 Tj -40 TJm -(AMA) 18.5942 Tj -40 TJm -(GE.) 12.6167 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 436.279 Td -(P) 4.4314 Tj -92 TJm -(A) 5.7544 Tj -111 TJm -(TENTS:) 27.0107 Tj --296 TJm -(T) 4.8697 Tj -80 TJm -(o) 3.9851 Tj --295 TJm -(the) 9.7395 Tj --296 TJm -(best) 12.8398 Tj --295 TJm -(of) 6.6391 Tj --296 TJm -(my) 10.1858 Tj --295 TJm -(kno) 11.9552 Tj -25 TJm -(wledge,) 25.0102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -208.544 436.279 Td -/F124_0 7.9701 Tf -(bzip2) 23.9103 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -234.81 436.279 Td -/F122_0 7.9701 Tf -(and) 11.5088 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -248.674 436.279 Td -/F124_0 7.9701 Tf -(libbzip2) 38.2565 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -289.286 436.279 Td -/F122_0 7.9701 Tf -(do) 7.9701 Tj --296 TJm -(not) 10.1858 Tj --295 TJm -(use) 10.6241 Tj --296 TJm -(an) 7.5238 Tj -15 TJm -(y) 3.9851 Tj --295 TJm -(patented) 27.0027 Tj --296 TJm -(algorithms.) 36.0886 Tj --893 TJm -(Ho) 9.7395 Tj -25 TJm -(we) 9.2931 Tj -25 TJm -(v) 3.9851 Tj -15 TJm -(er) 6.1928 Tj -40 TJm -(,) 1.9925 Tj --307 TJm -(I) 2.654 Tj --295 TJm -(do) 7.9701 Tj --296 TJm -(not) 10.1858 Tj --295 TJm -(ha) 7.5238 Tj -20 TJm -(v) 3.9851 Tj -15 TJm -(e) 3.5387 Tj --296 TJm -(the) 9.7395 Tj --295 TJm -(resources) 30.0951 Tj --296 TJm -(to) 6.2007 Tj -72 426.715 Td -(carry) 16.3706 Tj --250 TJm -(out) 10.1858 Tj --250 TJm -(a) 3.5387 Tj --250 TJm -(patent) 19.4789 Tj --250 TJm -(search.) 22.3482 Tj --620 TJm -(Therefore) 31.4181 Tj --250 TJm -(I) 2.654 Tj --250 TJm -(cannot) 21.2483 Tj --250 TJm -(gi) 6.2007 Tj -25 TJm -(v) 3.9851 Tj -15 TJm -(e) 3.5387 Tj --250 TJm -(an) 7.5238 Tj -15 TJm -(y) 3.9851 Tj --250 TJm -(guarantee) 30.9798 Tj --250 TJm -(of) 6.6391 Tj --250 TJm -(the) 9.7395 Tj --250 TJm -(abo) 11.5088 Tj -15 TJm -(v) 3.9851 Tj -15 TJm -(e) 3.5387 Tj --250 TJm -(statement.) 32.5419 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 3 3 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 707.441 Td -/F116_0 17.2154 Tf -(T) 10.5186 Tj -80 TJm -(ab) 20.0904 Tj -10 TJm -(le) 14.3576 Tj --278 TJm -(of) 16.2513 Tj --278 TJm -(Contents) 74.5943 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 686.878 Td -/F122_0 9.9626 Tf -(1.) 7.472 Tj --310 TJm -(Introduction) 49.2551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -145.733 686.878 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 686.878 Td -/F122_0 9.9626 Tf -(1) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 674.923 Td -(2.) 7.472 Tj --310 TJm -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -167.054 674.923 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 674.923 Td -/F122_0 9.9626 Tf -(2) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 662.968 Td -(2.1.) 14.9439 Tj --310 TJm -(N) 7.193 Tj -35 TJm -(AME) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -132.691 662.968 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 662.968 Td -/F122_0 9.9626 Tf -(2) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 651.013 Td -(2.2.) 14.9439 Tj --310 TJm -(SYNOPSIS) 47.0534 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -150.582 651.013 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 651.013 Td -/F122_0 9.9626 Tf -(2) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 639.058 Td -(2.3.) 14.9439 Tj --310 TJm -(DESCRIPTION) 64.7569 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -168.29 639.058 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 639.058 Td -/F122_0 9.9626 Tf -(3) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 627.103 Td -(2.4.) 14.9439 Tj --310 TJm -(OPTIONS) 42.0621 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -145.873 627.103 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 627.103 Td -/F122_0 9.9626 Tf -(4) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 615.147 Td -(2.5.) 14.9439 Tj --310 TJm -(MEMOR) 37.6387 Tj -65 TJm -(Y) 7.193 Tj --250 TJm -(MAN) 23.2427 Tj -35 TJm -(A) 7.193 Tj -40 TJm -(GEMENT) 41.5042 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -221.412 615.147 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 615.147 Td -/F122_0 9.9626 Tf -(5) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 603.192 Td -(2.6.) 14.9439 Tj --310 TJm -(RECO) 26.5703 Tj -50 TJm -(VERING) 37.6287 Tj --250 TJm -(D) 7.193 Tj -40 TJm -(A) 7.193 Tj -111 TJm -(T) 6.0871 Tj -93 TJm -(A) 7.193 Tj --250 TJm -(FR) 12.1843 Tj -40 TJm -(OM) 16.0497 Tj --250 TJm -(D) 7.193 Tj -40 TJm -(AMA) 23.2427 Tj -40 TJm -(GED) 20.4731 Tj --250 TJm -(FILES) 26.5703 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -308.464 603.192 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 603.192 Td -/F122_0 9.9626 Tf -(6) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 591.237 Td -(2.7.) 14.9439 Tj --310 TJm -(PERFORMANCE) 73.6236 Tj --250 TJm -(NO) 14.386 Tj -40 TJm -(TES) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -211.958 591.237 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 591.237 Td -/F122_0 9.9626 Tf -(6) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 579.282 Td -(2.8.) 14.9439 Tj --310 TJm -(CA) 13.8381 Tj -135 TJm -(VEA) 20.4731 Tj -111 TJm -(TS) 11.6264 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -148.799 579.282 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 579.282 Td -/F122_0 9.9626 Tf -(7) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 567.327 Td -(2.9.) 14.9439 Tj --310 TJm -(A) 7.193 Tj -55 TJm -(UTHOR) 34.3112 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -145.32 567.327 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 567.327 Td -/F122_0 9.9626 Tf -(7) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 555.372 Td -(3.) 7.472 Tj --310 TJm -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -160.049 555.372 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -224.856 555.372 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 555.372 Td -/F122_0 9.9626 Tf -(8) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 543.416 Td -(3.1.) 14.9439 Tj --310 TJm -(T) 6.0871 Tj -80 TJm -(op-le) 20.4731 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(structure) 34.8591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -179.997 543.416 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 543.416 Td -/F122_0 9.9626 Tf -(8) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 531.461 Td -(3.1.1.) 22.4159 Tj --310 TJm -(Lo) 11.0684 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(summary) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -192.866 531.461 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 531.461 Td -/F122_0 9.9626 Tf -(9) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 519.506 Td -(3.1.2.) 22.4159 Tj --310 TJm -(High-le) 30.4357 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(summary) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -193.822 519.506 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 519.506 Td -/F122_0 9.9626 Tf -(9) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 507.551 Td -(3.1.3.) 22.4159 Tj --310 TJm -(Utility) 26.0223 Tj --250 TJm -(functions) 37.0808 Tj --250 TJm -(summary) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -216.582 507.551 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 507.551 Td -/F122_0 9.9626 Tf -(9) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 495.596 Td -(3.2.) 14.9439 Tj --310 TJm -(Error) 21.0211 Tj --250 TJm -(handling) 34.8691 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -162.611 495.596 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 495.596 Td -/F122_0 9.9626 Tf -(10) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 483.64 Td -(3.3.) 14.9439 Tj --310 TJm -(Lo) 11.0684 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -181.045 483.64 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 483.64 Td -/F122_0 9.9626 Tf -(11) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 471.685 Td -(3.3.1.) 22.4159 Tj --310 TJm -(BZ2_bzCompressInit) 85.7879 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -197.762 471.685 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 471.685 Td -/F122_0 9.9626 Tf -(11) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 459.73 Td -(3.3.2.) 22.4159 Tj --310 TJm -(BZ2_bzCompress) 71.9499 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -184.201 459.73 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 459.73 Td -/F122_0 9.9626 Tf -(13) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 447.775 Td -(3.3.3.) 22.4159 Tj --310 TJm -(BZ2_bzCompressEnd) 87.9996 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -198.868 447.775 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 447.775 Td -/F122_0 9.9626 Tf -(16) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 435.82 Td -(3.3.4.) 22.4159 Tj --310 TJm -(BZ2_bzDecompressInit) 95.1827 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -206.887 435.82 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 435.82 Td -/F122_0 9.9626 Tf -(16) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 423.865 Td -(3.3.5.) 22.4159 Tj --310 TJm -(BZ2_bzDecompress) 81.3446 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -193.326 423.865 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 423.865 Td -/F122_0 9.9626 Tf -(17) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 411.909 Td -(3.3.6.) 22.4159 Tj --310 TJm -(BZ2_bzDecompressEnd) 97.3944 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.207 411.909 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 411.909 Td -/F122_0 9.9626 Tf -(18) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 399.954 Td -(3.4.) 14.9439 Tj --310 TJm -(High-le) 30.4357 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -184.216 399.954 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 399.954 Td -/F122_0 9.9626 Tf -(18) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 387.999 Td -(3.4.1.) 22.4159 Tj --310 TJm -(BZ2_bzReadOpen) 74.1516 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -185.302 387.999 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 387.999 Td -/F122_0 9.9626 Tf -(19) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 376.044 Td -(3.4.2.) 22.4159 Tj --310 TJm -(BZ2_bzRead) 52.5726 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -163.443 376.044 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 376.044 Td -/F122_0 9.9626 Tf -(20) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 364.089 Td -(3.4.3.) 22.4159 Tj --310 TJm -(BZ2_bzReadGetUnused) 97.3944 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.207 364.089 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 364.089 Td -/F122_0 9.9626 Tf -(21) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 352.134 Td -(3.4.4.) 22.4159 Tj --310 TJm -(BZ2_bzReadClose) 75.2674 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.074 352.134 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 352.134 Td -/F122_0 9.9626 Tf -(22) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 340.178 Td -(3.4.5.) 22.4159 Tj --310 TJm -(BZ2_bzWriteOpen) 76.3633 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.622 340.178 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 340.178 Td -/F122_0 9.9626 Tf -(22) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 328.223 Td -(3.4.6.) 22.4159 Tj --310 TJm -(BZ2_bzWrite) 54.7843 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -166.763 328.223 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 328.223 Td -/F122_0 9.9626 Tf -(23) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 316.268 Td -(3.4.7.) 22.4159 Tj --310 TJm -(BZ2_bzWriteClose) 77.4791 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -189.179 316.268 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 316.268 Td -/F122_0 9.9626 Tf -(23) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 304.313 Td -(3.4.8.) 22.4159 Tj --310 TJm -(Handling) 37.0808 Tj --250 TJm -(embedded) 40.9463 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(streams) 30.4357 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -294.601 304.313 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 304.313 Td -/F122_0 9.9626 Tf -(24) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 292.358 Td -(3.4.9.) 22.4159 Tj --310 TJm -(Standard) 35.417 Tj --250 TJm -(\002le-reading/writing) 77.4791 Tj --250 TJm -(code) 18.8094 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -247.564 292.358 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 292.358 Td -/F122_0 9.9626 Tf -(25) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 280.403 Td -(3.5.) 14.9439 Tj --310 TJm -(Utility) 26.0223 Tj --250 TJm -(functions) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -170.645 280.403 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 280.403 Td -/F122_0 9.9626 Tf -(26) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 268.447 Td -(3.5.1.) 22.4159 Tj --310 TJm -(BZ2_bzBuf) 47.0434 Tj -25 TJm -(fT) 9.4047 Tj -80 TJm -(oBuf) 19.9252 Tj -25 TJm -(fCompress) 43.1679 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -229.488 268.447 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 268.447 Td -/F122_0 9.9626 Tf -(26) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 256.492 Td -(3.5.2.) 22.4159 Tj --310 TJm -(BZ2_bzBuf) 47.0434 Tj -25 TJm -(fT) 9.4047 Tj -80 TJm -(oBuf) 19.9252 Tj -25 TJm -(fDecompress) 52.5627 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -238.613 256.492 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 256.492 Td -/F122_0 9.9626 Tf -(27) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 244.537 Td -(3.6.) 14.9439 Tj --310 TJm -(zlib) 14.9439 Tj --250 TJm -(compatibility) 53.1405 Tj --250 TJm -(functions) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -215.06 244.537 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 244.537 Td -/F122_0 9.9626 Tf -(28) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 232.582 Td -(3.7.) 14.9439 Tj --310 TJm -(Using) 23.8007 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(library) 26.5603 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(stdio-free) 38.1767 Tj --250 TJm -(en) 9.4047 Tj -40 TJm -(vironment) 40.9562 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -282.092 232.582 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 232.582 Td -/F122_0 9.9626 Tf -(28) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 220.627 Td -(3.7.1.) 22.4159 Tj --310 TJm -(Getting) 29.8878 Tj --250 TJm -(rid) 11.0684 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(stdio) 19.3773 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.492 220.627 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 220.627 Td -/F122_0 9.9626 Tf -(29) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 208.671 Td -(3.7.2.) 22.4159 Tj --310 TJm -(Critical) 29.8878 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(handling) 34.8691 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -201.629 208.671 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 208.671 Td -/F122_0 9.9626 Tf -(29) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 196.716 Td -(3.8.) 14.9439 Tj --310 TJm -(Making) 30.9936 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(W) 9.4047 Tj -40 TJm -(indo) 17.7135 Tj -25 TJm -(ws) 11.0684 Tj --250 TJm -(DLL) 19.3673 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -203.243 196.716 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 196.716 Td -/F122_0 9.9626 Tf -(29) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 184.761 Td -(4.) 7.472 Tj --310 TJm -(Miscellanea) 48.1393 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -144.898 184.761 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 184.761 Td -/F122_0 9.9626 Tf -(31) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 172.806 Td -(4.1.) 14.9439 Tj --310 TJm -(Limitations) 45.9475 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(format) 26.5603 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -269.154 172.806 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 172.806 Td -/F122_0 9.9626 Tf -(31) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 160.851 Td -(4.2.) 14.9439 Tj --310 TJm -(Portability) 42.0721 Tj --250 TJm -(issues) 23.8007 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -172.03 160.851 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 160.851 Td -/F122_0 9.9626 Tf -(32) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 148.896 Td -(4.3.) 14.9439 Tj --310 TJm -(Reporting) 39.8504 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ugs) 13.8381 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -166.115 148.896 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 148.896 Td -/F122_0 9.9626 Tf -(32) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 136.94 Td -(4.4.) 14.9439 Tj --310 TJm -(Did) 14.9439 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(get) 12.1743 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(right) 18.8194 Tj --250 TJm -(package?) 37.0609 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -229.109 136.94 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 136.94 Td -/F122_0 9.9626 Tf -(33) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 124.985 Td -(4.5.) 14.9439 Tj --310 TJm -(Further) 29.3299 Tj --250 TJm -(Reading) 33.2053 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -170.361 124.985 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 124.985 Td -/F122_0 9.9626 Tf -(34) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -536.068 50.852 Td -(iii) 8.3088 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 1 4 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 701.916 Td -/F116_0 24.7902 Tf -(1.) 20.675 Tj --278 TJm -(Intr) 39.937 Tj -20 TJm -(oduction) 104.6642 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 679.998 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.507 679.998 Td -/F122_0 9.9626 Tf -(compresses) 45.9276 Tj --263 TJm -(\002les) 16.6077 Tj --263 TJm -(using) 21.589 Tj --263 TJm -(the) 12.1743 Tj --262 TJm -(Burro) 23.2427 Tj -25 TJm -(ws-Wheeler) 48.1293 Tj --263 TJm -(block-sorting) 53.1305 Tj --263 TJm -(te) 7.193 Tj -15 TJm -(xt) 7.7509 Tj --263 TJm -(compression) 50.3609 Tj --263 TJm -(algorithm,) 41.2352 Tj --266 TJm -(and) 14.386 Tj --263 TJm -(Huf) 15.4918 Tj -25 TJm -(fman) 20.4731 Tj --263 TJm -(coding.) 29.6088 Tj -72 668.043 Td -(Compression) 52.5826 Tj --203 TJm -(is) 6.6451 Tj --204 TJm -(generally) 37.0708 Tj --203 TJm -(considerably) 50.9089 Tj --203 TJm -(better) 22.6848 Tj --204 TJm -(t) 2.7696 Tj -1 TJm -(han) 14.386 Tj --204 TJm -(that) 14.9439 Tj --203 TJm -(achie) 21.0211 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ed) 9.4047 Tj --203 TJm -(by) 9.9626 Tj --204 TJm -(more) 20.4731 Tj --203 TJm -(con) 14.386 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(entional) 32.0995 Tj --203 TJm -(LZ77/LZ78-based) 73.0458 Tj --204 TJm -(compressors,) 52.2937 Tj -72 656.087 Td -(and) 14.386 Tj --250 TJm -(approaches) 44.8118 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(performance) 50.341 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(PPM) 19.9352 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(amily) 22.6948 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(statistical) 37.6387 Tj --250 TJm -(compressors.) 52.2937 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 634.17 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -105.074 634.17 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --320 TJm -(b) 4.9813 Tj -20 TJm -(uilt) 13.2901 Tj --319 TJm -(on) 9.9626 Tj --320 TJm -(top) 12.7322 Tj --320 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -176.712 634.17 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -224.533 634.17 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --337 TJm -(a) 4.4234 Tj --320 TJm -(\003e) 9.9626 Tj -15 TJm -(xible) 19.9252 Tj --320 TJm -(library) 26.5603 Tj --319 TJm -(for) 11.6164 Tj --320 TJm -(handling) 34.8691 Tj --320 TJm -(compressed) 47.0334 Tj --320 TJm -(data) 16.5977 Tj --319 TJm -(in) 7.7509 Tj --320 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -449.816 634.17 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -482.889 634.17 Td -/F122_0 9.9626 Tf -(format.) 29.0509 Tj --1039 TJm -(This) 17.7135 Tj -72 622.214 Td -(manual) 29.3299 Tj --316 TJm -(describes) 37.0708 Tj --316 TJm -(both) 17.7135 Tj --317 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --316 TJm -(to) 7.7509 Tj --316 TJm -(use) 13.2801 Tj --316 TJm -(the) 12.1743 Tj --316 TJm -(program) 33.7533 Tj --316 TJm -(and) 14.386 Tj --317 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --316 TJm -(to) 7.7509 Tj --316 TJm -(w) 7.193 Tj -10 TJm -(ork) 13.2801 Tj --316 TJm -(with) 17.7135 Tj --316 TJm -(the) 12.1743 Tj --317 TJm -(library) 26.5603 Tj --316 TJm -(interf) 21.579 Tj -10 TJm -(ace.) 15.7608 Tj --1017 TJm -(Most) 20.4831 Tj --316 TJm -(of) 8.2988 Tj --316 TJm -(the) 12.1743 Tj --317 TJm -(manual) 29.3299 Tj --316 TJm -(is) 6.6451 Tj -72 610.259 Td -(de) 9.4047 Tj -25 TJm -(v) 4.9813 Tj -20 TJm -(oted) 17.1556 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(program,) 36.2439 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(good) 19.9252 Tj --250 TJm -(ne) 9.4047 Tj -25 TJm -(ws) 11.0684 Tj --250 TJm -(if) 6.0871 Tj --250 TJm -(your) 18.2614 Tj --250 TJm -(interest) 29.3299 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(only) 17.7135 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(program.) 36.2439 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 578.379 Td -(\225) 3.4869 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --450 TJm -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --278 TJm -(to) 7.7509 Tj --278 TJm -(use) 13.2801 Tj --277 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --278 TJm -([2]) 11.6164 Tj -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --278 TJm -(describes) 37.0708 Tj --278 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --278 TJm -(to) 7.7509 Tj --278 TJm -(use) 13.2801 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -256.282 578.379 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -286.17 578.379 Td -/F122_0 9.9626 Tf -(;) 2.7696 Tj --292 TJm -(this) 14.396 Tj --278 TJm -(is) 6.6451 Tj --277 TJm -(the) 12.1743 Tj --278 TJm -(only) 17.7135 Tj --278 TJm -(part) 15.4918 Tj --278 TJm -(you) 14.9439 Tj --278 TJm -(need) 18.8094 Tj --278 TJm -(to) 7.7509 Tj --277 TJm -(read) 17.1456 Tj --278 TJm -(if) 6.0871 Tj --278 TJm -(you) 14.9439 Tj --278 TJm -(just) 14.396 Tj --278 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --277 TJm -(to) 7.7509 Tj --278 TJm -(kno) 14.9439 Tj -25 TJm -(w) 7.193 Tj -81.963 566.424 Td -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(operate) 29.3199 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(program.) 36.2439 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 544.506 Td -(\225) 3.4869 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --450 TJm -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(libbzip2) 32.6574 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --250 TJm -([8]) 11.6164 Tj -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --250 TJm -(describes) 37.0708 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(programming) 54.2364 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(aces) 17.1456 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(detail,) 24.6275 Tj --250 TJm -(and) 14.386 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 522.588 Td -(\225) 3.4869 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --450 TJm -(Miscellanea) 48.1393 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --250 TJm -([31]) 16.5977 Tj -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --250 TJm -(records) 29.3199 Tj --250 TJm -(some) 21.031 Tj --250 TJm -(miscellaneous) 56.4481 Tj --250 TJm -(notes) 21.031 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(I) 3.3175 Tj --250 TJm -(thought) 30.4457 Tj --250 TJm -(ought) 22.6948 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(recorded) 34.8492 Tj --250 TJm -(some) 21.031 Tj -25 TJm -(where.) 26.8293 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -539.395 50.852 Td -(1) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 2 5 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 701.916 Td -/F116_0 24.7902 Tf -(2.) 20.675 Tj --278 TJm -(Ho) 33.0453 Tj -15 TJm -(w) 19.2868 Tj --278 TJm -(to) 23.4019 Tj --278 TJm -(use) 42.7135 Tj --278 TJm -(bzip2) 63.3638 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 656.35 Td -/F116_0 17.2154 Tf -(T) 10.5186 Tj -80 TJm -(ab) 20.0904 Tj -10 TJm -(le) 14.3576 Tj --278 TJm -(of) 16.2513 Tj --278 TJm -(Contents) 74.5943 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 635.788 Td -/F122_0 9.9626 Tf -(2.1.) 14.9439 Tj --310 TJm -(N) 7.193 Tj -35 TJm -(AME) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -132.691 635.788 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 635.788 Td -/F122_0 9.9626 Tf -(2) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 623.832 Td -(2.2.) 14.9439 Tj --310 TJm -(SYNOPSIS) 47.0534 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -150.582 623.832 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 623.832 Td -/F122_0 9.9626 Tf -(2) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 611.877 Td -(2.3.) 14.9439 Tj --310 TJm -(DESCRIPTION) 64.7569 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -168.29 611.877 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 611.877 Td -/F122_0 9.9626 Tf -(3) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 599.922 Td -(2.4.) 14.9439 Tj --310 TJm -(OPTIONS) 42.0621 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -145.873 599.922 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 599.922 Td -/F122_0 9.9626 Tf -(4) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 587.967 Td -(2.5.) 14.9439 Tj --310 TJm -(MEMOR) 37.6387 Tj -65 TJm -(Y) 7.193 Tj --250 TJm -(MAN) 23.2427 Tj -35 TJm -(A) 7.193 Tj -40 TJm -(GEMENT) 41.5042 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -221.412 587.967 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 587.967 Td -/F122_0 9.9626 Tf -(5) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 576.012 Td -(2.6.) 14.9439 Tj --310 TJm -(RECO) 26.5703 Tj -50 TJm -(VERING) 37.6287 Tj --250 TJm -(D) 7.193 Tj -40 TJm -(A) 7.193 Tj -111 TJm -(T) 6.0871 Tj -93 TJm -(A) 7.193 Tj --250 TJm -(FR) 12.1843 Tj -40 TJm -(OM) 16.0497 Tj --250 TJm -(D) 7.193 Tj -40 TJm -(AMA) 23.2427 Tj -40 TJm -(GED) 20.4731 Tj --250 TJm -(FILES) 26.5703 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -308.464 576.012 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 576.012 Td -/F122_0 9.9626 Tf -(6) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 564.057 Td -(2.7.) 14.9439 Tj --310 TJm -(PERFORMANCE) 73.6236 Tj --250 TJm -(NO) 14.386 Tj -40 TJm -(TES) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -211.958 564.057 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 564.057 Td -/F122_0 9.9626 Tf -(6) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 552.101 Td -(2.8.) 14.9439 Tj --310 TJm -(CA) 13.8381 Tj -135 TJm -(VEA) 20.4731 Tj -111 TJm -(TS) 11.6264 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -148.799 552.101 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 552.101 Td -/F122_0 9.9626 Tf -(7) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 540.146 Td -(2.9.) 14.9439 Tj --310 TJm -(A) 7.193 Tj -55 TJm -(UTHOR) 34.3112 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -145.32 540.146 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 540.146 Td -/F122_0 9.9626 Tf -(7) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 508.266 Td -(This) 17.7135 Tj --250 TJm -(chapter) 29.3199 Tj --250 TJm -(contains) 33.2053 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(cop) 14.386 Tj -10 TJm -(y) 4.9813 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -213.837 508.266 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -246.215 508.266 Td -/F122_0 9.9626 Tf -(man) 17.1556 Tj --250 TJm -(page,) 21.3 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(nothing) 30.4457 Tj --250 TJm -(else.) 17.9825 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 473.513 Td -/F116_0 20.6585 Tf -(2.1.) 34.4584 Tj --278 TJm -(NAME) 60.8186 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 441.632 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 441.632 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -112.349 441.632 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -117.33 441.632 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -161.664 441.632 Td -/F122_0 9.9626 Tf -(-) 3.3175 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(block-sorting) 53.1305 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(compressor) 45.9276 Tj -40 TJm -(,) 2.4907 Tj --250 TJm -(v1.0.6) 24.9065 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 419.715 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 419.715 Td -/F124_0 9.9626 Tf -(bzcat) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -114.839 419.715 Td -/F122_0 9.9626 Tf -(-) 3.3175 Tj --250 TJm -(decompresses) 55.3323 Tj --250 TJm -(\002les) 16.6077 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(stdout) 24.3586 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 397.797 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 397.797 Td -/F124_0 9.9626 Tf -(bzip2recover) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -156.682 397.797 Td -/F122_0 9.9626 Tf -(-) 3.3175 Tj --250 TJm -(reco) 17.1456 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(ers) 11.6164 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(from) 19.3673 Tj --250 TJm -(damaged) 35.965 Tj --250 TJm -(bzip2) 22.1369 Tj --250 TJm -(\002les) 16.6077 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 353.081 Td -/F116_0 20.6585 Tf -(2.2.) 34.4584 Tj --278 TJm -(SYNOPSIS) 105.6269 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 321.201 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 321.201 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -114.839 321.201 Td -/F122_0 9.9626 Tf -([) 3.3175 Tj --250 TJm -(-cdfkqstvzVL123456789) 100.164 Tj --250 TJm -(]) 3.3175 Tj --250 TJm -([) 3.3175 Tj --250 TJm -(\002lenames) 38.1866 Tj --250 TJm -(...) 7.472 Tj --620 TJm -(]) 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 299.283 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 299.283 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -126.795 299.283 Td -/F122_0 9.9626 Tf -([) 3.3175 Tj --250 TJm -(-fkvsVL) 33.7533 Tj --250 TJm -(]) 3.3175 Tj --250 TJm -([) 3.3175 Tj --250 TJm -(\002lenames) 38.1866 Tj --250 TJm -(...) 7.472 Tj --620 TJm -(]) 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 277.365 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 277.365 Td -/F124_0 9.9626 Tf -(bzcat) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -114.839 277.365 Td -/F122_0 9.9626 Tf -([) 3.3175 Tj --250 TJm -(-s) 7.193 Tj --250 TJm -(]) 3.3175 Tj --250 TJm -([) 3.3175 Tj --250 TJm -(\002lenames) 38.1866 Tj --250 TJm -(...) 7.472 Tj --620 TJm -(]) 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 255.447 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 255.447 Td -/F124_0 9.9626 Tf -(bzip2recover) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -156.683 255.447 Td -/F122_0 9.9626 Tf -(\002lename) 34.3112 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -539.395 50.852 Td -(2) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 3 6 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -477.109 749.245 Td -/F122_0 9.9626 Tf -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 704.93 Td -/F116_0 20.6585 Tf -(2.3.) 34.4584 Tj --278 TJm -(DESCRIPTION) 141.1802 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 683.012 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.56 683.012 Td -/F122_0 9.9626 Tf -(compresses) 45.9276 Tj --268 TJm -(\002les) 16.6077 Tj --268 TJm -(using) 21.589 Tj --268 TJm -(the) 12.1743 Tj --269 TJm -(Burro) 23.2427 Tj -25 TJm -(ws-Wheeler) 48.1293 Tj --268 TJm -(block) 22.1369 Tj --268 TJm -(sorting) 27.6761 Tj --268 TJm -(te) 7.193 Tj -15 TJm -(xt) 7.7509 Tj --268 TJm -(compression) 50.3609 Tj --268 TJm -(algorithm,) 41.2352 Tj --273 TJm -(and) 14.386 Tj --268 TJm -(Huf) 15.4918 Tj -25 TJm -(fman) 20.4731 Tj --268 TJm -(coding.) 29.6088 Tj -72 671.057 Td -(Compression) 52.5826 Tj --203 TJm -(is) 6.6451 Tj --204 TJm -(generally) 37.0708 Tj --203 TJm -(considerably) 50.9089 Tj --203 TJm -(better) 22.6848 Tj --204 TJm -(t) 2.7696 Tj -1 TJm -(han) 14.386 Tj --204 TJm -(that) 14.9439 Tj --203 TJm -(achie) 21.0211 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ed) 9.4047 Tj --203 TJm -(by) 9.9626 Tj --204 TJm -(more) 20.4731 Tj --203 TJm -(con) 14.386 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(entional) 32.0995 Tj --203 TJm -(LZ77/LZ78-based) 73.0458 Tj --204 TJm -(compressors,) 52.2937 Tj -72 659.101 Td -(and) 14.386 Tj --250 TJm -(approaches) 44.8118 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(performance) 50.341 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(PPM) 19.9352 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(amily) 22.6948 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(statistical) 37.6387 Tj --250 TJm -(compressors.) 52.2937 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 637.184 Td -(The) 15.4918 Tj --250 TJm -(command-line) 57.5539 Tj --250 TJm -(options) 29.3399 Tj --250 TJm -(are) 12.1643 Tj --250 TJm -(deliberately) 47.0334 Tj --250 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj --250 TJm -(similar) 27.6761 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(those) 21.031 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(GNU) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -364.869 637.184 Td -/F124_0 9.9626 Tf -(gzip) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -388.779 637.184 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --250 TJm -(are) 12.1643 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(identical.) 36.8018 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 615.266 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -105.175 615.266 Td -/F122_0 9.9626 Tf -(e) 4.4234 Tj -15 TJm -(xpects) 25.4544 Tj --330 TJm -(a) 4.4234 Tj --330 TJm -(list) 12.1843 Tj --330 TJm -(of) 8.2988 Tj --330 TJm -(\002le) 12.7322 Tj --329 TJm -(names) 25.4544 Tj --330 TJm -(to) 7.7509 Tj --330 TJm -(accompan) 40.3884 Tj -15 TJm -(y) 4.9813 Tj --330 TJm -(the) 12.1743 Tj --330 TJm -(command-line) 57.5539 Tj --330 TJm -(\003ags.) 21.31 Tj --1099 TJm -(Each) 19.9152 Tj --330 TJm -(\002le) 12.7322 Tj --330 TJm -(is) 6.6451 Tj --330 TJm -(replaced) 33.7433 Tj --330 TJm -(by) 9.9626 Tj --330 TJm -(a) 4.4234 Tj --330 TJm -(compressed) 47.0334 Tj -72 603.311 Td -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --349 TJm -(of) 8.2988 Tj --348 TJm -(itself,) 22.4159 Tj --373 TJm -(with) 17.7135 Tj --349 TJm -(the) 12.1743 Tj --349 TJm -(name) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -204.444 603.311 Td -/F124_0 9.9626 Tf -(original_name.bz2) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -306.063 603.311 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1212 TJm -(Each) 19.9152 Tj --348 TJm -(compressed) 47.0334 Tj --349 TJm -(\002le) 12.7322 Tj --348 TJm -(has) 13.2801 Tj --349 TJm -(the) 12.1743 Tj --348 TJm -(same) 20.4731 Tj --349 TJm -(modi\002cation) 50.3709 Tj --349 TJm -(date,) 19.0883 Tj -72 591.356 Td -(permissions,) 50.092 Tj --344 TJm -(and,) 16.8766 Tj --344 TJm -(when) 21.579 Tj --325 TJm -(possible,) 35.1481 Tj --344 TJm -(o) 4.9813 Tj -25 TJm -(wnership) 36.5229 Tj --325 TJm -(as) 8.2988 Tj --325 TJm -(the) 12.1743 Tj --326 TJm -(corresponding) 56.996 Tj --325 TJm -(original,) 33.4843 Tj --344 TJm -(so) 8.8568 Tj --325 TJm -(that) 14.9439 Tj --325 TJm -(these) 20.4731 Tj --325 TJm -(properties) 39.8404 Tj --325 TJm -(can) 13.8281 Tj --326 TJm -(be) 9.4047 Tj --325 TJm -(correctly) 35.4071 Tj -72 579.4 Td -(restored) 32.0895 Tj --308 TJm -(at) 7.193 Tj --308 TJm -(decompression) 59.7656 Tj --307 TJm -(time.) 20.2042 Tj --484 TJm -(File) 15.5018 Tj --308 TJm -(name) 21.579 Tj --308 TJm -(handling) 34.8691 Tj --308 TJm -(is) 6.6451 Tj --307 TJm -(nai) 12.1743 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --308 TJm -(in) 7.7509 Tj --308 TJm -(the) 12.1743 Tj --308 TJm -(sense) 21.579 Tj --308 TJm -(that) 14.9439 Tj --308 TJm -(there) 19.9152 Tj --307 TJm -(is) 6.6451 Tj --308 TJm -(no) 9.9626 Tj --308 TJm -(mechanism) 45.3796 Tj --308 TJm -(for) 11.6164 Tj --308 TJm -(preserving) 42.0521 Tj -72 567.445 Td -(original) 30.9936 Tj --334 TJm -(\002le) 12.7322 Tj --333 TJm -(names,) 27.9451 Tj --355 TJm -(permissions,) 50.092 Tj --355 TJm -(o) 4.9813 Tj -25 TJm -(wnerships) 40.3983 Tj --333 TJm -(or) 8.2988 Tj --334 TJm -(dates) 20.4731 Tj --334 TJm -(in) 7.7509 Tj --333 TJm -(\002lesystems) 44.2838 Tj --334 TJm -(which) 24.3486 Tj --334 TJm -(lack) 16.5977 Tj --333 TJm -(these) 20.4731 Tj --334 TJm -(concepts,) 37.3498 Tj --355 TJm -(or) 8.2988 Tj --333 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --334 TJm -(serious) 28.224 Tj --334 TJm -(\002le) 12.7322 Tj -72 555.49 Td -(name) 21.579 Tj --250 TJm -(length) 24.9065 Tj --250 TJm -(restrictions,) 46.7644 Tj --250 TJm -(such) 18.2614 Tj --250 TJm -(as) 8.2988 Tj --250 TJm -(MS-DOS.) 40.1294 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 533.572 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.379 533.572 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -121.255 533.572 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -165.589 533.572 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --250 TJm -(by) 9.9626 Tj --250 TJm -(def) 12.7222 Tj -10 TJm -(ault) 14.9439 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(erwrite) 28.2141 Tj --250 TJm -(e) 4.4234 Tj -15 TJm -(xisting) 27.1282 Tj --250 TJm -(\002les.) 19.0983 Tj --620 TJm -(If) 6.6351 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(happen,) 31.2626 Tj --250 TJm -(specify) 28.772 Tj --250 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -495.977 533.572 Td -/F124_0 9.9626 Tf -(-f) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -510.423 533.572 Td -/F122_0 9.9626 Tf -(\003ag.) 17.4346 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 511.654 Td -(If) 6.6351 Tj --284 TJm -(no) 9.9626 Tj --285 TJm -(\002le) 12.7322 Tj --284 TJm -(names) 25.4544 Tj --284 TJm -(are) 12.1643 Tj --284 TJm -(speci\002ed,) 37.9077 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -193.935 511.654 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -226.655 511.654 Td -/F122_0 9.9626 Tf -(compresses) 45.9276 Tj --284 TJm -(from) 19.3673 Tj --285 TJm -(standard) 33.7533 Tj --284 TJm -(input) 20.4831 Tj --284 TJm -(to) 7.7509 Tj --284 TJm -(standard) 33.7533 Tj --285 TJm -(output.) 27.9551 Tj --825 TJm -(In) 8.2988 Tj --285 TJm -(this) 14.396 Tj --284 TJm -(case,) 19.6363 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -491.778 511.654 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -524.499 511.654 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj -72 499.699 Td -(decline) 28.772 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(write) 20.4731 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(output) 25.4644 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(terminal,) 35.696 Tj --250 TJm -(as) 8.2988 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(entirely) 30.4357 Tj --250 TJm -(incomprehensible) 70.8341 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(therefore) 35.955 Tj --250 TJm -(pointless.) 37.9177 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 477.781 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -116.176 477.781 Td -/F122_0 9.9626 Tf -(\(or) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -130.125 477.781 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj --600 TJm -(-d) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -177.946 477.781 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --234 TJm -(decompresses) 55.3323 Tj --234 TJm -(all) 9.9626 Tj --234 TJm -(speci\002ed) 35.417 Tj --235 TJm -(\002les.) 19.0983 Tj --609 TJm -(Files) 19.3773 Tj --234 TJm -(which) 24.3486 Tj --234 TJm -(were) 19.3573 Tj --234 TJm -(not) 12.7322 Tj --235 TJm -(created) 28.762 Tj --234 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -445.012 477.781 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -477.233 477.781 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --234 TJm -(be) 9.4047 Tj --234 TJm -(detected) 33.1954 Tj -72 465.826 Td -(and) 14.386 Tj --280 TJm -(i) 2.7696 Tj -1 TJm -(gnored,) 30.1568 Tj --287 TJm -(and) 14.386 Tj --280 TJm -(a) 4.4234 Tj --279 TJm -(w) 7.193 Tj -10 TJm -(arning) 25.4544 Tj --280 TJm -(issued.) 27.3972 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -216.033 465.826 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -248.705 465.826 Td -/F122_0 9.9626 Tf -(attempts) 33.7633 Tj --279 TJm -(to) 7.7509 Tj --280 TJm -(guess) 22.1369 Tj --279 TJm -(the) 12.1743 Tj --280 TJm -(\002lename) 34.3112 Tj --279 TJm -(for) 11.6164 Tj --280 TJm -(the) 12.1743 Tj --279 TJm -(decompressed) 56.4381 Tj --280 TJm -(\002le) 12.7322 Tj --279 TJm -(from) 19.3673 Tj --280 TJm -(that) 14.9439 Tj --279 TJm -(of) 8.2988 Tj --280 TJm -(the) 12.1743 Tj -72 453.871 Td -(compressed) 47.0334 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(as) 8.2988 Tj --250 TJm -(follo) 18.8194 Tj -25 TJm -(ws:) 13.8381 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 421.991 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 421.991 Td -/F124_0 9.9626 Tf -(filename.bz2) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -162.66 421.991 Td -/F122_0 9.9626 Tf -(becomes) 34.8591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -200.01 421.991 Td -/F124_0 9.9626 Tf -(filename) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 400.073 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 400.073 Td -/F124_0 9.9626 Tf -(filename.bz) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -156.682 400.073 Td -/F122_0 9.9626 Tf -(becomes) 34.8591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -194.032 400.073 Td -/F124_0 9.9626 Tf -(filename) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 378.155 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 378.155 Td -/F124_0 9.9626 Tf -(filename.tbz2) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -162.66 378.155 Td -/F122_0 9.9626 Tf -(becomes) 34.8591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -200.01 378.155 Td -/F124_0 9.9626 Tf -(filename.tar) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 356.237 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 356.237 Td -/F124_0 9.9626 Tf -(filename.tbz) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -162.66 356.237 Td -/F122_0 9.9626 Tf -(becomes) 34.8591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -200.01 356.237 Td -/F124_0 9.9626 Tf -(filename.tar) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 334.319 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 334.319 Td -/F124_0 9.9626 Tf -(anyothername) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -162.66 334.319 Td -/F122_0 9.9626 Tf -(becomes) 34.8591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -200.01 334.319 Td -/F124_0 9.9626 Tf -(anyothername.out) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 312.402 Td -/F122_0 9.9626 Tf -(If) 6.6351 Tj --342 TJm -(the) 12.1743 Tj --342 TJm -(\002le) 12.7322 Tj --342 TJm -(does) 18.2614 Tj --342 TJm -(n) 4.9813 Tj --1 TJm -(ot) 7.7509 Tj --342 TJm -(end) 14.386 Tj --342 TJm -(in) 7.7509 Tj --342 TJm -(one) 14.386 Tj --342 TJm -(of) 8.2988 Tj --342 TJm -(the) 12.1743 Tj --342 TJm -(recognised) 43.158 Tj --342 TJm -(endings,) 33.4843 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -309.305 312.402 Td -/F124_0 9.9626 Tf -(.bz2) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -333.215 312.402 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -339.344 312.402 Td -/F124_0 9.9626 Tf -(.bz) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -357.276 312.402 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -363.405 312.402 Td -/F124_0 9.9626 Tf -(.tbz2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -396.702 312.402 Td -/F122_0 9.9626 Tf -(or) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -408.409 312.402 Td -/F124_0 9.9626 Tf -(.tbz) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -432.319 312.402 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -438.448 312.402 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -471.744 312.402 Td -/F122_0 9.9626 Tf -(complains) 40.9562 Tj --342 TJm -(that) 14.9439 Tj --342 TJm -(it) 5.5392 Tj -72 300.446 Td -(cannot) 26.5603 Tj --250 TJm -(guess) 22.1369 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(name) 21.579 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(original) 30.9936 Tj --250 TJm -(\002le,) 15.2229 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(uses) 17.1556 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(original) 30.9936 Tj --250 TJm -(name) 21.579 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -370.009 300.446 Td -/F124_0 9.9626 Tf -(.out) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -396.41 300.446 Td -/F122_0 9.9626 Tf -(appended.) 40.6673 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 278.529 Td -(As) 11.0684 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(compression,) 52.8516 Tj --250 TJm -(supplying) 39.3025 Tj --250 TJm -(no) 9.9626 Tj --250 TJm -(\002lenames) 38.1866 Tj --250 TJm -(causes) 26.0024 Tj --250 TJm -(decompression) 59.7656 Tj --250 TJm -(from) 19.3673 Tj --250 TJm -(standard) 33.7533 Tj --250 TJm -(input) 20.4831 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(standard) 33.7533 Tj --250 TJm -(output.) 27.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 256.611 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -116.409 256.611 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --257 TJm -(correctly) 35.4071 Tj --258 TJm -(decompress) 47.0334 Tj --257 TJm -(a) 4.4234 Tj --258 TJm -(\002le) 12.7322 Tj --257 TJm -(which) 24.3486 Tj --258 TJm -(is) 6.6451 Tj --257 TJm -(the) 12.1743 Tj --258 TJm -(concatenation) 55.3323 Tj --257 TJm -(of) 8.2988 Tj --258 TJm -(tw) 9.9626 Tj -10 TJm -(o) 4.9813 Tj --258 TJm -(or) 8.2988 Tj --257 TJm -(more) 20.4731 Tj --258 TJm -(compressed) 47.0334 Tj --257 TJm -(\002les.) 19.0983 Tj --665 TJm -(The) 15.4918 Tj --258 TJm -(result) 22.1369 Tj --257 TJm -(is) 6.6451 Tj -72 244.656 Td -(the) 12.1743 Tj --239 TJm -(concatenation) 55.3323 Tj --238 TJm -(of) 8.2988 Tj --239 TJm -(the) 12.1743 Tj --239 TJm -(corresponding) 56.996 Tj --239 TJm -(uncompressed) 56.996 Tj --238 TJm -(\002les.) 19.0983 Tj --613 TJm -(Inte) 15.4918 Tj -15 TJm -(grity) 18.8194 Tj --238 TJm -(testing) 26.5703 Tj --239 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -382.247 244.656 Td -/F124_0 9.9626 Tf -(-t) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -394.202 244.656 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --239 TJm -(of) 8.2988 Tj --238 TJm -(concatenated) 52.0048 Tj --239 TJm -(compressed) 47.0334 Tj --239 TJm -(\002les) 16.6077 Tj --239 TJm -(is) 6.6451 Tj -72 232.7 Td -(also) 16.0497 Tj --250 TJm -(supported.) 41.7831 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 210.783 Td -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --399 TJm -(can) 13.8281 Tj --399 TJm -(also) 16.0497 Tj --399 TJm -(compress) 37.6287 Tj --400 TJm -(or) 8.2988 Tj --399 TJm -(decompress) 47.0334 Tj --399 TJm -(\002les) 16.6077 Tj --399 TJm -(to) 7.7509 Tj --399 TJm -(the) 12.1743 Tj --399 TJm -(standard) 33.7533 Tj --399 TJm -(output) 25.4644 Tj --399 TJm -(by) 9.9626 Tj --400 TJm -(gi) 7.7509 Tj -25 TJm -(ving) 17.7135 Tj --399 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -409.67 210.783 Td -/F124_0 9.9626 Tf -(-c) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -425.602 210.783 Td -/F122_0 9.9626 Tf -(\003ag.) 17.4346 Tj --757 TJm -(Multiple) 34.3212 Tj --400 TJm -(\002l) 8.3088 Tj -1 TJm -(es) 8.2988 Tj --400 TJm -(may) 17.1556 Tj --399 TJm -(be) 9.4047 Tj -72 198.827 Td -(compressed) 47.0334 Tj --367 TJm -(and) 14.386 Tj --367 TJm -(decompressed) 56.4381 Tj --367 TJm -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --367 TJm -(this.) 16.8866 Tj --1321 TJm -(The) 15.4918 Tj --367 TJm -(resulting) 34.8691 Tj --367 TJm -(outputs) 29.3399 Tj --367 TJm -(are) 12.1643 Tj --367 TJm -(fed) 12.7222 Tj --367 TJm -(sequentially) 48.1492 Tj --366 TJm -(to) 7.7509 Tj --367 TJm -(stdout.) 26.8492 Tj --1322 TJm -(Compression) 52.5826 Tj --367 TJm -(of) 8.2988 Tj -72 186.872 Td -(multiple) 33.2153 Tj --289 TJm -(\002les) 16.6077 Tj --289 TJm -(in) 7.7509 Tj --289 TJm -(this) 14.396 Tj --289 TJm -(manner) 29.8778 Tj --288 TJm -(generates) 37.6188 Tj --289 TJm -(a) 4.4234 Tj --289 TJm -(stream) 26.5603 Tj --289 TJm -(containing) 42.0621 Tj --289 TJm -(multiple) 33.2153 Tj --289 TJm -(compressed) 47.0334 Tj --289 TJm -(\002le) 12.7322 Tj --289 TJm -(representations.) 62.8042 Tj --853 TJm -(Such) 19.9252 Tj --289 TJm -(a) 4.4234 Tj --289 TJm -(stream) 26.5603 Tj -72 174.917 Td -(can) 13.8281 Tj --391 TJm -(be) 9.4047 Tj --391 TJm -(decompressed) 56.4381 Tj --390 TJm -(correctly) 35.4071 Tj --391 TJm -(only) 17.7135 Tj --391 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -238.116 174.917 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -271.898 174.917 Td -/F122_0 9.9626 Tf -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --391 TJm -(0.9.0) 19.9252 Tj --391 TJm -(or) 8.2988 Tj --390 TJm -(later) 17.7035 Tj -55 TJm -(.) 2.4907 Tj --733 TJm -(Earlier) 27.1082 Tj --391 TJm -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj --391 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -448.071 174.917 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -481.852 174.917 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --391 TJm -(stop) 16.6077 Tj --391 TJm -(after) 18.2515 Tj -72 162.962 Td -(decompressing) 59.7656 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(\002rst) 15.5018 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 141.044 Td -/F124_0 9.9626 Tf -(bzcat) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.379 141.044 Td -/F122_0 9.9626 Tf -(\(or) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -118.486 141.044 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj --600 TJm -(-dc) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -172.284 141.044 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --250 TJm -(decompresses) 55.3323 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(speci\002ed) 35.417 Tj --250 TJm -(\002les) 16.6077 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(standard) 33.7533 Tj --250 TJm -(output.) 27.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 119.126 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.866 119.126 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --299 TJm -(read) 17.1456 Tj --299 TJm -(ar) 7.7409 Tj -18 TJm -(guments) 33.7633 Tj --299 TJm -(from) 19.3673 Tj --299 TJm -(the) 12.1743 Tj --299 TJm -(en) 9.4047 Tj -40 TJm -(vironment) 40.9562 Tj --298 TJm -(v) 4.9813 Tj -25 TJm -(ariables) 30.9837 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -316.903 119.126 Td -/F124_0 9.9626 Tf -(BZIP2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -349.769 119.126 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -367.133 119.126 Td -/F124_0 9.9626 Tf -(BZIP) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -391.043 119.126 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --299 TJm -(in) 7.7509 Tj --299 TJm -(that) 14.9439 Tj --299 TJm -(order) 21.0211 Tj -40 TJm -(,) 2.4907 Tj --311 TJm -(and) 14.386 Tj --299 TJm -(will) 15.5018 Tj --299 TJm -(process) 29.8778 Tj --299 TJm -(them) 19.9252 Tj -72 107.171 Td -(before) 25.4445 Tj --250 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --250 TJm -(ar) 7.7409 Tj -18 TJm -(guments) 33.7633 Tj --250 TJm -(read) 17.1456 Tj --250 TJm -(from) 19.3673 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(command) 39.2925 Tj --250 TJm -(line.) 17.4346 Tj --310 TJm -(This) 17.7135 Tj --250 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(con) 14.386 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(enient) 24.3486 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ay) 9.4047 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(supply) 26.5703 Tj --250 TJm -(def) 12.7222 Tj -10 TJm -(ault) 14.9439 Tj --250 TJm -(ar) 7.7409 Tj -18 TJm -(guments.) 36.2539 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 85.253 Td -(Compression) 52.5826 Tj --294 TJm -(is) 6.6451 Tj --294 TJm -(al) 7.193 Tj -10 TJm -(w) 7.193 Tj -10 TJm -(ays) 13.2801 Tj --294 TJm -(performed,) 43.9849 Tj --305 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --294 TJm -(if) 6.0871 Tj --294 TJm -(the) 12.1743 Tj --294 TJm -(compressed) 47.0334 Tj --294 TJm -(\002le) 12.7322 Tj --293 TJm -(is) 6.6451 Tj --294 TJm -(slightly) 29.8978 Tj --294 TJm -(lar) 10.5105 Tj -18 TJm -(ger) 12.7222 Tj --294 TJm -(than) 17.1556 Tj --294 TJm -(the) 12.1743 Tj --294 TJm -(original.) 33.4843 Tj --884 TJm -(Files) 19.3773 Tj --294 TJm -(of) 8.2988 Tj --294 TJm -(less) 14.9439 Tj --294 TJm -(than) 17.1556 Tj -72 73.298 Td -(about) 22.1369 Tj --246 TJm -(one) 14.386 Tj --246 TJm -(hundred) 32.6474 Tj --245 TJm -(bytes) 21.031 Tj --246 TJm -(tend) 17.1556 Tj --246 TJm -(to) 7.7509 Tj --246 TJm -(get) 12.1743 Tj --246 TJm -(l) 2.7696 Tj -1 TJm -(ar) 7.7409 Tj -18 TJm -(ger) 12.7222 Tj -40 TJm -(,) 2.4907 Tj --247 TJm -(since) 20.4731 Tj --246 TJm -(the) 12.1743 Tj --246 TJm -(compression) 50.3609 Tj --245 TJm -(mechanism) 45.3796 Tj --246 TJm -(has) 13.2801 Tj --246 TJm -(a) 4.4234 Tj --246 TJm -(constant) 33.2053 Tj --246 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(erhead) 26.5503 Tj --245 TJm -(in) 7.7509 Tj --246 TJm -(the) 12.1743 Tj --246 TJm -(re) 7.7409 Tj -15 TJm -(gion) 17.7135 Tj --246 TJm -(of) 8.2988 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -539.395 50.951 Td -(3) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 4 7 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -477.109 749.245 Td -/F122_0 9.9626 Tf -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(50) 9.9626 Tj --264 TJm -(bytes.) 23.5217 Tj --351 TJm -(Random) 33.7633 Tj --264 TJm -(dat) 12.1743 Tj -1 TJm -(a) 4.4234 Tj --264 TJm -(\(including) 40.9562 Tj --264 TJm -(the) 12.1743 Tj --264 TJm -(output) 25.4644 Tj --263 TJm -(of) 8.2988 Tj --264 TJm -(most) 19.3773 Tj --264 TJm -(\002le) 12.7322 Tj --263 TJm -(compressors\)) 53.1206 Tj --264 TJm -(is) 6.6451 Tj --264 TJm -(coded) 23.7907 Tj --263 TJm -(at) 7.193 Tj --264 TJm -(about) 22.1369 Tj --264 TJm -(8.05) 17.4346 Tj --263 TJm -(bits) 14.396 Tj --264 TJm -(per) 12.7222 Tj --264 TJm -(byte,) 19.6462 Tj --267 TJm -(gi) 7.7509 Tj -25 TJm -(ving) 17.7135 Tj --264 TJm -(an) 9.4047 Tj -72 698.082 Td -(e) 4.4234 Tj -15 TJm -(xpansion) 35.9749 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(around) 27.6661 Tj --250 TJm -(0.5%.) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 676.283 Td -(As) 11.0684 Tj --268 TJm -(a) 4.4234 Tj --268 TJm -(self-check) 40.9363 Tj --269 TJm -(for) 11.6164 Tj --268 TJm -(your) 18.2614 Tj --268 TJm -(protection,) 42.889 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -217.273 676.283 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -249.833 676.283 Td -/F122_0 9.9626 Tf -(uses) 17.1556 Tj --268 TJm -(32-bit) 23.8007 Tj --268 TJm -(CRCs) 23.8106 Tj --269 TJm -(to) 7.7509 Tj --268 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --268 TJm -(sure) 16.5977 Tj --268 TJm -(that) 14.9439 Tj --268 TJm -(the) 12.1743 Tj --269 TJm -(decompressed) 56.4381 Tj --268 TJm -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --268 TJm -(of) 8.2988 Tj --268 TJm -(a) 4.4234 Tj --268 TJm -(\002le) 12.7322 Tj --269 TJm -(is) 6.6451 Tj -72 664.328 Td -(identical) 34.3112 Tj --200 TJm -(to) 7.7509 Tj --199 TJm -(the) 12.1743 Tj --200 TJm -(original.) 33.4843 Tj --586 TJm -(This) 17.7135 Tj --200 TJm -(guards) 26.5603 Tj --199 TJm -(ag) 9.4047 Tj -5 TJm -(ainst) 18.8194 Tj --200 TJm -(corruption) 41.5042 Tj --199 TJm -(of) 8.2988 Tj --200 TJm -(the) 12.1743 Tj --200 TJm -(compressed) 47.0334 Tj --199 TJm -(data,) 19.0883 Tj --210 TJm -(and) 14.386 Tj --199 TJm -(ag) 9.4047 Tj -5 TJm -(ainst) 18.8194 Tj --200 TJm -(undetected) 43.158 Tj --200 TJm -(b) 4.9813 Tj -20 TJm -(ugs) 13.8381 Tj --199 TJm -(in) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -510.112 664.328 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 652.373 Td -/F122_0 9.9626 Tf -(\(hopefully) 41.5042 Tj --275 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj --274 TJm -(unlik) 20.4831 Tj -10 TJm -(ely\).) 17.9825 Tj --384 TJm -(The) 15.4918 Tj --275 TJm -(chances) 31.5316 Tj --275 TJm -(of) 8.2988 Tj --275 TJm -(data) 16.5977 Tj --274 TJm -(corruption) 41.5042 Tj --275 TJm -(going) 22.6948 Tj --275 TJm -(undetected) 43.158 Tj --274 TJm -(is) 6.6451 Tj --275 TJm -(microscopic,) 51.1878 Tj --281 TJm -(about) 22.1369 Tj --275 TJm -(one) 14.386 Tj --274 TJm -(chance) 27.6562 Tj --275 TJm -(in) 7.7509 Tj --275 TJm -(four) 16.5977 Tj -72 640.417 Td -(billion) 26.0223 Tj --279 TJm -(for) 11.6164 Tj --279 TJm -(each) 18.2515 Tj --279 TJm -(\002le) 12.7322 Tj --280 TJm -(processed.) 41.7732 Tj --795 TJm -(Be) 11.0684 Tj --279 TJm -(a) 4.4234 Tj -15 TJm -(w) 7.193 Tj -10 TJm -(are,) 14.655 Tj --286 TJm -(though,) 30.1668 Tj --287 TJm -(that) 14.9439 Tj --279 TJm -(the) 12.1743 Tj --279 TJm -(check) 23.2328 Tj --279 TJm -(occurs) 26.0024 Tj --279 TJm -(upon) 19.9252 Tj --279 TJm -(decompression,) 62.2563 Tj --287 TJm -(so) 8.8568 Tj --279 TJm -(it) 5.5392 Tj --279 TJm -(can) 13.8281 Tj --279 TJm -(only) 17.7135 Tj --280 TJm -(tell) 12.7322 Tj --279 TJm -(you) 14.9439 Tj -72 628.462 Td -(that) 14.9439 Tj --237 TJm -(something) 41.5142 Tj --236 TJm -(is) 6.6451 Tj --237 TJm -(wrong.) 27.9451 Tj --611 TJm -(It) 6.0871 Tj --237 TJm -(can') 17.1456 Tj -18 TJm -(t) 2.7696 Tj --237 TJm -(help) 17.1556 Tj --237 TJm -(you) 14.9439 Tj --236 TJm -(reco) 17.1456 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --237 TJm -(the) 12.1743 Tj --237 TJm -(original) 30.9936 Tj --237 TJm -(uncompressed) 56.996 Tj --236 TJm -(data.) 19.0883 Tj --612 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --236 TJm -(can) 13.8281 Tj --237 TJm -(use) 13.2801 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -458.159 628.462 Td -/F124_0 9.9626 Tf -(bzip2recover) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -532.249 628.462 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj -72 616.507 Td -(try) 11.0684 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(reco) 17.1456 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(from) 19.3673 Tj --250 TJm -(damaged) 35.965 Tj --250 TJm -(\002les.) 19.0983 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 594.708 Td -(Return) 27.1182 Tj --298 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj --406 TJm -(0) 4.9813 Tj --298 TJm -(for) 11.6164 Tj --298 TJm -(a) 4.4234 Tj --298 TJm -(normal) 28.224 Tj --298 TJm -(e) 4.4234 Tj -15 TJm -(xit,) 13.0112 Tj --310 TJm -(1) 4.9813 Tj --298 TJm -(for) 11.6164 Tj --297 TJm -(en) 9.4047 Tj -40 TJm -(vironmental) 48.1492 Tj --298 TJm -(problems) 37.0808 Tj --298 TJm -(\(\002le) 16.0497 Tj --298 TJm -(not) 12.7322 Tj --298 TJm -(found,) 25.7334 Tj --310 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -25 TJm -(alid) 14.9439 Tj --298 TJm -(\003ags,) 21.31 Tj --310 TJm -(I/O) 13.2801 Tj --298 TJm -(errors,) 25.7234 Tj --310 TJm -(etc.\),) 19.9152 Tj --310 TJm -(2) 4.9813 Tj --298 TJm -(to) 7.7509 Tj -72 582.753 Td -(indicate) 31.5416 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(corrupt) 28.772 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(\002le,) 15.2229 Tj --250 TJm -(3) 4.9813 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(an) 9.4047 Tj --250 TJm -(internal) 30.4357 Tj --250 TJm -(consistenc) 41.5042 Tj -15 TJm -(y) 4.9813 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(\(e) 7.7409 Tj -15 TJm -(g,) 7.472 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ug\)) 13.2801 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(caused) 27.1082 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -443.065 582.753 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -475.444 582.753 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(panic.) 24.0696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 548.118 Td -/F116_0 20.6585 Tf -(2.4.) 34.4584 Tj --278 TJm -(OPTIONS) 92.9839 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 516.475 Td -/F124_0 9.9626 Tf -(-c) 11.9551 Tj --600 TJm -(--stdout) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 504.52 Td -/F122_0 9.9626 Tf -(Compress) 39.8504 Tj --250 TJm -(or) 8.2988 Tj --250 TJm -(decompress) 47.0334 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(standard) 33.7533 Tj --250 TJm -(output.) 27.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 478.854 Td -/F124_0 9.9626 Tf -(-d) 11.9551 Tj --600 TJm -(--decompress) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 466.899 Td -/F122_0 9.9626 Tf -(F) 5.5392 Tj -15 TJm -(orce) 17.1456 Tj --296 TJm -(decompression.) 62.2563 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -200.214 466.899 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -230.102 466.899 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -235.659 466.899 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -280.454 466.899 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -297.791 466.899 Td -/F124_0 9.9626 Tf -(bzcat) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -330.631 466.899 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj --296 TJm -(really) 22.6848 Tj --296 TJm -(the) 12.1743 Tj --297 TJm -(same) 20.4731 Tj --296 TJm -(program,) 36.2439 Tj --308 TJm -(and) 14.386 Tj --296 TJm -(the) 12.1743 Tj --296 TJm -(decision) 33.2053 Tj --297 TJm -(about) 22.1369 Tj -108 454.944 Td -(what) 19.3673 Tj --303 TJm -(actions) 28.224 Tj --303 TJm -(to) 7.7509 Tj --303 TJm -(tak) 12.1743 Tj -10 TJm -(e) 4.4234 Tj --303 TJm -(is) 6.6451 Tj --303 TJm -(done) 19.3673 Tj --303 TJm -(on) 9.9626 Tj --304 TJm -(the) 12.1743 Tj --303 TJm -(basis) 19.9252 Tj --303 TJm -(of) 8.2988 Tj --303 TJm -(which) 24.3486 Tj --303 TJm -(name) 21.579 Tj --303 TJm -(is) 6.6451 Tj --303 TJm -(used.) 20.7521 Tj --939 TJm -(This) 17.7135 Tj --303 TJm -(\003ag) 14.9439 Tj --303 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(errides) 27.1082 Tj --303 TJm -(that) 14.9439 Tj --303 TJm -(mechanism,) 47.8703 Tj --316 TJm -(and) 14.386 Tj -108 442.988 Td -(forces) 24.3386 Tj --250 TJm -(bzip2) 22.1369 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(decompress.) 49.5241 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 417.323 Td -/F124_0 9.9626 Tf -(-z) 11.9551 Tj --600 TJm -(--compress) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 405.368 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --250 TJm -(complement) 49.2551 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -187.969 405.368 Td -/F124_0 9.9626 Tf -(-d) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -199.924 405.368 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj --310 TJm -(forces) 24.3386 Tj --250 TJm -(compression,) 52.8516 Tj --250 TJm -(re) 7.7409 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(ardless) 27.6661 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -20 TJm -(okation) 29.8878 Tj --250 TJm -(name.) 24.0696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 379.702 Td -/F124_0 9.9626 Tf -(-t) 11.9551 Tj --600 TJm -(--test) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 367.747 Td -/F122_0 9.9626 Tf -(Check) 25.4544 Tj --270 TJm -(inte) 14.9439 Tj -15 TJm -(grity) 18.8194 Tj --271 TJm -(of) 8.2988 Tj --270 TJm -(the) 12.1743 Tj --271 TJm -(speci\002ed) 35.417 Tj --270 TJm -(\002le\(s\),) 25.7334 Tj --276 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --270 TJm -(don') 18.2614 Tj -18 TJm -(t) 2.7696 Tj --270 TJm -(decompress) 47.0334 Tj --271 TJm -(them.) 22.4159 Tj --742 TJm -(This) 17.7135 Tj --271 TJm -(really) 22.6848 Tj --270 TJm -(performs) 35.965 Tj --270 TJm -(a) 4.4234 Tj --271 TJm -(trial) 16.0497 Tj --270 TJm -(decompres-) 46.4755 Tj -108 355.792 Td -(sion) 16.6077 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(thro) 16.0497 Tj -25 TJm -(ws) 11.0684 Tj --250 TJm -(a) 4.4234 Tj -15 TJm -(w) 7.193 Tj -10 TJm -(ay) 9.4047 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(result.) 24.6275 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 330.126 Td -/F124_0 9.9626 Tf -(-f) 11.9551 Tj --600 TJm -(--force) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 318.171 Td -/F122_0 9.9626 Tf -(F) 5.5392 Tj -15 TJm -(orce) 17.1456 Tj --338 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(erwrite) 28.2141 Tj --339 TJm -(of) 8.2988 Tj --338 TJm -(output) 25.4644 Tj --338 TJm -(\002les.) 19.0983 Tj --1150 TJm -(Normally) 38.1866 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -289.831 318.171 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -323.089 318.171 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --338 TJm -(not) 12.7322 Tj --339 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(erwrite) 28.2141 Tj --338 TJm -(e) 4.4234 Tj -15 TJm -(xisting) 27.1282 Tj --338 TJm -(output) 25.4644 Tj --338 TJm -(\002les.) 19.0983 Tj --1150 TJm -(Also) 18.8194 Tj --339 TJm -(forces) 24.3386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 306.215 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -140.379 306.215 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(break) 22.1269 Tj --250 TJm -(hard) 17.7035 Tj --250 TJm -(links) 19.3773 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(\002les,) 19.0983 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(otherwise) 38.7346 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ouldn') 26.0123 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(do.) 12.4533 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 284.416 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -141.211 284.416 Td -/F122_0 9.9626 Tf -(normally) 35.9749 Tj --334 TJm -(declines) 32.6474 Tj --333 TJm -(to) 7.7509 Tj --334 TJm -(decompress) 47.0334 Tj --333 TJm -(\002les) 16.6077 Tj --334 TJm -(which) 24.3486 Tj --333 TJm -(don') 18.2614 Tj -18 TJm -(t) 2.7696 Tj --334 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --333 TJm -(the) 12.1743 Tj --334 TJm -(correct) 27.6562 Tj --333 TJm -(magic) 24.3486 Tj --334 TJm -(header) 26.5503 Tj --333 TJm -(bytes.) 23.5217 Tj --561 TJm -(If) 6.6351 Tj --334 TJm -(forced) 25.4445 Tj -108 272.461 Td -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -111.318 272.461 Td -/F124_0 9.9626 Tf -(-f) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -123.273 272.461 Td -/F122_0 9.9626 Tf -(\),) 5.8082 Tj --250 TJm -(ho) 9.9626 Tj -25 TJm -(we) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj -40 TJm -(,) 2.4907 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(will) 15.5018 Tj --250 TJm -(pass) 17.1556 Tj --250 TJm -(such) 18.2614 Tj --250 TJm -(\002les) 16.6077 Tj --250 TJm -(through) 30.9936 Tj --250 TJm -(unmodi\002ed.) 47.8803 Tj --310 TJm -(This) 17.7135 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(GNU) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -412.585 272.461 Td -/F124_0 9.9626 Tf -(gzip) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -438.986 272.461 Td -/F122_0 9.9626 Tf -(beha) 18.8094 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(es.) 10.7895 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 246.795 Td -/F124_0 9.9626 Tf -(-k) 11.9551 Tj --600 TJm -(--keep) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 234.84 Td -/F122_0 9.9626 Tf -(K) 7.193 Tj -25 TJm -(eep) 13.8281 Tj --250 TJm -(\(don') 21.579 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(delete\)) 27.1082 Tj --250 TJm -(input) 20.4831 Tj --250 TJm -(\002les) 16.6077 Tj --250 TJm -(during) 26.0123 Tj --250 TJm -(compression) 50.3609 Tj --250 TJm -(or) 8.2988 Tj --250 TJm -(decompression.) 62.2563 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 209.174 Td -/F124_0 9.9626 Tf -(-s) 11.9551 Tj --600 TJm -(--small) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 197.219 Td -/F122_0 9.9626 Tf -(Reduce) 29.8778 Tj --347 TJm -(memory) 33.2053 Tj --347 TJm -(usage,) 25.1755 Tj --371 TJm -(for) 11.6164 Tj --346 TJm -(compression,) 52.8516 Tj --371 TJm -(decompression) 59.7656 Tj --347 TJm -(and) 14.386 Tj --347 TJm -(testing.) 29.0609 Tj --1201 TJm -(Files) 19.3773 Tj --347 TJm -(are) 12.1643 Tj --347 TJm -(decompressed) 56.4381 Tj --346 TJm -(and) 14.386 Tj --347 TJm -(tested) 23.2427 Tj -108 185.264 Td -(using) 21.589 Tj --388 TJm -(a) 4.4234 Tj --388 TJm -(modi\002ed) 35.427 Tj --388 TJm -(algorithm) 38.7446 Tj --389 TJm -(which) 24.3486 Tj --388 TJm -(only) 17.7135 Tj --388 TJm -(requires) 32.0895 Tj --388 TJm -(2.5) 12.4533 Tj --388 TJm -(bytes) 21.031 Tj --388 TJm -(per) 12.7222 Tj --388 TJm -(block) 22.1369 Tj --389 TJm -(byte.) 19.6462 Tj --1448 TJm -(This) 17.7135 Tj --389 TJm -(means) 25.4544 Tj --388 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --388 TJm -(\002le) 12.7322 Tj --388 TJm -(can) 13.8281 Tj --388 TJm -(be) 9.4047 Tj -108 173.309 Td -(decompressed) 56.4381 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(2300k) 24.9065 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(memory) 33.2053 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(albeit) 22.1369 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(about) 22.1369 Tj --250 TJm -(half) 15.4918 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(normal) 28.224 Tj --250 TJm -(speed.) 25.1755 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 151.51 Td -(During) 28.224 Tj --252 TJm -(compr) 25.4544 Tj -1 TJm -(ession,) 27.3972 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -194.091 151.51 Td -/F124_0 9.9626 Tf -(-s) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -208.551 151.51 Td -/F122_0 9.9626 Tf -(selects) 26.5603 Tj --252 TJm -(a) 4.4234 Tj --251 TJm -(block) 22.1369 Tj --252 TJm -(size) 15.4918 Tj --251 TJm -(of) 8.2988 Tj --252 TJm -(200k,) 22.4159 Tj --251 TJm -(which) 24.3486 Tj --252 TJm -(limits) 22.7048 Tj --251 TJm -(memory) 33.2053 Tj --252 TJm -(use) 13.2801 Tj --251 TJm -(to) 7.7509 Tj --252 TJm -(around) 27.6661 Tj --251 TJm -(the) 12.1743 Tj --252 TJm -(same) 20.4731 Tj --251 TJm -(\002gure,) 25.7334 Tj --252 TJm -(at) 7.193 Tj -108 139.554 Td -(the) 12.1743 Tj --287 TJm -(e) 4.4234 Tj -15 TJm -(xpense) 27.6661 Tj --287 TJm -(of) 8.2988 Tj --288 TJm -(your) 18.2614 Tj --287 TJm -(compression) 50.3609 Tj --287 TJm -(ratio.) 20.7521 Tj --843 TJm -(In) 8.2988 Tj --287 TJm -(short,) 22.4159 Tj --297 TJm -(if) 6.0871 Tj --287 TJm -(your) 18.2614 Tj --287 TJm -(machine) 33.7533 Tj --287 TJm -(is) 6.6451 Tj --287 TJm -(lo) 7.7509 Tj -25 TJm -(w) 7.193 Tj --287 TJm -(on) 9.9626 Tj --288 TJm -(memory) 33.2053 Tj --287 TJm -(\(8) 8.2988 Tj --287 TJm -(me) 12.1743 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(abytes) 25.4544 Tj --287 TJm -(or) 8.2988 Tj --287 TJm -(less\),) 20.7521 Tj -108 127.599 Td -(use) 13.2801 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -123.771 127.599 Td -/F124_0 9.9626 Tf -(-s) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -138.217 127.599 Td -/F122_0 9.9626 Tf -(for) 11.6164 Tj --250 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(erything.) 35.696 Tj --620 TJm -(See) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --250 TJm -(MEMOR) 37.6387 Tj -65 TJm -(Y) 7.193 Tj --250 TJm -(MAN) 23.2427 Tj -35 TJm -(A) 7.193 Tj -40 TJm -(GEMENT) 41.5042 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --250 TJm -([5]) 11.6164 Tj -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --250 TJm -(belo) 17.1556 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 101.933 Td -/F124_0 9.9626 Tf -(-q) 11.9551 Tj --600 TJm -(--quiet) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 89.978 Td -/F122_0 9.9626 Tf -(Suppress) 35.9749 Tj --221 TJm -(non-essential) 52.5726 Tj --220 TJm -(w) 7.193 Tj -10 TJm -(arning) 25.4544 Tj --221 TJm -(messages.) 40.1194 Tj --300 TJm -(Messages) 38.7346 Tj --221 TJm -(pertaining) 40.3983 Tj --221 TJm -(to) 7.7509 Tj --220 TJm -(I/O) 13.2801 Tj --221 TJm -(errors) 23.2328 Tj --221 TJm -(and) 14.386 Tj --220 TJm -(other) 20.4731 Tj --221 TJm -(critical) 27.6661 Tj --221 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ents) 16.0497 Tj --221 TJm -(wi) 9.9626 Tj -1 TJm -(ll) 5.5392 Tj --221 TJm -(not) 12.7322 Tj -108 78.023 Td -(be) 9.4047 Tj --250 TJm -(suppressed.) 46.2065 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -539.395 50.852 Td -(4) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 5 8 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -477.109 749.245 Td -/F122_0 9.9626 Tf -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F124_0 9.9626 Tf -(-v) 11.9551 Tj --600 TJm -(--verbose) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 698.082 Td -/F122_0 9.9626 Tf -(V) 7.193 Tj -111 TJm -(erbose) 26.0024 Tj --323 TJm -(mode) 22.1369 Tj --322 TJm -(--) 6.6351 Tj --323 TJm -(sho) 13.8381 Tj -25 TJm -(w) 7.193 Tj --322 TJm -(the) 12.1743 Tj --323 TJm -(compression) 50.3609 Tj --323 TJm -(ratio) 18.2614 Tj --322 TJm -(for) 11.6164 Tj --323 TJm -(each) 18.2515 Tj --322 TJm -(\002le) 12.7322 Tj --323 TJm -(processed.) 41.7732 Tj --1056 TJm -(Further) 29.3299 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -430.015 698.082 Td -/F124_0 9.9626 Tf -(-v) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -441.97 698.082 Td -/F122_0 9.9626 Tf -(') 3.3175 Tj -55 TJm -(s) 3.8755 Tj --323 TJm -(increase) 32.6375 Tj --322 TJm -(the) 12.1743 Tj --323 TJm -(v) 4.9813 Tj -15 TJm -(erbosity) 32.0995 Tj -108 686.127 Td -(le) 7.193 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el,) 9.6836 Tj --250 TJm -(spe) 13.2801 Tj -25 TJm -(wing) 19.9252 Tj --250 TJm -(out) 12.7322 Tj --250 TJm -(lots) 14.396 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(information) 47.0434 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(primarily) 37.0808 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(interest) 29.3299 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(diagnostic) 40.9562 Tj --250 TJm -(purposes.) 37.9077 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 660.224 Td -/F124_0 9.9626 Tf -(-L) 11.9551 Tj --600 TJm -(--license) 53.798 Tj --600 TJm -(-V) 11.9551 Tj --600 TJm -(--version) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 648.269 Td -/F122_0 9.9626 Tf -(Display) 30.9936 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(softw) 22.1369 Tj -10 TJm -(are) 12.1643 Tj --250 TJm -(v) 4.9813 Tj -15 TJm -(ersion,) 26.8392 Tj --250 TJm -(license) 27.6661 Tj --250 TJm -(terms) 22.1369 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(conditions.) 44.0048 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 622.366 Td -/F124_0 9.9626 Tf -(-1) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -86.446 622.366 Td -/F122_0 9.9626 Tf -(\(or) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -100.553 622.366 Td -/F124_0 9.9626 Tf -(--fast) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -136.418 622.366 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -152.468 622.366 Td -/F124_0 9.9626 Tf -(-9) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -166.914 622.366 Td -/F122_0 9.9626 Tf -(\(or) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -181.021 622.366 Td -/F124_0 9.9626 Tf -(-best) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.909 622.366 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 610.411 Td -(Set) 12.7322 Tj --288 TJm -(the) 12.1743 Tj --289 TJm -(block) 22.1369 Tj --288 TJm -(size) 15.4918 Tj --288 TJm -(to) 7.7509 Tj --288 TJm -(100) 14.9439 Tj --289 TJm -(k,) 7.472 Tj --298 TJm -(200) 14.9439 Tj --288 TJm -(k) 4.9813 Tj --288 TJm -(...) 7.472 Tj --850 TJm -(900) 14.9439 Tj --288 TJm -(k) 4.9813 Tj --288 TJm -(when) 21.579 Tj --289 TJm -(compressing.) 52.8516 Tj --849 TJm -(Has) 15.4918 Tj --289 TJm -(no) 9.9626 Tj --288 TJm -(ef) 7.7409 Tj -25 TJm -(fect) 14.9339 Tj --288 TJm -(when) 21.579 Tj --288 TJm -(decompressing.) 62.2563 Tj --850 TJm -(See) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -108 598.456 Td -(MEMOR) 37.6387 Tj -65 TJm -(Y) 7.193 Tj --297 TJm -(MAN) 23.2427 Tj -35 TJm -(A) 7.193 Tj -40 TJm -(GEMENT) 41.5042 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --297 TJm -([5]) 11.6164 Tj -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --298 TJm -(belo) 17.1556 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(.) 2.4907 Tj --904 TJm -(The) 15.4918 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -297.278 598.456 Td -/F124_0 9.9626 Tf -(--fast) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -336.106 598.456 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -353.454 598.456 Td -/F124_0 9.9626 Tf -(--best) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -392.281 598.456 Td -/F122_0 9.9626 Tf -(aliases) 26.5603 Tj --297 TJm -(are) 12.1643 Tj --298 TJm -(primarily) 37.0808 Tj --297 TJm -(for) 11.6164 Tj --297 TJm -(GNU) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -516.09 598.456 Td -/F124_0 9.9626 Tf -(gzip) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 586.501 Td -/F122_0 9.9626 Tf -(compatibility) 53.1405 Tj -65 TJm -(.) 2.4907 Tj --356 TJm -(In) 8.2988 Tj --265 TJm -(particular) 38.1767 Tj -40 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -220.423 586.501 Td -/F124_0 9.9626 Tf -(--fast) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -258.932 586.501 Td -/F122_0 9.9626 Tf -(doesn') 26.5603 Tj -18 TJm -(t) 2.7696 Tj --265 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --266 TJm -(things) 24.3586 Tj --265 TJm -(signi\002cantly) 49.2651 Tj --265 TJm -(f) 3.3175 Tj -10 TJm -(aster) 18.8094 Tj -55 TJm -(.) 2.4907 Tj --712 TJm -(And) 17.1556 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -444.622 586.501 Td -/F124_0 9.9626 Tf -(--best) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -483.131 586.501 Td -/F122_0 9.9626 Tf -(merely) 27.6661 Tj --265 TJm -(selects) 26.5603 Tj -108 574.545 Td -(the) 12.1743 Tj --250 TJm -(def) 12.7222 Tj -10 TJm -(ault) 14.9439 Tj --250 TJm -(beha) 18.8094 Tj -20 TJm -(viour) 21.031 Tj -55 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 548.643 Td -/F124_0 9.9626 Tf -(--) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 536.688 Td -/F122_0 9.9626 Tf -(T) 6.0871 Tj -35 TJm -(reats) 18.8094 Tj --261 TJm -(all) 9.9626 Tj --261 TJm -(subsequent) 44.2738 Tj --260 TJm -(ar) 7.7409 Tj -18 TJm -(guments) 33.7633 Tj --261 TJm -(as) 8.2988 Tj --261 TJm -(\002le) 12.7322 Tj --261 TJm -(names,) 27.9451 Tj --263 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --261 TJm -(if) 6.0871 Tj --261 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --260 TJm -(start) 17.1556 Tj --261 TJm -(with) 17.7135 Tj --261 TJm -(a) 4.4234 Tj --261 TJm -(dash.) 20.7521 Tj --685 TJm -(This) 17.7135 Tj --260 TJm -(is) 6.6451 Tj --261 TJm -(so) 8.8568 Tj --261 TJm -(you) 14.9439 Tj --261 TJm -(can) 13.8281 Tj --260 TJm -(handle) 26.5603 Tj --261 TJm -(\002les) 16.6077 Tj -108 524.732 Td -(with) 17.7135 Tj --250 TJm -(names) 25.4544 Tj --250 TJm -(be) 9.4047 Tj -15 TJm -(ginning) 30.4457 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(dash,) 20.7521 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(e) 4.4234 Tj -15 TJm -(xample:) 32.0995 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -302.27 524.732 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj --600 TJm -(--) 11.9551 Tj --600 TJm -(-myfilename) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -421.821 524.732 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 498.83 Td -/F124_0 9.9626 Tf -(--repetitive-fast) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -178.6 498.83 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.563 498.83 Td -/F124_0 9.9626 Tf -(--repetitive-best) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 486.874 Td -/F122_0 9.9626 Tf -(These) 23.7907 Tj --207 TJm -(\003ags) 18.8194 Tj --206 TJm -(are) 12.1643 Tj --207 TJm -(redundant) 39.8404 Tj --207 TJm -(in) 7.7509 Tj --206 TJm -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj --207 TJm -(0.9.5) 19.9252 Tj --207 TJm -(and) 14.386 Tj --206 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e.) 6.914 Tj --591 TJm -(The) 15.4918 Tj -15 TJm -(y) 4.9813 Tj --207 TJm -(pro) 13.2801 Tj -15 TJm -(vided) 22.1369 Tj --207 TJm -(some) 21.031 Tj --207 TJm -(coa) 13.8281 Tj -1 TJm -(rse) 11.6164 Tj --207 TJm -(control) 28.224 Tj --207 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --207 TJm -(the) 12.1743 Tj --206 TJm -(beha) 18.8094 Tj -20 TJm -(viour) 21.031 Tj -108 474.919 Td -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --251 TJm -(sorting) 27.6761 Tj --250 TJm -(algorithm) 38.7446 Tj --250 TJm -(in) 7.7509 Tj --251 TJm -(earlier) 25.4445 Tj --250 TJm -(v) 4.9813 Tj -15 TJm -(ersions,) 30.7147 Tj --250 TJm -(which) 24.3486 Tj --251 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --250 TJm -(sometimes) 42.62 Tj --250 TJm -(useful.) 26.8392 Tj --622 TJm -(0.9.5) 19.9252 Tj --251 TJm -(and) 14.386 Tj --250 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --251 TJm -(an) 9.4047 Tj --250 TJm -(impro) 23.8007 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(ed) 9.4047 Tj -108 462.964 Td -(algorithm) 38.7446 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(renders) 29.3199 Tj --250 TJm -(these) 20.4731 Tj --250 TJm -(\003ags) 18.8194 Tj --250 TJm -(irrele) 21.0211 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ant.) 14.6649 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 414.264 Td -/F116_0 20.6585 Tf -(2.5.) 34.4584 Tj --278 TJm -(MEMOR) 79.184 Tj -50 TJm -(Y) 13.7792 Tj --278 TJm -(MANA) 61.9548 Tj -50 TJm -(GEMENT) 88.3771 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 392.346 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.454 392.346 Td -/F122_0 9.9626 Tf -(compresses) 45.9276 Tj --258 TJm -(lar) 10.5105 Tj -18 TJm -(ge) 9.4047 Tj --257 TJm -(\002les) 16.6077 Tj --258 TJm -(in) 7.7509 Tj --257 TJm -(blocks.) 28.503 Tj --666 TJm -(The) 15.4918 Tj --257 TJm -(block) 22.1369 Tj --258 TJm -(size) 15.4918 Tj --258 TJm -(af) 7.7409 Tj -25 TJm -(fects) 18.8094 Tj --257 TJm -(both) 17.7135 Tj --258 TJm -(the) 12.1743 Tj --257 TJm -(compression) 50.3609 Tj --258 TJm -(ratio) 18.2614 Tj --257 TJm -(achie) 21.0211 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ed,) 11.8953 Tj --260 TJm -(and) 14.386 Tj --258 TJm -(the) 12.1743 Tj --257 TJm -(amount) 29.8878 Tj -72 380.391 Td -(of) 8.2988 Tj --215 TJm -(memory) 33.2053 Tj --215 TJm -(needed) 28.2141 Tj --215 TJm -(for) 11.6164 Tj --215 TJm -(compression) 50.3609 Tj --214 TJm -(and) 14.386 Tj --215 TJm -(decompression.) 62.2563 Tj --597 TJm -(The) 15.4918 Tj --215 TJm -(\003ags) 18.8194 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -337.719 380.391 Td -/F124_0 9.9626 Tf -(-1) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -351.815 380.391 Td -/F122_0 9.9626 Tf -(through) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -384.95 380.391 Td -/F124_0 9.9626 Tf -(-9) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -399.046 380.391 Td -/F122_0 9.9626 Tf -(specify) 28.772 Tj --215 TJm -(the) 12.1743 Tj --215 TJm -(block) 22.1369 Tj --215 TJm -(size) 15.4918 Tj --215 TJm -(to) 7.7509 Tj --214 TJm -(be) 9.4047 Tj --215 TJm -(100,000) 32.3785 Tj -72 368.435 Td -(bytes) 21.031 Tj --278 TJm -(through) 30.9936 Tj --277 TJm -(900,000) 32.3785 Tj --278 TJm -(bytes) 21.031 Tj --278 TJm -(\(the) 15.4918 Tj --277 TJm -(def) 12.7222 Tj -10 TJm -(ault\)) 18.2614 Tj --278 TJm -(respecti) 30.9837 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ely) 12.1743 Tj -65 TJm -(.) 2.4907 Tj --786 TJm -(At) 9.9626 Tj --278 TJm -(decompression) 59.7656 Tj --278 TJm -(time,) 20.2042 Tj --284 TJm -(the) 12.1743 Tj --278 TJm -(block) 22.1369 Tj --278 TJm -(size) 15.4918 Tj --277 TJm -(used) 18.2614 Tj --278 TJm -(for) 11.6164 Tj --278 TJm -(compression) 50.3609 Tj -72 356.48 Td -(is) 6.6451 Tj --243 TJm -(read) 17.1456 Tj --242 TJm -(from) 19.3673 Tj --243 TJm -(the) 12.1743 Tj --242 TJm -(header) 26.5503 Tj --243 TJm -(of) 8.2988 Tj --242 TJm -(the) 12.1743 Tj --243 TJm -(compressed) 47.0334 Tj --242 TJm -(\002le,) 15.2229 Tj --244 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -275.174 356.48 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -319.433 356.48 Td -/F122_0 9.9626 Tf -(then) 17.1556 Tj --243 TJm -(all) 9.9626 Tj -1 TJm -(o) 4.9813 Tj --1 TJm -(c) 4.4234 Tj -1 TJm -(ates) 15.4918 Tj --243 TJm -(itself) 19.9252 Tj --242 TJm -(just) 14.396 Tj --243 TJm -(enough) 29.3299 Tj --243 TJm -(memory) 33.2053 Tj --242 TJm -(to) 7.7509 Tj --243 TJm -(decompress) 47.0334 Tj -72 344.525 Td -(the) 12.1743 Tj --303 TJm -(\002le.) 15.2229 Tj --940 TJm -(Since) 22.1369 Tj --304 TJm -(block) 22.1369 Tj --303 TJm -(sizes) 19.3673 Tj --303 TJm -(are) 12.1643 Tj --303 TJm -(stored) 24.3486 Tj --304 TJm -(in) 7.7509 Tj --303 TJm -(compressed) 47.0334 Tj --303 TJm -(\002les,) 19.0983 Tj --317 TJm -(it) 5.5392 Tj --303 TJm -(follo) 18.8194 Tj -25 TJm -(ws) 11.0684 Tj --304 TJm -(that) 14.9439 Tj --303 TJm -(the) 12.1743 Tj --303 TJm -(\003ags) 18.8194 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -406.35 344.525 Td -/F124_0 9.9626 Tf -(-1) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -421.327 344.525 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -432.1 344.525 Td -/F124_0 9.9626 Tf -(-9) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -447.077 344.525 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj --303 TJm -(irrele) 21.0211 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ant) 12.1743 Tj --304 TJm -(to) 7.7509 Tj --303 TJm -(and) 14.386 Tj --303 TJm -(so) 8.8568 Tj -72 332.57 Td -(ignored) 30.4357 Tj --250 TJm -(during) 26.0123 Tj --250 TJm -(decompression.) 62.2563 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 310.652 Td -(Compression) 52.5826 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(decompression) 59.7656 Tj --250 TJm -(requirements,) 54.5054 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(bytes,) 23.5217 Tj --250 TJm -(can) 13.8281 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(estimated) 38.1866 Tj --250 TJm -(as:) 11.0684 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 247.723] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 299.131 Td -/F124_0 9.9626 Tf -(Compression:) 71.7307 Tj --1278 TJm -(400k) 23.9102 Tj --426 TJm -(+) 5.9776 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(8) 5.9776 Tj --426 TJm -(x) 5.9776 Tj --426 TJm -(block) 29.8878 Tj --426 TJm -(size) 23.9102 Tj --426 TJm -(\)) 5.9776 Tj -90 275.22 Td -(Decompression:) 83.6858 Tj --426 TJm -(100k) 23.9102 Tj --426 TJm -(+) 5.9776 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(4) 5.9776 Tj --426 TJm -(x) 5.9776 Tj --426 TJm -(block) 29.8878 Tj --426 TJm -(size) 23.9102 Tj --426 TJm -(\),) 11.9551 Tj --426 TJm -(or) 11.9551 Tj -153.66 263.265 Td -(100k) 23.9102 Tj --426 TJm -(+) 5.9776 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(2.5) 17.9327 Tj --426 TJm -(x) 5.9776 Tj --426 TJm -(block) 29.8878 Tj --426 TJm -(size) 23.9102 Tj --426 TJm -(\)) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 225.805 Td -/F122_0 9.9626 Tf -(Lar) 13.8281 Tj -18 TJm -(ger) 12.7222 Tj --292 TJm -(block) 22.1369 Tj --292 TJm -(sizes) 19.3673 Tj --291 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --292 TJm -(rapidly) 28.224 Tj --292 TJm -(diminishing) 47.6113 Tj --292 TJm -(mar) 15.4918 Tj -18 TJm -(ginal) 19.9252 Tj --291 TJm -(returns.) 30.1568 Tj --871 TJm -(Most) 20.4831 Tj --292 TJm -(of) 8.2988 Tj --291 TJm -(the) 12.1743 Tj --292 TJm -(compression) 50.3609 Tj --292 TJm -(comes) 25.4544 Tj --292 TJm -(from) 19.3673 Tj --291 TJm -(the) 12.1743 Tj --292 TJm -(\002rst) 15.5018 Tj --292 TJm -(tw) 9.9626 Tj -10 TJm -(o) 4.9813 Tj --292 TJm -(or) 8.2988 Tj -72 213.85 Td -(three) 19.9152 Tj --232 TJm -(hundred) 32.6474 Tj --232 TJm -(k) 4.9813 Tj --232 TJm -(of) 8.2988 Tj --232 TJm -(block) 22.1369 Tj --232 TJm -(size,) 17.9825 Tj --235 TJm -(a) 4.4234 Tj --232 TJm -(f) 3.3175 Tj -10 TJm -(act) 11.6164 Tj --232 TJm -(w) 7.193 Tj -10 TJm -(orth) 16.0497 Tj --232 TJm -(bearing) 29.8778 Tj --232 TJm -(in) 7.7509 Tj --232 TJm -(mind) 20.4831 Tj --232 TJm -(when) 21.579 Tj --231 TJm -(using) 21.589 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -354.025 213.85 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -386.223 213.85 Td -/F122_0 9.9626 Tf -(on) 9.9626 Tj --232 TJm -(small) 21.589 Tj --232 TJm -(machines.) 40.1194 Tj --304 TJm -(It) 6.0871 Tj --232 TJm -(is) 6.6451 Tj --232 TJm -(also) 16.0497 Tj --231 TJm -(important) 38.7446 Tj -72 201.895 Td -(to) 7.7509 Tj --250 TJm -(appreciate) 40.9363 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(decompression) 59.7656 Tj --250 TJm -(memory) 33.2053 Tj --250 TJm -(requirement) 48.1393 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(set) 11.0684 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(compression) 50.3609 Tj --250 TJm -(time) 17.7135 Tj --250 TJm -(by) 9.9626 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(choice) 26.0024 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(block) 22.1369 Tj --250 TJm -(size.) 17.9825 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 179.977 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --388 TJm -(\002les) 16.6077 Tj --389 TJm -(compressed) 47.0334 Tj --388 TJm -(with) 17.7135 Tj --389 TJm -(the) 12.1743 Tj --388 TJm -(def) 12.7222 Tj -10 TJm -(ault) 14.9439 Tj --389 TJm -(900k) 19.9252 Tj --388 TJm -(block) 22.1369 Tj --389 TJm -(size,) 17.9825 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -302.002 179.977 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -347.716 179.977 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --388 TJm -(require) 28.2141 Tj --389 TJm -(about) 22.1369 Tj --388 TJm -(3700) 19.9252 Tj --389 TJm -(kbytes) 26.0123 Tj --388 TJm -(to) 7.7509 Tj --389 TJm -(decompress.) 49.5241 Tj -72 168.022 Td -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --424 TJm -(support) 29.8878 Tj --425 TJm -(decompression) 59.7656 Tj --424 TJm -(of) 8.2988 Tj --424 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --425 TJm -(\002l) 8.3088 Tj -1 TJm -(e) 4.4234 Tj --425 TJm -(on) 9.9626 Tj --424 TJm -(a) 4.4234 Tj --424 TJm -(4) 4.9813 Tj --425 TJm -(me) 12.1743 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(abyte) 21.579 Tj --424 TJm -(machine,) 36.2439 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -348.272 168.022 Td -/F124_0 9.9626 Tf -(bunzip2) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -394.342 168.022 Td -/F122_0 9.9626 Tf -(has) 13.2801 Tj --424 TJm -(an) 9.4047 Tj --425 TJm -(option) 25.4644 Tj --424 TJm -(to) 7.7509 Tj --424 TJm -(decompress) 47.0334 Tj --424 TJm -(using) 21.589 Tj -72 156.067 Td -(approximately) 57.5539 Tj --281 TJm -(half) 15.4918 Tj --281 TJm -(this) 14.396 Tj --280 TJm -(amount) 29.8878 Tj --281 TJm -(of) 8.2988 Tj --281 TJm -(memory) 33.2053 Tj -65 TJm -(,) 2.4907 Tj --288 TJm -(about) 22.1369 Tj --281 TJm -(2300) 19.9252 Tj --281 TJm -(kbytes.) 28.503 Tj --805 TJm -(Decompression) 61.9773 Tj --280 TJm -(speed) 22.6848 Tj --281 TJm -(is) 6.6451 Tj --281 TJm -(also) 16.0497 Tj --281 TJm -(halv) 17.1556 Tj -15 TJm -(ed,) 11.8953 Tj --288 TJm -(so) 8.8568 Tj --281 TJm -(you) 14.9439 Tj --281 TJm -(should) 26.5703 Tj -72 144.112 Td -(use) 13.2801 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(option) 25.4644 Tj --250 TJm -(only) 17.7135 Tj --250 TJm -(where) 24.3386 Tj --250 TJm -(necessary) 38.7246 Tj -65 TJm -(.) 2.4907 Tj --620 TJm -(The) 15.4918 Tj --250 TJm -(rele) 14.9339 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ant) 12.1743 Tj --250 TJm -(\003ag) 14.9439 Tj --250 TJm -(is) 6.6451 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -305.024 144.112 Td -/F124_0 9.9626 Tf -(-s) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -316.979 144.112 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 122.194 Td -(In) 8.2988 Tj --204 TJm -(general,) 31.8106 Tj --214 TJm -(try) 11.0684 Tj --204 TJm -(and) 14.386 Tj --205 TJm -(use) 13.2801 Tj --204 TJm -(the) 12.1743 Tj --204 TJm -(lar) 10.5105 Tj -18 TJm -(gest) 16.0497 Tj --205 TJm -(block) 22.1369 Tj --204 TJm -(size) 15.4918 Tj --205 TJm -(memory) 33.2053 Tj --204 TJm -(constraints) 43.1679 Tj --204 TJm -(allo) 14.9439 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(,) 2.4907 Tj --214 TJm -(since) 20.4731 Tj --204 TJm -(that) 14.9439 Tj --205 TJm -(maximises) 42.62 Tj --204 TJm -(the) 12.1743 Tj --204 TJm -(compression) 50.3609 Tj --205 TJm -(achie) 21.0211 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ed.) 11.8953 Tj -72 110.239 Td -(Compression) 52.5826 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(decompression) 59.7656 Tj --250 TJm -(speed) 22.6848 Tj --250 TJm -(are) 12.1643 Tj --250 TJm -(virtually) 33.7633 Tj --250 TJm -(unaf) 17.7035 Tj -25 TJm -(fected) 24.3386 Tj --250 TJm -(by) 9.9626 Tj --250 TJm -(block) 22.1369 Tj --250 TJm -(size.) 17.9825 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 88.321 Td -(Another) 32.6474 Tj --296 TJm -(signi\002cant) 41.5142 Tj --296 TJm -(point) 20.4831 Tj --295 TJm -(applies) 28.224 Tj --296 TJm -(to) 7.7509 Tj --296 TJm -(\002les) 16.6077 Tj --296 TJm -(which) 24.3486 Tj --296 TJm -(\002t) 8.3088 Tj --296 TJm -(in) 7.7509 Tj --296 TJm -(a) 4.4234 Tj --295 TJm -(single) 23.8007 Tj --296 TJm -(block) 22.1369 Tj --296 TJm -(--) 6.6351 Tj --296 TJm -(that) 14.9439 Tj --296 TJm -(means) 25.4544 Tj --296 TJm -(most) 19.3773 Tj --295 TJm -(\002les) 16.6077 Tj --296 TJm -(you') 18.2614 Tj -50 TJm -(d) 4.9813 Tj --296 TJm -(encounter) 39.2825 Tj --296 TJm -(using) 21.589 Tj --296 TJm -(a) 4.4234 Tj -72 76.366 Td -(lar) 10.5105 Tj -18 TJm -(ge) 9.4047 Tj --290 TJm -(block) 22.1369 Tj --290 TJm -(size.) 17.9825 Tj --859 TJm -(The) 15.4918 Tj --290 TJm -(amount) 29.8878 Tj --290 TJm -(of) 8.2988 Tj --290 TJm -(real) 14.9339 Tj --290 TJm -(memory) 33.2053 Tj --289 TJm -(touched) 31.5416 Tj --290 TJm -(is) 6.6451 Tj --290 TJm -(proportional) 49.2551 Tj --290 TJm -(to) 7.7509 Tj --290 TJm -(the) 12.1743 Tj --290 TJm -(size) 15.4918 Tj --290 TJm -(of) 8.2988 Tj --290 TJm -(the) 12.1743 Tj --289 TJm -(\002le,) 15.2229 Tj --300 TJm -(since) 20.4731 Tj --290 TJm -(the) 12.1743 Tj --290 TJm -(\002le) 12.7322 Tj --290 TJm -(is) 6.6451 Tj --290 TJm -(smaller) 29.3299 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -539.395 50.951 Td -(5) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 6 9 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -477.109 749.245 Td -/F122_0 9.9626 Tf -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(than) 17.1556 Tj --362 TJm -(a) 4.4234 Tj --362 TJm -(block.) 24.6275 Tj --1293 TJm -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --362 TJm -(e) 4.4234 Tj -15 TJm -(xample,) 31.8205 Tj --390 TJm -(compressing) 50.3609 Tj --362 TJm -(a) 4.4234 Tj --362 TJm -(\002le) 12.7322 Tj --362 TJm -(20,000) 27.3972 Tj --362 TJm -(bytes) 21.031 Tj --362 TJm -(long) 17.7135 Tj --362 TJm -(with) 17.7135 Tj --362 TJm -(the) 12.1743 Tj --362 TJm -(\003ag) 14.9439 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -406.528 710.037 Td -/F124_0 9.9626 Tf -(-9) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -422.09 710.037 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --362 TJm -(cause) 22.1269 Tj --362 TJm -(the) 12.1743 Tj --362 TJm -(compressor) 45.9276 Tj --362 TJm -(to) 7.7509 Tj -72 698.082 Td -(allocate) 30.9837 Tj --271 TJm -(around) 27.6661 Tj --272 TJm -(7600k) 24.9065 Tj --271 TJm -(of) 8.2988 Tj --272 TJm -(memory) 33.2053 Tj -65 TJm -(,) 2.4907 Tj --277 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --271 TJm -(only) 17.7135 Tj --272 TJm -(touch) 22.1369 Tj --271 TJm -(400k) 19.9252 Tj --272 TJm -(+) 5.6189 Tj --271 TJm -(20000) 24.9065 Tj --272 TJm -(*) 4.9813 Tj --271 TJm -(8) 4.9813 Tj --272 TJm -(=) 5.6189 Tj --271 TJm -(560) 14.9439 Tj --272 TJm -(kbytes) 26.0123 Tj --271 TJm -(of) 8.2988 Tj --272 TJm -(it.) 8.0299 Tj --748 TJm -(Similarly) 37.0908 Tj -65 TJm -(,) 2.4907 Tj --277 TJm -(the) 12.1743 Tj --272 TJm -(decompressor) 55.3323 Tj -72 686.127 Td -(will) 15.5018 Tj --250 TJm -(allocate) 30.9837 Tj --250 TJm -(3700k) 24.9065 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(only) 17.7135 Tj --250 TJm -(touch) 22.1369 Tj --250 TJm -(100k) 19.9252 Tj --250 TJm -(+) 5.6189 Tj --250 TJm -(20000) 24.9065 Tj --250 TJm -(*) 4.9813 Tj --250 TJm -(4) 4.9813 Tj --250 TJm -(=) 5.6189 Tj --250 TJm -(180) 14.9439 Tj --250 TJm -(kbytes.) 28.503 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 664.209 Td -(Here) 19.3573 Tj --293 TJm -(is) 6.6451 Tj --294 TJm -(a) 4.4234 Tj --293 TJm -(table) 19.3673 Tj --294 TJm -(which) 24.3486 Tj --293 TJm -(summarises) 47.0434 Tj --294 TJm -(the) 12.1743 Tj --293 TJm -(maximum) 40.4083 Tj --294 TJm -(memory) 33.2053 Tj --293 TJm -(usage) 22.6848 Tj --294 TJm -(for) 11.6164 Tj --293 TJm -(dif) 11.0684 Tj -25 TJm -(ferent) 23.2328 Tj --294 TJm -(block) 22.1369 Tj --293 TJm -(sizes.) 21.8579 Tj --881 TJm -(Also) 18.8194 Tj --293 TJm -(recorded) 34.8492 Tj --294 TJm -(is) 6.6451 Tj --293 TJm -(the) 12.1743 Tj --294 TJm -(total) 17.7135 Tj -72 652.254 Td -(compressed) 47.0334 Tj --289 TJm -(size) 15.4918 Tj --289 TJm -(for) 11.6164 Tj --289 TJm -(14) 9.9626 Tj --289 TJm -(\002les) 16.6077 Tj --290 TJm -(of) 8.2988 Tj --289 TJm -(the) 12.1743 Tj --289 TJm -(Calg) 18.8194 Tj -5 TJm -(ary) 12.7222 Tj --289 TJm -(T) 6.0871 Tj -70 TJm -(e) 4.4234 Tj -15 TJm -(xt) 7.7509 Tj --289 TJm -(Compression) 52.5826 Tj --289 TJm -(Corpus) 28.782 Tj --289 TJm -(totalling) 33.2153 Tj --289 TJm -(3,141,622) 39.8504 Tj --290 TJm -(bytes.) 23.5217 Tj --854 TJm -(This) 17.7135 Tj --290 TJm -(column) 29.8878 Tj --289 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj -72 640.299 Td -(some) 21.031 Tj --253 TJm -(feel) 14.9339 Tj --253 TJm -(for) 11.6164 Tj --253 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --253 TJm -(compression) 50.3609 Tj --253 TJm -(v) 4.9813 Tj -25 TJm -(aries) 18.8094 Tj --253 TJm -(with) 17.7135 Tj --253 TJm -(block) 22.1369 Tj --253 TJm -(size.) 17.9825 Tj --638 TJm -(These) 23.7907 Tj --253 TJm -(\002gures) 27.1182 Tj --253 TJm -(tend) 17.1556 Tj --254 TJm -(to) 7.7509 Tj --253 TJm -(understate) 40.9463 Tj --253 TJm -(the) 12.1743 Tj --253 TJm -(adv) 14.386 Tj -25 TJm -(antage) 26.0024 Tj --253 TJm -(of) 8.2988 Tj --253 TJm -(lar) 10.5105 Tj -18 TJm -(ger) 12.7222 Tj --253 TJm -(block) 22.1369 Tj -72 628.344 Td -(sizes) 19.3673 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(lar) 10.5105 Tj -18 TJm -(ger) 12.7222 Tj --250 TJm -(\002les,) 19.0983 Tj --250 TJm -(since) 20.4731 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(Corpus) 28.782 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(dominated) 42.0621 Tj --250 TJm -(by) 9.9626 Tj --250 TJm -(smaller) 29.3299 Tj --250 TJm -(\002les.) 19.0983 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 469.773] cm -0 0 468 155.417 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -123.952 616.822 Td -/F124_0 9.9626 Tf -(Compress) 47.8205 Tj --1278 TJm -(Decompress) 59.7756 Tj --1278 TJm -(Decompress) 59.7756 Tj --1278 TJm -(Corpus) 35.8654 Tj -90 604.867 Td -(Flag) 23.9102 Tj --2130 TJm -(usage) 29.8878 Tj --2556 TJm -(usage) 29.8878 Tj --2982 TJm -(-s) 11.9551 Tj --426 TJm -(usage) 29.8878 Tj --2130 TJm -(Size) 23.9102 Tj -94.244 580.957 Td -(-1) 11.9551 Tj --2556 TJm -(1200k) 29.8878 Tj --2982 TJm -(500k) 23.9102 Tj --3834 TJm -(350k) 23.9102 Tj --2556 TJm -(914704) 35.8654 Tj -94.244 569.001 Td -(-2) 11.9551 Tj --2556 TJm -(2000k) 29.8878 Tj --2982 TJm -(900k) 23.9102 Tj --3834 TJm -(600k) 23.9102 Tj --2556 TJm -(877703) 35.8654 Tj -94.244 557.046 Td -(-3) 11.9551 Tj --2556 TJm -(2800k) 29.8878 Tj --2556 TJm -(1300k) 29.8878 Tj --3834 TJm -(850k) 23.9102 Tj --2556 TJm -(860338) 35.8654 Tj -94.244 545.091 Td -(-4) 11.9551 Tj --2556 TJm -(3600k) 29.8878 Tj --2556 TJm -(1700k) 29.8878 Tj --3408 TJm -(1100k) 29.8878 Tj --2556 TJm -(846899) 35.8654 Tj -94.244 533.136 Td -(-5) 11.9551 Tj --2556 TJm -(4400k) 29.8878 Tj --2556 TJm -(2100k) 29.8878 Tj --3408 TJm -(1350k) 29.8878 Tj --2556 TJm -(845160) 35.8654 Tj -94.244 521.181 Td -(-6) 11.9551 Tj --2556 TJm -(5200k) 29.8878 Tj --2556 TJm -(2500k) 29.8878 Tj --3408 TJm -(1600k) 29.8878 Tj --2556 TJm -(838626) 35.8654 Tj -94.244 509.225 Td -(-7) 11.9551 Tj --2556 TJm -(6100k) 29.8878 Tj --2556 TJm -(2900k) 29.8878 Tj --3408 TJm -(1850k) 29.8878 Tj --2556 TJm -(834096) 35.8654 Tj -94.244 497.27 Td -(-8) 11.9551 Tj --2556 TJm -(6800k) 29.8878 Tj --2556 TJm -(3300k) 29.8878 Tj --3408 TJm -(2100k) 29.8878 Tj --2556 TJm -(828642) 35.8654 Tj -94.244 485.315 Td -(-9) 11.9551 Tj --2556 TJm -(7600k) 29.8878 Tj --2556 TJm -(3700k) 29.8878 Tj --3408 TJm -(2350k) 29.8878 Tj --2556 TJm -(828642) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 435.021 Td -/F116_0 20.6585 Tf -(2.6.) 34.4584 Tj --278 TJm -(RECO) 59.6824 Tj -50 TJm -(VERING) 79.2047 Tj --278 TJm -(D) 14.9154 Tj -40 TJm -(A) 14.9154 Tj -90 TJm -(T) 12.6223 Tj -90 TJm -(A) 14.9154 Tj --278 TJm -(FR) 27.5378 Tj -20 TJm -(OM) 33.2808 Tj --278 TJm -(D) 14.9154 Tj -40 TJm -(AMA) 47.0394 Tj -50 TJm -(GED) 44.767 Tj -72 410.23 Td -(FILES) 58.5462 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 388.312 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -105.138 388.312 Td -/F122_0 9.9626 Tf -(compresses) 45.9276 Tj --326 TJm -(\002les) 16.6077 Tj --326 TJm -(in) 7.7509 Tj --326 TJm -(blocks,) 28.503 Tj --346 TJm -(usually) 28.782 Tj --326 TJm -(900kbytes) 40.9562 Tj --326 TJm -(long.) 20.2042 Tj --1077 TJm -(Each) 19.9152 Tj --326 TJm -(block) 22.1369 Tj --326 TJm -(is) 6.6451 Tj --327 TJm -(handled) 31.5416 Tj --326 TJm -(independently) 56.4481 Tj -65 TJm -(.) 2.4907 Tj --1077 TJm -(If) 6.6351 Tj --326 TJm -(a) 4.4234 Tj --326 TJm -(media) 24.3486 Tj --326 TJm -(or) 8.2988 Tj -72 376.357 Td -(transmission) 50.3709 Tj --319 TJm -(error) 19.3573 Tj --318 TJm -(causes) 26.0024 Tj --319 TJm -(a) 4.4234 Tj --318 TJm -(multi-block) 46.4955 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -234.519 376.357 Td -/F124_0 9.9626 Tf -(.bz2) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -261.603 376.357 Td -/F122_0 9.9626 Tf -(\002le) 12.7322 Tj --319 TJm -(to) 7.7509 Tj --318 TJm -(become) 30.9837 Tj --319 TJm -(damaged,) 38.4556 Tj --336 TJm -(i) 2.7696 Tj -1 TJm -(t) 2.7696 Tj --319 TJm -(may) 17.1556 Tj --319 TJm -(be) 9.4047 Tj --318 TJm -(possible) 32.6574 Tj --319 TJm -(to) 7.7509 Tj --318 TJm -(reco) 17.1456 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --319 TJm -(data) 16.5977 Tj --319 TJm -(from) 19.3673 Tj --318 TJm -(the) 12.1743 Tj -72 364.402 Td -(undamaged) 45.9276 Tj --250 TJm -(blocks) 26.0123 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(\002le.) 15.2229 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 342.484 Td -(The) 15.4918 Tj --358 TJm -(compressed) 47.0334 Tj --357 TJm -(representation) 56.4381 Tj --358 TJm -(of) 8.2988 Tj --357 TJm -(each) 18.2515 Tj --358 TJm -(block) 22.1369 Tj --358 TJm -(is) 6.6451 Tj --357 TJm -(delimited) 37.6387 Tj --358 TJm -(by) 9.9626 Tj --357 TJm -(a) 4.4234 Tj --358 TJm -(48-bit) 23.8007 Tj --358 TJm -(pattern,) 30.1568 Tj --384 TJm -(which) 24.3486 Tj --358 TJm -(mak) 17.1556 Tj -10 TJm -(es) 8.2988 Tj --357 TJm -(it) 5.5392 Tj --358 TJm -(possible) 32.6574 Tj --357 TJm -(to) 7.7509 Tj --358 TJm -(\002nd) 15.5018 Tj --358 TJm -(the) 12.1743 Tj -72 330.529 Td -(block) 22.1369 Tj --286 TJm -(boundaries) 43.7159 Tj --286 TJm -(with) 17.7135 Tj --285 TJm -(reasonable) 42.6001 Tj --286 TJm -(certainty) 34.8591 Tj -65 TJm -(.) 2.4907 Tj --835 TJm -(Each) 19.9152 Tj --285 TJm -(block) 22.1369 Tj --286 TJm -(also) 16.0497 Tj --286 TJm -(carries) 26.5503 Tj --286 TJm -(its) 9.4147 Tj --285 TJm -(o) 4.9813 Tj -25 TJm -(wn) 12.1743 Tj --286 TJm -(32-bit) 23.8007 Tj --286 TJm -(CRC,) 22.4258 Tj --286 TJm -(so) 8.8568 Tj --285 TJm -(damaged) 35.965 Tj --286 TJm -(blocks) 26.0123 Tj --286 TJm -(can) 13.8281 Tj --286 TJm -(be) 9.4047 Tj -72 318.574 Td -(distinguished) 53.1405 Tj --250 TJm -(from) 19.3673 Tj --250 TJm -(undamaged) 45.9276 Tj --250 TJm -(ones.) 20.7521 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 296.656 Td -/F124_0 9.9626 Tf -(bzip2recover) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -146.448 296.656 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --273 TJm -(a) 4.4234 Tj --272 TJm -(simple) 26.5703 Tj --273 TJm -(program) 33.7533 Tj --273 TJm -(whose) 25.4544 Tj --272 TJm -(purpose) 31.5416 Tj --273 TJm -(is) 6.6451 Tj --273 TJm -(to) 7.7509 Tj --272 TJm -(search) 25.4445 Tj --273 TJm -(for) 11.6164 Tj --273 TJm -(blocks) 26.0123 Tj --272 TJm -(in) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -392.655 296.656 Td -/F124_0 9.9626 Tf -(.bz2) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -419.282 296.656 Td -/F122_0 9.9626 Tf -(\002les,) 19.0983 Tj --278 TJm -(and) 14.386 Tj --273 TJm -(write) 20.4731 Tj --273 TJm -(each) 18.2515 Tj --272 TJm -(block) 22.1369 Tj --273 TJm -(out) 12.7322 Tj -72 284.701 Td -(into) 15.5018 Tj --255 TJm -(i) 2.7696 Tj -1 TJm -(ts) 6.6451 Tj --255 TJm -(o) 4.9813 Tj -25 TJm -(wn) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -121.429 284.701 Td -/F124_0 9.9626 Tf -(.bz2) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -147.875 284.701 Td -/F122_0 9.9626 Tf -(\002le.) 15.2229 Tj --647 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --255 TJm -(can) 13.8281 Tj --254 TJm -(then) 17.1556 Tj --255 TJm -(use) 13.2801 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -240.01 284.701 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj --600 TJm -(-t) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -290.367 284.701 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --254 TJm -(test) 13.8381 Tj --255 TJm -(the) 12.1743 Tj --254 TJm -(inte) 14.9439 Tj -15 TJm -(grity) 18.8194 Tj --255 TJm -(of) 8.2988 Tj --254 TJm -(the) 12.1743 Tj --255 TJm -(resulting) 34.8691 Tj --254 TJm -(\002les,) 19.0983 Tj --256 TJm -(and) 14.386 Tj --255 TJm -(decompress) 47.0334 Tj --254 TJm -(those) 21.031 Tj -72 272.746 Td -(which) 24.3486 Tj --250 TJm -(are) 12.1643 Tj --250 TJm -(undamaged.) 48.4182 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 250.828 Td -/F124_0 9.9626 Tf -(bzip2recover) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -150.099 250.828 Td -/F122_0 9.9626 Tf -(tak) 12.1743 Tj -10 TJm -(es) 8.2988 Tj --639 TJm -(a) 4.4234 Tj --639 TJm -(single) 23.8007 Tj --639 TJm -(ar) 7.7409 Tj -18 TJm -(gument,) 32.3785 Tj --737 TJm -(the) 12.1743 Tj --639 TJm -(name) 21.579 Tj --639 TJm -(of) 8.2988 Tj --639 TJm -(the) 12.1743 Tj --639 TJm -(damaged) 35.965 Tj --639 TJm -(\002le,) 15.2229 Tj --737 TJm -(and) 14.386 Tj --639 TJm -(writes) 24.3486 Tj --639 TJm -(a) 4.4234 Tj --639 TJm -(number) 30.4357 Tj --639 TJm -(of) 8.2988 Tj --640 TJm -(\002) 5.5392 Tj -1 TJm -(les) 11.0684 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 238.873 Td -/F124_0 9.9626 Tf -(rec0001file.bz2) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -161.664 238.873 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -169.072 238.873 Td -/F124_0 9.9626 Tf -(rec0002file.bz2) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -258.736 238.873 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --494 TJm -(etc,) 14.107 Tj --493 TJm -(containing) 42.0621 Tj --445 TJm -(the) 12.1743 Tj --445 TJm -(e) 4.4234 Tj -15 TJm -(xtracted) 32.0895 Tj --445 TJm -(blocks.) 28.503 Tj --1789 TJm -(The) 15.4918 Tj --445 TJm -(output) 25.4644 Tj --445 TJm -(\002lenames) 38.1866 Tj --445 TJm -(are) 12.1643 Tj -72 226.918 Td -(designed) 35.417 Tj --337 TJm -(so) 8.8568 Tj --337 TJm -(that) 14.9439 Tj --337 TJm -(the) 12.1743 Tj --337 TJm -(use) 13.2801 Tj --337 TJm -(of) 8.2988 Tj --337 TJm -(wildc) 22.1369 Tj -1 TJm -(ards) 16.5977 Tj --337 TJm -(in) 7.7509 Tj --337 TJm -(subsequent) 44.2738 Tj --337 TJm -(processing) 42.61 Tj --337 TJm -(--) 6.6351 Tj --337 TJm -(for) 11.6164 Tj --337 TJm -(e) 4.4234 Tj -15 TJm -(xample,) 31.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -396.538 226.918 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj --600 TJm -(-dc) 17.9327 Tj --600 TJm -(rec) 17.9327 Tj -474.247 225.174 Td -(*) 5.9776 Tj -480.224 226.918 Td -(file.bz2) 47.8205 Tj --600 TJm -(>) 5.9776 Tj -72 214.962 Td -(recovered_data) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -158.177 214.962 Td -/F122_0 9.9626 Tf -(--) 6.6351 Tj --250 TJm -(lists) 16.0597 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(\002les) 16.6077 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(correct) 27.6562 Tj --250 TJm -(order) 21.0211 Tj -55 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 193.045 Td -/F124_0 9.9626 Tf -(bzip2recover) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -145.93 193.045 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --221 TJm -(be) 9.4047 Tj --220 TJm -(of) 8.2988 Tj --221 TJm -(most) 19.3773 Tj --221 TJm -(use) 13.2801 Tj --220 TJm -(dealing) 29.3299 Tj --221 TJm -(with) 17.7135 Tj --221 TJm -(lar) 10.5105 Tj -18 TJm -(ge) 9.4047 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -307.229 193.045 Td -/F124_0 9.9626 Tf -(.bz2) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -333.338 193.045 Td -/F122_0 9.9626 Tf -(\002les,) 19.0983 Tj --227 TJm -(as) 8.2988 Tj --220 TJm -(these) 20.4731 Tj --221 TJm -(will) 15.5018 Tj --221 TJm -(contain) 29.3299 Tj --220 TJm -(man) 17.1556 Tj -15 TJm -(y) 4.9813 Tj --221 TJm -(blocks.) 28.503 Tj --600 TJm -(It) 6.0871 Tj --221 TJm -(is) 6.6451 Tj --221 TJm -(clearly) 27.1082 Tj -72 181.089 Td -(futile) 21.031 Tj --289 TJm -(to) 7.7509 Tj --289 TJm -(use) 13.2801 Tj --289 TJm -(it) 5.5392 Tj --289 TJm -(on) 9.9626 Tj --289 TJm -(damaged) 35.965 Tj --289 TJm -(single-block) 49.2551 Tj --290 TJm -(\002les) 16.6077 Tj -1 TJm -(,) 2.4907 Tj --299 TJm -(since) 20.4731 Tj --289 TJm -(a) 4.4234 Tj --290 TJm -(damaged) 35.965 Tj --289 TJm -(block) 22.1369 Tj --289 TJm -(cannot) 26.5603 Tj --289 TJm -(be) 9.4047 Tj --289 TJm -(reco) 17.1456 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(ered.) 19.6363 Tj --854 TJm -(If) 6.6351 Tj --289 TJm -(you) 14.9439 Tj --290 TJm -(wish) 18.8194 Tj --289 TJm -(to) 7.7509 Tj --289 TJm -(minimise) 37.0908 Tj -72 169.134 Td -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --320 TJm -(potential) 34.8691 Tj --320 TJm -(data) 16.5977 Tj --319 TJm -(loss) 15.5018 Tj --320 TJm -(through) 30.9936 Tj --320 TJm -(media) 24.3486 Tj --320 TJm -(or) 8.2988 Tj --319 TJm -(transmission) 50.3709 Tj --320 TJm -(errors,) 25.7234 Tj --337 TJm -(you) 14.9439 Tj --320 TJm -(might) 23.2527 Tj --320 TJm -(consider) 33.7533 Tj --320 TJm -(compressing) 50.3609 Tj --319 TJm -(with) 17.7135 Tj --320 TJm -(a) 4.4234 Tj --320 TJm -(smaller) 29.3299 Tj --320 TJm -(block) 22.1369 Tj -72 157.179 Td -(size.) 17.9825 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 122.426 Td -/F116_0 20.6585 Tf -(2.7.) 34.4584 Tj --278 TJm -(PERFORMANCE) 161.818 Tj --278 TJm -(NO) 30.9878 Tj -40 TJm -(TES) 40.1808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 100.508 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --305 TJm -(sorting) 27.6761 Tj --304 TJm -(phase) 22.6848 Tj --305 TJm -(of) 8.2988 Tj --304 TJm -(compression) 50.3609 Tj --305 TJm -(g) 4.9813 Tj -5 TJm -(athers) 23.7907 Tj --304 TJm -(together) 32.6474 Tj --305 TJm -(similar) 27.6761 Tj --304 TJm -(strings) 26.5703 Tj --305 TJm -(in) 7.7509 Tj --304 TJm -(the) 12.1743 Tj --305 TJm -(\002le.) 15.2229 Tj --947 TJm -(Because) 33.1954 Tj --305 TJm -(of) 8.2988 Tj --304 TJm -(this,) 16.8866 Tj --319 TJm -(\002les) 16.6077 Tj --304 TJm -(containing) 42.0621 Tj --305 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj -72 88.553 Td -(long) 17.7135 Tj --286 TJm -(runs) 17.1556 Tj --285 TJm -(of) 8.2988 Tj --286 TJm -(repeated) 33.7433 Tj --285 TJm -(symbols,) 35.706 Tj --295 TJm -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --286 TJm -("aabaabaabaab) 59.3771 Tj --285 TJm -(...") 11.5367 Tj --571 TJm -(\(repeated) 37.0609 Tj --286 TJm -(se) 8.2988 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(eral) 14.9339 Tj --286 TJm -(hundred) 32.6474 Tj --285 TJm -(times\)) 24.9065 Tj --286 TJm -(may) 17.1556 Tj --286 TJm -(com) 17.1556 Tj -1 TJm -(press) 20.4731 Tj --286 TJm -(more) 20.4731 Tj --286 TJm -(slo) 11.6264 Tj -25 TJm -(wly) 14.9439 Tj -72 76.598 Td -(than) 17.1556 Tj --322 TJm -(normal.) 30.7147 Tj --524 TJm -(V) 7.193 Tj -111 TJm -(ersions) 28.224 Tj --322 TJm -(0.9.5) 19.9252 Tj --321 TJm -(and) 14.386 Tj --322 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --322 TJm -(f) 3.3175 Tj -10 TJm -(are) 12.1643 Tj --321 TJm -(much) 22.1369 Tj --322 TJm -(better) 22.6848 Tj --321 TJm -(than) 17.1556 Tj --322 TJm -(pre) 12.7222 Tj -25 TJm -(vious) 21.589 Tj --321 TJm -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj --322 TJm -(in) 7.7509 Tj --322 TJm -(this) 14.396 Tj --321 TJm -(respect.) 30.7047 Tj --1050 TJm -(The) 15.4918 Tj --321 TJm -(ratio) 18.2614 Tj --322 TJm -(between) 33.1954 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -539.395 50.951 Td -(6) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 7 10 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -477.109 749.245 Td -/F122_0 9.9626 Tf -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(w) 7.193 Tj -10 TJm -(orst-case) 35.4071 Tj --289 TJm -(and) 14.386 Tj --290 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(erage-case) 42.0322 Tj --289 TJm -(compression) 50.3609 Tj --290 TJm -(time) 17.7135 Tj --289 TJm -(is) 6.6451 Tj --290 TJm -(in) 7.7509 Tj --289 TJm -(the) 12.1743 Tj --290 TJm -(re) 7.7409 Tj -15 TJm -(gion) 17.7135 Tj --289 TJm -(of) 8.2988 Tj --289 TJm -(10:1.) 20.2042 Tj --857 TJm -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --290 TJm -(pre) 12.7222 Tj -25 TJm -(vious) 21.589 Tj --289 TJm -(v) 4.9813 Tj -15 TJm -(ersions,) 30.7147 Tj --299 TJm -(this) 14.396 Tj --290 TJm -(\002gure) 23.2427 Tj --289 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --290 TJm -(more) 20.4731 Tj -72 698.082 Td -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --250 TJm -(100:1.) 25.1855 Tj --620 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --250 TJm -(can) 13.8281 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -186.002 698.082 Td -/F124_0 9.9626 Tf -(-vvvv) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -218.38 698.082 Td -/F122_0 9.9626 Tf -(option) 25.4644 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(monitor) 31.5516 Tj --250 TJm -(progress) 33.7533 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(great) 19.9152 Tj --250 TJm -(detail,) 24.6275 Tj --250 TJm -(if) 6.0871 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ant.) 14.6649 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 676.164 Td -(Decompression) 61.9773 Tj --250 TJm -(speed) 22.6848 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(unaf) 17.7035 Tj -25 TJm -(fected) 24.3386 Tj --250 TJm -(by) 9.9626 Tj --250 TJm -(these) 20.4731 Tj --250 TJm -(phenomena.) 48.4182 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 654.247 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.863 654.247 Td -/F122_0 9.9626 Tf -(usually) 28.782 Tj --299 TJm -(allocates) 34.8591 Tj --298 TJm -(se) 8.2988 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(eral) 14.9339 Tj --299 TJm -(me) 12.1743 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(abytes) 25.4544 Tj --298 TJm -(of) 8.2988 Tj --299 TJm -(memory) 33.2053 Tj --299 TJm -(to) 7.7509 Tj --298 TJm -(operate) 29.3199 Tj --299 TJm -(in,) 10.2416 Tj --311 TJm -(and) 14.386 Tj --298 TJm -(then) 17.1556 Tj --299 TJm -(char) 17.1456 Tj -18 TJm -(ges) 13.2801 Tj --298 TJm -(all) 9.9626 Tj --299 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --299 TJm -(it) 5.5392 Tj --298 TJm -(in) 7.7509 Tj --299 TJm -(a) 4.4234 Tj --298 TJm -(f) 3.3175 Tj -10 TJm -(airly) 18.2614 Tj --299 TJm -(random) 30.4357 Tj -72 642.291 Td -(f) 3.3175 Tj -10 TJm -(ashion.) 28.503 Tj --743 TJm -(This) 17.7135 Tj --270 TJm -(means) 25.4544 Tj --271 TJm -(that) 14.9439 Tj --270 TJm -(performance,) 52.8317 Tj --276 TJm -(both) 17.7135 Tj --270 TJm -(for) 11.6164 Tj --271 TJm -(compressing) 50.3609 Tj --270 TJm -(and) 14.386 Tj --271 TJm -(decompressing,) 62.2563 Tj --275 TJm -(is) 6.6451 Tj --271 TJm -(lar) 10.5105 Tj -18 TJm -(gely) 17.1556 Tj --270 TJm -(determined) 44.8217 Tj --271 TJm -(by) 9.9626 Tj --270 TJm -(the) 12.1743 Tj --271 TJm -(speed) 22.6848 Tj -72 630.336 Td -(at) 7.193 Tj --294 TJm -(which) 24.3486 Tj --294 TJm -(your) 18.2614 Tj --294 TJm -(machine) 33.7533 Tj --295 TJm -(ca) 8.8468 Tj -1 TJm -(n) 4.9813 Tj --295 TJm -(service) 28.2141 Tj --294 TJm -(cache) 22.6749 Tj --294 TJm -(misses.) 29.0609 Tj --442 TJm -(Because) 33.1954 Tj --294 TJm -(of) 8.2988 Tj --294 TJm -(this,) 16.8866 Tj --306 TJm -(small) 21.589 Tj --294 TJm -(changes) 32.0895 Tj --294 TJm -(to) 7.7509 Tj --294 TJm -(the) 12.1743 Tj --294 TJm -(code) 18.8094 Tj --294 TJm -(to) 7.7509 Tj --294 TJm -(reduce) 26.5503 Tj --294 TJm -(the) 12.1743 Tj --295 TJm -(miss) 18.2714 Tj --294 TJm -(rate) 14.9339 Tj -72 618.381 Td -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --253 TJm -(been) 18.8094 Tj --253 TJm -(observ) 26.5603 Tj -15 TJm -(ed) 9.4047 Tj --253 TJm -(to) 7.7509 Tj --253 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --253 TJm -(disproportionately) 73.0557 Tj --253 TJm -(lar) 10.5105 Tj -18 TJm -(ge) 9.4047 Tj --253 TJm -(performance) 50.341 Tj --253 TJm -(impro) 23.8007 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(ements.) 30.7147 Tj --639 TJm -(I) 3.3175 Tj --253 TJm -(imagine) 32.0995 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -438.909 618.381 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -471.318 618.381 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --253 TJm -(perform) 32.0895 Tj --253 TJm -(best) 16.0497 Tj -72 606.426 Td -(on) 9.9626 Tj --250 TJm -(machines) 37.6287 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj --250 TJm -(lar) 10.5105 Tj -18 TJm -(ge) 9.4047 Tj --250 TJm -(caches.) 29.041 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 571.673 Td -/F116_0 20.6585 Tf -(2.8.) 34.4584 Tj --278 TJm -(CA) 29.8309 Tj -80 TJm -(VEA) 42.4739 Tj -90 TJm -(TS) 26.4016 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 549.755 Td -/F122_0 9.9626 Tf -(I/O) 13.2801 Tj --268 TJm -(error) 19.3573 Tj --267 TJm -(messages) 37.6287 Tj --268 TJm -(are) 12.1643 Tj --268 TJm -(not) 12.7322 Tj --268 TJm -(as) 8.2988 Tj --267 TJm -(helpful) 28.224 Tj --268 TJm -(as) 8.2988 Tj --268 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --267 TJm -(could) 22.1369 Tj --268 TJm -(be.) 11.8953 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -293.313 549.755 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -325.868 549.755 Td -/F122_0 9.9626 Tf -(tries) 17.1556 Tj --268 TJm -(hard) 17.7035 Tj --267 TJm -(to) 7.7509 Tj --268 TJm -(detect) 23.7907 Tj --268 TJm -(I/O) 13.2801 Tj --268 TJm -(errors) 23.2328 Tj --267 TJm -(and) 14.386 Tj --268 TJm -(e) 4.4234 Tj -15 TJm -(xit) 10.5205 Tj --268 TJm -(cleanly) 28.772 Tj -65 TJm -(,) 2.4907 Tj --272 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --268 TJm -(the) 12.1743 Tj -72 537.8 Td -(details) 26.0123 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(what) 19.3673 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(problem) 33.2053 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(sometimes) 42.62 Tj --250 TJm -(seem) 20.4731 Tj --250 TJm -(rather) 23.2328 Tj --250 TJm -(misleading.) 46.2165 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 515.882 Td -(This) 17.7135 Tj --280 TJm -(manual) 29.3299 Tj --279 TJm -(page) 18.8094 Tj --280 TJm -(pertains) 31.5416 Tj --280 TJm -(to) 7.7509 Tj --279 TJm -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --280 TJm -(1.0.6) 19.9252 Tj --280 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -256.84 515.882 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -286.728 515.882 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --798 TJm -(Compressed) 49.2551 Tj --280 TJm -(data) 16.5977 Tj --279 TJm -(created) 28.762 Tj --280 TJm -(by) 9.9626 Tj --280 TJm -(this) 14.396 Tj --279 TJm -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --280 TJm -(is) 6.6451 Tj --280 TJm -(entirely) 30.4357 Tj --279 TJm -(forw) 18.8094 Tj -10 TJm -(ards) 16.5977 Tj -72 503.927 Td -(and) 14.386 Tj --294 TJm -(backw) 26.0024 Tj -10 TJm -(ards) 16.5977 Tj --293 TJm -(compatible) 44.2738 Tj --294 TJm -(with) 17.7135 Tj --294 TJm -(the) 12.1743 Tj --293 TJm -(pre) 12.7222 Tj -25 TJm -(vious) 21.589 Tj --294 TJm -(public) 24.9065 Tj --294 TJm -(releases,) 34.0223 Tj --304 TJm -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj --294 TJm -(0.1pl2,) 27.6761 Tj --305 TJm -(0.9.0) 19.9252 Tj --293 TJm -(and) 14.386 Tj --294 TJm -(0.9.5,) 22.4159 Tj --305 TJm -(1.0.0,) 22.4159 Tj --304 TJm -(1.0.1,) 22.4159 Tj --305 TJm -(1.0.2) 19.9252 Tj --294 TJm -(and) 14.386 Tj -72 491.972 Td -(1.0.3,) 22.4159 Tj --263 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --260 TJm -(with) 17.7135 Tj --260 TJm -(the) 12.1743 Tj --260 TJm -(follo) 18.8194 Tj -25 TJm -(wing) 19.9252 Tj --260 TJm -(e) 4.4234 Tj -15 TJm -(xception:) 37.0808 Tj --330 TJm -(0.9.0) 19.9252 Tj --260 TJm -(and) 14.386 Tj --260 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --260 TJm -(can) 13.8281 Tj --260 TJm -(correctly) 35.4071 Tj --260 TJm -(decompress) 47.0334 Tj --260 TJm -(multiple) 33.2153 Tj --260 TJm -(concatenated) 52.0048 Tj --260 TJm -(compressed) 47.0334 Tj -72 480.017 Td -(\002les.) 19.0983 Tj --310 TJm -(0.1pl2) 25.1855 Tj --250 TJm -(cannot) 26.5603 Tj --250 TJm -(do) 9.9626 Tj --250 TJm -(this;) 17.1656 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(will) 15.5018 Tj --250 TJm -(stop) 16.6077 Tj --250 TJm -(after) 18.2515 Tj --250 TJm -(decompressing) 59.7656 Tj --250 TJm -(just) 14.396 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(\002rst) 15.5018 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 458.099 Td -/F124_0 9.9626 Tf -(bzip2recover) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -146.174 458.099 Td -/F122_0 9.9626 Tf -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj --245 TJm -(prior) 19.3673 Tj --245 TJm -(to) 7.7509 Tj --245 TJm -(1.0.2) 19.9252 Tj --246 TJm -(used) 18.2614 Tj --245 TJm -(32-bit) 23.8007 Tj --245 TJm -(inte) 14.9439 Tj -15 TJm -(gers) 16.5977 Tj --245 TJm -(to) 7.7509 Tj --245 TJm -(represent) 36.5129 Tj --245 TJm -(bit) 10.5205 Tj --246 TJm -(positions) 35.9849 Tj --245 TJm -(in) 7.7509 Tj --245 TJm -(compressed) 47.0334 Tj --245 TJm -(\002les,) 19.0983 Tj --246 TJm -(so) 8.8568 Tj --245 TJm -(it) 5.5392 Tj --245 TJm -(could) 22.1369 Tj -72 446.144 Td -(not) 12.7322 Tj --384 TJm -(handle) 26.5603 Tj --383 TJm -(compressed) 47.0334 Tj --384 TJm -(\002les) 16.6077 Tj --383 TJm -(more) 20.4731 Tj --384 TJm -(than) 17.1556 Tj --383 TJm -(512) 14.9439 Tj --384 TJm -(me) 12.1743 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(abytes) 25.4544 Tj --383 TJm -(long.) 20.2042 Tj --1421 TJm -(V) 7.193 Tj -111 TJm -(ersions) 28.224 Tj --384 TJm -(1.0.2) 19.9252 Tj --383 TJm -(and) 14.386 Tj --384 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --384 TJm -(use) 13.2801 Tj --383 TJm -(64-bit) 23.8007 Tj --384 TJm -(ints) 14.396 Tj --383 TJm -(on) 9.9626 Tj --384 TJm -(some) 21.031 Tj -72 434.189 Td -(platforms) 38.1866 Tj --245 TJm -(which) 24.3486 Tj --246 TJm -(support) 29.8878 Tj --245 TJm -(them) 19.9252 Tj --246 TJm -(\(GNU) 24.8965 Tj --245 TJm -(supported) 39.2925 Tj --245 TJm -(tar) 10.5105 Tj -18 TJm -(gets,) 18.5404 Tj --247 TJm -(and) 14.386 Tj --245 TJm -(W) 9.4047 Tj -40 TJm -(indo) 17.7135 Tj -25 TJm -(ws\).) 16.8766 Tj --309 TJm -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --245 TJm -(establish) 34.8691 Tj --245 TJm -(whether) 32.0895 Tj --246 TJm -(or) 8.2988 Tj --245 TJm -(not) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -468.269 434.189 Td -/F124_0 9.9626 Tf -(bzip2recover) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 422.233 Td -/F122_0 9.9626 Tf -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --255 TJm -(b) 4.9813 Tj -20 TJm -(uilt) 13.2901 Tj --255 TJm -(with) 17.7135 Tj --255 TJm -(such) 18.2614 Tj --255 TJm -(a) 4.4234 Tj --255 TJm -(limitation,) 41.2452 Tj --256 TJm -(run) 13.2801 Tj --255 TJm -(it) 5.5392 Tj --255 TJm -(without) 30.4457 Tj --255 TJm -(ar) 7.7409 Tj -18 TJm -(guments.) 36.2539 Tj --325 TJm -(In) 8.2988 Tj --255 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --256 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ent) 12.1743 Tj --255 TJm -(you) 14.9439 Tj --255 TJm -(can) 13.8281 Tj --255 TJm -(b) 4.9813 Tj -20 TJm -(uild) 15.5018 Tj --255 TJm -(yourself) 32.6474 Tj --255 TJm -(an) 9.4047 Tj --255 TJm -(unlimited) 38.1966 Tj --255 TJm -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --255 TJm -(if) 6.0871 Tj -72 410.278 Td -(you) 14.9439 Tj --250 TJm -(can) 13.8281 Tj --250 TJm -(recompile) 39.8404 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -176.318 410.278 Td -/F124_0 9.9626 Tf -(MaybeUInt64) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -244.562 410.278 Td -/F122_0 9.9626 Tf -(set) 11.0684 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(an) 9.4047 Tj --250 TJm -(unsigned) 35.9749 Tj --250 TJm -(64-bit) 23.8007 Tj --250 TJm -(inte) 14.9439 Tj -15 TJm -(ger) 12.7222 Tj -55 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 375.525 Td -/F116_0 20.6585 Tf -(2.9.) 34.4584 Tj --278 TJm -(A) 14.9154 Tj -50 TJm -(UTHOR) 73.441 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 353.607 Td -/F122_0 9.9626 Tf -(Julian) 23.8007 Tj --250 TJm -(Se) 9.9626 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(ard,) 15.2129 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -132.801 353.607 Td -/F124_0 9.9626 Tf -(jseward@bzip.org) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 331.69 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --299 TJm -(ideas) 20.4731 Tj --300 TJm -(embodied) 39.2925 Tj --299 TJm -(in) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -166.942 331.69 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -199.813 331.69 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj --299 TJm -(du) 9.9626 Tj --1 TJm -(e) 4.4234 Tj --299 TJm -(to) 7.7509 Tj --299 TJm -(\(at) 10.5105 Tj --300 TJm -(least\)) 21.579 Tj --299 TJm -(the) 12.1743 Tj --300 TJm -(follo) 18.8194 Tj -25 TJm -(wing) 19.9252 Tj --299 TJm -(people:) 29.3299 Tj --409 TJm -(Michael) 32.6474 Tj --300 TJm -(Burro) 23.2427 Tj -25 TJm -(ws) 11.0684 Tj --299 TJm -(and) 14.386 Tj --300 TJm -(Da) 11.6164 Tj -20 TJm -(vid) 12.7322 Tj --299 TJm -(Wheeler) 33.7433 Tj --299 TJm -(\(for) 14.9339 Tj -72 319.735 Td -(the) 12.1743 Tj --312 TJm -(block) 22.1369 Tj --313 TJm -(sorting) 27.6761 Tj --312 TJm -(transformation\),) 64.468 Tj --328 TJm -(Da) 11.6164 Tj -20 TJm -(vid) 12.7322 Tj --312 TJm -(Wheeler) 33.7433 Tj --313 TJm -(\(ag) 12.7222 Tj -5 TJm -(ain,) 14.6649 Tj --327 TJm -(for) 11.6164 Tj --313 TJm -(the) 12.1743 Tj --312 TJm -(Huf) 15.4918 Tj -25 TJm -(fman) 20.4731 Tj --312 TJm -(coder\),) 27.9351 Tj --328 TJm -(Peter) 20.4731 Tj --313 TJm -(Fenwick) 34.3112 Tj --312 TJm -(\(for) 14.9339 Tj --312 TJm -(the) 12.1743 Tj --313 TJm -(structured) 39.8404 Tj -72 307.779 Td -(coding) 27.1182 Tj --325 TJm -(model) 24.9065 Tj --326 TJm -(in) 7.7509 Tj --325 TJm -(the) 12.1743 Tj --326 TJm -(original) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -191.156 307.779 Td -/F124_0 9.9626 Tf -(bzip) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -215.067 307.779 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --344 TJm -(and) 14.386 Tj --326 TJm -(man) 17.1556 Tj -15 TJm -(y) 4.9813 Tj --325 TJm -(re\002nements\),) 52.2937 Tj --345 TJm -(and) 14.386 Tj --325 TJm -(Alistair) 29.8878 Tj --326 TJm -(Mof) 17.1556 Tj -25 TJm -(f) 3.3175 Tj -10 TJm -(at,) 9.6836 Tj --344 TJm -(Radford) 32.6474 Tj --325 TJm -(Neal) 18.8094 Tj --326 TJm -(and) 14.386 Tj --325 TJm -(Ian) 12.7222 Tj --326 TJm -(W) 9.4047 Tj -40 TJm -(itten) 17.7135 Tj --325 TJm -(\(for) 14.9339 Tj -72 295.824 Td -(the) 12.1743 Tj --277 TJm -(arithmetic) 40.3983 Tj --277 TJm -(coder) 22.1269 Tj --277 TJm -(in) 7.7509 Tj --277 TJm -(the) 12.1743 Tj --277 TJm -(original) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -214.171 295.824 Td -/F124_0 9.9626 Tf -(bzip) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -238.082 295.824 Td -/F122_0 9.9626 Tf -(\).) 5.8082 Tj --782 TJm -(I) 3.3175 Tj --277 TJm -(am) 12.1743 Tj --276 TJm -(much) 22.1369 Tj --277 TJm -(indebted) 34.3112 Tj --277 TJm -(for) 11.6164 Tj --277 TJm -(their) 18.2614 Tj --277 TJm -(help,) 19.6462 Tj --284 TJm -(support) 29.8878 Tj --277 TJm -(and) 14.386 Tj --277 TJm -(advice.) 28.493 Tj --781 TJm -(See) 14.386 Tj --277 TJm -(the) 12.1743 Tj --277 TJm -(manual) 29.3299 Tj -72 283.869 Td -(in) 7.7509 Tj --330 TJm -(the) 12.1743 Tj --330 TJm -(source) 26.0024 Tj --330 TJm -(distrib) 25.4644 Tj -20 TJm -(ution) 20.4831 Tj --330 TJm -(for) 11.6164 Tj --329 TJm -(pointers) 32.0995 Tj --330 TJm -(to) 7.7509 Tj --330 TJm -(sources) 29.8778 Tj --330 TJm -(of) 8.2988 Tj --330 TJm -(documentation.) 61.7083 Tj --1099 TJm -(Christian) 36.5329 Tj --330 TJm -(v) 4.9813 Tj -20 TJm -(on) 9.9626 Tj --330 TJm -(Roques) 29.8878 Tj --330 TJm -(encouraged) 45.9176 Tj --330 TJm -(me) 12.1743 Tj --330 TJm -(to) 7.7509 Tj --330 TJm -(look) 17.7135 Tj -72 271.914 Td -(for) 11.6164 Tj --271 TJm -(f) 3.3175 Tj -10 TJm -(aster) 18.8094 Tj --271 TJm -(sorting) 27.6761 Tj --271 TJm -(algorithms,) 45.1107 Tj --276 TJm -(so) 8.8568 Tj --272 TJm -(as) 8.2988 Tj --271 TJm -(to) 7.7509 Tj --271 TJm -(speed) 22.6848 Tj --271 TJm -(up) 9.9626 Tj --271 TJm -(compression.) 52.8516 Tj --746 TJm -(Bela) 18.2614 Tj --271 TJm -(Lubkin) 28.782 Tj --271 TJm -(encouraged) 45.9176 Tj --271 TJm -(me) 12.1743 Tj --272 TJm -(to) 7.7509 Tj --271 TJm -(impro) 23.8007 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --271 TJm -(the) 12.1743 Tj --271 TJm -(w) 7.193 Tj -10 TJm -(orst-case) 35.4071 Tj -72 259.959 Td -(compression) 50.3609 Tj --340 TJm -(performance.) 52.8317 Tj --580 TJm -(Donna) 26.5603 Tj --339 TJm -(Robinson) 38.1966 Tj --340 TJm -(XMLised) 38.1866 Tj --340 TJm -(the) 12.1743 Tj --340 TJm -(documentation.) 61.7083 Tj --580 TJm -(Man) 18.2614 Tj -15 TJm -(y) 4.9813 Tj --340 TJm -(people) 26.5603 Tj --340 TJm -(sent) 16.0497 Tj --339 TJm -(patches,) 32.3685 Tj --363 TJm -(helped) 26.5603 Tj --340 TJm -(with) 17.7135 Tj -72 248.003 Td -(portability) 41.5142 Tj --250 TJm -(problems,) 39.5714 Tj --250 TJm -(lent) 14.9439 Tj --250 TJm -(machines,) 40.1194 Tj --250 TJm -(g) 4.9813 Tj -5 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(advice) 26.0024 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(were) 19.3573 Tj --250 TJm -(generally) 37.0708 Tj --250 TJm -(helpful.) 30.7147 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -539.395 50.951 Td -(7) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 8 11 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 75.786 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 701.916 Td -/F116_0 24.7902 Tf -(3.) 20.675 Tj --556 TJm -(Pr) 26.1785 Tj -20 TJm -(ogramming) 134.9826 Tj --278 TJm -(with) 49.5804 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -330.484 701.916 Td -/F440_0 24.7902 Tf -(libbzip2) 118.993 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 656.35 Td -/F116_0 17.2154 Tf -(T) 10.5186 Tj -80 TJm -(ab) 20.0904 Tj -10 TJm -(le) 14.3576 Tj --278 TJm -(of) 16.2513 Tj --278 TJm -(Contents) 74.5943 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 635.788 Td -/F122_0 9.9626 Tf -(3.1.) 14.9439 Tj --310 TJm -(T) 6.0871 Tj -80 TJm -(op-le) 20.4731 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(structure) 34.8591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -179.997 635.788 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 635.788 Td -/F122_0 9.9626 Tf -(8) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 623.832 Td -(3.1.1.) 22.4159 Tj --310 TJm -(Lo) 11.0684 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(summary) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -192.866 623.832 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 623.832 Td -/F122_0 9.9626 Tf -(9) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 611.877 Td -(3.1.2.) 22.4159 Tj --310 TJm -(High-le) 30.4357 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(summary) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -193.822 611.877 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 611.877 Td -/F122_0 9.9626 Tf -(9) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 599.922 Td -(3.1.3.) 22.4159 Tj --310 TJm -(Utility) 26.0223 Tj --250 TJm -(functions) 37.0808 Tj --250 TJm -(summary) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -216.582 599.922 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.108 599.922 Td -/F122_0 9.9626 Tf -(9) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 587.967 Td -(3.2.) 14.9439 Tj --310 TJm -(Error) 21.0211 Tj --250 TJm -(handling) 34.8691 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -162.611 587.967 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 587.967 Td -/F122_0 9.9626 Tf -(10) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 576.012 Td -(3.3.) 14.9439 Tj --310 TJm -(Lo) 11.0684 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -181.045 576.012 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 576.012 Td -/F122_0 9.9626 Tf -(11) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 564.057 Td -(3.3.1.) 22.4159 Tj --310 TJm -(BZ2_bzCompressInit) 85.7879 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -197.762 564.057 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 564.057 Td -/F122_0 9.9626 Tf -(11) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 552.101 Td -(3.3.2.) 22.4159 Tj --310 TJm -(BZ2_bzCompress) 71.9499 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -184.201 552.101 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 552.101 Td -/F122_0 9.9626 Tf -(13) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 540.146 Td -(3.3.3.) 22.4159 Tj --310 TJm -(BZ2_bzCompressEnd) 87.9996 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -198.868 540.146 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 540.146 Td -/F122_0 9.9626 Tf -(16) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 528.191 Td -(3.3.4.) 22.4159 Tj --310 TJm -(BZ2_bzDecompressInit) 95.1827 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -206.887 528.191 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 528.191 Td -/F122_0 9.9626 Tf -(16) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 516.236 Td -(3.3.5.) 22.4159 Tj --310 TJm -(BZ2_bzDecompress) 81.3446 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -193.326 516.236 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 516.236 Td -/F122_0 9.9626 Tf -(17) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 504.281 Td -(3.3.6.) 22.4159 Tj --310 TJm -(BZ2_bzDecompressEnd) 97.3944 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.207 504.281 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 504.281 Td -/F122_0 9.9626 Tf -(18) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 492.325 Td -(3.4.) 14.9439 Tj --310 TJm -(High-le) 30.4357 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -184.216 492.325 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 492.325 Td -/F122_0 9.9626 Tf -(18) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 480.37 Td -(3.4.1.) 22.4159 Tj --310 TJm -(BZ2_bzReadOpen) 74.1516 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -185.302 480.37 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 480.37 Td -/F122_0 9.9626 Tf -(19) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 468.415 Td -(3.4.2.) 22.4159 Tj --310 TJm -(BZ2_bzRead) 52.5726 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -163.443 468.415 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 468.415 Td -/F122_0 9.9626 Tf -(20) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 456.46 Td -(3.4.3.) 22.4159 Tj --310 TJm -(BZ2_bzReadGetUnused) 97.3944 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.207 456.46 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 456.46 Td -/F122_0 9.9626 Tf -(21) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 444.505 Td -(3.4.4.) 22.4159 Tj --310 TJm -(BZ2_bzReadClose) 75.2674 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.074 444.505 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 444.505 Td -/F122_0 9.9626 Tf -(22) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 432.55 Td -(3.4.5.) 22.4159 Tj --310 TJm -(BZ2_bzWriteOpen) 76.3633 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.622 432.55 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 432.55 Td -/F122_0 9.9626 Tf -(22) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 420.594 Td -(3.4.6.) 22.4159 Tj --310 TJm -(BZ2_bzWrite) 54.7843 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -166.763 420.594 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 420.594 Td -/F122_0 9.9626 Tf -(23) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 408.639 Td -(3.4.7.) 22.4159 Tj --310 TJm -(BZ2_bzWriteClose) 77.4791 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -189.179 408.639 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 408.639 Td -/F122_0 9.9626 Tf -(23) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 396.684 Td -(3.4.8.) 22.4159 Tj --310 TJm -(Handling) 37.0808 Tj --250 TJm -(embedded) 40.9463 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(streams) 30.4357 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -294.601 396.684 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 396.684 Td -/F122_0 9.9626 Tf -(24) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 384.729 Td -(3.4.9.) 22.4159 Tj --310 TJm -(Standard) 35.417 Tj --250 TJm -(\002le-reading/writing) 77.4791 Tj --250 TJm -(code) 18.8094 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -247.564 384.729 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 384.729 Td -/F122_0 9.9626 Tf -(25) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 372.774 Td -(3.5.) 14.9439 Tj --310 TJm -(Utility) 26.0223 Tj --250 TJm -(functions) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -170.645 372.774 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 372.774 Td -/F122_0 9.9626 Tf -(26) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 360.819 Td -(3.5.1.) 22.4159 Tj --310 TJm -(BZ2_bzBuf) 47.0434 Tj -25 TJm -(fT) 9.4047 Tj -80 TJm -(oBuf) 19.9252 Tj -25 TJm -(fCompress) 43.1679 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -229.488 360.819 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 360.819 Td -/F122_0 9.9626 Tf -(26) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 348.863 Td -(3.5.2.) 22.4159 Tj --310 TJm -(BZ2_bzBuf) 47.0434 Tj -25 TJm -(fT) 9.4047 Tj -80 TJm -(oBuf) 19.9252 Tj -25 TJm -(fDecompress) 52.5627 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -238.613 348.863 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 348.863 Td -/F122_0 9.9626 Tf -(27) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 336.908 Td -(3.6.) 14.9439 Tj --310 TJm -(zlib) 14.9439 Tj --250 TJm -(compatibility) 53.1405 Tj --250 TJm -(functions) 37.0808 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -215.06 336.908 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 336.908 Td -/F122_0 9.9626 Tf -(28) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 324.953 Td -(3.7.) 14.9439 Tj --310 TJm -(Using) 23.8007 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(library) 26.5603 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(stdio-free) 38.1767 Tj --250 TJm -(en) 9.4047 Tj -40 TJm -(vironment) 40.9562 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -282.092 324.953 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 324.953 Td -/F122_0 9.9626 Tf -(28) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 312.998 Td -(3.7.1.) 22.4159 Tj --310 TJm -(Getting) 29.8878 Tj --250 TJm -(rid) 11.0684 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(stdio) 19.3773 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.492 312.998 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 312.998 Td -/F122_0 9.9626 Tf -(29) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 301.043 Td -(3.7.2.) 22.4159 Tj --310 TJm -(Critical) 29.8878 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(handling) 34.8691 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -201.629 301.043 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 301.043 Td -/F122_0 9.9626 Tf -(29) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 289.088 Td -(3.8.) 14.9439 Tj --310 TJm -(Making) 30.9936 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(W) 9.4047 Tj -40 TJm -(indo) 17.7135 Tj -25 TJm -(ws) 11.0684 Tj --250 TJm -(DLL) 19.3673 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -203.243 289.088 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 289.088 Td -/F122_0 9.9626 Tf -(29) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 257.207 Td -(This) 17.7135 Tj --250 TJm -(chapter) 29.3199 Tj --250 TJm -(describes) 37.0708 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(programming) 54.2364 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -282.448 257.207 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -330.269 257.207 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 235.289 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --273 TJm -(general) 29.3199 Tj --272 TJm -(background) 47.0334 Tj --273 TJm -(information,) 49.534 Tj --278 TJm -(particularly) 45.9276 Tj --273 TJm -(about) 22.1369 Tj --273 TJm -(memory) 33.2053 Tj --272 TJm -(use) 13.2801 Tj --273 TJm -(and) 14.386 Tj --273 TJm -(performance) 50.341 Tj --272 TJm -(aspects,) 31.2626 Tj --279 TJm -(you') 18.2614 Tj -50 TJm -(d) 4.9813 Tj --272 TJm -(be) 9.4047 Tj --273 TJm -(well) 17.1556 Tj --273 TJm -(advised) 30.4357 Tj -72 223.334 Td -(to) 7.7509 Tj --250 TJm -(read) 17.1456 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --250 TJm -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --250 TJm -([2]) 11.6164 Tj -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --250 TJm -(as) 8.2988 Tj --250 TJm -(well.) 19.6462 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 188.581 Td -/F116_0 20.6585 Tf -(3.1.) 34.4584 Tj --278 TJm -(T) 12.6223 Tj -80 TJm -(op-le) 49.3532 Tj -15 TJm -(vel) 28.7153 Tj --278 TJm -(structure) 89.5339 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 166.663 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -123.608 166.663 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --380 TJm -(a) 4.4234 Tj --380 TJm -(\003e) 9.9626 Tj -15 TJm -(xible) 19.9252 Tj --381 TJm -(library) 26.5603 Tj --380 TJm -(for) 11.6164 Tj --380 TJm -(compressing) 50.3609 Tj --380 TJm -(and) 14.386 Tj --380 TJm -(decompressing) 59.7656 Tj --380 TJm -(data) 16.5977 Tj --381 TJm -(in) 7.7509 Tj --380 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -405.291 166.663 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -438.966 166.663 Td -/F122_0 9.9626 Tf -(data) 16.5977 Tj --380 TJm -(format.) 29.0509 Tj --1401 TJm -(Although) 37.6387 Tj -72 154.708 Td -(packaged) 37.6188 Tj --285 TJm -(as) 8.2988 Tj --284 TJm -(a) 4.4234 Tj --285 TJm -(single) 23.8007 Tj --285 TJm -(entity) 22.6948 Tj -65 TJm -(,) 2.4907 Tj --293 TJm -(it) 5.5392 Tj --285 TJm -(helps) 21.031 Tj --285 TJm -(to) 7.7509 Tj --284 TJm -(re) 7.7409 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(ard) 12.7222 Tj --285 TJm -(the) 12.1743 Tj --285 TJm -(library) 26.5603 Tj --284 TJm -(as) 8.2988 Tj --285 TJm -(three) 19.9152 Tj --285 TJm -(separate) 32.6375 Tj --284 TJm -(parts:) 22.1369 Tj --380 TJm -(the) 12.1743 Tj --285 TJm -(lo) 7.7509 Tj -25 TJm -(w) 7.193 Tj --284 TJm -(le) 7.193 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --285 TJm -(interf) 21.579 Tj -10 TJm -(ace,) 15.7608 Tj --293 TJm -(and) 14.386 Tj --285 TJm -(the) 12.1743 Tj --285 TJm -(high) 17.7135 Tj -72 142.753 Td -(le) 7.193 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace,) 15.7608 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(some) 21.031 Tj --250 TJm -(utility) 23.8106 Tj --250 TJm -(functions.) 39.5714 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 120.835 Td -(The) 15.4918 Tj --349 TJm -(structure) 34.8591 Tj --349 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -141.082 120.835 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.903 120.835 Td -/F122_0 9.9626 Tf -(') 3.3175 Tj -55 TJm -(s) 3.8755 Tj --349 TJm -(interf) 21.579 Tj -10 TJm -(aces) 17.1456 Tj --349 TJm -(is) 6.6451 Tj --349 TJm -(similar) 27.6761 Tj --349 TJm -(to) 7.7509 Tj --349 TJm -(that) 14.9439 Tj --349 TJm -(of) 8.2988 Tj --349 TJm -(Jean-loup) 38.7346 Tj --349 TJm -(Gailly') 28.224 Tj -55 TJm -(s) 3.8755 Tj --349 TJm -(and) 14.386 Tj --349 TJm -(Mark) 21.579 Tj --349 TJm -(Adler') 26.0024 Tj -55 TJm -(s) 3.8755 Tj --349 TJm -(e) 4.4234 Tj -15 TJm -(xcellent) 31.5416 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -516.09 120.835 Td -/F124_0 9.9626 Tf -(zlib) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 108.88 Td -/F122_0 9.9626 Tf -(library) 26.5603 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 86.962 Td -(All) 12.7322 Tj --242 TJm -(e) 4.4234 Tj -15 TJm -(xternally) 35.417 Tj --242 TJm -(visible) 26.5703 Tj --241 TJm -(symbols) 33.2153 Tj --242 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --242 TJm -(names) 25.4544 Tj --242 TJm -(be) 9.4047 Tj -15 TJm -(ginning) 30.4457 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -284.687 86.962 Td -/F124_0 9.9626 Tf -(BZ2_) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -308.597 86.962 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --615 TJm -(This) 17.7135 Tj --241 TJm -(is) 6.6451 Tj --242 TJm -(ne) 9.4047 Tj -25 TJm -(w) 7.193 Tj --242 TJm -(in) 7.7509 Tj --242 TJm -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --242 TJm -(1.0.) 14.9439 Tj --614 TJm -(The) 15.4918 Tj --242 TJm -(intention) 35.427 Tj --242 TJm -(is) 6.6451 Tj --241 TJm -(to) 7.7509 Tj --242 TJm -(minimise) 37.0908 Tj -72 75.007 Td -(pollution) 35.9849 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(namespaces) 47.5814 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(library) 26.5603 Tj --250 TJm -(clients.) 28.503 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -541.288 50.951 Td -(8) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 9 12 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -420.96 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -498.449 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 75.786 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --250 TJm -(part) 15.4918 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(need) 18.8094 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -240.567 710.037 Td -/F124_0 9.9626 Tf -(#include) 47.8205 Tj --600 TJm -() 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -350.654 710.037 Td -/F122_0 9.9626 Tf -(into) 15.5018 Tj --250 TJm -(your) 18.2614 Tj --250 TJm -(sources.) 32.3685 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 679.416 Td -/F116_0 17.2154 Tf -(3.1.1.) 43.0729 Tj --278 TJm -(Lo) 21.0372 Tj -15 TJm -(w-le) 33.484 Tj -15 TJm -(vel) 23.9294 Tj --278 TJm -(summar) 66.9679 Tj --10 TJm -(y) 9.5718 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 657.498 Td -/F122_0 9.9626 Tf -(This) 17.7135 Tj --212 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj --212 TJm -(pro) 13.2801 Tj -15 TJm -(vides) 21.031 Tj --212 TJm -(services) 32.0895 Tj --212 TJm -(for) 11.6164 Tj --212 TJm -(compressing) 50.3609 Tj --212 TJm -(and) 14.386 Tj --212 TJm -(decompress) 47.0334 Tj -1 TJm -(ing) 12.7322 Tj --212 TJm -(data) 16.5977 Tj --212 TJm -(in) 7.7509 Tj --212 TJm -(memory) 33.2053 Tj -65 TJm -(.) 2.4907 Tj --595 TJm -(There') 26.5503 Tj -55 TJm -(s) 3.8755 Tj --212 TJm -(no) 9.9626 Tj --212 TJm -(pro) 13.2801 Tj -15 TJm -(vision) 24.3586 Tj --212 TJm -(for) 11.6164 Tj --212 TJm -(dealing) 29.3299 Tj -72 645.543 Td -(with) 17.7135 Tj --213 TJm -(\002les,) 19.0983 Tj --220 TJm -(streams) 30.4357 Tj --213 TJm -(or) 8.2988 Tj --213 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --213 TJm -(other) 20.4731 Tj --213 TJm -(I/O) 13.2801 Tj --213 TJm -(mechanisms,) 51.7457 Tj --221 TJm -(just) 14.396 Tj --213 TJm -(straight) 29.8878 Tj --213 TJm -(memory-to-memory) 80.7967 Tj --213 TJm -(w) 7.193 Tj -10 TJm -(ork.) 15.7708 Tj --595 TJm -(In) 8.2988 Tj --213 TJm -(f) 3.3175 Tj -10 TJm -(act,) 14.107 Tj --221 TJm -(this) 14.396 Tj --213 TJm -(part) 15.4918 Tj --213 TJm -(of) 8.2988 Tj --213 TJm -(the) 12.1743 Tj --213 TJm -(library) 26.5603 Tj -72 633.588 Td -(can) 13.8281 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(compiled) 37.0808 Tj --250 TJm -(without) 30.4457 Tj --250 TJm -(inclusion) 36.5329 Tj --250 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -222.534 633.588 Td -/F124_0 9.9626 Tf -(stdio.h) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -264.377 633.588 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(may) 17.1556 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(helpful) 28.224 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(embedded) 40.9463 Tj --250 TJm -(applications.) 50.6399 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 611.67 Td -(The) 15.4918 Tj --250 TJm -(lo) 7.7509 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(part) 15.4918 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(library) 26.5603 Tj --250 TJm -(has) 13.2801 Tj --250 TJm -(no) 9.9626 Tj --250 TJm -(global) 24.9065 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(ariables) 30.9837 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(therefore) 35.955 Tj --250 TJm -(thread-safe.) 46.7445 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 589.752 Td -(Six) 13.2901 Tj --875 TJm -(routines) 32.0995 Tj --876 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --875 TJm -(up) 9.9626 Tj --876 TJm -(the) 12.1743 Tj --875 TJm -(lo) 7.7509 Tj -25 TJm -(w) 7.193 Tj --876 TJm -(le) 7.193 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --875 TJm -(interf) 21.579 Tj -10 TJm -(ace:) 16.0398 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -308.791 589.752 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -416.387 589.752 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -429.158 589.752 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -512.844 589.752 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --1032 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 577.797 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressEnd) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -186.15 577.797 Td -/F122_0 9.9626 Tf -(for) 11.6164 Tj --1258 TJm -(compression,) 52.8516 Tj --1510 TJm -(and) 14.386 Tj --1257 TJm -(a) 4.4234 Tj --1258 TJm -(corresponding) 56.996 Tj --1258 TJm -(trio) 13.8381 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -417.958 577.797 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompressInit) 119.5512 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -537.509 577.797 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 565.842 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -172.707 565.842 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -192.158 565.842 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompressEnd) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -310.798 565.842 Td -/F122_0 9.9626 Tf -(for) 11.6164 Tj --508 TJm -(decompression.) 62.2563 Tj --2171 TJm -(The) 15.4918 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -431.918 564.099 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -437.895 565.842 Td -(Init) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -466.871 565.842 Td -/F122_0 9.9626 Tf -(functions) 37.0808 Tj --508 TJm -(allocate) 30.9837 Tj -72 553.887 Td -(memory) 33.2053 Tj --574 TJm -(for) 11.6164 Tj --573 TJm -(compression/decompression) 112.8962 Tj --574 TJm -(and) 14.386 Tj --574 TJm -(do) 9.9626 Tj --573 TJm -(other) 20.4731 Tj --574 TJm -(initialisations,) 56.1891 Tj --654 TJm -(whilst) 24.3586 Tj --574 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -419.503 552.143 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -425.48 553.887 Td -(End) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -449.128 553.887 Td -/F122_0 9.9626 Tf -(functions) 37.0808 Tj --574 TJm -(close) 20.4731 Tj --573 TJm -(do) 9.9626 Tj -25 TJm -(wn) 12.1743 Tj -72 541.932 Td -(operations) 41.5042 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(release) 27.6562 Tj --250 TJm -(memory) 33.2053 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 520.014 Td -(The) 15.4918 Tj --303 TJm -(real) 14.9339 Tj --303 TJm -(w) 7.193 Tj -10 TJm -(ork) 13.2801 Tj --303 TJm -(is) 6.6451 Tj --303 TJm -(done) 19.3673 Tj --303 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -176.892 520.014 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -263.598 520.014 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -281.003 520.014 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -376.645 520.014 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --939 TJm -(These) 23.7907 Tj --303 TJm -(compress) 37.6287 Tj --303 TJm -(and) 14.386 Tj --303 TJm -(decompress) 47.0334 Tj --303 TJm -(data) 16.5977 Tj -72 508.059 Td -(from) 19.3673 Tj --205 TJm -(a) 4.4234 Tj --205 TJm -(user) 16.5977 Tj -20 TJm -(-supplied) 37.0808 Tj --205 TJm -(input) 20.4831 Tj --206 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --205 TJm -(to) 7.7509 Tj --205 TJm -(a) 4.4234 Tj --205 TJm -(user) 16.5977 Tj -20 TJm -(-supplied) 37.0808 Tj --205 TJm -(output) 25.4644 Tj --205 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -55 TJm -(.) 2.4907 Tj --591 TJm -(These) 23.7907 Tj --205 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fers) 14.9339 Tj --205 TJm -(can) 13.8281 Tj --205 TJm -(be) 9.4047 Tj --205 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --205 TJm -(size;) 18.2614 Tj --220 TJm -(arbitrary) 34.3012 Tj --206 TJm -(quantities) 38.7446 Tj --205 TJm -(of) 8.2988 Tj -72 496.104 Td -(data) 16.5977 Tj --258 TJm -(are) 12.1643 Tj --258 TJm -(handled) 31.5416 Tj --258 TJm -(by) 9.9626 Tj --257 TJm -(making) 29.8878 Tj --258 TJm -(repeated) 33.7433 Tj --258 TJm -(calls) 18.2614 Tj --258 TJm -(to) 7.7509 Tj --258 TJm -(these) 20.4731 Tj --258 TJm -(functions.) 39.5714 Tj --667 TJm -(This) 17.7135 Tj --258 TJm -(is) 6.6451 Tj --258 TJm -(a) 4.4234 Tj --257 TJm -(\003e) 9.9626 Tj -15 TJm -(xible) 19.9252 Tj --258 TJm -(mechanism) 45.3796 Tj --258 TJm -(allo) 14.9439 Tj -25 TJm -(wing) 19.9252 Tj --258 TJm -(a) 4.4234 Tj --258 TJm -(consumer) 38.7346 Tj -20 TJm -(-pull) 18.8194 Tj -72 484.148 Td -(style) 18.8194 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(acti) 14.386 Tj -25 TJm -(vity) 15.5018 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(or) 8.2988 Tj --250 TJm -(producer) 35.4071 Tj -20 TJm -(-push,) 24.6275 Tj --250 TJm -(or) 8.2988 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(mixture) 30.9936 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(both.) 20.2042 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 453.527 Td -/F116_0 17.2154 Tf -(3.1.2.) 43.0729 Tj --278 TJm -(High-le) 58.343 Tj -15 TJm -(vel) 23.9294 Tj --278 TJm -(summar) 66.9679 Tj --10 TJm -(y) 9.5718 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 431.609 Td -/F122_0 9.9626 Tf -(This) 17.7135 Tj --284 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj --284 TJm -(pro) 13.2801 Tj -15 TJm -(vides) 21.031 Tj --285 TJm -(some) 21.031 Tj --284 TJm -(handy) 24.3486 Tj --284 TJm -(wrappers) 36.5129 Tj --284 TJm -(around) 27.6661 Tj --284 TJm -(the) 12.1743 Tj --284 TJm -(lo) 7.7509 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --285 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj --284 TJm -(to) 7.7509 Tj --284 TJm -(f) 3.3175 Tj -10 TJm -(acilitate) 31.5416 Tj --284 TJm -(reading) 29.8778 Tj --284 TJm -(and) 14.386 Tj --285 TJm -(writ) 16.0497 Tj -1 TJm -(ing) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -510.112 431.609 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 419.654 Td -/F122_0 9.9626 Tf -(format) 26.5603 Tj --347 TJm -(\002les) 16.6077 Tj --346 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -125.391 419.654 Td -/F124_0 9.9626 Tf -(.bz2) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -152.754 419.654 Td -/F122_0 9.9626 Tf -(\002les\).) 22.4159 Tj --1200 TJm -(The) 15.4918 Tj --346 TJm -(routines) 32.0995 Tj --347 TJm -(pro) 13.2801 Tj -15 TJm -(vide) 17.1556 Tj --346 TJm -(hooks) 23.8007 Tj --347 TJm -(to) 7.7509 Tj --346 TJm -(f) 3.3175 Tj -10 TJm -(acilitate) 31.5416 Tj --347 TJm -(reading) 29.8778 Tj --347 TJm -(\002les) 16.6077 Tj --346 TJm -(in) 7.7509 Tj --347 TJm -(which) 24.3486 Tj --346 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -460.049 419.654 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -493.39 419.654 Td -/F122_0 9.9626 Tf -(data) 16.5977 Tj --347 TJm -(stream) 26.5603 Tj -72 407.699 Td -(is) 6.6451 Tj --339 TJm -(embedded) 40.9463 Tj --339 TJm -(within) 25.4644 Tj --339 TJm -(some) 21.031 Tj --339 TJm -(lar) 10.5105 Tj -18 TJm -(ger) 12.7222 Tj -20 TJm -(-scale) 23.2328 Tj --339 TJm -(\002le) 12.7322 Tj --339 TJm -(structure,) 37.3498 Tj --361 TJm -(or) 8.2988 Tj --340 TJm -(wher) 19.9152 Tj -1 TJm -(e) 4.4234 Tj --340 TJm -(there) 19.9152 Tj --339 TJm -(are) 12.1643 Tj --339 TJm -(multiple) 33.2153 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -400.941 407.699 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -434.207 407.699 Td -/F122_0 9.9626 Tf -(data) 16.5977 Tj --339 TJm -(streams) 30.4357 Tj --339 TJm -(concatenated) 52.0048 Tj -72 395.744 Td -(end-to-end.) 45.6486 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 373.826 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --332 TJm -(reading) 29.8778 Tj --333 TJm -(\002les,) 19.0983 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -144.803 373.826 Td -/F124_0 9.9626 Tf -(BZ2_bzReadOpen) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -228.489 373.826 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -234.496 373.826 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -294.272 373.826 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -300.279 373.826 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -393.253 373.826 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -410.951 373.826 Td -/F124_0 9.9626 Tf -(BZ2_bzReadGetUnused) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -527.836 373.826 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj -72 361.871 Td -(supplied.) 36.2539 Tj --620 TJm -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --250 TJm -(writing) 28.782 Tj --250 TJm -(\002les,) 19.0983 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -183.471 361.871 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteOpen) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -273.135 361.871 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -278.116 361.871 Td -/F124_0 9.9626 Tf -(BZ2_bzWrite) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -346.36 361.871 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -363.237 361.871 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteFinish) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -467.346 361.871 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj --250 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 339.953 Td -(As) 11.0684 Tj --374 TJm -(with) 17.7135 Tj --374 TJm -(the) 12.1743 Tj --375 TJm -(lo) 7.7509 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --374 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --405 TJm -(no) 9.9626 Tj --374 TJm -(global) 24.9065 Tj --374 TJm -(v) 4.9813 Tj -25 TJm -(ariables) 30.9837 Tj --375 TJm -(are) 12.1643 Tj --374 TJm -(used) 18.2614 Tj --374 TJm -(so) 8.8568 Tj --374 TJm -(the) 12.1743 Tj --374 TJm -(library) 26.5603 Tj --375 TJm -(is) 6.6451 Tj --374 TJm -(per) 12.7222 Tj --374 TJm -(se) 8.2988 Tj --374 TJm -(thread-safe.) 46.7445 Tj --1365 TJm -(Ho) 12.1743 Tj -25 TJm -(we) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj -40 TJm -(,) 2.4907 Tj --406 TJm -(if) 6.0871 Tj --374 TJm -(I/O) 13.2801 Tj -72 327.998 Td -(errors) 23.2328 Tj --267 TJm -(occur) 22.1269 Tj --267 TJm -(whilst) 24.3586 Tj --267 TJm -(reading) 29.8778 Tj --267 TJm -(or) 8.2988 Tj --267 TJm -(writing) 28.782 Tj --267 TJm -(the) 12.1743 Tj --268 TJm -(underlying) 43.1679 Tj --267 TJm -(compressed) 47.0334 Tj --267 TJm -(\002les,) 19.0983 Tj --271 TJm -(you) 14.9439 Tj --267 TJm -(may) 17.1556 Tj --267 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --267 TJm -(to) 7.7509 Tj --267 TJm -(consult) 28.782 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -457.199 327.998 Td -/F124_0 9.9626 Tf -(errno) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -489.748 327.998 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --267 TJm -(determine) 39.8404 Tj -72 316.043 Td -(the) 12.1743 Tj --366 TJm -(cause) 22.1269 Tj --365 TJm -(of) 8.2988 Tj --366 TJm -(the) 12.1743 Tj --365 TJm -(error) 19.3573 Tj -55 TJm -(.) 2.4907 Tj --1314 TJm -(In) 8.2988 Tj --366 TJm -(that) 14.9439 Tj --365 TJm -(case,) 19.6363 Tj --395 TJm -(you') 18.2614 Tj -50 TJm -(d) 4.9813 Tj --366 TJm -(need) 18.8094 Tj --365 TJm -(a) 4.4234 Tj --366 TJm -(C) 6.6451 Tj --365 TJm -(library) 26.5603 Tj --366 TJm -(which) 24.3486 Tj --366 TJm -(correctly) 35.4071 Tj --365 TJm -(supports) 33.7633 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -431.668 316.043 Td -/F124_0 9.9626 Tf -(errno) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -465.199 316.043 Td -/F122_0 9.9626 Tf -(in) 7.7509 Tj --366 TJm -(a) 4.4234 Tj --365 TJm -(multithreaded) 55.3422 Tj -72 304.088 Td -(en) 9.4047 Tj -40 TJm -(vironment.) 43.4469 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 282.17 Td -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --243 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --243 TJm -(the) 12.1743 Tj --242 TJm -(library) 26.5603 Tj --243 TJm -(a) 4.4234 Tj --243 TJm -(little) 18.2714 Tj --242 TJm -(simpler) 29.8878 Tj --243 TJm -(and) 14.386 Tj --243 TJm -(more) 20.4731 Tj --243 TJm -(portable,) 35.1381 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -289.263 282.17 Td -/F124_0 9.9626 Tf -(BZ2_bzReadOpen) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -375.368 282.17 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -392.172 282.17 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteOpen) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -484.254 282.17 Td -/F122_0 9.9626 Tf -(require) 28.2141 Tj --243 TJm -(you) 14.9439 Tj --243 TJm -(to) 7.7509 Tj -72 270.215 Td -(pass) 17.1556 Tj --247 TJm -(them) 19.9252 Tj --248 TJm -(\002le) 12.7322 Tj --247 TJm -(handles) 30.4357 Tj --247 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -165.421 270.215 Td -/F124_0 9.9626 Tf -(FILE) 23.9102 Tj -189.331 268.471 Td -(*) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -195.309 270.215 Td -/F122_0 9.9626 Tf -(s\)) 7.193 Tj --247 TJm -(which) 24.3486 Tj --248 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --247 TJm -(pre) 12.7222 Tj -25 TJm -(viously) 29.3399 Tj --247 TJm -(been) 18.8094 Tj --248 TJm -(opened) 28.772 Tj --247 TJm -(for) 11.6164 Tj --247 TJm -(reading) 29.8778 Tj --247 TJm -(or) 8.2988 Tj --248 TJm -(writing) 28.782 Tj --247 TJm -(respecti) 30.9837 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ely) 12.1743 Tj -65 TJm -(.) 2.4907 Tj --618 TJm -(That) 18.2614 Tj --248 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -20 TJm -(oids) 16.6077 Tj -72 258.259 Td -(portability) 41.5142 Tj --272 TJm -(problems) 37.0808 Tj --273 TJm -(associated) 40.9463 Tj --272 TJm -(with) 17.7135 Tj --272 TJm -(\002le) 12.7322 Tj --273 TJm -(operations) 41.5042 Tj --272 TJm -(and) 14.386 Tj --272 TJm -(\002le) 12.7322 Tj --273 TJm -(attrib) 21.031 Tj -20 TJm -(utes,) 18.5404 Tj --278 TJm -(whilst) 24.3586 Tj --272 TJm -(not) 12.7322 Tj --272 TJm -(being) 22.1369 Tj --273 TJm -(much) 22.1369 Tj --272 TJm -(of) 8.2988 Tj --273 TJm -(an) 9.4047 Tj --272 TJm -(imposition) 42.63 Tj --272 TJm -(on) 9.9626 Tj --273 TJm -(the) 12.1743 Tj -72 246.304 Td -(programmer) 49.2451 Tj -55 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 215.683 Td -/F116_0 17.2154 Tf -(3.1.3.) 43.0729 Tj --278 TJm -(Utility) 47.8244 Tj --278 TJm -(functions) 77.4693 Tj --278 TJm -(summar) 66.9679 Tj --10 TJm -(y) 9.5718 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 193.765 Td -/F122_0 9.9626 Tf -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --273 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj --273 TJm -(simple) 26.5703 Tj --273 TJm -(needs,) 25.1755 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -165.929 193.765 Td -/F124_0 9.9626 Tf -(BZ2_bzBuffToBuffCompress) 143.4614 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -312.112 193.765 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -329.219 193.765 Td -/F124_0 9.9626 Tf -(BZ2_bzBuffToBuffDecompress) 155.4166 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -487.357 193.765 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj --273 TJm -(pro) 13.2801 Tj -15 TJm -(vided.) 24.6275 Tj -72 181.81 Td -(These) 23.7907 Tj --374 TJm -(compress) 37.6287 Tj --373 TJm -(data) 16.5977 Tj --374 TJm -(in) 7.7509 Tj --373 TJm -(memory) 33.2053 Tj --374 TJm -(from) 19.3673 Tj --373 TJm -(one) 14.386 Tj --374 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --373 TJm -(to) 7.7509 Tj --374 TJm -(another) 29.8778 Tj --374 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --373 TJm -(in) 7.7509 Tj --374 TJm -(a) 4.4234 Tj --373 TJm -(single) 23.8007 Tj --374 TJm -(function) 33.2053 Tj --373 TJm -(call.) 16.8766 Tj --1362 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --373 TJm -(should) 26.5703 Tj --374 TJm -(assess) 24.3486 Tj -72 169.855 Td -(whether) 32.0895 Tj --344 TJm -(these) 20.4731 Tj --343 TJm -(functions) 37.0808 Tj --344 TJm -(ful\002ll) 22.1469 Tj --344 TJm -(your) 18.2614 Tj --343 TJm -(memory-to-memory) 80.7967 Tj --344 TJm -(compression/decompression) 112.8962 Tj --343 TJm -(requirements) 52.0147 Tj --344 TJm -(before) 25.4445 Tj --344 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(esting) 23.8007 Tj -72 157.9 Td -(ef) 7.7409 Tj -25 TJm -(fort) 14.386 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(understanding) 56.4481 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(more) 20.4731 Tj --250 TJm -(general) 29.3199 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(more) 20.4731 Tj --250 TJm -(comple) 29.3299 Tj -15 TJm -(x) 4.9813 Tj --250 TJm -(lo) 7.7509 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace.) 15.7608 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 135.982 Td -(Y) 7.193 Tj -110 TJm -(oshioka) 30.9936 Tj --423 TJm -(Tsuneo) 29.3299 Tj --422 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -150.161 135.982 Td -/F124_0 9.9626 Tf -(tsuneo@rr.iij4u.or.jp) 125.5288 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -275.69 135.982 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --423 TJm -(has) 13.2801 Tj --422 TJm -(contrib) 28.224 Tj -20 TJm -(uted) 17.1556 Tj --423 TJm -(some) 21.031 Tj --423 TJm -(functions) 37.0808 Tj --422 TJm -(to) 7.7509 Tj --423 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --423 TJm -(better) 22.6848 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -476.462 135.982 Td -/F124_0 9.9626 Tf -(zlib) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -504.583 135.982 Td -/F122_0 9.9626 Tf -(compati-) 35.417 Tj -72 124.027 Td -(bility) 21.041 Tj -65 TJm -(.) 2.4907 Tj --1446 TJm -(These) 23.7907 Tj --388 TJm -(functions) 37.0808 Tj --387 TJm -(are) 12.1643 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -193.914 124.027 Td -/F124_0 9.9626 Tf -(BZ2_bzopen) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -253.689 124.027 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -260.385 124.027 Td -/F124_0 9.9626 Tf -(BZ2_bzread) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -320.161 124.027 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -326.857 124.027 Td -/F124_0 9.9626 Tf -(BZ2_bzwrite) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -392.611 124.027 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -399.307 124.027 Td -/F124_0 9.9626 Tf -(BZ2_bzflush) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -465.06 124.027 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -471.756 124.027 Td -/F124_0 9.9626 Tf -(BZ2_bzclose) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -537.509 124.027 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 112.072 Td -/F124_0 9.9626 Tf -(BZ2_bzerror) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -140.408 112.072 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -157.449 112.072 Td -/F124_0 9.9626 Tf -(BZ2_bzlibVersion) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -253.091 112.072 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --719 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --266 TJm -(may) 17.1556 Tj --267 TJm -(\002nd) 15.5018 Tj --266 TJm -(these) 20.4731 Tj --267 TJm -(functions) 37.0808 Tj --266 TJm -(more) 20.4731 Tj --267 TJm -(con) 14.386 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(enient) 24.3486 Tj --266 TJm -(for) 11.6164 Tj --267 TJm -(simple) 26.5703 Tj --266 TJm -(\002le) 12.7322 Tj --267 TJm -(reading) 29.8778 Tj -72 100.116 Td -(and) 14.386 Tj --270 TJm -(writ) 16.0497 Tj -1 TJm -(ing,) 15.2229 Tj --275 TJm -(than) 17.1556 Tj --269 TJm -(those) 21.031 Tj --270 TJm -(in) 7.7509 Tj --269 TJm -(the) 12.1743 Tj --270 TJm -(high-le) 28.224 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --269 TJm -(interf) 21.579 Tj -10 TJm -(ace.) 15.7608 Tj --737 TJm -(These) 23.7907 Tj --270 TJm -(functions) 37.0808 Tj --269 TJm -(are) 12.1643 Tj --270 TJm -(not) 12.7322 Tj --269 TJm -(\(yet\)) 18.8094 Tj --270 TJm -(of) 8.2988 Tj -25 TJm -(\002cially) 27.6761 Tj --269 TJm -(part) 15.4918 Tj --270 TJm -(of) 8.2988 Tj --269 TJm -(the) 12.1743 Tj --270 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --274 TJm -(and) 14.386 Tj --270 TJm -(are) 12.1643 Tj -72 88.161 Td -(minimally) 40.9662 Tj --291 TJm -(documented) 48.6972 Tj --291 TJm -(here.) 19.6363 Tj --867 TJm -(If) 6.6351 Tj --291 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --291 TJm -(break,) 24.6176 Tj --301 TJm -(you) 14.9439 Tj --291 TJm -(get) 12.1743 Tj --292 TJm -(to) 7.7509 Tj --291 TJm -(k) 4.9813 Tj -10 TJm -(eep) 13.8281 Tj --291 TJm -(all) 9.9626 Tj --291 TJm -(the) 12.1743 Tj --291 TJm -(pieces.) 27.3872 Tj --433 TJm -(I) 3.3175 Tj --291 TJm -(hope) 19.3673 Tj --291 TJm -(to) 7.7509 Tj --291 TJm -(document) 39.2925 Tj --292 TJm -(them) 19.9252 Tj --291 TJm -(properly) 33.7533 Tj --291 TJm -(when) 21.579 Tj -72 76.206 Td -(time) 17.7135 Tj --250 TJm -(permits.) 32.3785 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -541.288 51.071 Td -(9) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 10 13 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(Y) 7.193 Tj -110 TJm -(oshioka) 30.9936 Tj --250 TJm -(also) 16.0497 Tj --250 TJm -(contrib) 28.224 Tj -20 TJm -(uted) 17.1556 Tj --250 TJm -(modi\002cations) 54.2464 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(allo) 14.9439 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(library) 26.5603 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(uilt) 13.2901 Tj --250 TJm -(as) 8.2988 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(W) 9.4047 Tj -40 TJm -(indo) 17.7135 Tj -25 TJm -(ws) 11.0684 Tj --250 TJm -(DLL.) 21.8579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 675.504 Td -/F116_0 20.6585 Tf -(3.2.) 34.4584 Tj --278 TJm -(Err) 29.8515 Tj -20 TJm -(or) 20.6585 Tj --278 TJm -(handling) 86.084 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 653.805 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --214 TJm -(library) 26.5603 Tj --215 TJm -(is) 6.6451 Tj --214 TJm -(designed) 35.417 Tj --215 TJm -(to) 7.7509 Tj --214 TJm -(reco) 17.1456 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --215 TJm -(cleanly) 28.772 Tj --214 TJm -(in) 7.7509 Tj --215 TJm -(all) 9.9626 Tj --214 TJm -(situations,) 40.6873 Tj --222 TJm -(including) 37.6387 Tj --214 TJm -(the) 12.1743 Tj --215 TJm -(w) 7.193 Tj -10 TJm -(orst-case) 35.4071 Tj --214 TJm -(situation) 34.3212 Tj --215 TJm -(of) 8.2988 Tj --214 TJm -(decompressing) 59.7656 Tj --215 TJm -(random) 30.4357 Tj -72 641.85 Td -(data.) 19.0883 Tj --764 TJm -(I'm) 14.386 Tj --274 TJm -(not) 12.7322 Tj --275 TJm -(100%) 23.2427 Tj --274 TJm -(sure) 16.5977 Tj --274 TJm -(that) 14.9439 Tj --274 TJm -(it) 5.5392 Tj --274 TJm -(can) 13.8281 Tj --274 TJm -(al) 7.193 Tj -10 TJm -(w) 7.193 Tj -10 TJm -(ays) 13.2801 Tj --274 TJm -(do) 9.9626 Tj --274 TJm -(this,) 16.8866 Tj --280 TJm -(so) 8.8568 Tj --274 TJm -(you) 14.9439 Tj --274 TJm -(might) 23.2527 Tj --274 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --274 TJm -(to) 7.7509 Tj --274 TJm -(add) 14.386 Tj --274 TJm -(a) 4.4234 Tj --275 TJm -(s) 3.8755 Tj -1 TJm -(ignal) 19.9252 Tj --275 TJm -(handler) 29.8778 Tj --274 TJm -(to) 7.7509 Tj --274 TJm -(catch) 21.0211 Tj --274 TJm -(se) 8.2988 Tj -15 TJm -(gmentation) 44.8317 Tj -72 629.895 Td -(violations) 39.3025 Tj --273 TJm -(during) 26.0123 Tj --273 TJm -(decompression) 59.7656 Tj --273 TJm -(if) 6.0871 Tj --273 TJm -(you) 14.9439 Tj --273 TJm -(are) 12.1643 Tj --273 TJm -(feeling) 27.6661 Tj --274 TJm -(especiall) 34.8591 Tj -1 TJm -(y) 4.9813 Tj --274 TJm -(paranoid.) 37.3498 Tj --758 TJm -(I) 3.3175 Tj --273 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --273 TJm -(be) 9.4047 Tj --273 TJm -(interested) 38.7346 Tj --273 TJm -(in) 7.7509 Tj --274 TJm -(hearing) 29.8778 Tj --273 TJm -(more) 20.4731 Tj --273 TJm -(about) 22.1369 Tj -72 617.939 Td -(the) 12.1743 Tj --250 TJm -(rob) 13.2801 Tj -20 TJm -(ustness) 28.782 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(library) 26.5603 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(corrupted) 38.1767 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(data.) 19.0883 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 596.241 Td -(V) 7.193 Tj -111 TJm -(ersion) 24.3486 Tj --251 TJm -(1.0.3) 19.9252 Tj --251 TJm -(more) 20.4731 Tj --251 TJm -(rob) 13.2801 Tj -20 TJm -(ust) 11.6264 Tj --251 TJm -(in) 7.7509 Tj --251 TJm -(this) 14.396 Tj --251 TJm -(respect) 28.2141 Tj --252 TJm -(than) 17.1556 Tj --251 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --251 TJm -(pre) 12.7222 Tj -25 TJm -(vious) 21.589 Tj --251 TJm -(v) 4.9813 Tj -15 TJm -(ersion.) 26.8392 Tj --626 TJm -(In) 8.2988 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(estig) 18.8194 Tj -5 TJm -(ations) 23.8007 Tj --251 TJm -(with) 17.7135 Tj --251 TJm -(V) 7.193 Tj -111 TJm -(algrind) 28.224 Tj --251 TJm -(\(a) 7.7409 Tj --252 TJm -(tool) 15.5018 Tj --251 TJm -(for) 11.6164 Tj --251 TJm -(detecting) 36.5229 Tj -72 584.285 Td -(problems) 37.0808 Tj --422 TJm -(with) 17.7135 Tj --421 TJm -(memory) 33.2053 Tj --422 TJm -(management\)) 54.2264 Tj --421 TJm -(indicate) 31.5416 Tj --422 TJm -(that,) 17.4346 Tj --464 TJm -(at) 7.193 Tj --422 TJm -(least) 18.2614 Tj --421 TJm -(for) 11.6164 Tj --422 TJm -(the) 12.1743 Tj --422 TJm -(f) 3.3175 Tj -1 TJm -(e) 4.4234 Tj -25 TJm -(w) 7.193 Tj --422 TJm -(\002les) 16.6077 Tj --422 TJm -(I) 3.3175 Tj --421 TJm -(tested,) 25.7334 Tj --464 TJm -(all) 9.9626 Tj --422 TJm -(single-bit) 37.6387 Tj --422 TJm -(errors) 23.2328 Tj --421 TJm -(in) 7.7509 Tj --422 TJm -(the) 12.1743 Tj -72 572.33 Td -(decompressed) 56.4381 Tj --342 TJm -(data) 16.5977 Tj --341 TJm -(are) 12.1643 Tj --342 TJm -(caught) 26.5603 Tj --342 TJm -(properly) 33.7533 Tj -65 TJm -(,) 2.4907 Tj --365 TJm -(with) 17.7135 Tj --341 TJm -(no) 9.9626 Tj --342 TJm -(se) 8.2988 Tj -15 TJm -(gmentation) 44.8317 Tj --342 TJm -(f) 3.3175 Tj -10 TJm -(aults,) 21.31 Tj --365 TJm -(no) 9.9626 Tj --341 TJm -(uses) 17.1556 Tj --342 TJm -(of) 8.2988 Tj --342 TJm -(uninitialised) 49.2651 Tj --342 TJm -(data,) 19.0883 Tj --364 TJm -(no) 9.9626 Tj --342 TJm -(out) 12.7322 Tj --342 TJm -(of) 8.2988 Tj --342 TJm -(range) 22.1269 Tj -72 560.375 Td -(reads) 21.0211 Tj --261 TJm -(or) 8.2988 Tj --260 TJm -(writes,) 26.8392 Tj --263 TJm -(and) 14.386 Tj --261 TJm -(no) 9.9626 Tj --261 TJm -(in\002nit) 23.8106 Tj -1 TJm -(e) 4.4234 Tj --261 TJm -(looping) 30.4457 Tj --261 TJm -(in) 7.7509 Tj --260 TJm -(the) 12.1743 Tj --261 TJm -(decompressor) 55.3323 Tj -55 TJm -(.) 2.4907 Tj --342 TJm -(So) 10.5205 Tj --260 TJm -(it') 8.8568 Tj -55 TJm -(s) 3.8755 Tj --261 TJm -(certainly) 34.8591 Tj --260 TJm -(pretty) 23.2427 Tj --261 TJm -(rob) 13.2801 Tj -20 TJm -(ust,) 14.117 Tj --263 TJm -(although) 34.8691 Tj --261 TJm -(I) 3.3175 Tj --260 TJm -(w) 7.193 Tj -10 TJm -(ouldn') 26.0123 Tj -18 TJm -(t) 2.7696 Tj --261 TJm -(claim) 22.1369 Tj -72 548.42 Td -(it) 5.5392 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(totally) 25.4644 Tj --250 TJm -(bombproof.) 46.7644 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 526.721 Td -(The) 15.4918 Tj --282 TJm -(\002le) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -105.84 526.721 Td -/F124_0 9.9626 Tf -(bzlib.h) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -150.491 526.721 Td -/F122_0 9.9626 Tf -(contains) 33.2053 Tj --282 TJm -(all) 9.9626 Tj --282 TJm -(de\002nitions) 42.0721 Tj --282 TJm -(needed) 28.2141 Tj --281 TJm -(to) 7.7509 Tj --282 TJm -(use) 13.2801 Tj --282 TJm -(the) 12.1743 Tj --282 TJm -(library) 26.5603 Tj -65 TJm -(.) 2.4907 Tj --811 TJm -(In) 8.2988 Tj --282 TJm -(particular) 38.1767 Tj -40 TJm -(,) 2.4907 Tj --290 TJm -(you) 14.9439 Tj --282 TJm -(should) 26.5703 Tj --281 TJm -(de\002nitely) 37.6387 Tj --282 TJm -(not) 12.7322 Tj --282 TJm -(include) 29.3299 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 514.766 Td -/F124_0 9.9626 Tf -(bzlib_private.h) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -161.664 514.766 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 493.067 Td -(In) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.807 493.067 Td -/F124_0 9.9626 Tf -(bzlib.h) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -124.651 493.067 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --252 TJm -(the) 12.1743 Tj --252 TJm -(v) 4.9813 Tj -25 TJm -(arious) 24.3486 Tj --252 TJm -(return) 23.7907 Tj --252 TJm -(v) 4.9813 Tj -25 TJm -(alues) 20.4731 Tj --251 TJm -(are) 12.1643 Tj --252 TJm -(de\002ned.) 31.8205 Tj --631 TJm -(The) 15.4918 Tj --252 TJm -(follo) 18.8194 Tj -25 TJm -(wing) 19.9252 Tj --252 TJm -(list) 12.1843 Tj --251 TJm -(is) 6.6451 Tj --252 TJm -(not) 12.7322 Tj --252 TJm -(intended) 34.3112 Tj --252 TJm -(as) 8.2988 Tj --251 TJm -(an) 9.4047 Tj --252 TJm -(e) 4.4234 Tj -15 TJm -(xhausti) 28.782 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --252 TJm -(description) 44.2738 Tj --252 TJm -(of) 8.2988 Tj -72 481.112 Td -(the) 12.1743 Tj --236 TJm -(circumstances) 56.4381 Tj --236 TJm -(in) 7.7509 Tj --237 TJm -(which) 24.3486 Tj --236 TJm -(a) 4.4234 Tj --236 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --236 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj --236 TJm -(may) 17.1556 Tj --237 TJm -(be) 9.4047 Tj --236 TJm -(returned) 33.1954 Tj --236 TJm -(--) 6.6351 Tj --236 TJm -(those) 21.031 Tj --236 TJm -(descriptions) 48.1492 Tj --236 TJm -(are) 12.1643 Tj --237 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --236 TJm -(later) 17.7035 Tj -55 TJm -(.) 2.4907 Tj --305 TJm -(Rather) 26.5603 Tj -40 TJm -(,) 2.4907 Tj --239 TJm -(it) 5.5392 Tj --236 TJm -(is) 6.6451 Tj --237 TJm -(intended) 34.3112 Tj --236 TJm -(to) 7.7509 Tj -72 469.157 Td -(con) 14.386 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj -15 TJm -(y) 4.9813 Tj --266 TJm -(the) 12.1743 Tj --265 TJm -(rough) 23.2427 Tj --266 TJm -(meaning) 34.3112 Tj --265 TJm -(of) 8.2988 Tj --266 TJm -(each) 18.2515 Tj --266 TJm -(return) 23.7907 Tj --265 TJm -(v) 4.9813 Tj -25 TJm -(alue.) 19.0883 Tj --714 TJm -(The) 15.4918 Tj --265 TJm -(\002rst) 15.5018 Tj --266 TJm -(\002) 5.5392 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --265 TJm -(actions) 28.224 Tj --266 TJm -(are) 12.1643 Tj --266 TJm -(normal) 28.224 Tj --265 TJm -(and) 14.386 Tj --266 TJm -(not) 12.7322 Tj --265 TJm -(intended) 34.3112 Tj --266 TJm -(to) 7.7509 Tj --266 TJm -(denote) 26.5603 Tj --265 TJm -(an) 9.4047 Tj --266 TJm -(error) 19.3573 Tj -72 457.202 Td -(situation.) 36.8118 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 425.759 Td -/F124_0 9.9626 Tf -(BZ_OK) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 413.804 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --250 TJm -(requested) 38.1767 Tj --250 TJm -(action) 24.3486 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --250 TJm -(completed) 41.5042 Tj --250 TJm -(successfully) 48.6972 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 388.34 Td -/F124_0 9.9626 Tf -(BZ_RUN_OK,) 59.7756 Tj --600 TJm -(BZ_FLUSH_OK,) 71.7307 Tj --600 TJm -(BZ_FINISH_OK) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 376.384 Td -/F122_0 9.9626 Tf -(In) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -118.789 376.384 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -202.476 376.384 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(requested) 38.1767 Tj --250 TJm -(\003ush/\002nish/nothing-special) 108.4927 Tj --250 TJm -(action) 24.3486 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --250 TJm -(completed) 41.5042 Tj --250 TJm -(successfully) 48.6972 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 350.92 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 338.965 Td -/F122_0 9.9626 Tf -(Compression) 52.5826 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --250 TJm -(completed,) 43.9948 Tj --250 TJm -(or) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(logical) 27.1182 Tj --250 TJm -(stream) 26.5603 Tj --250 TJm -(end) 14.386 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --250 TJm -(detected) 33.1954 Tj --250 TJm -(during) 26.0123 Tj --250 TJm -(decompression.) 62.2563 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 303.756 Td -(The) 15.4918 Tj --250 TJm -(follo) 18.8194 Tj -25 TJm -(wing) 19.9252 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues) 20.4731 Tj --250 TJm -(indicate) 31.5416 Tj --250 TJm -(an) 9.4047 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(some) 21.031 Tj --250 TJm -(kind.) 20.2042 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 272.314 Td -/F124_0 9.9626 Tf -(BZ_CONFIG_ERROR) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 260.359 Td -/F122_0 9.9626 Tf -(Indicates) 35.965 Tj --386 TJm -(that) 14.9439 Tj --385 TJm -(the) 12.1743 Tj --386 TJm -(library) 26.5603 Tj --386 TJm -(has) 13.2801 Tj --386 TJm -(been) 18.8094 Tj --385 TJm -(improperly) 44.2738 Tj --386 TJm -(compiled) 37.0808 Tj --386 TJm -(on) 9.9626 Tj --386 TJm -(your) 18.2614 Tj --385 TJm -(platform) 34.3112 Tj --386 TJm -(--) 6.6351 Tj --386 TJm -(a) 4.4234 Tj --386 TJm -(major) 23.2427 Tj --385 TJm -(con\002guration) 53.1305 Tj --386 TJm -(error) 19.3573 Tj -55 TJm -(.) 2.4907 Tj -108 248.404 Td -(Speci\002cally) 47.0434 Tj -65 TJm -(,) 2.4907 Tj --481 TJm -(it) 5.5392 Tj --435 TJm -(means) 25.4544 Tj --435 TJm -(that) 14.9439 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -220.614 248.404 Td -/F124_0 9.9626 Tf -(sizeof\(char\)) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -292.345 248.404 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -299.628 248.404 Td -/F124_0 9.9626 Tf -(sizeof\(short\)) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -381.669 248.404 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -400.388 248.404 Td -/F124_0 9.9626 Tf -(sizeof\(int\)) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -470.474 248.404 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj --435 TJm -(not) 12.7322 Tj --435 TJm -(1,) 7.472 Tj --481 TJm -(2) 4.9813 Tj --435 TJm -(and) 14.386 Tj -108 236.448 Td -(4) 4.9813 Tj --389 TJm -(respecti) 30.9837 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ely) 12.1743 Tj -65 TJm -(,) 2.4907 Tj --424 TJm -(as) 8.2988 Tj --390 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --389 TJm -(should) 26.5703 Tj --389 TJm -(be.) 11.8953 Tj --1456 TJm -(Note) 19.3673 Tj --389 TJm -(that) 14.9439 Tj --389 TJm -(the) 12.1743 Tj --389 TJm -(library) 26.5603 Tj --390 TJm -(should) 26.5703 Tj --389 TJm -(still) 14.9539 Tj --389 TJm -(w) 7.193 Tj -10 TJm -(ork) 13.2801 Tj --389 TJm -(properly) 33.7533 Tj --390 TJm -(on) 9.9626 Tj --389 TJm -(64-bit) 23.8007 Tj --389 TJm -(platforms) 38.1866 Tj -108 224.493 Td -(which) 24.3486 Tj --292 TJm -(follo) 18.8194 Tj -25 TJm -(w) 7.193 Tj --292 TJm -(the) 12.1743 Tj --292 TJm -(LP64) 21.589 Tj --292 TJm -(programming) 54.2364 Tj --293 TJm -(model) 24.9065 Tj --292 TJm -(--) 6.6351 Tj --292 TJm -(that) 14.9439 Tj --292 TJm -(is,) 9.1357 Tj --303 TJm -(where) 24.3386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -355.279 224.493 Td -/F124_0 9.9626 Tf -(sizeof\(long\)) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -429.92 224.493 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -447.217 224.493 Td -/F124_0 9.9626 Tf -(sizeof\(void) 65.7532 Tj -512.97 222.75 Td -(*) 5.9776 Tj -518.948 224.493 Td -(\)) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -527.836 224.493 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj -108 212.538 Td -(8.) 7.472 Tj --620 TJm -(Under) 24.8965 Tj --250 TJm -(LP64,) 24.0796 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -175.606 212.538 Td -/F124_0 9.9626 Tf -(sizeof\(int\)) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -243.85 212.538 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(still) 14.9539 Tj --250 TJm -(4,) 7.472 Tj --250 TJm -(so) 8.8568 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -291.74 212.538 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -339.561 212.538 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(doesn') 26.5603 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -433.458 212.538 Td -/F124_0 9.9626 Tf -(long) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -459.859 212.538 Td -/F122_0 9.9626 Tf -(type,) 19.6462 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(OK.) 16.8766 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 187.073 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 175.118 Td -/F122_0 9.9626 Tf -(When) 23.7907 Tj --291 TJm -(using) 21.589 Tj --290 TJm -(the) 12.1743 Tj --291 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --300 TJm -(it) 5.5392 Tj --291 TJm -(is) 6.6451 Tj --290 TJm -(important) 38.7446 Tj --291 TJm -(to) 7.7509 Tj --290 TJm -(call) 14.386 Tj --291 TJm -(the) 12.1743 Tj --290 TJm -(functions) 37.0808 Tj --291 TJm -(in) 7.7509 Tj --290 TJm -(the) 12.1743 Tj --291 TJm -(correct) 27.6562 Tj --290 TJm -(sequence) 36.5129 Tj --291 TJm -(and) 14.386 Tj --290 TJm -(with) 17.7135 Tj --291 TJm -(data) 16.5977 Tj --290 TJm -(structures) 38.7346 Tj -108 163.163 Td -(\(b) 8.2988 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fers) 14.9339 Tj --206 TJm -(etc\)) 14.9339 Tj --205 TJm -(in) 7.7509 Tj --206 TJm -(the) 12.1743 Tj --205 TJm -(correct) 27.6562 Tj --206 TJm -(states.) 24.6275 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -239.409 163.163 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -289.278 163.163 Td -/F122_0 9.9626 Tf -(checks) 27.1082 Tj --206 TJm -(as) 8.2988 Tj --205 TJm -(much) 22.1369 Tj --206 TJm -(as) 8.2988 Tj --206 TJm -(it) 5.5392 Tj --205 TJm -(can) 13.8281 Tj --206 TJm -(to) 7.7509 Tj --205 TJm -(ensure) 26.0024 Tj --206 TJm -(this) 14.396 Tj --206 TJm -(is) 6.6451 Tj --205 TJm -(happening,) 43.9948 Tj --215 TJm -(and) 14.386 Tj --205 TJm -(returns) 27.6661 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 151.208 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -213.27 151.208 Td -/F122_0 9.9626 Tf -(if) 6.0871 Tj --367 TJm -(not.) 15.2229 Tj --659 TJm -(Code) 21.031 Tj --367 TJm -(which) 24.3486 Tj --367 TJm -(complies) 35.9749 Tj --366 TJm -(precisely) 35.965 Tj --367 TJm -(with) 17.7135 Tj --366 TJm -(the) 12.1743 Tj --367 TJm -(function) 33.2053 Tj --366 TJm -(semantics,) 41.7831 Tj --396 TJm -(as) 8.2988 Tj --367 TJm -(detailed) 31.5416 Tj -108 139.253 Td -(belo) 17.1556 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(should) 26.5703 Tj --250 TJm -(ne) 9.4047 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --250 TJm -(recei) 19.3573 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alue;) 19.3673 Tj --250 TJm -(such) 18.2614 Tj --250 TJm -(an) 9.4047 Tj --250 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ent) 12.1743 Tj --250 TJm -(denotes) 30.4357 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(uggy) 19.9252 Tj --250 TJm -(code) 18.8094 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(should) 26.5703 Tj --250 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(estig) 18.8194 Tj -5 TJm -(ate.) 14.107 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 113.788 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 101.833 Td -/F122_0 9.9626 Tf -(Returned) 36.5229 Tj --434 TJm -(when) 21.579 Tj --434 TJm -(a) 4.4234 Tj --434 TJm -(parameter) 39.8305 Tj --434 TJm -(to) 7.7509 Tj --434 TJm -(a) 4.4234 Tj --433 TJm -(function) 33.2053 Tj --434 TJm -(call) 14.386 Tj --434 TJm -(is) 6.6451 Tj --434 TJm -(out) 12.7322 Tj --434 TJm -(of) 8.2988 Tj --434 TJm -(range) 22.1269 Tj --434 TJm -(or) 8.2988 Tj --434 TJm -(otherwise) 38.7346 Tj --434 TJm -(manifestly) 42.0621 Tj --434 TJm -(incorrect.) 37.8977 Tj --1723 TJm -(As) 11.0684 Tj -108 89.878 Td -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -131.644 89.878 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -233.263 89.878 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --595 TJm -(this) 14.396 Tj --596 TJm -(denotes) 30.4357 Tj --595 TJm -(a) 4.4234 Tj --595 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj --596 TJm -(in) 7.7509 Tj --595 TJm -(the) 12.1743 Tj --595 TJm -(client) 22.1369 Tj --595 TJm -(code.) 21.3 Tj --2692 TJm -(The) 15.4918 Tj --596 TJm -(distinction) 42.0721 Tj --595 TJm -(between) 33.1954 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 77.923 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -194.177 77.923 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -211.054 77.923 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -315.163 77.923 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(bit) 10.5205 Tj --250 TJm -(hazy) 18.8094 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(still) 14.9539 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(orth) 16.0497 Tj --250 TJm -(making.) 32.3785 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(10) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 11 14 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F124_0 9.9626 Tf -(BZ_MEM_ERROR) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 698.082 Td -/F122_0 9.9626 Tf -(Returned) 36.5229 Tj --228 TJm -(when) 21.579 Tj --227 TJm -(a) 4.4234 Tj --228 TJm -(request) 28.772 Tj --227 TJm -(to) 7.7509 Tj --228 TJm -(allocate) 30.9837 Tj --228 TJm -(memory) 33.2053 Tj --227 TJm -(f) 3.3175 Tj -10 TJm -(ailed.) 21.8579 Tj --605 TJm -(Note) 19.3673 Tj --228 TJm -(that) 14.9439 Tj --228 TJm -(the) 12.1743 Tj --227 TJm -(quantity) 32.6574 Tj --228 TJm -(of) 8.2988 Tj --227 TJm -(memory) 33.2053 Tj --228 TJm -(needed) 28.2141 Tj --228 TJm -(to) 7.7509 Tj --227 TJm -(decompress) 47.0334 Tj -108 686.127 Td -(a) 4.4234 Tj --351 TJm -(stream) 26.5603 Tj --352 TJm -(cannot) 26.5603 Tj --351 TJm -(be) 9.4047 Tj --352 TJm -(determined) 44.8217 Tj --351 TJm -(until) 18.2714 Tj --352 TJm -(the) 12.1743 Tj --351 TJm -(stream') 29.8778 Tj -55 TJm -(s) 3.8755 Tj --351 TJm -(header) 26.5503 Tj --352 TJm -(has) 13.2801 Tj --351 TJm -(been) 18.8094 Tj --352 TJm -(read.) 19.6363 Tj --1228 TJm -(So) 10.5205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -426.471 686.127 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -525.614 686.127 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 674.172 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -172.13 674.172 Td -/F122_0 9.9626 Tf -(may) 17.1556 Tj --437 TJm -(return) 23.7907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -221.784 674.172 Td -/F124_0 9.9626 Tf -(BZ_MEM_ERROR) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -297.867 674.172 Td -/F122_0 9.9626 Tf -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --437 TJm -(though) 27.6761 Tj --437 TJm -(some) 21.031 Tj --437 TJm -(of) 8.2988 Tj --437 TJm -(the) 12.1743 Tj --437 TJm -(compressed) 47.0334 Tj --437 TJm -(data) 16.5977 Tj --437 TJm -(has) 13.2801 Tj --437 TJm -(been) 18.8094 Tj --437 TJm -(read.) 19.6363 Tj -108 662.217 Td -(The) 15.4918 Tj --479 TJm -(same) 20.4731 Tj --478 TJm -(is) 6.6451 Tj --479 TJm -(not) 12.7322 Tj --478 TJm -(true) 15.4918 Tj --479 TJm -(for) 11.6164 Tj --479 TJm -(compression;) 53.1305 Tj --593 TJm -(once) 18.8094 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -301.675 662.217 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -414.04 662.217 Td -/F122_0 9.9626 Tf -(or) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -427.107 662.217 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteOpen) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -521.539 662.217 Td -/F122_0 9.9626 Tf -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj -108 650.261 Td -(successfully) 48.6972 Tj --250 TJm -(completed,) 43.9948 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -205.672 650.261 Td -/F124_0 9.9626 Tf -(BZ_MEM_ERROR) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -279.894 650.261 Td -/F122_0 9.9626 Tf -(cannot) 26.5603 Tj --250 TJm -(occur) 22.1269 Tj -55 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 624.359 Td -/F124_0 9.9626 Tf -(BZ_DATA_ERROR) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 612.404 Td -/F122_0 9.9626 Tf -(Returned) 36.5229 Tj --266 TJm -(when) 21.579 Tj --265 TJm -(a) 4.4234 Tj --266 TJm -(data) 16.5977 Tj --265 TJm -(inte) 14.9439 Tj -15 TJm -(grity) 18.8194 Tj --266 TJm -(error) 19.3573 Tj --266 TJm -(is) 6.6451 Tj --265 TJm -(detected) 33.1954 Tj --266 TJm -(during) 26.0123 Tj --265 TJm -(decompression.) 62.2563 Tj --714 TJm -(Most) 20.4831 Tj --266 TJm -(importantl) 41.5142 Tj -1 TJm -(y) 4.9813 Tj -64 TJm -(,) 2.4907 Tj --269 TJm -(this) 14.396 Tj --266 TJm -(means) 25.4544 Tj --265 TJm -(when) 21.579 Tj -108 600.448 Td -(stored) 24.3486 Tj --222 TJm -(and) 14.386 Tj --223 TJm -(computed) 39.2925 Tj --222 TJm -(CRCs) 23.8106 Tj --222 TJm -(for) 11.6164 Tj --222 TJm -(the) 12.1743 Tj --223 TJm -(data) 16.5977 Tj --222 TJm -(do) 9.9626 Tj --222 TJm -(not) 12.7322 Tj --222 TJm -(match.) 26.8392 Tj --602 TJm -(This) 17.7135 Tj --222 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj --222 TJm -(is) 6.6451 Tj --223 TJm -(also) 16.0497 Tj --222 TJm -(returned) 33.1954 Tj --222 TJm -(upon) 19.9252 Tj --222 TJm -(detection) 36.5229 Tj --223 TJm -(of) 8.2988 Tj --222 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --222 TJm -(other) 20.4731 Tj -108 588.493 Td -(anomaly) 34.3112 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(data.) 19.0883 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 562.59 Td -/F124_0 9.9626 Tf -(BZ_DATA_ERROR_MAGIC) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 550.635 Td -/F122_0 9.9626 Tf -(As) 11.0684 Tj --306 TJm -(a) 4.4234 Tj --306 TJm -(special) 27.6661 Tj --306 TJm -(case) 17.1456 Tj --307 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -191.852 550.635 Td -/F124_0 9.9626 Tf -(BZ_DATA_ERROR) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -269.561 550.635 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --306 TJm -(it) 5.5392 Tj --306 TJm -(is) 6.6451 Tj --306 TJm -(sometimes) 42.62 Tj --306 TJm -(useful) 24.3486 Tj --307 TJm -(to) 7.7509 Tj --306 TJm -(kno) 14.9439 Tj -25 TJm -(w) 7.193 Tj --306 TJm -(when) 21.579 Tj --306 TJm -(the) 12.1743 Tj --306 TJm -(compressed) 47.0334 Tj --306 TJm -(stream) 26.5603 Tj --306 TJm -(does) 18.2614 Tj -108 538.68 Td -(not) 12.7322 Tj --250 TJm -(start) 17.1556 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(correct) 27.6562 Tj --250 TJm -(magic) 24.3486 Tj --250 TJm -(bytes) 21.031 Tj --250 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -261.562 538.68 Td -/F124_0 9.9626 Tf -('B') 17.9327 Tj --600 TJm -('Z') 17.9327 Tj --600 TJm -('h') 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -327.316 538.68 Td -/F122_0 9.9626 Tf -(\).) 5.8082 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 512.777 Td -/F124_0 9.9626 Tf -(BZ_IO_ERROR) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 500.822 Td -/F122_0 9.9626 Tf -(Returned) 36.5229 Tj --233 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -159.123 500.822 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -221.218 500.822 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -237.922 500.822 Td -/F124_0 9.9626 Tf -(BZ2_bzWrite) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -305.995 500.822 Td -/F122_0 9.9626 Tf -(when) 21.579 Tj --233 TJm -(there) 19.9152 Tj --232 TJm -(is) 6.6451 Tj --233 TJm -(an) 9.4047 Tj --233 TJm -(error) 19.3573 Tj --233 TJm -(reading) 29.8778 Tj --232 TJm -(or) 8.2988 Tj --233 TJm -(writing) 28.782 Tj --233 TJm -(in) 7.7509 Tj --233 TJm -(the) 12.1743 Tj --232 TJm -(compressed) 47.0334 Tj -108 488.867 Td -(\002le,) 15.2229 Tj --384 TJm -(and) 14.386 Tj --357 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -158.511 488.867 Td -/F124_0 9.9626 Tf -(BZ2_bzReadOpen) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -245.755 488.867 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -263.698 488.867 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteOpen) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -356.92 488.867 Td -/F122_0 9.9626 Tf -(for) 11.6164 Tj --357 TJm -(attempts) 33.7633 Tj --357 TJm -(to) 7.7509 Tj --357 TJm -(use) 13.2801 Tj --357 TJm -(a) 4.4234 Tj --357 TJm -(\002le) 12.7322 Tj --357 TJm -(for) 11.6164 Tj --358 TJm -(which) 24.3486 Tj --357 TJm -(the) 12.1743 Tj --357 TJm -(error) 19.3573 Tj -108 476.912 Td -(indicator) 35.417 Tj --260 TJm -(\(viz,) 17.9825 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -166.603 476.912 Td -/F124_0 9.9626 Tf -(ferror\(f\)) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -220.401 476.912 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --260 TJm -(is) 6.6451 Tj --260 TJm -(set.) 13.5591 Tj --680 TJm -(On) 12.1743 Tj --259 TJm -(receipt) 27.1082 Tj --260 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -311.223 476.912 Td -/F124_0 9.9626 Tf -(BZ_IO_ERROR) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -376.976 476.912 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --260 TJm -(the) 12.1743 Tj --260 TJm -(caller) 22.1269 Tj --260 TJm -(should) 26.5703 Tj --260 TJm -(consult) 28.782 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -482.068 476.912 Td -/F124_0 9.9626 Tf -(errno) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -514.546 476.912 Td -/F122_0 9.9626 Tf -(and/or) 25.4544 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 464.956 Td -/F124_0 9.9626 Tf -(perror) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -146.356 464.956 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(acquire) 29.3199 Tj --250 TJm -(operating-system) 68.6224 Tj --250 TJm -(speci\002c) 30.4357 Tj --250 TJm -(information) 47.0434 Tj --250 TJm -(about) 22.1369 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(problem.) 35.696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 439.054 Td -/F124_0 9.9626 Tf -(BZ_UNEXPECTED_EOF) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 427.099 Td -/F122_0 9.9626 Tf -(Returned) 36.5229 Tj --250 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -159.467 427.099 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -221.733 427.099 Td -/F122_0 9.9626 Tf -(when) 21.579 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(\002nishes) 30.4457 Tj --250 TJm -(before) 25.4445 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(logical) 27.1182 Tj --250 TJm -(end) 14.386 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(stream) 26.5603 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(detected.) 35.686 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 401.196 Td -/F124_0 9.9626 Tf -(BZ_OUTBUFF_FULL) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -108 389.241 Td -/F122_0 9.9626 Tf -(Returned) 36.5229 Tj --258 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -159.632 389.241 Td -/F124_0 9.9626 Tf -(BZ2_bzBuffToBuffCompress) 143.4614 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -305.668 389.241 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -322.627 389.241 Td -/F124_0 9.9626 Tf -(BZ2_bzBuffToBuffDecompress) 155.4166 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -480.617 389.241 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --258 TJm -(indicate) 31.5416 Tj --259 TJm -(that) 14.9439 Tj -108 377.285 Td -(the) 12.1743 Tj --250 TJm -(output) 25.4644 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(will) 15.5018 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(\002t) 8.3088 Tj --250 TJm -(into) 15.5018 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(output) 25.4644 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --250 TJm -(pro) 13.2801 Tj -15 TJm -(vided.) 24.6275 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 328.585 Td -/F116_0 20.6585 Tf -(3.3.) 34.4584 Tj --278 TJm -(Lo) 25.2447 Tj -15 TJm -(w-le) 40.1808 Tj -15 TJm -(vel) 28.7153 Tj --278 TJm -(interface) 86.1046 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 297.964 Td -/F116_0 17.2154 Tf -(3.3.1.) 43.0729 Tj --278 TJm -(BZ2_bzCompressInit) 171.2244 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.852 Td -/F122_0 9.9626 Tf -(11) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 12 15 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 445.031] cm -0 0 468 274.969 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(typedef) 41.8429 Tj --426 TJm -(struct) 35.8654 Tj --426 TJm -({) 5.9776 Tj -98.488 699.676 Td -(char) 23.9102 Tj -126.642 697.933 Td -(*) 5.9776 Tj -132.62 699.676 Td -(next_in;) 47.8205 Tj -98.488 687.721 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(avail_in;) 53.798 Tj -98.488 675.766 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(total_in_lo32;) 83.6858 Tj -98.488 663.811 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(total_in_hi32;) 83.6858 Tj -98.488 639.9 Td -(char) 23.9102 Tj -126.642 638.157 Td -(*) 5.9776 Tj -132.62 639.9 Td -(next_out;) 53.798 Tj -98.488 627.945 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(avail_out;) 59.7756 Tj -98.488 615.99 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(total_out_lo32;) 89.6634 Tj -98.488 604.035 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(total_out_hi32;) 89.6634 Tj -98.488 580.124 Td -(void) 23.9102 Tj -126.642 578.381 Td -(*) 5.9776 Tj -132.62 580.124 Td -(state;) 35.8654 Tj -98.488 556.214 Td -(void) 23.9102 Tj -126.642 554.471 Td -(*) 5.9776 Tj -132.62 556.214 Td -(\() 5.9776 Tj -138.597 554.471 Td -(*) 5.9776 Tj -144.575 556.214 Td -(bzalloc\)\(void) 77.7083 Tj -226.528 554.471 Td -(*) 5.9776 Tj -232.505 556.214 Td -(,int,int\);) 59.7756 Tj -98.488 544.259 Td -(void) 23.9102 Tj --426 TJm -(\() 5.9776 Tj -132.62 542.515 Td -(*) 5.9776 Tj -138.597 544.259 Td -(bzfree\)\(void) 71.7307 Tj -214.572 542.515 Td -(*) 5.9776 Tj -220.55 544.259 Td -(,void) 29.8878 Tj -254.682 542.515 Td -(*) 5.9776 Tj -260.659 544.259 Td -(\);) 11.9551 Tj -98.488 532.304 Td -(void) 23.9102 Tj -126.642 530.56 Td -(*) 5.9776 Tj -132.62 532.304 Td -(opaque;) 41.8429 Tj -90 520.349 Td -(}) 5.9776 Tj --426 TJm -(bz_stream;) 59.7756 Tj -90 496.438 Td -(int) 17.9327 Tj --426 TJm -(BZ2_bzCompressInit) 107.5961 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bz_stream) 53.798 Tj -292.281 494.695 Td -(*) 5.9776 Tj -298.259 496.438 Td -(strm,) 29.8878 Tj -196.099 484.483 Td -(int) 17.9327 Tj --426 TJm -(blockSize100k,) 83.6858 Tj -196.099 472.528 Td -(int) 17.9327 Tj --426 TJm -(verbosity,) 59.7756 Tj -196.099 460.573 Td -(int) 17.9327 Tj --426 TJm -(workFactor) 59.7756 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 423.113 Td -/F122_0 9.9626 Tf -(Prepares) 34.3012 Tj --356 TJm -(for) 11.6164 Tj --356 TJm -(compression.) 52.8516 Tj --1256 TJm -(The) 15.4918 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -209.41 423.113 Td -/F124_0 9.9626 Tf -(bz_stream) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -266.754 423.113 Td -/F122_0 9.9626 Tf -(structure) 34.8591 Tj --356 TJm -(holds) 21.589 Tj --356 TJm -(all) 9.9626 Tj --356 TJm -(data) 16.5977 Tj --356 TJm -(pertaining) 40.3983 Tj --356 TJm -(to) 7.7509 Tj --356 TJm -(the) 12.1743 Tj --356 TJm -(compression) 50.3609 Tj --355 TJm -(acti) 14.386 Tj -25 TJm -(vity) 15.5018 Tj -65 TJm -(.) 2.4907 Tj --1256 TJm -(A) 7.193 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 411.158 Td -/F124_0 9.9626 Tf -(bz_stream) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -128.581 411.158 Td -/F122_0 9.9626 Tf -(structure) 34.8591 Tj --279 TJm -(should) 26.5703 Tj --280 TJm -(be) 9.4047 Tj --279 TJm -(allocated) 35.965 Tj --279 TJm -(and) 14.386 Tj --280 TJm -(initialised) 39.3025 Tj --279 TJm -(prior) 19.3673 Tj --279 TJm -(to) 7.7509 Tj --279 TJm -(the) 12.1743 Tj --280 TJm -(call.) 16.8766 Tj --796 TJm -(The) 15.4918 Tj --279 TJm -(\002elds) 21.589 Tj --279 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -431.939 411.158 Td -/F124_0 9.9626 Tf -(bz_stream) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -488.52 411.158 Td -/F122_0 9.9626 Tf -(comprise) 36.5229 Tj --279 TJm -(the) 12.1743 Tj -72 399.203 Td -(entirety) 30.4357 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(user) 16.5977 Tj -20 TJm -(-visible) 29.8878 Tj --250 TJm -(data.) 19.0883 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -204.422 399.203 Td -/F124_0 9.9626 Tf -(state) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -236.8 399.203 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(pointer) 28.224 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(pri) 11.0684 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ate) 11.6164 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(structures) 38.7346 Tj --250 TJm -(required) 33.1954 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(compression.) 52.8516 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 377.285 Td -(Custom) 31.0036 Tj --372 TJm -(memory) 33.2053 Tj --372 TJm -(allocators) 38.7346 Tj --372 TJm -(are) 12.1643 Tj --372 TJm -(supported,) 41.7831 Tj --403 TJm -(via) 12.1743 Tj --372 TJm -(\002elds) 21.589 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -288.908 377.285 Td -/F124_0 9.9626 Tf -(bzalloc) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -330.751 377.285 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -337.253 377.285 Td -/F124_0 9.9626 Tf -(bzfree) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -373.118 377.285 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --403 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -397.714 377.285 Td -/F124_0 9.9626 Tf -(opaque) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -433.579 377.285 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1353 TJm -(The) 15.4918 Tj --372 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -493.782 377.285 Td -/F124_0 9.9626 Tf -(opaque) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -533.355 377.285 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj -72 365.33 Td -(passed) 26.5603 Tj --306 TJm -(to) 7.7509 Tj --306 TJm -(as) 8.2988 Tj --306 TJm -(the) 12.1743 Tj --306 TJm -(\002rst) 15.5018 Tj --306 TJm -(ar) 7.7409 Tj -18 TJm -(gument) 29.8878 Tj --306 TJm -(to) 7.7509 Tj --306 TJm -(all) 9.9626 Tj --306 TJm -(calls) 18.2614 Tj --305 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -253.941 365.33 Td -/F124_0 9.9626 Tf -(bzalloc) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -298.832 365.33 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -316.266 365.33 Td -/F124_0 9.9626 Tf -(bzfree) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -352.132 365.33 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --320 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --306 TJm -(is) 6.6451 Tj --306 TJm -(otherwise) 38.7346 Tj --306 TJm -(ignored) 30.4357 Tj --306 TJm -(by) 9.9626 Tj --306 TJm -(the) 12.1743 Tj --306 TJm -(library) 26.5603 Tj -65 TJm -(.) 2.4907 Tj --955 TJm -(The) 15.4918 Tj -72 353.375 Td -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -89.431 353.375 Td -/F124_0 9.9626 Tf -(bzalloc) 41.8429 Tj --600 TJm -(\() 5.9776 Tj --600 TJm -(opaque,) 41.8429 Tj --600 TJm -(n,) 11.9551 Tj --600 TJm -(m) 5.9776 Tj --600 TJm -(\)) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -235.938 353.375 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --306 TJm -(e) 4.4234 Tj -15 TJm -(xpected) 30.9837 Tj --305 TJm -(to) 7.7509 Tj --306 TJm -(return) 23.7907 Tj --306 TJm -(a) 4.4234 Tj --305 TJm -(pointer) 28.224 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -360.3 353.375 Td -/F124_0 9.9626 Tf -(p) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -369.322 353.375 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -380.118 353.375 Td -/F124_0 9.9626 Tf -(n) 5.9776 Tj -392.073 351.631 Td -(*) 5.9776 Tj -404.029 353.375 Td -(m) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -413.051 353.375 Td -/F122_0 9.9626 Tf -(bytes) 21.031 Tj --306 TJm -(of) 8.2988 Tj --305 TJm -(memory) 33.2053 Tj -65 TJm -(,) 2.4907 Tj --320 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -504.135 353.375 Td -/F124_0 9.9626 Tf -(bzfree) 35.8654 Tj -72 341.42 Td -(\() 5.9776 Tj --600 TJm -(opaque,) 41.8429 Tj --600 TJm -(p) 5.9776 Tj --600 TJm -(\)) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -152.199 341.42 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --250 TJm -(free) 15.4819 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(memory) 33.2053 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 319.502 Td -(If) 6.6351 Tj --280 TJm -(you) 14.9439 Tj --280 TJm -(don') 18.2614 Tj -18 TJm -(t) 2.7696 Tj --280 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --279 TJm -(to) 7.7509 Tj --280 TJm -(use) 13.2801 Tj --280 TJm -(a) 4.4234 Tj --280 TJm -(custom) 28.782 Tj --280 TJm -(memory) 33.2053 Tj --279 TJm -(allocator) 34.8591 Tj -40 TJm -(,) 2.4907 Tj --288 TJm -(set) 11.0684 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -299.9 319.502 Td -/F124_0 9.9626 Tf -(bzalloc) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -341.743 319.502 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -347.096 319.502 Td -/F124_0 9.9626 Tf -(bzfree) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -385.749 319.502 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -402.923 319.502 Td -/F124_0 9.9626 Tf -(opaque) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -441.576 319.502 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -452.115 319.502 Td -/F124_0 9.9626 Tf -(NULL) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -476.025 319.502 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --280 TJm -(and) 14.386 Tj --280 TJm -(the) 12.1743 Tj --280 TJm -(library) 26.5603 Tj -72 307.547 Td -(will) 15.5018 Tj --250 TJm -(then) 17.1556 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(standard) 33.7533 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -176.318 307.547 Td -/F124_0 9.9626 Tf -(malloc) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -214.674 307.547 Td -/F122_0 9.9626 Tf -(/) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -219.934 307.547 Td -/F124_0 9.9626 Tf -(free) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -246.335 307.547 Td -/F122_0 9.9626 Tf -(routines.) 34.5901 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 285.629 Td -(Before) 27.1082 Tj --362 TJm -(calling) 27.1182 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -133.438 285.629 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -241.035 285.629 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --390 TJm -(\002elds) 21.589 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -272.606 285.629 Td -/F124_0 9.9626 Tf -(bzalloc) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -314.449 285.629 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -320.825 285.629 Td -/F124_0 9.9626 Tf -(bzfree) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -360.296 285.629 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -378.289 285.629 Td -/F124_0 9.9626 Tf -(opaque) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -417.76 285.629 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --362 TJm -(be) 9.4047 Tj --362 TJm -(\002lled) 20.4831 Tj --362 TJm -(appropriately) 53.1206 Tj -65 TJm -(,) 2.4907 Tj -72 273.674 Td -(as) 8.2988 Tj --322 TJm -(just) 14.396 Tj --323 TJm -(described.) 40.6673 Tj --1055 TJm -(Upon) 22.1369 Tj --322 TJm -(return,) 26.2813 Tj --341 TJm -(the) 12.1743 Tj --322 TJm -(internal) 30.4357 Tj --323 TJm -(state) 18.2614 Tj --322 TJm -(will) 15.5018 Tj --323 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --322 TJm -(been) 18.8094 Tj --323 TJm -(allocated) 35.965 Tj --322 TJm -(and) 14.386 Tj --323 TJm -(initialised,) 41.7931 Tj --340 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -459.801 273.674 Td -/F124_0 9.9626 Tf -(total_in_lo32) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -537.509 273.674 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 261.718 Td -/F124_0 9.9626 Tf -(total_in_hi32) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -149.709 261.718 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -155.006 261.718 Td -/F124_0 9.9626 Tf -(total_out_lo32) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -241.435 261.718 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -258.564 261.718 Td -/F124_0 9.9626 Tf -(total_out_hi32) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -344.994 261.718 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --275 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --276 TJm -(been) 18.8094 Tj --275 TJm -(set) 11.0684 Tj --275 TJm -(to) 7.7509 Tj --276 TJm -(zero.) 19.6363 Tj --772 TJm -(These) 23.7907 Tj --275 TJm -(four) 16.5977 Tj --275 TJm -(\002elds) 21.589 Tj --276 TJm -(are) 12.1643 Tj -72 249.763 Td -(used) 18.2614 Tj --340 TJm -(by) 9.9626 Tj --339 TJm -(the) 12.1743 Tj --340 TJm -(library) 26.5603 Tj --339 TJm -(to) 7.7509 Tj --340 TJm -(inform) 27.1182 Tj --339 TJm -(the) 12.1743 Tj --340 TJm -(caller) 22.1269 Tj --339 TJm -(of) 8.2988 Tj --340 TJm -(the) 12.1743 Tj --339 TJm -(total) 17.7135 Tj --340 TJm -(amount) 29.8878 Tj --339 TJm -(of) 8.2988 Tj --340 TJm -(data) 16.5977 Tj --340 TJm -(passed) 26.5603 Tj --339 TJm -(into) 15.5018 Tj --340 TJm -(and) 14.386 Tj --339 TJm -(out) 12.7322 Tj --340 TJm -(of) 8.2988 Tj --339 TJm -(the) 12.1743 Tj --340 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --362 TJm -(respecti) 30.9837 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ely) 12.1743 Tj -65 TJm -(.) 2.4907 Tj -72 237.808 Td -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --376 TJm -(should) 26.5703 Tj --377 TJm -(not) 12.7322 Tj --376 TJm -(try) 11.0684 Tj --376 TJm -(to) 7.7509 Tj --377 TJm -(change) 28.2141 Tj --376 TJm -(them.) 22.4159 Tj --1378 TJm -(As) 11.0684 Tj --377 TJm -(of) 8.2988 Tj --376 TJm -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --377 TJm -(1.0,) 14.9439 Tj --408 TJm -(64-bit) 23.8007 Tj --376 TJm -(counts) 26.0123 Tj --376 TJm -(are) 12.1643 Tj --377 TJm -(maintained,) 46.7644 Tj --408 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --376 TJm -(on) 9.9626 Tj --376 TJm -(32-bit) 23.8007 Tj --377 TJm -(platforms,) 40.6773 Tj -72 225.853 Td -(using) 21.589 Tj --371 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -113.148 225.853 Td -/F124_0 9.9626 Tf -(_hi32) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -146.729 225.853 Td -/F122_0 9.9626 Tf -(\002elds) 21.589 Tj --371 TJm -(to) 7.7509 Tj --370 TJm -(store) 19.3673 Tj --371 TJm -(the) 12.1743 Tj --371 TJm -(upper) 22.6848 Tj --370 TJm -(32) 9.9626 Tj --371 TJm -(bits) 14.396 Tj --370 TJm -(of) 8.2988 Tj --371 TJm -(the) 12.1743 Tj --371 TJm -(count.) 24.6275 Tj --1344 TJm -(So,) 13.0112 Tj --400 TJm -(for) 11.6164 Tj --371 TJm -(e) 4.4234 Tj -15 TJm -(xample,) 31.8205 Tj --401 TJm -(the) 12.1743 Tj --371 TJm -(total) 17.7135 Tj --370 TJm -(amount) 29.8878 Tj --371 TJm -(of) 8.2988 Tj --370 TJm -(data) 16.5977 Tj --371 TJm -(in) 7.7509 Tj --371 TJm -(is) 6.6451 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 213.898 Td -/F124_0 9.9626 Tf -(\(total_in_hi32) 83.6858 Tj --600 TJm -(<<) 11.9551 Tj --600 TJm -(32\)) 17.9327 Tj --600 TJm -(+) 5.9776 Tj --600 TJm -(total_in_lo32) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -293.171 213.898 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 191.98 Td -(P) 5.5392 Tj -15 TJm -(arameter) 34.8492 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -115.367 191.98 Td -/F124_0 9.9626 Tf -(blockSize100k) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -196.205 191.98 Td -/F122_0 9.9626 Tf -(speci\002es) 34.3112 Tj --314 TJm -(the) 12.1743 Tj --314 TJm -(block) 22.1369 Tj --314 TJm -(size) 15.4918 Tj --314 TJm -(to) 7.7509 Tj --314 TJm -(be) 9.4047 Tj --314 TJm -(used) 18.2614 Tj --314 TJm -(for) 11.6164 Tj --314 TJm -(compression.) 52.8516 Tj --1004 TJm -(It) 6.0871 Tj --314 TJm -(should) 26.5703 Tj --314 TJm -(be) 9.4047 Tj --314 TJm -(a) 4.4234 Tj --315 TJm -(v) 4.9813 Tj -25 TJm -(al) 7.193 Tj -1 TJm -(u) 4.9813 Tj --1 TJm -(e) 4.4234 Tj --314 TJm -(between) 33.1954 Tj --314 TJm -(1) 4.9813 Tj -72 180.025 Td -(and) 14.386 Tj --289 TJm -(9) 4.9813 Tj --289 TJm -(inclusi) 26.5703 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e,) 6.914 Tj --299 TJm -(and) 14.386 Tj --289 TJm -(the) 12.1743 Tj --289 TJm -(actual) 23.7907 Tj --289 TJm -(block) 22.1369 Tj --289 TJm -(size) 15.4918 Tj --289 TJm -(used) 18.2614 Tj --289 TJm -(is) 6.6451 Tj --289 TJm -(100000) 29.8878 Tj --289 TJm -(x) 4.9813 Tj --289 TJm -(this) 14.396 Tj --289 TJm -(\002gure.) 25.7334 Tj --854 TJm -(9) 4.9813 Tj --290 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --289 TJm -(the) 12.1743 Tj --289 TJm -(best) 16.0497 Tj --289 TJm -(compression) 50.3609 Tj --289 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --289 TJm -(tak) 12.1743 Tj -10 TJm -(es) 8.2988 Tj --289 TJm -(most) 19.3773 Tj -72 168.07 Td -(memory) 33.2053 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 146.152 Td -(P) 5.5392 Tj -15 TJm -(arameter) 34.8492 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -115.095 146.152 Td -/F124_0 9.9626 Tf -(verbosity) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -171.75 146.152 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --287 TJm -(be) 9.4047 Tj --286 TJm -(set) 11.0684 Tj --287 TJm -(to) 7.7509 Tj --287 TJm -(a) 4.4234 Tj --287 TJm -(number) 30.4357 Tj --286 TJm -(between) 33.1954 Tj --287 TJm -(0) 4.9813 Tj --287 TJm -(and) 14.386 Tj --287 TJm -(4) 4.9813 Tj --286 TJm -(inclusi) 26.5703 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e.) 6.914 Tj --841 TJm -(0) 4.9813 Tj --286 TJm -(is) 6.6451 Tj --287 TJm -(silent,) 24.0796 Tj --296 TJm -(and) 14.386 Tj --287 TJm -(greater) 27.6562 Tj --287 TJm -(numbers) 34.3112 Tj --286 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj -72 134.197 Td -(increasingly) 48.6972 Tj --342 TJm -(v) 4.9813 Tj -15 TJm -(erbose) 26.0024 Tj --342 TJm -(monitoring/deb) 61.4394 Tj -20 TJm -(ugging) 27.6761 Tj --342 TJm -(output.) 27.9551 Tj --1173 TJm -(If) 6.6351 Tj --343 TJm -(the) 12.1743 Tj --342 TJm -(library) 26.5603 Tj --342 TJm -(has) 13.2801 Tj --342 TJm -(been) 18.8094 Tj --342 TJm -(compiled) 37.0808 Tj --342 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -446.429 134.197 Td -/F124_0 9.9626 Tf -(-DBZ_NO_STDIO) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -524.138 134.197 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --342 TJm -(no) 9.9626 Tj -72 122.241 Td -(such) 18.2614 Tj --250 TJm -(output) 25.4644 Tj --250 TJm -(will) 15.5018 Tj --250 TJm -(appear) 26.5503 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --250 TJm -(v) 4.9813 Tj -15 TJm -(erbosity) 32.0995 Tj --250 TJm -(setting.) 29.0609 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 100.324 Td -(P) 5.5392 Tj -15 TJm -(arameter) 34.8492 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -116.619 100.324 Td -/F124_0 9.9626 Tf -(workFactor) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -180.775 100.324 Td -/F122_0 9.9626 Tf -(controls) 32.0995 Tj --440 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --439 TJm -(the) 12.1743 Tj --440 TJm -(compression) 50.3609 Tj --439 TJm -(phase) 22.6848 Tj --440 TJm -(beha) 18.8094 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --440 TJm -(when) 21.579 Tj --439 TJm -(presented) 38.1767 Tj --440 TJm -(with) 17.7135 Tj --440 TJm -(w) 7.193 Tj -10 TJm -(orst) 14.9439 Tj --439 TJm -(case,) 19.6363 Tj --487 TJm -(highly) 25.4644 Tj -72 88.368 Td -(repetiti) 28.224 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e,) 6.914 Tj --433 TJm -(input) 20.4831 Tj --396 TJm -(data.) 19.0883 Tj --1496 TJm -(If) 6.6351 Tj --396 TJm -(compression) 50.3609 Tj --396 TJm -(runs) 17.1556 Tj --397 TJm -(i) 2.7696 Tj -1 TJm -(nto) 12.7322 Tj --397 TJm -(dif) 11.0684 Tj -25 TJm -(\002culties) 31.5516 Tj --396 TJm -(caused) 27.1082 Tj --396 TJm -(by) 9.9626 Tj --396 TJm -(repetiti) 28.224 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --396 TJm -(data,) 19.0883 Tj --432 TJm -(the) 12.1743 Tj --397 TJm -(library) 26.5603 Tj --396 TJm -(switches) 34.3112 Tj --396 TJm -(from) 19.3673 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.852 Td -(12) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 13 16 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(the) 12.1743 Tj --255 TJm -(standard) 33.7533 Tj --254 TJm -(sorting) 27.6761 Tj --255 TJm -(algorithm) 38.7446 Tj --254 TJm -(to) 7.7509 Tj --255 TJm -(a) 4.4234 Tj --255 TJm -(f) 3.3175 Tj -10 TJm -(allback) 28.772 Tj --254 TJm -(algorithm.) 41.2352 Tj --648 TJm -(The) 15.4918 Tj --255 TJm -(f) 3.3175 Tj -10 TJm -(allback) 28.772 Tj --254 TJm -(is) 6.6451 Tj --255 TJm -(slo) 11.6264 Tj -25 TJm -(wer) 14.9339 Tj --255 TJm -(than) 17.1556 Tj --254 TJm -(the) 12.1743 Tj --255 TJm -(standard) 33.7533 Tj --254 TJm -(algorithm) 38.7446 Tj --255 TJm -(by) 9.9626 Tj --255 TJm -(perhaps) 30.9837 Tj -72 698.082 Td -(a) 4.4234 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(actor) 19.9152 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(three,) 22.4059 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(al) 7.193 Tj -10 TJm -(w) 7.193 Tj -10 TJm -(ays) 13.2801 Tj --250 TJm -(beha) 18.8094 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --250 TJm -(reasonably) 43.158 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(no) 9.9626 Tj --250 TJm -(matter) 25.4544 Tj --250 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(bad) 14.386 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(input.) 22.9738 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 676.268 Td -(Lo) 11.0684 Tj -25 TJm -(wer) 14.9339 Tj --240 TJm -(v) 4.9813 Tj -25 TJm -(alues) 20.4731 Tj --239 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -138.421 676.268 Td -/F124_0 9.9626 Tf -(workFactor) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -200.585 676.268 Td -/F122_0 9.9626 Tf -(reduce) 26.5503 Tj --240 TJm -(the) 12.1743 Tj --239 TJm -(amount) 29.8878 Tj --240 TJm -(of) 8.2988 Tj --240 TJm -(ef) 7.7409 Tj -25 TJm -(fort) 14.386 Tj --239 TJm -(the) 12.1743 Tj --240 TJm -(standard) 33.7533 Tj --240 TJm -(algorithm) 38.7446 Tj --240 TJm -(wi) 9.9626 Tj -1 TJm -(ll) 5.5392 Tj --240 TJm -(e) 4.4234 Tj -15 TJm -(xpend) 24.3486 Tj --240 TJm -(before) 25.4445 Tj --240 TJm -(resorting) 35.417 Tj --239 TJm -(to) 7.7509 Tj --240 TJm -(the) 12.1743 Tj -72 664.313 Td -(f) 3.3175 Tj -10 TJm -(allback.) 31.2626 Tj --618 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --248 TJm -(should) 26.5703 Tj --247 TJm -(set) 11.0684 Tj --248 TJm -(this) 14.396 Tj --247 TJm -(parameter) 39.8305 Tj --248 TJm -(carefully;) 38.1767 Tj --248 TJm -(too) 12.7322 Tj --248 TJm -(lo) 7.7509 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(,) 2.4907 Tj --248 TJm -(and) 14.386 Tj --247 TJm -(man) 17.1556 Tj -15 TJm -(y) 4.9813 Tj --248 TJm -(inputs) 24.3586 Tj --248 TJm -(will) 15.5018 Tj --247 TJm -(be) 9.4047 Tj --248 TJm -(handled) 31.5416 Tj --247 TJm -(by) 9.9626 Tj --248 TJm -(the) 12.1743 Tj --247 TJm -(f) 3.3175 Tj -10 TJm -(allback) 28.772 Tj --248 TJm -(algorithm) 38.7446 Tj -72 652.358 Td -(and) 14.386 Tj --308 TJm -(so) 8.8568 Tj --308 TJm -(compress) 37.6287 Tj --308 TJm -(rather) 23.2328 Tj --309 TJm -(slo) 11.6264 Tj -25 TJm -(wly) 14.9439 Tj -65 TJm -(,) 2.4907 Tj --322 TJm -(too) 12.7322 Tj --309 TJm -(high,) 20.2042 Tj --322 TJm -(and) 14.386 Tj --308 TJm -(your) 18.2614 Tj --309 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(erage-to-w) 43.148 Tj -10 TJm -(orst) 14.9439 Tj --308 TJm -(case) 17.1456 Tj --308 TJm -(compression) 50.3609 Tj --308 TJm -(times) 21.589 Tj --308 TJm -(can) 13.8281 Tj --308 TJm -(become) 30.9837 Tj --309 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj --308 TJm -(lar) 10.5105 Tj -18 TJm -(ge.) 11.8953 Tj -72 640.402 Td -(The) 15.4918 Tj --250 TJm -(def) 12.7222 Tj -10 TJm -(ault) 14.9439 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(30) 9.9626 Tj --250 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --250 TJm -(reasonable) 42.6001 Tj --250 TJm -(beha) 18.8094 Tj -20 TJm -(viour) 21.031 Tj --250 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(wide) 19.3673 Tj --250 TJm -(range) 22.1269 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(circumstances.) 58.9288 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 618.588 Td -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues) 20.4731 Tj --250 TJm -(range) 22.1269 Tj --250 TJm -(from) 19.3673 Tj --250 TJm -(0) 4.9813 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(250) 14.9439 Tj --250 TJm -(inclusi) 26.5703 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e.) 6.914 Tj --620 TJm -(0) 4.9813 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(special) 27.6661 Tj --250 TJm -(case,) 19.6363 Tj --250 TJm -(equi) 17.1556 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(alent) 19.3673 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(using) 21.589 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(def) 12.7222 Tj -10 TJm -(ault) 14.9439 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(30.) 12.4533 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 596.774 Td -(Note) 19.3673 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(output) 25.4644 Tj --250 TJm -(generated) 38.7246 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(same) 20.4731 Tj --250 TJm -(re) 7.7409 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(ardless) 27.6661 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(whether) 32.0895 Tj --250 TJm -(or) 8.2988 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(allback) 28.772 Tj --250 TJm -(algorithm) 38.7446 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(used.) 20.7521 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 574.96 Td -(Be) 11.0684 Tj --303 TJm -(a) 4.4234 Tj -15 TJm -(w) 7.193 Tj -10 TJm -(are) 12.1643 Tj --303 TJm -(also) 16.0497 Tj --303 TJm -(that) 14.9439 Tj --303 TJm -(this) 14.396 Tj --304 TJm -(parameter) 39.8305 Tj --303 TJm -(may) 17.1556 Tj --303 TJm -(disappear) 38.1767 Tj --303 TJm -(entirely) 30.4357 Tj --303 TJm -(in) 7.7509 Tj --303 TJm -(future) 23.7907 Tj --303 TJm -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj --303 TJm -(of) 8.2988 Tj --303 TJm -(the) 12.1743 Tj --304 TJm -(library) 26.5603 Tj -65 TJm -(.) 2.4907 Tj --938 TJm -(In) 8.2988 Tj --303 TJm -(principle) 35.417 Tj --303 TJm -(it) 5.5392 Tj --304 TJm -(should) 26.5703 Tj --303 TJm -(be) 9.4047 Tj -72 563.005 Td -(possible) 32.6574 Tj --270 TJm -(to) 7.7509 Tj --270 TJm -(de) 9.4047 Tj -25 TJm -(vise) 16.0497 Tj --270 TJm -(a) 4.4234 Tj --270 TJm -(good) 19.9252 Tj --270 TJm -(w) 7.193 Tj -10 TJm -(ay) 9.4047 Tj --270 TJm -(to) 7.7509 Tj --271 TJm -(automat) 32.0995 Tj -1 TJm -(ically) 22.1369 Tj --271 TJm -(choose) 27.6661 Tj --270 TJm -(which) 24.3486 Tj --270 TJm -(algorithm) 38.7446 Tj --270 TJm -(to) 7.7509 Tj --270 TJm -(use.) 15.7708 Tj --740 TJm -(Such) 19.9252 Tj --270 TJm -(a) 4.4234 Tj --270 TJm -(mechanism) 45.3796 Tj --271 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --270 TJm -(render) 25.4445 Tj --270 TJm -(the) 12.1743 Tj -72 551.049 Td -(parameter) 39.8305 Tj --250 TJm -(obsolete.) 35.696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 529.235 Td -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 384.677] cm -0 0 468 143.462 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 519.771 Td -/F124_0 9.9626 Tf -(BZ_CONFIG_ERROR) 89.6634 Tj -98.488 507.816 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(library) 41.8429 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(mis-compiled) 71.7307 Tj -90 495.86 Td -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 483.905 Td -(if) 11.9551 Tj --426 TJm -(strm) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -98.488 471.95 Td -(or) 11.9551 Tj --426 TJm -(blockSize) 53.798 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(1) 5.9776 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(blockSize) 53.798 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(9) 5.9776 Tj -98.488 459.995 Td -(or) 11.9551 Tj --426 TJm -(verbosity) 53.798 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(verbosity) 53.798 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(4) 5.9776 Tj -98.488 448.04 Td -(or) 11.9551 Tj --426 TJm -(workFactor) 59.7756 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(workFactor) 59.7756 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(250) 17.9327 Tj -90 436.085 Td -(BZ_MEM_ERROR) 71.7307 Tj -98.488 424.129 Td -(if) 11.9551 Tj --426 TJm -(not) 17.9327 Tj --426 TJm -(enough) 35.8654 Tj --426 TJm -(memory) 35.8654 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(available) 53.798 Tj -90 412.174 Td -(BZ_OK) 29.8878 Tj -98.488 400.219 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 362.863 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 313.947] cm -0 0 468 47.821 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 353.399 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -98.488 341.444 Td -(if) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(returned) 47.8205 Tj -98.488 329.488 Td -(no) 11.9551 Tj --426 TJm -(specific) 47.8205 Tj --426 TJm -(action) 35.8654 Tj --426 TJm -(needed) 35.8654 Tj --426 TJm -(in) 11.9551 Tj --426 TJm -(case) 23.9102 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(error) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 283.429 Td -/F116_0 17.2154 Tf -(3.3.2.) 43.0729 Tj --278 TJm -(BZ2_bzCompress) 145.4013 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 254.959] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 270.501 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzCompress) 83.6858 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bz_stream) 53.798 Tj -268.371 268.757 Td -(*) 5.9776 Tj -274.348 270.501 Td -(strm,) 29.8878 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(action) 35.8654 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 233.145 Td -/F122_0 9.9626 Tf -(Pro) 13.8381 Tj -15 TJm -(vides) 21.031 Tj --222 TJm -(more) 20.4731 Tj --221 TJm -(input) 20.4831 Tj --222 TJm -(and/or) 25.4544 Tj --222 TJm -(output) 25.4644 Tj --222 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --221 TJm -(space) 22.1269 Tj --222 TJm -(for) 11.6164 Tj --222 TJm -(the) 12.1743 Tj --221 TJm -(library) 26.5603 Tj -65 TJm -(.) 2.4907 Tj --601 TJm -(The) 15.4918 Tj --222 TJm -(caller) 22.1269 Tj --222 TJm -(maintains) 38.7446 Tj --222 TJm -(input) 20.4831 Tj --221 TJm -(and) 14.386 Tj --222 TJm -(output) 25.4644 Tj --222 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fers,) 17.4246 Tj --227 TJm -(and) 14.386 Tj --222 TJm -(calls) 18.2614 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 221.19 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -158.177 221.19 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(transfer) 30.4258 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(between) 33.1954 Tj --250 TJm -(them.) 22.4159 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 199.375 Td -(Before) 27.1082 Tj --212 TJm -(each) 18.2515 Tj --213 TJm -(call) 14.386 Tj --212 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -147.961 199.375 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -231.647 199.375 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -236.329 199.375 Td -/F124_0 9.9626 Tf -(next_in) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -280.288 199.375 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --212 TJm -(point) 20.4831 Tj --213 TJm -(at) 7.193 Tj --212 TJm -(the) 12.1743 Tj --213 TJm -(data) 16.5977 Tj --212 TJm -(to) 7.7509 Tj --213 TJm -(be) 9.4047 Tj --212 TJm -(compressed,) 49.5241 Tj --220 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -463.493 199.375 Td -/F124_0 9.9626 Tf -(avail_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -513.43 199.375 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj -72 187.42 Td -(indicate) 31.5416 Tj --246 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --247 TJm -(m) 7.7509 Tj -1 TJm -(an) 9.4047 Tj -14 TJm -(y) 4.9813 Tj --246 TJm -(bytes) 21.031 Tj --246 TJm -(the) 12.1743 Tj --246 TJm -(library) 26.5603 Tj --247 TJm -(may) 17.1556 Tj --246 TJm -(read.) 19.6363 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -259.242 187.42 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -345.382 187.42 Td -/F122_0 9.9626 Tf -(updates) 30.4357 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -378.271 187.42 Td -/F124_0 9.9626 Tf -(next_in) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -420.114 187.42 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -425.066 187.42 Td -/F124_0 9.9626 Tf -(avail_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -475.34 187.42 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -492.179 187.42 Td -/F124_0 9.9626 Tf -(total_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 175.465 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(re\003ect) 24.8965 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(number) 30.4357 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(bytes) 21.031 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(has) 13.2801 Tj --250 TJm -(read.) 19.6363 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 153.651 Td -(Similarly) 37.0908 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -113.611 153.651 Td -/F124_0 9.9626 Tf -(next_out) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -164.072 153.651 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --265 TJm -(point) 20.4831 Tj --265 TJm -(to) 7.7509 Tj --265 TJm -(a) 4.4234 Tj --265 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --265 TJm -(in) 7.7509 Tj --265 TJm -(which) 24.3486 Tj --265 TJm -(the) 12.1743 Tj --265 TJm -(compressed) 47.0334 Tj --265 TJm -(data) 16.5977 Tj --265 TJm -(is) 6.6451 Tj --265 TJm -(to) 7.7509 Tj --265 TJm -(be) 9.4047 Tj --265 TJm -(placed,) 28.493 Tj --269 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -464.742 153.651 Td -/F124_0 9.9626 Tf -(avail_out) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -521.181 153.651 Td -/F122_0 9.9626 Tf -(indi-) 18.8194 Tj -72 141.696 Td -(cating) 24.3486 Tj --209 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --209 TJm -(much) 22.1369 Tj --209 TJm -(output) 25.4644 Tj --209 TJm -(space) 22.1269 Tj --209 TJm -(is) 6.6451 Tj --210 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -243.087 141.696 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -328.856 141.696 Td -/F122_0 9.9626 Tf -(updates) 30.4357 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -361.375 141.696 Td -/F124_0 9.9626 Tf -(next_out) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -409.196 141.696 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -413.851 141.696 Td -/F124_0 9.9626 Tf -(avail_out) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -469.732 141.696 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -486.202 141.696 Td -/F124_0 9.9626 Tf -(total_out) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 129.74 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(re\003ect) 24.8965 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(number) 30.4357 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(bytes) 21.031 Tj --250 TJm -(output.) 27.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 107.926 Td -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --272 TJm -(may) 17.1556 Tj --272 TJm -(pro) 13.2801 Tj -15 TJm -(vide) 17.1556 Tj --272 TJm -(and) 14.386 Tj --272 TJm -(remo) 20.4731 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --272 TJm -(as) 8.2988 Tj --272 TJm -(little) 18.2714 Tj --272 TJm -(or) 8.2988 Tj --272 TJm -(as) 8.2988 Tj --272 TJm -(much) 22.1369 Tj --271 TJm -(data) 16.5977 Tj --272 TJm -(as) 8.2988 Tj --272 TJm -(you) 14.9439 Tj --272 TJm -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --272 TJm -(on) 9.9626 Tj --272 TJm -(each) 18.2515 Tj --272 TJm -(call) 14.386 Tj --272 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -399.123 107.926 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -482.809 107.926 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --752 TJm -(In) 8.2988 Tj --272 TJm -(the) 12.1743 Tj --272 TJm -(limit,) 21.32 Tj -72 95.971 Td -(it) 5.5392 Tj --266 TJm -(is) 6.6451 Tj --265 TJm -(acceptable) 42.0422 Tj --266 TJm -(to) 7.7509 Tj --266 TJm -(supply) 26.5703 Tj --266 TJm -(and) 14.386 Tj --265 TJm -(remo) 20.4731 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --266 TJm -(data) 16.5977 Tj --266 TJm -(one) 14.386 Tj --265 TJm -(byte) 17.1556 Tj --266 TJm -(at) 7.193 Tj --266 TJm -(a) 4.4234 Tj --266 TJm -(time,) 20.2042 Tj --269 TJm -(although) 34.8691 Tj --266 TJm -(this) 14.396 Tj --266 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --265 TJm -(be) 9.4047 Tj --266 TJm -(terribly) 29.3299 Tj --266 TJm -(inef) 15.4918 Tj -25 TJm -(\002cient.) 27.3972 Tj --714 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --266 TJm -(should) 26.5703 Tj -72 84.016 Td -(al) 7.193 Tj -10 TJm -(w) 7.193 Tj -10 TJm -(ays) 13.2801 Tj --250 TJm -(ensure) 26.0024 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(least) 18.2614 Tj --250 TJm -(one) 14.386 Tj --250 TJm -(byte) 17.1556 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(output) 25.4644 Tj --250 TJm -(space) 22.1269 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable) 26.5603 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(each) 18.2515 Tj --250 TJm -(call.) 16.8766 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(13) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 14 17 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(A) 7.193 Tj --250 TJm -(second) 27.6661 Tj --250 TJm -(purpose) 31.5416 Tj --250 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -156.662 710.037 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -242.839 710.037 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(request) 28.772 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(change) 28.2141 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(mode) 22.1369 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 688.12 Td -(Conceptually) 53.1305 Tj -65 TJm -(,) 2.4907 Tj --217 TJm -(a) 4.4234 Tj --210 TJm -(compressed) 47.0334 Tj --209 TJm -(stream) 26.5603 Tj --209 TJm -(can) 13.8281 Tj --209 TJm -(be) 9.4047 Tj --210 TJm -(in) 7.7509 Tj --209 TJm -(one) 14.386 Tj --209 TJm -(of) 8.2988 Tj --209 TJm -(four) 16.5977 Tj --210 TJm -(states:) 24.9065 Tj --289 TJm -(IDLE,) 25.1755 Tj --209 TJm -(R) 6.6451 Tj -40 TJm -(UNNING,) 41.7732 Tj --210 TJm -(FLUSHING) 49.2551 Tj --209 TJm -(and) 14.386 Tj --209 TJm -(FINISHING.) 52.2937 Tj --419 TJm -(Be-) 14.386 Tj -72 676.164 Td -(fore) 16.0398 Tj --264 TJm -(initialisation) 49.823 Tj --263 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -146.434 676.164 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -254.031 676.164 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --264 TJm -(and) 14.386 Tj --263 TJm -(after) 18.2515 Tj --264 TJm -(termination) 45.9375 Tj --264 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -349.75 676.164 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressEnd) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -451.369 676.164 Td -/F122_0 9.9626 Tf -(\),) 5.8082 Tj --267 TJm -(a) 4.4234 Tj --264 TJm -(stream) 26.5603 Tj --264 TJm -(is) 6.6451 Tj --263 TJm -(re) 7.7409 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(arded) 22.1269 Tj -72 664.209 Td -(as) 8.2988 Tj --250 TJm -(IDLE.) 25.1755 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 642.291 Td -(Upon) 22.1369 Tj --389 TJm -(initialisation) 49.823 Tj --390 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -155.036 642.291 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -262.632 642.291 Td -/F122_0 9.9626 Tf -(\),) 5.8082 Tj --424 TJm -(the) 12.1743 Tj --390 TJm -(stream) 26.5603 Tj --389 TJm -(is) 6.6451 Tj --390 TJm -(placed) 26.0024 Tj --389 TJm -(in) 7.7509 Tj --389 TJm -(the) 12.1743 Tj --390 TJm -(R) 6.6451 Tj -40 TJm -(UNNING) 39.2825 Tj --389 TJm -(state.) 20.7521 Tj --1457 TJm -(Subsequent) 45.9375 Tj --389 TJm -(calls) 18.2614 Tj -72 630.336 Td -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -83.818 630.336 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -171.571 630.336 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --408 TJm -(pass) 17.1556 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -223.431 630.336 Td -/F124_0 9.9626 Tf -(BZ_RUN) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -263.362 630.336 Td -/F122_0 9.9626 Tf -(as) 8.2988 Tj --408 TJm -(the) 12.1743 Tj --409 TJm -(request) 28.772 Tj -1 TJm -(ed) 9.4047 Tj --409 TJm -(action;) 27.1182 Tj --487 TJm -(other) 20.4731 Tj --408 TJm -(actions) 28.224 Tj --409 TJm -(are) 12.1643 Tj --408 TJm -(ille) 12.7322 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(al) 7.193 Tj --408 TJm -(and) 14.386 Tj --408 TJm -(will) 15.5018 Tj --408 TJm -(result) 22.1369 Tj --409 TJm -(in) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 618.381 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -173.619 618.381 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 596.463 Td -(At) 9.9626 Tj --279 TJm -(some) 21.031 Tj --279 TJm -(point,) 22.9738 Tj --286 TJm -(the) 12.1743 Tj --279 TJm -(calling) 27.1182 Tj --279 TJm -(program) 33.7533 Tj --279 TJm -(will) 15.5018 Tj --279 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --278 TJm -(pro) 13.2801 Tj -14 TJm -(vi) 7.7509 Tj -1 TJm -(ded) 14.386 Tj --279 TJm -(all) 9.9626 Tj --279 TJm -(the) 12.1743 Tj --279 TJm -(input) 20.4831 Tj --279 TJm -(data) 16.5977 Tj --279 TJm -(it) 5.5392 Tj --279 TJm -(w) 7.193 Tj -10 TJm -(ants) 16.0497 Tj --279 TJm -(to.) 10.2416 Tj --793 TJm -(It) 6.0871 Tj --279 TJm -(will) 15.5018 Tj --279 TJm -(then) 17.1556 Tj --279 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --279 TJm -(to) 7.7509 Tj --279 TJm -(\002nish) 22.1469 Tj --279 TJm -(up) 9.9626 Tj --279 TJm -(--) 6.6351 Tj -72 584.508 Td -(in) 7.7509 Tj --287 TJm -(ef) 7.7409 Tj -25 TJm -(fect,) 17.4246 Tj --297 TJm -(asking) 26.0123 Tj --288 TJm -(the) 12.1743 Tj --287 TJm -(library) 26.5603 Tj --287 TJm -(to) 7.7509 Tj --288 TJm -(process) 29.8778 Tj --287 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --288 TJm -(data) 16.5977 Tj --287 TJm -(it) 5.5392 Tj --287 TJm -(might) 23.2527 Tj --288 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --287 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fered) 20.4632 Tj --288 TJm -(internally) 38.1866 Tj -65 TJm -(.) 2.4907 Tj --844 TJm -(In) 8.2988 Tj --288 TJm -(this) 14.396 Tj --287 TJm -(state,) 20.7521 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -456.314 584.508 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 572.553 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --258 TJm -(no) 9.9626 Tj --257 TJm -(longer) 25.4544 Tj --258 TJm -(attempt) 29.8878 Tj --258 TJm -(to) 7.7509 Tj --258 TJm -(read) 17.1456 Tj --257 TJm -(data) 16.5977 Tj --258 TJm -(from) 19.3673 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -234.208 572.553 Td -/F124_0 9.9626 Tf -(next_in) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -276.051 572.553 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --260 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --257 TJm -(it) 5.5392 Tj --258 TJm -(will) 15.5018 Tj --258 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --257 TJm -(to) 7.7509 Tj --258 TJm -(write) 20.4731 Tj --258 TJm -(data) 16.5977 Tj --258 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -407.082 572.553 Td -/F124_0 9.9626 Tf -(next_out) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -454.902 572.553 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --666 TJm -(Because) 33.1954 Tj --258 TJm -(the) 12.1743 Tj --258 TJm -(output) 25.4644 Tj -72 560.598 Td -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --228 TJm -(supplied) 33.7633 Tj --228 TJm -(by) 9.9626 Tj --229 TJm -(the) 12.1743 Tj --228 TJm -(user) 16.5977 Tj --228 TJm -(can) 13.8281 Tj --228 TJm -(be) 9.4047 Tj --228 TJm -(arbitrarily) 39.8404 Tj --229 TJm -(sma) 16.0497 Tj -1 TJm -(ll,) 8.0299 Tj --233 TJm -(the) 12.1743 Tj --228 TJm -(\002nishing-up) 48.1592 Tj --228 TJm -(operation) 37.6287 Tj --229 TJm -(cannot) 26.5603 Tj --228 TJm -(necessarily) 44.2638 Tj --228 TJm -(be) 9.4047 Tj --228 TJm -(done) 19.3673 Tj --228 TJm -(with) 17.7135 Tj --229 TJm -(a) 4.4234 Tj --228 TJm -(single) 23.8007 Tj -72 548.642 Td -(call) 14.386 Tj --250 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -99.666 548.642 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -183.352 548.642 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 526.725 Td -(Instead,) 31.2626 Tj --346 TJm -(the) 12.1743 Tj --327 TJm -(calling) 27.1182 Tj --326 TJm -(program) 33.7533 Tj --327 TJm -(passes) 25.4544 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -218.231 526.725 Td -/F124_0 9.9626 Tf -(BZ_FINISH) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -275.284 526.725 Td -/F122_0 9.9626 Tf -(as) 8.2988 Tj --327 TJm -(an) 9.4047 Tj --327 TJm -(acti) 14.386 Tj -1 TJm -(on) 9.9626 Tj --327 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -338.109 526.725 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -421.795 526.725 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1081 TJm -(This) 17.7135 Tj --326 TJm -(changes) 32.0895 Tj --327 TJm -(the) 12.1743 Tj --327 TJm -(stream') 29.8778 Tj -55 TJm -(s) 3.8755 Tj -72 514.77 Td -(state) 18.2614 Tj --291 TJm -(to) 7.7509 Tj --290 TJm -(FINISHING.) 52.2937 Tj --581 TJm -(An) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --291 TJm -(remaining) 40.3983 Tj --290 TJm -(input) 20.4831 Tj --291 TJm -(\(ie,) 13.0012 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -264.452 514.77 Td -/F124_0 9.9626 Tf -(next_in[0) 53.798 Tj --600 TJm -(..) 11.9551 Tj --1200 TJm -(avail_in-1]) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -413.892 514.77 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --291 TJm -(is) 6.6451 Tj --290 TJm -(compressed) 47.0334 Tj --291 TJm -(and) 14.386 Tj --290 TJm -(transferred) 43.148 Tj -72 502.814 Td -(to) 7.7509 Tj --421 TJm -(the) 12.1743 Tj --421 TJm -(output) 25.4644 Tj --421 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -55 TJm -(.) 2.4907 Tj --1646 TJm -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --421 TJm -(do) 9.9626 Tj --422 TJm -(this) 14.396 Tj -1 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -222.339 502.814 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -310.22 502.814 Td -/F122_0 9.9626 Tf -(must) 19.3773 Tj --421 TJm -(be) 9.4047 Tj --421 TJm -(called) 23.7907 Tj --421 TJm -(repeatedly) 41.4942 Tj --421 TJm -(until) 18.2714 Tj --421 TJm -(all) 9.9626 Tj --421 TJm -(the) 12.1743 Tj --421 TJm -(output) 25.4644 Tj --421 TJm -(has) 13.2801 Tj --421 TJm -(been) 18.8094 Tj -72 490.859 Td -(consumed.) 42.889 Tj --1397 TJm -(At) 9.9626 Tj --379 TJm -(that) 14.9439 Tj --380 TJm -(point,) 22.9738 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.346 490.859 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -275.813 490.859 Td -/F122_0 9.9626 Tf -(returns) 27.6661 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -307.259 490.859 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -384.968 490.859 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --379 TJm -(and) 14.386 Tj --380 TJm -(the) 12.1743 Tj --379 TJm -(stream') 29.8778 Tj -55 TJm -(s) 3.8755 Tj --380 TJm -(state) 18.2614 Tj --379 TJm -(is) 6.6451 Tj --380 TJm -(set) 11.0684 Tj --379 TJm -(back) 18.8094 Tj --379 TJm -(to) 7.7509 Tj -72 478.904 Td -(IDLE.) 25.1755 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -99.666 478.904 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressEnd) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -203.776 478.904 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --250 TJm -(then) 17.1556 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(called.) 26.2813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 456.986 Td -(Just) 15.5018 Tj --380 TJm -(to) 7.7509 Tj --380 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --379 TJm -(sure) 16.5977 Tj --380 TJm -(the) 12.1743 Tj --380 TJm -(calling) 27.1182 Tj --380 TJm -(program) 33.7533 Tj --379 TJm -(does) 18.2614 Tj --380 TJm -(not) 12.7322 Tj --380 TJm -(cheat,) 23.5117 Tj --412 TJm -(the) 12.1743 Tj --380 TJm -(library) 26.5603 Tj --380 TJm -(mak) 17.1556 Tj -10 TJm -(es) 8.2988 Tj --379 TJm -(a) 4.4234 Tj --380 TJm -(note) 17.1556 Tj --380 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -415.708 456.986 Td -/F124_0 9.9626 Tf -(avail_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -467.312 456.986 Td -/F122_0 9.9626 Tf -(at) 7.193 Tj --380 TJm -(the) 12.1743 Tj --380 TJm -(time) 17.7135 Tj --379 TJm -(of) 8.2988 Tj --380 TJm -(the) 12.1743 Tj -72 445.031 Td -(\002rst) 15.5018 Tj --286 TJm -(call) 14.386 Tj --286 TJm -(t) 2.7696 Tj -1 TJm -(o) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -118.179 445.031 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -204.713 445.031 Td -/F122_0 9.9626 Tf -(which) 24.3486 Tj --286 TJm -(has) 13.2801 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -248.035 445.031 Td -/F124_0 9.9626 Tf -(BZ_FINISH) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -304.68 445.031 Td -/F122_0 9.9626 Tf -(as) 8.2988 Tj --286 TJm -(an) 9.4047 Tj --286 TJm -(action) 24.3486 Tj --285 TJm -(\(ie,) 13.0012 Tj --295 TJm -(at) 7.193 Tj --286 TJm -(the) 12.1743 Tj --286 TJm -(time) 17.7135 Tj --285 TJm -(the) 12.1743 Tj --286 TJm -(program) 33.7533 Tj --286 TJm -(has) 13.2801 Tj --286 TJm -(announced) 43.158 Tj --285 TJm -(its) 9.4147 Tj -72 433.076 Td -(intention) 35.427 Tj --292 TJm -(to) 7.7509 Tj --292 TJm -(not) 12.7322 Tj --291 TJm -(supply) 26.5703 Tj --292 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --292 TJm -(more) 20.4731 Tj --292 TJm -(input\).) 26.2913 Tj --870 TJm -(By) 11.6264 Tj --292 TJm -(comparing) 42.61 Tj --292 TJm -(this) 14.396 Tj --292 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj --291 TJm -(with) 17.7135 Tj --292 TJm -(that) 14.9439 Tj --292 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -392.862 433.076 Td -/F124_0 9.9626 Tf -(avail_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -443.589 433.076 Td -/F122_0 9.9626 Tf -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --292 TJm -(subsequent) 44.2738 Tj --292 TJm -(calls) 18.2614 Tj --291 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 421.121 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -155.686 421.121 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --247 TJm -(the) 12.1743 Tj --247 TJm -(library) 26.5603 Tj --246 TJm -(can) 13.8281 Tj --247 TJm -(detect) 23.7907 Tj --246 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --247 TJm -(attem) 22.1369 Tj -1 TJm -(p) 4.9813 Tj --1 TJm -(t) 2.7696 Tj -1 TJm -(s) 3.8755 Tj --247 TJm -(to) 7.7509 Tj --246 TJm -(slip) 14.396 Tj --247 TJm -(in) 7.7509 Tj --246 TJm -(more) 20.4731 Tj --247 TJm -(data) 16.5977 Tj --246 TJm -(to) 7.7509 Tj --247 TJm -(compress.) 40.1194 Tj --617 TJm -(An) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --247 TJm -(calls) 18.2614 Tj --246 TJm -(for) 11.6164 Tj --247 TJm -(which) 24.3486 Tj --246 TJm -(this) 14.396 Tj --247 TJm -(is) 6.6451 Tj -72 409.165 Td -(detected) 33.1954 Tj --250 TJm -(will) 15.5018 Tj --250 TJm -(return) 23.7907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -151.959 409.165 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -253.578 409.165 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --500 TJm -(This) 17.7135 Tj --250 TJm -(indicates) 35.417 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(programming) 54.2364 Tj --250 TJm -(mistak) 26.5703 Tj -10 TJm -(e) 4.4234 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(should) 26.5703 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(corrected.) 39.5515 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 387.248 Td -(Instead) 28.772 Tj --224 TJm -(of) 8.2988 Tj --223 TJm -(asking) 26.0123 Tj --224 TJm -(to) 7.7509 Tj --223 TJm -(\002nish,) 24.6375 Tj --229 TJm -(the) 12.1743 Tj --224 TJm -(calling) 27.1182 Tj --223 TJm -(program) 33.7533 Tj --224 TJm -(may) 17.1556 Tj --224 TJm -(ask) 13.2801 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -293.282 387.248 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -379.196 387.248 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --224 TJm -(tak) 12.1743 Tj -10 TJm -(e) 4.4234 Tj --223 TJm -(all) 9.9626 Tj --224 TJm -(the) 12.1743 Tj --223 TJm -(remaining) 40.3983 Tj --224 TJm -(input,) 22.9738 Tj --229 TJm -(compress) 37.6287 Tj -72 375.293 Td -(it) 5.5392 Tj --278 TJm -(and) 14.386 Tj --278 TJm -(terminate) 37.6287 Tj --278 TJm -(the) 12.1743 Tj --278 TJm -(current) 28.2141 Tj --277 TJm -(\(Burro) 26.5603 Tj -25 TJm -(ws-Wheeler\)) 51.4469 Tj --278 TJm -(compression) 50.3609 Tj --278 TJm -(block.) 24.6275 Tj --787 TJm -(Th) 11.0684 Tj --1 TJm -(i) 2.7696 Tj -1 TJm -(s) 3.8755 Tj --278 TJm -(could) 22.1369 Tj --278 TJm -(be) 9.4047 Tj --278 TJm -(useful) 24.3486 Tj --278 TJm -(for) 11.6164 Tj --278 TJm -(error) 19.3573 Tj --278 TJm -(control) 28.224 Tj --278 TJm -(purposes.) 37.9077 Tj -72 363.337 Td -(The) 15.4918 Tj --328 TJm -(mechanism) 45.3796 Tj --328 TJm -(is) 6.6451 Tj --328 TJm -(analogous) 40.3983 Tj --328 TJm -(to) 7.7509 Tj --328 TJm -(that) 14.9439 Tj --328 TJm -(for) 11.6164 Tj --328 TJm -(\002nishing:) 37.6487 Tj --466 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -297.049 363.337 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -384.003 363.337 Td -/F122_0 9.9626 Tf -(with) 17.7135 Tj --328 TJm -(an) 9.4047 Tj --328 TJm -(action) 24.3486 Tj --328 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -456.841 363.337 Td -/F124_0 9.9626 Tf -(BZ_FLUSH) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -504.662 363.337 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --328 TJm -(remo) 20.4731 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj -72 351.382 Td -(output) 25.4644 Tj --445 TJm -(data,) 19.0883 Tj --494 TJm -(and) 14.386 Tj --446 TJm -(persist) 26.0123 Tj --445 TJm -(with) 17.7135 Tj --445 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -213.94 351.382 Td -/F124_0 9.9626 Tf -(BZ_FLUSH) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -266.195 351.382 Td -/F122_0 9.9626 Tf -(action) 24.3486 Tj --445 TJm -(until) 18.2714 Tj --445 TJm -(the) 12.1743 Tj --446 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -360.062 351.382 Td -/F124_0 9.9626 Tf -(BZ_RUN) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -400.362 351.382 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --445 TJm -(returned.) 35.686 Tj --1792 TJm -(As) 11.0684 Tj --445 TJm -(with) 17.7135 Tj --445 TJm -(\002nishing,) 37.3697 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 339.427 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -158.177 339.427 Td -/F122_0 9.9626 Tf -(detects) 27.6661 Tj --250 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --250 TJm -(attempt) 29.8878 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(pro) 13.2801 Tj -15 TJm -(vide) 17.1556 Tj --250 TJm -(more) 20.4731 Tj --250 TJm -(input) 20.4831 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(once) 18.8094 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(\003ush) 19.3773 Tj --250 TJm -(has) 13.2801 Tj --250 TJm -(be) 9.4047 Tj -15 TJm -(gun.) 17.4346 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 317.509 Td -(Once) 21.0211 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(\003ush) 19.3773 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(complete,) 39.0135 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(stream) 26.5603 Tj --250 TJm -(returns) 27.6661 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(normal) 28.224 Tj --250 TJm -(R) 6.6451 Tj -40 TJm -(UNNING) 39.2825 Tj --250 TJm -(state.) 20.7521 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 295.591 Td -(This) 17.7135 Tj --344 TJm -(all) 9.9626 Tj --343 TJm -(sounds) 27.6761 Tj --344 TJm -(pretty) 23.2427 Tj --344 TJm -(comple) 29.3299 Tj -15 TJm -(x,) 7.472 Tj --367 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --344 TJm -(isn') 14.9439 Tj -18 TJm -(t) 2.7696 Tj --344 TJm -(really) 22.6848 Tj -65 TJm -(.) 2.4907 Tj --1182 TJm -(Here') 22.6749 Tj -55 TJm -(s) 3.8755 Tj --344 TJm -(a) 4.4234 Tj --344 TJm -(table) 19.3673 Tj --343 TJm -(which) 24.3486 Tj --344 TJm -(sho) 13.8381 Tj -25 TJm -(ws) 11.0684 Tj --344 TJm -(which) 24.3486 Tj --344 TJm -(actions) 28.224 Tj --343 TJm -(are) 12.1643 Tj --344 TJm -(allo) 14.9439 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --344 TJm -(in) 7.7509 Tj --344 TJm -(each) 18.2515 Tj -72 283.636 Td -(state,) 20.7521 Tj --281 TJm -(what) 19.3673 Tj --274 TJm -(action) 24.3486 Tj --275 TJm -(will) 15.5018 Tj --274 TJm -(be) 9.4047 Tj --275 TJm -(tak) 12.1743 Tj -10 TJm -(en,) 11.8953 Tj --280 TJm -(what) 19.3673 Tj --275 TJm -(the) 12.1743 Tj --274 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --275 TJm -(state) 18.2614 Tj --274 TJm -(is,) 9.1357 Tj --281 TJm -(and) 14.386 Tj --274 TJm -(what) 19.3673 Tj --275 TJm -(the) 12.1743 Tj --275 TJm -(non-error) 37.6188 Tj --274 TJm -(return) 23.7907 Tj --275 TJm -(v) 4.9813 Tj -25 TJm -(alues) 20.4731 Tj --274 TJm -(are.) 14.655 Tj --767 TJm -(Note) 19.3673 Tj --275 TJm -(that) 14.9439 Tj --274 TJm -(you) 14.9439 Tj --275 TJm -(can') 17.1456 Tj -18 TJm -(t) 2.7696 Tj -72 271.681 Td -(e) 4.4234 Tj -15 TJm -(xplicitly) 33.2153 Tj --347 TJm -(ask) 13.2801 Tj --348 TJm -(what) 19.3673 Tj --347 TJm -(state) 18.2614 Tj --348 TJm -(the) 12.1743 Tj --347 TJm -(stream) 26.5603 Tj --348 TJm -(is) 6.6451 Tj --347 TJm -(in,) 10.2416 Tj --372 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --347 TJm -(nor) 13.2801 Tj --348 TJm -(do) 9.9626 Tj --347 TJm -(you) 14.9439 Tj --348 TJm -(need) 18.8094 Tj --347 TJm -(to) 7.7509 Tj --348 TJm -(--) 6.6351 Tj --347 TJm -(it) 5.5392 Tj --348 TJm -(can) 13.8281 Tj --347 TJm -(be) 9.4047 Tj --347 TJm -(inferred) 31.5316 Tj --348 TJm -(from) 19.3673 Tj --347 TJm -(the) 12.1743 Tj --348 TJm -(v) 4.9813 Tj -25 TJm -(alues) 20.4731 Tj --347 TJm -(returned) 33.1954 Tj --348 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 259.726 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -155.686 259.726 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.852 Td -(14) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 15 18 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 146.152] cm -0 0 468 573.848 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(IDLE/any) 47.8205 Tj -98.488 699.676 Td -(Illegal.) 47.8205 Tj --852 TJm -(IDLE) 23.9102 Tj --426 TJm -(state) 29.8878 Tj --426 TJm -(only) 23.9102 Tj --426 TJm -(exists) 35.8654 Tj --426 TJm -(after) 29.8878 Tj --426 TJm -(BZ2_bzCompressEnd) 101.6185 Tj --426 TJm -(or) 11.9551 Tj -98.488 687.721 Td -(before) 35.8654 Tj --426 TJm -(BZ2_bzCompressInit.) 113.5736 Tj -98.488 675.766 Td -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_SEQUENCE_ERROR) 101.6185 Tj -90 651.856 Td -(RUNNING/BZ_RUN) 83.6858 Tj -98.488 639.9 Td -(Compress) 47.8205 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(next_in) 41.8429 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(next_out) 47.8205 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(much) 23.9102 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(possible.) 53.798 Tj -98.488 627.945 Td -(Next) 23.9102 Tj --426 TJm -(state) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(RUNNING) 41.8429 Tj -98.488 615.99 Td -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_RUN_OK) 53.798 Tj -90 592.08 Td -(RUNNING/BZ_FLUSH) 95.641 Tj -98.488 580.124 Td -(Remember) 47.8205 Tj --426 TJm -(current) 41.8429 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(next_in.) 47.8205 Tj --426 TJm -(Compress) 47.8205 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(next_in) 41.8429 Tj -98.488 568.169 Td -(to) 11.9551 Tj --426 TJm -(next_out) 47.8205 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(much) 23.9102 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(possible,) 53.798 Tj --426 TJm -(but) 17.9327 Tj --426 TJm -(do) 11.9551 Tj --426 TJm -(not) 17.9327 Tj --426 TJm -(accept) 35.8654 Tj --426 TJm -(any) 17.9327 Tj --426 TJm -(more) 23.9102 Tj --426 TJm -(input.) 35.8654 Tj -98.488 556.214 Td -(Next) 23.9102 Tj --426 TJm -(state) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(FLUSHING) 47.8205 Tj -98.488 544.259 Td -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_FLUSH_OK) 65.7532 Tj -90 520.349 Td -(RUNNING/BZ_FINISH) 101.6185 Tj -98.488 508.393 Td -(Remember) 47.8205 Tj --426 TJm -(current) 41.8429 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(next_in.) 47.8205 Tj --426 TJm -(Compress) 47.8205 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(next_in) 41.8429 Tj -98.488 496.438 Td -(to) 11.9551 Tj --426 TJm -(next_out) 47.8205 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(much) 23.9102 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(possible,) 53.798 Tj --426 TJm -(but) 17.9327 Tj --426 TJm -(do) 11.9551 Tj --426 TJm -(not) 17.9327 Tj --426 TJm -(accept) 35.8654 Tj --426 TJm -(any) 17.9327 Tj --426 TJm -(more) 23.9102 Tj --426 TJm -(input.) 35.8654 Tj -98.488 484.483 Td -(Next) 23.9102 Tj --426 TJm -(state) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(FINISHING) 53.798 Tj -98.488 472.528 Td -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_FINISH_OK) 71.7307 Tj -90 448.618 Td -(FLUSHING/BZ_FLUSH) 101.6185 Tj -98.488 436.662 Td -(Compress) 47.8205 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(next_in) 41.8429 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(next_out) 47.8205 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(much) 23.9102 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(possible,) 53.798 Tj -98.488 424.707 Td -(but) 17.9327 Tj --426 TJm -(do) 11.9551 Tj --426 TJm -(not) 17.9327 Tj --426 TJm -(accept) 35.8654 Tj --426 TJm -(any) 17.9327 Tj --426 TJm -(more) 23.9102 Tj --426 TJm -(input.) 35.8654 Tj -98.488 412.752 Td -(If) 11.9551 Tj --426 TJm -(all) 17.9327 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(existing) 47.8205 Tj --426 TJm -(input) 29.8878 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(used) 23.9102 Tj --426 TJm -(up) 11.9551 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(all) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj -98.488 400.797 Td -(output) 35.8654 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(removed) 41.8429 Tj -106.976 388.842 Td -(Next) 23.9102 Tj --426 TJm -(state) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(RUNNING;) 47.8205 Tj --426 TJm -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_RUN_OK) 53.798 Tj -98.488 376.887 Td -(else) 23.9102 Tj -106.976 364.931 Td -(Next) 23.9102 Tj --426 TJm -(state) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(FLUSHING;) 53.798 Tj --426 TJm -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_FLUSH_OK) 65.7532 Tj -90 341.021 Td -(FLUSHING/other) 83.6858 Tj -98.488 329.066 Td -(Illegal.) 47.8205 Tj -98.488 317.111 Td -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_SEQUENCE_ERROR) 101.6185 Tj -90 293.2 Td -(FINISHING/BZ_FINISH) 113.5736 Tj -98.488 281.245 Td -(Compress) 47.8205 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(next_in) 41.8429 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(next_out) 47.8205 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(much) 23.9102 Tj --426 TJm -(as) 11.9551 Tj --426 TJm -(possible,) 53.798 Tj -98.488 269.29 Td -(but) 17.9327 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(not) 17.9327 Tj --426 TJm -(accept) 35.8654 Tj --426 TJm -(any) 17.9327 Tj --426 TJm -(more) 23.9102 Tj --426 TJm -(input.) 35.8654 Tj -98.488 257.335 Td -(If) 11.9551 Tj --426 TJm -(all) 17.9327 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(existing) 47.8205 Tj --426 TJm -(input) 29.8878 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(used) 23.9102 Tj --426 TJm -(up) 11.9551 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(all) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj -98.488 245.38 Td -(output) 35.8654 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(removed) 41.8429 Tj -106.976 233.424 Td -(Next) 23.9102 Tj --426 TJm -(state) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(IDLE;) 29.8878 Tj --426 TJm -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_STREAM_END) 77.7083 Tj -98.488 221.469 Td -(else) 23.9102 Tj -106.976 209.514 Td -(Next) 23.9102 Tj --426 TJm -(state) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(FINISHING;) 59.7756 Tj --426 TJm -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_FINISH_OK) 71.7307 Tj -90 185.604 Td -(FINISHING/other) 89.6634 Tj -98.488 173.649 Td -(Illegal.) 47.8205 Tj -98.488 161.693 Td -(Return) 35.8654 Tj --426 TJm -(value) 29.8878 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_SEQUENCE_ERROR) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 124.234 Td -/F122_0 9.9626 Tf -(That) 18.2614 Tj --250 TJm -(still) 14.9539 Tj --250 TJm -(looks) 21.589 Tj --250 TJm -(complicated?) 53.1206 Tj --620 TJm -(W) 9.4047 Tj -80 TJm -(ell,) 12.4533 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(air) 10.5105 Tj --250 TJm -(enough.) 31.8205 Tj --620 TJm -(The) 15.4918 Tj --250 TJm -(usual) 21.031 Tj --250 TJm -(sequence) 36.5129 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(calls) 18.2614 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(compressing) 50.3609 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(load) 17.1556 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(is:) 9.4147 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 92.353 Td -(1.) 7.472 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --510 TJm -(Get) 14.386 Tj --250 TJm -(started) 26.5603 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -153.175 92.353 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -260.771 92.353 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(15) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 16 19 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -74.491 710.037 Td -/F122_0 9.9626 Tf -(2.) 7.472 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --510 TJm -(Sho) 15.5018 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --267 TJm -(data) 16.5977 Tj --268 TJm -(in) 7.7509 Tj --267 TJm -(and) 14.386 Tj --268 TJm -(shlurp) 24.9065 Tj --267 TJm -(out) 12.7322 Tj --268 TJm -(its) 9.4147 Tj --267 TJm -(compressed) 47.0334 Tj --267 TJm -(form) 19.3673 Tj --268 TJm -(using) 21.589 Tj --267 TJm -(zero) 17.1456 Tj --268 TJm -(or) 8.2988 Tj --267 TJm -(more) 20.4731 Tj --268 TJm -(call) 14.386 Tj -1 TJm -(s) 3.8755 Tj --268 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -400.64 710.037 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -486.991 710.037 Td -/F122_0 9.9626 Tf -(with) 17.7135 Tj --267 TJm -(action) 24.3486 Tj --268 TJm -(=) 5.6189 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -83.955 698.082 Td -/F124_0 9.9626 Tf -(BZ_RUN) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -119.821 698.082 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 676.164 Td -(3.) 7.472 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --510 TJm -(Finish) 24.9165 Tj --276 TJm -(up.) 12.4533 Tj --387 TJm -(Repeatedly) 44.8217 Tj --276 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -195.722 676.164 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -282.156 676.164 Td -/F122_0 9.9626 Tf -(with) 17.7135 Tj --276 TJm -(action) 24.3486 Tj --276 TJm -(=) 5.6189 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -338.079 676.164 Td -/F124_0 9.9626 Tf -(BZ_FINISH) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -391.877 676.164 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --276 TJm -(cop) 14.386 Tj -10 TJm -(ying) 17.7135 Tj --276 TJm -(out) 12.7322 Tj --275 TJm -(the) 12.1743 Tj --276 TJm -(compressed) 47.0334 Tj --276 TJm -(output,) 27.9551 Tj -83.955 664.209 Td -(until) 18.2714 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.717 664.209 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -184.916 664.209 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(returned.) 35.686 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 642.291 Td -(4.) 7.472 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --510 TJm -(Close) 22.6948 Tj --250 TJm -(up) 9.9626 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(go) 9.9626 Tj --250 TJm -(home.) 24.6275 Tj --620 TJm -(Call) 16.6077 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -203.914 642.291 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressEnd) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -305.533 642.291 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 620.374 Td -(If) 6.6351 Tj --269 TJm -(the) 12.1743 Tj --270 TJm -(data) 16.5977 Tj --269 TJm -(you) 14.9439 Tj --270 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --269 TJm -(to) 7.7509 Tj --270 TJm -(compress) 37.6287 Tj --269 TJm -(\002ts) 12.1843 Tj --270 TJm -(into) 15.5018 Tj --269 TJm -(your) 18.2614 Tj --270 TJm -(input) 20.4831 Tj --269 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --270 TJm -(all) 9.9626 Tj --269 TJm -(at) 7.193 Tj --270 TJm -(once,) 21.3 Tj --274 TJm -(you) 14.9439 Tj --269 TJm -(can) 13.8281 Tj --270 TJm -(skip) 16.6077 Tj --269 TJm -(the) 12.1743 Tj --270 TJm -(calls) 18.2614 Tj --269 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -456.314 620.374 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -72 608.418 Td -(\() 5.9776 Tj --600 TJm -(...,) 23.9102 Tj --600 TJm -(BZ_RUN) 35.8654 Tj --600 TJm -(\)) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -164.154 608.418 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj --250 TJm -(just) 14.396 Tj --250 TJm -(do) 9.9626 Tj --250 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -225.036 608.418 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj --600 TJm -(\() 5.9776 Tj --600 TJm -(...,) 23.9102 Tj --600 TJm -(BZ_FINISH) 53.798 Tj --600 TJm -(\)) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -424.786 608.418 Td -/F122_0 9.9626 Tf -(calls.) 20.7521 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 586.501 Td -(All) 12.7322 Tj --278 TJm -(required) 33.1954 Tj --277 TJm -(memory) 33.2053 Tj --278 TJm -(is) 6.6451 Tj --277 TJm -(allocated) 35.965 Tj --278 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -220.295 586.501 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -327.891 586.501 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --785 TJm -(The) 15.4918 Tj --278 TJm -(compression) 50.3609 Tj --277 TJm -(library) 26.5603 Tj --278 TJm -(can) 13.8281 Tj --277 TJm -(accept) 25.4445 Tj --278 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --277 TJm -(data) 16.5977 Tj --278 TJm -(at) 7.193 Tj --278 TJm -(all) 9.9626 Tj -72 574.545 Td -(\(ob) 13.2801 Tj -15 TJm -(viously\).) 35.1481 Tj --612 TJm -(So) 10.5205 Tj --238 TJm -(you) 14.9439 Tj --237 TJm -(shouldn') 34.8691 Tj -18 TJm -(t) 2.7696 Tj --238 TJm -(get) 12.1743 Tj --238 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --237 TJm -(error) 19.3573 Tj --238 TJm -(return) 23.7907 Tj --238 TJm -(v) 4.9813 Tj -25 TJm -(alues) 20.4731 Tj --238 TJm -(from) 19.3673 Tj --237 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -339.287 574.545 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -425.342 574.545 Td -/F122_0 9.9626 Tf -(calls.) 20.7521 Tj --612 TJm -(If) 6.6351 Tj --237 TJm -(you) 14.9439 Tj --238 TJm -(do,) 12.4533 Tj --240 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --238 TJm -(will) 15.5018 Tj --238 TJm -(be) 9.4047 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 562.59 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -173.619 562.59 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(indicate) 31.5416 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(your) 18.2614 Tj --250 TJm -(programming.) 56.727 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 540.672 Td -(T) 6.0871 Tj -35 TJm -(ri) 6.0871 Tj -25 TJm -(vial) 14.9439 Tj --250 TJm -(other) 20.4731 Tj --250 TJm -(possible) 32.6574 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 501.654] cm -0 0 468 35.866 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 529.151 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 517.196 Td -(if) 11.9551 Tj --426 TJm -(strm) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL,) 29.8878 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(strm->s) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 471.033 Td -/F116_0 17.2154 Tf -(3.3.3.) 43.0729 Tj --278 TJm -(BZ2_bzCompressEnd) 177.9212 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 442.563] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 458.104 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzCompressEnd) 101.6185 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bz_stream) 53.798 Tj -286.303 456.361 Td -(*) 5.9776 Tj -292.281 458.104 Td -(strm) 23.9102 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 420.645 Td -/F122_0 9.9626 Tf -(Releases) 34.8591 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(memory) 33.2053 Tj --250 TJm -(associated) 40.9463 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(compression) 50.3609 Tj --250 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 398.727 Td -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 361.766] cm -0 0 468 35.866 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 389.263 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj --852 TJm -(if) 11.9551 Tj --426 TJm -(strm) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(strm->s) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -90 377.307 Td -(BZ_OK) 29.8878 Tj --4686 TJm -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 331.145 Td -/F116_0 17.2154 Tf -(3.3.4.) 43.0729 Tj --278 TJm -(BZ2_bzDecompressInit) 190.3679 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 302.674] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 318.216 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzDecompressInit) 119.5512 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bz_stream) 53.798 Tj -304.236 316.473 Td -(*) 5.9776 Tj -310.214 318.216 Td -(strm,) 29.8878 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(verbosity,) 59.7756 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(small) 29.8878 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 280.757 Td -/F122_0 9.9626 Tf -(Prepares) 34.3012 Tj --351 TJm -(for) 11.6164 Tj --351 TJm -(decompression.) 62.2563 Tj --1228 TJm -(As) 11.0684 Tj --351 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -235.177 280.757 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -342.773 280.757 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --377 TJm -(a) 4.4234 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -356.937 280.757 Td -/F124_0 9.9626 Tf -(bz_stream) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -414.235 280.757 Td -/F122_0 9.9626 Tf -(record) 25.4445 Tj --351 TJm -(should) 26.5703 Tj --351 TJm -(be) 9.4047 Tj --352 TJm -(allocated) 35.965 Tj --351 TJm -(and) 14.386 Tj -72 268.801 Td -(initialised) 39.3025 Tj --306 TJm -(before) 25.4445 Tj --305 TJm -(the) 12.1743 Tj --306 TJm -(call.) 16.8766 Tj --953 TJm -(Fields) 24.3586 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -211.833 268.801 Td -/F124_0 9.9626 Tf -(bzalloc) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -253.676 268.801 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -259.35 268.801 Td -/F124_0 9.9626 Tf -(bzfree) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -298.26 268.801 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -315.69 268.801 Td -/F124_0 9.9626 Tf -(opaque) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -354.6 268.801 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --306 TJm -(be) 9.4047 Tj --305 TJm -(set) 11.0684 Tj --306 TJm -(if) 6.0871 Tj --305 TJm -(a) 4.4234 Tj --306 TJm -(custom) 28.782 Tj --305 TJm -(memory) 33.2053 Tj --306 TJm -(allocator) 34.8591 Tj --306 TJm -(is) 6.6451 Tj -72 256.846 Td -(required,) 35.686 Tj --350 TJm -(or) 8.2988 Tj --331 TJm -(made) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -147.635 256.846 Td -/F124_0 9.9626 Tf -(NULL) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -174.836 256.846 Td -/F122_0 9.9626 Tf -(for) 11.6164 Tj --330 TJm -(the) 12.1743 Tj --331 TJm -(normal) 28.224 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -236.722 256.846 Td -/F124_0 9.9626 Tf -(malloc) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -275.878 256.846 Td -/F122_0 9.9626 Tf -(/) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -281.938 256.846 Td -/F124_0 9.9626 Tf -(free) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -309.139 256.846 Td -/F122_0 9.9626 Tf -(routines.) 34.5901 Tj --1102 TJm -(Upon) 22.1369 Tj --330 TJm -(return,) 26.2813 Tj --350 TJm -(the) 12.1743 Tj --331 TJm -(internal) 30.4357 Tj --330 TJm -(state) 18.2614 Tj --330 TJm -(will) 15.5018 Tj --330 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --331 TJm -(been) 18.8094 Tj -72 244.891 Td -(initialised,) 41.7931 Tj --250 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -133.16 244.891 Td -/F124_0 9.9626 Tf -(total_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -183.471 244.891 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -200.348 244.891 Td -/F124_0 9.9626 Tf -(total_out) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -256.637 244.891 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(zero.) 19.6363 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 222.973 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(meaning) 34.3112 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(parameter) 39.8305 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -192.756 222.973 Td -/F124_0 9.9626 Tf -(verbosity) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -246.554 222.973 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(see) 12.7222 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -266.748 222.973 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -374.345 222.973 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 201.055 Td -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.497 201.055 Td -/F124_0 9.9626 Tf -(small) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -114.248 201.055 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --287 TJm -(nonzero,) 34.5802 Tj --297 TJm -(the) 12.1743 Tj --287 TJm -(library) 26.5603 Tj --288 TJm -(wil) 12.7322 Tj -1 TJm -(l) 2.7696 Tj --288 TJm -(use) 13.2801 Tj --287 TJm -(an) 9.4047 Tj --287 TJm -(alternati) 32.6474 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --288 TJm -(decompression) 59.7656 Tj --287 TJm -(algorithm) 38.7446 Tj --287 TJm -(which) 24.3486 Tj --288 TJm -(uses) 17.1556 Tj --287 TJm -(less) 14.9439 Tj --287 TJm -(memory) 33.2053 Tj --287 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --288 TJm -(at) 7.193 Tj --287 TJm -(the) 12.1743 Tj -72 189.1 Td -(cost) 16.0497 Tj --289 TJm -(of) 8.2988 Tj --290 TJm -(decompressing) 59.7656 Tj --289 TJm -(more) 20.4731 Tj --289 TJm -(slo) 11.6264 Tj -25 TJm -(wly) 14.9439 Tj --290 TJm -(\(roughly) 34.3112 Tj --289 TJm -(speaking,) 37.9077 Tj --299 TJm -(half) 15.4918 Tj --290 TJm -(the) 12.1743 Tj --289 TJm -(speed,) 25.1755 Tj --299 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --289 TJm -(the) 12.1743 Tj --290 TJm -(maximum) 40.4083 Tj --289 TJm -(memory) 33.2053 Tj --289 TJm -(requirement) 48.1393 Tj --290 TJm -(drops) 22.1369 Tj -72 177.145 Td -(to) 7.7509 Tj --250 TJm -(around) 27.6661 Tj --250 TJm -(2300k\).) 30.7147 Tj --620 TJm -(See) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --250 TJm -(Ho) 12.1743 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(bzip2) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC --250 TJm -([2]) 11.6164 Tj -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --250 TJm -(for) 11.6164 Tj --250 TJm -(more) 20.4731 Tj --250 TJm -(information) 47.0434 Tj --250 TJm -(on) 9.9626 Tj --250 TJm -(memory) 33.2053 Tj --250 TJm -(management.) 53.3995 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 155.227 Td -(Note) 19.3673 Tj --289 TJm -(that) 14.9439 Tj --290 TJm -(the) 12.1743 Tj --289 TJm -(amount) 29.8878 Tj --289 TJm -(of) 8.2988 Tj --289 TJm -(memory) 33.2053 Tj --290 TJm -(needed) 28.2141 Tj --289 TJm -(to) 7.7509 Tj --289 TJm -(decompress) 47.0334 Tj --289 TJm -(a) 4.4234 Tj --290 TJm -(stream) 26.5603 Tj --289 TJm -(cannot) 26.5603 Tj --289 TJm -(be) 9.4047 Tj --289 TJm -(determined) 44.8217 Tj --290 TJm -(until) 18.2714 Tj --289 TJm -(the) 12.1743 Tj --289 TJm -(stream') 29.8778 Tj -55 TJm -(s) 3.8755 Tj --289 TJm -(header) 26.5503 Tj --290 TJm -(has) 13.2801 Tj -72 143.272 Td -(been) 18.8094 Tj --342 TJm -(read,) 19.6363 Tj --366 TJm -(so) 8.8568 Tj --342 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --342 TJm -(if) 6.0871 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -161.081 143.272 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompressInit) 119.5512 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -284.043 143.272 Td -/F122_0 9.9626 Tf -(succeeds,) 37.8977 Tj --365 TJm -(a) 4.4234 Tj --343 TJm -(subsequent) 44.2738 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -381.098 143.272 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -480.149 143.272 Td -/F122_0 9.9626 Tf -(could) 22.1369 Tj --342 TJm -(f) 3.3175 Tj -10 TJm -(ail) 9.9626 Tj --343 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 131.317 Td -/F124_0 9.9626 Tf -(BZ_MEM_ERROR) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -143.731 131.317 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 109.399 Td -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(16) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 17 20 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 624.359] cm -0 0 468 95.641 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(BZ_CONFIG_ERROR) 89.6634 Tj -98.488 699.676 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(library) 41.8429 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(mis-compiled) 71.7307 Tj -90 687.721 Td -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 675.766 Td -(if) 11.9551 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(small) 29.8878 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(&&) 11.9551 Tj --426 TJm -(small) 29.8878 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(1) 5.9776 Tj --426 TJm -(\)) 5.9776 Tj -98.488 663.811 Td -(or) 11.9551 Tj --426 TJm -(\(verbosity) 59.7756 Tj --426 TJm -(<;) 11.9551 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(||) 11.9551 Tj --426 TJm -(verbosity) 53.798 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(4\)) 11.9551 Tj -90 651.856 Td -(BZ_MEM_ERROR) 71.7307 Tj -98.488 639.9 Td -(if) 11.9551 Tj --426 TJm -(insufficient) 71.7307 Tj --426 TJm -(memory) 35.8654 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(available) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 602.441 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 553.524] cm -0 0 468 47.821 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 592.976 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -98.488 581.021 Td -(if) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(returned) 47.8205 Tj -98.488 569.066 Td -(no) 11.9551 Tj --426 TJm -(specific) 47.8205 Tj --426 TJm -(action) 35.8654 Tj --426 TJm -(required) 47.8205 Tj --426 TJm -(in) 11.9551 Tj --426 TJm -(case) 23.9102 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(error) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 522.903 Td -/F116_0 17.2154 Tf -(3.3.5.) 43.0729 Tj --278 TJm -(BZ2_bzDecompress) 164.5448 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 494.433] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 509.975 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzDecompress) 95.641 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bz_stream) 53.798 Tj -280.326 508.231 Td -(*) 5.9776 Tj -286.303 509.975 Td -(strm) 23.9102 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 472.515 Td -/F122_0 9.9626 Tf -(Pro) 13.8381 Tj -15 TJm -(vides) 21.031 Tj --301 TJm -(more) 20.4731 Tj --302 TJm -(input) 20.4831 Tj --301 TJm -(and/out) 29.8878 Tj --302 TJm -(output) 25.4644 Tj --301 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --301 TJm -(space) 22.1269 Tj --302 TJm -(for) 11.6164 Tj --301 TJm -(the) 12.1743 Tj --302 TJm -(library) 26.5603 Tj -65 TJm -(.) 2.4907 Tj --928 TJm -(The) 15.4918 Tj --301 TJm -(caller) 22.1269 Tj --302 TJm -(maintains) 38.7446 Tj --301 TJm -(input) 20.4831 Tj --302 TJm -(and) 14.386 Tj --301 TJm -(output) 25.4644 Tj --301 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fers,) 17.4246 Tj --315 TJm -(and) 14.386 Tj -72 460.56 Td -(uses) 17.1556 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -91.646 460.56 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -189.778 460.56 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(transfer) 30.4258 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(between) 33.1954 Tj --250 TJm -(them.) 22.4159 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 438.642 Td -(Before) 27.1082 Tj --498 TJm -(each) 18.2515 Tj --499 TJm -(call) 14.386 Tj --498 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -159.356 438.642 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -254.997 438.642 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -263.071 438.642 Td -/F124_0 9.9626 Tf -(next_in) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -309.879 438.642 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --498 TJm -(point) 20.4831 Tj --499 TJm -(at) 7.193 Tj --498 TJm -(the) 12.1743 Tj --498 TJm -(compressed) 47.0334 Tj --499 TJm -(data,) 19.0883 Tj --560 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -492.179 438.642 Td -/F124_0 9.9626 Tf -(avail_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 426.687 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --308 TJm -(indicate) 31.5416 Tj --308 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --309 TJm -(man) 17.1556 Tj -15 TJm -(y) 4.9813 Tj --308 TJm -(bytes) 21.031 Tj --308 TJm -(the) 12.1743 Tj --308 TJm -(library) 26.5603 Tj --308 TJm -(may) 17.1556 Tj --309 TJm -(read.) 19.6363 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -294.955 426.687 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -393.667 426.687 Td -/F122_0 9.9626 Tf -(updates) 30.4357 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -427.173 426.687 Td -/F124_0 9.9626 Tf -(next_in) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -469.016 426.687 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -474.723 426.687 Td -/F124_0 9.9626 Tf -(avail_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -525.614 426.687 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 414.732 Td -/F124_0 9.9626 Tf -(total_in) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -122.311 414.732 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(re\003ect) 24.8965 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(number) 30.4357 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(bytes) 21.031 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(has) 13.2801 Tj --250 TJm -(read.) 19.6363 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 392.814 Td -(Similarly) 37.0908 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -113.799 392.814 Td -/F124_0 9.9626 Tf -(next_out) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -164.41 392.814 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --280 TJm -(point) 20.4831 Tj --280 TJm -(to) 7.7509 Tj --280 TJm -(a) 4.4234 Tj --280 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --281 TJm -(i) 2.7696 Tj -1 TJm -(n) 4.9813 Tj --281 TJm -(which) 24.3486 Tj --280 TJm -(the) 12.1743 Tj --280 TJm -(uncompressed) 56.996 Tj --280 TJm -(output) 25.4644 Tj --280 TJm -(is) 6.6451 Tj --280 TJm -(to) 7.7509 Tj --280 TJm -(be) 9.4047 Tj --280 TJm -(placed,) 28.493 Tj --288 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -486.202 392.814 Td -/F124_0 9.9626 Tf -(avail_out) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 380.859 Td -/F122_0 9.9626 Tf -(indicating) 39.8504 Tj --525 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --524 TJm -(much) 22.1369 Tj --525 TJm -(output) 25.4644 Tj --524 TJm -(space) 22.1269 Tj --525 TJm -(is) 6.6451 Tj --525 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -285.792 380.859 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -374.705 380.859 Td -/F122_0 9.9626 Tf -(updates) 30.4357 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -410.367 380.859 Td -/F124_0 9.9626 Tf -(next_out) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -458.188 380.859 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -466.589 380.859 Td -/F124_0 9.9626 Tf -(avail_out) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -525.614 380.859 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 368.904 Td -/F124_0 9.9626 Tf -(total_out) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -128.289 368.904 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(re\003ect) 24.8965 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(number) 30.4357 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(bytes) 21.031 Tj --250 TJm -(output.) 27.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 346.986 Td -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --320 TJm -(may) 17.1556 Tj --321 TJm -(pro) 13.2801 Tj -15 TJm -(vide) 17.1556 Tj --320 TJm -(and) 14.386 Tj --321 TJm -(remo) 20.4731 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --320 TJm -(as) 8.2988 Tj --321 TJm -(little) 18.2714 Tj --320 TJm -(or) 8.2988 Tj --320 TJm -(as) 8.2988 Tj --321 TJm -(much) 22.1369 Tj --320 TJm -(data) 16.5977 Tj --321 TJm -(as) 8.2988 Tj --320 TJm -(you) 14.9439 Tj --321 TJm -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --320 TJm -(on) 9.9626 Tj --320 TJm -(each) 18.2515 Tj --321 TJm -(call) 14.386 Tj --320 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -407.816 346.986 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -503.457 346.986 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1043 TJm -(In) 8.2988 Tj --320 TJm -(the) 12.1743 Tj -72 335.031 Td -(limit,) 21.32 Tj --295 TJm -(it) 5.5392 Tj --286 TJm -(is) 6.6451 Tj --287 TJm -(acceptable) 42.0422 Tj --286 TJm -(to) 7.7509 Tj --286 TJm -(supply) 26.5703 Tj --286 TJm -(and) 14.386 Tj --287 TJm -(remo) 20.4731 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --286 TJm -(data) 16.5977 Tj --286 TJm -(one) 14.386 Tj --286 TJm -(byte) 17.1556 Tj --287 TJm -(at) 7.193 Tj --286 TJm -(a) 4.4234 Tj --286 TJm -(time,) 20.2042 Tj --295 TJm -(although) 34.8691 Tj --286 TJm -(this) 14.396 Tj --287 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --286 TJm -(be) 9.4047 Tj --286 TJm -(terribly) 29.3299 Tj --286 TJm -(inef) 15.4918 Tj -25 TJm -(\002cient.) 27.3972 Tj --838 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj -72 323.076 Td -(should) 26.5703 Tj --250 TJm -(al) 7.193 Tj -10 TJm -(w) 7.193 Tj -10 TJm -(ays) 13.2801 Tj --250 TJm -(ensure) 26.0024 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(least) 18.2614 Tj --250 TJm -(one) 14.386 Tj --250 TJm -(byte) 17.1556 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(output) 25.4644 Tj --250 TJm -(space) 22.1269 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable) 26.5603 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(each) 18.2515 Tj --250 TJm -(call.) 16.8766 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 301.158 Td -(Use) 15.4918 Tj --250 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -100.772 301.158 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -198.904 301.158 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(simpler) 29.8878 Tj --250 TJm -(than) 17.1556 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -260.064 301.158 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -343.75 301.158 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 279.24 Td -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --346 TJm -(should) 26.5703 Tj --347 TJm -(pro) 13.2801 Tj -15 TJm -(vide) 17.1556 Tj --346 TJm -(input) 20.4831 Tj --346 TJm -(and) 14.386 Tj --346 TJm -(remo) 20.4731 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --347 TJm -(output) 25.4644 Tj --346 TJm -(as) 8.2988 Tj --346 TJm -(described) 38.1767 Tj --346 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e,) 6.914 Tj --371 TJm -(and) 14.386 Tj --346 TJm -(repeatedly) 41.4942 Tj --346 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -422.638 279.24 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -521.729 279.24 Td -/F122_0 9.9626 Tf -(until) 18.2714 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 267.285 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -152.314 267.285 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --262 TJm -(returned.) 35.686 Tj --344 TJm -(Appearance) 47.5714 Tj --262 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -261.767 267.285 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -342.081 267.285 Td -/F122_0 9.9626 Tf -(denotes) 30.4357 Tj --262 TJm -(that) 14.9439 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -392.672 267.285 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -490.919 267.285 Td -/F122_0 9.9626 Tf -(has) 13.2801 Tj --262 TJm -(detected) 33.1954 Tj -72 255.33 Td -(the) 12.1743 Tj --212 TJm -(logical) 27.1182 Tj --212 TJm -(end) 14.386 Tj --211 TJm -(of) 8.2988 Tj --212 TJm -(the) 12.1743 Tj --212 TJm -(compressed) 47.0334 Tj --212 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -237.858 255.33 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -335.609 255.33 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --212 TJm -(not) 12.7322 Tj --212 TJm -(produce) 32.0895 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -402.263 255.33 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -482.082 255.33 Td -/F122_0 9.9626 Tf -(until) 18.2714 Tj --212 TJm -(all) 9.9626 Tj --212 TJm -(output) 25.4644 Tj -72 243.375 Td -(data) 16.5977 Tj --256 TJm -(has) 13.2801 Tj --256 TJm -(been) 18.8094 Tj --255 TJm -(placed) 26.0024 Tj --256 TJm -(into) 15.5018 Tj --256 TJm -(the) 12.1743 Tj --256 TJm -(output) 25.4644 Tj --256 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -40 TJm -(,) 2.4907 Tj --257 TJm -(so) 8.8568 Tj --256 TJm -(once) 18.8094 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -278.979 243.375 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -359.236 243.375 Td -/F122_0 9.9626 Tf -(appears,) 32.9164 Tj --257 TJm -(you) 14.9439 Tj --256 TJm -(are) 12.1643 Tj --256 TJm -(guaranteed) 43.7059 Tj --256 TJm -(to) 7.7509 Tj --255 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --256 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable) 26.5603 Tj -72 231.419 Td -(all) 9.9626 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(decompressed) 56.4381 Tj --250 TJm -(output,) 27.9551 Tj --250 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -205.369 231.419 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompressEnd) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -321.433 231.419 Td -/F122_0 9.9626 Tf -(can) 13.8281 Tj --250 TJm -(safely) 23.7907 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(called.) 26.2813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 209.502 Td -(If) 6.6351 Tj --250 TJm -(case) 17.1456 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(an) 9.4047 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alue,) 19.0883 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(should) 26.5703 Tj --250 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -261.259 209.502 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompressEnd) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -377.323 209.502 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(clean) 21.0211 Tj --250 TJm -(up) 9.9626 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(release) 27.6562 Tj --250 TJm -(memory) 33.2053 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 187.584 Td -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(17) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 18 21 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 540.672] cm -0 0 468 179.328 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 699.676 Td -(if) 11.9551 Tj --426 TJm -(strm) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(strm->s) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -98.488 687.721 Td -(or) 11.9551 Tj --426 TJm -(strm->avail_out) 89.6634 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(1) 5.9776 Tj -90 675.766 Td -(BZ_DATA_ERROR) 77.7083 Tj -98.488 663.811 Td -(if) 11.9551 Tj --426 TJm -(a) 5.9776 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(integrity) 53.798 Tj --426 TJm -(error) 29.8878 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(detected) 47.8205 Tj --426 TJm -(in) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(stream) 35.8654 Tj -90 651.856 Td -(BZ_DATA_ERROR_MAGIC) 113.5736 Tj -98.488 639.9 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(stream) 35.8654 Tj --426 TJm -(doesn't) 41.8429 Tj --426 TJm -(begin) 29.8878 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(right) 29.8878 Tj --426 TJm -(magic) 29.8878 Tj --426 TJm -(bytes) 29.8878 Tj -90 627.945 Td -(BZ_MEM_ERROR) 71.7307 Tj -98.488 615.99 Td -(if) 11.9551 Tj --426 TJm -(there) 29.8878 Tj --426 TJm -(wasn't) 35.8654 Tj --426 TJm -(enough) 35.8654 Tj --426 TJm -(memory) 35.8654 Tj --426 TJm -(available) 53.798 Tj -90 604.035 Td -(BZ_STREAM_END) 77.7083 Tj -98.488 592.08 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(logical) 41.8429 Tj --426 TJm -(end) 17.9327 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(stream) 35.8654 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(detected) 47.8205 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(all) 17.9327 Tj -98.488 580.124 Td -(output) 35.8654 Tj --426 TJm -(in) 11.9551 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(consumed,) 53.798 Tj --426 TJm -(eg) 11.9551 Tj --426 TJm -(s-->avail_out) 77.7083 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(0) 5.9776 Tj -90 568.169 Td -(BZ_OK) 29.8878 Tj -98.488 556.214 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 518.755 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 457.883] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 509.29 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -98.488 497.335 Td -(if) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(returned) 47.8205 Tj -90 485.38 Td -(BZ2_bzDecompressEnd) 113.5736 Tj -98.488 473.425 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 427.262 Td -/F116_0 17.2154 Tf -(3.3.6.) 43.0729 Tj --278 TJm -(BZ2_bzDecompressEnd) 197.0647 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 398.792] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 414.334 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzDecompressEnd) 113.5736 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bz_stream) 53.798 Tj -298.259 412.59 Td -(*) 5.9776 Tj -304.236 414.334 Td -(strm) 23.9102 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 376.874 Td -/F122_0 9.9626 Tf -(Releases) 34.8591 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(memory) 33.2053 Tj --250 TJm -(associated) 40.9463 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(decompression) 59.7656 Tj --250 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 354.956 Td -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 294.085] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 345.492 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 333.537 Td -(if) 11.9551 Tj --426 TJm -(strm) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(strm->s) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -90 321.581 Td -(BZ_OK) 29.8878 Tj -98.488 309.626 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 272.167 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 247.161] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -98.488 262.702 Td -/F124_0 9.9626 Tf -(None.) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 212.408 Td -/F116_0 20.6585 Tf -(3.4.) 34.4584 Tj --278 TJm -(High-le) 70.0117 Tj -15 TJm -(vel) 28.7153 Tj --278 TJm -(interface) 86.1046 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 190.49 Td -/F122_0 9.9626 Tf -(This) 17.7135 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj --250 TJm -(pro) 13.2801 Tj -15 TJm -(vides) 21.031 Tj --250 TJm -(functions) 37.0808 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(reading) 29.8778 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(writing) 28.782 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -300.292 190.49 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -332.67 190.49 Td -/F122_0 9.9626 Tf -(format) 26.5603 Tj --250 TJm -(\002les.) 19.0983 Tj --620 TJm -(First,) 20.7621 Tj --250 TJm -(some) 21.031 Tj --250 TJm -(general) 29.3199 Tj --250 TJm -(points.) 26.8492 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 158.609 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(All) 12.7322 Tj --353 TJm -(of) 8.2988 Tj --352 TJm -(the) 12.1743 Tj --353 TJm -(functions) 37.0808 Tj --352 TJm -(tak) 12.1743 Tj -10 TJm -(e) 4.4234 Tj --353 TJm -(an) 9.4047 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -199.726 158.609 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj -217.658 156.866 Td -(*) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -227.149 158.609 Td -/F122_0 9.9626 Tf -(\002rst) 15.5018 Tj --353 TJm -(ar) 7.7409 Tj -18 TJm -(gument,) 32.3785 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -289.871 158.609 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -331.715 158.609 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1236 TJm -(After) 21.0211 Tj --352 TJm -(each) 18.2515 Tj --353 TJm -(call,) 16.8766 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -413.457 158.609 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -458.813 158.609 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --353 TJm -(be) 9.4047 Tj --352 TJm -(consulted) 38.1866 Tj -81.963 146.654 Td -(\002rst) 15.5018 Tj --371 TJm -(to) 7.7509 Tj --371 TJm -(determine) 39.8404 Tj --372 TJm -(the) 12.1743 Tj --371 TJm -(outcome) 34.3112 Tj --371 TJm -(of) 8.2988 Tj --371 TJm -(the) 12.1743 Tj --372 TJm -(call.) 16.8766 Tj --1347 TJm -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -278.539 146.654 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -324.081 146.654 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -334.424 146.654 Td -/F124_0 9.9626 Tf -(BZ_OK) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -364.312 146.654 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --371 TJm -(the) 12.1743 Tj --372 TJm -(call) 14.386 Tj --371 TJm -(completed) 41.5042 Tj --371 TJm -(successfully) 48.6972 Tj -65 TJm -(,) 2.4907 Tj --402 TJm -(and) 14.386 Tj --371 TJm -(only) 17.7135 Tj -81.963 134.699 Td -(then) 17.1556 Tj --292 TJm -(should) 26.5703 Tj --293 TJm -(the) 12.1743 Tj --292 TJm -(return) 23.7907 Tj --292 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj --293 TJm -(of) 8.2988 Tj --292 TJm -(the) 12.1743 Tj --292 TJm -(function) 33.2053 Tj --293 TJm -(\(if) 9.4047 Tj --292 TJm -(an) 9.4047 Tj -15 TJm -(y\)) 8.2988 Tj --292 TJm -(be) 9.4047 Tj --293 TJm -(consulted.) 40.6773 Tj --874 TJm -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -363.994 134.699 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -408.749 134.699 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -418.307 134.699 Td -/F124_0 9.9626 Tf -(BZ_IO_ERROR) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -484.06 134.699 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --292 TJm -(there) 19.9152 Tj --293 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --292 TJm -(an) 9.4047 Tj -81.963 122.744 Td -(error) 19.3573 Tj --279 TJm -(reading/writ) 48.6972 Tj -1 TJm -(ing) 12.7322 Tj --279 TJm -(the) 12.1743 Tj --279 TJm -(underlying) 43.1679 Tj --278 TJm -(compressed) 47.0334 Tj --279 TJm -(\002le,) 15.2229 Tj --285 TJm -(and) 14.386 Tj --279 TJm -(you) 14.9439 Tj --279 TJm -(should) 26.5703 Tj --278 TJm -(then) 17.1556 Tj --279 TJm -(consult) 28.782 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -412.785 122.744 Td -/F124_0 9.9626 Tf -(errno) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -445.448 122.744 Td -/F122_0 9.9626 Tf -(/) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -450.993 122.744 Td -/F124_0 9.9626 Tf -(perror) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -489.634 122.744 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --279 TJm -(determine) 39.8404 Tj -81.963 110.789 Td -(the) 12.1743 Tj --376 TJm -(cause) 22.1269 Tj --376 TJm -(of) 8.2988 Tj --377 TJm -(the) 12.1743 Tj --376 TJm -(dif) 11.0684 Tj -25 TJm -(\002culty) 25.4644 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -203.58 110.789 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -249.171 110.789 Td -/F122_0 9.9626 Tf -(may) 17.1556 Tj --376 TJm -(also) 16.0497 Tj --376 TJm -(be) 9.4047 Tj --377 TJm -(set) 11.0684 Tj --376 TJm -(to) 7.7509 Tj --376 TJm -(v) 4.9813 Tj -25 TJm -(arious) 24.3486 Tj --376 TJm -(other) 20.4731 Tj --377 TJm -(v) 4.9813 Tj -25 TJm -(alues;) 23.2427 Tj --439 TJm -(precise) 28.2141 Tj --376 TJm -(details) 26.0123 Tj --376 TJm -(are) 12.1643 Tj --377 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --376 TJm -(on) 9.9626 Tj --376 TJm -(a) 4.4234 Tj -81.963 98.834 Td -(per) 12.7222 Tj -20 TJm -(-function) 36.5229 Tj --250 TJm -(basis) 19.9252 Tj --250 TJm -(belo) 17.1556 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(18) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 19 22 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -74.491 710.037 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -91.793 710.037 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -136.332 710.037 Td -/F122_0 9.9626 Tf -(indicates) 35.417 Tj --271 TJm -(an) 9.4047 Tj --270 TJm -(error) 19.3573 Tj --271 TJm -(\(ie,) 13.0012 Tj --276 TJm -(an) 9.4047 Tj -15 TJm -(ything) 25.4644 Tj --271 TJm -(e) 4.4234 Tj -15 TJm -(xcept) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -290.317 710.037 Td -/F124_0 9.9626 Tf -(BZ_OK) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -322.901 710.037 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -339.984 710.037 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -417.693 710.037 Td -/F122_0 9.9626 Tf -(\),) 5.8082 Tj --271 TJm -(you) 14.9439 Tj --270 TJm -(should) 26.5703 Tj --271 TJm -(immediately) 49.813 Tj --271 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 698.082 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -173.971 698.082 Td -/F122_0 9.9626 Tf -(\(or) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -187.932 698.082 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteClose) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -283.573 698.082 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --238 TJm -(depending) 41.5042 Tj --236 TJm -(on) 9.9626 Tj --235 TJm -(whether) 32.0895 Tj --235 TJm -(you) 14.9439 Tj --236 TJm -(are) 12.1643 Tj --235 TJm -(attempting) 42.62 Tj --235 TJm -(to) 7.7509 Tj --236 TJm -(read) 17.1456 Tj --235 TJm -(or) 8.2988 Tj --235 TJm -(to) 7.7509 Tj --236 TJm -(write\)) 23.7907 Tj --235 TJm -(to) 7.7509 Tj -81.963 686.127 Td -(free) 15.4819 Tj --309 TJm -(up) 9.9626 Tj --309 TJm -(all) 9.9626 Tj --309 TJm -(resources) 37.6188 Tj --310 TJm -(associated) 40.9463 Tj --309 TJm -(with) 17.7135 Tj --309 TJm -(the) 12.1743 Tj --309 TJm -(stream.) 29.0509 Tj --975 TJm -(Once) 21.0211 Tj --309 TJm -(an) 9.4047 Tj --310 TJm -(error) 19.3573 Tj --309 TJm -(has) 13.2801 Tj --309 TJm -(been) 18.8094 Tj --309 TJm -(indicated,) 39.0135 Tj --324 TJm -(beha) 18.8094 Tj -20 TJm -(viour) 21.031 Tj --309 TJm -(of) 8.2988 Tj --309 TJm -(all) 9.9626 Tj --310 TJm -(calls) 18.2614 Tj --309 TJm -(e) 4.4234 Tj -15 TJm -(xcept) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 674.172 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -175.035 674.172 Td -/F122_0 9.9626 Tf -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -178.352 674.172 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteClose) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -273.994 674.172 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --342 TJm -(is) 6.6451 Tj --342 TJm -(unde\002ned.) 41.7831 Tj --1173 TJm -(The) 15.4918 Tj --342 TJm -(implication) 45.3896 Tj --342 TJm -(is) 6.6451 Tj --342 TJm -(that) 14.9439 Tj --342 TJm -(\(1\)) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -455.366 674.172 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -500.617 674.172 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --342 TJm -(be) 9.4047 Tj -81.963 662.217 Td -(check) 23.2328 Tj -10 TJm -(ed) 9.4047 Tj --331 TJm -(after) 18.2515 Tj --331 TJm -(each) 18.2515 Tj --331 TJm -(call,) 16.8766 Tj --351 TJm -(and) 14.386 Tj --331 TJm -(\(2\)) 11.6164 Tj --331 TJm -(if) 6.0871 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -223.255 662.217 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -268.396 662.217 Td -/F122_0 9.9626 Tf -(indicates) 35.417 Tj --331 TJm -(an) 9.4047 Tj --331 TJm -(error) 19.3573 Tj -40 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -344.762 662.217 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -437.724 662.217 Td -/F122_0 9.9626 Tf -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -441.041 662.217 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteClose) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -536.682 662.217 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj -81.963 650.261 Td -(should) 26.5703 Tj --250 TJm -(then) 17.1556 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(called) 23.7907 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(clean) 21.0211 Tj --250 TJm -(up.) 12.4533 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 628.344 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(The) 15.4918 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -100.186 628.344 Td -/F124_0 9.9626 Tf -(FILE) 23.9102 Tj -124.097 626.6 Td -(*) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -132.308 628.344 Td -/F122_0 9.9626 Tf -(ar) 7.7409 Tj -18 TJm -(guments) 33.7633 Tj --224 TJm -(passed) 26.5603 Tj --224 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -214.645 628.344 Td -/F124_0 9.9626 Tf -(BZ2_bzReadOpen) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -300.565 628.344 Td -/F122_0 9.9626 Tf -(/) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -305.569 628.344 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteOpen) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -397.466 628.344 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --224 TJm -(be) 9.4047 Tj --224 TJm -(set) 11.0684 Tj --225 TJm -(to) 7.7509 Tj --224 TJm -(binary) 25.4544 Tj --224 TJm -(mode.) 24.6275 Tj --603 TJm -(Most) 20.4831 Tj -81.963 616.389 Td -(Unix) 19.9252 Tj --269 TJm -(systems) 31.5516 Tj --270 TJm -(will) 15.5018 Tj --269 TJm -(do) 9.9626 Tj --269 TJm -(this) 14.396 Tj --270 TJm -(by) 9.9626 Tj --269 TJm -(def) 12.7222 Tj -10 TJm -(ault,) 17.4346 Tj --274 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --270 TJm -(ot) 7.7509 Tj -1 TJm -(her) 12.7222 Tj --270 TJm -(platforms,) 40.6773 Tj --274 TJm -(including) 37.6387 Tj --269 TJm -(W) 9.4047 Tj -40 TJm -(indo) 17.7135 Tj -25 TJm -(ws) 11.0684 Tj --270 TJm -(and) 14.386 Tj --269 TJm -(Mac,) 20.1942 Tj --274 TJm -(will) 15.5018 Tj --270 TJm -(not.) 15.2229 Tj --736 TJm -(If) 6.6351 Tj --269 TJm -(you) 14.9439 Tj --269 TJm -(omit) 18.2714 Tj --270 TJm -(this,) 16.8866 Tj -81.963 604.433 Td -(you) 14.9439 Tj --250 TJm -(may) 17.1556 Tj --250 TJm -(encounter) 39.2825 Tj --250 TJm -(problems) 37.0808 Tj --250 TJm -(when) 21.579 Tj --250 TJm -(mo) 12.7322 Tj -15 TJm -(ving) 17.7135 Tj --250 TJm -(code) 18.8094 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(ne) 9.4047 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(platforms.) 40.6773 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 582.516 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(Memory) 34.3112 Tj --369 TJm -(allocation) 39.2925 Tj --370 TJm -(requests) 32.6474 Tj --369 TJm -(are) 12.1643 Tj --370 TJm -(handled) 31.5416 Tj --369 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -264.468 582.516 Td -/F124_0 9.9626 Tf -(malloc) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -304.014 582.516 Td -/F122_0 9.9626 Tf -(/) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -310.465 582.516 Td -/F124_0 9.9626 Tf -(free) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -334.376 582.516 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1337 TJm -(At) 9.9626 Tj --370 TJm -(present) 28.772 Tj --369 TJm -(there) 19.9152 Tj --370 TJm -(is) 6.6451 Tj --369 TJm -(no) 9.9626 Tj --370 TJm -(f) 3.3175 Tj -10 TJm -(acility) 24.9065 Tj --369 TJm -(for) 11.6164 Tj --370 TJm -(user) 16.5977 Tj -20 TJm -(-de\002ned) 32.6474 Tj -81.963 570.56 Td -(memory) 33.2053 Tj --250 TJm -(allocators) 38.7346 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(I/O) 13.2801 Tj --250 TJm -(functions) 37.0808 Tj --250 TJm -(\(could) 25.4544 Tj --250 TJm -(easily) 23.2427 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(added,) 26.2813 Tj --250 TJm -(though\).) 33.4843 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 529.977 Td -/F116_0 17.2154 Tf -(3.4.1.) 43.0729 Tj --278 TJm -(BZ2_bzReadOpen) 147.3122 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 453.686] cm -0 0 468 71.731 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 517.048 Td -/F124_0 9.9626 Tf -(typedef) 41.8429 Tj --426 TJm -(void) 23.9102 Tj --426 TJm -(BZFILE;) 41.8429 Tj -90 493.138 Td -(BZFILE) 35.8654 Tj -130.109 491.394 Td -(*) 5.9776 Tj -136.087 493.138 Td -(BZ2_bzReadOpen\() 89.6634 Tj --426 TJm -(int) 17.9327 Tj -252.171 491.394 Td -(*) 5.9776 Tj -258.149 493.138 Td -(bzerror,) 47.8205 Tj --426 TJm -(FILE) 23.9102 Tj -338.368 491.394 Td -(*) 5.9776 Tj -344.346 493.138 Td -(f,) 11.9551 Tj -191.855 481.183 Td -(int) 17.9327 Tj --426 TJm -(verbosity,) 59.7756 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(small,) 35.8654 Tj -191.855 469.228 Td -(void) 23.9102 Tj -220.01 467.484 Td -(*) 5.9776 Tj -225.987 469.228 Td -(unused,) 41.8429 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(nUnused) 41.8429 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 431.768 Td -/F122_0 9.9626 Tf -(Prepare) 30.4258 Tj --290 TJm -(to) 7.7509 Tj --289 TJm -(read) 17.1456 Tj --290 TJm -(compressed) 47.0334 Tj --290 TJm -(data) 16.5977 Tj --289 TJm -(from) 19.3673 Tj --290 TJm -(\002le) 12.7322 Tj --289 TJm -(handle) 26.5603 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -272.697 431.768 Td -/F124_0 9.9626 Tf -(f) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -278.675 431.768 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -285.439 431.768 Td -/F124_0 9.9626 Tf -(f) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -294.302 431.768 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --290 TJm -(refer) 18.7994 Tj --289 TJm -(to) 7.7509 Tj --290 TJm -(a) 4.4234 Tj --290 TJm -(\002le) 12.7322 Tj --289 TJm -(which) 24.3486 Tj --290 TJm -(has) 13.2801 Tj --290 TJm -(been) 18.8094 Tj --289 TJm -(opened) 28.772 Tj --290 TJm -(for) 11.6164 Tj --289 TJm -(reading,) 32.3685 Tj --300 TJm -(and) 14.386 Tj -72 419.813 Td -(for) 11.6164 Tj --306 TJm -(which) 24.3486 Tj --305 TJm -(the) 12.1743 Tj --306 TJm -(error) 19.3573 Tj --306 TJm -(indicator) 35.417 Tj --305 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -193.457 419.813 Td -/F124_0 9.9626 Tf -(ferror\(f\)) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -247.255 419.813 Td -/F122_0 9.9626 Tf -(\)is) 9.9626 Tj --306 TJm -(not) 12.7322 Tj --305 TJm -(set.) 13.5591 Tj --954 TJm -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -308.784 419.813 Td -/F124_0 9.9626 Tf -(small) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -341.717 419.813 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --306 TJm -(1,) 7.472 Tj --319 TJm -(the) 12.1743 Tj --306 TJm -(library) 26.5603 Tj --306 TJm -(wil) 12.7322 Tj -1 TJm -(l) 2.7696 Tj --306 TJm -(try) 11.0684 Tj --306 TJm -(to) 7.7509 Tj --305 TJm -(decompress) 47.0334 Tj --306 TJm -(using) 21.589 Tj --306 TJm -(less) 14.9439 Tj -72 407.858 Td -(memory) 33.2053 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(e) 4.4234 Tj -15 TJm -(xpense) 27.6661 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(speed.) 25.1755 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 385.94 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --227 TJm -(reasons) 29.8778 Tj --227 TJm -(e) 4.4234 Tj -15 TJm -(xplained) 34.3112 Tj --228 TJm -(belo) 17.1556 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -189.193 385.94 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -251.232 385.94 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --227 TJm -(decompress) 47.0334 Tj --227 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -332.732 385.94 Td -/F124_0 9.9626 Tf -(nUnused) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -376.838 385.94 Td -/F122_0 9.9626 Tf -(bytes) 21.031 Tj --227 TJm -(starting) 29.8878 Tj --227 TJm -(at) 7.193 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -441.74 385.94 Td -/F124_0 9.9626 Tf -(unused) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -477.605 385.94 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --232 TJm -(before) 25.4445 Tj --227 TJm -(starting) 29.8878 Tj -72 373.985 Td -(to) 7.7509 Tj --280 TJm -(read) 17.1456 Tj --279 TJm -(from) 19.3673 Tj --280 TJm -(the) 12.1743 Tj --279 TJm -(\002le) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -155.094 373.985 Td -/F124_0 9.9626 Tf -(f) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -161.072 373.985 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --797 TJm -(At) 9.9626 Tj --280 TJm -(most) 19.3773 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -206.414 373.985 Td -/F124_0 9.9626 Tf -(BZ_MAX_UNUSED) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -286.907 373.985 Td -/F122_0 9.9626 Tf -(bytes) 21.031 Tj --280 TJm -(may) 17.1556 Tj --279 TJm -(be) 9.4047 Tj --280 TJm -(supplied) 33.7633 Tj --279 TJm -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --280 TJm -(this.) 16.8866 Tj --797 TJm -(If) 6.6351 Tj --279 TJm -(this) 14.396 Tj --280 TJm -(f) 3.3175 Tj -10 TJm -(acility) 24.9065 Tj --279 TJm -(is) 6.6451 Tj --280 TJm -(not) 12.7322 Tj --279 TJm -(required,) 35.686 Tj -72 362.03 Td -(you) 14.9439 Tj --250 TJm -(should) 26.5703 Tj --250 TJm -(pass) 17.1556 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -138.141 362.03 Td -/F124_0 9.9626 Tf -(NULL) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -164.542 362.03 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -181.419 362.03 Td -/F124_0 9.9626 Tf -(0) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -189.887 362.03 Td -/F122_0 9.9626 Tf -(for) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -203.994 362.03 Td -/F124_0 9.9626 Tf -(unused) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -242.35 362.03 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj --250 TJm -(n) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -264.208 362.03 Td -/F124_0 9.9626 Tf -(Unused) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -302.565 362.03 Td -/F122_0 9.9626 Tf -(respecti) 30.9837 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ely) 12.1743 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 340.112 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(meaning) 34.3112 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(parameters) 43.7059 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -196.631 340.112 Td -/F124_0 9.9626 Tf -(small) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -229.01 340.112 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -245.887 340.112 Td -/F124_0 9.9626 Tf -(verbosity) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -299.685 340.112 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(see) 12.7222 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -319.879 340.112 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompressInit) 119.5512 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -439.431 340.112 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 318.194 Td -(The) 15.4918 Tj --402 TJm -(amount) 29.8878 Tj --402 TJm -(of) 8.2988 Tj --402 TJm -(memory) 33.2053 Tj --402 TJm -(needed) 28.2141 Tj --402 TJm -(to) 7.7509 Tj --402 TJm -(decompress) 47.0334 Tj --402 TJm -(a) 4.4234 Tj --401 TJm -(\002le) 12.7322 Tj --402 TJm -(cannot) 26.5603 Tj --402 TJm -(be) 9.4047 Tj --402 TJm -(determined) 44.8217 Tj --402 TJm -(until) 18.2714 Tj --402 TJm -(the) 12.1743 Tj --402 TJm -(\002le') 16.0497 Tj -55 TJm -(s) 3.8755 Tj --402 TJm -(header) 26.5503 Tj --402 TJm -(has) 13.2801 Tj --402 TJm -(been) 18.8094 Tj --402 TJm -(read.) 19.6363 Tj -72 306.239 Td -(So) 10.5205 Tj --492 TJm -(it) 5.5392 Tj --491 TJm -(is) 6.6451 Tj --492 TJm -(possible) 32.6574 Tj --492 TJm -(that) 14.9439 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -166.797 306.239 Td -/F124_0 9.9626 Tf -(BZ2_bzReadOpen) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -255.381 306.239 Td -/F122_0 9.9626 Tf -(returns) 27.6661 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -287.946 306.239 Td -/F124_0 9.9626 Tf -(BZ_OK) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -322.729 306.239 Td -/F122_0 9.9626 Tf -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --492 TJm -(a) 4.4234 Tj --491 TJm -(subsequent) 44.2738 Tj --492 TJm -(call) 14.386 Tj --492 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -431.135 306.239 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -495.81 306.239 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --492 TJm -(return) 23.7907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 294.284 Td -/F124_0 9.9626 Tf -(BZ_MEM_ERROR) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -143.731 294.284 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 272.366 Td -(Possible) 33.2153 Tj --250 TJm -(assignments) 48.7072 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -169.144 272.366 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.987 272.366 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 101.84] cm -0 0 468 167.372 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 260.844 Td -/F124_0 9.9626 Tf -(BZ_CONFIG_ERROR) 89.6634 Tj -98.488 248.889 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(library) 41.8429 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(mis-compiled) 71.7307 Tj -90 236.934 Td -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 224.979 Td -(if) 11.9551 Tj --426 TJm -(f) 5.9776 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -98.488 213.023 Td -(or) 11.9551 Tj --426 TJm -(small) 29.8878 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(neither) 41.8429 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(nor) 17.9327 Tj --426 TJm -(1) 5.9776 Tj -98.488 201.068 Td -(or) 11.9551 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(unused) 35.8654 Tj --426 TJm -(==) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(&&) 11.9551 Tj --426 TJm -(nUnused) 41.8429 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(\)) 5.9776 Tj -98.488 189.113 Td -(or) 11.9551 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(unused) 35.8654 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(&&) 11.9551 Tj --426 TJm -(!\(0) 17.9327 Tj --426 TJm -(<=) 11.9551 Tj --426 TJm -(nUnused) 41.8429 Tj --426 TJm -(<=) 11.9551 Tj --426 TJm -(BZ_MAX_UNUSED\)) 83.6858 Tj --426 TJm -(\)) 5.9776 Tj -90 177.158 Td -(BZ_IO_ERROR) 65.7532 Tj -98.488 165.203 Td -(if) 11.9551 Tj --426 TJm -(ferror\(f\)) 53.798 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(nonzero) 41.8429 Tj -90 153.248 Td -(BZ_MEM_ERROR) 71.7307 Tj -98.488 141.292 Td -(if) 11.9551 Tj --426 TJm -(insufficient) 71.7307 Tj --426 TJm -(memory) 35.8654 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(available) 53.798 Tj -90 129.337 Td -(BZ_OK) 29.8878 Tj -98.488 117.382 Td -(otherwise.) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 79.922 Td -/F122_0 9.9626 Tf -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 51.071 Td -(19) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 20 23 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 660.224] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(Pointer) 41.8429 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(an) 11.9551 Tj --426 TJm -(abstract) 47.8205 Tj --426 TJm -(BZFILE) 35.8654 Tj -98.488 699.676 Td -(if) 11.9551 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj -90 687.721 Td -(NULL) 23.9102 Tj -98.488 675.766 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 638.306 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 577.435] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 628.842 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -98.488 616.887 Td -(if) 11.9551 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj -90 604.932 Td -(BZ2_bzClose) 65.7532 Tj -98.488 592.976 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 546.814 Td -/F116_0 17.2154 Tf -(3.4.2.) 43.0729 Tj --278 TJm -(BZ2_bzRead) 103.3096 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 519.841] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 535.383 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzRead) 59.7756 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(int) 17.9327 Tj -208.595 533.639 Td -(*) 5.9776 Tj -214.572 535.383 Td -(bzerror,) 47.8205 Tj --426 TJm -(BZFILE) 35.8654 Tj -306.747 533.639 Td -(*) 5.9776 Tj -312.724 535.383 Td -(b,) 11.9551 Tj --426 TJm -(void) 23.9102 Tj -357.078 533.639 Td -(*) 5.9776 Tj -363.055 535.383 Td -(buf,) 23.9102 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(len) 17.9327 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 497.923 Td -/F122_0 9.9626 Tf -(Reads) 24.3486 Tj --285 TJm -(up) 9.9626 Tj --284 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -122.569 497.923 Td -/F124_0 9.9626 Tf -(len) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -143.337 497.923 Td -/F122_0 9.9626 Tf -(\(uncompressed\)) 63.6311 Tj --285 TJm -(bytes) 21.031 Tj --284 TJm -(from) 19.3673 Tj --285 TJm -(the) 12.1743 Tj --284 TJm -(compressed) 47.0334 Tj --285 TJm -(\002le) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -336.319 497.923 Td -/F124_0 9.9626 Tf -(b) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -345.132 497.923 Td -/F122_0 9.9626 Tf -(into) 15.5018 Tj --285 TJm -(the) 12.1743 Tj --284 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -405.205 497.923 Td -/F124_0 9.9626 Tf -(buf) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -423.137 497.923 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --828 TJm -(If) 6.6351 Tj --284 TJm -(the) 12.1743 Tj --285 TJm -(read) 17.1456 Tj --285 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --284 TJm -(successful,) 43.4369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 485.968 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -117.36 485.968 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --353 TJm -(set) 11.0684 Tj --353 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -153.374 485.968 Td -/F124_0 9.9626 Tf -(BZ_OK) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -186.778 485.968 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj --353 TJm -(the) 12.1743 Tj --353 TJm -(number) 30.4357 Tj --353 TJm -(of) 8.2988 Tj --353 TJm -(bytes) 21.031 Tj --353 TJm -(read) 17.1456 Tj --353 TJm -(is) 6.6451 Tj --353 TJm -(returned.) 35.686 Tj --1238 TJm -(If) 6.6351 Tj --353 TJm -(the) 12.1743 Tj --353 TJm -(logical) 27.1182 Tj --353 TJm -(end-of-stream) 55.8802 Tj --353 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --353 TJm -(detected,) 35.686 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 474.013 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -116.795 474.013 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --296 TJm -(be) 9.4047 Tj --297 TJm -(set) 11.0684 Tj --296 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -172.328 474.013 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -250.037 474.013 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --296 TJm -(and) 14.386 Tj --297 TJm -(the) 12.1743 Tj --296 TJm -(number) 30.4357 Tj --296 TJm -(of) 8.2988 Tj --297 TJm -(bytes) 21.031 Tj --296 TJm -(read) 17.1456 Tj --296 TJm -(is) 6.6451 Tj --296 TJm -(returned.) 35.686 Tj --898 TJm -(All) 12.7322 Tj --297 TJm -(other) 20.4731 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -470 474.013 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -514.795 474.013 Td -/F122_0 9.9626 Tf -(v) 4.9813 Tj -25 TJm -(alues) 20.4731 Tj -72 462.058 Td -(denote) 26.5603 Tj --250 TJm -(an) 9.4047 Tj --250 TJm -(error) 19.3573 Tj -55 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 440.14 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -134.224 440.14 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --246 TJm -(supply) 26.5703 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -181.193 440.14 Td -/F124_0 9.9626 Tf -(len) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -201.575 440.14 Td -/F122_0 9.9626 Tf -(bytes,) 23.5217 Tj --247 TJm -(unless) 24.9065 Tj --245 TJm -(the) 12.1743 Tj --246 TJm -(logical) 27.1182 Tj --246 TJm -(stream) 26.5603 Tj --246 TJm -(end) 14.386 Tj --245 TJm -(is) 6.6451 Tj --246 TJm -(detected) 33.1954 Tj --246 TJm -(or) 8.2988 Tj --246 TJm -(an) 9.4047 Tj --245 TJm -(error) 19.3573 Tj --246 TJm -(occurs.) 28.493 Tj --617 TJm -(Because) 33.1954 Tj --246 TJm -(of) 8.2988 Tj --246 TJm -(this,) 16.8866 Tj --247 TJm -(it) 5.5392 Tj -72 428.185 Td -(is) 6.6451 Tj --231 TJm -(possible) 32.6574 Tj --231 TJm -(to) 7.7509 Tj --231 TJm -(detect) 23.7907 Tj --231 TJm -(the) 12.1743 Tj --231 TJm -(stream) 26.5603 Tj --231 TJm -(end) 14.386 Tj --232 TJm -(by) 9.9626 Tj --231 TJm -(observing) 39.2925 Tj --231 TJm -(when) 21.579 Tj --231 TJm -(the) 12.1743 Tj --231 TJm -(number) 30.4357 Tj --231 TJm -(of) 8.2988 Tj --231 TJm -(bytes) 21.031 Tj --231 TJm -(returned) 33.1954 Tj --231 TJm -(is) 6.6451 Tj --231 TJm -(less) 14.9439 Tj --231 TJm -(than) 17.1556 Tj --232 TJm -(the) 12.1743 Tj --231 TJm -(number) 30.4357 Tj --231 TJm -(requested.) 40.6673 Tj -72 416.23 Td -(Ne) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ertheless,) 37.3498 Tj --309 TJm -(this) 14.396 Tj --297 TJm -(is) 6.6451 Tj --298 TJm -(re) 7.7409 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(arded) 22.1269 Tj --297 TJm -(as) 8.2988 Tj --297 TJm -(inadvisable;) 48.1492 Tj --321 TJm -(you) 14.9439 Tj --298 TJm -(should) 26.5703 Tj --297 TJm -(instead) 28.224 Tj --297 TJm -(check) 23.2328 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -360.631 416.23 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -405.437 416.23 Td -/F122_0 9.9626 Tf -(after) 18.2515 Tj --297 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj --298 TJm -(call) 14.386 Tj --297 TJm -(and) 14.386 Tj --297 TJm -(w) 7.193 Tj -10 TJm -(atch) 16.5977 Tj --298 TJm -(out) 12.7322 Tj --297 TJm -(for) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 404.275 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -149.709 404.275 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 382.357 Td -(Internally) 38.7346 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -117.541 382.357 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -181.786 382.357 Td -/F122_0 9.9626 Tf -(copies) 25.4544 Tj --449 TJm -(data) 16.5977 Tj --448 TJm -(from) 19.3673 Tj --449 TJm -(the) 12.1743 Tj --448 TJm -(compressed) 47.0334 Tj --449 TJm -(\002le) 12.7322 Tj --449 TJm -(in) 7.7509 Tj --448 TJm -(chunks) 28.224 Tj --449 TJm -(of) 8.2988 Tj --448 TJm -(size) 15.4918 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -419.602 382.357 Td -/F124_0 9.9626 Tf -(BZ_MAX_UNUSED) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -501.778 382.357 Td -/F122_0 9.9626 Tf -(bytes) 21.031 Tj --449 TJm -(be-) 12.7222 Tj -72 370.402 Td -(fore) 16.0398 Tj --414 TJm -(decompressing) 59.7656 Tj --414 TJm -(it.) 8.0299 Tj --1605 TJm -(If) 6.6351 Tj --415 TJm -(the) 12.1743 Tj --414 TJm -(\002le) 12.7322 Tj --414 TJm -(contains) 33.2053 Tj --414 TJm -(more) 20.4731 Tj --414 TJm -(bytes) 21.031 Tj --415 TJm -(than) 17.1556 Tj --414 TJm -(strictly) 27.6761 Tj --414 TJm -(needed) 28.2141 Tj --414 TJm -(to) 7.7509 Tj --414 TJm -(reach) 21.569 Tj --414 TJm -(the) 12.1743 Tj --415 TJm -(logical) 27.1182 Tj --414 TJm -(end-of-stream,) 58.3709 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 358.446 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -134.749 358.446 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --298 TJm -(almost) 26.5703 Tj --299 TJm -(certainly) 34.8591 Tj --298 TJm -(read) 17.1456 Tj --299 TJm -(some) 21.031 Tj --298 TJm -(of) 8.2988 Tj --299 TJm -(the) 12.1743 Tj --298 TJm -(trailing) 28.782 Tj --299 TJm -(data) 16.5977 Tj --298 TJm -(before) 25.4445 Tj --298 TJm -(signalling) 39.3025 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -413.162 358.446 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_END) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -502.826 358.446 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --597 TJm -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --298 TJm -(col-) 15.4918 Tj -72 346.491 Td -(lect) 14.386 Tj --242 TJm -(the) 12.1743 Tj --242 TJm -(read) 17.1456 Tj --243 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --242 TJm -(unused) 28.224 Tj --242 TJm -(data) 16.5977 Tj --242 TJm -(once) 18.8094 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -208.759 346.491 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_END) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -300.835 346.491 Td -/F122_0 9.9626 Tf -(has) 13.2801 Tj --242 TJm -(appeared,) 38.4457 Tj --244 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -374.201 346.491 Td -/F124_0 9.9626 Tf -(BZ2_bzReadGetUnused) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -490.188 346.491 Td -/F122_0 9.9626 Tf -(immediately) 49.813 Tj -72 334.536 Td -(before) 25.4445 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -99.935 334.536 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -189.599 334.536 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 312.618 Td -(Possible) 33.2153 Tj --250 TJm -(assignments) 48.7072 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -169.144 312.618 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.987 312.618 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(20) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 21 24 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 456.986] cm -0 0 468 263.014 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 699.676 Td -(if) 11.9551 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(buf) 17.9327 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(len) 17.9327 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(0) 5.9776 Tj -90 687.721 Td -(BZ_SEQUENCE_ERROR) 101.6185 Tj -98.488 675.766 Td -(if) 11.9551 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(opened) 35.8654 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(BZ2_bzWriteOpen) 89.6634 Tj -90 663.811 Td -(BZ_IO_ERROR) 65.7532 Tj -98.488 651.856 Td -(if) 11.9551 Tj --426 TJm -(there) 29.8878 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(an) 11.9551 Tj --426 TJm -(error) 29.8878 Tj --426 TJm -(reading) 41.8429 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(file) 23.9102 Tj -90 639.9 Td -(BZ_UNEXPECTED_EOF) 101.6185 Tj -98.488 627.945 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(file) 23.9102 Tj --426 TJm -(ended) 29.8878 Tj --426 TJm -(before) 35.8654 Tj -98.488 615.99 Td -(the) 17.9327 Tj --426 TJm -(logical) 41.8429 Tj --426 TJm -(end-of-stream) 77.7083 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(detected) 47.8205 Tj -90 604.035 Td -(BZ_DATA_ERROR) 77.7083 Tj -98.488 592.08 Td -(if) 11.9551 Tj --426 TJm -(a) 5.9776 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(integrity) 53.798 Tj --426 TJm -(error) 29.8878 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(detected) 47.8205 Tj --426 TJm -(in) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(stream) 35.8654 Tj -90 580.124 Td -(BZ_DATA_ERROR_MAGIC) 113.5736 Tj -98.488 568.169 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(stream) 35.8654 Tj --426 TJm -(does) 23.9102 Tj --426 TJm -(not) 17.9327 Tj --426 TJm -(begin) 29.8878 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(requisite) 53.798 Tj --426 TJm -(header) 35.8654 Tj --426 TJm -(bytes) 29.8878 Tj -98.488 556.214 Td -(\(ie,) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(not) 17.9327 Tj --426 TJm -(a) 5.9776 Tj --426 TJm -(bzip2) 29.8878 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(file\).) 35.8654 Tj --852 TJm -(This) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(really) 35.8654 Tj -98.488 544.259 Td -(a) 5.9776 Tj --426 TJm -(special) 41.8429 Tj --426 TJm -(case) 23.9102 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(BZ_DATA_ERROR.) 83.6858 Tj -90 532.304 Td -(BZ_MEM_ERROR) 71.7307 Tj -98.488 520.349 Td -(if) 11.9551 Tj --426 TJm -(insufficient) 71.7307 Tj --426 TJm -(memory) 35.8654 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(available) 53.798 Tj -90 508.393 Td -(BZ_STREAM_END) 77.7083 Tj -98.488 496.438 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(logical) 41.8429 Tj --426 TJm -(end) 17.9327 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(stream) 35.8654 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(detected.) 53.798 Tj -90 484.483 Td -(BZ_OK) 29.8878 Tj -98.488 472.528 Td -(otherwise.) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 435.068 Td -/F122_0 9.9626 Tf -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 374.197] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 425.604 Td -/F124_0 9.9626 Tf -(number) 35.8654 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(bytes) 29.8878 Tj --426 TJm -(read) 23.9102 Tj -98.488 413.649 Td -(if) 11.9551 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(BZ_STREAM_END) 77.7083 Tj -90 401.694 Td -(undefined) 53.798 Tj -98.488 389.739 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 352.279 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 267.497] cm -0 0 468 83.686 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 342.815 Td -/F124_0 9.9626 Tf -(collect) 41.8429 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(buf,) 23.9102 Tj --426 TJm -(then) 23.9102 Tj --426 TJm -(BZ2_bzRead) 59.7756 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(BZ2_bzReadClose) 89.6634 Tj -98.488 330.859 Td -(if) 11.9551 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj -90 318.904 Td -(collect) 41.8429 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(buf,) 23.9102 Tj --426 TJm -(then) 23.9102 Tj --426 TJm -(BZ2_bzReadClose) 89.6634 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(BZ2_bzReadGetUnused) 113.5736 Tj -98.488 306.949 Td -(if) 11.9551 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(BZ_SEQUENCE_END) 89.6634 Tj -90 294.994 Td -(BZ2_bzReadClose) 89.6634 Tj -98.488 283.039 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 236.876 Td -/F116_0 17.2154 Tf -(3.4.3.) 43.0729 Tj --278 TJm -(BZ2_bzReadGetUn) 154.9558 Tj -10 TJm -(used) 40.1807 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 197.948] cm -0 0 468 35.866 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 225.445 Td -/F124_0 9.9626 Tf -(void) 23.9102 Tj --426 TJm -(BZ2_bzReadGetUnused\() 119.5512 Tj --426 TJm -(int) 17.9327 Tj -259.883 223.702 Td -(*) 5.9776 Tj -270.104 225.445 Td -(bzerror,) 47.8205 Tj --426 TJm -(BZFILE) 35.8654 Tj -362.278 223.702 Td -(*) 5.9776 Tj -368.256 225.445 Td -(b,) 11.9551 Tj -200.343 213.49 Td -(void) 23.9102 Tj -224.254 211.747 Td -(**) 11.9551 Tj -240.453 213.49 Td -(unused,) 41.8429 Tj --426 TJm -(int) 17.9327 Tj -304.473 211.747 Td -(*) 5.9776 Tj -314.694 213.49 Td -(nUnused) 41.8429 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 176.031 Td -/F122_0 9.9626 Tf -(Returns) 30.9936 Tj --435 TJm -(data) 16.5977 Tj --435 TJm -(which) 24.3486 Tj --435 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --435 TJm -(read) 17.1456 Tj --435 TJm -(from) 19.3673 Tj --435 TJm -(the) 12.1743 Tj --435 TJm -(compressed) 47.0334 Tj --435 TJm -(\002le) 12.7322 Tj --435 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --435 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --435 TJm -(not) 12.7322 Tj --435 TJm -(needed) 28.2141 Tj --435 TJm -(to) 7.7509 Tj --435 TJm -(get) 12.1743 Tj --435 TJm -(to) 7.7509 Tj --435 TJm -(the) 12.1743 Tj --435 TJm -(logical) 27.1182 Tj --435 TJm -(end-of-stream.) 58.3709 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 162.332 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -77.978 164.075 Td -(unused) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -117.2 164.075 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --337 TJm -(set) 11.0684 Tj --337 TJm -(to) 7.7509 Tj --337 TJm -(the) 12.1743 Tj --337 TJm -(address) 29.8778 Tj --337 TJm -(of) 8.2988 Tj --336 TJm -(the) 12.1743 Tj --337 TJm -(data,) 19.0883 Tj --359 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -269.089 162.332 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -275.067 164.075 Td -(nUnused) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -320.267 164.075 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --337 TJm -(the) 12.1743 Tj --337 TJm -(number) 30.4357 Tj --337 TJm -(of) 8.2988 Tj --337 TJm -(bytes.) 23.5217 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -427.247 162.332 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -433.225 164.075 Td -(nUnused) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -478.425 164.075 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --337 TJm -(be) 9.4047 Tj --337 TJm -(set) 11.0684 Tj --337 TJm -(to) 7.7509 Tj --337 TJm -(a) 4.4234 Tj -72 152.12 Td -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj --250 TJm -(between) 33.1954 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -131.506 152.12 Td -/F124_0 9.9626 Tf -(0) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -139.975 152.12 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -156.851 152.12 Td -/F124_0 9.9626 Tf -(BZ_MAX_UNUSED) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -237.05 152.12 Td -/F122_0 9.9626 Tf -(inclusi) 26.5703 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e.) 6.914 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 130.202 Td -(This) 17.7135 Tj --882 TJm -(function) 33.2053 Tj --883 TJm -(may) 17.1556 Tj --882 TJm -(only) 17.7135 Tj --883 TJm -(be) 9.4047 Tj --882 TJm -(called) 23.7907 Tj --883 TJm -(once) 18.8094 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -271.332 130.202 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -339.9 130.202 Td -/F122_0 9.9626 Tf -(has) 13.2801 Tj --882 TJm -(signalled) 35.9749 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -406.737 130.202 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -493.231 130.202 Td -/F122_0 9.9626 Tf -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --882 TJm -(before) 25.4445 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 118.247 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -161.664 118.247 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 96.329 Td -(Possible) 33.2153 Tj --250 TJm -(assignments) 48.7072 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -169.144 96.329 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.987 96.329 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.852 Td -(21) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 22 25 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 612.403] cm -0 0 468 107.597 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 699.676 Td -(if) 11.9551 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -98.488 687.721 Td -(or) 11.9551 Tj --426 TJm -(unused) 35.8654 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(nUnused) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -90 675.766 Td -(BZ_SEQUENCE_ERROR) 101.6185 Tj -98.488 663.811 Td -(if) 11.9551 Tj --426 TJm -(BZ_STREAM_END) 77.7083 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(not) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(signalled) 53.798 Tj -98.488 651.856 Td -(or) 11.9551 Tj --426 TJm -(if) 11.9551 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(opened) 35.8654 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(BZ2_bzWriteOpen) 89.6634 Tj -90 639.9 Td -(BZ_OK) 29.8878 Tj -98.488 627.945 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 590.486 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 565.48] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 581.021 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 534.858 Td -/F116_0 17.2154 Tf -(3.4.4.) 43.0729 Tj --278 TJm -(BZ2_bzReadClose) 150.1871 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 507.886] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 523.428 Td -/F124_0 9.9626 Tf -(void) 23.9102 Tj --426 TJm -(BZ2_bzReadClose) 89.6634 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(int) 17.9327 Tj -244.46 521.684 Td -(*) 5.9776 Tj -250.438 523.428 Td -(bzerror,) 47.8205 Tj --426 TJm -(BZFILE) 35.8654 Tj -342.612 521.684 Td -(*) 5.9776 Tj -348.59 523.428 Td -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 485.968 Td -/F122_0 9.9626 Tf -(Releases) 34.8591 Tj --430 TJm -(all) 9.9626 Tj --429 TJm -(memory) 33.2053 Tj --430 TJm -(pertaining) 40.3983 Tj --429 TJm -(to) 7.7509 Tj --430 TJm -(the) 12.1743 Tj --429 TJm -(compressed) 47.0334 Tj --430 TJm -(\002le) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -304.352 485.968 Td -/F124_0 9.9626 Tf -(b) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -310.33 485.968 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -321.276 485.968 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -415.22 485.968 Td -/F122_0 9.9626 Tf -(does) 18.2614 Tj --430 TJm -(not) 12.7322 Tj --429 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -473.438 485.968 Td -/F124_0 9.9626 Tf -(fclose) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -513.583 485.968 Td -/F122_0 9.9626 Tf -(on) 9.9626 Tj --430 TJm -(the) 12.1743 Tj -72 474.013 Td -(underlying) 43.1679 Tj --264 TJm -(\002le) 12.7322 Tj --264 TJm -(handle,) 29.0509 Tj --267 TJm -(so) 8.8568 Tj --264 TJm -(you) 14.9439 Tj --264 TJm -(should) 26.5703 Tj --264 TJm -(do) 9.9626 Tj --264 TJm -(that) 14.9439 Tj --264 TJm -(yourself) 32.6474 Tj --264 TJm -(if) 6.0871 Tj --263 TJm -(appropriate.) 47.8603 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -348.653 474.013 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -440.946 474.013 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --264 TJm -(be) 9.4047 Tj --264 TJm -(called) 23.7907 Tj --264 TJm -(to) 7.7509 Tj --264 TJm -(clean) 21.0211 Tj -72 462.058 Td -(up) 9.9626 Tj --250 TJm -(after) 18.2515 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(situations.) 40.6873 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 440.14 Td -(Possible) 33.2153 Tj --250 TJm -(assignments) 48.7072 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -169.144 440.14 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.987 440.14 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 377.211] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 428.618 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -98.488 416.663 Td -(if) 11.9551 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(opened) 35.8654 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(BZ2_bzOpenWrite) 89.6634 Tj -90 404.708 Td -(BZ_OK) 29.8878 Tj -98.488 392.753 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 355.293 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 330.287] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 345.829 Td -/F124_0 9.9626 Tf -(none) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 299.666 Td -/F116_0 17.2154 Tf -(3.4.5.) 43.0729 Tj --278 TJm -(BZ2_bzWriteOpen) 148.259 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 247.286] cm -0 0 468 47.821 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 286.738 Td -/F124_0 9.9626 Tf -(BZFILE) 35.8654 Tj -130.109 284.994 Td -(*) 5.9776 Tj -136.087 286.738 Td -(BZ2_bzWriteOpen\() 95.641 Tj --426 TJm -(int) 17.9327 Tj -258.149 284.994 Td -(*) 5.9776 Tj -264.127 286.738 Td -(bzerror,) 47.8205 Tj --426 TJm -(FILE) 23.9102 Tj -344.346 284.994 Td -(*) 5.9776 Tj -350.323 286.738 Td -(f,) 11.9551 Tj -196.099 274.783 Td -(int) 17.9327 Tj --426 TJm -(blockSize100k,) 83.6858 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(verbosity,) 59.7756 Tj -196.099 262.827 Td -(int) 17.9327 Tj --426 TJm -(workFactor) 59.7756 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 225.368 Td -/F122_0 9.9626 Tf -(Prepare) 30.4258 Tj --268 TJm -(to) 7.7509 Tj --269 TJm -(write) 20.4731 Tj --268 TJm -(compressed) 47.0334 Tj --269 TJm -(data) 16.5977 Tj --268 TJm -(to) 7.7509 Tj --269 TJm -(\002le) 12.7322 Tj --268 TJm -(handle) 26.5603 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -262.72 225.368 Td -/F124_0 9.9626 Tf -(f) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -268.698 225.368 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -274.829 225.368 Td -/F124_0 9.9626 Tf -(f) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -283.481 225.368 Td -/F122_0 9.9626 Tf -(should) 26.5703 Tj --268 TJm -(refer) 18.7994 Tj --269 TJm -(to) 7.7509 Tj --268 TJm -(a) 4.4234 Tj --269 TJm -(\002le) 12.7322 Tj --268 TJm -(which) 24.3486 Tj --269 TJm -(has) 13.2801 Tj --268 TJm -(been) 18.8094 Tj --269 TJm -(opened) 28.772 Tj --268 TJm -(for) 11.6164 Tj --269 TJm -(writing,) 31.2726 Tj --273 TJm -(and) 14.386 Tj --268 TJm -(for) 11.6164 Tj -72 213.413 Td -(which) 24.3486 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(indicator) 35.417 Tj --250 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -176.577 213.413 Td -/F124_0 9.9626 Tf -(ferror\(f\)) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -230.375 213.413 Td -/F122_0 9.9626 Tf -(\)is) 9.9626 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(set.) 13.5591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 191.495 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --223 TJm -(the) 12.1743 Tj --224 TJm -(meaning) 34.3112 Tj --223 TJm -(of) 8.2988 Tj --224 TJm -(parameters) 43.7059 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -195.306 191.495 Td -/F124_0 9.9626 Tf -(blockSize100k) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -273.015 191.495 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -277.784 191.495 Td -/F124_0 9.9626 Tf -(verbosity) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -333.808 191.495 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -350.42 191.495 Td -/F124_0 9.9626 Tf -(workFactor) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -410.196 191.495 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --229 TJm -(see) 12.7222 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -429.913 191.495 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -537.509 191.495 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 169.577 Td -(All) 12.7322 Tj --382 TJm -(required) 33.1954 Tj --382 TJm -(memory) 33.2053 Tj --382 TJm -(is) 6.6451 Tj --382 TJm -(allocated) 35.965 Tj --383 TJm -(at) 7.193 Tj --382 TJm -(this) 14.396 Tj --382 TJm -(stage,) 22.9638 Tj --415 TJm -(so) 8.8568 Tj --382 TJm -(if) 6.0871 Tj --382 TJm -(the) 12.1743 Tj --382 TJm -(call) 14.386 Tj --382 TJm -(completes) 40.3983 Tj --382 TJm -(successfully) 48.6972 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -424.691 169.577 Td -/F124_0 9.9626 Tf -(BZ_MEM_ERROR) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -500.228 169.577 Td -/F122_0 9.9626 Tf -(cannot) 26.5603 Tj --382 TJm -(be) 9.4047 Tj -72 157.622 Td -(signalled) 35.9749 Tj --250 TJm -(by) 9.9626 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(subsequent) 44.2738 Tj --250 TJm -(call) 14.386 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -203.715 157.622 Td -/F124_0 9.9626 Tf -(BZ2_bzWrite) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -269.468 157.622 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 135.704 Td -(Possible) 33.2153 Tj --250 TJm -(assignments) 48.7072 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -169.144 135.704 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.987 135.704 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.852 Td -(22) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 23 26 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 576.538] cm -0 0 468 143.462 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(BZ_CONFIG_ERROR) 89.6634 Tj -98.488 699.676 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(library) 41.8429 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(mis-compiled) 71.7307 Tj -90 687.721 Td -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 675.766 Td -(if) 11.9551 Tj --426 TJm -(f) 5.9776 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -98.488 663.811 Td -(or) 11.9551 Tj --426 TJm -(blockSize100k) 77.7083 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(1) 5.9776 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(blockSize100k) 77.7083 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(9) 5.9776 Tj -90 651.856 Td -(BZ_IO_ERROR) 65.7532 Tj -98.488 639.9 Td -(if) 11.9551 Tj --426 TJm -(ferror\(f\)) 53.798 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(nonzero) 41.8429 Tj -90 627.945 Td -(BZ_MEM_ERROR) 71.7307 Tj -98.488 615.99 Td -(if) 11.9551 Tj --426 TJm -(insufficient) 71.7307 Tj --426 TJm -(memory) 35.8654 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(available) 53.798 Tj -90 604.035 Td -(BZ_OK) 29.8878 Tj -98.488 592.08 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 554.62 Td -/F122_0 9.9626 Tf -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 493.749] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 545.156 Td -/F124_0 9.9626 Tf -(Pointer) 41.8429 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(an) 11.9551 Tj --426 TJm -(abstract) 47.8205 Tj --426 TJm -(BZFILE) 35.8654 Tj -98.488 533.201 Td -(if) 11.9551 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj -90 521.245 Td -(NULL) 23.9102 Tj -98.488 509.29 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 471.831 Td -/F122_0 9.9626 Tf -(Allo) 17.7135 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able) 16.5977 Tj --250 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(actions:) 30.9936 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 387.049] cm -0 0 468 83.686 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 462.366 Td -/F124_0 9.9626 Tf -(BZ2_bzWrite) 65.7532 Tj -98.488 450.411 Td -(if) 11.9551 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj -98.488 438.456 Td -(\(you) 23.9102 Tj --426 TJm -(could) 29.8878 Tj --426 TJm -(go) 11.9551 Tj --426 TJm -(directly) 47.8205 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(BZ2_bzWriteClose,) 101.6185 Tj --426 TJm -(but) 17.9327 Tj --426 TJm -(this) 23.9102 Tj --426 TJm -(would) 29.8878 Tj --426 TJm -(be) 11.9551 Tj --426 TJm -(pretty) 35.8654 Tj -485.506 434.212 Td -/F548_0 9.9626 Tf -( ) 9.9626 Tj -493.808 434.212 Td -/F230_0 9.9626 Tf -(-) 2.7676 Tj -90 426.501 Td -/F124_0 9.9626 Tf -(pointless\)) 59.7756 Tj -90 414.546 Td -(BZ2_bzWriteClose) 95.641 Tj -98.488 402.59 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 356.428 Td -/F116_0 17.2154 Tf -(3.4.6.) 43.0729 Tj --278 TJm -(BZ2_bzWrite) 104.2565 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 329.455] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 344.997 Td -/F124_0 9.9626 Tf -(void) 23.9102 Tj --426 TJm -(BZ2_bzWrite) 65.7532 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(int) 17.9327 Tj -220.55 343.254 Td -(*) 5.9776 Tj -226.528 344.997 Td -(bzerror,) 47.8205 Tj --426 TJm -(BZFILE) 35.8654 Tj -318.702 343.254 Td -(*) 5.9776 Tj -324.679 344.997 Td -(b,) 11.9551 Tj --426 TJm -(void) 23.9102 Tj -369.033 343.254 Td -(*) 5.9776 Tj -375.01 344.997 Td -(buf,) 23.9102 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(len) 17.9327 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 307.537 Td -/F122_0 9.9626 Tf -(Absorbs) 33.2053 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -107.696 307.537 Td -/F124_0 9.9626 Tf -(len) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -128.119 307.537 Td -/F122_0 9.9626 Tf -(bytes) 21.031 Tj --250 TJm -(from) 19.3673 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -214.544 307.537 Td -/F124_0 9.9626 Tf -(buf) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -232.477 307.537 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(entually) 32.0995 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(written) 28.224 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(\002le.) 15.2229 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 285.62 Td -(Possible) 33.2153 Tj --250 TJm -(assignments) 48.7072 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -169.144 285.62 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.987 285.62 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 174.87] cm -0 0 468 107.597 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 274.098 Td -/F124_0 9.9626 Tf -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 262.143 Td -(if) 11.9551 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(buf) 17.9327 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(len) 17.9327 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(0) 5.9776 Tj -90 250.188 Td -(BZ_SEQUENCE_ERROR) 101.6185 Tj -98.488 238.232 Td -(if) 11.9551 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(opened) 35.8654 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(BZ2_bzReadOpen) 83.6858 Tj -90 226.277 Td -(BZ_IO_ERROR) 65.7532 Tj -98.488 214.322 Td -(if) 11.9551 Tj --426 TJm -(there) 29.8878 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(an) 11.9551 Tj --426 TJm -(error) 29.8878 Tj --426 TJm -(writing) 41.8429 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(file.) 29.8878 Tj -90 202.367 Td -(BZ_OK) 29.8878 Tj -98.488 190.412 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 144.249 Td -/F116_0 17.2154 Tf -(3.4.7.) 43.0729 Tj --278 TJm -(BZ2_bzWriteClose) 151.134 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -/F122_0 9.9626 Tf -(23) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 24 27 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 576.538] cm -0 0 468 143.462 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(void) 23.9102 Tj --426 TJm -(BZ2_bzWriteClose\() 101.6185 Tj --426 TJm -(int) 17.9327 Tj -246.194 709.888 Td -(*) 5.9776 Tj -252.172 711.631 Td -(bzerror,) 47.8205 Tj --426 TJm -(BZFILE) 35.8654 Tj -340.102 709.888 Td -(*) 5.9776 Tj -350.323 711.631 Td -(f,) 11.9551 Tj -187.611 699.676 Td -(int) 17.9327 Tj --426 TJm -(abandon,) 47.8205 Tj -187.611 687.721 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj -257.609 685.978 Td -(*) 5.9776 Tj -267.83 687.721 Td -(nbytes_in,) 59.7756 Tj -187.611 675.766 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj -257.609 674.022 Td -(*) 5.9776 Tj -267.83 675.766 Td -(nbytes_out) 59.7756 Tj --426 TJm -(\);) 11.9551 Tj -90 651.856 Td -(void) 23.9102 Tj --426 TJm -(BZ2_bzWriteClose64\() 113.5736 Tj --426 TJm -(int) 17.9327 Tj -258.149 650.112 Td -(*) 5.9776 Tj -264.127 651.856 Td -(bzerror,) 47.8205 Tj --426 TJm -(BZFILE) 35.8654 Tj -352.057 650.112 Td -(*) 5.9776 Tj -362.278 651.856 Td -(f,) 11.9551 Tj -196.099 639.9 Td -(int) 17.9327 Tj --426 TJm -(abandon,) 47.8205 Tj -196.099 627.945 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj -266.097 626.202 Td -(*) 5.9776 Tj -276.318 627.945 Td -(nbytes_in_lo32,) 89.6634 Tj -196.099 615.99 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj -266.097 614.247 Td -(*) 5.9776 Tj -276.318 615.99 Td -(nbytes_in_hi32,) 89.6634 Tj -196.099 604.035 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj -266.097 602.291 Td -(*) 5.9776 Tj -276.318 604.035 Td -(nbytes_out_lo32,) 95.641 Tj -196.099 592.08 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj -266.097 590.336 Td -(*) 5.9776 Tj -276.318 592.08 Td -(nbytes_out_hi32) 89.6634 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 554.62 Td -/F122_0 9.9626 Tf -(Compresses) 48.1492 Tj --403 TJm -(and) 14.386 Tj --402 TJm -(\003ushes) 27.6761 Tj --403 TJm -(to) 7.7509 Tj --403 TJm -(the) 12.1743 Tj --402 TJm -(compressed) 47.0334 Tj --403 TJm -(\002le) 12.7322 Tj --402 TJm -(all) 9.9626 Tj --403 TJm -(data) 16.5977 Tj --403 TJm -(so) 8.8568 Tj --402 TJm -(f) 3.3175 Tj -10 TJm -(ar) 7.7409 Tj --403 TJm -(supplied) 33.7633 Tj --403 TJm -(by) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -384.152 554.62 Td -/F124_0 9.9626 Tf -(BZ2_bzWrite) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -449.906 554.62 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --768 TJm -(The) 15.4918 Tj --403 TJm -(logical) 27.1182 Tj --402 TJm -(end-of-) 29.3199 Tj -72 542.665 Td -(stream) 26.5603 Tj --352 TJm -(mark) 20.4731 Tj -10 TJm -(ers) 11.6164 Tj --352 TJm -(are) 12.1643 Tj --353 TJm -(also) 16.0497 Tj --352 TJm -(written,) 30.7147 Tj --378 TJm -(so) 8.8568 Tj --352 TJm -(subsequent) 44.2738 Tj --352 TJm -(calls) 18.2614 Tj --352 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -300.456 542.665 Td -/F124_0 9.9626 Tf -(BZ2_bzWrite) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -369.718 542.665 Td -/F122_0 9.9626 Tf -(are) 12.1643 Tj --352 TJm -(ille) 12.7322 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(al.) 9.6836 Tj --1234 TJm -(All) 12.7322 Tj --352 TJm -(memory) 33.2053 Tj --352 TJm -(associated) 40.9463 Tj --352 TJm -(with) 17.7135 Tj -72 530.71 Td -(the) 12.1743 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(\002le) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -151.411 530.71 Td -/F124_0 9.9626 Tf -(b) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -159.88 530.71 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(released.) 35.1281 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -207.231 530.71 Td -/F124_0 9.9626 Tf -(fflush) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -245.587 530.71 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(called) 23.7907 Tj --250 TJm -(on) 9.9626 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(\002le,) 15.2229 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(not) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -422.771 530.71 Td -/F124_0 9.9626 Tf -(fclose) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -458.636 530.71 Td -/F122_0 9.9626 Tf -(') 3.3175 Tj -50 TJm -(d.) 7.472 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 508.792 Td -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.574 508.792 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteClose) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -180.155 508.792 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --295 TJm -(called) 23.7907 Tj --295 TJm -(to) 7.7509 Tj --295 TJm -(clean) 21.0211 Tj --295 TJm -(up) 9.9626 Tj --295 TJm -(after) 18.2515 Tj --295 TJm -(an) 9.4047 Tj --295 TJm -(error) 19.3573 Tj -40 TJm -(,) 2.4907 Tj --306 TJm -(the) 12.1743 Tj --295 TJm -(only) 17.7135 Tj --295 TJm -(action) 24.3486 Tj --295 TJm -(is) 6.6451 Tj --295 TJm -(to) 7.7509 Tj --295 TJm -(release) 27.6562 Tj --295 TJm -(the) 12.1743 Tj --295 TJm -(memory) 33.2053 Tj -65 TJm -(.) 2.4907 Tj --891 TJm -(The) 15.4918 Tj --295 TJm -(library) 26.5603 Tj -72 496.837 Td -(records) 29.3199 Tj --289 TJm -(the) 12.1743 Tj --289 TJm -(error) 19.3573 Tj --289 TJm -(codes) 22.6848 Tj --289 TJm -(issued) 24.9065 Tj --289 TJm -(by) 9.9626 Tj --289 TJm -(pre) 12.7222 Tj -25 TJm -(vious) 21.589 Tj --289 TJm -(calls,) 20.7521 Tj --299 TJm -(so) 8.8568 Tj --289 TJm -(this) 14.396 Tj --289 TJm -(situation) 34.3212 Tj --289 TJm -(will) 15.5018 Tj --289 TJm -(be) 9.4047 Tj --289 TJm -(detected) 33.1954 Tj --289 TJm -(automatically) 54.2364 Tj -65 TJm -(.) 2.4907 Tj --427 TJm -(There) 23.2328 Tj --289 TJm -(is) 6.6451 Tj --289 TJm -(no) 9.9626 Tj --289 TJm -(attempt) 29.8878 Tj -72 484.882 Td -(to) 7.7509 Tj --263 TJm -(complete) 36.5229 Tj --262 TJm -(the) 12.1743 Tj --263 TJm -(compression) 50.3609 Tj --263 TJm -(operation,) 40.1194 Tj --265 TJm -(nor) 13.2801 Tj --263 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -258.308 484.882 Td -/F124_0 9.9626 Tf -(fflush) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -296.79 484.882 Td -/F122_0 9.9626 Tf -(the) 12.1743 Tj --263 TJm -(compressed) 47.0334 Tj --262 TJm -(\002le.) 15.2229 Tj --696 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --263 TJm -(can) 13.8281 Tj --263 TJm -(force) 20.4632 Tj --262 TJm -(this) 14.396 Tj --263 TJm -(beha) 18.8094 Tj -20 TJm -(viour) 21.031 Tj --263 TJm -(to) 7.7509 Tj --262 TJm -(happen) 28.772 Tj -72 472.926 Td -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(case) 17.1456 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(no) 9.9626 Tj --250 TJm -(error) 19.3573 Tj -40 TJm -(,) 2.4907 Tj --250 TJm -(by) 9.9626 Tj --250 TJm -(passing) 29.8878 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(nonzero) 32.0895 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alue) 16.5977 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -305.015 472.926 Td -/F124_0 9.9626 Tf -(abandon) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -346.858 472.926 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 451.009 Td -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -80.597 451.009 Td -/F124_0 9.9626 Tf -(nbytes_in) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -136.358 451.009 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --197 TJm -(non-null,) 36.2539 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -183.287 449.265 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -189.265 451.009 Td -(nbytes_in) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -245.025 451.009 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --197 TJm -(be) 9.4047 Tj --197 TJm -(set) 11.0684 Tj --197 TJm -(to) 7.7509 Tj --197 TJm -(be) 9.4047 Tj --197 TJm -(the) 12.1743 Tj --197 TJm -(total) 17.7135 Tj --197 TJm -(v) 4.9813 Tj -20 TJm -(olume) 24.9065 Tj --197 TJm -(of) 8.2988 Tj --197 TJm -(uncompressed) 56.996 Tj --197 TJm -(data) 16.5977 Tj --197 TJm -(handled.) 34.0322 Tj --584 TJm -(Similarly) 37.0908 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 439.053 Td -/F124_0 9.9626 Tf -(nbytes_out) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -134.716 439.053 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --295 TJm -(be) 9.4047 Tj --295 TJm -(set) 11.0684 Tj --295 TJm -(to) 7.7509 Tj --295 TJm -(the) 12.1743 Tj --295 TJm -(total) 17.7135 Tj --295 TJm -(v) 4.9813 Tj -20 TJm -(olume) 24.9065 Tj --295 TJm -(of) 8.2988 Tj --296 TJm -(compressed) 47.0334 Tj --295 TJm -(data) 16.5977 Tj --295 TJm -(written.) 30.7147 Tj --890 TJm -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --295 TJm -(compatibility) 53.1405 Tj --295 TJm -(with) 17.7135 Tj --295 TJm -(older) 20.4731 Tj --295 TJm -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj --296 TJm -(of) 8.2988 Tj -72 427.098 Td -(the) 12.1743 Tj --283 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -118.294 427.098 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteClose) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -216.753 427.098 Td -/F122_0 9.9626 Tf -(only) 17.7135 Tj --283 TJm -(yields) 23.8007 Tj --283 TJm -(the) 12.1743 Tj --282 TJm -(lo) 7.7509 Tj -25 TJm -(wer) 14.9339 Tj --283 TJm -(32) 9.9626 Tj --283 TJm -(bits) 14.396 Tj --283 TJm -(of) 8.2988 Tj --283 TJm -(these) 20.4731 Tj --282 TJm -(counts.) 28.503 Tj --817 TJm -(Use) 15.4918 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -423.499 427.098 Td -/F124_0 9.9626 Tf -(BZ2_bzWriteClose64) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -533.913 427.098 Td -/F122_0 9.9626 Tf -(if) 6.0871 Tj -72 415.143 Td -(you) 14.9439 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(full) 13.8381 Tj --250 TJm -(64) 9.9626 Tj --250 TJm -(bit) 10.5205 Tj --250 TJm -(counts.) 28.503 Tj --620 TJm -(These) 23.7907 Tj --250 TJm -(tw) 9.9626 Tj -10 TJm -(o) 4.9813 Tj --250 TJm -(functions) 37.0808 Tj --250 TJm -(are) 12.1643 Tj --250 TJm -(otherwise) 38.7346 Tj --250 TJm -(absolutely) 40.9562 Tj --250 TJm -(identical.) 36.8018 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 393.225 Td -(Possible) 33.2153 Tj --250 TJm -(assignments) 48.7072 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -169.144 393.225 Td -/F124_0 9.9626 Tf -(bzerror) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.987 393.225 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 306.386] cm -0 0 468 83.686 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 381.704 Td -/F124_0 9.9626 Tf -(BZ_SEQUENCE_ERROR) 101.6185 Tj -98.488 369.749 Td -(if) 11.9551 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(opened) 35.8654 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(BZ2_bzReadOpen) 83.6858 Tj -90 357.793 Td -(BZ_IO_ERROR) 65.7532 Tj -98.488 345.838 Td -(if) 11.9551 Tj --426 TJm -(there) 29.8878 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(an) 11.9551 Tj --426 TJm -(error) 29.8878 Tj --426 TJm -(writing) 41.8429 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(file) 23.9102 Tj -90 333.883 Td -(BZ_OK) 29.8878 Tj -98.488 321.928 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 275.765 Td -/F116_0 17.2154 Tf -(3.4.8.) 43.0729 Tj --278 TJm -(Handling) 73.6475 Tj --278 TJm -(embed) 55.4852 Tj -10 TJm -(ded) 30.609 Tj --278 TJm -(compressed) 101.4159 Tj --278 TJm -(data) 35.3949 Tj --278 TJm -(streams) 66.0211 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 253.847 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --203 TJm -(high-le) 28.224 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --203 TJm -(library) 26.5603 Tj --203 TJm -(f) 3.3175 Tj -10 TJm -(acilitates) 35.417 Tj --203 TJm -(use) 13.2801 Tj --203 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -226.404 253.847 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -258.316 253.847 Td -/F122_0 9.9626 Tf -(data) 16.5977 Tj --203 TJm -(streams) 30.4357 Tj --203 TJm -(which) 24.3486 Tj --203 TJm -(form) 19.3673 Tj --203 TJm -(some) 21.031 Tj --203 TJm -(part) 15.4918 Tj --203 TJm -(of) 8.2988 Tj --203 TJm -(a) 4.4234 Tj --204 TJm -(surrounding,) 50.6399 Tj --212 TJm -(lar) 10.5105 Tj -18 TJm -(ger) 12.7222 Tj --203 TJm -(data) 16.5977 Tj --203 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 221.967 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --264 TJm -(writing,) 31.2726 Tj --267 TJm -(the) 12.1743 Tj --264 TJm -(library) 26.5603 Tj --264 TJm -(tak) 12.1743 Tj -10 TJm -(es) 8.2988 Tj --264 TJm -(an) 9.4047 Tj --264 TJm -(open) 19.3673 Tj --264 TJm -(\002le) 12.7322 Tj --264 TJm -(handle,) 29.0509 Tj --267 TJm -(writes) 24.3486 Tj --264 TJm -(compressed) 47.0334 Tj --264 TJm -(data) 16.5977 Tj --264 TJm -(to) 7.7509 Tj --264 TJm -(it,) 8.0299 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -397.758 221.967 Td -/F124_0 9.9626 Tf -(fflush) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -433.624 221.967 Td -/F122_0 9.9626 Tf -(es) 8.2988 Tj --264 TJm -(it) 5.5392 Tj --264 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --264 TJm -(does) 18.2614 Tj --264 TJm -(not) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -504.135 221.967 Td -/F124_0 9.9626 Tf -(fclose) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 210.012 Td -/F122_0 9.9626 Tf -(it.) 8.0299 Tj --675 TJm -(The) 15.4918 Tj --259 TJm -(calling) 27.1182 Tj --260 TJm -(a) 4.4234 Tj -1 TJm -(pp) 9.9626 Tj --1 TJm -(l) 2.7696 Tj -1 TJm -(ication) 27.1182 Tj --260 TJm -(can) 13.8281 Tj --259 TJm -(write) 20.4731 Tj --259 TJm -(its) 9.4147 Tj --259 TJm -(o) 4.9813 Tj -25 TJm -(wn) 12.1743 Tj --259 TJm -(data) 16.5977 Tj --260 TJm -(before) 25.4445 Tj --259 TJm -(and) 14.386 Tj --259 TJm -(after) 18.2515 Tj --259 TJm -(the) 12.1743 Tj --259 TJm -(compressed) 47.0334 Tj --260 TJm -(dat) 12.1743 Tj -1 TJm -(a) 4.4234 Tj --260 TJm -(stream,) 29.0509 Tj --261 TJm -(using) 21.589 Tj --259 TJm -(that) 14.9439 Tj --260 TJm -(sam) 16.0497 Tj -1 TJm -(e) 4.4234 Tj --260 TJm -(\002le) 12.7322 Tj -81.963 198.056 Td -(handle.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 176.139 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(Reading) 33.2053 Tj --258 TJm -(is) 6.6451 Tj --259 TJm -(more) 20.4731 Tj --258 TJm -(comple) 29.3299 Tj -15 TJm -(x,) 7.472 Tj --261 TJm -(and) 14.386 Tj --258 TJm -(the) 12.1743 Tj --258 TJm -(f) 3.3175 Tj -10 TJm -(acilities) 30.9936 Tj --259 TJm -(are) 12.1643 Tj --258 TJm -(not) 12.7322 Tj --258 TJm -(as) 8.2988 Tj --259 TJm -(general) 29.3199 Tj --258 TJm -(as) 8.2988 Tj --259 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --258 TJm -(could) 22.1369 Tj --258 TJm -(be) 9.4047 Tj --259 TJm -(since) 20.4731 Tj --258 TJm -(generality) 39.8404 Tj --259 TJm -(is) 6.6451 Tj --258 TJm -(hard) 17.7035 Tj --258 TJm -(to) 7.7509 Tj --259 TJm -(reconcile) 36.5129 Tj -81.963 164.183 Td -(with) 17.7135 Tj --432 TJm -(ef) 7.7409 Tj -25 TJm -(\002cienc) 26.5603 Tj -15 TJm -(y) 4.9813 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -161.767 164.183 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -225.847 164.183 Td -/F122_0 9.9626 Tf -(reads) 21.0211 Tj --432 TJm -(from) 19.3673 Tj --432 TJm -(the) 12.1743 Tj --432 TJm -(compressed) 47.0334 Tj --432 TJm -(\002le) 12.7322 Tj --432 TJm -(in) 7.7509 Tj --432 TJm -(blocks) 26.0123 Tj --432 TJm -(of) 8.2988 Tj --432 TJm -(size) 15.4918 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -434.467 164.183 Td -/F124_0 9.9626 Tf -(BZ_MAX_UNUSED) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -516.479 164.183 Td -/F122_0 9.9626 Tf -(bytes,) 23.5217 Tj -81.963 152.228 Td -(and) 14.386 Tj --436 TJm -(in) 7.7509 Tj --435 TJm -(doing) 22.6948 Tj --436 TJm -(so) 8.8568 Tj --436 TJm -(probably) 35.417 Tj --436 TJm -(will) 15.5018 Tj --435 TJm -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(ershoot) 29.3299 Tj --436 TJm -(the) 12.1743 Tj --436 TJm -(logical) 27.1182 Tj --435 TJm -(end) 14.386 Tj --436 TJm -(of) 8.2988 Tj --436 TJm -(compressed) 47.0334 Tj --436 TJm -(s) 3.8755 Tj -1 TJm -(tream.) 25.1755 Tj --1735 TJm -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --436 TJm -(reco) 17.1456 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --435 TJm -(this) 14.396 Tj --436 TJm -(data) 16.5977 Tj --436 TJm -(once) 18.8094 Tj -81.963 140.273 Td -(decompression) 59.7656 Tj --290 TJm -(has) 13.2801 Tj --289 TJm -(ended,) 26.2813 Tj --300 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -207.321 140.273 Td -/F124_0 9.9626 Tf -(BZ2_bzReadGetUnused) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -323.782 140.273 Td -/F122_0 9.9626 Tf -(after) 18.2515 Tj --290 TJm -(the) 12.1743 Tj --289 TJm -(last) 13.8381 Tj --290 TJm -(call) 14.386 Tj --290 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -405.164 140.273 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -467.826 140.273 Td -/F122_0 9.9626 Tf -(\(the) 15.4918 Tj --290 TJm -(one) 14.386 Tj --290 TJm -(returning) 36.5229 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 128.318 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -159.671 128.318 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(before) 25.4445 Tj --250 TJm -(calling) 27.1182 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -238.047 128.318 Td -/F124_0 9.9626 Tf -(BZ2_bzReadClose) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -327.71 128.318 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.852 Td -(24) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 25 28 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(This) 17.7135 Tj --271 TJm -(mechanism) 45.3796 Tj --272 TJm -(mak) 17.1556 Tj -10 TJm -(es) 8.2988 Tj --271 TJm -(it) 5.5392 Tj --271 TJm -(easy) 17.7035 Tj --271 TJm -(to) 7.7509 Tj --272 TJm -(decompress) 47.0334 Tj --271 TJm -(multiple) 33.2153 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -293.313 710.037 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -325.903 710.037 Td -/F122_0 9.9626 Tf -(streams) 30.4357 Tj --271 TJm -(placed) 26.0024 Tj --272 TJm -(end-to-end.) 45.6486 Tj --374 TJm -(As) 11.0684 Tj --271 TJm -(the) 12.1743 Tj --271 TJm -(end) 14.386 Tj --271 TJm -(of) 8.2988 Tj --272 TJm -(one) 14.386 Tj --271 TJm -(stream,) 29.0509 Tj -72 698.082 Td -(when) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -96.195 698.082 Td -/F124_0 9.9626 Tf -(BZ2_bzRead) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -158.586 698.082 Td -/F122_0 9.9626 Tf -(returns) 27.6661 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.868 698.082 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -266.577 698.082 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --263 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -288.685 698.082 Td -/F124_0 9.9626 Tf -(BZ2_bzReadGetUnused) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -404.875 698.082 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --263 TJm -(coll) 14.9439 Tj -1 TJm -(ect) 11.6164 Tj --263 TJm -(the) 12.1743 Tj --263 TJm -(unused) 28.224 Tj --262 TJm -(data) 16.5977 Tj --263 TJm -(\(cop) 17.7035 Tj -10 TJm -(y) 4.9813 Tj --262 TJm -(it) 5.5392 Tj -72 686.127 Td -(into) 15.5018 Tj --265 TJm -(your) 18.2614 Tj --265 TJm -(o) 4.9813 Tj -25 TJm -(wn) 12.1743 Tj --265 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --265 TJm -(some) 21.031 Tj -25 TJm -(where\).) 30.1468 Tj --711 TJm -(That) 18.2614 Tj --265 TJm -(data) 16.5977 Tj --265 TJm -(forms) 23.2427 Tj --265 TJm -(the) 12.1743 Tj --265 TJm -(start) 17.1556 Tj --265 TJm -(of) 8.2988 Tj --265 TJm -(the) 12.1743 Tj --265 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --265 TJm -(compressed) 47.0334 Tj --265 TJm -(stream.) 29.0509 Tj --711 TJm -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --265 TJm -(start) 17.1556 Tj --265 TJm -(uncompressing) 60.3235 Tj -72 674.172 Td -(that) 14.9439 Tj --246 TJm -(ne) 9.4047 Tj -15 TJm -(xt) 7.7509 Tj --246 TJm -(stream,) 29.0509 Tj --247 TJm -(call) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -157.205 674.172 Td -/F124_0 9.9626 Tf -(BZ2_bzReadOpen) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -243.344 674.172 Td -/F122_0 9.9626 Tf -(ag) 9.4047 Tj -5 TJm -(ain,) 14.6649 Tj --247 TJm -(feeding) 29.8778 Tj --246 TJm -(in) 7.7509 Tj --246 TJm -(the) 12.1743 Tj --247 TJm -(unused) 28.224 Tj --246 TJm -(data) 16.5977 Tj --246 TJm -(via) 12.1743 Tj --246 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -405.967 674.172 Td -/F124_0 9.9626 Tf -(unused) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -444.286 674.172 Td -/F122_0 9.9626 Tf -(/) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -449.508 674.172 Td -/F124_0 9.9626 Tf -(nUnused) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -493.804 674.172 Td -/F122_0 9.9626 Tf -(parameters.) 46.1966 Tj -72 662.217 Td -(K) 7.193 Tj -25 TJm -(eep) 13.8281 Tj --263 TJm -(doing) 22.6948 Tj --263 TJm -(this) 14.396 Tj --264 TJm -(until) 18.2714 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -158.622 662.217 Td -/F124_0 9.9626 Tf -(BZ_STREAM_END) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -238.952 662.217 Td -/F122_0 9.9626 Tf -(return) 23.7907 Tj --263 TJm -(coincides) 37.6287 Tj --263 TJm -(with) 17.7135 Tj --264 TJm -(the) 12.1743 Tj --263 TJm -(ph) 9.9626 Tj -5 TJm -(ysical) 23.2427 Tj --263 TJm -(end) 14.386 Tj --263 TJm -(of) 8.2988 Tj --263 TJm -(\002le) 12.7322 Tj --263 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -423.124 662.217 Td -/F124_0 9.9626 Tf -(feof\(f\)) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -464.968 662.217 Td -/F122_0 9.9626 Tf -(\).) 5.8082 Tj --699 TJm -(In) 8.2988 Tj --263 TJm -(this) 14.396 Tj --263 TJm -(situation) 34.3212 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 650.261 Td -/F124_0 9.9626 Tf -(BZ2_bzReadGetUnused) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -188.065 650.261 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(course) 26.0024 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(no) 9.9626 Tj --250 TJm -(data.) 19.0883 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 628.344 Td -(This) 17.7135 Tj --240 TJm -(should) 26.5703 Tj --241 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --240 TJm -(some) 21.031 Tj --241 TJm -(feel) 14.9339 Tj --240 TJm -(for) 11.6164 Tj --241 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --240 TJm -(the) 12.1743 Tj --240 TJm -(high-le) 28.224 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --241 TJm -(interf) 21.579 Tj -10 TJm -(ace) 13.2702 Tj --240 TJm -(can) 13.8281 Tj --241 TJm -(be) 9.4047 Tj --240 TJm -(used.) 20.7521 Tj --614 TJm -(If) 6.6351 Tj --240 TJm -(you) 14.9439 Tj --241 TJm -(require) 28.2141 Tj --240 TJm -(e) 4.4234 Tj -15 TJm -(xtra) 15.4918 Tj --241 TJm -(\003e) 9.9626 Tj -15 TJm -(xibi) 15.5018 Tj -1 TJm -(lity) 13.2901 Tj -65 TJm -(,) 2.4907 Tj --243 TJm -(you') 18.2614 Tj -10 TJm -(ll) 5.5392 Tj --240 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --241 TJm -(to) 7.7509 Tj -72 616.389 Td -(bite) 14.9439 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ullet) 17.7135 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(get) 12.1743 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(grips) 19.9252 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(lo) 7.7509 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace.) 15.7608 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 585.767 Td -/F116_0 17.2154 Tf -(3.4.9.) 43.0729 Tj --278 TJm -(Standar) 64.0929 Tj -20 TJm -(d) 10.5186 Tj --278 TJm -(\002le-reading/writing) 154.009 Tj --278 TJm -(code) 40.1807 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 563.85 Td -/F122_0 9.9626 Tf -(Here') 22.6749 Tj -55 TJm -(s) 3.8755 Tj --250 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(you') 18.2614 Tj -50 TJm -(d) 4.9813 Tj --250 TJm -(write) 20.4731 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(\002le:) 15.5018 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 190.086] cm -0 0 468 370.61 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 552.328 Td -/F124_0 9.9626 Tf -(FILE) 23.9102 Tj -113.91 550.584 Td -(*) 5.9776 Tj -132.62 552.328 Td -(f;) 11.9551 Tj -90 540.373 Td -(BZFILE) 35.8654 Tj -125.866 538.629 Td -(*) 5.9776 Tj -136.087 540.373 Td -(b;) 11.9551 Tj -90 528.418 Td -(int) 17.9327 Tj --2130 TJm -(nBuf;) 29.8878 Tj -90 516.462 Td -(char) 23.9102 Tj --1704 TJm -(buf[) 23.9102 Tj --426 TJm -(/) 5.9776 Tj -165.018 514.719 Td -(*) 5.9776 Tj -175.24 516.462 Td -(whatever) 47.8205 Tj --426 TJm -(size) 23.9102 Tj --426 TJm -(you) 17.9327 Tj --426 TJm -(like) 23.9102 Tj -305.79 514.719 Td -(*) 5.9776 Tj -311.767 516.462 Td -(/) 5.9776 Tj --426 TJm -(];) 11.9551 Tj -90 504.507 Td -(int) 17.9327 Tj --2130 TJm -(bzerror;) 47.8205 Tj -90 492.552 Td -(int) 17.9327 Tj --2130 TJm -(nWritten;) 53.798 Tj -90 468.642 Td -(f) 5.9776 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(fopen) 29.8878 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -("myfile.bz2",) 77.7083 Tj --426 TJm -("w") 17.9327 Tj --426 TJm -(\);) 11.9551 Tj -90 456.687 Td -(if) 11.9551 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(!f) 11.9551 Tj --426 TJm -(\)) 5.9776 Tj --426 TJm -({) 5.9776 Tj -94.244 444.731 Td -(/) 5.9776 Tj -100.222 442.988 Td -(*) 5.9776 Tj -110.443 444.731 Td -(handle) 35.8654 Tj --426 TJm -(error) 29.8878 Tj -184.684 442.988 Td -(*) 5.9776 Tj -190.662 444.731 Td -(/) 5.9776 Tj -90 432.776 Td -(}) 5.9776 Tj -90 420.821 Td -(b) 5.9776 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ2_bzWriteOpen\() 95.641 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(f,) 11.9551 Tj --426 TJm -(9) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -90 408.866 Td -(if) 11.9551 Tj --426 TJm -(\(bzerror) 47.8205 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(BZ_OK\)) 35.8654 Tj --426 TJm -({) 5.9776 Tj -94.244 396.911 Td -(BZ2_bzWriteClose) 95.641 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -94.244 384.955 Td -(/) 5.9776 Tj -100.222 383.212 Td -(*) 5.9776 Tj -110.443 384.955 Td -(handle) 35.8654 Tj --426 TJm -(error) 29.8878 Tj -184.684 383.212 Td -(*) 5.9776 Tj -190.662 384.955 Td -(/) 5.9776 Tj -90 373 Td -(}) 5.9776 Tj -90 349.09 Td -(while) 29.8878 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(/) 5.9776 Tj -140.331 347.346 Td -(*) 5.9776 Tj -150.553 349.09 Td -(condition) 53.798 Tj -208.595 347.346 Td -(*) 5.9776 Tj -214.572 349.09 Td -(/) 5.9776 Tj --426 TJm -(\)) 5.9776 Tj --426 TJm -({) 5.9776 Tj -94.244 337.135 Td -(/) 5.9776 Tj -100.222 335.391 Td -(*) 5.9776 Tj -110.443 337.135 Td -(get) 17.9327 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(write) 29.8878 Tj --426 TJm -(into) 23.9102 Tj --426 TJm -(buf,) 23.9102 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(set) 17.9327 Tj --426 TJm -(nBuf) 23.9102 Tj --426 TJm -(appropriately) 77.7083 Tj -421.874 335.391 Td -(*) 5.9776 Tj -427.852 337.135 Td -(/) 5.9776 Tj -94.244 325.18 Td -(nWritten) 47.8205 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ2_bzWrite) 65.7532 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(b,) 11.9551 Tj --426 TJm -(buf,) 23.9102 Tj --426 TJm -(nBuf) 23.9102 Tj --426 TJm -(\);) 11.9551 Tj -94.244 313.224 Td -(if) 11.9551 Tj --426 TJm -(\(bzerror) 47.8205 Tj --426 TJm -(==) 11.9551 Tj --426 TJm -(BZ_IO_ERROR\)) 71.7307 Tj --426 TJm -({) 5.9776 Tj -102.732 301.269 Td -(BZ2_bzWriteClose) 95.641 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -102.732 289.314 Td -(/) 5.9776 Tj -108.71 287.571 Td -(*) 5.9776 Tj -118.931 289.314 Td -(handle) 35.8654 Tj --426 TJm -(error) 29.8878 Tj -193.172 287.571 Td -(*) 5.9776 Tj -199.15 289.314 Td -(/) 5.9776 Tj -94.244 277.359 Td -(}) 5.9776 Tj -90 265.404 Td -(}) 5.9776 Tj -90 241.493 Td -(BZ2_bzWriteClose\() 101.6185 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -90 229.538 Td -(if) 11.9551 Tj --426 TJm -(\(bzerror) 47.8205 Tj --426 TJm -(==) 11.9551 Tj --426 TJm -(BZ_IO_ERROR\)) 71.7307 Tj --426 TJm -({) 5.9776 Tj -94.244 217.583 Td -(/) 5.9776 Tj -100.222 215.84 Td -(*) 5.9776 Tj -110.443 217.583 Td -(handle) 35.8654 Tj --426 TJm -(error) 29.8878 Tj -184.684 215.84 Td -(*) 5.9776 Tj -190.662 217.583 Td -(/) 5.9776 Tj -90 205.628 Td -(}) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 168.168 Td -/F122_0 9.9626 Tf -(And) 17.1556 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(read) 17.1456 Tj --250 TJm -(from) 19.3673 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(\002le:) 15.5018 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(25) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 26 29 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 349.39] cm -0 0 468 370.61 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(FILE) 23.9102 Tj -113.91 709.888 Td -(*) 5.9776 Tj -132.62 711.631 Td -(f;) 11.9551 Tj -90 699.676 Td -(BZFILE) 35.8654 Tj -125.866 697.933 Td -(*) 5.9776 Tj -136.087 699.676 Td -(b;) 11.9551 Tj -90 687.721 Td -(int) 17.9327 Tj --2130 TJm -(nBuf;) 29.8878 Tj -90 675.766 Td -(char) 23.9102 Tj --1704 TJm -(buf[) 23.9102 Tj --426 TJm -(/) 5.9776 Tj -165.018 674.022 Td -(*) 5.9776 Tj -175.24 675.766 Td -(whatever) 47.8205 Tj --426 TJm -(size) 23.9102 Tj --426 TJm -(you) 17.9327 Tj --426 TJm -(like) 23.9102 Tj -305.79 674.022 Td -(*) 5.9776 Tj -311.767 675.766 Td -(/) 5.9776 Tj --426 TJm -(];) 11.9551 Tj -90 663.811 Td -(int) 17.9327 Tj --2130 TJm -(bzerror;) 47.8205 Tj -90 651.856 Td -(int) 17.9327 Tj --2130 TJm -(nWritten;) 53.798 Tj -90 627.945 Td -(f) 5.9776 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(fopen) 29.8878 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -("myfile.bz2",) 77.7083 Tj --426 TJm -("r") 17.9327 Tj --426 TJm -(\);) 11.9551 Tj -90 615.99 Td -(if) 11.9551 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(!f) 11.9551 Tj --426 TJm -(\)) 5.9776 Tj --426 TJm -({) 5.9776 Tj -98.488 604.035 Td -(/) 5.9776 Tj -104.466 602.291 Td -(*) 5.9776 Tj -114.687 604.035 Td -(handle) 35.8654 Tj --426 TJm -(error) 29.8878 Tj -188.928 602.291 Td -(*) 5.9776 Tj -194.906 604.035 Td -(/) 5.9776 Tj -90 592.08 Td -(}) 5.9776 Tj -90 580.125 Td -(b) 5.9776 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ2_bzReadOpen) 83.6858 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(f,) 11.9551 Tj --426 TJm -(0,) 11.9551 Tj --426 TJm -(NULL,) 29.8878 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -90 568.169 Td -(if) 11.9551 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj --426 TJm -(\)) 5.9776 Tj --426 TJm -({) 5.9776 Tj -98.488 556.214 Td -(BZ2_bzReadClose) 89.6634 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -98.488 544.259 Td -(/) 5.9776 Tj -104.466 542.516 Td -(*) 5.9776 Tj -114.687 544.259 Td -(handle) 35.8654 Tj --426 TJm -(error) 29.8878 Tj -188.928 542.516 Td -(*) 5.9776 Tj -194.906 544.259 Td -(/) 5.9776 Tj -90 532.304 Td -(}) 5.9776 Tj -90 508.393 Td -(bzerror) 41.8429 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ_OK;) 35.8654 Tj -90 496.438 Td -(while) 29.8878 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(==) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj --426 TJm -(&&) 11.9551 Tj --426 TJm -(/) 5.9776 Tj -252.948 494.695 Td -(*) 5.9776 Tj -263.17 496.438 Td -(arbitrary) 53.798 Tj --426 TJm -(other) 29.8878 Tj --426 TJm -(conditions) 59.7756 Tj -419.364 494.695 Td -(*) 5.9776 Tj -425.341 496.438 Td -(/\)) 11.9551 Tj --426 TJm -({) 5.9776 Tj -98.488 484.483 Td -(nBuf) 23.9102 Tj --426 TJm -(=) 5.9776 Tj --426 TJm -(BZ2_bzRead) 59.7756 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(b,) 11.9551 Tj --426 TJm -(buf,) 23.9102 Tj --426 TJm -(/) 5.9776 Tj -319.478 482.74 Td -(*) 5.9776 Tj -329.7 484.483 Td -(size) 23.9102 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(buf) 17.9327 Tj -396.23 482.74 Td -(*) 5.9776 Tj -402.208 484.483 Td -(/) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -98.488 472.528 Td -(if) 11.9551 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(==) 11.9551 Tj --426 TJm -(BZ_OK) 29.8878 Tj --426 TJm -(\)) 5.9776 Tj --426 TJm -({) 5.9776 Tj -106.976 460.573 Td -(/) 5.9776 Tj -112.953 458.829 Td -(*) 5.9776 Tj -123.175 460.573 Td -(do) 11.9551 Tj --426 TJm -(something) 53.798 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(buf[0) 29.8878 Tj --426 TJm -(..) 11.9551 Tj --426 TJm -(nBuf-1]) 41.8429 Tj -321.989 458.829 Td -(*) 5.9776 Tj -327.966 460.573 Td -(/) 5.9776 Tj -98.488 448.618 Td -(}) 5.9776 Tj -90 436.662 Td -(}) 5.9776 Tj -90 424.707 Td -(if) 11.9551 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(bzerror) 41.8429 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(BZ_STREAM_END) 77.7083 Tj --426 TJm -(\)) 5.9776 Tj --426 TJm -({) 5.9776 Tj -102.732 412.752 Td -(BZ2_bzReadClose) 89.6634 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -102.732 400.797 Td -(/) 5.9776 Tj -108.71 399.053 Td -(*) 5.9776 Tj -118.931 400.797 Td -(handle) 35.8654 Tj --426 TJm -(error) 29.8878 Tj -193.172 399.053 Td -(*) 5.9776 Tj -199.15 400.797 Td -(/) 5.9776 Tj -90 388.842 Td -(}) 5.9776 Tj --426 TJm -(else) 23.9102 Tj --426 TJm -({) 5.9776 Tj -102.732 376.887 Td -(BZ2_bzReadClose) 89.6634 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(&bzerror,) 53.798 Tj --426 TJm -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -90 364.931 Td -(}) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 314.637 Td -/F116_0 20.6585 Tf -(3.5.) 34.4584 Tj --278 TJm -(Utility) 57.3893 Tj --278 TJm -(functions) 92.9633 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 284.016 Td -/F116_0 17.2154 Tf -(3.5.1.) 43.0729 Tj --278 TJm -(BZ2_bzBuffT) 106.1502 Tj -80 TJm -(oBuffCompress) 129.1155 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 183.815] cm -0 0 468 95.641 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 271.087 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzBuffToBuffCompress\() 149.439 Tj --426 TJm -(char) 23.9102 Tj -289.771 269.344 Td -(*) 5.9776 Tj -333.944 271.087 Td -(dest,) 29.8878 Tj -217.319 259.132 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj -287.317 257.389 Td -(*) 5.9776 Tj -297.538 259.132 Td -(destLen,) 47.8205 Tj -217.319 247.177 Td -(char) 23.9102 Tj -241.23 245.434 Td -(*) 5.9776 Tj -285.403 247.177 Td -(source,) 41.8429 Tj -217.319 235.222 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj --852 TJm -(sourceLen,) 59.7756 Tj -217.319 223.267 Td -(int) 17.9327 Tj --4686 TJm -(blockSize100k,) 83.6858 Tj -217.319 211.312 Td -(int) 17.9327 Tj --4686 TJm -(verbosity,) 59.7756 Tj -217.319 199.356 Td -(int) 17.9327 Tj --4686 TJm -(workFactor) 59.7756 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 161.897 Td -/F122_0 9.9626 Tf -(Attempts) 36.5329 Tj --442 TJm -(to) 7.7509 Tj --442 TJm -(compress) 37.6287 Tj --443 TJm -(the) 12.1743 Tj --442 TJm -(data) 16.5977 Tj --442 TJm -(in) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -216.87 161.897 Td -/F124_0 9.9626 Tf -(source[0) 47.8205 Tj --600 TJm -(..) 11.9551 Tj --1200 TJm -(sourceLen-1]) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -370.715 161.897 Td -/F122_0 9.9626 Tf -(into) 15.5018 Tj --442 TJm -(the) 12.1743 Tj --443 TJm -(dest) 16.0497 Tj -1 TJm -(ination) 27.6761 Tj --443 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -40 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -486.202 161.897 Td -/F124_0 9.9626 Tf -(dest[0) 35.8654 Tj --600 TJm -(..) 11.9551 Tj -72 148.198 Td -(*) 5.9776 Tj -77.978 149.942 Td -(destLen-1]) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -137.753 149.942 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1393 TJm -(If) 6.6351 Tj --379 TJm -(the) 12.1743 Tj --379 TJm -(destination) 43.7259 Tj --379 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --378 TJm -(is) 6.6451 Tj --379 TJm -(big) 12.7322 Tj --379 TJm -(enough,) 31.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -318.487 148.198 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -324.464 149.942 Td -(destLen) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -370.082 149.942 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --379 TJm -(set) 11.0684 Tj --379 TJm -(to) 7.7509 Tj --378 TJm -(the) 12.1743 Tj --379 TJm -(size) 15.4918 Tj --379 TJm -(of) 8.2988 Tj --379 TJm -(the) 12.1743 Tj --379 TJm -(compressed) 47.0334 Tj --379 TJm -(data,) 19.0883 Tj -72 137.986 Td -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -89.527 137.986 Td -/F124_0 9.9626 Tf -(BZ_OK) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -122.556 137.986 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --315 TJm -(returned.) 35.686 Tj --1012 TJm -(If) 6.6351 Tj --315 TJm -(the) 12.1743 Tj --316 TJm -(compressed) 47.0334 Tj --315 TJm -(data) 16.5977 Tj --315 TJm -(w) 7.193 Tj -10 TJm -(on') 13.2801 Tj -18 TJm -(t) 2.7696 Tj --316 TJm -(\002t,) 10.7995 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -313.323 136.243 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -319.3 137.986 Td -(destLen) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -364.285 137.986 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --315 TJm -(unchanged,) 45.6486 Tj --332 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -440.551 137.986 Td -/F124_0 9.9626 Tf -(BZ_OUTBUFF_FULL) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -533.355 137.986 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj -72 126.031 Td -(returned.) 35.686 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 104.113 Td -(Compression) 52.5826 Tj --297 TJm -(in) 7.7509 Tj --297 TJm -(this) 14.396 Tj --297 TJm -(manner) 29.8778 Tj --297 TJm -(is) 6.6451 Tj --297 TJm -(a) 4.4234 Tj --297 TJm -(one-shot) 34.3112 Tj --297 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ent,) 14.6649 Tj --309 TJm -(done) 19.3673 Tj --297 TJm -(with) 17.7135 Tj --297 TJm -(a) 4.4234 Tj --297 TJm -(single) 23.8007 Tj --297 TJm -(call) 14.386 Tj --297 TJm -(to) 7.7509 Tj --297 TJm -(this) 14.396 Tj --297 TJm -(function.) 35.696 Tj --903 TJm -(The) 15.4918 Tj --297 TJm -(resulting) 34.8691 Tj --297 TJm -(compressed) 47.0334 Tj -72 92.158 Td -(data) 16.5977 Tj --296 TJm -(is) 6.6451 Tj --296 TJm -(a) 4.4234 Tj --296 TJm -(complete) 36.5229 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -147.988 92.158 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -180.825 92.158 Td -/F122_0 9.9626 Tf -(format) 26.5603 Tj --296 TJm -(data) 16.5977 Tj --296 TJm -(stream.) 29.0509 Tj --897 TJm -(There) 23.2328 Tj --296 TJm -(is) 6.6451 Tj --296 TJm -(no) 9.9626 Tj --296 TJm -(mechanism) 45.3796 Tj --296 TJm -(for) 11.6164 Tj --296 TJm -(making) 29.8878 Tj --296 TJm -(additional) 39.8504 Tj --296 TJm -(calls) 18.2614 Tj --296 TJm -(to) 7.7509 Tj --296 TJm -(pro) 13.2801 Tj -15 TJm -(vide) 17.1556 Tj --296 TJm -(e) 4.4234 Tj -15 TJm -(xtra) 15.4918 Tj -72 80.203 Td -(input) 20.4831 Tj --250 TJm -(data.) 19.0883 Tj --620 TJm -(If) 6.6351 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(kind) 17.7135 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(mechanism,) 47.8703 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(lo) 7.7509 Tj -25 TJm -(w-le) 17.7035 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(el) 7.193 Tj --250 TJm -(interf) 21.579 Tj -10 TJm -(ace.) 15.7608 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(26) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 27 30 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --223 TJm -(the) 12.1743 Tj --224 TJm -(meaning) 34.3112 Tj --223 TJm -(of) 8.2988 Tj --224 TJm -(parameters) 43.7059 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -195.306 710.037 Td -/F124_0 9.9626 Tf -(blockSize100k) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -273.015 710.037 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -277.784 710.037 Td -/F124_0 9.9626 Tf -(verbosity) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -333.808 710.037 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -350.42 710.037 Td -/F124_0 9.9626 Tf -(workFactor) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -410.196 710.037 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --229 TJm -(see) 12.7222 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -429.913 710.037 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -537.509 710.037 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 688.12 Td -(T) 6.0871 Tj -80 TJm -(o) 4.9813 Tj --410 TJm -(guarantee) 38.7246 Tj --410 TJm -(that) 14.9439 Tj --410 TJm -(the) 12.1743 Tj --410 TJm -(compressed) 47.0334 Tj --410 TJm -(data) 16.5977 Tj --410 TJm -(will) 15.5018 Tj --410 TJm -(\002t) 8.3088 Tj --410 TJm -(in) 7.7509 Tj --410 TJm -(its) 9.4147 Tj --410 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -40 TJm -(,) 2.4907 Tj --450 TJm -(allocate) 30.9837 Tj --410 TJm -(an) 9.4047 Tj --410 TJm -(output) 25.4644 Tj --410 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --411 TJm -(of) 8.2988 Tj --410 TJm -(size) 15.4918 Tj --410 TJm -(1%) 13.2801 Tj --410 TJm -(lar) 10.5105 Tj -18 TJm -(ger) 12.7222 Tj --410 TJm -(than) 17.1556 Tj --410 TJm -(the) 12.1743 Tj -72 676.164 Td -(uncompressed) 56.996 Tj --250 TJm -(data,) 19.0883 Tj --250 TJm -(plus) 16.6077 Tj --250 TJm -(six) 11.6264 Tj --250 TJm -(hundred) 32.6474 Tj --250 TJm -(e) 4.4234 Tj -15 TJm -(xtra) 15.4918 Tj --250 TJm -(bytes.) 23.5217 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 654.247 Td -/F124_0 9.9626 Tf -(BZ2_bzBuffToBuffDecompress) 155.4166 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -230.553 654.247 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --315 TJm -(not) 12.7322 Tj --315 TJm -(write) 20.4731 Tj --314 TJm -(data) 16.5977 Tj --315 TJm -(at) 7.193 Tj --315 TJm -(or) 8.2988 Tj --315 TJm -(be) 9.4047 Tj -15 TJm -(yond) 19.9252 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -362.484 654.247 Td -/F124_0 9.9626 Tf -(dest[) 29.8878 Tj -392.372 652.503 Td -(*) 5.9776 Tj -398.349 654.247 Td -(destLen]) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -446.17 654.247 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --331 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --315 TJm -(in) 7.7509 Tj --315 TJm -(case) 17.1456 Tj --314 TJm -(of) 8.2988 Tj --315 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -72 642.291 Td -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er\003o) 18.2614 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 620.374 Td -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 451.905] cm -0 0 468 167.372 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 610.909 Td -/F124_0 9.9626 Tf -(BZ_CONFIG_ERROR) 89.6634 Tj -98.488 598.954 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(library) 41.8429 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(mis-compiled) 71.7307 Tj -90 586.999 Td -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 575.044 Td -(if) 11.9551 Tj --426 TJm -(dest) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(destLen) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -98.488 563.089 Td -(or) 11.9551 Tj --426 TJm -(blockSize100k) 77.7083 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(1) 5.9776 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(blockSize100k) 77.7083 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(9) 5.9776 Tj -98.488 551.133 Td -(or) 11.9551 Tj --426 TJm -(verbosity) 53.798 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(verbosity) 53.798 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(4) 5.9776 Tj -98.488 539.178 Td -(or) 11.9551 Tj --426 TJm -(workFactor) 59.7756 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(workFactor) 59.7756 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(250) 17.9327 Tj -90 527.223 Td -(BZ_MEM_ERROR) 71.7307 Tj -98.488 515.268 Td -(if) 11.9551 Tj --426 TJm -(insufficient) 71.7307 Tj --426 TJm -(memory) 35.8654 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(available) 53.798 Tj -90 503.313 Td -(BZ_OUTBUFF_FULL) 89.6634 Tj -98.488 491.357 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(size) 23.9102 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(exceeds) 41.8429 Tj -341.655 489.614 Td -(*) 5.9776 Tj -347.633 491.357 Td -(destLen) 41.8429 Tj -90 479.402 Td -(BZ_OK) 29.8878 Tj -98.488 467.447 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 421.284 Td -/F116_0 17.2154 Tf -(3.5.2.) 43.0729 Tj --278 TJm -(BZ2_bzBuffT) 106.1502 Tj -80 TJm -(oBuffDecompress) 148.259 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 333.038] cm -0 0 468 83.686 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 408.356 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzBuffToBuffDecompress\() 161.3941 Tj --426 TJm -(char) 23.9102 Tj -301.726 406.612 Td -(*) 5.9776 Tj -345.899 408.356 Td -(dest,) 29.8878 Tj -225.807 396.401 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj -295.805 394.657 Td -(*) 5.9776 Tj -306.026 396.401 Td -(destLen,) 47.8205 Tj -225.807 384.446 Td -(char) 23.9102 Tj -249.717 382.702 Td -(*) 5.9776 Tj -293.891 384.446 Td -(source,) 41.8429 Tj -225.807 372.49 Td -(unsigned) 47.8205 Tj --426 TJm -(int) 17.9327 Tj --852 TJm -(sourceLen,) 59.7756 Tj -225.807 360.535 Td -(int) 17.9327 Tj --4686 TJm -(small,) 35.8654 Tj -225.807 348.58 Td -(int) 17.9327 Tj --4686 TJm -(verbosity) 53.798 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 311.12 Td -/F122_0 9.9626 Tf -(Attempts) 36.5329 Tj --358 TJm -(to) 7.7509 Tj --359 TJm -(decompress) 47.0334 Tj --358 TJm -(the) 12.1743 Tj --358 TJm -(data) 16.5977 Tj --359 TJm -(in) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -221.259 311.12 Td -/F124_0 9.9626 Tf -(source[0) 47.8205 Tj --600 TJm -(..) 11.9551 Tj --1200 TJm -(sourceLen-1]) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -374.268 311.12 Td -/F122_0 9.9626 Tf -(into) 15.5018 Tj --358 TJm -(the) 12.1743 Tj --359 TJm -(destination) 43.7259 Tj --358 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -40 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -486.202 311.12 Td -/F124_0 9.9626 Tf -(dest[0) 35.8654 Tj --600 TJm -(..) 11.9551 Tj -72 297.422 Td -(*) 5.9776 Tj -77.978 299.165 Td -(destLen-1]) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -137.753 299.165 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1123 TJm -(If) 6.6351 Tj --334 TJm -(the) 12.1743 Tj --334 TJm -(destination) 43.7259 Tj --334 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --334 TJm -(is) 6.6451 Tj --334 TJm -(big) 12.7322 Tj --334 TJm -(enough,) 31.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -312.554 297.422 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -318.531 299.165 Td -(destLen) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -363.701 299.165 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --334 TJm -(set) 11.0684 Tj --334 TJm -(to) 7.7509 Tj --334 TJm -(the) 12.1743 Tj --334 TJm -(size) 15.4918 Tj --333 TJm -(of) 8.2988 Tj --334 TJm -(the) 12.1743 Tj --334 TJm -(uncompressed) 56.996 Tj --334 TJm -(data,) 19.0883 Tj -72 287.21 Td -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -89.527 287.21 Td -/F124_0 9.9626 Tf -(BZ_OK) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -122.556 287.21 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --315 TJm -(returned.) 35.686 Tj --1012 TJm -(If) 6.6351 Tj --315 TJm -(the) 12.1743 Tj --316 TJm -(compressed) 47.0334 Tj --315 TJm -(data) 16.5977 Tj --315 TJm -(w) 7.193 Tj -10 TJm -(on') 13.2801 Tj -18 TJm -(t) 2.7696 Tj --316 TJm -(\002t,) 10.7995 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -313.323 285.467 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -319.3 287.21 Td -(destLen) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -364.285 287.21 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --315 TJm -(unchanged,) 45.6486 Tj --332 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -440.551 287.21 Td -/F124_0 9.9626 Tf -(BZ_OUTBUFF_FULL) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -533.355 287.21 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj -72 275.255 Td -(returned.) 35.686 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 253.337 Td -/F124_0 9.9626 Tf -(source) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -110.981 253.337 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --313 TJm -(assumed) 34.3112 Tj --312 TJm -(to) 7.7509 Tj --313 TJm -(hold) 17.7135 Tj --313 TJm -(a) 4.4234 Tj --313 TJm -(complete) 36.5229 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -237.04 253.337 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -270.044 253.337 Td -/F122_0 9.9626 Tf -(format) 26.5603 Tj --313 TJm -(data) 16.5977 Tj --312 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -353.446 253.337 Td -/F124_0 9.9626 Tf -(BZ2_bzBuffToBuffDecompress) 155.4166 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -511.978 253.337 Td -/F122_0 9.9626 Tf -(tries) 17.1556 Tj --313 TJm -(to) 7.7509 Tj -72 241.382 Td -(decompress) 47.0334 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(entirety) 30.4357 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(stream) 26.5603 Tj --250 TJm -(into) 15.5018 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(output) 25.4644 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -55 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 219.464 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(meaning) 34.3112 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(parameters) 43.7059 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -196.631 219.464 Td -/F124_0 9.9626 Tf -(small) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -229.01 219.464 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -245.887 219.464 Td -/F124_0 9.9626 Tf -(verbosity) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -299.685 219.464 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(see) 12.7222 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -319.879 219.464 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompressInit) 119.5512 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -439.431 219.464 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 197.546 Td -(Because) 33.1954 Tj --250 TJm -(the) 12.1743 Tj --249 TJm -(compression) 50.3609 Tj --250 TJm -(ratio) 18.2614 Tj --249 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --249 TJm -(compressed) 47.0334 Tj --250 TJm -(data) 16.5977 Tj --249 TJm -(cannot) 26.5603 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(kno) 14.9439 Tj -25 TJm -(wn) 12.1743 Tj --249 TJm -(in) 7.7509 Tj --250 TJm -(adv) 14.386 Tj -25 TJm -(ance,) 20.7421 Tj --249 TJm -(there) 19.9152 Tj --250 TJm -(is) 6.6451 Tj --249 TJm -(no) 9.9626 Tj --250 TJm -(easy) 17.7035 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ay) 9.4047 Tj --249 TJm -(to) 7.7509 Tj --250 TJm -(guarantee) 38.7246 Tj -72 185.591 Td -(that) 14.9439 Tj --286 TJm -(the) 12.1743 Tj --287 TJm -(output) 25.4644 Tj --286 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj --287 TJm -(will) 15.5018 Tj --286 TJm -(be) 9.4047 Tj --286 TJm -(big) 12.7322 Tj --287 TJm -(enough.) 31.8205 Tj --838 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --287 TJm -(may) 17.1556 Tj --286 TJm -(of) 8.2988 Tj --287 TJm -(course) 26.0024 Tj --286 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --286 TJm -(arrangements) 53.6685 Tj --287 TJm -(in) 7.7509 Tj --286 TJm -(your) 18.2614 Tj --287 TJm -(code) 18.8094 Tj --286 TJm -(to) 7.7509 Tj --286 TJm -(record) 25.4445 Tj --287 TJm -(the) 12.1743 Tj --286 TJm -(size) 15.4918 Tj --287 TJm -(of) 8.2988 Tj -72 173.636 Td -(the) 12.1743 Tj --250 TJm -(uncompressed) 56.996 Tj --250 TJm -(data,) 19.0883 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(such) 18.2614 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(mechanism) 45.3796 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(be) 9.4047 Tj -15 TJm -(yond) 19.9252 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(scope) 22.6848 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(library) 26.5603 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 151.718 Td -/F124_0 9.9626 Tf -(BZ2_bzBuffToBuffDecompress) 155.4166 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -230.553 151.718 Td -/F122_0 9.9626 Tf -(will) 15.5018 Tj --315 TJm -(not) 12.7322 Tj --315 TJm -(write) 20.4731 Tj --314 TJm -(data) 16.5977 Tj --315 TJm -(at) 7.193 Tj --315 TJm -(or) 8.2988 Tj --315 TJm -(be) 9.4047 Tj -15 TJm -(yond) 19.9252 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -362.484 151.718 Td -/F124_0 9.9626 Tf -(dest[) 29.8878 Tj -392.372 149.975 Td -(*) 5.9776 Tj -398.349 151.718 Td -(destLen]) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -446.17 151.718 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --331 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(en) 9.4047 Tj --315 TJm -(in) 7.7509 Tj --315 TJm -(case) 17.1456 Tj --314 TJm -(of) 8.2988 Tj --315 TJm -(b) 4.9813 Tj -20 TJm -(uf) 8.2988 Tj -25 TJm -(fer) 11.0585 Tj -72 139.763 Td -(o) 4.9813 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(er\003o) 18.2614 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 117.845 Td -(Possible) 33.2153 Tj --250 TJm -(return) 23.7907 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues:) 23.2427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(27) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 28 31 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -420.96 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -498.449 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 75.786 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 492.852] cm -0 0 468 227.148 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 711.631 Td -/F124_0 9.9626 Tf -(BZ_CONFIG_ERROR) 89.6634 Tj -98.488 699.676 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(library) 41.8429 Tj --426 TJm -(has) 17.9327 Tj --426 TJm -(been) 23.9102 Tj --426 TJm -(mis-compiled) 71.7307 Tj -90 687.721 Td -(BZ_PARAM_ERROR) 83.6858 Tj -98.488 675.766 Td -(if) 11.9551 Tj --426 TJm -(dest) 23.9102 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(destLen) 41.8429 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(NULL) 23.9102 Tj -98.488 663.811 Td -(or) 11.9551 Tj --426 TJm -(small) 29.8878 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(&&) 11.9551 Tj --426 TJm -(small) 29.8878 Tj --426 TJm -(!=) 11.9551 Tj --426 TJm -(1) 5.9776 Tj -98.488 651.856 Td -(or) 11.9551 Tj --426 TJm -(verbosity) 53.798 Tj --426 TJm -(<) 5.9776 Tj --426 TJm -(0) 5.9776 Tj --426 TJm -(or) 11.9551 Tj --426 TJm -(verbosity) 53.798 Tj --426 TJm -(>) 5.9776 Tj --426 TJm -(4) 5.9776 Tj -90 639.9 Td -(BZ_MEM_ERROR) 71.7307 Tj -98.488 627.945 Td -(if) 11.9551 Tj --426 TJm -(insufficient) 71.7307 Tj --426 TJm -(memory) 35.8654 Tj --426 TJm -(is) 11.9551 Tj --426 TJm -(available) 53.798 Tj -90 615.99 Td -(BZ_OUTBUFF_FULL) 89.6634 Tj -98.488 604.035 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(size) 23.9102 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(exceeds) 41.8429 Tj -341.655 602.291 Td -(*) 5.9776 Tj -347.633 604.035 Td -(destLen) 41.8429 Tj -90 592.08 Td -(BZ_DATA_ERROR) 77.7083 Tj -98.488 580.124 Td -(if) 11.9551 Tj --426 TJm -(a) 5.9776 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(integrity) 53.798 Tj --426 TJm -(error) 29.8878 Tj --426 TJm -(was) 17.9327 Tj --426 TJm -(detected) 47.8205 Tj --426 TJm -(in) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(data) 23.9102 Tj -90 568.169 Td -(BZ_DATA_ERROR_MAGIC) 113.5736 Tj -98.488 556.214 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(doesn't) 41.8429 Tj --426 TJm -(begin) 29.8878 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(right) 29.8878 Tj --426 TJm -(magic) 29.8878 Tj --426 TJm -(bytes) 29.8878 Tj -90 544.259 Td -(BZ_UNEXPECTED_EOF) 101.6185 Tj -98.488 532.304 Td -(if) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compressed) 59.7756 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(ends) 23.9102 Tj --426 TJm -(unexpectedly) 71.7307 Tj -90 520.349 Td -(BZ_OK) 29.8878 Tj -98.488 508.393 Td -(otherwise) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 458.099 Td -/F116_0 20.6585 Tf -(3.6.) 34.4584 Tj --278 TJm -(zlib) 34.4377 Tj --278 TJm -(compatibility) 127.4216 Tj --278 TJm -(functions) 92.9633 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 436.181 Td -/F122_0 9.9626 Tf -(Y) 7.193 Tj -110 TJm -(oshioka) 30.9936 Tj --604 TJm -(Tsuneo) 29.3299 Tj --604 TJm -(has) 13.2801 Tj --604 TJm -(contrib) 28.224 Tj -20 TJm -(uted) 17.1556 Tj --604 TJm -(some) 21.031 Tj --604 TJm -(functions) 37.0808 Tj --604 TJm -(to) 7.7509 Tj --604 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --604 TJm -(better) 22.6848 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -356.347 436.181 Td -/F124_0 9.9626 Tf -(zlib) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -386.275 436.181 Td -/F122_0 9.9626 Tf -(compatibility) 53.1405 Tj -65 TJm -(.) 2.4907 Tj --1372 TJm -(These) 23.7907 Tj --604 TJm -(functions) 37.0808 Tj --604 TJm -(are) 12.1643 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 424.226 Td -/F124_0 9.9626 Tf -(BZ2_bzopen) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -131.776 424.226 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -144.283 424.226 Td -/F124_0 9.9626 Tf -(BZ2_bzread) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -204.059 424.226 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -216.567 424.226 Td -/F124_0 9.9626 Tf -(BZ2_bzwrite) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -282.32 424.226 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -294.827 424.226 Td -/F124_0 9.9626 Tf -(BZ2_bzflush) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -360.581 424.226 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -373.088 424.226 Td -/F124_0 9.9626 Tf -(BZ2_bzclose) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -438.842 424.226 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -451.349 424.226 Td -/F124_0 9.9626 Tf -(BZ2_bzerror) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -525.614 424.226 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 412.271 Td -/F124_0 9.9626 Tf -(BZ2_bzlibVersion) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -167.641 412.271 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1420 TJm -(These) 23.7907 Tj --383 TJm -(functions) 37.0808 Tj --383 TJm -(are) 12.1643 Tj --383 TJm -(not) 12.7322 Tj --383 TJm -(\(yet\)) 18.8094 Tj --384 TJm -(of) 8.2988 Tj -25 TJm -(\002cially) 27.6761 Tj --383 TJm -(part) 15.4918 Tj --383 TJm -(of) 8.2988 Tj --383 TJm -(the) 12.1743 Tj --384 TJm -(library) 26.5603 Tj -65 TJm -(.) 2.4907 Tj --1419 TJm -(If) 6.6351 Tj --383 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --384 TJm -(break,) 24.6176 Tj --416 TJm -(you) 14.9439 Tj --383 TJm -(get) 12.1743 Tj --384 TJm -(to) 7.7509 Tj -72 400.316 Td -(k) 4.9813 Tj -10 TJm -(eep) 13.8281 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(pieces.) 27.3872 Tj --620 TJm -(Ne) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ertheless,) 37.3498 Tj --250 TJm -(I) 3.3175 Tj --250 TJm -(think) 20.4831 Tj --250 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ork) 13.2801 Tj --250 TJm -(ok.) 12.4533 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 349.342] cm -0 0 468 47.821 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 388.794 Td -/F124_0 9.9626 Tf -(typedef) 41.8429 Tj --426 TJm -(void) 23.9102 Tj --426 TJm -(BZFILE;) 41.8429 Tj -90 364.884 Td -(const) 29.8878 Tj --426 TJm -(char) 23.9102 Tj -152.286 363.14 Td -(*) 5.9776 Tj -162.508 364.884 Td -(BZ2_bzlibVersion) 95.641 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(void) 23.9102 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 327.424 Td -/F122_0 9.9626 Tf -(Returns) 30.9936 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(string) 22.6948 Tj --250 TJm -(indicating) 39.8504 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(library) 26.5603 Tj --250 TJm -(v) 4.9813 Tj -15 TJm -(ersion.) 26.8392 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 288.405] cm -0 0 468 35.866 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 315.902 Td -/F124_0 9.9626 Tf -(BZFILE) 35.8654 Tj -130.109 314.159 Td -(*) 5.9776 Tj -140.331 315.902 Td -(BZ2_bzopen) 59.7756 Tj --852 TJm -(\() 5.9776 Tj --426 TJm -(const) 29.8878 Tj --426 TJm -(char) 23.9102 Tj -281.103 314.159 Td -(*) 5.9776 Tj -287.08 315.902 Td -(path,) 29.8878 Tj --426 TJm -(const) 29.8878 Tj --426 TJm -(char) 23.9102 Tj -383.498 314.159 Td -(*) 5.9776 Tj -389.476 315.902 Td -(mode) 23.9102 Tj --426 TJm -(\);) 11.9551 Tj -90 303.947 Td -(BZFILE) 35.8654 Tj -130.109 302.204 Td -(*) 5.9776 Tj -140.331 303.947 Td -(BZ2_bzdopen) 65.7532 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(int) 17.9327 Tj --3408 TJm -(fd,) 17.9327 Tj --1704 TJm -(const) 29.8878 Tj --426 TJm -(char) 23.9102 Tj -369.629 302.204 Td -(*) 5.9776 Tj -375.607 303.947 Td -(mode) 23.9102 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 266.488 Td -/F122_0 9.9626 Tf -(Opens) 25.4544 Tj --243 TJm -(a) 4.4234 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -106.713 266.488 Td -/F124_0 9.9626 Tf -(.bz2) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -133.041 266.488 Td -/F122_0 9.9626 Tf -(\002le) 12.7322 Tj --243 TJm -(for) 11.6164 Tj --242 TJm -(reading) 29.8778 Tj --243 TJm -(or) 8.2988 Tj --243 TJm -(writing,) 31.2726 Tj --244 TJm -(using) 21.589 Tj --243 TJm -(either) 22.6848 Tj --242 TJm -(its) 9.4147 Tj --243 TJm -(name) 21.579 Tj --243 TJm -(or) 8.2988 Tj --242 TJm -(a) 4.4234 Tj --243 TJm -(pre-e) 20.4632 Tj -15 TJm -(xisting) 27.1282 Tj --243 TJm -(\002le) 12.7322 Tj --242 TJm -(descriptor) 39.8404 Tj -55 TJm -(.) 2.4907 Tj --615 TJm -(Analogous) 43.1679 Tj --243 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -510.112 266.488 Td -/F124_0 9.9626 Tf -(fopen) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 254.532 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -88.877 254.532 Td -/F124_0 9.9626 Tf -(fdopen) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -124.742 254.532 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 216.137] cm -0 0 468 35.866 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 243.633 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --426 TJm -(BZ2_bzread) 59.7756 Tj --852 TJm -(\() 5.9776 Tj --426 TJm -(BZFILE) 35.8654 Tj -226.528 241.89 Td -(*) 5.9776 Tj -236.749 243.633 Td -(b,) 11.9551 Tj --426 TJm -(void) 23.9102 Tj -276.859 241.89 Td -(*) 5.9776 Tj -287.08 243.633 Td -(buf,) 23.9102 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(len) 17.9327 Tj --426 TJm -(\);) 11.9551 Tj -90 231.678 Td -(int) 17.9327 Tj --426 TJm -(BZ2_bzwrite) 65.7532 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(BZFILE) 35.8654 Tj -228.261 229.935 Td -(*) 5.9776 Tj -238.483 231.678 Td -(b,) 11.9551 Tj --426 TJm -(void) 23.9102 Tj -278.592 229.935 Td -(*) 5.9776 Tj -288.814 231.678 Td -(buf,) 23.9102 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(len) 17.9327 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 194.219 Td -/F122_0 9.9626 Tf -(Reads/writes) 51.4668 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(from/to) 29.8878 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(pre) 12.7222 Tj -25 TJm -(viously) 29.3399 Tj --250 TJm -(opened) 28.772 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -259.903 194.219 Td -/F124_0 9.9626 Tf -(BZFILE) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -295.769 194.219 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --500 TJm -(Analogous) 43.1679 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -359.141 194.219 Td -/F124_0 9.9626 Tf -(fread) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -391.519 194.219 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -408.396 194.219 Td -/F124_0 9.9626 Tf -(fwrite) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -444.261 194.219 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 155.2] cm -0 0 468 35.866 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 182.697 Td -/F124_0 9.9626 Tf -(int) 17.9327 Tj --852 TJm -(BZ2_bzflush) 65.7532 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(BZFILE) 35.8654 Tj -232.505 180.954 Td -(*) 5.9776 Tj -242.727 182.697 Td -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -90 170.742 Td -(void) 23.9102 Tj --426 TJm -(BZ2_bzclose) 65.7532 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(BZFILE) 35.8654 Tj -234.239 168.998 Td -(*) 5.9776 Tj -244.46 170.742 Td -(b) 5.9776 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 133.282 Td -/F122_0 9.9626 Tf -(Flushes/closes) 57.5639 Tj --250 TJm -(a) 4.4234 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -138.968 133.282 Td -/F124_0 9.9626 Tf -(BZFILE) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -174.833 133.282 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -179.815 133.282 Td -/F124_0 9.9626 Tf -(BZ2_bzflush) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -248.059 133.282 Td -/F122_0 9.9626 Tf -(doesn') 26.5603 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(actually) 31.5416 Tj --250 TJm -(do) 9.9626 Tj --250 TJm -(an) 9.4047 Tj -15 TJm -(ything.) 27.9551 Tj --620 TJm -(Analogous) 43.1679 Tj --250 TJm -(to) 7.7509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -425.472 133.282 Td -/F124_0 9.9626 Tf -(fflush) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -463.828 133.282 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -480.705 133.282 Td -/F124_0 9.9626 Tf -(fclose) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -516.57 133.282 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 106.219] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 121.761 Td -/F124_0 9.9626 Tf -(const) 29.8878 Tj --426 TJm -(char) 23.9102 Tj -152.286 120.017 Td -(*) 5.9776 Tj -162.508 121.761 Td -(BZ2_bzerror) 65.7532 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(BZFILE) 35.8654 Tj -282.836 120.017 Td -(*) 5.9776 Tj -288.814 121.761 Td -(b,) 11.9551 Tj --426 TJm -(int) 17.9327 Tj -327.19 120.017 Td -(*) 5.9776 Tj -333.167 121.761 Td -(errnum) 35.8654 Tj --426 TJm -(\)) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 84.301 Td -/F122_0 9.9626 Tf -(Returns) 30.9936 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(string) 22.6948 Tj --250 TJm -(describing) 41.5042 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(more) 20.4731 Tj --250 TJm -(recent) 24.3386 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(status) 22.6948 Tj --250 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -303.858 84.301 Td -/F124_0 9.9626 Tf -(b) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -309.835 84.301 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(also) 16.0497 Tj --250 TJm -(sets) 14.9439 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -367.668 82.558 Td -/F124_0 9.9626 Tf -(*) 5.9776 Tj -373.645 84.301 Td -(errnum) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -412.002 84.301 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(its) 9.4147 Tj --250 TJm -(numerical) 39.8404 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alue.) 19.0883 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -536.307 50.951 Td -(28) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 29 32 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 704.93 Td -/F116_0 20.6585 Tf -(3.7.) 34.4584 Tj --278 TJm -(Using) 57.3893 Tj --278 TJm -(the) 30.9878 Tj --278 TJm -(librar) 51.6669 Tj --10 TJm -(y) 11.4861 Tj --278 TJm -(in) 18.3654 Tj --278 TJm -(a) 11.4861 Tj --278 TJm -(stdio-free) 94.1201 Tj -72 680.139 Td -(en) 24.1085 Tj -40 TJm -(vir) 25.2653 Tj -20 TJm -(onment) 74.5978 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 649.583 Td -/F116_0 17.2154 Tf -(3.7.1.) 43.0729 Tj --278 TJm -(Getting) 60.2539 Tj --278 TJm -(rid) 22.0013 Tj --278 TJm -(of) 16.2513 Tj --278 TJm -(stdio) 41.1276 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 627.73 Td -/F122_0 9.9626 Tf -(In) 8.2988 Tj --319 TJm -(a) 4.4234 Tj --319 TJm -(deeply) 26.5603 Tj --319 TJm -(embedded) 40.9463 Tj --319 TJm -(application,) 46.7644 Tj --336 TJm -(you) 14.9439 Tj --319 TJm -(might) 23.2527 Tj --319 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --319 TJm -(to) 7.7509 Tj --319 TJm -(use) 13.2801 Tj --319 TJm -(just) 14.396 Tj --319 TJm -(the) 12.1743 Tj --319 TJm -(memory-to-memory) 80.7967 Tj --319 TJm -(functions.) 39.5714 Tj --1035 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --319 TJm -(can) 13.8281 Tj --319 TJm -(do) 9.9626 Tj --319 TJm -(this) 14.396 Tj -72 615.775 Td -(con) 14.386 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(eniently) 32.0995 Tj --327 TJm -(by) 9.9626 Tj --327 TJm -(compiling) 40.4083 Tj --327 TJm -(the) 12.1743 Tj --327 TJm -(library) 26.5603 Tj --327 TJm -(with) 17.7135 Tj --328 TJm -(preproces) 38.7246 Tj -1 TJm -(sor) 12.1743 Tj --328 TJm -(symbol) 29.3399 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -336.045 615.775 Td -/F124_0 9.9626 Tf -(BZ_NO_STDIO) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -405.057 615.775 Td -/F122_0 9.9626 Tf -(de\002ned.) 31.8205 Tj --1083 TJm -(Doing) 24.9065 Tj --327 TJm -(this) 14.396 Tj --327 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --327 TJm -(you) 14.9439 Tj --327 TJm -(a) 4.4234 Tj -72 603.819 Td -(library) 26.5603 Tj --250 TJm -(containing) 42.0621 Tj --250 TJm -(only) 17.7135 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(follo) 18.8194 Tj -25 TJm -(wing) 19.9252 Tj --250 TJm -(eight) 19.9252 Tj --250 TJm -(functions:) 39.8504 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 581.966 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressInit) 107.5961 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -179.597 581.966 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -199.079 581.966 Td -/F124_0 9.9626 Tf -(BZ2_bzCompress) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -282.765 581.966 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -302.247 581.966 Td -/F124_0 9.9626 Tf -(BZ2_bzCompressEnd) 101.6185 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --1414 TJm -(BZ2_bzDe) 47.8205 Tj --1 TJm -(compressInit) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -537.509 581.966 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 570.011 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompress) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -167.641 570.011 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -172.144 570.011 Td -/F124_0 9.9626 Tf -(BZ2_bzDecompressEnd) 113.5736 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --190 TJm -(BZ2_bzBuffToBuffCompress) 143.4614 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -431.073 570.011 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -435.577 570.011 Td -/F124_0 9.9626 Tf -(BZ2_bzBuffToBuffDecompress) 155.4166 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 548.158 Td -/F122_0 9.9626 Tf -(When) 23.7907 Tj --250 TJm -(compiled) 37.0808 Tj --250 TJm -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --250 TJm -(this,) 16.8866 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(functions) 37.0808 Tj --250 TJm -(will) 15.5018 Tj --250 TJm -(ignore) 25.4544 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -272.526 548.158 Td -/F124_0 9.9626 Tf -(verbosity) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -328.815 548.158 Td -/F122_0 9.9626 Tf -(settings.) 32.9364 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 517.601 Td -/F116_0 17.2154 Tf -(3.7.2.) 43.0729 Tj --278 TJm -(Critical) 58.3602 Tj --278 TJm -(err) 22.9653 Tj -20 TJm -(or) 17.2154 Tj --278 TJm -(handling) 71.7366 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 495.748 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -124.529 495.748 Td -/F122_0 9.9626 Tf -(contains) 33.2053 Tj --473 TJm -(a) 4.4234 Tj --472 TJm -(number) 30.4357 Tj --473 TJm -(of) 8.2988 Tj --472 TJm -(internal) 30.4357 Tj --473 TJm -(assertion) 35.417 Tj --472 TJm -(checks) 27.1082 Tj --473 TJm -(which) 24.3486 Tj --472 TJm -(should,) 29.0609 Tj --529 TJm -(needless) 33.7533 Tj --472 TJm -(to) 7.7509 Tj --473 TJm -(say) 13.2801 Tj -65 TJm -(,) 2.4907 Tj --528 TJm -(ne) 9.4047 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --473 TJm -(be) 9.4047 Tj --472 TJm -(acti) 14.386 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ated.) 19.0883 Tj -72 483.793 Td -(Ne) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ertheless,) 37.3498 Tj --533 TJm -(if) 6.0871 Tj --476 TJm -(an) 9.4047 Tj --476 TJm -(assertion) 35.417 Tj --476 TJm -(should) 26.5703 Tj --476 TJm -(f) 3.3175 Tj -10 TJm -(ail,) 12.4533 Tj --532 TJm -(beha) 18.8094 Tj -20 TJm -(viour) 21.031 Tj --476 TJm -(depends) 32.6474 Tj --476 TJm -(on) 9.9626 Tj --476 TJm -(whether) 32.0895 Tj --476 TJm -(or) 8.2988 Tj --477 TJm -(not) 12.7322 Tj --476 TJm -(the) 12.1743 Tj --476 TJm -(library) 26.5603 Tj --476 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --476 TJm -(compiled) 37.0808 Tj --476 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 471.838 Td -/F124_0 9.9626 Tf -(BZ_NO_STDIO) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -140.244 471.838 Td -/F122_0 9.9626 Tf -(set.) 13.5591 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 449.985 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(normal) 28.224 Tj --250 TJm -(compile,) 34.5901 Tj --250 TJm -(an) 9.4047 Tj --250 TJm -(assertion) 35.417 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(ailure) 22.6848 Tj --250 TJm -(yields) 23.8007 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(message:) 36.5229 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 428.131 Td -(bzip2/libbzip2:) 60.3335 Tj --310 TJm -(internal) 30.4357 Tj --250 TJm -(error) 19.3573 Tj --250 TJm -(number) 30.4357 Tj --250 TJm -(N.) 9.6836 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 406.278 Td -(This) 17.7135 Tj --344 TJm -(is) 6.6451 Tj --344 TJm -(a) 4.4234 Tj --344 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj --343 TJm -(in) 7.7509 Tj --344 TJm -(bzip2/libbzip2,) 60.0546 Tj --368 TJm -(1.0.6) 19.9252 Tj --343 TJm -(of) 8.2988 Tj --344 TJm -(6) 4.9813 Tj --344 TJm -(September) 42.61 Tj --344 TJm -(2010.) 22.4159 Tj --592 TJm -(Please) 25.4544 Tj --344 TJm -(report) 23.7907 Tj --343 TJm -(it) 5.5392 Tj --344 TJm -(to) 7.7509 Tj --344 TJm -(me) 12.1743 Tj --344 TJm -(at:) 9.9626 Tj --498 TJm -(jse) 11.0684 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(ard@bzip.or) 49.8429 Tj -18 TJm -(g.) 7.472 Tj --1183 TJm -(If) 6.6351 Tj --344 TJm -(this) 14.396 Tj -72 394.323 Td -(happened) 38.1767 Tj --297 TJm -(when) 21.579 Tj --298 TJm -(you) 14.9439 Tj --297 TJm -(were) 19.3573 Tj --297 TJm -(using) 21.589 Tj --297 TJm -(some) 21.031 Tj --298 TJm -(program) 33.7533 Tj --297 TJm -(which) 24.3486 Tj --297 TJm -(uses) 17.1556 Tj --297 TJm -(libbzip2) 32.6574 Tj --298 TJm -(as) 8.2988 Tj --297 TJm -(a) 4.4234 Tj --297 TJm -(component,) 46.7644 Tj --309 TJm -(you) 14.9439 Tj --298 TJm -(should) 26.5703 Tj --297 TJm -(also) 16.0497 Tj --297 TJm -(report) 23.7907 Tj --297 TJm -(this) 14.396 Tj --298 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj -72 382.368 Td -(to) 7.7509 Tj --264 TJm -(the) 12.1743 Tj --264 TJm -(author\(s\)) 35.965 Tj --264 TJm -(of) 8.2988 Tj --264 TJm -(that) 14.9439 Tj --264 TJm -(program.) 36.2439 Tj --703 TJm -(Please) 25.4544 Tj --264 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --264 TJm -(an) 9.4047 Tj --264 TJm -(ef) 7.7409 Tj -25 TJm -(fort) 14.386 Tj --264 TJm -(to) 7.7509 Tj --264 TJm -(report) 23.7907 Tj --263 TJm -(this) 14.396 Tj --264 TJm -(b) 4.9813 Tj -20 TJm -(ug;) 12.7322 Tj --271 TJm -(timely) 25.4644 Tj --264 TJm -(and) 14.386 Tj --264 TJm -(accurate) 33.1854 Tj --264 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj --264 TJm -(reports) 27.6661 Tj --264 TJm -(e) 4.4234 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(entually) 32.0995 Tj -72 370.413 Td -(lead) 16.5977 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(higher) 25.4544 Tj --250 TJm -(quality) 27.6761 Tj --250 TJm -(softw) 22.1369 Tj -10 TJm -(are.) 14.655 Tj --620 TJm -(Thanks.) 31.8205 Tj --620 TJm -(Julian) 23.8007 Tj --250 TJm -(Se) 9.9626 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(ard,) 15.2129 Tj --250 TJm -(6) 4.9813 Tj --250 TJm -(September) 42.61 Tj --250 TJm -(2010.) 22.4159 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 338.758 Td -(where) 24.3386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -98.831 338.758 Td -/F124_0 9.9626 Tf -(N) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -107.301 338.758 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(some) 21.031 Tj --250 TJm -(error) 19.3573 Tj --251 TJm -(code) 18.8094 Tj --250 TJm -(number) 30.4357 Tj -55 TJm -(.) 2.4907 Tj --621 TJm -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -230.81 338.758 Td -/F124_0 9.9626 Tf -(N) 5.9776 Tj --600 TJm -(==) 11.9551 Tj --600 TJm -(1007) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -284.608 338.758 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(also) 16.0497 Tj --251 TJm -(prints) 22.6948 Tj --250 TJm -(some) 21.031 Tj --250 TJm -(e) 4.4234 Tj -15 TJm -(xtra) 15.4918 Tj --250 TJm -(te) 7.193 Tj -15 TJm -(xt) 7.7509 Tj --250 TJm -(advising) 33.7633 Tj --251 TJm -(the) 12.1743 Tj --250 TJm -(reader) 24.8866 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(unreliable) 39.8404 Tj -72 326.803 Td -(memory) 33.2053 Tj --425 TJm -(is) 6.6451 Tj --424 TJm -(often) 20.4731 Tj --425 TJm -(associated) 40.9463 Tj --425 TJm -(with) 17.7135 Tj --424 TJm -(internal) 30.4357 Tj --425 TJm -(error) 19.3573 Tj --424 TJm -(1007.) 22.4159 Tj --834 TJm -(\(This) 21.031 Tj --425 TJm -(is) 6.6451 Tj --425 TJm -(a) 4.4234 Tj --424 TJm -(frequently-observ) 70.8241 Tj -15 TJm -(ed-phenomenon) 64.189 Tj --425 TJm -(with) 17.7135 Tj --425 TJm -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj -72 314.848 Td -(1.0.0/1.0.1\).) 48.4282 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 292.995 Td -/F124_0 9.9626 Tf -(exit\(3\)) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -116.334 292.995 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(then) 17.1556 Tj --250 TJm -(called.) 26.2813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 271.142 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --250 TJm -(a) 4.4234 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -95.093 271.142 Td -/F124_0 9.9626 Tf -(stdio) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -124.981 271.142 Td -/F122_0 9.9626 Tf -(-free) 18.7994 Tj --250 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(assertion) 35.417 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(ailures) 26.5603 Tj --250 TJm -(result) 22.1369 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(call) 14.386 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(function) 33.2053 Tj --250 TJm -(declared) 33.7433 Tj --250 TJm -(as:) 11.0684 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 244.078] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 259.62 Td -/F124_0 9.9626 Tf -(extern) 35.8654 Tj --426 TJm -(void) 23.9102 Tj --426 TJm -(bz_internal_error) 101.6185 Tj --426 TJm -(\() 5.9776 Tj --426 TJm -(int) 17.9327 Tj --426 TJm -(errcode) 41.8429 Tj --426 TJm -(\);) 11.9551 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 222.225 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --250 TJm -(rele) 14.9339 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ant) 12.1743 Tj --250 TJm -(code) 18.8094 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(passed) 26.5603 Tj --250 TJm -(as) 8.2988 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(parameter) 39.8305 Tj -55 TJm -(.) 2.4907 Tj --620 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --250 TJm -(should) 26.5703 Tj --250 TJm -(supply) 26.5703 Tj --250 TJm -(such) 18.2614 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(function.) 35.696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 200.372 Td -(In) 8.2988 Tj --294 TJm -(either) 22.6848 Tj --294 TJm -(case,) 19.6363 Tj --306 TJm -(once) 18.8094 Tj --294 TJm -(an) 9.4047 Tj --294 TJm -(assertion) 35.417 Tj --294 TJm -(f) 3.3175 Tj -10 TJm -(ailure) 22.6848 Tj --294 TJm -(has) 13.2801 Tj --295 TJm -(occurred,) 37.3398 Tj --305 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -306.541 200.372 Td -/F124_0 9.9626 Tf -(bz_stream) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -363.271 200.372 Td -/F122_0 9.9626 Tf -(records) 29.3199 Tj --294 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -20 TJm -(olv) 12.7322 Tj -15 TJm -(ed) 9.4047 Tj --294 TJm -(can) 13.8281 Tj --295 TJm -(be) 9.4047 Tj --294 TJm -(re) 7.7409 Tj -15 TJm -(g) 4.9813 Tj -5 TJm -(arded) 22.1269 Tj --294 TJm -(as) 8.2988 Tj --294 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -25 TJm -(alid.) 17.4346 Tj -72 188.417 Td -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --250 TJm -(should) 26.5703 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(attempt) 29.8878 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(resume) 28.772 Tj --250 TJm -(normal) 28.224 Tj --250 TJm -(operation) 37.6287 Tj --250 TJm -(with) 17.7135 Tj --250 TJm -(them.) 22.4159 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 166.564 Td -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --299 TJm -(may) 17.1556 Tj -65 TJm -(,) 2.4907 Tj --310 TJm -(of) 8.2988 Tj --299 TJm -(course,) 28.493 Tj --311 TJm -(change) 28.2141 Tj --298 TJm -(critical) 27.6661 Tj --299 TJm -(error) 19.3573 Tj --298 TJm -(handling) 34.8691 Tj --299 TJm -(to) 7.7509 Tj --298 TJm -(suit) 14.396 Tj --299 TJm -(your) 18.2614 Tj --298 TJm -(needs.) 25.1755 Tj --912 TJm -(As) 11.0684 Tj --298 TJm -(I) 3.3175 Tj --299 TJm -(said) 16.0497 Tj --298 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e,) 6.914 Tj --311 TJm -(critical) 27.6661 Tj --299 TJm -(errors) 23.2328 Tj --298 TJm -(indicate) 31.5416 Tj --299 TJm -(b) 4.9813 Tj -20 TJm -(ugs) 13.8381 Tj -72 154.609 Td -(in) 7.7509 Tj --263 TJm -(the) 12.1743 Tj --263 TJm -(library) 26.5603 Tj --263 TJm -(and) 14.386 Tj --263 TJm -(should) 26.5703 Tj --263 TJm -(not) 12.7322 Tj --263 TJm -(occur) 22.1269 Tj -55 TJm -(.) 2.4907 Tj --697 TJm -(All) 12.7322 Tj --263 TJm -("normal") 36.3535 Tj --263 TJm -(error) 19.3573 Tj --263 TJm -(situations) 38.1966 Tj --263 TJm -(are) 12.1643 Tj --263 TJm -(indicated) 36.5229 Tj --263 TJm -(via) 12.1743 Tj --263 TJm -(error) 19.3573 Tj --263 TJm -(return) 23.7907 Tj --263 TJm -(codes) 22.6848 Tj --263 TJm -(from) 19.3673 Tj --263 TJm -(functions,) 39.5714 Tj -72 142.653 Td -(and) 14.386 Tj --250 TJm -(can) 13.8281 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(reco) 17.1456 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(ered) 17.1456 Tj --250 TJm -(from.) 21.8579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 107.965 Td -/F116_0 20.6585 Tf -(3.8.) 34.4584 Tj --278 TJm -(Making) 71.1685 Tj --278 TJm -(a) 11.4861 Tj --278 TJm -(Windo) 63.1117 Tj -15 TJm -(ws) 27.5584 Tj --278 TJm -(DLL) 40.1601 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 86.112 Td -/F122_0 9.9626 Tf -(Ev) 11.0684 Tj -15 TJm -(erything) 33.2053 Tj --328 TJm -(related) 27.1082 Tj --327 TJm -(to) 7.7509 Tj --328 TJm -(W) 9.4047 Tj -40 TJm -(indo) 17.7135 Tj -25 TJm -(ws) 11.0684 Tj --328 TJm -(has) 13.2801 Tj --327 TJm -(been) 18.8094 Tj --328 TJm -(contrib) 28.224 Tj -20 TJm -(uted) 17.1556 Tj --328 TJm -(by) 9.9626 Tj --327 TJm -(Y) 7.193 Tj -110 TJm -(oshioka) 30.9936 Tj --328 TJm -(Tsuneo) 29.3299 Tj --328 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -378.139 86.112 Td -/F124_0 9.9626 Tf -(tsuneo@rr.iij4u.or.jp) 125.5288 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -503.668 86.112 Td -/F122_0 9.9626 Tf -(\),) 5.8082 Tj --347 TJm -(so) 8.8568 Tj --328 TJm -(you) 14.9439 Tj -72 74.157 Td -(should) 26.5703 Tj --250 TJm -(send) 18.2614 Tj --250 TJm -(your) 18.2614 Tj --250 TJm -(queries) 28.772 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(him) 15.5018 Tj --250 TJm -(\(b) 8.2988 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(perhaps) 30.9837 Tj --250 TJm -(Cc:) 13.8381 Tj --310 TJm -(me,) 14.6649 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -287.958 74.157 Td -/F124_0 9.9626 Tf -(jseward@bzip.org) 95.641 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -383.6 74.157 Td -/F122_0 9.9626 Tf -(\).) 5.8082 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 51.071 Td -(29) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 30 33 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -419.067 749.245 Td -/F122_0 9.9626 Tf -(Programming) 54.7943 Tj --250 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.556 749.245 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(My) 13.8381 Tj --367 TJm -(v) 4.9813 Tj -25 TJm -(ague) 18.8094 Tj --367 TJm -(understanding) 56.4481 Tj --367 TJm -(of) 8.2988 Tj --367 TJm -(what) 19.3673 Tj --368 TJm -(to) 7.7509 Tj --367 TJm -(do) 9.9626 Tj --367 TJm -(is:) 9.4147 Tj --544 TJm -(using) 21.589 Tj --367 TJm -(V) 7.193 Tj -60 TJm -(isual) 18.8194 Tj --367 TJm -(C++) 17.8829 Tj --367 TJm -(5.0,) 14.9439 Tj --397 TJm -(open) 19.3673 Tj --367 TJm -(the) 12.1743 Tj --367 TJm -(project) 27.6661 Tj --367 TJm -(\002le) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -432.966 710.037 Td -/F124_0 9.9626 Tf -(libbz2.dsp) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -492.742 710.037 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --396 TJm -(and) 14.386 Tj --368 TJm -(b) 4.9813 Tj -20 TJm -(uild.) 17.9925 Tj -72 698.082 Td -(That') 21.579 Tj -55 TJm -(s) 3.8755 Tj --250 TJm -(all.) 12.4533 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 676.164 Td -(If) 6.6351 Tj --284 TJm -(you) 14.9439 Tj --284 TJm -(can') 17.1456 Tj -18 TJm -(t) 2.7696 Tj --285 TJm -(open) 19.3673 Tj --284 TJm -(the) 12.1743 Tj --284 TJm -(project) 27.6661 Tj --284 TJm -(\002le) 12.7322 Tj --284 TJm -(for) 11.6164 Tj --285 TJm -(some) 21.031 Tj --284 TJm -(reason,) 28.493 Tj --293 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --284 TJm -(a) 4.4234 Tj --284 TJm -(ne) 9.4047 Tj -25 TJm -(w) 7.193 Tj --284 TJm -(one,) 16.8766 Tj --293 TJm -(naming) 29.8878 Tj --284 TJm -(these) 20.4731 Tj --284 TJm -(\002les:) 19.3773 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -424.505 676.164 Td -/F124_0 9.9626 Tf -(blocksort.c) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -490.259 676.164 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -495.666 676.164 Td -/F124_0 9.9626 Tf -(bzlib.c) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -537.509 676.164 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 664.209 Td -/F124_0 9.9626 Tf -(compress.c) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -131.776 664.209 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -136.436 664.209 Td -/F124_0 9.9626 Tf -(crctable.c) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -196.211 664.209 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -200.871 664.209 Td -/F124_0 9.9626 Tf -(decompress.c) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -272.602 664.209 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -277.262 664.209 Td -/F124_0 9.9626 Tf -(huffman.c) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -331.06 664.209 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -335.72 664.209 Td -/F124_0 9.9626 Tf -(randtable.c) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -403.562 664.209 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -420.037 664.209 Td -/F124_0 9.9626 Tf -(libbz2.def) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -479.812 664.209 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --593 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --210 TJm -(will) 15.5018 Tj --209 TJm -(also) 16.0497 Tj -72 652.254 Td -(need) 18.8094 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(name) 21.579 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(header) 26.5503 Tj --250 TJm -(\002les) 16.6077 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -190.415 652.254 Td -/F124_0 9.9626 Tf -(bzlib.h) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -234.749 652.254 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -251.625 652.254 Td -/F124_0 9.9626 Tf -(bzlib_private.h) 89.6634 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -341.289 652.254 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 630.336 Td -(If) 6.6351 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(don') 18.2614 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(VC++,) 27.5665 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(may) 17.1556 Tj --250 TJm -(need) 18.8094 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(de\002ne) 24.3486 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(proprocessor) 51.4568 Tj --250 TJm -(symbol) 29.3399 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -363.634 630.336 Td -/F124_0 9.9626 Tf -(_WIN32) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -399.5 630.336 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 608.418 Td -(Finally) 28.234 Tj -65 TJm -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.568 608.418 Td -/F124_0 9.9626 Tf -(dlltest.c) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -160.856 608.418 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(sample) 28.224 Tj --250 TJm -(program) 33.7533 Tj --250 TJm -(using) 21.589 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(DLL.) 21.8579 Tj --500 TJm -(It) 6.0871 Tj --250 TJm -(has) 13.2801 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(project) 27.6661 Tj --250 TJm -(\002le,) 15.2229 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -388.58 608.418 Td -/F124_0 9.9626 Tf -(dlltest.dsp) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -454.334 608.418 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 586.501 Td -(If) 6.6351 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(just) 14.396 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(mak) 17.1556 Tj -10 TJm -(e\002le) 17.1556 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(V) 7.193 Tj -60 TJm -(isual) 18.8194 Tj --250 TJm -(C,) 9.1357 Tj --250 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(look) 17.7135 Tj --250 TJm -(at) 7.193 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -292.212 586.501 Td -/F124_0 9.9626 Tf -(makefile.msc) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -363.943 586.501 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 564.583 Td -(Be) 11.0684 Tj --291 TJm -(a) 4.4234 Tj -15 TJm -(w) 7.193 Tj -10 TJm -(are) 12.1643 Tj --291 TJm -(that) 14.9439 Tj --291 TJm -(if) 6.0871 Tj --291 TJm -(you) 14.9439 Tj --291 TJm -(compile) 32.0995 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -192.07 564.583 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -224.857 564.583 Td -/F122_0 9.9626 Tf -(itself) 19.9252 Tj --291 TJm -(on) 9.9626 Tj --291 TJm -(W) 9.4047 Tj -40 TJm -(in32,) 20.2042 Tj --301 TJm -(you) 14.9439 Tj --291 TJm -(must) 19.3773 Tj --291 TJm -(set) 11.0684 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -346.842 564.583 Td -/F124_0 9.9626 Tf -(BZ_UNIX) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -391.584 564.583 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --291 TJm -(0) 4.9813 Tj --291 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -427.4 564.583 Td -/F124_0 9.9626 Tf -(BZ_LCCWIN32) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -496.052 564.583 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --291 TJm -(1,) 7.472 Tj --301 TJm -(in) 7.7509 Tj --291 TJm -(the) 12.1743 Tj -72 552.628 Td -(\002le) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -87.223 552.628 Td -/F124_0 9.9626 Tf -(bzip2.c) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -129.066 552.628 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(before) 25.4445 Tj --250 TJm -(compiling.) 42.899 Tj --310 TJm -(Otherwise) 40.9463 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(resulting) 34.8691 Tj --250 TJm -(binary) 25.4544 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(on') 13.2801 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ork) 13.2801 Tj --250 TJm -(correctly) 35.4071 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 530.71 Td -(I) 3.3175 Tj --250 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(en') 12.7222 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(tried) 18.2614 Tj --250 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(stuf) 14.9439 Tj -25 TJm -(f) 3.3175 Tj --250 TJm -(myself,) 29.6088 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(looks) 21.589 Tj --250 TJm -(plausible.) 38.4656 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(30) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 31 34 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 701.916 Td -/F116_0 24.7902 Tf -(4.) 20.675 Tj --278 TJm -(Miscellanea) 139.1722 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 656.35 Td -/F116_0 17.2154 Tf -(T) 10.5186 Tj -80 TJm -(ab) 20.0904 Tj -10 TJm -(le) 14.3576 Tj --278 TJm -(of) 16.2513 Tj --278 TJm -(Contents) 74.5943 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 635.788 Td -/F122_0 9.9626 Tf -(4.1.) 14.9439 Tj --310 TJm -(Limitations) 45.9475 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(compressed) 47.0334 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(format) 26.5603 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -269.154 635.788 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 635.788 Td -/F122_0 9.9626 Tf -(31) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 623.832 Td -(4.2.) 14.9439 Tj --310 TJm -(Portability) 42.0721 Tj --250 TJm -(issues) 23.8007 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -172.03 623.832 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 623.832 Td -/F122_0 9.9626 Tf -(32) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 611.877 Td -(4.3.) 14.9439 Tj --310 TJm -(Reporting) 39.8504 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ugs) 13.8381 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -166.115 611.877 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 611.877 Td -/F122_0 9.9626 Tf -(32) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 599.922 Td -(4.4.) 14.9439 Tj --310 TJm -(Did) 14.9439 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(get) 12.1743 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(right) 18.8194 Tj --250 TJm -(package?) 37.0609 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -229.109 599.922 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 599.922 Td -/F122_0 9.9626 Tf -(33) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 587.967 Td -(4.5.) 14.9439 Tj --310 TJm -(Further) 29.3299 Tj --250 TJm -(Reading) 33.2053 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -170.361 587.967 Td -/F230_0 9.9626 Tf -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --166 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj --167 TJm -(:) 2.7676 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -506.127 587.967 Td -/F122_0 9.9626 Tf -(34) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 556.086 Td -(These) 23.7907 Tj --250 TJm -(are) 12.1643 Tj --250 TJm -(just) 14.396 Tj --250 TJm -(some) 21.031 Tj --250 TJm -(random) 30.4357 Tj --250 TJm -(thoughts) 34.3212 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(mine.) 22.4159 Tj --620 TJm -(Y) 7.193 Tj -110 TJm -(our) 13.2801 Tj --250 TJm -(mileage) 31.5416 Tj --250 TJm -(may) 17.1556 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(ary) 12.7222 Tj -65 TJm -(.) 2.4907 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 521.334 Td -/F116_0 20.6585 Tf -(4.1.) 34.4584 Tj --278 TJm -(Limitations) 110.1924 Tj --278 TJm -(of) 19.5016 Tj --278 TJm -(the) 30.9878 Tj --278 TJm -(compressed) 121.6992 Tj --278 TJm -(\002le) 29.8515 Tj --278 TJm -(f) 6.8793 Tj -20 TJm -(ormat) 57.3893 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 499.416 Td -/F124_0 9.9626 Tf -(bzip2-1.0.X) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -137.753 499.416 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -143.405 499.416 Td -/F124_0 9.9626 Tf -(0.9.5) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -176.453 499.416 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -194 499.416 Td -/F124_0 9.9626 Tf -(0.9.0) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -227.048 499.416 Td -/F122_0 9.9626 Tf -(use) 13.2801 Tj --317 TJm -(e) 4.4234 Tj -15 TJm -(xactly) 24.3486 Tj --318 TJm -(the) 12.1743 Tj --317 TJm -(same) 20.4731 Tj --317 TJm -(\002le) 12.7322 Tj --317 TJm -(format) 26.5603 Tj --317 TJm -(as) 8.2988 Tj --318 TJm -(the) 12.1743 Tj --317 TJm -(original) 30.9936 Tj --317 TJm -(v) 4.9813 Tj -15 TJm -(ersion,) 26.8392 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -455.801 499.416 Td -/F124_0 9.9626 Tf -(bzip2-0.1) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -509.599 499.416 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1024 TJm -(This) 17.7135 Tj -72 487.461 Td -(decision) 33.2053 Tj --222 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --222 TJm -(made) 21.579 Tj --222 TJm -(in) 7.7509 Tj --221 TJm -(the) 12.1743 Tj --222 TJm -(interests) 33.2053 Tj --222 TJm -(of) 8.2988 Tj --222 TJm -(stability) 32.1095 Tj -65 TJm -(.) 2.4907 Tj --601 TJm -(Creating) 34.3112 Tj --222 TJm -(yet) 12.1743 Tj --222 TJm -(another) 29.8778 Tj --222 TJm -(incompatible) 52.0247 Tj --221 TJm -(compressed) 47.0334 Tj --222 TJm -(\002le) 12.7322 Tj --222 TJm -(format) 26.5603 Tj --222 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --222 TJm -(create) 23.7807 Tj -72 475.505 Td -(further) 27.1082 Tj --250 TJm -(confusion) 39.2925 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(disruption) 40.4083 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(users.) 22.9638 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 453.588 Td -(Ne) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ertheless,) 37.3498 Tj --234 TJm -(this) 14.396 Tj --229 TJm -(is) 6.6451 Tj --230 TJm -(not) 12.7322 Tj --229 TJm -(a) 4.4234 Tj --230 TJm -(painless) 32.0995 Tj --229 TJm -(decision.) 35.696 Tj --606 TJm -(De) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(elopment) 37.0808 Tj --230 TJm -(w) 7.193 Tj -10 TJm -(ork) 13.2801 Tj --230 TJm -(sinc) 16.0497 Tj -1 TJm -(e) 4.4234 Tj --230 TJm -(the) 12.1743 Tj --230 TJm -(release) 27.6562 Tj --229 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -407.317 453.588 Td -/F124_0 9.9626 Tf -(bzip2-0.1) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -463.402 453.588 Td -/F122_0 9.9626 Tf -(in) 7.7509 Tj --230 TJm -(August) 28.782 Tj --229 TJm -(1997) 19.9252 Tj --230 TJm -(has) 13.2801 Tj -72 441.632 Td -(sho) 13.8381 Tj -25 TJm -(wn) 12.1743 Tj --226 TJm -(comple) 29.3299 Tj -15 TJm -(xities) 21.589 Tj --226 TJm -(in) 7.7509 Tj --225 TJm -(the) 12.1743 Tj --226 TJm -(\002le) 12.7322 Tj --226 TJm -(format) 26.5603 Tj --226 TJm -(which) 24.3486 Tj --226 TJm -(slo) 11.6264 Tj -25 TJm -(w) 7.193 Tj --225 TJm -(do) 9.9626 Tj -25 TJm -(wn) 12.1743 Tj --226 TJm -(decompression) 59.7656 Tj --226 TJm -(and,) 16.8766 Tj --231 TJm -(in) 7.7509 Tj --226 TJm -(retrospect,) 41.7732 Tj --230 TJm -(are) 12.1643 Tj --226 TJm -(unnecessary) 48.6872 Tj -65 TJm -(.) 2.4907 Tj --604 TJm -(These) 23.7907 Tj --226 TJm -(are:) 14.9339 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 409.752 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(The) 15.4918 Tj --287 TJm -(run-length) 41.5042 Tj --287 TJm -(encoder) 31.5316 Tj -40 TJm -(,) 2.4907 Tj --297 TJm -(which) 24.3486 Tj --287 TJm -(is) 6.6451 Tj --288 TJm -(the) 12.1743 Tj --287 TJm -(\002rst) 15.5018 Tj --287 TJm -(of) 8.2988 Tj --287 TJm -(the) 12.1743 Tj --288 TJm -(compression) 50.3609 Tj --287 TJm -(transformations,) 65.0259 Tj --296 TJm -(is) 6.6451 Tj --288 TJm -(entirely) 30.4357 Tj --287 TJm -(irrele) 21.0211 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ant.) 14.6649 Tj --843 TJm -(The) 15.4918 Tj --288 TJm -(original) 30.9936 Tj -81.963 397.797 Td -(purpose) 31.5416 Tj --322 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --322 TJm -(to) 7.7509 Tj --322 TJm -(protect) 27.6661 Tj --321 TJm -(the) 12.1743 Tj --322 TJm -(sorting) 27.6761 Tj --322 TJm -(algorithm) 38.7446 Tj --322 TJm -(from) 19.3673 Tj --322 TJm -(the) 12.1743 Tj --322 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj --322 TJm -(w) 7.193 Tj -10 TJm -(orst) 14.9439 Tj --321 TJm -(case) 17.1456 Tj --322 TJm -(input:) 23.2527 Tj --454 TJm -(a) 4.4234 Tj --322 TJm -(string) 22.6948 Tj --322 TJm -(of) 8.2988 Tj --322 TJm -(repeated) 33.7433 Tj --321 TJm -(symbols.) 35.706 Tj --1052 TJm -(But) 14.396 Tj -81.963 385.842 Td -(algorithm) 38.7446 Tj --229 TJm -(steps) 19.9252 Tj --230 TJm -(Q6a) 16.5977 Tj --229 TJm -(and) 14.386 Tj --230 TJm -(Q6b) 17.1556 Tj --229 TJm -(in) 7.7509 Tj --230 TJm -(t) 2.7696 Tj -1 TJm -(he) 9.4047 Tj --230 TJm -(original) 30.9936 Tj --229 TJm -(Burro) 23.2427 Tj -25 TJm -(ws-Wheeler) 48.1293 Tj --230 TJm -(technical) 35.965 Tj --229 TJm -(report) 23.7907 Tj --230 TJm -(\(SRC-124\)) 43.7259 Tj --229 TJm -(sho) 13.8381 Tj -25 TJm -(w) 7.193 Tj --229 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --230 TJm -(repeats) 28.2141 Tj --229 TJm -(can) 13.8281 Tj --230 TJm -(be) 9.4047 Tj -81.963 373.886 Td -(handled) 31.5416 Tj --250 TJm -(without) 30.4457 Tj --250 TJm -(dif) 11.0684 Tj -25 TJm -(\002culty) 25.4644 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(block) 22.1369 Tj --250 TJm -(sorting.) 30.1668 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 351.969 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(The) 15.4918 Tj --315 TJm -(randomisation) 57.006 Tj --314 TJm -(mechanism) 45.3796 Tj --315 TJm -(doesn') 26.5603 Tj -18 TJm -(t) 2.7696 Tj --314 TJm -(really) 22.6848 Tj --315 TJm -(need) 18.8094 Tj --315 TJm -(to) 7.7509 Tj --314 TJm -(be) 9.4047 Tj --315 TJm -(there.) 22.4059 Tj --1007 TJm -(Udi) 14.9439 Tj --315 TJm -(Manber) 30.9837 Tj --315 TJm -(and) 14.386 Tj --314 TJm -(Gene) 21.0211 Tj --315 TJm -(Myers) 25.4544 Tj --314 TJm -(published) 38.7446 Tj --315 TJm -(a) 4.4234 Tj --315 TJm -(suf) 12.1743 Tj -25 TJm -(\002x) 10.5205 Tj -81.963 340.013 Td -(array) 20.4632 Tj --266 TJm -(construction) 49.2551 Tj --266 TJm -(algorithm) 38.7446 Tj --266 TJm -(a) 4.4234 Tj --266 TJm -(fe) 7.7409 Tj -25 TJm -(w) 7.193 Tj --266 TJm -(years) 21.0211 Tj --266 TJm -(back,) 21.3 Tj --269 TJm -(which) 24.3486 Tj --266 TJm -(can) 13.8281 Tj --266 TJm -(be) 9.4047 Tj --266 TJm -(emplo) 24.9065 Tj -10 TJm -(yed) 14.386 Tj --266 TJm -(to) 7.7509 Tj --266 TJm -(sort) 14.9439 Tj --266 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --266 TJm -(block,) 24.6275 Tj --270 TJm -(no) 9.9626 Tj --266 TJm -(matter) 25.4544 Tj --266 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --266 TJm -(repetiti) 28.224 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e,) 6.914 Tj -81.963 328.058 Td -(in) 7.7509 Tj --257 TJm -(O\(N) 17.7035 Tj --257 TJm -(log) 12.7322 Tj --257 TJm -(N\)) 10.5105 Tj --258 TJm -(time.) 20.2042 Tj --663 TJm -(Subsequent) 45.9375 Tj --257 TJm -(w) 7.193 Tj -10 TJm -(ork) 13.2801 Tj --257 TJm -(by) 9.9626 Tj --257 TJm -(K) 7.193 Tj -15 TJm -(unihik) 25.4644 Tj -10 TJm -(o) 4.9813 Tj --257 TJm -(Sadakane) 38.1767 Tj --258 TJm -(has) 13.2801 Tj --257 TJm -(produced) 37.0708 Tj --257 TJm -(a) 4.4234 Tj --257 TJm -(deri) 15.4918 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ati) 9.9626 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --257 TJm -(O\(N) 17.7035 Tj --257 TJm -(\(log) 16.0497 Tj --258 TJm -(N\)^2\)) 23.4818 Tj --257 TJm -(algorithm) 38.7446 Tj -81.963 316.103 Td -(which) 24.3486 Tj --250 TJm -(usually) 28.782 Tj --250 TJm -(outperforms) 48.6972 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(Manber) 30.9837 Tj -20 TJm -(-Myers) 28.772 Tj --250 TJm -(algorithm.) 41.2352 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 294.185 Td -(I) 3.3175 Tj --274 TJm -(could) 22.1369 Tj --274 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --274 TJm -(changed) 33.1954 Tj --274 TJm -(to) 7.7509 Tj --274 TJm -(Sadakane') 41.4942 Tj -55 TJm -(s) 3.8755 Tj --274 TJm -(algorithm,) 41.2352 Tj --280 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --274 TJm -(I) 3.3175 Tj --274 TJm -(\002nd) 15.5018 Tj --274 TJm -(it) 5.5392 Tj --274 TJm -(to) 7.7509 Tj --274 TJm -(be) 9.4047 Tj --274 TJm -(slo) 11.6264 Tj -25 TJm -(wer) 14.9339 Tj --274 TJm -(than) 17.1556 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -391.407 294.185 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -421.295 294.185 Td -/F122_0 9.9626 Tf -(') 3.3175 Tj -55 TJm -(s) 3.8755 Tj --274 TJm -(e) 4.4234 Tj -15 TJm -(xisting) 27.1282 Tj --274 TJm -(algorithm) 38.7446 Tj --274 TJm -(for) 11.6164 Tj --274 TJm -(most) 19.3773 Tj -81.963 282.23 Td -(inputs,) 26.8492 Tj --399 TJm -(and) 14.386 Tj --369 TJm -(the) 12.1743 Tj --369 TJm -(randomisation) 57.006 Tj --370 TJm -(me) 12.1743 Tj -1 TJm -(chanism) 33.2053 Tj --370 TJm -(protects) 31.5416 Tj --369 TJm -(adequately) 43.158 Tj --369 TJm -(ag) 9.4047 Tj -5 TJm -(ainst) 18.8194 Tj --369 TJm -(bad) 14.386 Tj --369 TJm -(cases.) 23.5117 Tj --1336 TJm -(I) 3.3175 Tj --369 TJm -(didn') 21.031 Tj -18 TJm -(t) 2.7696 Tj --369 TJm -(think) 20.4831 Tj --369 TJm -(it) 5.5392 Tj --369 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --369 TJm -(a) 4.4234 Tj --370 TJm -(good) 19.9252 Tj -81.963 270.275 Td -(tradeof) 28.2141 Tj -25 TJm -(f) 3.3175 Tj --282 TJm -(to) 7.7509 Tj --283 TJm -(mak) 17.1556 Tj -10 TJm -(e.) 6.914 Tj --815 TJm -(P) 5.5392 Tj -15 TJm -(artly) 18.2614 Tj --282 TJm -(this) 14.396 Tj --282 TJm -(is) 6.6451 Tj --283 TJm -(due) 14.386 Tj --282 TJm -(to) 7.7509 Tj --283 TJm -(the) 12.1743 Tj --282 TJm -(f) 3.3175 Tj -10 TJm -(act) 11.6164 Tj --283 TJm -(that) 14.9439 Tj --282 TJm -(I) 3.3175 Tj --283 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --282 TJm -(not) 12.7322 Tj --282 TJm -(\003ooded) 29.8878 Tj --283 TJm -(with) 17.7135 Tj --282 TJm -(email) 22.1369 Tj --283 TJm -(complaints) 43.7259 Tj --282 TJm -(about) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -479.557 270.275 Td -/F124_0 9.9626 Tf -(bzip2-0.1) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -533.355 270.275 Td -/F122_0 9.9626 Tf -(') 3.3175 Tj -55 TJm -(s) 3.8755 Tj -81.963 258.32 Td -(performance) 50.341 Tj --250 TJm -(on) 9.9626 Tj --250 TJm -(repetiti) 28.224 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(data,) 19.0883 Tj --250 TJm -(so) 8.8568 Tj --250 TJm -(perhaps) 30.9837 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(isn') 14.9439 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(problem) 33.2053 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(real) 14.9339 Tj --250 TJm -(inputs.) 26.8492 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 236.402 Td -(Probably) 35.9749 Tj --314 TJm -(the) 12.1743 Tj --315 TJm -(best) 16.0497 Tj --314 TJm -(long-term) 39.2925 Tj --314 TJm -(solution,) 34.6001 Tj --331 TJm -(and) 14.386 Tj --314 TJm -(the) 12.1743 Tj --314 TJm -(one) 14.386 Tj --315 TJm -(I) 3.3175 Tj --314 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --314 TJm -(incorporated) 50.351 Tj --315 TJm -(into) 15.5018 Tj --314 TJm -(0.9.5) 19.9252 Tj --314 TJm -(and) 14.386 Tj --315 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e,) 6.914 Tj --330 TJm -(is) 6.6451 Tj --315 TJm -(to) 7.7509 Tj --314 TJm -(use) 13.2801 Tj --314 TJm -(the) 12.1743 Tj --315 TJm -(e) 4.4234 Tj -15 TJm -(xisting) 27.1282 Tj -81.963 224.447 Td -(sorting) 27.6761 Tj --206 TJm -(algorithm) 38.7446 Tj --206 TJm -(initially) 31.0036 Tj -65 TJm -(,) 2.4907 Tj --215 TJm -(and) 14.386 Tj --207 TJm -(f) 3.3175 Tj -10 TJm -(all) 9.9626 Tj --206 TJm -(back) 18.8094 Tj --206 TJm -(to) 7.7509 Tj --206 TJm -(a) 4.4234 Tj --207 TJm -(O\(N) 17.7035 Tj --206 TJm -(\(log) 16.0497 Tj --206 TJm -(N\)^2\)) 23.4818 Tj --206 TJm -(algorithm) 38.7446 Tj --206 TJm -(if) 6.0871 Tj --207 TJm -(the) 12.1743 Tj --206 TJm -(standard) 33.7533 Tj --206 TJm -(algorithm) 38.7446 Tj --206 TJm -(gets) 16.0497 Tj --206 TJm -(into) 15.5018 Tj --207 TJm -(dif) 11.0684 Tj -25 TJm -(\002culties.) 34.0422 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 202.529 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(The) 15.4918 Tj --321 TJm -(compressed) 47.0334 Tj --322 TJm -(\002le) 12.7322 Tj --321 TJm -(format) 26.5603 Tj --321 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --322 TJm -(ne) 9.4047 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --321 TJm -(designed) 35.417 Tj --321 TJm -(to) 7.7509 Tj --322 TJm -(be) 9.4047 Tj --321 TJm -(handled) 31.5416 Tj --321 TJm -(by) 9.9626 Tj --322 TJm -(a) 4.4234 Tj --321 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --339 TJm -(and) 14.386 Tj --322 TJm -(I) 3.3175 Tj --321 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --321 TJm -(had) 14.386 Tj --322 TJm -(to) 7.7509 Tj --321 TJm -(jump) 20.4831 Tj --321 TJm -(though) 27.6761 Tj --322 TJm -(some) 21.031 Tj -81.963 190.574 Td -(hoops) 23.8007 Tj --299 TJm -(t) 2.7696 Tj -1 TJm -(o) 4.9813 Tj --299 TJm -(produce) 32.0895 Tj --299 TJm -(an) 9.4047 Tj --298 TJm -(ef) 7.7409 Tj -25 TJm -(\002cient) 24.9065 Tj --299 TJm -(implementation) 62.5452 Tj --298 TJm -(of) 8.2988 Tj --299 TJm -(decompression.) 62.2563 Tj --911 TJm -(It') 9.4047 Tj -55 TJm -(s) 3.8755 Tj --298 TJm -(a) 4.4234 Tj --299 TJm -(bit) 10.5205 Tj --298 TJm -(hairy) 20.4731 Tj -65 TJm -(.) 2.4907 Tj --912 TJm -(T) 6.0871 Tj -35 TJm -(ry) 8.2988 Tj --298 TJm -(passing) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -468.269 190.574 Td -/F124_0 9.9626 Tf -(decompress.c) 71.7307 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 178.619 Td -/F122_0 9.9626 Tf -(through) 30.9936 Tj --289 TJm -(the) 12.1743 Tj --289 TJm -(C) 6.6451 Tj --289 TJm -(preprocessor) 50.8989 Tj --289 TJm -(and) 14.386 Tj --289 TJm -(you') 18.2614 Tj -10 TJm -(ll) 5.5392 Tj --289 TJm -(see) 12.7222 Tj --289 TJm -(what) 19.3673 Tj --289 TJm -(I) 3.3175 Tj --289 TJm -(mean.) 24.0696 Tj --854 TJm -(Much) 23.2427 Tj --289 TJm -(of) 8.2988 Tj --289 TJm -(this) 14.396 Tj --289 TJm -(comple) 29.3299 Tj -15 TJm -(xity) 15.5018 Tj --289 TJm -(could) 22.1369 Tj --289 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --289 TJm -(been) 18.8094 Tj --289 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -20 TJm -(oided) 22.1369 Tj --289 TJm -(if) 6.0871 Tj --289 TJm -(the) 12.1743 Tj -81.963 166.663 Td -(compressed) 47.0334 Tj --250 TJm -(size) 15.4918 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(each) 18.2515 Tj --250 TJm -(block) 22.1369 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --250 TJm -(recorded) 34.8492 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(data) 16.5977 Tj --250 TJm -(stream.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 144.746 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(An) 12.1743 Tj --250 TJm -(Adler) 22.6848 Tj -20 TJm -(-32) 13.2801 Tj --250 TJm -(checksum,) 42.3311 Tj --250 TJm -(rather) 23.2328 Tj --250 TJm -(than) 17.1556 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(CRC32) 29.8978 Tj --250 TJm -(checksum,) 42.3311 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(aster) 18.8094 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(compute.) 36.8018 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 122.828 Td -(It) 6.0871 Tj --349 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --349 TJm -(be) 9.4047 Tj --349 TJm -(f) 3.3175 Tj -10 TJm -(air) 10.5105 Tj --348 TJm -(to) 7.7509 Tj --349 TJm -(say) 13.2801 Tj --349 TJm -(that) 14.9439 Tj --349 TJm -(the) 12.1743 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -201.979 122.828 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -235.342 122.828 Td -/F122_0 9.9626 Tf -(format) 26.5603 Tj --349 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --349 TJm -(frozen) 25.4445 Tj --348 TJm -(before) 25.4445 Tj --349 TJm -(I) 3.3175 Tj --349 TJm -(properly) 33.7533 Tj --349 TJm -(and) 14.386 Tj --349 TJm -(fully) 18.8194 Tj --349 TJm -(understood) 44.2738 Tj --348 TJm -(the) 12.1743 Tj --349 TJm -(performance) 50.341 Tj -72 110.873 Td -(consequences) 54.7744 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(doing) 22.6948 Tj --250 TJm -(so.) 11.3474 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 88.955 Td -(Impro) 24.3486 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(ements) 28.224 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(I) 3.3175 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(as) 8.2988 Tj --250 TJm -(able) 16.5977 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(incorporate) 45.3697 Tj --250 TJm -(into) 15.5018 Tj --250 TJm -(0.9.0,) 22.4159 Tj --250 TJm -(despite) 28.224 Tj --250 TJm -(using) 21.589 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(same) 20.4731 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(format,) 29.0509 Tj --250 TJm -(are:) 14.9339 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(31) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 32 35 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -498.728 749.245 Td -/F122_0 9.9626 Tf -(Miscellanea) 48.1393 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -74.491 710.037 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(Single) 25.4644 Tj --234 TJm -(array) 20.4632 Tj --234 TJm -(implementation) 62.5452 Tj --235 TJm -(of) 8.2988 Tj --234 TJm -(the) 12.1743 Tj --234 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(erse) 16.0398 Tj --234 TJm -(BWT) 22.1369 Tj -74 TJm -(.) 2.4907 Tj --469 TJm -(This) 17.7135 Tj --234 TJm -(signi\002cantly) 49.2651 Tj --235 TJm -(speeds) 26.5603 Tj --234 TJm -(up) 9.9626 Tj --234 TJm -(decompression,) 62.2563 Tj --237 TJm -(presumably) 46.4855 Tj --235 TJm -(because) 31.5316 Tj -81.963 698.082 Td -(it) 5.5392 Tj --250 TJm -(reduces) 30.4258 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(number) 30.4357 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(cache) 22.6749 Tj --250 TJm -(misses.) 29.0609 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 676.164 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(F) 5.5392 Tj -15 TJm -(aster) 18.8094 Tj --338 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(erse) 16.0398 Tj --338 TJm -(MTF) 20.4831 Tj --338 TJm -(transform) 38.7346 Tj --338 TJm -(for) 11.6164 Tj --339 TJm -(lar) 10.5105 Tj -18 TJm -(ge) 9.4047 Tj --338 TJm -(MTF) 20.4831 Tj --338 TJm -(v) 4.9813 Tj -25 TJm -(alues.) 22.9638 Tj --574 TJm -(The) 15.4918 Tj --338 TJm -(ne) 9.4047 Tj -25 TJm -(w) 7.193 Tj --339 TJm -(implementation) 62.5452 Tj --338 TJm -(is) 6.6451 Tj --338 TJm -(based) 22.6848 Tj --338 TJm -(on) 9.9626 Tj --338 TJm -(the) 12.1743 Tj --338 TJm -(notion) 25.4644 Tj --339 TJm -(of) 8.2988 Tj --338 TJm -(sliding) 27.1282 Tj -81.963 664.209 Td -(blocks) 26.0123 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(v) 4.9813 Tj -25 TJm -(alues.) 22.9638 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 642.291 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -82.461 642.291 Td -/F124_0 9.9626 Tf -(bzip2-0.9.0) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -151.137 642.291 Td -/F122_0 9.9626 Tf -(no) 9.9626 Tj -25 TJm -(w) 7.193 Tj --293 TJm -(reads) 21.0211 Tj --294 TJm -(and) 14.386 Tj --293 TJm -(writes) 24.3486 Tj --293 TJm -(\002les) 16.6077 Tj --294 TJm -(with) 17.7135 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -279.657 642.291 Td -/F124_0 9.9626 Tf -(fread) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -312.467 642.291 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -329.776 642.291 Td -/F124_0 9.9626 Tf -(fwrite) 35.8654 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -365.642 642.291 Td -/F122_0 9.9626 Tf -(;) 2.7696 Tj --315 TJm -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --293 TJm -(0.1) 12.4533 Tj --294 TJm -(used) 18.2614 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -440.214 642.291 Td -/F124_0 9.9626 Tf -(putc) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -467.047 642.291 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -484.356 642.291 Td -/F124_0 9.9626 Tf -(getc) 23.9102 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -508.266 642.291 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --880 TJm -(Duh!) 20.4731 Tj -81.963 630.336 Td -(W) 9.4047 Tj -80 TJm -(ell,) 12.4533 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(li) 5.5392 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(learn.) 22.4059 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 608.418 Td -(Further) 29.3299 Tj --304 TJm -(ahead,) 25.7234 Tj --318 TJm -(it) 5.5392 Tj --305 TJm -(w) 7.193 Tj -10 TJm -(ould) 17.7135 Tj --304 TJm -(be) 9.4047 Tj --305 TJm -(nice) 16.5977 Tj --304 TJm -(to) 7.7509 Tj --305 TJm -(be) 9.4047 Tj --304 TJm -(able) 16.5977 Tj --304 TJm -(to) 7.7509 Tj --305 TJm -(do) 9.9626 Tj --304 TJm -(random) 30.4357 Tj --305 TJm -(access) 25.4445 Tj --304 TJm -(into) 15.5018 Tj --305 TJm -(\002les.) 19.0983 Tj --946 TJm -(This) 17.7135 Tj --305 TJm -(will) 15.5018 Tj --304 TJm -(require) 28.2141 Tj --304 TJm -(some) 21.031 Tj --305 TJm -(careful) 27.6562 Tj --304 TJm -(design) 26.0123 Tj --305 TJm -(of) 8.2988 Tj -72 596.463 Td -(compressed) 47.0334 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(formats.) 32.9264 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 561.71 Td -/F116_0 20.6585 Tf -(4.2.) 34.4584 Tj --278 TJm -(P) 13.7792 Tj -40 TJm -(or) 20.6585 Tj --20 TJm -(tability) 66.5823 Tj --278 TJm -(issues) 64.3099 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 539.792 Td -/F122_0 9.9626 Tf -(After) 21.0211 Tj --250 TJm -(some) 21.031 Tj --250 TJm -(consideration,) 56.1691 Tj --250 TJm -(I) 3.3175 Tj --250 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(decided) 30.9837 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(use) 13.2801 Tj --250 TJm -(GNU) 21.579 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -303.231 539.792 Td -/F124_0 9.9626 Tf -(autoconf) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -353.542 539.792 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --250 TJm -(con\002gure) 37.6287 Tj --250 TJm -(0.9.5) 19.9252 Tj --250 TJm -(or) 8.2988 Tj --250 TJm -(1.0.) 14.9439 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 517.875 Td -/F124_0 9.9626 Tf -(autoconf) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -119.821 517.875 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --502 TJm -(admirable) 39.8404 Tj --452 TJm -(and) 14.386 Tj --452 TJm -(w) 7.193 Tj -10 TJm -(onderful) 33.7533 Tj --452 TJm -(though) 27.6761 Tj --452 TJm -(it) 5.5392 Tj --452 TJm -(is,) 9.1357 Tj --502 TJm -(mainly) 27.6761 Tj --452 TJm -(assists) 25.4644 Tj --452 TJm -(with) 17.7135 Tj --452 TJm -(portability) 41.5142 Tj --452 TJm -(problems) 37.0808 Tj --452 TJm -(between) 33.1954 Tj --452 TJm -(Unix-lik) 33.7633 Tj -10 TJm -(e) 4.4234 Tj -72 505.92 Td -(platforms.) 40.6773 Tj --1398 TJm -(But) 14.396 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -144.784 505.92 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -178.455 505.92 Td -/F122_0 9.9626 Tf -(doesn') 26.5603 Tj -18 TJm -(t) 2.7696 Tj --380 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --379 TJm -(much) 22.1369 Tj --380 TJm -(in) 7.7509 Tj --380 TJm -(the) 12.1743 Tj --379 TJm -(w) 7.193 Tj -10 TJm -(ay) 9.4047 Tj --380 TJm -(of) 8.2988 Tj --380 TJm -(portability) 41.5142 Tj --379 TJm -(problems) 37.0808 Tj --380 TJm -(on) 9.9626 Tj --380 TJm -(Unix;) 22.6948 Tj --444 TJm -(most) 19.3773 Tj --380 TJm -(of) 8.2988 Tj --380 TJm -(the) 12.1743 Tj --379 TJm -(dif) 11.0684 Tj -25 TJm -(\002culties) 31.5516 Tj -72 493.964 Td -(appear) 26.5503 Tj --297 TJm -(when) 21.579 Tj --296 TJm -(p) 4.9813 Tj --1 TJm -(or) 8.2988 Tj -1 TJm -(ting) 15.5018 Tj --297 TJm -(to) 7.7509 Tj --297 TJm -(the) 12.1743 Tj --297 TJm -(Mac,) 20.1942 Tj --308 TJm -(or) 8.2988 Tj --297 TJm -(to) 7.7509 Tj --297 TJm -(Microsoft') 42.61 Tj -55 TJm -(s) 3.8755 Tj --296 TJm -(operating) 37.6287 Tj --297 TJm -(systems.) 34.0422 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -361.339 493.964 Td -/F124_0 9.9626 Tf -(autoconf) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -412.116 493.964 Td -/F122_0 9.9626 Tf -(doesn') 26.5603 Tj -18 TJm -(t) 2.7696 Tj --297 TJm -(help) 17.1556 Tj --297 TJm -(in) 7.7509 Tj --296 TJm -(those) 21.031 Tj --297 TJm -(cases,) 23.5117 Tj --308 TJm -(and) 14.386 Tj -72 482.009 Td -(brings) 24.9065 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(whole) 24.3486 Tj --250 TJm -(load) 17.1556 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(ne) 9.4047 Tj -25 TJm -(w) 7.193 Tj --250 TJm -(comple) 29.3299 Tj -15 TJm -(xity) 15.5018 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 460.091 Td -(Most) 20.4831 Tj --392 TJm -(people) 26.5603 Tj --392 TJm -(should) 26.5703 Tj --393 TJm -(be) 9.4047 Tj --392 TJm -(able) 16.5977 Tj --392 TJm -(to) 7.7509 Tj --392 TJm -(compile) 32.0995 Tj --393 TJm -(the) 12.1743 Tj --392 TJm -(library) 26.5603 Tj --392 TJm -(and) 14.386 Tj --392 TJm -(program) 33.7533 Tj --393 TJm -(under) 22.6848 Tj --392 TJm -(Unix) 19.9252 Tj --392 TJm -(straight) 29.8878 Tj --392 TJm -(out-of-the-box,) 60.5925 Tj --428 TJm -(so) 8.8568 Tj --392 TJm -(to) 7.7509 Tj --393 TJm -(speak,) 25.1755 Tj -72 448.136 Td -(especially) 39.8404 Tj --250 TJm -(if) 6.0871 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(v) 4.9813 Tj -15 TJm -(ersion) 24.3486 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(GNU) 21.579 Tj --250 TJm -(C) 6.6451 Tj --250 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable.) 29.0509 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 426.218 Td -(There) 23.2328 Tj --259 TJm -(are) 12.1643 Tj --258 TJm -(a) 4.4234 Tj --259 TJm -(couple) 26.5603 Tj --258 TJm -(of) 8.2988 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -159.561 426.218 Td -/F124_0 9.9626 Tf -(__inline__) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -221.913 426.218 Td -/F122_0 9.9626 Tf -(directi) 25.4544 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --259 TJm -(in) 7.7509 Tj --258 TJm -(the) 12.1743 Tj --259 TJm -(code.) 21.3 Tj --671 TJm -(GNU) 21.579 Tj --259 TJm -(C) 6.6451 Tj --258 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -352.587 426.218 Td -/F124_0 9.9626 Tf -(gcc) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -370.52 426.218 Td -/F122_0 9.9626 Tf -(\)) 3.3175 Tj --259 TJm -(should) 26.5703 Tj --258 TJm -(be) 9.4047 Tj --259 TJm -(able) 16.5977 Tj --258 TJm -(to) 7.7509 Tj --259 TJm -(handle) 26.5603 Tj --258 TJm -(them.) 22.4159 Tj --672 TJm -(If) 6.6351 Tj --259 TJm -(you') 18.2614 Tj -50 TJm -(re) 7.7409 Tj -72 414.263 Td -(not) 12.7322 Tj --279 TJm -(using) 21.589 Tj --279 TJm -(GNU) 21.579 Tj --279 TJm -(C,) 9.1357 Tj --279 TJm -(your) 18.2614 Tj --279 TJm -(C) 6.6451 Tj --279 TJm -(compiler) 35.417 Tj --279 TJm -(shouldn') 34.8691 Tj -18 TJm -(t) 2.7696 Tj --279 TJm -(see) 12.7222 Tj --279 TJm -(them) 19.9252 Tj --279 TJm -(at) 7.193 Tj --279 TJm -(all.) 12.4533 Tj --794 TJm -(If) 6.6351 Tj --279 TJm -(your) 18.2614 Tj --279 TJm -(compiler) 35.417 Tj --279 TJm -(does,) 20.7521 Tj --286 TJm -(for) 11.6164 Tj --279 TJm -(some) 21.031 Tj --279 TJm -(reason,) 28.493 Tj --287 TJm -(see) 12.7222 Tj --279 TJm -(them) 19.9252 Tj --279 TJm -(and) 14.386 Tj -72 402.308 Td -(doesn') 26.5603 Tj -18 TJm -(t) 2.7696 Tj --283 TJm -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --283 TJm -(them,) 22.4159 Tj --291 TJm -(just) 14.396 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -164.167 402.308 Td -/F124_0 9.9626 Tf -(#define) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --283 TJm -(__inline__) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -271.425 402.308 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --283 TJm -(be) 9.4047 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -294.22 402.308 Td -/F124_0 9.9626 Tf -(/) 5.9776 Tj -300.197 400.565 Td -(*) 5.9776 Tj --600 TJm -(*) 5.9776 Tj -318.13 402.308 Td -(/) 5.9776 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -324.108 402.308 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --818 TJm -(One) 16.5977 Tj --283 TJm -(easy) 17.7035 Tj --283 TJm -(w) 7.193 Tj -10 TJm -(ay) 9.4047 Tj --283 TJm -(to) 7.7509 Tj --283 TJm -(do) 9.9626 Tj --283 TJm -(this) 14.396 Tj --283 TJm -(is) 6.6451 Tj --283 TJm -(to) 7.7509 Tj --283 TJm -(compile) 32.0995 Tj --283 TJm -(with) 17.7135 Tj --283 TJm -(the) 12.1743 Tj --283 TJm -(\003ag) 14.9439 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 390.353 Td -/F124_0 9.9626 Tf -(-D__inline__=) 77.7083 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -149.709 390.353 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --250 TJm -(which) 24.3486 Tj --250 TJm -(should) 26.5703 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(understood) 44.2738 Tj --250 TJm -(by) 9.9626 Tj --250 TJm -(most) 19.3773 Tj --250 TJm -(Unix) 19.9252 Tj --250 TJm -(compilers.) 41.7831 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 368.435 Td -(If) 6.6351 Tj --321 TJm -(you) 14.9439 Tj --321 TJm -(still) 14.9539 Tj --322 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --321 TJm -(dif) 11.0684 Tj -25 TJm -(\002culties,) 34.0422 Tj --339 TJm -(try) 11.0684 Tj --321 TJm -(compiling) 40.4083 Tj --321 TJm -(with) 17.7135 Tj --322 TJm -(t) 2.7696 Tj -1 TJm -(he) 9.4047 Tj --322 TJm -(macro) 24.8965 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -310.295 368.435 Td -/F124_0 9.9626 Tf -(BZ_STRICT_ANSI) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -397.181 368.435 Td -/F122_0 9.9626 Tf -(de\002ned.) 31.8205 Tj --524 TJm -(This) 17.7135 Tj --321 TJm -(should) 26.5703 Tj --321 TJm -(enable) 26.0024 Tj --321 TJm -(you) 14.9439 Tj --322 TJm -(to) 7.7509 Tj -72 356.48 Td -(b) 4.9813 Tj -20 TJm -(uild) 15.5018 Tj --321 TJm -(the) 12.1743 Tj --321 TJm -(library) 26.5603 Tj --322 TJm -(in) 7.7509 Tj --321 TJm -(a) 4.4234 Tj --321 TJm -(strictly) 27.6761 Tj --321 TJm -(ANSI) 23.2427 Tj --321 TJm -(compliant) 39.8504 Tj --322 TJm -(en) 9.4047 Tj -40 TJm -(vironment.) 43.4469 Tj --1047 TJm -(Building) 34.8791 Tj --321 TJm -(the) 12.1743 Tj --321 TJm -(program) 33.7533 Tj --322 TJm -(itself) 19.9252 Tj --321 TJm -(lik) 10.5205 Tj -10 TJm -(e) 4.4234 Tj --321 TJm -(this) 14.396 Tj --321 TJm -(is) 6.6451 Tj --321 TJm -(dangerous) 40.9463 Tj --322 TJm -(and) 14.386 Tj -72 344.525 Td -(not) 12.7322 Tj --260 TJm -(supported,) 41.7831 Tj --263 TJm -(since) 20.4731 Tj --260 TJm -(you) 14.9439 Tj --260 TJm -(remo) 20.4731 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -204.498 344.525 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -234.386 344.525 Td -/F122_0 9.9626 Tf -(') 3.3175 Tj -55 TJm -(s) 3.8755 Tj --260 TJm -(checks) 27.1082 Tj --260 TJm -(ag) 9.4047 Tj -5 TJm -(ainst) 18.8194 Tj --260 TJm -(compressing) 50.3609 Tj --261 TJm -(directories,) 44.5428 Tj --262 TJm -(symbolic) 36.5329 Tj --261 TJm -(li) 5.5392 Tj -1 TJm -(nks,) 16.3287 Tj --263 TJm -(de) 9.4047 Tj -25 TJm -(vices,) 22.9638 Tj --263 TJm -(and) 14.386 Tj --260 TJm -(other) 20.4731 Tj -72 332.57 Td -(not-really-a-\002le) 62.5253 Tj --250 TJm -(entities.) 31.2726 Tj --620 TJm -(This) 17.7135 Tj --250 TJm -(could) 22.1369 Tj --250 TJm -(cause) 22.1269 Tj --250 TJm -(\002lesystem) 40.4083 Tj --250 TJm -(corruption!) 44.8217 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 310.652 Td -(One) 16.5977 Tj --392 TJm -(other) 20.4731 Tj --391 TJm -(thing:) 23.2527 Tj --594 TJm -(if) 6.0871 Tj --391 TJm -(you) 14.9439 Tj --392 TJm -(create) 23.7807 Tj --391 TJm -(a) 4.4234 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -210.879 310.652 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -244.669 310.652 Td -/F122_0 9.9626 Tf -(binary) 25.4544 Tj --392 TJm -(for) 11.6164 Tj --391 TJm -(public) 24.9065 Tj --392 TJm -(distrib) 25.4644 Tj -20 TJm -(ution,) 22.9738 Tj --427 TJm -(please) 24.8965 Tj --392 TJm -(consider) 33.7533 Tj --391 TJm -(linking) 28.234 Tj --392 TJm -(it) 5.5392 Tj --391 TJm -(statically) 35.9749 Tj --392 TJm -(\() 3.3175 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -522.067 310.652 Td -/F124_0 9.9626 Tf -(gcc) 17.9327 Tj -72 298.697 Td -(-static) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -113.843 298.697 Td -/F122_0 9.9626 Tf -(\).) 5.8082 Tj --620 TJm -(This) 17.7135 Tj --250 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -20 TJm -(oids) 16.6077 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(sorts) 18.8194 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(library-v) 34.8591 Tj -15 TJm -(ersion) 24.3486 Tj --250 TJm -(issues) 23.8007 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(others) 24.3486 Tj --250 TJm -(may) 17.1556 Tj --250 TJm -(encounter) 39.2825 Tj --250 TJm -(later) 17.7035 Tj --250 TJm -(on.) 12.4533 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 276.779 Td -(If) 6.6351 Tj --296 TJm -(you) 14.9439 Tj --296 TJm -(b) 4.9813 Tj -20 TJm -(uild) 15.5018 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -122.708 276.779 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -155.545 276.779 Td -/F122_0 9.9626 Tf -(on) 9.9626 Tj --296 TJm -(W) 9.4047 Tj -40 TJm -(in32,) 20.2042 Tj --307 TJm -(you) 14.9439 Tj --296 TJm -(must) 19.3773 Tj --296 TJm -(set) 11.0684 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -254.965 276.779 Td -/F124_0 9.9626 Tf -(BZ_UNIX) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -299.756 276.779 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --296 TJm -(0) 4.9813 Tj --296 TJm -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -335.72 276.779 Td -/F124_0 9.9626 Tf -(BZ_LCCWIN32) 65.7532 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -404.422 276.779 Td -/F122_0 9.9626 Tf -(to) 7.7509 Tj --296 TJm -(1,) 7.472 Tj --307 TJm -(in) 7.7509 Tj --296 TJm -(the) 12.1743 Tj --296 TJm -(\002le) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -467.159 276.779 Td -/F124_0 9.9626 Tf -(bzip2.c) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -509.002 276.779 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --307 TJm -(before) 25.4445 Tj -72 264.824 Td -(compiling.) 42.899 Tj --310 TJm -(Otherwise) 40.9463 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(resulting) 34.8691 Tj --250 TJm -(binary) 25.4544 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(on') 13.2801 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ork) 13.2801 Tj --250 TJm -(correctly) 35.4071 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 230.071 Td -/F116_0 20.6585 Tf -(4.3.) 34.4584 Tj --278 TJm -(Repor) 59.6824 Tj --20 TJm -(ting) 37.867 Tj --278 TJm -(b) 12.6223 Tj -20 TJm -(ugs) 36.7308 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 208.153 Td -/F122_0 9.9626 Tf -(I) 3.3175 Tj --228 TJm -(tried) 18.2614 Tj --228 TJm -(pretty) 23.2427 Tj --228 TJm -(hard) 17.7035 Tj --228 TJm -(to) 7.7509 Tj --228 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --228 TJm -(sure) 16.5977 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -196.25 208.153 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -228.409 208.153 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --228 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj --228 TJm -(free,) 17.9725 Tj --232 TJm -(both) 17.7135 Tj --228 TJm -(by) 9.9626 Tj --228 TJm -(design) 26.0123 Tj --228 TJm -(and) 14.386 Tj --228 TJm -(by) 9.9626 Tj --228 TJm -(testing.) 29.0609 Tj --605 TJm -(Hopefully) 40.3983 Tj --228 TJm -(you') 18.2614 Tj -10 TJm -(ll) 5.5392 Tj --228 TJm -(ne) 9.4047 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj --228 TJm -(need) 18.8094 Tj --228 TJm -(to) 7.7509 Tj --228 TJm -(read) 17.1456 Tj -72 196.198 Td -(this) 14.396 Tj --250 TJm -(section) 28.224 Tj --250 TJm -(for) 11.6164 Tj --250 TJm -(real.) 17.4246 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 174.28 Td -(Ne) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ertheless,) 37.3498 Tj --313 TJm -(if) 6.0871 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -137.751 174.28 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -170.634 174.28 Td -/F122_0 9.9626 Tf -(dies) 16.0497 Tj --301 TJm -(with) 17.7135 Tj --300 TJm -(a) 4.4234 Tj --301 TJm -(se) 8.2988 Tj -15 TJm -(gmentation) 44.8317 Tj --300 TJm -(f) 3.3175 Tj -10 TJm -(ault,) 17.4346 Tj --314 TJm -(a) 4.4234 Tj --300 TJm -(b) 4.9813 Tj -20 TJm -(us) 8.8568 Tj --301 TJm -(error) 19.3573 Tj --300 TJm -(or) 8.2988 Tj --301 TJm -(an) 9.4047 Tj --301 TJm -(internal) 30.4357 Tj --300 TJm -(assertion) 35.417 Tj --301 TJm -(f) 3.3175 Tj -10 TJm -(ailure,) 25.1755 Tj --313 TJm -(it) 5.5392 Tj --301 TJm -(wil) 12.7322 Tj -1 TJm -(l) 2.7696 Tj --301 TJm -(ask) 13.2801 Tj --301 TJm -(you) 14.9439 Tj --300 TJm -(to) 7.7509 Tj -72 162.325 Td -(email) 22.1369 Tj --242 TJm -(me) 12.1743 Tj --243 TJm -(a) 4.4234 Tj --242 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj --243 TJm -(report.) 26.2813 Tj --615 TJm -(Experience) 44.8118 Tj --242 TJm -(from) 19.3673 Tj --243 TJm -(years) 21.0211 Tj --242 TJm -(of) 8.2988 Tj --242 TJm -(feedback) 35.955 Tj --243 TJm -(of) 8.2988 Tj --242 TJm -(bzip2) 22.1369 Tj --243 TJm -(users) 20.4731 Tj --242 TJm -(indicates) 35.417 Tj --243 TJm -(that) 14.9439 Tj --242 TJm -(almost) 26.5703 Tj --242 TJm -(all) 9.9626 Tj --243 TJm -(these) 20.4731 Tj --242 TJm -(problems) 37.0808 Tj --243 TJm -(can) 13.8281 Tj -72 150.37 Td -(be) 9.4047 Tj --250 TJm -(traced) 24.3386 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(either) 22.6848 Tj --250 TJm -(compiler) 35.417 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ugs) 13.8381 Tj --250 TJm -(or) 8.2988 Tj --250 TJm -(hardw) 24.8965 Tj -10 TJm -(are) 12.1643 Tj --250 TJm -(problems.) 39.5714 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(32) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 33 36 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -498.728 749.245 Td -/F122_0 9.9626 Tf -(Miscellanea) 48.1393 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -74.491 710.037 Td -/F122_0 9.9626 Tf -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(Recompile) 43.1679 Tj --322 TJm -(the) 12.1743 Tj --322 TJm -(program) 33.7533 Tj --322 TJm -(with) 17.7135 Tj --322 TJm -(no) 9.9626 Tj --322 TJm -(optimisat) 37.0908 Tj -1 TJm -(ion,) 15.2229 Tj --340 TJm -(and) 14.386 Tj --322 TJm -(see) 12.7222 Tj --322 TJm -(if) 6.0871 Tj --322 TJm -(it) 5.5392 Tj --322 TJm -(w) 7.193 Tj -10 TJm -(orks.) 19.6462 Tj --1052 TJm -(And/or) 28.224 Tj --322 TJm -(try) 11.0684 Tj --322 TJm -(a) 4.4234 Tj --321 TJm -(dif) 11.0684 Tj -25 TJm -(ferent) 23.2328 Tj --322 TJm -(compiler) 35.417 Tj -55 TJm -(.) 2.4907 Tj --1052 TJm -(I) 3.3175 Tj --322 TJm -(heard) 22.1269 Tj --322 TJm -(all) 9.9626 Tj -81.963 698.082 Td -(sorts) 18.8194 Tj --309 TJm -(of) 8.2988 Tj --310 TJm -(stories) 26.0123 Tj --310 TJm -(about) 22.1369 Tj --309 TJm -(v) 4.9813 Tj -25 TJm -(arious) 24.3486 Tj --310 TJm -(\003a) 9.9626 Tj -20 TJm -(v) 4.9813 Tj -20 TJm -(ours) 17.1556 Tj --309 TJm -(of) 8.2988 Tj --310 TJm -(GNU) 21.579 Tj --309 TJm -(C) 6.6451 Tj --310 TJm -(\(and) 17.7035 Tj --309 TJm -(other) 20.4731 Tj --310 TJm -(compilers\)) 42.61 Tj --309 TJm -(generating) 42.0521 Tj --310 TJm -(bad) 14.386 Tj --310 TJm -(code) 18.8094 Tj --309 TJm -(for) 11.6164 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -471.527 698.082 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -501.415 698.082 Td -/F122_0 9.9626 Tf -(,) 2.4907 Tj --324 TJm -(and) 14.386 Tj --310 TJm -(I') 6.6351 Tj -50 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj -81.963 686.127 Td -(run) 13.2801 Tj --250 TJm -(across) 24.8965 Tj --250 TJm -(tw) 9.9626 Tj -10 TJm -(o) 4.9813 Tj --250 TJm -(such) 18.2614 Tj --250 TJm -(e) 4.4234 Tj -15 TJm -(xamples) 33.2053 Tj --250 TJm -(myself.) 29.6088 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 664.209 Td -(2.7.X) 22.1369 Tj --299 TJm -(v) 4.9813 Tj -15 TJm -(ersions) 28.224 Tj --300 TJm -(of) 8.2988 Tj --299 TJm -(GNU) 21.579 Tj --299 TJm -(C) 6.6451 Tj --300 TJm -(are) 12.1643 Tj --299 TJm -(kno) 14.9439 Tj -25 TJm -(wn) 12.1743 Tj --300 TJm -(to) 7.7509 Tj --299 TJm -(generate) 33.7433 Tj --299 TJm -(bad) 14.386 Tj --300 TJm -(code) 18.8094 Tj --299 TJm -(from) 19.3673 Tj --299 TJm -(time) 17.7135 Tj --300 TJm -(to) 7.7509 Tj --299 TJm -(time,) 20.2042 Tj --312 TJm -(at) 7.193 Tj --299 TJm -(high) 17.7135 Tj --300 TJm -(optimisation) 49.823 Tj --299 TJm -(le) 7.193 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(els.) 13.5591 Tj --916 TJm -(If) 6.6351 Tj --300 TJm -(you) 14.9439 Tj -81.963 652.254 Td -(get) 12.1743 Tj --328 TJm -(problems,) 39.5714 Tj --348 TJm -(try) 11.0684 Tj --328 TJm -(using) 21.589 Tj --329 TJm -(the) 12.1743 Tj --328 TJm -(\003ags) 18.8194 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -217.176 652.254 Td -/F124_0 9.9626 Tf -(-O2) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --328 TJm -(-fomit-frame-pointer) 119.5512 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --329 TJm -(-fno-strength-reduce) 119.5512 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -480.753 652.254 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --1090 TJm -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --328 TJm -(should) 26.5703 Tj -81.963 640.299 Td -(speci\002cally) 45.3796 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -129.832 640.299 Td -/F621_0 9.9626 Tf -(not) 12.7322 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -145.055 640.299 Td -/F122_0 9.9626 Tf -(use) 13.2801 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -160.826 640.299 Td -/F124_0 9.9626 Tf -(-funroll-loops) 83.6858 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -244.512 640.299 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 618.381 Td -(Y) 7.193 Tj -110 TJm -(ou) 9.9626 Tj --240 TJm -(may) 17.1556 Tj --240 TJm -(notice) 24.3486 Tj --241 TJm -(that) 14.9439 Tj --240 TJm -(the) 12.1743 Tj --240 TJm -(Mak) 18.2614 Tj -10 TJm -(e\002le) 17.1556 Tj --240 TJm -(runs) 17.1556 Tj --240 TJm -(six) 11.6264 Tj --241 TJm -(tests) 17.7135 Tj --240 TJm -(as) 8.2988 Tj --240 TJm -(part) 15.4918 Tj --240 TJm -(of) 8.2988 Tj --240 TJm -(the) 12.1743 Tj --241 TJm -(b) 4.9813 Tj -20 TJm -(uild) 15.5018 Tj --240 TJm -(process.) 32.3685 Tj --613 TJm -(If) 6.6351 Tj --240 TJm -(the) 12.1743 Tj --241 TJm -(program) 33.7533 Tj --240 TJm -(passes) 25.4544 Tj --240 TJm -(all) 9.9626 Tj --240 TJm -(of) 8.2988 Tj --240 TJm -(these,) 22.9638 Tj --242 TJm -(it') 8.8568 Tj -55 TJm -(s) 3.8755 Tj --241 TJm -(a) 4.4234 Tj -81.963 606.426 Td -(pretty) 23.2427 Tj --250 TJm -(good) 19.9252 Tj --250 TJm -(\(b) 8.2988 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(not) 12.7322 Tj --250 TJm -(100%\)) 26.5603 Tj --250 TJm -(indication) 39.8504 Tj --250 TJm -(that) 14.9439 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(compiler) 35.417 Tj --250 TJm -(has) 13.2801 Tj --250 TJm -(done) 19.3673 Tj --250 TJm -(its) 9.4147 Tj --250 TJm -(job) 12.7322 Tj --250 TJm -(correctly) 35.4071 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 584.508 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -91.723 584.508 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -124.239 584.508 Td -/F122_0 9.9626 Tf -(crashes) 29.3199 Tj --264 TJm -(randomly) 38.1866 Tj -65 TJm -(,) 2.4907 Tj --267 TJm -(and) 14.386 Tj --264 TJm -(the) 12.1743 Tj --263 TJm -(crashes) 29.3199 Tj --264 TJm -(are) 12.1643 Tj --264 TJm -(not) 12.7322 Tj --263 TJm -(repeatable,) 43.427 Tj --268 TJm -(you) 14.9439 Tj --263 TJm -(may) 17.1556 Tj --264 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --264 TJm -(a) 4.4234 Tj --264 TJm -(\003ak) 14.9439 Tj -15 TJm -(y) 4.9813 Tj --263 TJm -(memory) 33.2053 Tj --264 TJm -(subsystem.) 44.0048 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -510.112 584.508 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 572.553 Td -/F122_0 9.9626 Tf -(really) 22.6848 Tj --274 TJm -(hammers) 36.5229 Tj --274 TJm -(your) 18.2614 Tj --274 TJm -(memory) 33.2053 Tj --274 TJm -(hierarch) 32.6375 Tj -5 TJm -(y) 4.9813 Tj -65 TJm -(,) 2.4907 Tj --280 TJm -(and) 14.386 Tj --274 TJm -(if) 6.0871 Tj --274 TJm -(it') 8.8568 Tj -55 TJm -(s) 3.8755 Tj --274 TJm -(a) 4.4234 Tj --274 TJm -(bit) 10.5205 Tj --274 TJm -(mar) 15.4918 Tj -18 TJm -(ginal,) 22.4159 Tj --280 TJm -(you) 14.9439 Tj --274 TJm -(may) 17.1556 Tj --274 TJm -(get) 12.1743 Tj --274 TJm -(these) 20.4731 Tj --274 TJm -(problems.) 39.5714 Tj --764 TJm -(Ditto) 20.4831 Tj --274 TJm -(if) 6.0871 Tj --274 TJm -(your) 18.2614 Tj --274 TJm -(disk) 16.6077 Tj -81.963 560.598 Td -(or) 8.2988 Tj --250 TJm -(I/O) 13.2801 Tj --250 TJm -(subsystem) 41.5142 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(slo) 11.6264 Tj -25 TJm -(wly) 14.9439 Tj --250 TJm -(f) 3.3175 Tj -10 TJm -(ailing.) 25.1855 Tj --620 TJm -(Y) 7.193 Tj -111 TJm -(up,) 12.4533 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(really) 22.6848 Tj --250 TJm -(does) 18.2614 Tj --250 TJm -(happen.) 31.2626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -81.963 538.68 Td -(T) 6.0871 Tj -35 TJm -(ry) 8.2988 Tj --250 TJm -(using) 21.589 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(dif) 11.0684 Tj -25 TJm -(ferent) 23.2328 Tj --250 TJm -(machine) 33.7533 Tj --250 TJm -(of) 8.2988 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(same) 20.4731 Tj --250 TJm -(type,) 19.6462 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(see) 12.7222 Tj --250 TJm -(if) 6.0871 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(can) 13.8281 Tj --250 TJm -(repeat) 24.3386 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(problem.) 35.696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -74.491 516.762 Td -(\225) 3.4869 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC --450 TJm -(This) 17.7135 Tj --252 TJm -(isn') 14.9439 Tj -18 TJm -(t) 2.7696 Tj --251 TJm -(really) 22.6848 Tj --252 TJm -(a) 4.4234 Tj --252 TJm -(b) 4.9813 Tj -20 TJm -(ug,) 12.4533 Tj --252 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --251 TJm -(...) 7.472 Tj --315 TJm -(If) 6.6351 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -209.383 516.762 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -241.778 516.762 Td -/F122_0 9.9626 Tf -(tells) 16.6077 Tj --252 TJm -(you) 14.9439 Tj --251 TJm -(your) 18.2614 Tj --252 TJm -(\002le) 12.7322 Tj --252 TJm -(is) 6.6451 Tj --251 TJm -(corrupted) 38.1767 Tj --252 TJm -(on) 9.9626 Tj --252 TJm -(decompression,) 62.2563 Tj --252 TJm -(and) 14.386 Tj --251 TJm -(you) 14.9439 Tj --252 TJm -(obtained) 34.3112 Tj --252 TJm -(the) 12.1743 Tj --251 TJm -(\002le) 12.7322 Tj -81.963 504.807 Td -(via) 12.1743 Tj --281 TJm -(FTP) 17.1656 Tj -111 TJm -(,) 2.4907 Tj --282 TJm -(there) 19.9152 Tj --282 TJm -(is) 6.6451 Tj --281 TJm -(a) 4.4234 Tj --282 TJm -(possibility) 41.5241 Tj --281 TJm -(that) 14.9439 Tj --282 TJm -(you) 14.9439 Tj --281 TJm -(for) 11.6164 Tj -18 TJm -(got) 12.7322 Tj --282 TJm -(to) 7.7509 Tj --281 TJm -(tell) 12.7322 Tj --282 TJm -(FTP) 17.1656 Tj --281 TJm -(to) 7.7509 Tj --282 TJm -(do) 9.9626 Tj --281 TJm -(a) 4.4234 Tj --282 TJm -(binary) 25.4544 Tj --281 TJm -(mode) 22.1369 Tj --282 TJm -(transfer) 30.4258 Tj -55 TJm -(.) 2.4907 Tj --809 TJm -(That) 18.2614 Tj --282 TJm -(absolutely) 40.9562 Tj --281 TJm -(will) 15.5018 Tj --282 TJm -(cause) 22.1269 Tj -81.963 492.852 Td -(the) 12.1743 Tj --250 TJm -(\002le) 12.7322 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(be) 9.4047 Tj --250 TJm -(non-decompressible.) 82.7294 Tj --620 TJm -(Y) 7.193 Tj -110 TJm -(ou') 13.2801 Tj -10 TJm -(ll) 5.5392 Tj --250 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(transfer) 30.4258 Tj --250 TJm -(it) 5.5392 Tj --250 TJm -(ag) 9.4047 Tj -5 TJm -(ain.) 14.6649 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 470.934 Td -(If) 6.6351 Tj --235 TJm -(you') 18.2614 Tj -50 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --236 TJm -(inc) 12.1743 Tj -1 TJm -(o) 4.9813 Tj --1 TJm -(r) 3.3175 Tj -1 TJm -(po) 9.9626 Tj --1 TJm -(r) 3.3175 Tj -1 TJm -(ated) 16.5977 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -163.036 470.934 Td -/F124_0 9.9626 Tf -(libbzip2) 47.8205 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -213.2 470.934 Td -/F122_0 9.9626 Tf -(into) 15.5018 Tj --235 TJm -(your) 18.2614 Tj --236 TJm -(o) 4.9813 Tj -25 TJm -(wn) 12.1743 Tj --235 TJm -(program) 33.7533 Tj --235 TJm -(and) 14.386 Tj --235 TJm -(are) 12.1643 Tj --236 TJm -(gett) 14.9439 Tj -1 TJm -(ing) 12.7322 Tj --236 TJm -(problems,) 39.5714 Tj --238 TJm -(please,) 27.3872 Tj --238 TJm -(please,) 27.3872 Tj --238 TJm -(please,) 27.3872 Tj --238 TJm -(check) 23.2328 Tj --236 TJm -(that) 14.9439 Tj -72 458.979 Td -(the) 12.1743 Tj --242 TJm -(parameters) 43.7059 Tj --243 TJm -(you) 14.9439 Tj --242 TJm -(are) 12.1643 Tj --242 TJm -(passing) 29.8878 Tj --243 TJm -(in) 7.7509 Tj --242 TJm -(calls) 18.2614 Tj --242 TJm -(to) 7.7509 Tj --243 TJm -(the) 12.1743 Tj --242 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --244 TJm -(are) 12.1643 Tj --242 TJm -(correct,) 30.1468 Tj --244 TJm -(and) 14.386 Tj --243 TJm -(in) 7.7509 Tj --242 TJm -(accordance) 44.8018 Tj --242 TJm -(with) 17.7135 Tj --243 TJm -(what) 19.3673 Tj --242 TJm -(the) 12.1743 Tj --242 TJm -(documentation) 59.2177 Tj --243 TJm -(says) 17.1556 Tj -72 447.024 Td -(is) 6.6451 Tj --250 TJm -(allo) 14.9439 Tj -25 TJm -(w) 7.193 Tj -10 TJm -(able.) 19.0883 Tj --310 TJm -(I) 3.3175 Tj --250 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(tried) 18.2614 Tj --250 TJm -(to) 7.7509 Tj --250 TJm -(mak) 17.1556 Tj -10 TJm -(e) 4.4234 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(library) 26.5603 Tj --250 TJm -(rob) 13.2801 Tj -20 TJm -(ust) 11.6264 Tj --250 TJm -(ag) 9.4047 Tj -5 TJm -(ainst) 18.8194 Tj --250 TJm -(such) 18.2614 Tj --250 TJm -(problems,) 39.5714 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --250 TJm -(I'm) 14.386 Tj --250 TJm -(sure) 16.5977 Tj --250 TJm -(I) 3.3175 Tj --250 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(en') 12.7222 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(succeeded.) 43.427 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 425.106 Td -(Finally) 28.234 Tj -65 TJm -(,) 2.4907 Tj --324 TJm -(if) 6.0871 Tj --310 TJm -(the) 12.1743 Tj --309 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --309 TJm -(comments) 40.9562 Tj --310 TJm -(don') 18.2614 Tj -18 TJm -(t) 2.7696 Tj --309 TJm -(help,) 19.6462 Tj --324 TJm -(you') 18.2614 Tj -10 TJm -(ll) 5.5392 Tj --310 TJm -(ha) 9.4047 Tj -20 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --309 TJm -(to) 7.7509 Tj --309 TJm -(send) 18.2614 Tj --310 TJm -(me) 12.1743 Tj --309 TJm -(a) 4.4234 Tj --309 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj --310 TJm -(report.) 26.2813 Tj --976 TJm -(No) 12.1743 Tj -25 TJm -(w) 7.193 Tj -65 TJm -(,) 2.4907 Tj --324 TJm -(it') 8.8568 Tj -55 TJm -(s) 3.8755 Tj --310 TJm -(just) 14.396 Tj --309 TJm -(amazing) 33.7533 Tj --309 TJm -(ho) 9.9626 Tj -25 TJm -(w) 7.193 Tj --310 TJm -(man) 17.1556 Tj -15 TJm -(y) 4.9813 Tj -72 413.151 Td -(people) 26.5603 Tj --250 TJm -(will) 15.5018 Tj --250 TJm -(send) 18.2614 Tj --250 TJm -(me) 12.1743 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(b) 4.9813 Tj -20 TJm -(ug) 9.9626 Tj --250 TJm -(report) 23.7907 Tj --250 TJm -(saying) 26.0123 Tj --250 TJm -(something) 41.5142 Tj --250 TJm -(lik) 10.5205 Tj -10 TJm -(e:) 7.193 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 386.087] cm -0 0 468 23.91 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 401.629 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj --426 TJm -(crashed) 41.8429 Tj --426 TJm -(with) 23.9102 Tj --426 TJm -(segmentation) 71.7307 Tj --426 TJm -(fault) 29.8878 Tj --426 TJm -(on) 11.9551 Tj --426 TJm -(my) 11.9551 Tj --426 TJm -(machine) 41.8429 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 364.169 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj --241 TJm -(absolutely) 40.9562 Tj --241 TJm -(nothing) 30.4457 Tj --241 TJm -(el) 7.193 Tj -1 TJm -(se.) 10.7895 Tj --614 TJm -(Needless) 35.965 Tj --241 TJm -(to) 7.7509 Tj --241 TJm -(say) 13.2801 Tj -65 TJm -(,) 2.4907 Tj --243 TJm -(a) 4.4234 Tj --241 TJm -(such) 18.2614 Tj --240 TJm -(a) 4.4234 Tj --241 TJm -(report) 23.7907 Tj --241 TJm -(is) 6.6451 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -324.681 364.169 Td -/F621_0 9.9626 Tf -(totally) 25.4644 Tj -55 TJm -(,) 2.4907 Tj --243 TJm -(utterly) 26.0123 Tj -55 TJm -(,) 2.4907 Tj --242 TJm -(completely) 43.158 Tj --241 TJm -(and) 14.9439 Tj --241 TJm -(compr) 25.4544 Tj -37 TJm -(ehensively) 41.4942 Tj --241 TJm -(100%) 23.2427 Tj -72 352.214 Td -(useless;) 31.5416 Tj --257 TJm -(a) 4.9813 Tj --255 TJm -(waste) 22.6948 Tj --255 TJm -(of) 7.7509 Tj --255 TJm -(your) 18.2614 Tj --255 TJm -(time) 17.1556 Tj -10 TJm -(,) 2.4907 Tj --256 TJm -(my) 11.6164 Tj --255 TJm -(time) 17.1556 Tj -10 TJm -(,) 2.4907 Tj --256 TJm -(and) 14.9439 Tj --255 TJm -(net) 12.1743 Tj --255 TJm -(bandwidth) 42.0721 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -302.574 352.214 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --650 TJm -(W) 9.4047 Tj -40 TJm -(ith) 10.5205 Tj --254 TJm -(no) 9.9626 Tj --255 TJm -(details) 26.0123 Tj --255 TJm -(at) 7.193 Tj --255 TJm -(all,) 12.4533 Tj --256 TJm -(there') 23.2328 Tj -55 TJm -(s) 3.8755 Tj --255 TJm -(no) 9.9626 Tj --255 TJm -(w) 7.193 Tj -10 TJm -(ay) 9.4047 Tj --255 TJm -(I) 3.3175 Tj --255 TJm -(can) 13.8281 Tj --255 TJm -(possibly) 33.2153 Tj --255 TJm -(be) 9.4047 Tj -15 TJm -(gin) 12.7322 Tj -72 340.259 Td -(to) 7.7509 Tj --250 TJm -(\002gure) 23.2427 Tj --250 TJm -(out) 12.7322 Tj --250 TJm -(what) 19.3673 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(problem) 33.2053 Tj --250 TJm -(is.) 9.1357 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 318.341 Td -(The) 15.4918 Tj --309 TJm -(rules) 19.3673 Tj --309 TJm -(of) 8.2988 Tj --309 TJm -(the) 12.1743 Tj --310 TJm -(g) 4.9813 Tj -5 TJm -(ame) 16.5977 Tj --309 TJm -(are:) 14.9339 Tj --428 TJm -(f) 3.3175 Tj -10 TJm -(acts,) 17.9825 Tj --324 TJm -(f) 3.3175 Tj -10 TJm -(acts,) 17.9825 Tj --324 TJm -(f) 3.3175 Tj -10 TJm -(acts.) 17.9825 Tj --975 TJm -(Don') 20.4731 Tj -18 TJm -(t) 2.7696 Tj --309 TJm -(omit) 18.2714 Tj --309 TJm -(them) 19.9252 Tj --309 TJm -(because) 31.5316 Tj --309 TJm -("oh,) 16.518 Tj --324 TJm -(the) 12.1743 Tj -15 TJm -(y) 4.9813 Tj --309 TJm -(w) 7.193 Tj -10 TJm -(on') 13.2801 Tj -18 TJm -(t) 2.7696 Tj --309 TJm -(be) 9.4047 Tj --310 TJm -(rele) 14.9339 Tj -25 TJm -(v) 4.9813 Tj -25 TJm -(ant".) 18.7297 Tj --974 TJm -(At) 9.9626 Tj --310 TJm -(the) 12.1743 Tj --309 TJm -(bare) 17.1456 Tj -72 306.386 Td -(minimum:) 41.5241 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.949 0.949 0.9765] sc -/DeviceRGB {} CS -[0.949 0.949 0.9765] SC -q -[1 0 0 1 72 245.514] cm -0 0 468 59.776 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 296.922 Td -/F124_0 9.9626 Tf -(Machine) 41.8429 Tj --426 TJm -(type.) 29.8878 Tj --852 TJm -(Operating) 53.798 Tj --426 TJm -(system) 35.8654 Tj --426 TJm -(version.) 47.8205 Tj -90 284.967 Td -(Exact) 29.8878 Tj --426 TJm -(version) 41.8429 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(bzip2) 29.8878 Tj --426 TJm -(\(do) 17.9327 Tj --426 TJm -(bzip2) 29.8878 Tj --426 TJm -(-V\).) 23.9102 Tj -90 273.011 Td -(Exact) 29.8878 Tj --426 TJm -(version) 41.8429 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compiler) 47.8205 Tj --426 TJm -(used.) 29.8878 Tj -90 261.056 Td -(Flags) 29.8878 Tj --426 TJm -(passed) 35.8654 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(compiler.) 53.798 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 223.597 Td -/F122_0 9.9626 Tf -(Ho) 12.1743 Tj -25 TJm -(we) 11.6164 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(er) 7.7409 Tj -40 TJm -(,) 2.4907 Tj --254 TJm -(the) 12.1743 Tj --252 TJm -(most) 19.3773 Tj --253 TJm -(important) 38.7446 Tj --253 TJm -(single) 23.8007 Tj --253 TJm -(thing) 20.4831 Tj --253 TJm -(t) 2.7696 Tj -1 TJm -(hat) 12.1743 Tj --253 TJm -(will) 15.5018 Tj --253 TJm -(help) 17.1556 Tj --253 TJm -(me) 12.1743 Tj --253 TJm -(is) 6.6451 Tj --252 TJm -(the) 12.1743 Tj --253 TJm -(\002le) 12.7322 Tj --253 TJm -(that) 14.9439 Tj --253 TJm -(you) 14.9439 Tj --253 TJm -(were) 19.3573 Tj --253 TJm -(trying) 23.8007 Tj --252 TJm -(to) 7.7509 Tj --253 TJm -(compress) 37.6287 Tj --253 TJm -(or) 8.2988 Tj --253 TJm -(decompress) 47.0334 Tj -72 211.641 Td -(at) 7.193 Tj --304 TJm -(the) 12.1743 Tj --305 TJm -(time) 17.7135 Tj --304 TJm -(the) 12.1743 Tj --304 TJm -(problem) 33.2053 Tj --305 TJm -(happened.) 40.6673 Tj --946 TJm -(W) 9.4047 Tj -40 TJm -(ithout) 23.2527 Tj --304 TJm -(that,) 17.4346 Tj --318 TJm -(my) 12.7322 Tj --305 TJm -(ability) 25.4644 Tj --304 TJm -(to) 7.7509 Tj --304 TJm -(do) 9.9626 Tj --305 TJm -(an) 9.4047 Tj -15 TJm -(ything) 25.4644 Tj --304 TJm -(more) 20.4731 Tj --304 TJm -(than) 17.1556 Tj --305 TJm -(speculate) 37.0708 Tj --304 TJm -(about) 22.1369 Tj --304 TJm -(the) 12.1743 Tj --305 TJm -(cause,) 24.6176 Tj --318 TJm -(is) 6.6451 Tj -72 199.686 Td -(limited.) 30.7247 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 164.933 Td -/F116_0 20.6585 Tf -(4.4.) 34.4584 Tj --278 TJm -(Did) 33.2808 Tj --278 TJm -(y) 11.4861 Tj -25 TJm -(ou) 25.2447 Tj --278 TJm -(g) 12.6223 Tj --10 TJm -(et) 18.3654 Tj --278 TJm -(the) 30.9878 Tj --278 TJm -(right) 45.9032 Tj --278 TJm -(pac) 35.5946 Tj -20 TJm -(ka) 22.9723 Tj -10 TJm -(g) 12.6223 Tj --10 TJm -(e?) 24.1085 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 143.016 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.603 143.016 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --272 TJm -(a) 4.4234 Tj --273 TJm -(resource) 33.7433 Tj --272 TJm -(hog.) 17.4346 Tj --378 TJm -(It) 6.0871 Tj --272 TJm -(soaks) 22.1369 Tj --273 TJm -(up) 9.9626 Tj --272 TJm -(lar) 10.5105 Tj -18 TJm -(ge) 9.4047 Tj --273 TJm -(amounts) 33.7633 Tj --272 TJm -(of) 8.2988 Tj --273 TJm -(CPU) 19.3773 Tj --272 TJm -(c) 4.4234 Tj -15 TJm -(ycles) 20.4731 Tj --273 TJm -(and) 14.386 Tj --272 TJm -(memory) 33.2053 Tj -65 TJm -(.) 2.4907 Tj --755 TJm -(Also,) 21.31 Tj --278 TJm -(it) 5.5392 Tj --273 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --272 TJm -(v) 4.9813 Tj -15 TJm -(ery) 12.7222 Tj --273 TJm -(lar) 10.5105 Tj -18 TJm -(ge) 9.4047 Tj --272 TJm -(latencies.) 37.3498 Tj -72 131.06 Td -(In) 8.2988 Tj --251 TJm -(the) 12.1743 Tj --251 TJm -(w) 7.193 Tj -10 TJm -(orst) 14.9439 Tj --251 TJm -(case,) 19.6363 Tj --251 TJm -(you) 14.9439 Tj --251 TJm -(can) 13.8281 Tj --251 TJm -(feed) 17.1456 Tj --251 TJm -(man) 17.1556 Tj -15 TJm -(y) 4.9813 Tj --251 TJm -(me) 12.1743 Tj -15 TJm -(g) 4.9813 Tj -4 TJm -(abyt) 17.1556 Tj -1 TJm -(es) 8.2988 Tj --252 TJm -(of) 8.2988 Tj --251 TJm -(uncompressed) 56.996 Tj --251 TJm -(data) 16.5977 Tj --251 TJm -(into) 15.5018 Tj --251 TJm -(the) 12.1743 Tj --251 TJm -(library) 26.5603 Tj --251 TJm -(before) 25.4445 Tj --251 TJm -(getting) 27.6761 Tj --251 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --251 TJm -(compressed) 47.0334 Tj -72 119.105 Td -(output,) 27.9551 Tj --250 TJm -(so) 8.8568 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(probably) 35.417 Tj --250 TJm -(rules) 19.3673 Tj --250 TJm -(out) 12.7322 Tj --250 TJm -(applications) 48.1492 Tj --250 TJm -(requiring) 36.5229 Tj --250 TJm -(interacti) 32.6474 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(e) 4.4234 Tj --250 TJm -(beha) 18.8094 Tj -20 TJm -(viour) 21.031 Tj -55 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 97.187 Td -(These) 23.7907 Tj --304 TJm -(aren') 20.4632 Tj -18 TJm -(t) 2.7696 Tj --304 TJm -(f) 3.3175 Tj -10 TJm -(aults) 18.8194 Tj --304 TJm -(of) 8.2988 Tj --304 TJm -(my) 12.7322 Tj --304 TJm -(implementation,) 65.0359 Tj --317 TJm -(I) 3.3175 Tj --304 TJm -(hope,) 21.8579 Tj --318 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --304 TJm -(more) 20.4731 Tj --304 TJm -(an) 9.4047 Tj --304 TJm -(intrinsic) 32.6574 Tj --304 TJm -(property) 33.7533 Tj --304 TJm -(of) 8.2988 Tj --304 TJm -(the) 12.1743 Tj --304 TJm -(Burro) 23.2427 Tj -25 TJm -(ws-Wheeler) 48.1293 Tj --304 TJm -(transform) 38.7346 Tj -72 85.232 Td -(\(unfortunately\).) 62.8042 Tj --620 TJm -(Maybe) 27.6661 Tj --250 TJm -(this) 14.396 Tj --250 TJm -(isn') 14.9439 Tj -18 TJm -(t) 2.7696 Tj --250 TJm -(what) 19.3673 Tj --250 TJm -(you) 14.9439 Tj --250 TJm -(w) 7.193 Tj -10 TJm -(ant.) 14.6649 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -(33) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 34 37 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -498.728 749.245 Td -/F122_0 9.9626 Tf -(Miscellanea) 48.1393 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(If) 6.6351 Tj --275 TJm -(you) 14.9439 Tj --274 TJm -(w) 7.193 Tj -10 TJm -(ant) 12.1743 Tj --275 TJm -(a) 4.4234 Tj --274 TJm -(compressor) 45.9276 Tj --275 TJm -(and/or) 25.4544 Tj --275 TJm -(library) 26.5603 Tj --274 TJm -(which) 24.3486 Tj --275 TJm -(is) 6.6451 Tj --274 TJm -(f) 3.3175 Tj -10 TJm -(aster) 18.8094 Tj -40 TJm -(,) 2.4907 Tj --281 TJm -(uses) 17.1556 Tj --275 TJm -(less) 14.9439 Tj --274 TJm -(memory) 33.2053 Tj --275 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --275 TJm -(gets) 16.0497 Tj --274 TJm -(pretty) 23.2427 Tj --275 TJm -(good) 19.9252 Tj --274 TJm -(compression,) 52.8516 Tj --281 TJm -(and) 14.386 Tj --275 TJm -(has) 13.2801 Tj -72 698.082 Td -(minimal) 33.2153 Tj --288 TJm -(latenc) 23.7907 Tj -15 TJm -(y) 4.9813 Tj -65 TJm -(,) 2.4907 Tj --297 TJm -(consider) 33.7533 Tj --288 TJm -(Jean-loup) 38.7346 Tj --288 TJm -(Gailly') 28.224 Tj -55 TJm -(s) 3.8755 Tj --288 TJm -(and) 14.386 Tj --288 TJm -(Mark) 21.579 Tj --288 TJm -(Adl) 14.9439 Tj -1 TJm -(er') 11.0585 Tj -55 TJm -(s) 3.8755 Tj --288 TJm -(w) 7.193 Tj -10 TJm -(ork,) 15.7708 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -353.879 698.082 Td -/F124_0 9.9626 Tf -(zlib-1.2.1) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -416.523 698.082 Td -/F122_0 9.9626 Tf -(and) 14.386 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -433.777 698.082 Td -/F124_0 9.9626 Tf -(gzip-1.2.4) 59.7756 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -493.553 698.082 Td -/F122_0 9.9626 Tf -(.) 2.4907 Tj --847 TJm -(Look) 21.031 Tj --288 TJm -(for) 11.6164 Tj -72 686.127 Td -(them) 19.9252 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(http://www) 45.3896 Tj -65 TJm -(.zlib) 17.4346 Tj -40 TJm -(.or) 10.7895 Tj -18 TJm -(g) 4.9813 Tj --250 TJm -(and) 14.386 Tj --250 TJm -(http://www) 45.3896 Tj -65 TJm -(.gzip.or) 30.4357 Tj -18 TJm -(g) 4.9813 Tj --250 TJm -(respecti) 30.9837 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(ely) 12.1743 Tj -65 TJm -(.) 2.4907 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 664.209 Td -(F) 5.5392 Tj -15 TJm -(or) 8.2988 Tj --582 TJm -(something) 41.5142 Tj --583 TJm -(f) 3.3175 Tj -10 TJm -(aster) 18.8094 Tj --582 TJm -(and) 14.386 Tj --582 TJm -(lighter) 26.0123 Tj --583 TJm -(still,) 17.4445 Tj --665 TJm -(you) 14.9439 Tj --582 TJm -(might) 23.2527 Tj --583 TJm -(try) 11.0684 Tj --582 TJm -(Markus) 30.4357 Tj --582 TJm -(F) 5.5392 Tj --582 TJm -(X) 7.193 Tj --582 TJm -(J) 3.8755 Tj --582 TJm -(Oberhumer') 48.6872 Tj -55 TJm -(s) 3.8755 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -437.433 664.209 Td -/F124_0 9.9626 Tf -(LZO) 17.9327 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -461.164 664.209 Td -/F122_0 9.9626 Tf -(real-time) 35.965 Tj --582 TJm -(compres-) 37.0708 Tj -72 652.254 Td -(sion/decompression) 79.1429 Tj --250 TJm -(library) 26.5603 Tj -65 TJm -(,) 2.4907 Tj --250 TJm -(at) 7.193 Tj --250 TJm -(http://www) 45.3896 Tj -65 TJm -(.oberhumer) 45.6486 Tj -55 TJm -(.com/opensource.) 70.2762 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 617.501 Td -/F116_0 20.6585 Tf -(4.5.) 34.4584 Tj --278 TJm -(Fur) 33.2808 Tj --20 TJm -(ther) 39.0239 Tj --278 TJm -(Reading) 81.4978 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 595.583 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.923 595.583 Td -/F122_0 9.9626 Tf -(is) 6.6451 Tj --305 TJm -(not) 12.7322 Tj --304 TJm -(research) 33.1854 Tj --305 TJm -(w) 7.193 Tj -10 TJm -(ork,) 15.7708 Tj --318 TJm -(in) 7.7509 Tj --305 TJm -(the) 12.1743 Tj --304 TJm -(sense) 21.579 Tj --305 TJm -(that) 14.9439 Tj --304 TJm -(it) 5.5392 Tj --305 TJm -(doesn') 26.5603 Tj -18 TJm -(t) 2.7696 Tj --304 TJm -(present) 28.772 Tj --305 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --305 TJm -(ne) 9.4047 Tj -25 TJm -(w) 7.193 Tj --304 TJm -(ideas.) 22.9638 Tj --474 TJm -(Rather) 26.5603 Tj -40 TJm -(,) 2.4907 Tj --318 TJm -(it') 8.8568 Tj -55 TJm -(s) 3.8755 Tj --305 TJm -(an) 9.4047 Tj --304 TJm -(engineering) 47.0334 Tj --305 TJm -(e) 4.4234 Tj -15 TJm -(x) 4.9813 Tj -15 TJm -(ercise) 23.2328 Tj -72 583.628 Td -(based) 22.6848 Tj --250 TJm -(on) 9.9626 Tj --250 TJm -(e) 4.4234 Tj -15 TJm -(xisting) 27.1282 Tj --250 TJm -(ideas.) 22.9638 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 561.71 Td -(F) 5.5392 Tj -15 TJm -(our) 13.2801 Tj --250 TJm -(documents) 43.1679 Tj --250 TJm -(describe) 33.1954 Tj --250 TJm -(essentially) 42.0621 Tj --250 TJm -(all) 9.9626 Tj --250 TJm -(the) 12.1743 Tj --250 TJm -(ideas) 20.4731 Tj --250 TJm -(behind) 27.1182 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -298.747 561.71 Td -/F124_0 9.9626 Tf -(bzip2) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -328.635 561.71 Td -/F122_0 9.9626 Tf -(:) 2.7696 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.9294 0.9686 0.9568] sc -/DeviceRGB {} CS -[0.9294 0.9686 0.9568] SC -q -[1 0 0 1 72 259.678] cm -0 0 468 298.879 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 550.189 Td -/F124_0 9.9626 Tf -(Michael) 41.8429 Tj --426 TJm -(Burrows) 41.8429 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(D.) 11.9551 Tj --426 TJm -(J.) 11.9551 Tj --426 TJm -(Wheeler:) 47.8205 Tj -98.488 538.234 Td -("A) 11.9551 Tj --426 TJm -(block-sorting) 77.7083 Tj --426 TJm -(lossless) 47.8205 Tj --426 TJm -(data) 23.9102 Tj --426 TJm -(compression) 65.7532 Tj --426 TJm -(algorithm") 59.7756 Tj -102.732 526.278 Td -(10th) 23.9102 Tj --426 TJm -(May) 17.9327 Tj --426 TJm -(1994.) 29.8878 Tj -102.732 514.323 Td -(Digital) 41.8429 Tj --426 TJm -(SRC) 17.9327 Tj --426 TJm -(Research) 47.8205 Tj --426 TJm -(Report) 35.8654 Tj --426 TJm -(124.) 23.9102 Tj -102.732 502.368 Td -(ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.g\ -z) 382.5638 Tj -102.732 490.413 Td -(If) 11.9551 Tj --426 TJm -(you) 17.9327 Tj --426 TJm -(have) 23.9102 Tj --426 TJm -(trouble) 41.8429 Tj --426 TJm -(finding) 41.8429 Tj --426 TJm -(it,) 17.9327 Tj --426 TJm -(try) 17.9327 Tj --426 TJm -(searching) 53.798 Tj --426 TJm -(at) 11.9551 Tj --426 TJm -(the) 17.9327 Tj -102.732 478.458 Td -(New) 17.9327 Tj --426 TJm -(Zealand) 41.8429 Tj --426 TJm -(Digital) 41.8429 Tj --426 TJm -(Library,) 47.8205 Tj --426 TJm -(http://www.nzdl.org.) 119.5512 Tj -90 454.547 Td -(Daniel) 35.8654 Tj --426 TJm -(S.) 11.9551 Tj --426 TJm -(Hirschberg) 59.7756 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(Debra) 29.8878 Tj --426 TJm -(A.) 11.9551 Tj --426 TJm -(LeLewer) 41.8429 Tj -98.488 442.592 Td -("Efficient) 59.7756 Tj --426 TJm -(Decoding) 47.8205 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(Prefix) 35.8654 Tj --426 TJm -(Codes") 35.8654 Tj -102.732 430.637 Td -(Communications) 83.6858 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(ACM,) 23.9102 Tj --426 TJm -(April) 29.8878 Tj --426 TJm -(1990,) 29.8878 Tj --426 TJm -(Vol) 17.9327 Tj --426 TJm -(33,) 17.9327 Tj --426 TJm -(Number) 35.8654 Tj --426 TJm -(4.) 11.9551 Tj -102.732 418.682 Td -(You) 17.9327 Tj --426 TJm -(might) 29.8878 Tj --426 TJm -(be) 11.9551 Tj --426 TJm -(able) 23.9102 Tj --426 TJm -(to) 11.9551 Tj --426 TJm -(get) 17.9327 Tj --426 TJm -(an) 11.9551 Tj --426 TJm -(electronic) 59.7756 Tj --426 TJm -(copy) 23.9102 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(this) 23.9102 Tj -102.732 406.727 Td -(from) 23.9102 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(ACM) 17.9327 Tj --426 TJm -(Digital) 41.8429 Tj --426 TJm -(Library.) 47.8205 Tj -90 382.816 Td -(David) 29.8878 Tj --426 TJm -(J.) 11.9551 Tj --426 TJm -(Wheeler) 41.8429 Tj -102.732 370.861 Td -(Program) 41.8429 Tj --426 TJm -(bred3.c) 41.8429 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(accompanying) 71.7307 Tj --426 TJm -(document) 47.8205 Tj --426 TJm -(bred3.ps.) 53.798 Tj -102.732 358.906 Td -(This) 23.9102 Tj --426 TJm -(contains) 47.8205 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(idea) 23.9102 Tj --426 TJm -(behind) 35.8654 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(multi-table) 65.7532 Tj --426 TJm -(Huffman) 41.8429 Tj --426 TJm -(coding) 35.8654 Tj --426 TJm -(scheme.) 41.8429 Tj -102.732 346.951 Td -(ftp://ftp.cl.cam.ac.uk/users/djw3/) 203.237 Tj -90 323.04 Td -(Jon) 17.9327 Tj --426 TJm -(L.) 11.9551 Tj --426 TJm -(Bentley) 41.8429 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(Robert) 35.8654 Tj --426 TJm -(Sedgewick) 53.798 Tj -98.488 311.085 Td -("Fast) 29.8878 Tj --426 TJm -(Algorithms) 59.7756 Tj --426 TJm -(for) 17.9327 Tj --426 TJm -(Sorting) 41.8429 Tj --426 TJm -(and) 17.9327 Tj --426 TJm -(Searching) 53.798 Tj --426 TJm -(Strings") 47.8205 Tj -102.732 299.13 Td -(Available) 53.798 Tj --426 TJm -(from) 23.9102 Tj --426 TJm -(Sedgewick's) 65.7532 Tj --426 TJm -(web) 17.9327 Tj --426 TJm -(page,) 29.8878 Tj -102.732 287.175 Td -(www.cs.princeton.edu/~rs) 143.4614 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 237.76 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --239 TJm -(follo) 18.8194 Tj -25 TJm -(wing) 19.9252 Tj --238 TJm -(paper) 22.1269 Tj --239 TJm -(gi) 7.7509 Tj -25 TJm -(v) 4.9813 Tj -15 TJm -(es) 8.2988 Tj --239 TJm -(v) 4.9813 Tj -25 TJm -(aluable) 28.772 Tj --238 TJm -(additional) 39.8504 Tj --239 TJm -(insights) 31.0036 Tj --238 TJm -(into) 15.5018 Tj --239 TJm -(the) 12.1743 Tj --239 TJm -(algorithm,) 41.2352 Tj --241 TJm -(b) 4.9813 Tj -20 TJm -(ut) 7.7509 Tj --238 TJm -(is) 6.6451 Tj --239 TJm -(not) 12.7322 Tj --239 TJm -(immedia) 34.8691 Tj -1 TJm -(tely) 14.9439 Tj --239 TJm -(the) 12.1743 Tj --239 TJm -(basis) 19.9252 Tj --238 TJm -(of) 8.2988 Tj --239 TJm -(an) 9.4047 Tj -15 TJm -(y) 4.9813 Tj --239 TJm -(code) 18.8094 Tj -72 225.805 Td -(used) 18.2614 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(bzip2.) 24.6275 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.9294 0.9686 0.9568] sc -/DeviceRGB {} CS -[0.9294 0.9686 0.9568] SC -q -[1 0 0 1 72 150.921] cm -0 0 468 71.731 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 214.283 Td -/F124_0 9.9626 Tf -(Peter) 29.8878 Tj --426 TJm -(Fenwick:) 47.8205 Tj -102.732 202.328 Td -(Block) 29.8878 Tj --426 TJm -(Sorting) 41.8429 Tj --426 TJm -(Text) 23.9102 Tj --426 TJm -(Compression) 65.7532 Tj -102.732 190.373 Td -(Proceedings) 65.7532 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(19th) 23.9102 Tj --426 TJm -(Australasian) 71.7307 Tj --426 TJm -(Computer) 47.8205 Tj --426 TJm -(Science) 41.8429 Tj --426 TJm -(Conference,) 65.7532 Tj -111.22 178.418 Td -(Melbourne,) 59.7756 Tj --426 TJm -(Australia.) 59.7756 Tj --852 TJm -(Jan) 17.9327 Tj --426 TJm -(31) 11.9551 Tj --426 TJm -(-) 5.9776 Tj --426 TJm -(Feb) 17.9327 Tj --426 TJm -(2,) 11.9551 Tj --426 TJm -(1996.) 29.8878 Tj -102.732 166.463 Td -(ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps) 322.7882 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 129.003 Td -/F122_0 9.9626 Tf -(K) 7.193 Tj -15 TJm -(unihik) 25.4644 Tj -10 TJm -(o) 4.9813 Tj --250 TJm -(Sadakane') 41.4942 Tj -55 TJm -(s) 3.8755 Tj --250 TJm -(sorting) 27.6761 Tj --250 TJm -(algorithm,) 41.2352 Tj --250 TJm -(mentioned) 42.0621 Tj --250 TJm -(abo) 14.386 Tj -15 TJm -(v) 4.9813 Tj -15 TJm -(e,) 6.914 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable) 26.5603 Tj --250 TJm -(from:) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.9294 0.9686 0.9568] sc -/DeviceRGB {} CS -[0.9294 0.9686 0.9568] SC -q -[1 0 0 1 72 89.985] cm -0 0 468 35.866 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 117.482 Td -/F124_0 9.9626 Tf -(http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz) 346.6985 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -/F122_0 9.9626 Tf -(34) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Page: 35 38 -%%BeginPageSetup -%%PageOrientation: Portrait -pdfStartPage -0 0 612 792 re W -%%EndPageSetup -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -498.728 749.245 Td -/F122_0 9.9626 Tf -(Miscellanea) 48.1393 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 1 73.893 741.803] cm -[] 0 d -0 J -0.498 w -0 0 m -475.465 0 l -S -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -72 710.037 Td -/F122_0 9.9626 Tf -(The) 15.4918 Tj --250 TJm -(Manber) 30.9837 Tj -20 TJm -(-Myers) 28.772 Tj --250 TJm -(suf) 12.1743 Tj -25 TJm -(\002x) 10.5205 Tj --250 TJm -(array) 20.4632 Tj --250 TJm -(construction) 49.2551 Tj --250 TJm -(algorithm) 38.7446 Tj --250 TJm -(is) 6.6451 Tj --250 TJm -(described) 38.1767 Tj --250 TJm -(in) 7.7509 Tj --250 TJm -(a) 4.4234 Tj --250 TJm -(paper) 22.1269 Tj --250 TJm -(a) 4.4234 Tj -20 TJm -(v) 4.9813 Tj -25 TJm -(ailable) 26.5603 Tj --250 TJm -(from:) 22.1369 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.9294 0.9686 0.9568] sc -/DeviceRGB {} CS -[0.9294 0.9686 0.9568] SC -q -[1 0 0 1 72 671.019] cm -0 0 468 35.866 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 698.516 Td -/F124_0 9.9626 Tf -(http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps) 322.7882 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72 649.101 Td -/F122_0 9.9626 Tf -(Finally) 28.234 Tj -65 TJm -(,) 2.4907 Tj --227 TJm -(the) 12.1743 Tj --221 TJm -(follo) 18.8194 Tj -25 TJm -(wing) 19.9252 Tj --222 TJm -(papers) 26.0024 Tj --221 TJm -(document) 39.2925 Tj --221 TJm -(some) 21.031 Tj --222 TJm -(in) 7.7509 Tj -40 TJm -(v) 4.9813 Tj -15 TJm -(estig) 18.8194 Tj -5 TJm -(ations) 23.8007 Tj --221 TJm -(I) 3.3175 Tj --221 TJm -(made) 21.579 Tj --222 TJm -(into) 15.5018 Tj --221 TJm -(the) 12.1743 Tj --221 TJm -(performance) 50.341 Tj --222 TJm -(of) 8.2988 Tj --221 TJm -(sorting) 27.6761 Tj --221 TJm -(and) 14.386 Tj --222 TJm -(decompression) 59.7656 Tj -72 637.146 Td -(algorithms:) 45.3896 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0.9294 0.9686 0.9568] sc -/DeviceRGB {} CS -[0.9294 0.9686 0.9568] SC -q -[1 0 0 1 72 502.486] cm -0 0 468 131.507 re -f -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 0 0] Tm -0 0 Td -90 625.624 Td -/F124_0 9.9626 Tf -(Julian) 35.8654 Tj --426 TJm -(Seward) 35.8654 Tj -102.732 613.669 Td -(On) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(Performance) 65.7532 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(BWT) 17.9327 Tj --426 TJm -(Sorting) 41.8429 Tj --426 TJm -(Algorithms) 59.7756 Tj -102.732 601.714 Td -(Proceedings) 65.7532 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(IEEE) 23.9102 Tj --426 TJm -(Data) 23.9102 Tj --426 TJm -(Compression) 65.7532 Tj --426 TJm -(Conference) 59.7756 Tj --426 TJm -(2000) 23.9102 Tj -111.22 589.759 Td -(Snowbird,) 53.798 Tj --426 TJm -(Utah.) 29.8878 Tj --852 TJm -(28-30) 29.8878 Tj --426 TJm -(March) 29.8878 Tj --426 TJm -(2000.) 29.8878 Tj -90 565.848 Td -(Julian) 35.8654 Tj --426 TJm -(Seward) 35.8654 Tj -102.732 553.893 Td -(Space-time) 59.7756 Tj --426 TJm -(Tradeoffs) 53.798 Tj --426 TJm -(in) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(Inverse) 41.8429 Tj --426 TJm -(B-W) 17.9327 Tj --426 TJm -(Transform) 53.798 Tj -102.732 541.938 Td -(Proceedings) 65.7532 Tj --426 TJm -(of) 11.9551 Tj --426 TJm -(the) 17.9327 Tj --426 TJm -(IEEE) 23.9102 Tj --426 TJm -(Data) 23.9102 Tj --426 TJm -(Compression) 65.7532 Tj --426 TJm -(Conference) 59.7756 Tj --426 TJm -(2001) 23.9102 Tj -111.22 529.983 Td -(Snowbird,) 53.798 Tj --426 TJm -(Utah.) 29.8878 Tj --852 TJm -(27-29) 29.8878 Tj --426 TJm -(March) 29.8878 Tj --426 TJm -(2001.) 29.8878 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -534.414 50.951 Td -/F122_0 9.9626 Tf -(35) 9.9626 Tj -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Trailer -end -%%DocumentSuppliedResources: -%%+ font PYRIYB+NimbusSanL-Bold -%%+ font XDVKOU+NimbusRomNo9L-Regu -%%+ font QYKIKI+NimbusMonL-Regu -%%+ font BITXNG+CMMI10 -%%+ font ZWXELK+NimbusMonL-Bold -%%+ font FRBTTO+CMSY10 -%%+ font AMYDOG+NimbusRomNo9L-ReguItal -%%EOF diff --git a/reactos/lib/3rdparty/bzip2/manual.texi b/reactos/lib/3rdparty/bzip2/manual.texi deleted file mode 100644 index 336776ab805..00000000000 --- a/reactos/lib/3rdparty/bzip2/manual.texi +++ /dev/null @@ -1,2215 +0,0 @@ -\input texinfo @c -*- Texinfo -*- -@setfilename bzip2.info - -@ignore -This file documents bzip2 version 1.0, and associated library -libbzip2, written by Julian Seward (jseward@acm.org). - -Copyright (C) 1996-2000 Julian R Seward - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for verbatim copies. -@end ignore - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Bzip2: (bzip2). A program and library for data compression. -END-INFO-DIR-ENTRY -@end format - -@end ifinfo - -@iftex -@c @finalout -@settitle bzip2 and libbzip2 -@titlepage -@title bzip2 and libbzip2 -@subtitle a program and library for data compression -@subtitle copyright (C) 1996-2000 Julian Seward -@subtitle version 1.0 of 21 March 2000 -@author Julian Seward - -@end titlepage - -@parindent 0mm -@parskip 2mm - -@end iftex -@node Top, Overview, (dir), (dir) - -This program, @code{bzip2}, -and associated library @code{libbzip2}, are -Copyright (C) 1996-2000 Julian R Seward. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -@itemize @bullet -@item - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -@item - The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. -@item - Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. -@item - The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. -@end itemize -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Julian Seward, Cambridge, UK. - -@code{jseward@@acm.org} - -@code{http://sourceware.cygnus.com/bzip2} - -@code{http://www.cacheprof.org} - -@code{http://www.muraroa.demon.co.uk} - -@code{bzip2}/@code{libbzip2} version 1.0 of 21 March 2000. - -PATENTS: To the best of my knowledge, @code{bzip2} does not use any patented -algorithms. However, I do not have the resources available to carry out -a full patent search. Therefore I cannot give any guarantee of the -above statement. - - - - - - - -@node Overview, Implementation, Top, Top -@chapter Introduction - -@code{bzip2} compresses files using the Burrows-Wheeler -block-sorting text compression algorithm, and Huffman coding. -Compression is generally considerably better than that -achieved by more conventional LZ77/LZ78-based compressors, -and approaches the performance of the PPM family of statistical compressors. - -@code{bzip2} is built on top of @code{libbzip2}, a flexible library -for handling compressed data in the @code{bzip2} format. This manual -describes both how to use the program and -how to work with the library interface. Most of the -manual is devoted to this library, not the program, -which is good news if your interest is only in the program. - -Chapter 2 describes how to use @code{bzip2}; this is the only part -you need to read if you just want to know how to operate the program. -Chapter 3 describes the programming interfaces in detail, and -Chapter 4 records some miscellaneous notes which I thought -ought to be recorded somewhere. - - -@chapter How to use @code{bzip2} - -This chapter contains a copy of the @code{bzip2} man page, -and nothing else. - -@quotation - -@unnumberedsubsubsec NAME -@itemize -@item @code{bzip2}, @code{bunzip2} -- a block-sorting file compressor, v1.0 -@item @code{bzcat} -- decompresses files to stdout -@item @code{bzip2recover} -- recovers data from damaged bzip2 files -@end itemize - -@unnumberedsubsubsec SYNOPSIS -@itemize -@item @code{bzip2} [ -cdfkqstvzVL123456789 ] [ filenames ... ] -@item @code{bunzip2} [ -fkvsVL ] [ filenames ... ] -@item @code{bzcat} [ -s ] [ filenames ... ] -@item @code{bzip2recover} filename -@end itemize - -@unnumberedsubsubsec DESCRIPTION - -@code{bzip2} compresses files using the Burrows-Wheeler block sorting -text compression algorithm, and Huffman coding. Compression is -generally considerably better than that achieved by more conventional -LZ77/LZ78-based compressors, and approaches the performance of the PPM -family of statistical compressors. - -The command-line options are deliberately very similar to those of GNU -@code{gzip}, but they are not identical. - -@code{bzip2} expects a list of file names to accompany the command-line -flags. Each file is replaced by a compressed version of itself, with -the name @code{original_name.bz2}. Each compressed file has the same -modification date, permissions, and, when possible, ownership as the -corresponding original, so that these properties can be correctly -restored at decompression time. File name handling is naive in the -sense that there is no mechanism for preserving original file names, -permissions, ownerships or dates in filesystems which lack these -concepts, or have serious file name length restrictions, such as MS-DOS. - -@code{bzip2} and @code{bunzip2} will by default not overwrite existing -files. If you want this to happen, specify the @code{-f} flag. - -If no file names are specified, @code{bzip2} compresses from standard -input to standard output. In this case, @code{bzip2} will decline to -write compressed output to a terminal, as this would be entirely -incomprehensible and therefore pointless. - -@code{bunzip2} (or @code{bzip2 -d}) decompresses all -specified files. Files which were not created by @code{bzip2} -will be detected and ignored, and a warning issued. -@code{bzip2} attempts to guess the filename for the decompressed file -from that of the compressed file as follows: -@itemize -@item @code{filename.bz2 } becomes @code{filename} -@item @code{filename.bz } becomes @code{filename} -@item @code{filename.tbz2} becomes @code{filename.tar} -@item @code{filename.tbz } becomes @code{filename.tar} -@item @code{anyothername } becomes @code{anyothername.out} -@end itemize -If the file does not end in one of the recognised endings, -@code{.bz2}, @code{.bz}, -@code{.tbz2} or @code{.tbz}, @code{bzip2} complains that it cannot -guess the name of the original file, and uses the original name -with @code{.out} appended. - -As with compression, supplying no -filenames causes decompression from standard input to standard output. - -@code{bunzip2} will correctly decompress a file which is the -concatenation of two or more compressed files. The result is the -concatenation of the corresponding uncompressed files. Integrity -testing (@code{-t}) of concatenated compressed files is also supported. - -You can also compress or decompress files to the standard output by -giving the @code{-c} flag. Multiple files may be compressed and -decompressed like this. The resulting outputs are fed sequentially to -stdout. Compression of multiple files in this manner generates a stream -containing multiple compressed file representations. Such a stream -can be decompressed correctly only by @code{bzip2} version 0.9.0 or -later. Earlier versions of @code{bzip2} will stop after decompressing -the first file in the stream. - -@code{bzcat} (or @code{bzip2 -dc}) decompresses all specified files to -the standard output. - -@code{bzip2} will read arguments from the environment variables -@code{BZIP2} and @code{BZIP}, in that order, and will process them -before any arguments read from the command line. This gives a -convenient way to supply default arguments. - -Compression is always performed, even if the compressed file is slightly -larger than the original. Files of less than about one hundred bytes -tend to get larger, since the compression mechanism has a constant -overhead in the region of 50 bytes. Random data (including the output -of most file compressors) is coded at about 8.05 bits per byte, giving -an expansion of around 0.5%. - -As a self-check for your protection, @code{bzip2} uses 32-bit CRCs to -make sure that the decompressed version of a file is identical to the -original. This guards against corruption of the compressed data, and -against undetected bugs in @code{bzip2} (hopefully very unlikely). The -chances of data corruption going undetected is microscopic, about one -chance in four billion for each file processed. Be aware, though, that -the check occurs upon decompression, so it can only tell you that -something is wrong. It can't help you recover the original uncompressed -data. You can use @code{bzip2recover} to try to recover data from -damaged files. - -Return values: 0 for a normal exit, 1 for environmental problems (file -not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt -compressed file, 3 for an internal consistency error (eg, bug) which -caused @code{bzip2} to panic. - - -@unnumberedsubsubsec OPTIONS -@table @code -@item -c --stdout -Compress or decompress to standard output. -@item -d --decompress -Force decompression. @code{bzip2}, @code{bunzip2} and @code{bzcat} are -really the same program, and the decision about what actions to take is -done on the basis of which name is used. This flag overrides that -mechanism, and forces bzip2 to decompress. -@item -z --compress -The complement to @code{-d}: forces compression, regardless of the -invokation name. -@item -t --test -Check integrity of the specified file(s), but don't decompress them. -This really performs a trial decompression and throws away the result. -@item -f --force -Force overwrite of output files. Normally, @code{bzip2} will not overwrite -existing output files. Also forces @code{bzip2} to break hard links -to files, which it otherwise wouldn't do. -@item -k --keep -Keep (don't delete) input files during compression -or decompression. -@item -s --small -Reduce memory usage, for compression, decompression and testing. Files -are decompressed and tested using a modified algorithm which only -requires 2.5 bytes per block byte. This means any file can be -decompressed in 2300k of memory, albeit at about half the normal speed. - -During compression, @code{-s} selects a block size of 200k, which limits -memory use to around the same figure, at the expense of your compression -ratio. In short, if your machine is low on memory (8 megabytes or -less), use -s for everything. See MEMORY MANAGEMENT below. -@item -q --quiet -Suppress non-essential warning messages. Messages pertaining to -I/O errors and other critical events will not be suppressed. -@item -v --verbose -Verbose mode -- show the compression ratio for each file processed. -Further @code{-v}'s increase the verbosity level, spewing out lots of -information which is primarily of interest for diagnostic purposes. -@item -L --license -V --version -Display the software version, license terms and conditions. -@item -1 to -9 -Set the block size to 100 k, 200 k .. 900 k when compressing. Has no -effect when decompressing. See MEMORY MANAGEMENT below. -@item -- -Treats all subsequent arguments as file names, even if they start -with a dash. This is so you can handle files with names beginning -with a dash, for example: @code{bzip2 -- -myfilename}. -@item --repetitive-fast -@item --repetitive-best -These flags are redundant in versions 0.9.5 and above. They provided -some coarse control over the behaviour of the sorting algorithm in -earlier versions, which was sometimes useful. 0.9.5 and above have an -improved algorithm which renders these flags irrelevant. -@end table - - -@unnumberedsubsubsec MEMORY MANAGEMENT - -@code{bzip2} compresses large files in blocks. The block size affects -both the compression ratio achieved, and the amount of memory needed for -compression and decompression. The flags @code{-1} through @code{-9} -specify the block size to be 100,000 bytes through 900,000 bytes (the -default) respectively. At decompression time, the block size used for -compression is read from the header of the compressed file, and -@code{bunzip2} then allocates itself just enough memory to decompress -the file. Since block sizes are stored in compressed files, it follows -that the flags @code{-1} to @code{-9} are irrelevant to and so ignored -during decompression. - -Compression and decompression requirements, in bytes, can be estimated -as: -@example - Compression: 400k + ( 8 x block size ) - - Decompression: 100k + ( 4 x block size ), or - 100k + ( 2.5 x block size ) -@end example -Larger block sizes give rapidly diminishing marginal returns. Most of -the compression comes from the first two or three hundred k of block -size, a fact worth bearing in mind when using @code{bzip2} on small machines. -It is also important to appreciate that the decompression memory -requirement is set at compression time by the choice of block size. - -For files compressed with the default 900k block size, @code{bunzip2} -will require about 3700 kbytes to decompress. To support decompression -of any file on a 4 megabyte machine, @code{bunzip2} has an option to -decompress using approximately half this amount of memory, about 2300 -kbytes. Decompression speed is also halved, so you should use this -option only where necessary. The relevant flag is @code{-s}. - -In general, try and use the largest block size memory constraints allow, -since that maximises the compression achieved. Compression and -decompression speed are virtually unaffected by block size. - -Another significant point applies to files which fit in a single block --- that means most files you'd encounter using a large block size. The -amount of real memory touched is proportional to the size of the file, -since the file is smaller than a block. For example, compressing a file -20,000 bytes long with the flag @code{-9} will cause the compressor to -allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 -kbytes of it. Similarly, the decompressor will allocate 3700k but only -touch 100k + 20000 * 4 = 180 kbytes. - -Here is a table which summarises the maximum memory usage for different -block sizes. Also recorded is the total compressed size for 14 files of -the Calgary Text Compression Corpus totalling 3,141,622 bytes. This -column gives some feel for how compression varies with block size. -These figures tend to understate the advantage of larger block sizes for -larger files, since the Corpus is dominated by smaller files. -@example - Compress Decompress Decompress Corpus - Flag usage usage -s usage Size - - -1 1200k 500k 350k 914704 - -2 2000k 900k 600k 877703 - -3 2800k 1300k 850k 860338 - -4 3600k 1700k 1100k 846899 - -5 4400k 2100k 1350k 845160 - -6 5200k 2500k 1600k 838626 - -7 6100k 2900k 1850k 834096 - -8 6800k 3300k 2100k 828642 - -9 7600k 3700k 2350k 828642 -@end example - -@unnumberedsubsubsec RECOVERING DATA FROM DAMAGED FILES - -@code{bzip2} compresses files in blocks, usually 900kbytes long. Each -block is handled independently. If a media or transmission error causes -a multi-block @code{.bz2} file to become damaged, it may be possible to -recover data from the undamaged blocks in the file. - -The compressed representation of each block is delimited by a 48-bit -pattern, which makes it possible to find the block boundaries with -reasonable certainty. Each block also carries its own 32-bit CRC, so -damaged blocks can be distinguished from undamaged ones. - -@code{bzip2recover} is a simple program whose purpose is to search for -blocks in @code{.bz2} files, and write each block out into its own -@code{.bz2} file. You can then use @code{bzip2 -t} to test the -integrity of the resulting files, and decompress those which are -undamaged. - -@code{bzip2recover} -takes a single argument, the name of the damaged file, -and writes a number of files @code{rec0001file.bz2}, - @code{rec0002file.bz2}, etc, containing the extracted blocks. - The output filenames are designed so that the use of - wildcards in subsequent processing -- for example, -@code{bzip2 -dc rec*file.bz2 > recovered_data} -- lists the files in - the correct order. - -@code{bzip2recover} should be of most use dealing with large @code{.bz2} - files, as these will contain many blocks. It is clearly - futile to use it on damaged single-block files, since a - damaged block cannot be recovered. If you wish to minimise -any potential data loss through media or transmission errors, -you might consider compressing with a smaller - block size. - - -@unnumberedsubsubsec PERFORMANCE NOTES - -The sorting phase of compression gathers together similar strings in the -file. Because of this, files containing very long runs of repeated -symbols, like "aabaabaabaab ..." (repeated several hundred times) may -compress more slowly than normal. Versions 0.9.5 and above fare much -better than previous versions in this respect. The ratio between -worst-case and average-case compression time is in the region of 10:1. -For previous versions, this figure was more like 100:1. You can use the -@code{-vvvv} option to monitor progress in great detail, if you want. - -Decompression speed is unaffected by these phenomena. - -@code{bzip2} usually allocates several megabytes of memory to operate -in, and then charges all over it in a fairly random fashion. This means -that performance, both for compressing and decompressing, is largely -determined by the speed at which your machine can service cache misses. -Because of this, small changes to the code to reduce the miss rate have -been observed to give disproportionately large performance improvements. -I imagine @code{bzip2} will perform best on machines with very large -caches. - - -@unnumberedsubsubsec CAVEATS - -I/O error messages are not as helpful as they could be. @code{bzip2} -tries hard to detect I/O errors and exit cleanly, but the details of -what the problem is sometimes seem rather misleading. - -This manual page pertains to version 1.0 of @code{bzip2}. Compressed -data created by this version is entirely forwards and backwards -compatible with the previous public releases, versions 0.1pl2, 0.9.0 and -0.9.5, but with the following exception: 0.9.0 and above can correctly -decompress multiple concatenated compressed files. 0.1pl2 cannot do -this; it will stop after decompressing just the first file in the -stream. - -@code{bzip2recover} uses 32-bit integers to represent bit positions in -compressed files, so it cannot handle compressed files more than 512 -megabytes long. This could easily be fixed. - - -@unnumberedsubsubsec AUTHOR -Julian Seward, @code{jseward@@acm.org}. - -The ideas embodied in @code{bzip2} are due to (at least) the following -people: Michael Burrows and David Wheeler (for the block sorting -transformation), David Wheeler (again, for the Huffman coder), Peter -Fenwick (for the structured coding model in the original @code{bzip}, -and many refinements), and Alistair Moffat, Radford Neal and Ian Witten -(for the arithmetic coder in the original @code{bzip}). I am much -indebted for their help, support and advice. See the manual in the -source distribution for pointers to sources of documentation. Christian -von Roques encouraged me to look for faster sorting algorithms, so as to -speed up compression. Bela Lubkin encouraged me to improve the -worst-case compression performance. Many people sent patches, helped -with portability problems, lent machines, gave advice and were generally -helpful. - -@end quotation - - - - -@chapter Programming with @code{libbzip2} - -This chapter describes the programming interface to @code{libbzip2}. - -For general background information, particularly about memory -use and performance aspects, you'd be well advised to read Chapter 2 -as well. - -@section Top-level structure - -@code{libbzip2} is a flexible library for compressing and decompressing -data in the @code{bzip2} data format. Although packaged as a single -entity, it helps to regard the library as three separate parts: the low -level interface, and the high level interface, and some utility -functions. - -The structure of @code{libbzip2}'s interfaces is similar to -that of Jean-loup Gailly's and Mark Adler's excellent @code{zlib} -library. - -All externally visible symbols have names beginning @code{BZ2_}. -This is new in version 1.0. The intention is to minimise pollution -of the namespaces of library clients. - -@subsection Low-level summary - -This interface provides services for compressing and decompressing -data in memory. There's no provision for dealing with files, streams -or any other I/O mechanisms, just straight memory-to-memory work. -In fact, this part of the library can be compiled without inclusion -of @code{stdio.h}, which may be helpful for embedded applications. - -The low-level part of the library has no global variables and -is therefore thread-safe. - -Six routines make up the low level interface: -@code{BZ2_bzCompressInit}, @code{BZ2_bzCompress}, and @* @code{BZ2_bzCompressEnd} -for compression, -and a corresponding trio @code{BZ2_bzDecompressInit}, @* @code{BZ2_bzDecompress} -and @code{BZ2_bzDecompressEnd} for decompression. -The @code{*Init} functions allocate -memory for compression/decompression and do other -initialisations, whilst the @code{*End} functions close down operations -and release memory. - -The real work is done by @code{BZ2_bzCompress} and @code{BZ2_bzDecompress}. -These compress and decompress data from a user-supplied input buffer -to a user-supplied output buffer. These buffers can be any size; -arbitrary quantities of data are handled by making repeated calls -to these functions. This is a flexible mechanism allowing a -consumer-pull style of activity, or producer-push, or a mixture of -both. - - - -@subsection High-level summary - -This interface provides some handy wrappers around the low-level -interface to facilitate reading and writing @code{bzip2} format -files (@code{.bz2} files). The routines provide hooks to facilitate -reading files in which the @code{bzip2} data stream is embedded -within some larger-scale file structure, or where there are -multiple @code{bzip2} data streams concatenated end-to-end. - -For reading files, @code{BZ2_bzReadOpen}, @code{BZ2_bzRead}, -@code{BZ2_bzReadClose} and @* @code{BZ2_bzReadGetUnused} are supplied. For -writing files, @code{BZ2_bzWriteOpen}, @code{BZ2_bzWrite} and -@code{BZ2_bzWriteFinish} are available. - -As with the low-level library, no global variables are used -so the library is per se thread-safe. However, if I/O errors -occur whilst reading or writing the underlying compressed files, -you may have to consult @code{errno} to determine the cause of -the error. In that case, you'd need a C library which correctly -supports @code{errno} in a multithreaded environment. - -To make the library a little simpler and more portable, -@code{BZ2_bzReadOpen} and @code{BZ2_bzWriteOpen} require you to pass them file -handles (@code{FILE*}s) which have previously been opened for reading or -writing respectively. That avoids portability problems associated with -file operations and file attributes, whilst not being much of an -imposition on the programmer. - - - -@subsection Utility functions summary -For very simple needs, @code{BZ2_bzBuffToBuffCompress} and -@code{BZ2_bzBuffToBuffDecompress} are provided. These compress -data in memory from one buffer to another buffer in a single -function call. You should assess whether these functions -fulfill your memory-to-memory compression/decompression -requirements before investing effort in understanding the more -general but more complex low-level interface. - -Yoshioka Tsuneo (@code{QWF00133@@niftyserve.or.jp} / -@code{tsuneo-y@@is.aist-nara.ac.jp}) has contributed some functions to -give better @code{zlib} compatibility. These functions are -@code{BZ2_bzopen}, @code{BZ2_bzread}, @code{BZ2_bzwrite}, @code{BZ2_bzflush}, -@code{BZ2_bzclose}, -@code{BZ2_bzerror} and @code{BZ2_bzlibVersion}. You may find these functions -more convenient for simple file reading and writing, than those in the -high-level interface. These functions are not (yet) officially part of -the library, and are minimally documented here. If they break, you -get to keep all the pieces. I hope to document them properly when time -permits. - -Yoshioka also contributed modifications to allow the library to be -built as a Windows DLL. - - -@section Error handling - -The library is designed to recover cleanly in all situations, including -the worst-case situation of decompressing random data. I'm not -100% sure that it can always do this, so you might want to add -a signal handler to catch segmentation violations during decompression -if you are feeling especially paranoid. I would be interested in -hearing more about the robustness of the library to corrupted -compressed data. - -Version 1.0 is much more robust in this respect than -0.9.0 or 0.9.5. Investigations with Checker (a tool for -detecting problems with memory management, similar to Purify) -indicate that, at least for the few files I tested, all single-bit -errors in the decompressed data are caught properly, with no -segmentation faults, no reads of uninitialised data and no -out of range reads or writes. So it's certainly much improved, -although I wouldn't claim it to be totally bombproof. - -The file @code{bzlib.h} contains all definitions needed to use -the library. In particular, you should definitely not include -@code{bzlib_private.h}. - -In @code{bzlib.h}, the various return values are defined. The following -list is not intended as an exhaustive description of the circumstances -in which a given value may be returned -- those descriptions are given -later. Rather, it is intended to convey the rough meaning of each -return value. The first five actions are normal and not intended to -denote an error situation. -@table @code -@item BZ_OK -The requested action was completed successfully. -@item BZ_RUN_OK -@itemx BZ_FLUSH_OK -@itemx BZ_FINISH_OK -In @code{BZ2_bzCompress}, the requested flush/finish/nothing-special action -was completed successfully. -@item BZ_STREAM_END -Compression of data was completed, or the logical stream end was -detected during decompression. -@end table - -The following return values indicate an error of some kind. -@table @code -@item BZ_CONFIG_ERROR -Indicates that the library has been improperly compiled on your -platform -- a major configuration error. Specifically, it means -that @code{sizeof(char)}, @code{sizeof(short)} and @code{sizeof(int)} -are not 1, 2 and 4 respectively, as they should be. Note that the -library should still work properly on 64-bit platforms which follow -the LP64 programming model -- that is, where @code{sizeof(long)} -and @code{sizeof(void*)} are 8. Under LP64, @code{sizeof(int)} is -still 4, so @code{libbzip2}, which doesn't use the @code{long} type, -is OK. -@item BZ_SEQUENCE_ERROR -When using the library, it is important to call the functions in the -correct sequence and with data structures (buffers etc) in the correct -states. @code{libbzip2} checks as much as it can to ensure this is -happening, and returns @code{BZ_SEQUENCE_ERROR} if not. Code which -complies precisely with the function semantics, as detailed below, -should never receive this value; such an event denotes buggy code -which you should investigate. -@item BZ_PARAM_ERROR -Returned when a parameter to a function call is out of range -or otherwise manifestly incorrect. As with @code{BZ_SEQUENCE_ERROR}, -this denotes a bug in the client code. The distinction between -@code{BZ_PARAM_ERROR} and @code{BZ_SEQUENCE_ERROR} is a bit hazy, but still worth -making. -@item BZ_MEM_ERROR -Returned when a request to allocate memory failed. Note that the -quantity of memory needed to decompress a stream cannot be determined -until the stream's header has been read. So @code{BZ2_bzDecompress} and -@code{BZ2_bzRead} may return @code{BZ_MEM_ERROR} even though some of -the compressed data has been read. The same is not true for -compression; once @code{BZ2_bzCompressInit} or @code{BZ2_bzWriteOpen} have -successfully completed, @code{BZ_MEM_ERROR} cannot occur. -@item BZ_DATA_ERROR -Returned when a data integrity error is detected during decompression. -Most importantly, this means when stored and computed CRCs for the -data do not match. This value is also returned upon detection of any -other anomaly in the compressed data. -@item BZ_DATA_ERROR_MAGIC -As a special case of @code{BZ_DATA_ERROR}, it is sometimes useful to -know when the compressed stream does not start with the correct -magic bytes (@code{'B' 'Z' 'h'}). -@item BZ_IO_ERROR -Returned by @code{BZ2_bzRead} and @code{BZ2_bzWrite} when there is an error -reading or writing in the compressed file, and by @code{BZ2_bzReadOpen} -and @code{BZ2_bzWriteOpen} for attempts to use a file for which the -error indicator (viz, @code{ferror(f)}) is set. -On receipt of @code{BZ_IO_ERROR}, the caller should consult -@code{errno} and/or @code{perror} to acquire operating-system -specific information about the problem. -@item BZ_UNEXPECTED_EOF -Returned by @code{BZ2_bzRead} when the compressed file finishes -before the logical end of stream is detected. -@item BZ_OUTBUFF_FULL -Returned by @code{BZ2_bzBuffToBuffCompress} and -@code{BZ2_bzBuffToBuffDecompress} to indicate that the output data -will not fit into the output buffer provided. -@end table - - - -@section Low-level interface - -@subsection @code{BZ2_bzCompressInit} -@example -typedef - struct @{ - char *next_in; - unsigned int avail_in; - unsigned int total_in_lo32; - unsigned int total_in_hi32; - - char *next_out; - unsigned int avail_out; - unsigned int total_out_lo32; - unsigned int total_out_hi32; - - void *state; - - void *(*bzalloc)(void *,int,int); - void (*bzfree)(void *,void *); - void *opaque; - @} - bz_stream; - -int BZ2_bzCompressInit ( bz_stream *strm, - int blockSize100k, - int verbosity, - int workFactor ); - -@end example - -Prepares for compression. The @code{bz_stream} structure -holds all data pertaining to the compression activity. -A @code{bz_stream} structure should be allocated and initialised -prior to the call. -The fields of @code{bz_stream} -comprise the entirety of the user-visible data. @code{state} -is a pointer to the private data structures required for compression. - -Custom memory allocators are supported, via fields @code{bzalloc}, -@code{bzfree}, -and @code{opaque}. The value -@code{opaque} is passed to as the first argument to -all calls to @code{bzalloc} and @code{bzfree}, but is -otherwise ignored by the library. -The call @code{bzalloc ( opaque, n, m )} is expected to return a -pointer @code{p} to -@code{n * m} bytes of memory, and @code{bzfree ( opaque, p )} -should free -that memory. - -If you don't want to use a custom memory allocator, set @code{bzalloc}, -@code{bzfree} and -@code{opaque} to @code{NULL}, -and the library will then use the standard @code{malloc}/@code{free} -routines. - -Before calling @code{BZ2_bzCompressInit}, fields @code{bzalloc}, -@code{bzfree} and @code{opaque} should -be filled appropriately, as just described. Upon return, the internal -state will have been allocated and initialised, and @code{total_in_lo32}, -@code{total_in_hi32}, @code{total_out_lo32} and -@code{total_out_hi32} will have been set to zero. -These four fields are used by the library -to inform the caller of the total amount of data passed into and out of -the library, respectively. You should not try to change them. -As of version 1.0, 64-bit counts are maintained, even on 32-bit -platforms, using the @code{_hi32} fields to store the upper 32 bits -of the count. So, for example, the total amount of data in -is @code{(total_in_hi32 << 32) + total_in_lo32}. - -Parameter @code{blockSize100k} specifies the block size to be used for -compression. It should be a value between 1 and 9 inclusive, and the -actual block size used is 100000 x this figure. 9 gives the best -compression but takes most memory. - -Parameter @code{verbosity} should be set to a number between 0 and 4 -inclusive. 0 is silent, and greater numbers give increasingly verbose -monitoring/debugging output. If the library has been compiled with -@code{-DBZ_NO_STDIO}, no such output will appear for any verbosity -setting. - -Parameter @code{workFactor} controls how the compression phase behaves -when presented with worst case, highly repetitive, input data. If -compression runs into difficulties caused by repetitive data, the -library switches from the standard sorting algorithm to a fallback -algorithm. The fallback is slower than the standard algorithm by -perhaps a factor of three, but always behaves reasonably, no matter how -bad the input. - -Lower values of @code{workFactor} reduce the amount of effort the -standard algorithm will expend before resorting to the fallback. You -should set this parameter carefully; too low, and many inputs will be -handled by the fallback algorithm and so compress rather slowly, too -high, and your average-to-worst case compression times can become very -large. The default value of 30 gives reasonable behaviour over a wide -range of circumstances. - -Allowable values range from 0 to 250 inclusive. 0 is a special case, -equivalent to using the default value of 30. - -Note that the compressed output generated is the same regardless of -whether or not the fallback algorithm is used. - -Be aware also that this parameter may disappear entirely in future -versions of the library. In principle it should be possible to devise a -good way to automatically choose which algorithm to use. Such a -mechanism would render the parameter obsolete. - -Possible return values: -@display - @code{BZ_CONFIG_ERROR} - if the library has been mis-compiled - @code{BZ_PARAM_ERROR} - if @code{strm} is @code{NULL} - or @code{blockSize} < 1 or @code{blockSize} > 9 - or @code{verbosity} < 0 or @code{verbosity} > 4 - or @code{workFactor} < 0 or @code{workFactor} > 250 - @code{BZ_MEM_ERROR} - if not enough memory is available - @code{BZ_OK} - otherwise -@end display -Allowable next actions: -@display - @code{BZ2_bzCompress} - if @code{BZ_OK} is returned - no specific action needed in case of error -@end display - -@subsection @code{BZ2_bzCompress} -@example - int BZ2_bzCompress ( bz_stream *strm, int action ); -@end example -Provides more input and/or output buffer space for the library. The -caller maintains input and output buffers, and calls @code{BZ2_bzCompress} to -transfer data between them. - -Before each call to @code{BZ2_bzCompress}, @code{next_in} should point at -the data to be compressed, and @code{avail_in} should indicate how many -bytes the library may read. @code{BZ2_bzCompress} updates @code{next_in}, -@code{avail_in} and @code{total_in} to reflect the number of bytes it -has read. - -Similarly, @code{next_out} should point to a buffer in which the -compressed data is to be placed, with @code{avail_out} indicating how -much output space is available. @code{BZ2_bzCompress} updates -@code{next_out}, @code{avail_out} and @code{total_out} to reflect the -number of bytes output. - -You may provide and remove as little or as much data as you like on each -call of @code{BZ2_bzCompress}. In the limit, it is acceptable to supply and -remove data one byte at a time, although this would be terribly -inefficient. You should always ensure that at least one byte of output -space is available at each call. - -A second purpose of @code{BZ2_bzCompress} is to request a change of mode of the -compressed stream. - -Conceptually, a compressed stream can be in one of four states: IDLE, -RUNNING, FLUSHING and FINISHING. Before initialisation -(@code{BZ2_bzCompressInit}) and after termination (@code{BZ2_bzCompressEnd}), a -stream is regarded as IDLE. - -Upon initialisation (@code{BZ2_bzCompressInit}), the stream is placed in the -RUNNING state. Subsequent calls to @code{BZ2_bzCompress} should pass -@code{BZ_RUN} as the requested action; other actions are illegal and -will result in @code{BZ_SEQUENCE_ERROR}. - -At some point, the calling program will have provided all the input data -it wants to. It will then want to finish up -- in effect, asking the -library to process any data it might have buffered internally. In this -state, @code{BZ2_bzCompress} will no longer attempt to read data from -@code{next_in}, but it will want to write data to @code{next_out}. -Because the output buffer supplied by the user can be arbitrarily small, -the finishing-up operation cannot necessarily be done with a single call -of @code{BZ2_bzCompress}. - -Instead, the calling program passes @code{BZ_FINISH} as an action to -@code{BZ2_bzCompress}. This changes the stream's state to FINISHING. Any -remaining input (ie, @code{next_in[0 .. avail_in-1]}) is compressed and -transferred to the output buffer. To do this, @code{BZ2_bzCompress} must be -called repeatedly until all the output has been consumed. At that -point, @code{BZ2_bzCompress} returns @code{BZ_STREAM_END}, and the stream's -state is set back to IDLE. @code{BZ2_bzCompressEnd} should then be -called. - -Just to make sure the calling program does not cheat, the library makes -a note of @code{avail_in} at the time of the first call to -@code{BZ2_bzCompress} which has @code{BZ_FINISH} as an action (ie, at the -time the program has announced its intention to not supply any more -input). By comparing this value with that of @code{avail_in} over -subsequent calls to @code{BZ2_bzCompress}, the library can detect any -attempts to slip in more data to compress. Any calls for which this is -detected will return @code{BZ_SEQUENCE_ERROR}. This indicates a -programming mistake which should be corrected. - -Instead of asking to finish, the calling program may ask -@code{BZ2_bzCompress} to take all the remaining input, compress it and -terminate the current (Burrows-Wheeler) compression block. This could -be useful for error control purposes. The mechanism is analogous to -that for finishing: call @code{BZ2_bzCompress} with an action of -@code{BZ_FLUSH}, remove output data, and persist with the -@code{BZ_FLUSH} action until the value @code{BZ_RUN} is returned. As -with finishing, @code{BZ2_bzCompress} detects any attempt to provide more -input data once the flush has begun. - -Once the flush is complete, the stream returns to the normal RUNNING -state. - -This all sounds pretty complex, but isn't really. Here's a table -which shows which actions are allowable in each state, what action -will be taken, what the next state is, and what the non-error return -values are. Note that you can't explicitly ask what state the -stream is in, but nor do you need to -- it can be inferred from the -values returned by @code{BZ2_bzCompress}. -@display -IDLE/@code{any} - Illegal. IDLE state only exists after @code{BZ2_bzCompressEnd} or - before @code{BZ2_bzCompressInit}. - Return value = @code{BZ_SEQUENCE_ERROR} - -RUNNING/@code{BZ_RUN} - Compress from @code{next_in} to @code{next_out} as much as possible. - Next state = RUNNING - Return value = @code{BZ_RUN_OK} - -RUNNING/@code{BZ_FLUSH} - Remember current value of @code{next_in}. Compress from @code{next_in} - to @code{next_out} as much as possible, but do not accept any more input. - Next state = FLUSHING - Return value = @code{BZ_FLUSH_OK} - -RUNNING/@code{BZ_FINISH} - Remember current value of @code{next_in}. Compress from @code{next_in} - to @code{next_out} as much as possible, but do not accept any more input. - Next state = FINISHING - Return value = @code{BZ_FINISH_OK} - -FLUSHING/@code{BZ_FLUSH} - Compress from @code{next_in} to @code{next_out} as much as possible, - but do not accept any more input. - If all the existing input has been used up and all compressed - output has been removed - Next state = RUNNING; Return value = @code{BZ_RUN_OK} - else - Next state = FLUSHING; Return value = @code{BZ_FLUSH_OK} - -FLUSHING/other - Illegal. - Return value = @code{BZ_SEQUENCE_ERROR} - -FINISHING/@code{BZ_FINISH} - Compress from @code{next_in} to @code{next_out} as much as possible, - but to not accept any more input. - If all the existing input has been used up and all compressed - output has been removed - Next state = IDLE; Return value = @code{BZ_STREAM_END} - else - Next state = FINISHING; Return value = @code{BZ_FINISHING} - -FINISHING/other - Illegal. - Return value = @code{BZ_SEQUENCE_ERROR} -@end display - -That still looks complicated? Well, fair enough. The usual sequence -of calls for compressing a load of data is: -@itemize @bullet -@item Get started with @code{BZ2_bzCompressInit}. -@item Shovel data in and shlurp out its compressed form using zero or more -calls of @code{BZ2_bzCompress} with action = @code{BZ_RUN}. -@item Finish up. -Repeatedly call @code{BZ2_bzCompress} with action = @code{BZ_FINISH}, -copying out the compressed output, until @code{BZ_STREAM_END} is returned. -@item Close up and go home. Call @code{BZ2_bzCompressEnd}. -@end itemize -If the data you want to compress fits into your input buffer all -at once, you can skip the calls of @code{BZ2_bzCompress ( ..., BZ_RUN )} and -just do the @code{BZ2_bzCompress ( ..., BZ_FINISH )} calls. - -All required memory is allocated by @code{BZ2_bzCompressInit}. The -compression library can accept any data at all (obviously). So you -shouldn't get any error return values from the @code{BZ2_bzCompress} calls. -If you do, they will be @code{BZ_SEQUENCE_ERROR}, and indicate a bug in -your programming. - -Trivial other possible return values: -@display - @code{BZ_PARAM_ERROR} - if @code{strm} is @code{NULL}, or @code{strm->s} is @code{NULL} -@end display - -@subsection @code{BZ2_bzCompressEnd} -@example -int BZ2_bzCompressEnd ( bz_stream *strm ); -@end example -Releases all memory associated with a compression stream. - -Possible return values: -@display - @code{BZ_PARAM_ERROR} if @code{strm} is @code{NULL} or @code{strm->s} is @code{NULL} - @code{BZ_OK} otherwise -@end display - - -@subsection @code{BZ2_bzDecompressInit} -@example -int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small ); -@end example -Prepares for decompression. As with @code{BZ2_bzCompressInit}, a -@code{bz_stream} record should be allocated and initialised before the -call. Fields @code{bzalloc}, @code{bzfree} and @code{opaque} should be -set if a custom memory allocator is required, or made @code{NULL} for -the normal @code{malloc}/@code{free} routines. Upon return, the internal -state will have been initialised, and @code{total_in} and -@code{total_out} will be zero. - -For the meaning of parameter @code{verbosity}, see @code{BZ2_bzCompressInit}. - -If @code{small} is nonzero, the library will use an alternative -decompression algorithm which uses less memory but at the cost of -decompressing more slowly (roughly speaking, half the speed, but the -maximum memory requirement drops to around 2300k). See Chapter 2 for -more information on memory management. - -Note that the amount of memory needed to decompress -a stream cannot be determined until the stream's header has been read, -so even if @code{BZ2_bzDecompressInit} succeeds, a subsequent -@code{BZ2_bzDecompress} could fail with @code{BZ_MEM_ERROR}. - -Possible return values: -@display - @code{BZ_CONFIG_ERROR} - if the library has been mis-compiled - @code{BZ_PARAM_ERROR} - if @code{(small != 0 && small != 1)} - or @code{(verbosity < 0 || verbosity > 4)} - @code{BZ_MEM_ERROR} - if insufficient memory is available -@end display - -Allowable next actions: -@display - @code{BZ2_bzDecompress} - if @code{BZ_OK} was returned - no specific action required in case of error -@end display - - - -@subsection @code{BZ2_bzDecompress} -@example -int BZ2_bzDecompress ( bz_stream *strm ); -@end example -Provides more input and/out output buffer space for the library. The -caller maintains input and output buffers, and uses @code{BZ2_bzDecompress} -to transfer data between them. - -Before each call to @code{BZ2_bzDecompress}, @code{next_in} -should point at the compressed data, -and @code{avail_in} should indicate how many bytes the library -may read. @code{BZ2_bzDecompress} updates @code{next_in}, @code{avail_in} -and @code{total_in} -to reflect the number of bytes it has read. - -Similarly, @code{next_out} should point to a buffer in which the uncompressed -output is to be placed, with @code{avail_out} indicating how much output space -is available. @code{BZ2_bzCompress} updates @code{next_out}, -@code{avail_out} and @code{total_out} to reflect -the number of bytes output. - -You may provide and remove as little or as much data as you like on -each call of @code{BZ2_bzDecompress}. -In the limit, it is acceptable to -supply and remove data one byte at a time, although this would be -terribly inefficient. You should always ensure that at least one -byte of output space is available at each call. - -Use of @code{BZ2_bzDecompress} is simpler than @code{BZ2_bzCompress}. - -You should provide input and remove output as described above, and -repeatedly call @code{BZ2_bzDecompress} until @code{BZ_STREAM_END} is -returned. Appearance of @code{BZ_STREAM_END} denotes that -@code{BZ2_bzDecompress} has detected the logical end of the compressed -stream. @code{BZ2_bzDecompress} will not produce @code{BZ_STREAM_END} until -all output data has been placed into the output buffer, so once -@code{BZ_STREAM_END} appears, you are guaranteed to have available all -the decompressed output, and @code{BZ2_bzDecompressEnd} can safely be -called. - -If case of an error return value, you should call @code{BZ2_bzDecompressEnd} -to clean up and release memory. - -Possible return values: -@display - @code{BZ_PARAM_ERROR} - if @code{strm} is @code{NULL} or @code{strm->s} is @code{NULL} - or @code{strm->avail_out < 1} - @code{BZ_DATA_ERROR} - if a data integrity error is detected in the compressed stream - @code{BZ_DATA_ERROR_MAGIC} - if the compressed stream doesn't begin with the right magic bytes - @code{BZ_MEM_ERROR} - if there wasn't enough memory available - @code{BZ_STREAM_END} - if the logical end of the data stream was detected and all - output in has been consumed, eg @code{s->avail_out > 0} - @code{BZ_OK} - otherwise -@end display -Allowable next actions: -@display - @code{BZ2_bzDecompress} - if @code{BZ_OK} was returned - @code{BZ2_bzDecompressEnd} - otherwise -@end display - - -@subsection @code{BZ2_bzDecompressEnd} -@example -int BZ2_bzDecompressEnd ( bz_stream *strm ); -@end example -Releases all memory associated with a decompression stream. - -Possible return values: -@display - @code{BZ_PARAM_ERROR} - if @code{strm} is @code{NULL} or @code{strm->s} is @code{NULL} - @code{BZ_OK} - otherwise -@end display - -Allowable next actions: -@display - None. -@end display - - -@section High-level interface - -This interface provides functions for reading and writing -@code{bzip2} format files. First, some general points. - -@itemize @bullet -@item All of the functions take an @code{int*} first argument, - @code{bzerror}. - After each call, @code{bzerror} should be consulted first to determine - the outcome of the call. If @code{bzerror} is @code{BZ_OK}, - the call completed - successfully, and only then should the return value of the function - (if any) be consulted. If @code{bzerror} is @code{BZ_IO_ERROR}, - there was an error - reading/writing the underlying compressed file, and you should - then consult @code{errno}/@code{perror} to determine the - cause of the difficulty. - @code{bzerror} may also be set to various other values; precise details are - given on a per-function basis below. -@item If @code{bzerror} indicates an error - (ie, anything except @code{BZ_OK} and @code{BZ_STREAM_END}), - you should immediately call @code{BZ2_bzReadClose} (or @code{BZ2_bzWriteClose}, - depending on whether you are attempting to read or to write) - to free up all resources associated - with the stream. Once an error has been indicated, behaviour of all calls - except @code{BZ2_bzReadClose} (@code{BZ2_bzWriteClose}) is undefined. - The implication is that (1) @code{bzerror} should - be checked after each call, and (2) if @code{bzerror} indicates an error, - @code{BZ2_bzReadClose} (@code{BZ2_bzWriteClose}) should then be called to clean up. -@item The @code{FILE*} arguments passed to - @code{BZ2_bzReadOpen}/@code{BZ2_bzWriteOpen} - should be set to binary mode. - Most Unix systems will do this by default, but other platforms, - including Windows and Mac, will not. If you omit this, you may - encounter problems when moving code to new platforms. -@item Memory allocation requests are handled by - @code{malloc}/@code{free}. - At present - there is no facility for user-defined memory allocators in the file I/O - functions (could easily be added, though). -@end itemize - - - -@subsection @code{BZ2_bzReadOpen} -@example - typedef void BZFILE; - - BZFILE *BZ2_bzReadOpen ( int *bzerror, FILE *f, - int small, int verbosity, - void *unused, int nUnused ); -@end example -Prepare to read compressed data from file handle @code{f}. @code{f} -should refer to a file which has been opened for reading, and for which -the error indicator (@code{ferror(f)})is not set. If @code{small} is 1, -the library will try to decompress using less memory, at the expense of -speed. - -For reasons explained below, @code{BZ2_bzRead} will decompress the -@code{nUnused} bytes starting at @code{unused}, before starting to read -from the file @code{f}. At most @code{BZ_MAX_UNUSED} bytes may be -supplied like this. If this facility is not required, you should pass -@code{NULL} and @code{0} for @code{unused} and n@code{Unused} -respectively. - -For the meaning of parameters @code{small} and @code{verbosity}, -see @code{BZ2_bzDecompressInit}. - -The amount of memory needed to decompress a file cannot be determined -until the file's header has been read. So it is possible that -@code{BZ2_bzReadOpen} returns @code{BZ_OK} but a subsequent call of -@code{BZ2_bzRead} will return @code{BZ_MEM_ERROR}. - -Possible assignments to @code{bzerror}: -@display - @code{BZ_CONFIG_ERROR} - if the library has been mis-compiled - @code{BZ_PARAM_ERROR} - if @code{f} is @code{NULL} - or @code{small} is neither @code{0} nor @code{1} - or @code{(unused == NULL && nUnused != 0)} - or @code{(unused != NULL && !(0 <= nUnused <= BZ_MAX_UNUSED))} - @code{BZ_IO_ERROR} - if @code{ferror(f)} is nonzero - @code{BZ_MEM_ERROR} - if insufficient memory is available - @code{BZ_OK} - otherwise. -@end display - -Possible return values: -@display - Pointer to an abstract @code{BZFILE} - if @code{bzerror} is @code{BZ_OK} - @code{NULL} - otherwise -@end display - -Allowable next actions: -@display - @code{BZ2_bzRead} - if @code{bzerror} is @code{BZ_OK} - @code{BZ2_bzClose} - otherwise -@end display - - -@subsection @code{BZ2_bzRead} -@example - int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len ); -@end example -Reads up to @code{len} (uncompressed) bytes from the compressed file -@code{b} into -the buffer @code{buf}. If the read was successful, -@code{bzerror} is set to @code{BZ_OK} -and the number of bytes read is returned. If the logical end-of-stream -was detected, @code{bzerror} will be set to @code{BZ_STREAM_END}, -and the number -of bytes read is returned. All other @code{bzerror} values denote an error. - -@code{BZ2_bzRead} will supply @code{len} bytes, -unless the logical stream end is detected -or an error occurs. Because of this, it is possible to detect the -stream end by observing when the number of bytes returned is -less than the number -requested. Nevertheless, this is regarded as inadvisable; you should -instead check @code{bzerror} after every call and watch out for -@code{BZ_STREAM_END}. - -Internally, @code{BZ2_bzRead} copies data from the compressed file in chunks -of size @code{BZ_MAX_UNUSED} bytes -before decompressing it. If the file contains more bytes than strictly -needed to reach the logical end-of-stream, @code{BZ2_bzRead} will almost certainly -read some of the trailing data before signalling @code{BZ_SEQUENCE_END}. -To collect the read but unused data once @code{BZ_SEQUENCE_END} has -appeared, call @code{BZ2_bzReadGetUnused} immediately before @code{BZ2_bzReadClose}. - -Possible assignments to @code{bzerror}: -@display - @code{BZ_PARAM_ERROR} - if @code{b} is @code{NULL} or @code{buf} is @code{NULL} or @code{len < 0} - @code{BZ_SEQUENCE_ERROR} - if @code{b} was opened with @code{BZ2_bzWriteOpen} - @code{BZ_IO_ERROR} - if there is an error reading from the compressed file - @code{BZ_UNEXPECTED_EOF} - if the compressed file ended before the logical end-of-stream was detected - @code{BZ_DATA_ERROR} - if a data integrity error was detected in the compressed stream - @code{BZ_DATA_ERROR_MAGIC} - if the stream does not begin with the requisite header bytes (ie, is not - a @code{bzip2} data file). This is really a special case of @code{BZ_DATA_ERROR}. - @code{BZ_MEM_ERROR} - if insufficient memory was available - @code{BZ_STREAM_END} - if the logical end of stream was detected. - @code{BZ_OK} - otherwise. -@end display - -Possible return values: -@display - number of bytes read - if @code{bzerror} is @code{BZ_OK} or @code{BZ_STREAM_END} - undefined - otherwise -@end display - -Allowable next actions: -@display - collect data from @code{buf}, then @code{BZ2_bzRead} or @code{BZ2_bzReadClose} - if @code{bzerror} is @code{BZ_OK} - collect data from @code{buf}, then @code{BZ2_bzReadClose} or @code{BZ2_bzReadGetUnused} - if @code{bzerror} is @code{BZ_SEQUENCE_END} - @code{BZ2_bzReadClose} - otherwise -@end display - - - -@subsection @code{BZ2_bzReadGetUnused} -@example - void BZ2_bzReadGetUnused ( int* bzerror, BZFILE *b, - void** unused, int* nUnused ); -@end example -Returns data which was read from the compressed file but was not needed -to get to the logical end-of-stream. @code{*unused} is set to the address -of the data, and @code{*nUnused} to the number of bytes. @code{*nUnused} will -be set to a value between @code{0} and @code{BZ_MAX_UNUSED} inclusive. - -This function may only be called once @code{BZ2_bzRead} has signalled -@code{BZ_STREAM_END} but before @code{BZ2_bzReadClose}. - -Possible assignments to @code{bzerror}: -@display - @code{BZ_PARAM_ERROR} - if @code{b} is @code{NULL} - or @code{unused} is @code{NULL} or @code{nUnused} is @code{NULL} - @code{BZ_SEQUENCE_ERROR} - if @code{BZ_STREAM_END} has not been signalled - or if @code{b} was opened with @code{BZ2_bzWriteOpen} - @code{BZ_OK} - otherwise -@end display - -Allowable next actions: -@display - @code{BZ2_bzReadClose} -@end display - - -@subsection @code{BZ2_bzReadClose} -@example - void BZ2_bzReadClose ( int *bzerror, BZFILE *b ); -@end example -Releases all memory pertaining to the compressed file @code{b}. -@code{BZ2_bzReadClose} does not call @code{fclose} on the underlying file -handle, so you should do that yourself if appropriate. -@code{BZ2_bzReadClose} should be called to clean up after all error -situations. - -Possible assignments to @code{bzerror}: -@display - @code{BZ_SEQUENCE_ERROR} - if @code{b} was opened with @code{BZ2_bzOpenWrite} - @code{BZ_OK} - otherwise -@end display - -Allowable next actions: -@display - none -@end display - - - -@subsection @code{BZ2_bzWriteOpen} -@example - BZFILE *BZ2_bzWriteOpen ( int *bzerror, FILE *f, - int blockSize100k, int verbosity, - int workFactor ); -@end example -Prepare to write compressed data to file handle @code{f}. -@code{f} should refer to -a file which has been opened for writing, and for which the error -indicator (@code{ferror(f)})is not set. - -For the meaning of parameters @code{blockSize100k}, -@code{verbosity} and @code{workFactor}, see -@* @code{BZ2_bzCompressInit}. - -All required memory is allocated at this stage, so if the call -completes successfully, @code{BZ_MEM_ERROR} cannot be signalled by a -subsequent call to @code{BZ2_bzWrite}. - -Possible assignments to @code{bzerror}: -@display - @code{BZ_CONFIG_ERROR} - if the library has been mis-compiled - @code{BZ_PARAM_ERROR} - if @code{f} is @code{NULL} - or @code{blockSize100k < 1} or @code{blockSize100k > 9} - @code{BZ_IO_ERROR} - if @code{ferror(f)} is nonzero - @code{BZ_MEM_ERROR} - if insufficient memory is available - @code{BZ_OK} - otherwise -@end display - -Possible return values: -@display - Pointer to an abstract @code{BZFILE} - if @code{bzerror} is @code{BZ_OK} - @code{NULL} - otherwise -@end display - -Allowable next actions: -@display - @code{BZ2_bzWrite} - if @code{bzerror} is @code{BZ_OK} - (you could go directly to @code{BZ2_bzWriteClose}, but this would be pretty pointless) - @code{BZ2_bzWriteClose} - otherwise -@end display - - - -@subsection @code{BZ2_bzWrite} -@example - void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len ); -@end example -Absorbs @code{len} bytes from the buffer @code{buf}, eventually to be -compressed and written to the file. - -Possible assignments to @code{bzerror}: -@display - @code{BZ_PARAM_ERROR} - if @code{b} is @code{NULL} or @code{buf} is @code{NULL} or @code{len < 0} - @code{BZ_SEQUENCE_ERROR} - if b was opened with @code{BZ2_bzReadOpen} - @code{BZ_IO_ERROR} - if there is an error writing the compressed file. - @code{BZ_OK} - otherwise -@end display - - - - -@subsection @code{BZ2_bzWriteClose} -@example - void BZ2_bzWriteClose ( int *bzerror, BZFILE* f, - int abandon, - unsigned int* nbytes_in, - unsigned int* nbytes_out ); - - void BZ2_bzWriteClose64 ( int *bzerror, BZFILE* f, - int abandon, - unsigned int* nbytes_in_lo32, - unsigned int* nbytes_in_hi32, - unsigned int* nbytes_out_lo32, - unsigned int* nbytes_out_hi32 ); -@end example - -Compresses and flushes to the compressed file all data so far supplied -by @code{BZ2_bzWrite}. The logical end-of-stream markers are also written, so -subsequent calls to @code{BZ2_bzWrite} are illegal. All memory associated -with the compressed file @code{b} is released. -@code{fflush} is called on the -compressed file, but it is not @code{fclose}'d. - -If @code{BZ2_bzWriteClose} is called to clean up after an error, the only -action is to release the memory. The library records the error codes -issued by previous calls, so this situation will be detected -automatically. There is no attempt to complete the compression -operation, nor to @code{fflush} the compressed file. You can force this -behaviour to happen even in the case of no error, by passing a nonzero -value to @code{abandon}. - -If @code{nbytes_in} is non-null, @code{*nbytes_in} will be set to be the -total volume of uncompressed data handled. Similarly, @code{nbytes_out} -will be set to the total volume of compressed data written. For -compatibility with older versions of the library, @code{BZ2_bzWriteClose} -only yields the lower 32 bits of these counts. Use -@code{BZ2_bzWriteClose64} if you want the full 64 bit counts. These -two functions are otherwise absolutely identical. - - -Possible assignments to @code{bzerror}: -@display - @code{BZ_SEQUENCE_ERROR} - if @code{b} was opened with @code{BZ2_bzReadOpen} - @code{BZ_IO_ERROR} - if there is an error writing the compressed file - @code{BZ_OK} - otherwise -@end display - -@subsection Handling embedded compressed data streams - -The high-level library facilitates use of -@code{bzip2} data streams which form some part of a surrounding, larger -data stream. -@itemize @bullet -@item For writing, the library takes an open file handle, writes -compressed data to it, @code{fflush}es it but does not @code{fclose} it. -The calling application can write its own data before and after the -compressed data stream, using that same file handle. -@item Reading is more complex, and the facilities are not as general -as they could be since generality is hard to reconcile with efficiency. -@code{BZ2_bzRead} reads from the compressed file in blocks of size -@code{BZ_MAX_UNUSED} bytes, and in doing so probably will overshoot -the logical end of compressed stream. -To recover this data once decompression has -ended, call @code{BZ2_bzReadGetUnused} after the last call of @code{BZ2_bzRead} -(the one returning @code{BZ_STREAM_END}) but before calling -@code{BZ2_bzReadClose}. -@end itemize - -This mechanism makes it easy to decompress multiple @code{bzip2} -streams placed end-to-end. As the end of one stream, when @code{BZ2_bzRead} -returns @code{BZ_STREAM_END}, call @code{BZ2_bzReadGetUnused} to collect the -unused data (copy it into your own buffer somewhere). -That data forms the start of the next compressed stream. -To start uncompressing that next stream, call @code{BZ2_bzReadOpen} again, -feeding in the unused data via the @code{unused}/@code{nUnused} -parameters. -Keep doing this until @code{BZ_STREAM_END} return coincides with the -physical end of file (@code{feof(f)}). In this situation -@code{BZ2_bzReadGetUnused} -will of course return no data. - -This should give some feel for how the high-level interface can be used. -If you require extra flexibility, you'll have to bite the bullet and get -to grips with the low-level interface. - -@subsection Standard file-reading/writing code -Here's how you'd write data to a compressed file: -@example @code -FILE* f; -BZFILE* b; -int nBuf; -char buf[ /* whatever size you like */ ]; -int bzerror; -int nWritten; - -f = fopen ( "myfile.bz2", "w" ); -if (!f) @{ - /* handle error */ -@} -b = BZ2_bzWriteOpen ( &bzerror, f, 9 ); -if (bzerror != BZ_OK) @{ - BZ2_bzWriteClose ( b ); - /* handle error */ -@} - -while ( /* condition */ ) @{ - /* get data to write into buf, and set nBuf appropriately */ - nWritten = BZ2_bzWrite ( &bzerror, b, buf, nBuf ); - if (bzerror == BZ_IO_ERROR) @{ - BZ2_bzWriteClose ( &bzerror, b ); - /* handle error */ - @} -@} - -BZ2_bzWriteClose ( &bzerror, b ); -if (bzerror == BZ_IO_ERROR) @{ - /* handle error */ -@} -@end example -And to read from a compressed file: -@example -FILE* f; -BZFILE* b; -int nBuf; -char buf[ /* whatever size you like */ ]; -int bzerror; -int nWritten; - -f = fopen ( "myfile.bz2", "r" ); -if (!f) @{ - /* handle error */ -@} -b = BZ2_bzReadOpen ( &bzerror, f, 0, NULL, 0 ); -if (bzerror != BZ_OK) @{ - BZ2_bzReadClose ( &bzerror, b ); - /* handle error */ -@} - -bzerror = BZ_OK; -while (bzerror == BZ_OK && /* arbitrary other conditions */) @{ - nBuf = BZ2_bzRead ( &bzerror, b, buf, /* size of buf */ ); - if (bzerror == BZ_OK) @{ - /* do something with buf[0 .. nBuf-1] */ - @} -@} -if (bzerror != BZ_STREAM_END) @{ - BZ2_bzReadClose ( &bzerror, b ); - /* handle error */ -@} else @{ - BZ2_bzReadClose ( &bzerror ); -@} -@end example - - - -@section Utility functions -@subsection @code{BZ2_bzBuffToBuffCompress} -@example - int BZ2_bzBuffToBuffCompress( char* dest, - unsigned int* destLen, - char* source, - unsigned int sourceLen, - int blockSize100k, - int verbosity, - int workFactor ); -@end example -Attempts to compress the data in @code{source[0 .. sourceLen-1]} -into the destination buffer, @code{dest[0 .. *destLen-1]}. -If the destination buffer is big enough, @code{*destLen} is -set to the size of the compressed data, and @code{BZ_OK} is -returned. If the compressed data won't fit, @code{*destLen} -is unchanged, and @code{BZ_OUTBUFF_FULL} is returned. - -Compression in this manner is a one-shot event, done with a single call -to this function. The resulting compressed data is a complete -@code{bzip2} format data stream. There is no mechanism for making -additional calls to provide extra input data. If you want that kind of -mechanism, use the low-level interface. - -For the meaning of parameters @code{blockSize100k}, @code{verbosity} -and @code{workFactor}, @* see @code{BZ2_bzCompressInit}. - -To guarantee that the compressed data will fit in its buffer, allocate -an output buffer of size 1% larger than the uncompressed data, plus -six hundred extra bytes. - -@code{BZ2_bzBuffToBuffDecompress} will not write data at or -beyond @code{dest[*destLen]}, even in case of buffer overflow. - -Possible return values: -@display - @code{BZ_CONFIG_ERROR} - if the library has been mis-compiled - @code{BZ_PARAM_ERROR} - if @code{dest} is @code{NULL} or @code{destLen} is @code{NULL} - or @code{blockSize100k < 1} or @code{blockSize100k > 9} - or @code{verbosity < 0} or @code{verbosity > 4} - or @code{workFactor < 0} or @code{workFactor > 250} - @code{BZ_MEM_ERROR} - if insufficient memory is available - @code{BZ_OUTBUFF_FULL} - if the size of the compressed data exceeds @code{*destLen} - @code{BZ_OK} - otherwise -@end display - - - -@subsection @code{BZ2_bzBuffToBuffDecompress} -@example - int BZ2_bzBuffToBuffDecompress ( char* dest, - unsigned int* destLen, - char* source, - unsigned int sourceLen, - int small, - int verbosity ); -@end example -Attempts to decompress the data in @code{source[0 .. sourceLen-1]} -into the destination buffer, @code{dest[0 .. *destLen-1]}. -If the destination buffer is big enough, @code{*destLen} is -set to the size of the uncompressed data, and @code{BZ_OK} is -returned. If the compressed data won't fit, @code{*destLen} -is unchanged, and @code{BZ_OUTBUFF_FULL} is returned. - -@code{source} is assumed to hold a complete @code{bzip2} format -data stream. @* @code{BZ2_bzBuffToBuffDecompress} tries to decompress -the entirety of the stream into the output buffer. - -For the meaning of parameters @code{small} and @code{verbosity}, -see @code{BZ2_bzDecompressInit}. - -Because the compression ratio of the compressed data cannot be known in -advance, there is no easy way to guarantee that the output buffer will -be big enough. You may of course make arrangements in your code to -record the size of the uncompressed data, but such a mechanism is beyond -the scope of this library. - -@code{BZ2_bzBuffToBuffDecompress} will not write data at or -beyond @code{dest[*destLen]}, even in case of buffer overflow. - -Possible return values: -@display - @code{BZ_CONFIG_ERROR} - if the library has been mis-compiled - @code{BZ_PARAM_ERROR} - if @code{dest} is @code{NULL} or @code{destLen} is @code{NULL} - or @code{small != 0 && small != 1} - or @code{verbosity < 0} or @code{verbosity > 4} - @code{BZ_MEM_ERROR} - if insufficient memory is available - @code{BZ_OUTBUFF_FULL} - if the size of the compressed data exceeds @code{*destLen} - @code{BZ_DATA_ERROR} - if a data integrity error was detected in the compressed data - @code{BZ_DATA_ERROR_MAGIC} - if the compressed data doesn't begin with the right magic bytes - @code{BZ_UNEXPECTED_EOF} - if the compressed data ends unexpectedly - @code{BZ_OK} - otherwise -@end display - - - -@section @code{zlib} compatibility functions -Yoshioka Tsuneo has contributed some functions to -give better @code{zlib} compatibility. These functions are -@code{BZ2_bzopen}, @code{BZ2_bzread}, @code{BZ2_bzwrite}, @code{BZ2_bzflush}, -@code{BZ2_bzclose}, -@code{BZ2_bzerror} and @code{BZ2_bzlibVersion}. -These functions are not (yet) officially part of -the library. If they break, you get to keep all the pieces. -Nevertheless, I think they work ok. -@example -typedef void BZFILE; - -const char * BZ2_bzlibVersion ( void ); -@end example -Returns a string indicating the library version. -@example -BZFILE * BZ2_bzopen ( const char *path, const char *mode ); -BZFILE * BZ2_bzdopen ( int fd, const char *mode ); -@end example -Opens a @code{.bz2} file for reading or writing, using either its name -or a pre-existing file descriptor. -Analogous to @code{fopen} and @code{fdopen}. -@example -int BZ2_bzread ( BZFILE* b, void* buf, int len ); -int BZ2_bzwrite ( BZFILE* b, void* buf, int len ); -@end example -Reads/writes data from/to a previously opened @code{BZFILE}. -Analogous to @code{fread} and @code{fwrite}. -@example -int BZ2_bzflush ( BZFILE* b ); -void BZ2_bzclose ( BZFILE* b ); -@end example -Flushes/closes a @code{BZFILE}. @code{BZ2_bzflush} doesn't actually do -anything. Analogous to @code{fflush} and @code{fclose}. - -@example -const char * BZ2_bzerror ( BZFILE *b, int *errnum ) -@end example -Returns a string describing the more recent error status of -@code{b}, and also sets @code{*errnum} to its numerical value. - - -@section Using the library in a @code{stdio}-free environment - -@subsection Getting rid of @code{stdio} - -In a deeply embedded application, you might want to use just -the memory-to-memory functions. You can do this conveniently -by compiling the library with preprocessor symbol @code{BZ_NO_STDIO} -defined. Doing this gives you a library containing only the following -eight functions: - -@code{BZ2_bzCompressInit}, @code{BZ2_bzCompress}, @code{BZ2_bzCompressEnd} @* -@code{BZ2_bzDecompressInit}, @code{BZ2_bzDecompress}, @code{BZ2_bzDecompressEnd} @* -@code{BZ2_bzBuffToBuffCompress}, @code{BZ2_bzBuffToBuffDecompress} - -When compiled like this, all functions will ignore @code{verbosity} -settings. - -@subsection Critical error handling -@code{libbzip2} contains a number of internal assertion checks which -should, needless to say, never be activated. Nevertheless, if an -assertion should fail, behaviour depends on whether or not the library -was compiled with @code{BZ_NO_STDIO} set. - -For a normal compile, an assertion failure yields the message -@example - bzip2/libbzip2: internal error number N. - This is a bug in bzip2/libbzip2, 1.0 of 21-Mar-2000. - Please report it to me at: jseward@@acm.org. If this happened - when you were using some program which uses libbzip2 as a - component, you should also report this bug to the author(s) - of that program. Please make an effort to report this bug; - timely and accurate bug reports eventually lead to higher - quality software. Thanks. Julian Seward, 21 March 2000. -@end example -where @code{N} is some error code number. @code{exit(3)} -is then called. - -For a @code{stdio}-free library, assertion failures result -in a call to a function declared as: -@example - extern void bz_internal_error ( int errcode ); -@end example -The relevant code is passed as a parameter. You should supply -such a function. - -In either case, once an assertion failure has occurred, any -@code{bz_stream} records involved can be regarded as invalid. -You should not attempt to resume normal operation with them. - -You may, of course, change critical error handling to suit -your needs. As I said above, critical errors indicate bugs -in the library and should not occur. All "normal" error -situations are indicated via error return codes from functions, -and can be recovered from. - - -@section Making a Windows DLL -Everything related to Windows has been contributed by Yoshioka Tsuneo -@* (@code{QWF00133@@niftyserve.or.jp} / -@code{tsuneo-y@@is.aist-nara.ac.jp}), so you should send your queries to -him (but perhaps Cc: me, @code{jseward@@acm.org}). - -My vague understanding of what to do is: using Visual C++ 5.0, -open the project file @code{libbz2.dsp}, and build. That's all. - -If you can't -open the project file for some reason, make a new one, naming these files: -@code{blocksort.c}, @code{bzlib.c}, @code{compress.c}, -@code{crctable.c}, @code{decompress.c}, @code{huffman.c}, @* -@code{randtable.c} and @code{libbz2.def}. You will also need -to name the header files @code{bzlib.h} and @code{bzlib_private.h}. - -If you don't use VC++, you may need to define the proprocessor symbol -@code{_WIN32}. - -Finally, @code{dlltest.c} is a sample program using the DLL. It has a -project file, @code{dlltest.dsp}. - -If you just want a makefile for Visual C, have a look at -@code{makefile.msc}. - -Be aware that if you compile @code{bzip2} itself on Win32, you must set -@code{BZ_UNIX} to 0 and @code{BZ_LCCWIN32} to 1, in the file -@code{bzip2.c}, before compiling. Otherwise the resulting binary won't -work correctly. - -I haven't tried any of this stuff myself, but it all looks plausible. - - - -@chapter Miscellanea - -These are just some random thoughts of mine. Your mileage may -vary. - -@section Limitations of the compressed file format -@code{bzip2-1.0}, @code{0.9.5} and @code{0.9.0} -use exactly the same file format as the previous -version, @code{bzip2-0.1}. This decision was made in the interests of -stability. Creating yet another incompatible compressed file format -would create further confusion and disruption for users. - -Nevertheless, this is not a painless decision. Development -work since the release of @code{bzip2-0.1} in August 1997 -has shown complexities in the file format which slow down -decompression and, in retrospect, are unnecessary. These are: -@itemize @bullet -@item The run-length encoder, which is the first of the - compression transformations, is entirely irrelevant. - The original purpose was to protect the sorting algorithm - from the very worst case input: a string of repeated - symbols. But algorithm steps Q6a and Q6b in the original - Burrows-Wheeler technical report (SRC-124) show how - repeats can be handled without difficulty in block - sorting. -@item The randomisation mechanism doesn't really need to be - there. Udi Manber and Gene Myers published a suffix - array construction algorithm a few years back, which - can be employed to sort any block, no matter how - repetitive, in O(N log N) time. Subsequent work by - Kunihiko Sadakane has produced a derivative O(N (log N)^2) - algorithm which usually outperforms the Manber-Myers - algorithm. - - I could have changed to Sadakane's algorithm, but I find - it to be slower than @code{bzip2}'s existing algorithm for - most inputs, and the randomisation mechanism protects - adequately against bad cases. I didn't think it was - a good tradeoff to make. Partly this is due to the fact - that I was not flooded with email complaints about - @code{bzip2-0.1}'s performance on repetitive data, so - perhaps it isn't a problem for real inputs. - - Probably the best long-term solution, - and the one I have incorporated into 0.9.5 and above, - is to use the existing sorting - algorithm initially, and fall back to a O(N (log N)^2) - algorithm if the standard algorithm gets into difficulties. -@item The compressed file format was never designed to be - handled by a library, and I have had to jump though - some hoops to produce an efficient implementation of - decompression. It's a bit hairy. Try passing - @code{decompress.c} through the C preprocessor - and you'll see what I mean. Much of this complexity - could have been avoided if the compressed size of - each block of data was recorded in the data stream. -@item An Adler-32 checksum, rather than a CRC32 checksum, - would be faster to compute. -@end itemize -It would be fair to say that the @code{bzip2} format was frozen -before I properly and fully understood the performance -consequences of doing so. - -Improvements which I was able to incorporate into -0.9.0, despite using the same file format, are: -@itemize @bullet -@item Single array implementation of the inverse BWT. This - significantly speeds up decompression, presumably - because it reduces the number of cache misses. -@item Faster inverse MTF transform for large MTF values. The - new implementation is based on the notion of sliding blocks - of values. -@item @code{bzip2-0.9.0} now reads and writes files with @code{fread} - and @code{fwrite}; version 0.1 used @code{putc} and @code{getc}. - Duh! Well, you live and learn. - -@end itemize -Further ahead, it would be nice -to be able to do random access into files. This will -require some careful design of compressed file formats. - - - -@section Portability issues -After some consideration, I have decided not to use -GNU @code{autoconf} to configure 0.9.5 or 1.0. - -@code{autoconf}, admirable and wonderful though it is, -mainly assists with portability problems between Unix-like -platforms. But @code{bzip2} doesn't have much in the way -of portability problems on Unix; most of the difficulties appear -when porting to the Mac, or to Microsoft's operating systems. -@code{autoconf} doesn't help in those cases, and brings in a -whole load of new complexity. - -Most people should be able to compile the library and program -under Unix straight out-of-the-box, so to speak, especially -if you have a version of GNU C available. - -There are a couple of @code{__inline__} directives in the code. GNU C -(@code{gcc}) should be able to handle them. If you're not using -GNU C, your C compiler shouldn't see them at all. -If your compiler does, for some reason, see them and doesn't -like them, just @code{#define} @code{__inline__} to be @code{/* */}. One -easy way to do this is to compile with the flag @code{-D__inline__=}, -which should be understood by most Unix compilers. - -If you still have difficulties, try compiling with the macro -@code{BZ_STRICT_ANSI} defined. This should enable you to build the -library in a strictly ANSI compliant environment. Building the program -itself like this is dangerous and not supported, since you remove -@code{bzip2}'s checks against compressing directories, symbolic links, -devices, and other not-really-a-file entities. This could cause -filesystem corruption! - -One other thing: if you create a @code{bzip2} binary for public -distribution, please try and link it statically (@code{gcc -s}). This -avoids all sorts of library-version issues that others may encounter -later on. - -If you build @code{bzip2} on Win32, you must set @code{BZ_UNIX} to 0 and -@code{BZ_LCCWIN32} to 1, in the file @code{bzip2.c}, before compiling. -Otherwise the resulting binary won't work correctly. - - - -@section Reporting bugs -I tried pretty hard to make sure @code{bzip2} is -bug free, both by design and by testing. Hopefully -you'll never need to read this section for real. - -Nevertheless, if @code{bzip2} dies with a segmentation -fault, a bus error or an internal assertion failure, it -will ask you to email me a bug report. Experience with -version 0.1 shows that almost all these problems can -be traced to either compiler bugs or hardware problems. -@itemize @bullet -@item -Recompile the program with no optimisation, and see if it -works. And/or try a different compiler. -I heard all sorts of stories about various flavours -of GNU C (and other compilers) generating bad code for -@code{bzip2}, and I've run across two such examples myself. - -2.7.X versions of GNU C are known to generate bad code from -time to time, at high optimisation levels. -If you get problems, try using the flags -@code{-O2} @code{-fomit-frame-pointer} @code{-fno-strength-reduce}. -You should specifically @emph{not} use @code{-funroll-loops}. - -You may notice that the Makefile runs six tests as part of -the build process. If the program passes all of these, it's -a pretty good (but not 100%) indication that the compiler has -done its job correctly. -@item -If @code{bzip2} crashes randomly, and the crashes are not -repeatable, you may have a flaky memory subsystem. @code{bzip2} -really hammers your memory hierarchy, and if it's a bit marginal, -you may get these problems. Ditto if your disk or I/O subsystem -is slowly failing. Yup, this really does happen. - -Try using a different machine of the same type, and see if -you can repeat the problem. -@item This isn't really a bug, but ... If @code{bzip2} tells -you your file is corrupted on decompression, and you -obtained the file via FTP, there is a possibility that you -forgot to tell FTP to do a binary mode transfer. That absolutely -will cause the file to be non-decompressible. You'll have to transfer -it again. -@end itemize - -If you've incorporated @code{libbzip2} into your own program -and are getting problems, please, please, please, check that the -parameters you are passing in calls to the library, are -correct, and in accordance with what the documentation says -is allowable. I have tried to make the library robust against -such problems, but I'm sure I haven't succeeded. - -Finally, if the above comments don't help, you'll have to send -me a bug report. Now, it's just amazing how many people will -send me a bug report saying something like -@display - bzip2 crashed with segmentation fault on my machine -@end display -and absolutely nothing else. Needless to say, a such a report -is @emph{totally, utterly, completely and comprehensively 100% useless; -a waste of your time, my time, and net bandwidth}. -With no details at all, there's no way I can possibly begin -to figure out what the problem is. - -The rules of the game are: facts, facts, facts. Don't omit -them because "oh, they won't be relevant". At the bare -minimum: -@display - Machine type. Operating system version. - Exact version of @code{bzip2} (do @code{bzip2 -V}). - Exact version of the compiler used. - Flags passed to the compiler. -@end display -However, the most important single thing that will help me is -the file that you were trying to compress or decompress at the -time the problem happened. Without that, my ability to do anything -more than speculate about the cause, is limited. - -Please remember that I connect to the Internet with a modem, so -you should contact me before mailing me huge files. - - -@section Did you get the right package? - -@code{bzip2} is a resource hog. It soaks up large amounts of CPU cycles -and memory. Also, it gives very large latencies. In the worst case, you -can feed many megabytes of uncompressed data into the library before -getting any compressed output, so this probably rules out applications -requiring interactive behaviour. - -These aren't faults of my implementation, I hope, but more -an intrinsic property of the Burrows-Wheeler transform (unfortunately). -Maybe this isn't what you want. - -If you want a compressor and/or library which is faster, uses less -memory but gets pretty good compression, and has minimal latency, -consider Jean-loup -Gailly's and Mark Adler's work, @code{zlib-1.1.2} and -@code{gzip-1.2.4}. Look for them at - -@code{http://www.cdrom.com/pub/infozip/zlib} and -@code{http://www.gzip.org} respectively. - -For something faster and lighter still, you might try Markus F X J -Oberhumer's @code{LZO} real-time compression/decompression library, at -@* @code{http://wildsau.idv.uni-linz.ac.at/mfx/lzo.html}. - -If you want to use the @code{bzip2} algorithms to compress small blocks -of data, 64k bytes or smaller, for example on an on-the-fly disk -compressor, you'd be well advised not to use this library. Instead, -I've made a special library tuned for that kind of use. It's part of -@code{e2compr-0.40}, an on-the-fly disk compressor for the Linux -@code{ext2} filesystem. Look at -@code{http://www.netspace.net.au/~reiter/e2compr}. - - - -@section Testing - -A record of the tests I've done. - -First, some data sets: -@itemize @bullet -@item B: a directory containing 6001 files, one for every length in the - range 0 to 6000 bytes. The files contain random lowercase - letters. 18.7 megabytes. -@item H: my home directory tree. Documents, source code, mail files, - compressed data. H contains B, and also a directory of - files designed as boundary cases for the sorting; mostly very - repetitive, nasty files. 565 megabytes. -@item A: directory tree holding various applications built from source: - @code{egcs}, @code{gcc-2.8.1}, KDE, GTK, Octave, etc. - 2200 megabytes. -@end itemize -The tests conducted are as follows. Each test means compressing -(a copy of) each file in the data set, decompressing it and -comparing it against the original. - -First, a bunch of tests with block sizes and internal buffer -sizes set very small, -to detect any problems with the -blocking and buffering mechanisms. -This required modifying the source code so as to try to -break it. -@enumerate -@item Data set H, with - buffer size of 1 byte, and block size of 23 bytes. -@item Data set B, buffer sizes 1 byte, block size 1 byte. -@item As (2) but small-mode decompression. -@item As (2) with block size 2 bytes. -@item As (2) with block size 3 bytes. -@item As (2) with block size 4 bytes. -@item As (2) with block size 5 bytes. -@item As (2) with block size 6 bytes and small-mode decompression. -@item H with buffer size of 1 byte, but normal block - size (up to 900000 bytes). -@end enumerate -Then some tests with unmodified source code. -@enumerate -@item H, all settings normal. -@item As (1), with small-mode decompress. -@item H, compress with flag @code{-1}. -@item H, compress with flag @code{-s}, decompress with flag @code{-s}. -@item Forwards compatibility: H, @code{bzip2-0.1pl2} compressing, - @code{bzip2-0.9.5} decompressing, all settings normal. -@item Backwards compatibility: H, @code{bzip2-0.9.5} compressing, - @code{bzip2-0.1pl2} decompressing, all settings normal. -@item Bigger tests: A, all settings normal. -@item As (7), using the fallback (Sadakane-like) sorting algorithm. -@item As (8), compress with flag @code{-1}, decompress with flag - @code{-s}. -@item H, using the fallback sorting algorithm. -@item Forwards compatibility: A, @code{bzip2-0.1pl2} compressing, - @code{bzip2-0.9.5} decompressing, all settings normal. -@item Backwards compatibility: A, @code{bzip2-0.9.5} compressing, - @code{bzip2-0.1pl2} decompressing, all settings normal. -@item Misc test: about 400 megabytes of @code{.tar} files with - @code{bzip2} compiled with Checker (a memory access error - detector, like Purify). -@item Misc tests to make sure it builds and runs ok on non-Linux/x86 - platforms. -@end enumerate -These tests were conducted on a 225 MHz IDT WinChip machine, running -Linux 2.0.36. They represent nearly a week of continuous computation. -All tests completed successfully. - - -@section Further reading -@code{bzip2} is not research work, in the sense that it doesn't present -any new ideas. Rather, it's an engineering exercise based on existing -ideas. - -Four documents describe essentially all the ideas behind @code{bzip2}: -@example -Michael Burrows and D. J. Wheeler: - "A block-sorting lossless data compression algorithm" - 10th May 1994. - Digital SRC Research Report 124. - ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.gz - If you have trouble finding it, try searching at the - New Zealand Digital Library, http://www.nzdl.org. - -Daniel S. Hirschberg and Debra A. LeLewer - "Efficient Decoding of Prefix Codes" - Communications of the ACM, April 1990, Vol 33, Number 4. - You might be able to get an electronic copy of this - from the ACM Digital Library. - -David J. Wheeler - Program bred3.c and accompanying document bred3.ps. - This contains the idea behind the multi-table Huffman - coding scheme. - ftp://ftp.cl.cam.ac.uk/users/djw3/ - -Jon L. Bentley and Robert Sedgewick - "Fast Algorithms for Sorting and Searching Strings" - Available from Sedgewick's web page, - www.cs.princeton.edu/~rs -@end example -The following paper gives valuable additional insights into the -algorithm, but is not immediately the basis of any code -used in bzip2. -@example -Peter Fenwick: - Block Sorting Text Compression - Proceedings of the 19th Australasian Computer Science Conference, - Melbourne, Australia. Jan 31 - Feb 2, 1996. - ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps -@end example -Kunihiko Sadakane's sorting algorithm, mentioned above, -is available from: -@example -http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz -@end example -The Manber-Myers suffix array construction -algorithm is described in a paper -available from: -@example -http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps -@end example -Finally, the following paper documents some recent investigations -I made into the performance of sorting algorithms: -@example -Julian Seward: - On the Performance of BWT Sorting Algorithms - Proceedings of the IEEE Data Compression Conference 2000 - Snowbird, Utah. 28-30 March 2000. -@end example - - -@contents - -@bye - diff --git a/reactos/lib/3rdparty/bzip2/manual_1.html b/reactos/lib/3rdparty/bzip2/manual_1.html deleted file mode 100644 index 92ba7c6df62..00000000000 --- a/reactos/lib/3rdparty/bzip2/manual_1.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - -bzip2 and libbzip2 - Introduction - - - - - -

Go to the first, previous, next, last section, table of contents. -


- - -

Introduction

- -

-bzip2 compresses files using the Burrows-Wheeler -block-sorting text compression algorithm, and Huffman coding. -Compression is generally considerably better than that -achieved by more conventional LZ77/LZ78-based compressors, -and approaches the performance of the PPM family of statistical compressors. - -

-

-bzip2 is built on top of libbzip2, a flexible library -for handling compressed data in the bzip2 format. This manual -describes both how to use the program and -how to work with the library interface. Most of the -manual is devoted to this library, not the program, -which is good news if your interest is only in the program. - -

-

-Chapter 2 describes how to use bzip2; this is the only part -you need to read if you just want to know how to operate the program. -Chapter 3 describes the programming interfaces in detail, and -Chapter 4 records some miscellaneous notes which I thought -ought to be recorded somewhere. - -

- -


-

Go to the first, previous, next, last section, table of contents. - - diff --git a/reactos/lib/3rdparty/bzip2/manual_2.html b/reactos/lib/3rdparty/bzip2/manual_2.html deleted file mode 100644 index 39453c42ded..00000000000 --- a/reactos/lib/3rdparty/bzip2/manual_2.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - -bzip2 and libbzip2 - How to use bzip2 - - - - - - -

Go to the first, previous, next, last section, table of contents. -


- - -

How to use bzip2

- -

-This chapter contains a copy of the bzip2 man page, -and nothing else. - -

- -
- - - -

NAME

- -
    -
  • bzip2, bunzip2 - -- a block-sorting file compressor, v1.0 -
  • bzcat - -- decompresses files to stdout -
  • bzip2recover - -- recovers data from damaged bzip2 files -
- - - -

SYNOPSIS

- -
    -
  • bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ] - -
  • bunzip2 [ -fkvsVL ] [ filenames ... ] - -
  • bzcat [ -s ] [ filenames ... ] - -
  • bzip2recover filename - -
- - - -

DESCRIPTION

- -

-bzip2 compresses files using the Burrows-Wheeler block sorting -text compression algorithm, and Huffman coding. Compression is -generally considerably better than that achieved by more conventional -LZ77/LZ78-based compressors, and approaches the performance of the PPM -family of statistical compressors. - -

-

-The command-line options are deliberately very similar to those of GNU -gzip, but they are not identical. - -

-

-bzip2 expects a list of file names to accompany the command-line -flags. Each file is replaced by a compressed version of itself, with -the name original_name.bz2. Each compressed file has the same -modification date, permissions, and, when possible, ownership as the -corresponding original, so that these properties can be correctly -restored at decompression time. File name handling is naive in the -sense that there is no mechanism for preserving original file names, -permissions, ownerships or dates in filesystems which lack these -concepts, or have serious file name length restrictions, such as MS-DOS. - -

-

-bzip2 and bunzip2 will by default not overwrite existing -files. If you want this to happen, specify the -f flag. - -

-

-If no file names are specified, bzip2 compresses from standard -input to standard output. In this case, bzip2 will decline to -write compressed output to a terminal, as this would be entirely -incomprehensible and therefore pointless. - -

-

-bunzip2 (or bzip2 -d) decompresses all -specified files. Files which were not created by bzip2 -will be detected and ignored, and a warning issued. -bzip2 attempts to guess the filename for the decompressed file -from that of the compressed file as follows: - -

    -
  • filename.bz2 becomes filename - -
  • filename.bz becomes filename - -
  • filename.tbz2 becomes filename.tar - -
  • filename.tbz becomes filename.tar - -
  • anyothername becomes anyothername.out - -
- -

-If the file does not end in one of the recognised endings, -.bz2, .bz, -.tbz2 or .tbz, bzip2 complains that it cannot -guess the name of the original file, and uses the original name -with .out appended. - -

-

-As with compression, supplying no -filenames causes decompression from standard input to standard output. - -

-

-bunzip2 will correctly decompress a file which is the -concatenation of two or more compressed files. The result is the -concatenation of the corresponding uncompressed files. Integrity -testing (-t) of concatenated compressed files is also supported. - -

-

-You can also compress or decompress files to the standard output by -giving the -c flag. Multiple files may be compressed and -decompressed like this. The resulting outputs are fed sequentially to -stdout. Compression of multiple files in this manner generates a stream -containing multiple compressed file representations. Such a stream -can be decompressed correctly only by bzip2 version 0.9.0 or -later. Earlier versions of bzip2 will stop after decompressing -the first file in the stream. - -

-

-bzcat (or bzip2 -dc) decompresses all specified files to -the standard output. - -

-

-bzip2 will read arguments from the environment variables -BZIP2 and BZIP, in that order, and will process them -before any arguments read from the command line. This gives a -convenient way to supply default arguments. - -

-

-Compression is always performed, even if the compressed file is slightly -larger than the original. Files of less than about one hundred bytes -tend to get larger, since the compression mechanism has a constant -overhead in the region of 50 bytes. Random data (including the output -of most file compressors) is coded at about 8.05 bits per byte, giving -an expansion of around 0.5%. - -

-

-As a self-check for your protection, bzip2 uses 32-bit CRCs to -make sure that the decompressed version of a file is identical to the -original. This guards against corruption of the compressed data, and -against undetected bugs in bzip2 (hopefully very unlikely). The -chances of data corruption going undetected is microscopic, about one -chance in four billion for each file processed. Be aware, though, that -the check occurs upon decompression, so it can only tell you that -something is wrong. It can't help you recover the original uncompressed -data. You can use bzip2recover to try to recover data from -damaged files. - -

-

-Return values: 0 for a normal exit, 1 for environmental problems (file -not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt -compressed file, 3 for an internal consistency error (eg, bug) which -caused bzip2 to panic. - -

- - - -

OPTIONS

-
- -
-c --stdout -
-Compress or decompress to standard output. -
-d --decompress -
-Force decompression. bzip2, bunzip2 and bzcat are -really the same program, and the decision about what actions to take is -done on the basis of which name is used. This flag overrides that -mechanism, and forces bzip2 to decompress. -
-z --compress -
-The complement to -d: forces compression, regardless of the -invokation name. -
-t --test -
-Check integrity of the specified file(s), but don't decompress them. -This really performs a trial decompression and throws away the result. -
-f --force -
-Force overwrite of output files. Normally, bzip2 will not overwrite -existing output files. Also forces bzip2 to break hard links -to files, which it otherwise wouldn't do. -
-k --keep -
-Keep (don't delete) input files during compression -or decompression. -
-s --small -
-Reduce memory usage, for compression, decompression and testing. Files -are decompressed and tested using a modified algorithm which only -requires 2.5 bytes per block byte. This means any file can be -decompressed in 2300k of memory, albeit at about half the normal speed. - -During compression, -s selects a block size of 200k, which limits -memory use to around the same figure, at the expense of your compression -ratio. In short, if your machine is low on memory (8 megabytes or -less), use -s for everything. See MEMORY MANAGEMENT below. -
-q --quiet -
-Suppress non-essential warning messages. Messages pertaining to -I/O errors and other critical events will not be suppressed. -
-v --verbose -
-Verbose mode -- show the compression ratio for each file processed. -Further -v's increase the verbosity level, spewing out lots of -information which is primarily of interest for diagnostic purposes. -
-L --license -V --version -
-Display the software version, license terms and conditions. -
-1 to -9 -
-Set the block size to 100 k, 200 k .. 900 k when compressing. Has no -effect when decompressing. See MEMORY MANAGEMENT below. -
-- -
-Treats all subsequent arguments as file names, even if they start -with a dash. This is so you can handle files with names beginning -with a dash, for example: bzip2 -- -myfilename. -
--repetitive-fast -
-
--repetitive-best -
-These flags are redundant in versions 0.9.5 and above. They provided -some coarse control over the behaviour of the sorting algorithm in -earlier versions, which was sometimes useful. 0.9.5 and above have an -improved algorithm which renders these flags irrelevant. -
- - - -

MEMORY MANAGEMENT

- -

-bzip2 compresses large files in blocks. The block size affects -both the compression ratio achieved, and the amount of memory needed for -compression and decompression. The flags -1 through -9 -specify the block size to be 100,000 bytes through 900,000 bytes (the -default) respectively. At decompression time, the block size used for -compression is read from the header of the compressed file, and -bunzip2 then allocates itself just enough memory to decompress -the file. Since block sizes are stored in compressed files, it follows -that the flags -1 to -9 are irrelevant to and so ignored -during decompression. - -

-

-Compression and decompression requirements, in bytes, can be estimated -as: - -

-     Compression:   400k + ( 8 x block size )
-
-     Decompression: 100k + ( 4 x block size ), or
-                    100k + ( 2.5 x block size )
-
- -

-Larger block sizes give rapidly diminishing marginal returns. Most of -the compression comes from the first two or three hundred k of block -size, a fact worth bearing in mind when using bzip2 on small machines. -It is also important to appreciate that the decompression memory -requirement is set at compression time by the choice of block size. - -

-

-For files compressed with the default 900k block size, bunzip2 -will require about 3700 kbytes to decompress. To support decompression -of any file on a 4 megabyte machine, bunzip2 has an option to -decompress using approximately half this amount of memory, about 2300 -kbytes. Decompression speed is also halved, so you should use this -option only where necessary. The relevant flag is -s. - -

-

-In general, try and use the largest block size memory constraints allow, -since that maximises the compression achieved. Compression and -decompression speed are virtually unaffected by block size. - -

-

-Another significant point applies to files which fit in a single block --- that means most files you'd encounter using a large block size. The -amount of real memory touched is proportional to the size of the file, -since the file is smaller than a block. For example, compressing a file -20,000 bytes long with the flag -9 will cause the compressor to -allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 -kbytes of it. Similarly, the decompressor will allocate 3700k but only -touch 100k + 20000 * 4 = 180 kbytes. - -

-

-Here is a table which summarises the maximum memory usage for different -block sizes. Also recorded is the total compressed size for 14 files of -the Calgary Text Compression Corpus totalling 3,141,622 bytes. This -column gives some feel for how compression varies with block size. -These figures tend to understate the advantage of larger block sizes for -larger files, since the Corpus is dominated by smaller files. - -

-          Compress   Decompress   Decompress   Corpus
-   Flag     usage      usage       -s usage     Size
-
-    -1      1200k       500k         350k      914704
-    -2      2000k       900k         600k      877703
-    -3      2800k      1300k         850k      860338
-    -4      3600k      1700k        1100k      846899
-    -5      4400k      2100k        1350k      845160
-    -6      5200k      2500k        1600k      838626
-    -7      6100k      2900k        1850k      834096
-    -8      6800k      3300k        2100k      828642
-    -9      7600k      3700k        2350k      828642
-
- - - -

RECOVERING DATA FROM DAMAGED FILES

- -

-bzip2 compresses files in blocks, usually 900kbytes long. Each -block is handled independently. If a media or transmission error causes -a multi-block .bz2 file to become damaged, it may be possible to -recover data from the undamaged blocks in the file. - -

-

-The compressed representation of each block is delimited by a 48-bit -pattern, which makes it possible to find the block boundaries with -reasonable certainty. Each block also carries its own 32-bit CRC, so -damaged blocks can be distinguished from undamaged ones. - -

-

-bzip2recover is a simple program whose purpose is to search for -blocks in .bz2 files, and write each block out into its own -.bz2 file. You can then use bzip2 -t to test the -integrity of the resulting files, and decompress those which are -undamaged. - -

-

-bzip2recover -takes a single argument, the name of the damaged file, -and writes a number of files rec0001file.bz2, - rec0002file.bz2, etc, containing the extracted blocks. - The output filenames are designed so that the use of - wildcards in subsequent processing -- for example, -bzip2 -dc rec*file.bz2 > recovered_data -- lists the files in - the correct order. - -

-

-bzip2recover should be of most use dealing with large .bz2 - files, as these will contain many blocks. It is clearly - futile to use it on damaged single-block files, since a - damaged block cannot be recovered. If you wish to minimise -any potential data loss through media or transmission errors, -you might consider compressing with a smaller - block size. - -

- - - -

PERFORMANCE NOTES

- -

-The sorting phase of compression gathers together similar strings in the -file. Because of this, files containing very long runs of repeated -symbols, like "aabaabaabaab ..." (repeated several hundred times) may -compress more slowly than normal. Versions 0.9.5 and above fare much -better than previous versions in this respect. The ratio between -worst-case and average-case compression time is in the region of 10:1. -For previous versions, this figure was more like 100:1. You can use the --vvvv option to monitor progress in great detail, if you want. - -

-

-Decompression speed is unaffected by these phenomena. - -

-

-bzip2 usually allocates several megabytes of memory to operate -in, and then charges all over it in a fairly random fashion. This means -that performance, both for compressing and decompressing, is largely -determined by the speed at which your machine can service cache misses. -Because of this, small changes to the code to reduce the miss rate have -been observed to give disproportionately large performance improvements. -I imagine bzip2 will perform best on machines with very large -caches. - -

- - - -

CAVEATS

- -

-I/O error messages are not as helpful as they could be. bzip2 -tries hard to detect I/O errors and exit cleanly, but the details of -what the problem is sometimes seem rather misleading. - -

-

-This manual page pertains to version 1.0 of bzip2. Compressed -data created by this version is entirely forwards and backwards -compatible with the previous public releases, versions 0.1pl2, 0.9.0 and -0.9.5, but with the following exception: 0.9.0 and above can correctly -decompress multiple concatenated compressed files. 0.1pl2 cannot do -this; it will stop after decompressing just the first file in the -stream. - -

-

-bzip2recover uses 32-bit integers to represent bit positions in -compressed files, so it cannot handle compressed files more than 512 -megabytes long. This could easily be fixed. - -

- - - -

AUTHOR

-

-Julian Seward, jseward@acm.org. - -

-

-The ideas embodied in bzip2 are due to (at least) the following -people: Michael Burrows and David Wheeler (for the block sorting -transformation), David Wheeler (again, for the Huffman coder), Peter -Fenwick (for the structured coding model in the original bzip, -and many refinements), and Alistair Moffat, Radford Neal and Ian Witten -(for the arithmetic coder in the original bzip). I am much -indebted for their help, support and advice. See the manual in the -source distribution for pointers to sources of documentation. Christian -von Roques encouraged me to look for faster sorting algorithms, so as to -speed up compression. Bela Lubkin encouraged me to improve the -worst-case compression performance. Many people sent patches, helped -with portability problems, lent machines, gave advice and were generally -helpful. - -

-
- -


-

Go to the first, previous, next, last section, table of contents. - - diff --git a/reactos/lib/3rdparty/bzip2/manual_3.html b/reactos/lib/3rdparty/bzip2/manual_3.html deleted file mode 100644 index a8fa7e6828f..00000000000 --- a/reactos/lib/3rdparty/bzip2/manual_3.html +++ /dev/null @@ -1,1773 +0,0 @@ - - - - -bzip2 and libbzip2 - Programming with libbzip2 - - - - - - -

Go to the first, previous, next, last section, table of contents. -


- - -

Programming with libbzip2

- -

-This chapter describes the programming interface to libbzip2. - -

-

-For general background information, particularly about memory -use and performance aspects, you'd be well advised to read Chapter 2 -as well. - -

- - -

Top-level structure

- -

-libbzip2 is a flexible library for compressing and decompressing -data in the bzip2 data format. Although packaged as a single -entity, it helps to regard the library as three separate parts: the low -level interface, and the high level interface, and some utility -functions. - -

-

-The structure of libbzip2's interfaces is similar to -that of Jean-loup Gailly's and Mark Adler's excellent zlib -library. - -

-

-All externally visible symbols have names beginning BZ2_. -This is new in version 1.0. The intention is to minimise pollution -of the namespaces of library clients. - -

- - -

Low-level summary

- -

-This interface provides services for compressing and decompressing -data in memory. There's no provision for dealing with files, streams -or any other I/O mechanisms, just straight memory-to-memory work. -In fact, this part of the library can be compiled without inclusion -of stdio.h, which may be helpful for embedded applications. - -

-

-The low-level part of the library has no global variables and -is therefore thread-safe. - -

-

-Six routines make up the low level interface: -BZ2_bzCompressInit, BZ2_bzCompress, and
BZ2_bzCompressEnd -for compression, -and a corresponding trio BZ2_bzDecompressInit,
BZ2_bzDecompress -and BZ2_bzDecompressEnd for decompression. -The *Init functions allocate -memory for compression/decompression and do other -initialisations, whilst the *End functions close down operations -and release memory. - -

-

-The real work is done by BZ2_bzCompress and BZ2_bzDecompress. -These compress and decompress data from a user-supplied input buffer -to a user-supplied output buffer. These buffers can be any size; -arbitrary quantities of data are handled by making repeated calls -to these functions. This is a flexible mechanism allowing a -consumer-pull style of activity, or producer-push, or a mixture of -both. - -

- - - -

High-level summary

- -

-This interface provides some handy wrappers around the low-level -interface to facilitate reading and writing bzip2 format -files (.bz2 files). The routines provide hooks to facilitate -reading files in which the bzip2 data stream is embedded -within some larger-scale file structure, or where there are -multiple bzip2 data streams concatenated end-to-end. - -

-

-For reading files, BZ2_bzReadOpen, BZ2_bzRead, -BZ2_bzReadClose and
BZ2_bzReadGetUnused are supplied. For -writing files, BZ2_bzWriteOpen, BZ2_bzWrite and -BZ2_bzWriteFinish are available. - -

-

-As with the low-level library, no global variables are used -so the library is per se thread-safe. However, if I/O errors -occur whilst reading or writing the underlying compressed files, -you may have to consult errno to determine the cause of -the error. In that case, you'd need a C library which correctly -supports errno in a multithreaded environment. - -

-

-To make the library a little simpler and more portable, -BZ2_bzReadOpen and BZ2_bzWriteOpen require you to pass them file -handles (FILE*s) which have previously been opened for reading or -writing respectively. That avoids portability problems associated with -file operations and file attributes, whilst not being much of an -imposition on the programmer. - -

- - - -

Utility functions summary

-

-For very simple needs, BZ2_bzBuffToBuffCompress and -BZ2_bzBuffToBuffDecompress are provided. These compress -data in memory from one buffer to another buffer in a single -function call. You should assess whether these functions -fulfill your memory-to-memory compression/decompression -requirements before investing effort in understanding the more -general but more complex low-level interface. - -

-

-Yoshioka Tsuneo (QWF00133@niftyserve.or.jp / -tsuneo-y@is.aist-nara.ac.jp) has contributed some functions to -give better zlib compatibility. These functions are -BZ2_bzopen, BZ2_bzread, BZ2_bzwrite, BZ2_bzflush, -BZ2_bzclose, -BZ2_bzerror and BZ2_bzlibVersion. You may find these functions -more convenient for simple file reading and writing, than those in the -high-level interface. These functions are not (yet) officially part of -the library, and are minimally documented here. If they break, you -get to keep all the pieces. I hope to document them properly when time -permits. - -

-

-Yoshioka also contributed modifications to allow the library to be -built as a Windows DLL. - -

- - - -

Error handling

- -

-The library is designed to recover cleanly in all situations, including -the worst-case situation of decompressing random data. I'm not -100% sure that it can always do this, so you might want to add -a signal handler to catch segmentation violations during decompression -if you are feeling especially paranoid. I would be interested in -hearing more about the robustness of the library to corrupted -compressed data. - -

-

-Version 1.0 is much more robust in this respect than -0.9.0 or 0.9.5. Investigations with Checker (a tool for -detecting problems with memory management, similar to Purify) -indicate that, at least for the few files I tested, all single-bit -errors in the decompressed data are caught properly, with no -segmentation faults, no reads of uninitialised data and no -out of range reads or writes. So it's certainly much improved, -although I wouldn't claim it to be totally bombproof. - -

-

-The file bzlib.h contains all definitions needed to use -the library. In particular, you should definitely not include -bzlib_private.h. - -

-

-In bzlib.h, the various return values are defined. The following -list is not intended as an exhaustive description of the circumstances -in which a given value may be returned -- those descriptions are given -later. Rather, it is intended to convey the rough meaning of each -return value. The first five actions are normal and not intended to -denote an error situation. -

- -
BZ_OK -
-The requested action was completed successfully. -
BZ_RUN_OK -
-
BZ_FLUSH_OK -
-
BZ_FINISH_OK -
-In BZ2_bzCompress, the requested flush/finish/nothing-special action -was completed successfully. -
BZ_STREAM_END -
-Compression of data was completed, or the logical stream end was -detected during decompression. -
- -

-The following return values indicate an error of some kind. -

- -
BZ_CONFIG_ERROR -
-Indicates that the library has been improperly compiled on your -platform -- a major configuration error. Specifically, it means -that sizeof(char), sizeof(short) and sizeof(int) -are not 1, 2 and 4 respectively, as they should be. Note that the -library should still work properly on 64-bit platforms which follow -the LP64 programming model -- that is, where sizeof(long) -and sizeof(void*) are 8. Under LP64, sizeof(int) is -still 4, so libbzip2, which doesn't use the long type, -is OK. -
BZ_SEQUENCE_ERROR -
-When using the library, it is important to call the functions in the -correct sequence and with data structures (buffers etc) in the correct -states. libbzip2 checks as much as it can to ensure this is -happening, and returns BZ_SEQUENCE_ERROR if not. Code which -complies precisely with the function semantics, as detailed below, -should never receive this value; such an event denotes buggy code -which you should investigate. -
BZ_PARAM_ERROR -
-Returned when a parameter to a function call is out of range -or otherwise manifestly incorrect. As with BZ_SEQUENCE_ERROR, -this denotes a bug in the client code. The distinction between -BZ_PARAM_ERROR and BZ_SEQUENCE_ERROR is a bit hazy, but still worth -making. -
BZ_MEM_ERROR -
-Returned when a request to allocate memory failed. Note that the -quantity of memory needed to decompress a stream cannot be determined -until the stream's header has been read. So BZ2_bzDecompress and -BZ2_bzRead may return BZ_MEM_ERROR even though some of -the compressed data has been read. The same is not true for -compression; once BZ2_bzCompressInit or BZ2_bzWriteOpen have -successfully completed, BZ_MEM_ERROR cannot occur. -
BZ_DATA_ERROR -
-Returned when a data integrity error is detected during decompression. -Most importantly, this means when stored and computed CRCs for the -data do not match. This value is also returned upon detection of any -other anomaly in the compressed data. -
BZ_DATA_ERROR_MAGIC -
-As a special case of BZ_DATA_ERROR, it is sometimes useful to -know when the compressed stream does not start with the correct -magic bytes ('B' 'Z' 'h'). -
BZ_IO_ERROR -
-Returned by BZ2_bzRead and BZ2_bzWrite when there is an error -reading or writing in the compressed file, and by BZ2_bzReadOpen -and BZ2_bzWriteOpen for attempts to use a file for which the -error indicator (viz, ferror(f)) is set. -On receipt of BZ_IO_ERROR, the caller should consult -errno and/or perror to acquire operating-system -specific information about the problem. -
BZ_UNEXPECTED_EOF -
-Returned by BZ2_bzRead when the compressed file finishes -before the logical end of stream is detected. -
BZ_OUTBUFF_FULL -
-Returned by BZ2_bzBuffToBuffCompress and -BZ2_bzBuffToBuffDecompress to indicate that the output data -will not fit into the output buffer provided. -
- - - -

Low-level interface

- - - -

BZ2_bzCompressInit

- -
-typedef 
-   struct {
-      char *next_in;
-      unsigned int avail_in;
-      unsigned int total_in_lo32;
-      unsigned int total_in_hi32;
-
-      char *next_out;
-      unsigned int avail_out;
-      unsigned int total_out_lo32;
-      unsigned int total_out_hi32;
-
-      void *state;
-
-      void *(*bzalloc)(void *,int,int);
-      void (*bzfree)(void *,void *);
-      void *opaque;
-   } 
-   bz_stream;
-
-int BZ2_bzCompressInit ( bz_stream *strm, 
-                         int blockSize100k, 
-                         int verbosity,
-                         int workFactor );
-
-
- -

-Prepares for compression. The bz_stream structure -holds all data pertaining to the compression activity. -A bz_stream structure should be allocated and initialised -prior to the call. -The fields of bz_stream -comprise the entirety of the user-visible data. state -is a pointer to the private data structures required for compression. - -

-

-Custom memory allocators are supported, via fields bzalloc, -bzfree, -and opaque. The value -opaque is passed to as the first argument to -all calls to bzalloc and bzfree, but is -otherwise ignored by the library. -The call bzalloc ( opaque, n, m ) is expected to return a -pointer p to -n * m bytes of memory, and bzfree ( opaque, p ) -should free -that memory. - -

-

-If you don't want to use a custom memory allocator, set bzalloc, -bzfree and -opaque to NULL, -and the library will then use the standard malloc/free -routines. - -

-

-Before calling BZ2_bzCompressInit, fields bzalloc, -bzfree and opaque should -be filled appropriately, as just described. Upon return, the internal -state will have been allocated and initialised, and total_in_lo32, -total_in_hi32, total_out_lo32 and -total_out_hi32 will have been set to zero. -These four fields are used by the library -to inform the caller of the total amount of data passed into and out of -the library, respectively. You should not try to change them. -As of version 1.0, 64-bit counts are maintained, even on 32-bit -platforms, using the _hi32 fields to store the upper 32 bits -of the count. So, for example, the total amount of data in -is (total_in_hi32 << 32) + total_in_lo32. - -

-

-Parameter blockSize100k specifies the block size to be used for -compression. It should be a value between 1 and 9 inclusive, and the -actual block size used is 100000 x this figure. 9 gives the best -compression but takes most memory. - -

-

-Parameter verbosity should be set to a number between 0 and 4 -inclusive. 0 is silent, and greater numbers give increasingly verbose -monitoring/debugging output. If the library has been compiled with --DBZ_NO_STDIO, no such output will appear for any verbosity -setting. - -

-

-Parameter workFactor controls how the compression phase behaves -when presented with worst case, highly repetitive, input data. If -compression runs into difficulties caused by repetitive data, the -library switches from the standard sorting algorithm to a fallback -algorithm. The fallback is slower than the standard algorithm by -perhaps a factor of three, but always behaves reasonably, no matter how -bad the input. - -

-

-Lower values of workFactor reduce the amount of effort the -standard algorithm will expend before resorting to the fallback. You -should set this parameter carefully; too low, and many inputs will be -handled by the fallback algorithm and so compress rather slowly, too -high, and your average-to-worst case compression times can become very -large. The default value of 30 gives reasonable behaviour over a wide -range of circumstances. - -

-

-Allowable values range from 0 to 250 inclusive. 0 is a special case, -equivalent to using the default value of 30. - -

-

-Note that the compressed output generated is the same regardless of -whether or not the fallback algorithm is used. - -

-

-Be aware also that this parameter may disappear entirely in future -versions of the library. In principle it should be possible to devise a -good way to automatically choose which algorithm to use. Such a -mechanism would render the parameter obsolete. - -

-

-Possible return values: - -

-      BZ_CONFIG_ERROR
-         if the library has been mis-compiled
-      BZ_PARAM_ERROR 
-         if strm is NULL 
-         or blockSize < 1 or blockSize > 9
-         or verbosity < 0 or verbosity > 4
-         or workFactor < 0 or workFactor > 250
-      BZ_MEM_ERROR 
-         if not enough memory is available
-      BZ_OK 
-         otherwise
-
- -

-Allowable next actions: - -

-      BZ2_bzCompress 
-         if BZ_OK is returned
-      no specific action needed in case of error
-
- - - -

BZ2_bzCompress

- -
-   int BZ2_bzCompress ( bz_stream *strm, int action );
-
- -

-Provides more input and/or output buffer space for the library. The -caller maintains input and output buffers, and calls BZ2_bzCompress to -transfer data between them. - -

-

-Before each call to BZ2_bzCompress, next_in should point at -the data to be compressed, and avail_in should indicate how many -bytes the library may read. BZ2_bzCompress updates next_in, -avail_in and total_in to reflect the number of bytes it -has read. - -

-

-Similarly, next_out should point to a buffer in which the -compressed data is to be placed, with avail_out indicating how -much output space is available. BZ2_bzCompress updates -next_out, avail_out and total_out to reflect the -number of bytes output. - -

-

-You may provide and remove as little or as much data as you like on each -call of BZ2_bzCompress. In the limit, it is acceptable to supply and -remove data one byte at a time, although this would be terribly -inefficient. You should always ensure that at least one byte of output -space is available at each call. - -

-

-A second purpose of BZ2_bzCompress is to request a change of mode of the -compressed stream. - -

-

-Conceptually, a compressed stream can be in one of four states: IDLE, -RUNNING, FLUSHING and FINISHING. Before initialisation -(BZ2_bzCompressInit) and after termination (BZ2_bzCompressEnd), a -stream is regarded as IDLE. - -

-

-Upon initialisation (BZ2_bzCompressInit), the stream is placed in the -RUNNING state. Subsequent calls to BZ2_bzCompress should pass -BZ_RUN as the requested action; other actions are illegal and -will result in BZ_SEQUENCE_ERROR. - -

-

-At some point, the calling program will have provided all the input data -it wants to. It will then want to finish up -- in effect, asking the -library to process any data it might have buffered internally. In this -state, BZ2_bzCompress will no longer attempt to read data from -next_in, but it will want to write data to next_out. -Because the output buffer supplied by the user can be arbitrarily small, -the finishing-up operation cannot necessarily be done with a single call -of BZ2_bzCompress. - -

-

-Instead, the calling program passes BZ_FINISH as an action to -BZ2_bzCompress. This changes the stream's state to FINISHING. Any -remaining input (ie, next_in[0 .. avail_in-1]) is compressed and -transferred to the output buffer. To do this, BZ2_bzCompress must be -called repeatedly until all the output has been consumed. At that -point, BZ2_bzCompress returns BZ_STREAM_END, and the stream's -state is set back to IDLE. BZ2_bzCompressEnd should then be -called. - -

-

-Just to make sure the calling program does not cheat, the library makes -a note of avail_in at the time of the first call to -BZ2_bzCompress which has BZ_FINISH as an action (ie, at the -time the program has announced its intention to not supply any more -input). By comparing this value with that of avail_in over -subsequent calls to BZ2_bzCompress, the library can detect any -attempts to slip in more data to compress. Any calls for which this is -detected will return BZ_SEQUENCE_ERROR. This indicates a -programming mistake which should be corrected. - -

-

-Instead of asking to finish, the calling program may ask -BZ2_bzCompress to take all the remaining input, compress it and -terminate the current (Burrows-Wheeler) compression block. This could -be useful for error control purposes. The mechanism is analogous to -that for finishing: call BZ2_bzCompress with an action of -BZ_FLUSH, remove output data, and persist with the -BZ_FLUSH action until the value BZ_RUN is returned. As -with finishing, BZ2_bzCompress detects any attempt to provide more -input data once the flush has begun. - -

-

-Once the flush is complete, the stream returns to the normal RUNNING -state. - -

-

-This all sounds pretty complex, but isn't really. Here's a table -which shows which actions are allowable in each state, what action -will be taken, what the next state is, and what the non-error return -values are. Note that you can't explicitly ask what state the -stream is in, but nor do you need to -- it can be inferred from the -values returned by BZ2_bzCompress. - -

-IDLE/any           
-      Illegal.  IDLE state only exists after BZ2_bzCompressEnd or
-      before BZ2_bzCompressInit.
-      Return value = BZ_SEQUENCE_ERROR
-
-RUNNING/BZ_RUN     
-      Compress from next_in to next_out as much as possible.
-      Next state = RUNNING
-      Return value = BZ_RUN_OK
-
-RUNNING/BZ_FLUSH   
-      Remember current value of next_in.  Compress from next_in
-      to next_out as much as possible, but do not accept any more input.  
-      Next state = FLUSHING
-      Return value = BZ_FLUSH_OK
-
-RUNNING/BZ_FINISH  
-      Remember current value of next_in.  Compress from next_in
-      to next_out as much as possible, but do not accept any more input.
-      Next state = FINISHING
-      Return value = BZ_FINISH_OK
-
-FLUSHING/BZ_FLUSH  
-      Compress from next_in to next_out as much as possible, 
-      but do not accept any more input.  
-      If all the existing input has been used up and all compressed
-      output has been removed
-         Next state = RUNNING; Return value = BZ_RUN_OK
-      else
-         Next state = FLUSHING; Return value = BZ_FLUSH_OK
-
-FLUSHING/other     
-      Illegal.
-      Return value = BZ_SEQUENCE_ERROR
-
-FINISHING/BZ_FINISH  
-      Compress from next_in to next_out as much as possible,
-      but to not accept any more input.  
-      If all the existing input has been used up and all compressed
-      output has been removed
-         Next state = IDLE; Return value = BZ_STREAM_END
-      else
-         Next state = FINISHING; Return value = BZ_FINISHING
-
-FINISHING/other
-      Illegal.
-      Return value = BZ_SEQUENCE_ERROR
-
- -

-That still looks complicated? Well, fair enough. The usual sequence -of calls for compressing a load of data is: - -

    -
  • Get started with BZ2_bzCompressInit. - -
  • Shovel data in and shlurp out its compressed form using zero or more - -calls of BZ2_bzCompress with action = BZ_RUN. -
  • Finish up. - -Repeatedly call BZ2_bzCompress with action = BZ_FINISH, -copying out the compressed output, until BZ_STREAM_END is returned. -
  • Close up and go home. Call BZ2_bzCompressEnd. - -
- -

-If the data you want to compress fits into your input buffer all -at once, you can skip the calls of BZ2_bzCompress ( ..., BZ_RUN ) and -just do the BZ2_bzCompress ( ..., BZ_FINISH ) calls. - -

-

-All required memory is allocated by BZ2_bzCompressInit. The -compression library can accept any data at all (obviously). So you -shouldn't get any error return values from the BZ2_bzCompress calls. -If you do, they will be BZ_SEQUENCE_ERROR, and indicate a bug in -your programming. - -

-

-Trivial other possible return values: - -

-      BZ_PARAM_ERROR   
-         if strm is NULL, or strm->s is NULL
-
- - - -

BZ2_bzCompressEnd

- -
-int BZ2_bzCompressEnd ( bz_stream *strm );
-
- -

-Releases all memory associated with a compression stream. - -

-

-Possible return values: - -

-   BZ_PARAM_ERROR    if strm is NULL or strm->s is NULL
-   BZ_OK    otherwise
-
- - - -

BZ2_bzDecompressInit

- -
-int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );
-
- -

-Prepares for decompression. As with BZ2_bzCompressInit, a -bz_stream record should be allocated and initialised before the -call. Fields bzalloc, bzfree and opaque should be -set if a custom memory allocator is required, or made NULL for -the normal malloc/free routines. Upon return, the internal -state will have been initialised, and total_in and -total_out will be zero. - -

-

-For the meaning of parameter verbosity, see BZ2_bzCompressInit. - -

-

-If small is nonzero, the library will use an alternative -decompression algorithm which uses less memory but at the cost of -decompressing more slowly (roughly speaking, half the speed, but the -maximum memory requirement drops to around 2300k). See Chapter 2 for -more information on memory management. - -

-

-Note that the amount of memory needed to decompress -a stream cannot be determined until the stream's header has been read, -so even if BZ2_bzDecompressInit succeeds, a subsequent -BZ2_bzDecompress could fail with BZ_MEM_ERROR. - -

-

-Possible return values: - -

-      BZ_CONFIG_ERROR
-         if the library has been mis-compiled
-      BZ_PARAM_ERROR
-         if (small != 0 && small != 1)
-         or (verbosity < 0 || verbosity > 4)
-      BZ_MEM_ERROR
-         if insufficient memory is available
-
- -

-Allowable next actions: - -

-      BZ2_bzDecompress
-         if BZ_OK was returned
-      no specific action required in case of error
-
- -

- - -

- - -

BZ2_bzDecompress

- -
-int BZ2_bzDecompress ( bz_stream *strm );
-
- -

-Provides more input and/out output buffer space for the library. The -caller maintains input and output buffers, and uses BZ2_bzDecompress -to transfer data between them. - -

-

-Before each call to BZ2_bzDecompress, next_in -should point at the compressed data, -and avail_in should indicate how many bytes the library -may read. BZ2_bzDecompress updates next_in, avail_in -and total_in -to reflect the number of bytes it has read. - -

-

-Similarly, next_out should point to a buffer in which the uncompressed -output is to be placed, with avail_out indicating how much output space -is available. BZ2_bzCompress updates next_out, -avail_out and total_out to reflect -the number of bytes output. - -

-

-You may provide and remove as little or as much data as you like on -each call of BZ2_bzDecompress. -In the limit, it is acceptable to -supply and remove data one byte at a time, although this would be -terribly inefficient. You should always ensure that at least one -byte of output space is available at each call. - -

-

-Use of BZ2_bzDecompress is simpler than BZ2_bzCompress. - -

-

-You should provide input and remove output as described above, and -repeatedly call BZ2_bzDecompress until BZ_STREAM_END is -returned. Appearance of BZ_STREAM_END denotes that -BZ2_bzDecompress has detected the logical end of the compressed -stream. BZ2_bzDecompress will not produce BZ_STREAM_END until -all output data has been placed into the output buffer, so once -BZ_STREAM_END appears, you are guaranteed to have available all -the decompressed output, and BZ2_bzDecompressEnd can safely be -called. - -

-

-If case of an error return value, you should call BZ2_bzDecompressEnd -to clean up and release memory. - -

-

-Possible return values: - -

-      BZ_PARAM_ERROR
-         if strm is NULL or strm->s is NULL
-         or strm->avail_out < 1
-      BZ_DATA_ERROR
-         if a data integrity error is detected in the compressed stream
-      BZ_DATA_ERROR_MAGIC
-         if the compressed stream doesn't begin with the right magic bytes
-      BZ_MEM_ERROR
-         if there wasn't enough memory available
-      BZ_STREAM_END
-         if the logical end of the data stream was detected and all
-         output in has been consumed, eg s->avail_out > 0
-      BZ_OK
-         otherwise
-
- -

-Allowable next actions: - -

-      BZ2_bzDecompress
-         if BZ_OK was returned
-      BZ2_bzDecompressEnd
-         otherwise
-
- - - -

BZ2_bzDecompressEnd

- -
-int BZ2_bzDecompressEnd ( bz_stream *strm );
-
- -

-Releases all memory associated with a decompression stream. - -

-

-Possible return values: - -

-      BZ_PARAM_ERROR
-         if strm is NULL or strm->s is NULL
-      BZ_OK
-         otherwise
-
- -

-Allowable next actions: - -

-      None.
-
- - - -

High-level interface

- -

-This interface provides functions for reading and writing -bzip2 format files. First, some general points. - -

- -
    -
  • All of the functions take an int* first argument, - - bzerror. - After each call, bzerror should be consulted first to determine - the outcome of the call. If bzerror is BZ_OK, - the call completed - successfully, and only then should the return value of the function - (if any) be consulted. If bzerror is BZ_IO_ERROR, - there was an error - reading/writing the underlying compressed file, and you should - then consult errno/perror to determine the - cause of the difficulty. - bzerror may also be set to various other values; precise details are - given on a per-function basis below. -
  • If bzerror indicates an error - - (ie, anything except BZ_OK and BZ_STREAM_END), - you should immediately call BZ2_bzReadClose (or BZ2_bzWriteClose, - depending on whether you are attempting to read or to write) - to free up all resources associated - with the stream. Once an error has been indicated, behaviour of all calls - except BZ2_bzReadClose (BZ2_bzWriteClose) is undefined. - The implication is that (1) bzerror should - be checked after each call, and (2) if bzerror indicates an error, - BZ2_bzReadClose (BZ2_bzWriteClose) should then be called to clean up. -
  • The FILE* arguments passed to - - BZ2_bzReadOpen/BZ2_bzWriteOpen - should be set to binary mode. - Most Unix systems will do this by default, but other platforms, - including Windows and Mac, will not. If you omit this, you may - encounter problems when moving code to new platforms. -
  • Memory allocation requests are handled by - - malloc/free. - At present - there is no facility for user-defined memory allocators in the file I/O - functions (could easily be added, though). -
- - - -

BZ2_bzReadOpen

- -
-   typedef void BZFILE;
-
-   BZFILE *BZ2_bzReadOpen ( int *bzerror, FILE *f, 
-                            int small, int verbosity,
-                            void *unused, int nUnused );
-
- -

-Prepare to read compressed data from file handle f. f -should refer to a file which has been opened for reading, and for which -the error indicator (ferror(f))is not set. If small is 1, -the library will try to decompress using less memory, at the expense of -speed. - -

-

-For reasons explained below, BZ2_bzRead will decompress the -nUnused bytes starting at unused, before starting to read -from the file f. At most BZ_MAX_UNUSED bytes may be -supplied like this. If this facility is not required, you should pass -NULL and 0 for unused and nUnused -respectively. - -

-

-For the meaning of parameters small and verbosity, -see BZ2_bzDecompressInit. - -

-

-The amount of memory needed to decompress a file cannot be determined -until the file's header has been read. So it is possible that -BZ2_bzReadOpen returns BZ_OK but a subsequent call of -BZ2_bzRead will return BZ_MEM_ERROR. - -

-

-Possible assignments to bzerror: - -

-      BZ_CONFIG_ERROR
-         if the library has been mis-compiled
-      BZ_PARAM_ERROR
-         if f is NULL 
-         or small is neither 0 nor 1                 
-         or (unused == NULL && nUnused != 0)
-         or (unused != NULL && !(0 <= nUnused <= BZ_MAX_UNUSED))
-      BZ_IO_ERROR    
-         if ferror(f) is nonzero
-      BZ_MEM_ERROR   
-         if insufficient memory is available
-      BZ_OK
-         otherwise.
-
- -

-Possible return values: - -

-      Pointer to an abstract BZFILE        
-         if bzerror is BZ_OK   
-      NULL
-         otherwise
-
- -

-Allowable next actions: - -

-      BZ2_bzRead
-         if bzerror is BZ_OK   
-      BZ2_bzClose 
-         otherwise
-
- - - -

BZ2_bzRead

- -
-   int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );
-
- -

-Reads up to len (uncompressed) bytes from the compressed file -b into -the buffer buf. If the read was successful, -bzerror is set to BZ_OK -and the number of bytes read is returned. If the logical end-of-stream -was detected, bzerror will be set to BZ_STREAM_END, -and the number -of bytes read is returned. All other bzerror values denote an error. - -

-

-BZ2_bzRead will supply len bytes, -unless the logical stream end is detected -or an error occurs. Because of this, it is possible to detect the -stream end by observing when the number of bytes returned is -less than the number -requested. Nevertheless, this is regarded as inadvisable; you should -instead check bzerror after every call and watch out for -BZ_STREAM_END. - -

-

-Internally, BZ2_bzRead copies data from the compressed file in chunks -of size BZ_MAX_UNUSED bytes -before decompressing it. If the file contains more bytes than strictly -needed to reach the logical end-of-stream, BZ2_bzRead will almost certainly -read some of the trailing data before signalling BZ_SEQUENCE_END. -To collect the read but unused data once BZ_SEQUENCE_END has -appeared, call BZ2_bzReadGetUnused immediately before BZ2_bzReadClose. - -

-

-Possible assignments to bzerror: - -

-      BZ_PARAM_ERROR
-         if b is NULL or buf is NULL or len < 0
-      BZ_SEQUENCE_ERROR 
-         if b was opened with BZ2_bzWriteOpen
-      BZ_IO_ERROR 
-         if there is an error reading from the compressed file
-      BZ_UNEXPECTED_EOF 
-         if the compressed file ended before the logical end-of-stream was detected
-      BZ_DATA_ERROR 
-         if a data integrity error was detected in the compressed stream
-      BZ_DATA_ERROR_MAGIC
-         if the stream does not begin with the requisite header bytes (ie, is not 
-         a bzip2 data file).  This is really a special case of BZ_DATA_ERROR.
-      BZ_MEM_ERROR 
-         if insufficient memory was available
-      BZ_STREAM_END 
-         if the logical end of stream was detected.
-      BZ_OK
-         otherwise.
-
- -

-Possible return values: - -

-      number of bytes read
-         if bzerror is BZ_OK or BZ_STREAM_END
-      undefined
-         otherwise
-
- -

-Allowable next actions: - -

-      collect data from buf, then BZ2_bzRead or BZ2_bzReadClose
-         if bzerror is BZ_OK 
-      collect data from buf, then BZ2_bzReadClose or BZ2_bzReadGetUnused 
-         if bzerror is BZ_SEQUENCE_END   
-      BZ2_bzReadClose 
-         otherwise
-
- - - -

BZ2_bzReadGetUnused

- -
-   void BZ2_bzReadGetUnused ( int* bzerror, BZFILE *b, 
-                              void** unused, int* nUnused );
-
- -

-Returns data which was read from the compressed file but was not needed -to get to the logical end-of-stream. *unused is set to the address -of the data, and *nUnused to the number of bytes. *nUnused will -be set to a value between 0 and BZ_MAX_UNUSED inclusive. - -

-

-This function may only be called once BZ2_bzRead has signalled -BZ_STREAM_END but before BZ2_bzReadClose. - -

-

-Possible assignments to bzerror: - -

-      BZ_PARAM_ERROR 
-         if b is NULL 
-         or unused is NULL or nUnused is NULL
-      BZ_SEQUENCE_ERROR 
-         if BZ_STREAM_END has not been signalled
-         or if b was opened with BZ2_bzWriteOpen
-     BZ_OK
-         otherwise
-
- -

-Allowable next actions: - -

-      BZ2_bzReadClose
-
- - - -

BZ2_bzReadClose

- -
-   void BZ2_bzReadClose ( int *bzerror, BZFILE *b );
-
- -

-Releases all memory pertaining to the compressed file b. -BZ2_bzReadClose does not call fclose on the underlying file -handle, so you should do that yourself if appropriate. -BZ2_bzReadClose should be called to clean up after all error -situations. - -

-

-Possible assignments to bzerror: - -

-      BZ_SEQUENCE_ERROR 
-         if b was opened with BZ2_bzOpenWrite 
-      BZ_OK 
-         otherwise
-
- -

-Allowable next actions: - -

-      none
-
- - - -

BZ2_bzWriteOpen

- -
-   BZFILE *BZ2_bzWriteOpen ( int *bzerror, FILE *f, 
-                             int blockSize100k, int verbosity,
-                             int workFactor );
-
- -

-Prepare to write compressed data to file handle f. -f should refer to -a file which has been opened for writing, and for which the error -indicator (ferror(f))is not set. - -

-

-For the meaning of parameters blockSize100k, -verbosity and workFactor, see -
BZ2_bzCompressInit. - -

-

-All required memory is allocated at this stage, so if the call -completes successfully, BZ_MEM_ERROR cannot be signalled by a -subsequent call to BZ2_bzWrite. - -

-

-Possible assignments to bzerror: - -

-      BZ_CONFIG_ERROR
-         if the library has been mis-compiled
-      BZ_PARAM_ERROR 
-         if f is NULL 
-         or blockSize100k < 1 or blockSize100k > 9
-      BZ_IO_ERROR 
-         if ferror(f) is nonzero
-      BZ_MEM_ERROR 
-         if insufficient memory is available
-      BZ_OK 
-         otherwise
-
- -

-Possible return values: - -

-      Pointer to an abstract BZFILE  
-         if bzerror is BZ_OK   
-      NULL 
-         otherwise
-
- -

-Allowable next actions: - -

-      BZ2_bzWrite 
-         if bzerror is BZ_OK 
-         (you could go directly to BZ2_bzWriteClose, but this would be pretty pointless)
-      BZ2_bzWriteClose 
-         otherwise
-
- - - -

BZ2_bzWrite

- -
-   void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );
-
- -

-Absorbs len bytes from the buffer buf, eventually to be -compressed and written to the file. - -

-

-Possible assignments to bzerror: - -

-      BZ_PARAM_ERROR 
-         if b is NULL or buf is NULL or len < 0
-      BZ_SEQUENCE_ERROR 
-         if b was opened with BZ2_bzReadOpen
-      BZ_IO_ERROR 
-         if there is an error writing the compressed file.
-      BZ_OK 
-         otherwise
-
- - - -

BZ2_bzWriteClose

- -
-   void BZ2_bzWriteClose ( int *bzerror, BZFILE* f,
-                           int abandon,
-                           unsigned int* nbytes_in,
-                           unsigned int* nbytes_out );
-
-   void BZ2_bzWriteClose64 ( int *bzerror, BZFILE* f,
-                             int abandon,
-                             unsigned int* nbytes_in_lo32,
-                             unsigned int* nbytes_in_hi32,
-                             unsigned int* nbytes_out_lo32,
-                             unsigned int* nbytes_out_hi32 );
-
- -

-Compresses and flushes to the compressed file all data so far supplied -by BZ2_bzWrite. The logical end-of-stream markers are also written, so -subsequent calls to BZ2_bzWrite are illegal. All memory associated -with the compressed file b is released. -fflush is called on the -compressed file, but it is not fclose'd. - -

-

-If BZ2_bzWriteClose is called to clean up after an error, the only -action is to release the memory. The library records the error codes -issued by previous calls, so this situation will be detected -automatically. There is no attempt to complete the compression -operation, nor to fflush the compressed file. You can force this -behaviour to happen even in the case of no error, by passing a nonzero -value to abandon. - -

-

-If nbytes_in is non-null, *nbytes_in will be set to be the -total volume of uncompressed data handled. Similarly, nbytes_out -will be set to the total volume of compressed data written. For -compatibility with older versions of the library, BZ2_bzWriteClose -only yields the lower 32 bits of these counts. Use -BZ2_bzWriteClose64 if you want the full 64 bit counts. These -two functions are otherwise absolutely identical. - -

- -

-Possible assignments to bzerror: - -

-      BZ_SEQUENCE_ERROR 
-         if b was opened with BZ2_bzReadOpen
-      BZ_IO_ERROR 
-         if there is an error writing the compressed file
-      BZ_OK 
-         otherwise
-
- - - -

Handling embedded compressed data streams

- -

-The high-level library facilitates use of -bzip2 data streams which form some part of a surrounding, larger -data stream. - -

    -
  • For writing, the library takes an open file handle, writes - -compressed data to it, fflushes it but does not fclose it. -The calling application can write its own data before and after the -compressed data stream, using that same file handle. -
  • Reading is more complex, and the facilities are not as general - -as they could be since generality is hard to reconcile with efficiency. -BZ2_bzRead reads from the compressed file in blocks of size -BZ_MAX_UNUSED bytes, and in doing so probably will overshoot -the logical end of compressed stream. -To recover this data once decompression has -ended, call BZ2_bzReadGetUnused after the last call of BZ2_bzRead -(the one returning BZ_STREAM_END) but before calling -BZ2_bzReadClose. -
- -

-This mechanism makes it easy to decompress multiple bzip2 -streams placed end-to-end. As the end of one stream, when BZ2_bzRead -returns BZ_STREAM_END, call BZ2_bzReadGetUnused to collect the -unused data (copy it into your own buffer somewhere). -That data forms the start of the next compressed stream. -To start uncompressing that next stream, call BZ2_bzReadOpen again, -feeding in the unused data via the unused/nUnused -parameters. -Keep doing this until BZ_STREAM_END return coincides with the -physical end of file (feof(f)). In this situation -BZ2_bzReadGetUnused -will of course return no data. - -

-

-This should give some feel for how the high-level interface can be used. -If you require extra flexibility, you'll have to bite the bullet and get -to grips with the low-level interface. - -

- - -

Standard file-reading/writing code

-

-Here's how you'd write data to a compressed file: - -

-FILE*   f;
-BZFILE* b;
-int     nBuf;
-char    buf[ /* whatever size you like */ ];
-int     bzerror;
-int     nWritten;
-
-f = fopen ( "myfile.bz2", "w" );
-if (!f) {
-   /* handle error */
-}
-b = BZ2_bzWriteOpen ( &bzerror, f, 9 );
-if (bzerror != BZ_OK) {
-   BZ2_bzWriteClose ( b );
-   /* handle error */
-}
-
-while ( /* condition */ ) {
-   /* get data to write into buf, and set nBuf appropriately */
-   nWritten = BZ2_bzWrite ( &bzerror, b, buf, nBuf );
-   if (bzerror == BZ_IO_ERROR) { 
-      BZ2_bzWriteClose ( &bzerror, b );
-      /* handle error */
-   }
-}
-
-BZ2_bzWriteClose ( &bzerror, b );
-if (bzerror == BZ_IO_ERROR) {
-   /* handle error */
-}
-
- -

-And to read from a compressed file: - -

-FILE*   f;
-BZFILE* b;
-int     nBuf;
-char    buf[ /* whatever size you like */ ];
-int     bzerror;
-int     nWritten;
-
-f = fopen ( "myfile.bz2", "r" );
-if (!f) {
-   /* handle error */
-}
-b = BZ2_bzReadOpen ( &bzerror, f, 0, NULL, 0 );
-if (bzerror != BZ_OK) {
-   BZ2_bzReadClose ( &bzerror, b );
-   /* handle error */
-}
-
-bzerror = BZ_OK;
-while (bzerror == BZ_OK && /* arbitrary other conditions */) {
-   nBuf = BZ2_bzRead ( &bzerror, b, buf, /* size of buf */ );
-   if (bzerror == BZ_OK) {
-      /* do something with buf[0 .. nBuf-1] */
-   }
-}
-if (bzerror != BZ_STREAM_END) {
-   BZ2_bzReadClose ( &bzerror, b );
-   /* handle error */
-} else {
-   BZ2_bzReadClose ( &bzerror );
-}
-
- - - -

Utility functions

- - -

BZ2_bzBuffToBuffCompress

- -
-   int BZ2_bzBuffToBuffCompress( char*         dest,
-                                 unsigned int* destLen,
-                                 char*         source,
-                                 unsigned int  sourceLen,
-                                 int           blockSize100k,
-                                 int           verbosity,
-                                 int           workFactor );
-
- -

-Attempts to compress the data in source[0 .. sourceLen-1] -into the destination buffer, dest[0 .. *destLen-1]. -If the destination buffer is big enough, *destLen is -set to the size of the compressed data, and BZ_OK is -returned. If the compressed data won't fit, *destLen -is unchanged, and BZ_OUTBUFF_FULL is returned. - -

-

-Compression in this manner is a one-shot event, done with a single call -to this function. The resulting compressed data is a complete -bzip2 format data stream. There is no mechanism for making -additional calls to provide extra input data. If you want that kind of -mechanism, use the low-level interface. - -

-

-For the meaning of parameters blockSize100k, verbosity -and workFactor,
see BZ2_bzCompressInit. - -

-

-To guarantee that the compressed data will fit in its buffer, allocate -an output buffer of size 1% larger than the uncompressed data, plus -six hundred extra bytes. - -

-

-BZ2_bzBuffToBuffDecompress will not write data at or -beyond dest[*destLen], even in case of buffer overflow. - -

-

-Possible return values: - -

-      BZ_CONFIG_ERROR
-         if the library has been mis-compiled
-      BZ_PARAM_ERROR 
-         if dest is NULL or destLen is NULL
-         or blockSize100k < 1 or blockSize100k > 9
-         or verbosity < 0 or verbosity > 4 
-         or workFactor < 0 or workFactor > 250
-      BZ_MEM_ERROR
-         if insufficient memory is available 
-      BZ_OUTBUFF_FULL
-         if the size of the compressed data exceeds *destLen
-      BZ_OK 
-         otherwise
-
- - - -

BZ2_bzBuffToBuffDecompress

- -
-   int BZ2_bzBuffToBuffDecompress ( char*         dest,
-                                    unsigned int* destLen,
-                                    char*         source,
-                                    unsigned int  sourceLen,
-                                    int           small,
-                                    int           verbosity );
-
- -

-Attempts to decompress the data in source[0 .. sourceLen-1] -into the destination buffer, dest[0 .. *destLen-1]. -If the destination buffer is big enough, *destLen is -set to the size of the uncompressed data, and BZ_OK is -returned. If the compressed data won't fit, *destLen -is unchanged, and BZ_OUTBUFF_FULL is returned. - -

-

-source is assumed to hold a complete bzip2 format -data stream.
BZ2_bzBuffToBuffDecompress tries to decompress -the entirety of the stream into the output buffer. - -

-

-For the meaning of parameters small and verbosity, -see BZ2_bzDecompressInit. - -

-

-Because the compression ratio of the compressed data cannot be known in -advance, there is no easy way to guarantee that the output buffer will -be big enough. You may of course make arrangements in your code to -record the size of the uncompressed data, but such a mechanism is beyond -the scope of this library. - -

-

-BZ2_bzBuffToBuffDecompress will not write data at or -beyond dest[*destLen], even in case of buffer overflow. - -

-

-Possible return values: - -

-      BZ_CONFIG_ERROR
-         if the library has been mis-compiled
-      BZ_PARAM_ERROR 
-         if dest is NULL or destLen is NULL
-         or small != 0 && small != 1
-         or verbosity < 0 or verbosity > 4 
-      BZ_MEM_ERROR
-         if insufficient memory is available 
-      BZ_OUTBUFF_FULL
-         if the size of the compressed data exceeds *destLen
-      BZ_DATA_ERROR
-         if a data integrity error was detected in the compressed data
-      BZ_DATA_ERROR_MAGIC
-         if the compressed data doesn't begin with the right magic bytes
-      BZ_UNEXPECTED_EOF
-         if the compressed data ends unexpectedly
-      BZ_OK 
-         otherwise
-
- - - -

zlib compatibility functions

-

-Yoshioka Tsuneo has contributed some functions to -give better zlib compatibility. These functions are -BZ2_bzopen, BZ2_bzread, BZ2_bzwrite, BZ2_bzflush, -BZ2_bzclose, -BZ2_bzerror and BZ2_bzlibVersion. -These functions are not (yet) officially part of -the library. If they break, you get to keep all the pieces. -Nevertheless, I think they work ok. - -

-typedef void BZFILE;
-
-const char * BZ2_bzlibVersion ( void );
-
- -

-Returns a string indicating the library version. - -

-BZFILE * BZ2_bzopen  ( const char *path, const char *mode );
-BZFILE * BZ2_bzdopen ( int        fd,    const char *mode );
-
- -

-Opens a .bz2 file for reading or writing, using either its name -or a pre-existing file descriptor. -Analogous to fopen and fdopen. - -

-int BZ2_bzread  ( BZFILE* b, void* buf, int len );
-int BZ2_bzwrite ( BZFILE* b, void* buf, int len );
-
- -

-Reads/writes data from/to a previously opened BZFILE. -Analogous to fread and fwrite. - -

-int  BZ2_bzflush ( BZFILE* b );
-void BZ2_bzclose ( BZFILE* b );
-
- -

-Flushes/closes a BZFILE. BZ2_bzflush doesn't actually do -anything. Analogous to fflush and fclose. - -

- -
-const char * BZ2_bzerror ( BZFILE *b, int *errnum )
-
- -

-Returns a string describing the more recent error status of -b, and also sets *errnum to its numerical value. - -

- - - -

Using the library in a stdio-free environment

- - - -

Getting rid of stdio

- -

-In a deeply embedded application, you might want to use just -the memory-to-memory functions. You can do this conveniently -by compiling the library with preprocessor symbol BZ_NO_STDIO -defined. Doing this gives you a library containing only the following -eight functions: - -

-

-BZ2_bzCompressInit, BZ2_bzCompress, BZ2_bzCompressEnd
-BZ2_bzDecompressInit, BZ2_bzDecompress, BZ2_bzDecompressEnd
-BZ2_bzBuffToBuffCompress, BZ2_bzBuffToBuffDecompress - -

-

-When compiled like this, all functions will ignore verbosity -settings. - -

- - -

Critical error handling

-

-libbzip2 contains a number of internal assertion checks which -should, needless to say, never be activated. Nevertheless, if an -assertion should fail, behaviour depends on whether or not the library -was compiled with BZ_NO_STDIO set. - -

-

-For a normal compile, an assertion failure yields the message - -

-   bzip2/libbzip2: internal error number N.
-   This is a bug in bzip2/libbzip2, 1.0 of 21-Mar-2000.
-   Please report it to me at: jseward@acm.org.  If this happened
-   when you were using some program which uses libbzip2 as a
-   component, you should also report this bug to the author(s)
-   of that program.  Please make an effort to report this bug;
-   timely and accurate bug reports eventually lead to higher
-   quality software.  Thanks.  Julian Seward, 21 March 2000.
-
- -

-where N is some error code number. exit(3) -is then called. - -

-

-For a stdio-free library, assertion failures result -in a call to a function declared as: - -

-   extern void bz_internal_error ( int errcode );
-
- -

-The relevant code is passed as a parameter. You should supply -such a function. - -

-

-In either case, once an assertion failure has occurred, any -bz_stream records involved can be regarded as invalid. -You should not attempt to resume normal operation with them. - -

-

-You may, of course, change critical error handling to suit -your needs. As I said above, critical errors indicate bugs -in the library and should not occur. All "normal" error -situations are indicated via error return codes from functions, -and can be recovered from. - -

- - - -

Making a Windows DLL

-

-Everything related to Windows has been contributed by Yoshioka Tsuneo -
(QWF00133@niftyserve.or.jp / -tsuneo-y@is.aist-nara.ac.jp), so you should send your queries to -him (but perhaps Cc: me, jseward@acm.org). - -

-

-My vague understanding of what to do is: using Visual C++ 5.0, -open the project file libbz2.dsp, and build. That's all. - -

-

-If you can't -open the project file for some reason, make a new one, naming these files: -blocksort.c, bzlib.c, compress.c, -crctable.c, decompress.c, huffman.c,
-randtable.c and libbz2.def. You will also need -to name the header files bzlib.h and bzlib_private.h. - -

-

-If you don't use VC++, you may need to define the proprocessor symbol -_WIN32. - -

-

-Finally, dlltest.c is a sample program using the DLL. It has a -project file, dlltest.dsp. - -

-

-If you just want a makefile for Visual C, have a look at -makefile.msc. - -

-

-Be aware that if you compile bzip2 itself on Win32, you must set -BZ_UNIX to 0 and BZ_LCCWIN32 to 1, in the file -bzip2.c, before compiling. Otherwise the resulting binary won't -work correctly. - -

-

-I haven't tried any of this stuff myself, but it all looks plausible. - -

- -


-

Go to the first, previous, next, last section, table of contents. - - diff --git a/reactos/lib/3rdparty/bzip2/manual_4.html b/reactos/lib/3rdparty/bzip2/manual_4.html deleted file mode 100644 index 9ab7fb24f33..00000000000 --- a/reactos/lib/3rdparty/bzip2/manual_4.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - -bzip2 and libbzip2 - Miscellanea - - - - - -

Go to the first, previous, next, last section, table of contents. -


- - -

Miscellanea

- -

-These are just some random thoughts of mine. Your mileage may -vary. - -

- - -

Limitations of the compressed file format

-

-bzip2-1.0, 0.9.5 and 0.9.0 -use exactly the same file format as the previous -version, bzip2-0.1. This decision was made in the interests of -stability. Creating yet another incompatible compressed file format -would create further confusion and disruption for users. - -

-

-Nevertheless, this is not a painless decision. Development -work since the release of bzip2-0.1 in August 1997 -has shown complexities in the file format which slow down -decompression and, in retrospect, are unnecessary. These are: - -

    -
  • The run-length encoder, which is the first of the - - compression transformations, is entirely irrelevant. - The original purpose was to protect the sorting algorithm - from the very worst case input: a string of repeated - symbols. But algorithm steps Q6a and Q6b in the original - Burrows-Wheeler technical report (SRC-124) show how - repeats can be handled without difficulty in block - sorting. -
  • The randomisation mechanism doesn't really need to be - - there. Udi Manber and Gene Myers published a suffix - array construction algorithm a few years back, which - can be employed to sort any block, no matter how - repetitive, in O(N log N) time. Subsequent work by - Kunihiko Sadakane has produced a derivative O(N (log N)^2) - algorithm which usually outperforms the Manber-Myers - algorithm. - - I could have changed to Sadakane's algorithm, but I find - it to be slower than bzip2's existing algorithm for - most inputs, and the randomisation mechanism protects - adequately against bad cases. I didn't think it was - a good tradeoff to make. Partly this is due to the fact - that I was not flooded with email complaints about - bzip2-0.1's performance on repetitive data, so - perhaps it isn't a problem for real inputs. - - Probably the best long-term solution, - and the one I have incorporated into 0.9.5 and above, - is to use the existing sorting - algorithm initially, and fall back to a O(N (log N)^2) - algorithm if the standard algorithm gets into difficulties. -
  • The compressed file format was never designed to be - - handled by a library, and I have had to jump though - some hoops to produce an efficient implementation of - decompression. It's a bit hairy. Try passing - decompress.c through the C preprocessor - and you'll see what I mean. Much of this complexity - could have been avoided if the compressed size of - each block of data was recorded in the data stream. -
  • An Adler-32 checksum, rather than a CRC32 checksum, - - would be faster to compute. -
- -

-It would be fair to say that the bzip2 format was frozen -before I properly and fully understood the performance -consequences of doing so. - -

-

-Improvements which I was able to incorporate into -0.9.0, despite using the same file format, are: - -

    -
  • Single array implementation of the inverse BWT. This - - significantly speeds up decompression, presumably - because it reduces the number of cache misses. -
  • Faster inverse MTF transform for large MTF values. The - - new implementation is based on the notion of sliding blocks - of values. -
  • bzip2-0.9.0 now reads and writes files with fread - - and fwrite; version 0.1 used putc and getc. - Duh! Well, you live and learn. - -
- -

-Further ahead, it would be nice -to be able to do random access into files. This will -require some careful design of compressed file formats. - -

- - - -

Portability issues

-

-After some consideration, I have decided not to use -GNU autoconf to configure 0.9.5 or 1.0. - -

-

-autoconf, admirable and wonderful though it is, -mainly assists with portability problems between Unix-like -platforms. But bzip2 doesn't have much in the way -of portability problems on Unix; most of the difficulties appear -when porting to the Mac, or to Microsoft's operating systems. -autoconf doesn't help in those cases, and brings in a -whole load of new complexity. - -

-

-Most people should be able to compile the library and program -under Unix straight out-of-the-box, so to speak, especially -if you have a version of GNU C available. - -

-

-There are a couple of __inline__ directives in the code. GNU C -(gcc) should be able to handle them. If you're not using -GNU C, your C compiler shouldn't see them at all. -If your compiler does, for some reason, see them and doesn't -like them, just #define __inline__ to be /* */. One -easy way to do this is to compile with the flag -D__inline__=, -which should be understood by most Unix compilers. - -

-

-If you still have difficulties, try compiling with the macro -BZ_STRICT_ANSI defined. This should enable you to build the -library in a strictly ANSI compliant environment. Building the program -itself like this is dangerous and not supported, since you remove -bzip2's checks against compressing directories, symbolic links, -devices, and other not-really-a-file entities. This could cause -filesystem corruption! - -

-

-One other thing: if you create a bzip2 binary for public -distribution, please try and link it statically (gcc -s). This -avoids all sorts of library-version issues that others may encounter -later on. - -

-

-If you build bzip2 on Win32, you must set BZ_UNIX to 0 and -BZ_LCCWIN32 to 1, in the file bzip2.c, before compiling. -Otherwise the resulting binary won't work correctly. - -

- - - -

Reporting bugs

-

-I tried pretty hard to make sure bzip2 is -bug free, both by design and by testing. Hopefully -you'll never need to read this section for real. - -

-

-Nevertheless, if bzip2 dies with a segmentation -fault, a bus error or an internal assertion failure, it -will ask you to email me a bug report. Experience with -version 0.1 shows that almost all these problems can -be traced to either compiler bugs or hardware problems. - -

    -
  • - -Recompile the program with no optimisation, and see if it -works. And/or try a different compiler. -I heard all sorts of stories about various flavours -of GNU C (and other compilers) generating bad code for -bzip2, and I've run across two such examples myself. - -2.7.X versions of GNU C are known to generate bad code from -time to time, at high optimisation levels. -If you get problems, try using the flags --O2 -fomit-frame-pointer -fno-strength-reduce. -You should specifically not use -funroll-loops. - -You may notice that the Makefile runs six tests as part of -the build process. If the program passes all of these, it's -a pretty good (but not 100%) indication that the compiler has -done its job correctly. -
  • - -If bzip2 crashes randomly, and the crashes are not -repeatable, you may have a flaky memory subsystem. bzip2 -really hammers your memory hierarchy, and if it's a bit marginal, -you may get these problems. Ditto if your disk or I/O subsystem -is slowly failing. Yup, this really does happen. - -Try using a different machine of the same type, and see if -you can repeat the problem. -
  • This isn't really a bug, but ... If bzip2 tells - -you your file is corrupted on decompression, and you -obtained the file via FTP, there is a possibility that you -forgot to tell FTP to do a binary mode transfer. That absolutely -will cause the file to be non-decompressible. You'll have to transfer -it again. -
- -

-If you've incorporated libbzip2 into your own program -and are getting problems, please, please, please, check that the -parameters you are passing in calls to the library, are -correct, and in accordance with what the documentation says -is allowable. I have tried to make the library robust against -such problems, but I'm sure I haven't succeeded. - -

-

-Finally, if the above comments don't help, you'll have to send -me a bug report. Now, it's just amazing how many people will -send me a bug report saying something like - -

-   bzip2 crashed with segmentation fault on my machine
-
- -

-and absolutely nothing else. Needless to say, a such a report -is totally, utterly, completely and comprehensively 100% useless; -a waste of your time, my time, and net bandwidth. -With no details at all, there's no way I can possibly begin -to figure out what the problem is. - -

-

-The rules of the game are: facts, facts, facts. Don't omit -them because "oh, they won't be relevant". At the bare -minimum: - -

-   Machine type.  Operating system version.  
-   Exact version of bzip2 (do bzip2 -V).  
-   Exact version of the compiler used.  
-   Flags passed to the compiler.
-
- -

-However, the most important single thing that will help me is -the file that you were trying to compress or decompress at the -time the problem happened. Without that, my ability to do anything -more than speculate about the cause, is limited. - -

-

-Please remember that I connect to the Internet with a modem, so -you should contact me before mailing me huge files. - -

- - - -

Did you get the right package?

- -

-bzip2 is a resource hog. It soaks up large amounts of CPU cycles -and memory. Also, it gives very large latencies. In the worst case, you -can feed many megabytes of uncompressed data into the library before -getting any compressed output, so this probably rules out applications -requiring interactive behaviour. - -

-

-These aren't faults of my implementation, I hope, but more -an intrinsic property of the Burrows-Wheeler transform (unfortunately). -Maybe this isn't what you want. - -

-

-If you want a compressor and/or library which is faster, uses less -memory but gets pretty good compression, and has minimal latency, -consider Jean-loup -Gailly's and Mark Adler's work, zlib-1.1.2 and -gzip-1.2.4. Look for them at - -

-

-http://www.cdrom.com/pub/infozip/zlib and -http://www.gzip.org respectively. - -

-

-For something faster and lighter still, you might try Markus F X J -Oberhumer's LZO real-time compression/decompression library, at -
http://wildsau.idv.uni-linz.ac.at/mfx/lzo.html. - -

-

-If you want to use the bzip2 algorithms to compress small blocks -of data, 64k bytes or smaller, for example on an on-the-fly disk -compressor, you'd be well advised not to use this library. Instead, -I've made a special library tuned for that kind of use. It's part of -e2compr-0.40, an on-the-fly disk compressor for the Linux -ext2 filesystem. Look at -http://www.netspace.net.au/~reiter/e2compr. - -

- - - -

Testing

- -

-A record of the tests I've done. - -

-

-First, some data sets: - -

    -
  • B: a directory containing 6001 files, one for every length in the - - range 0 to 6000 bytes. The files contain random lowercase - letters. 18.7 megabytes. -
  • H: my home directory tree. Documents, source code, mail files, - - compressed data. H contains B, and also a directory of - files designed as boundary cases for the sorting; mostly very - repetitive, nasty files. 565 megabytes. -
  • A: directory tree holding various applications built from source: - - egcs, gcc-2.8.1, KDE, GTK, Octave, etc. - 2200 megabytes. -
- -

-The tests conducted are as follows. Each test means compressing -(a copy of) each file in the data set, decompressing it and -comparing it against the original. - -

-

-First, a bunch of tests with block sizes and internal buffer -sizes set very small, -to detect any problems with the -blocking and buffering mechanisms. -This required modifying the source code so as to try to -break it. - -

    -
  1. Data set H, with - - buffer size of 1 byte, and block size of 23 bytes. -
  2. Data set B, buffer sizes 1 byte, block size 1 byte. - -
  3. As (2) but small-mode decompression. - -
  4. As (2) with block size 2 bytes. - -
  5. As (2) with block size 3 bytes. - -
  6. As (2) with block size 4 bytes. - -
  7. As (2) with block size 5 bytes. - -
  8. As (2) with block size 6 bytes and small-mode decompression. - -
  9. H with buffer size of 1 byte, but normal block - - size (up to 900000 bytes). -
- -

-Then some tests with unmodified source code. - -

    -
  1. H, all settings normal. - -
  2. As (1), with small-mode decompress. - -
  3. H, compress with flag -1. - -
  4. H, compress with flag -s, decompress with flag -s. - -
  5. Forwards compatibility: H, bzip2-0.1pl2 compressing, - - bzip2-0.9.5 decompressing, all settings normal. -
  6. Backwards compatibility: H, bzip2-0.9.5 compressing, - - bzip2-0.1pl2 decompressing, all settings normal. -
  7. Bigger tests: A, all settings normal. - -
  8. As (7), using the fallback (Sadakane-like) sorting algorithm. - -
  9. As (8), compress with flag -1, decompress with flag - - -s. -
  10. H, using the fallback sorting algorithm. - -
  11. Forwards compatibility: A, bzip2-0.1pl2 compressing, - - bzip2-0.9.5 decompressing, all settings normal. -
  12. Backwards compatibility: A, bzip2-0.9.5 compressing, - - bzip2-0.1pl2 decompressing, all settings normal. -
  13. Misc test: about 400 megabytes of .tar files with - - bzip2 compiled with Checker (a memory access error - detector, like Purify). -
  14. Misc tests to make sure it builds and runs ok on non-Linux/x86 - - platforms. -
- -

-These tests were conducted on a 225 MHz IDT WinChip machine, running -Linux 2.0.36. They represent nearly a week of continuous computation. -All tests completed successfully. - -

- - - -

Further reading

-

-bzip2 is not research work, in the sense that it doesn't present -any new ideas. Rather, it's an engineering exercise based on existing -ideas. - -

-

-Four documents describe essentially all the ideas behind bzip2: - -

-Michael Burrows and D. J. Wheeler:
-  "A block-sorting lossless data compression algorithm"
-   10th May 1994. 
-   Digital SRC Research Report 124.
-   ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.gz
-   If you have trouble finding it, try searching at the
-   New Zealand Digital Library, http://www.nzdl.org.
-
-Daniel S. Hirschberg and Debra A. LeLewer
-  "Efficient Decoding of Prefix Codes"
-   Communications of the ACM, April 1990, Vol 33, Number 4.
-   You might be able to get an electronic copy of this
-      from the ACM Digital Library.
-
-David J. Wheeler
-   Program bred3.c and accompanying document bred3.ps.
-   This contains the idea behind the multi-table Huffman
-   coding scheme.
-   ftp://ftp.cl.cam.ac.uk/users/djw3/
-
-Jon L. Bentley and Robert Sedgewick
-  "Fast Algorithms for Sorting and Searching Strings"
-   Available from Sedgewick's web page,
-   www.cs.princeton.edu/~rs
-
- -

-The following paper gives valuable additional insights into the -algorithm, but is not immediately the basis of any code -used in bzip2. - -

-Peter Fenwick:
-   Block Sorting Text Compression
-   Proceedings of the 19th Australasian Computer Science Conference,
-     Melbourne, Australia.  Jan 31 - Feb 2, 1996.
-   ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps
-
- -

-Kunihiko Sadakane's sorting algorithm, mentioned above, -is available from: - -

-http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz
-
- -

-The Manber-Myers suffix array construction -algorithm is described in a paper -available from: - -

-http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps
-
- -

-Finally, the following paper documents some recent investigations -I made into the performance of sorting algorithms: - -

-Julian Seward:
-   On the Performance of BWT Sorting Algorithms
-   Proceedings of the IEEE Data Compression Conference 2000
-     Snowbird, Utah.  28-30 March 2000.
-
- -


-

Go to the first, previous, next, last section, table of contents. - - diff --git a/reactos/lib/3rdparty/bzip2/manual_toc.html b/reactos/lib/3rdparty/bzip2/manual_toc.html deleted file mode 100644 index d4132c435ac..00000000000 --- a/reactos/lib/3rdparty/bzip2/manual_toc.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - -bzip2 and libbzip2 - Table of Contents - - - -

bzip2 and libbzip2

-

a program and library for data compression

-

copyright (C) 1996-2000 Julian Seward

-

version 1.0 of 21 March 2000

-
Julian Seward
-

-


- -

-This program, bzip2, -and associated library libbzip2, are -Copyright (C) 1996-2000 Julian R Seward. All rights reserved. - -

-

-Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -

    -
  • - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -
  • - - The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. -
  • - - Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. -
  • - - The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. -
- -

-THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -

-

-Julian Seward, Cambridge, UK. - -

-

-jseward@acm.org - -

-

-http://sourceware.cygnus.com/bzip2 - -

-

-http://www.cacheprof.org - -

-

-http://www.muraroa.demon.co.uk - -

-

-bzip2/libbzip2 version 1.0 of 21 March 2000. - -

-

-PATENTS: To the best of my knowledge, bzip2 does not use any patented -algorithms. However, I do not have the resources available to carry out -a full patent search. Therefore I cannot give any guarantee of the -above statement. - -

- - -


-This document was generated on 23 March 2000 using the -texi2html -translator version 1.51a.

- - diff --git a/reactos/lib/3rdparty/bzip2/sample1.ref b/reactos/lib/3rdparty/bzip2/sample1.ref deleted file mode 100644 index a56e52b77f90faf637e2c1e87ee60eaffa4c5056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98696 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 Z(Zy#cUu01QmiqtNR=obJ?T`8Y`~PZf1y}$8 diff --git a/reactos/lib/3rdparty/bzip2/sample2.ref b/reactos/lib/3rdparty/bzip2/sample2.ref deleted file mode 100644 index 34af95839a02afd57bbd653d02e4ce5f0bfe2546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212340 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 diff --git a/reactos/lib/3rdparty/bzip2/sample3.ref b/reactos/lib/3rdparty/bzip2/sample3.ref deleted file mode 100644 index 775a2f68e21..00000000000 --- a/reactos/lib/3rdparty/bzip2/sample3.ref +++ /dev/null @@ -1,30007 +0,0 @@ -This file is exceedingly boring. If you find yourself -reading it, please (1) take it from me that you can safely -guess what the rest of the file says, and (2) seek professional -help. - -ps. there are no further sarcastic remarks in this file. - -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh -ugh diff --git a/reactos/lib/3rdparty/bzip2/words0 b/reactos/lib/3rdparty/bzip2/words0 deleted file mode 100644 index fbf442ad6bf..00000000000 --- a/reactos/lib/3rdparty/bzip2/words0 +++ /dev/null @@ -1,9 +0,0 @@ - -If compilation produces errors, or a large number of warnings, -please read README.COMPILATION.PROBLEMS -- you might be able to -adjust the flags in this Makefile to improve matters. - -Also in README.COMPILATION.PROBLEMS are some hints that may help -if your build produces an executable which is unable to correctly -handle so-called 'large files' -- files of size 2GB or more. - diff --git a/reactos/lib/3rdparty/bzip2/words1 b/reactos/lib/3rdparty/bzip2/words1 deleted file mode 100644 index 2e83de9f083..00000000000 --- a/reactos/lib/3rdparty/bzip2/words1 +++ /dev/null @@ -1,4 +0,0 @@ - -Doing 6 tests (3 compress, 3 uncompress) ... -If there's a problem, things might stop at this point. - diff --git a/reactos/lib/3rdparty/bzip2/words2 b/reactos/lib/3rdparty/bzip2/words2 deleted file mode 100644 index caddcf42266..00000000000 --- a/reactos/lib/3rdparty/bzip2/words2 +++ /dev/null @@ -1,5 +0,0 @@ - -Checking test results. If any of the four "cmp"s which follow -report any differences, something is wrong. If you can't easily -figure out what, please let me know (jseward@bzip.org). - diff --git a/reactos/lib/3rdparty/bzip2/words3 b/reactos/lib/3rdparty/bzip2/words3 deleted file mode 100644 index 6972669906d..00000000000 --- a/reactos/lib/3rdparty/bzip2/words3 +++ /dev/null @@ -1,30 +0,0 @@ - -If you got this far and the 'cmp's didn't complain, it looks -like you're in business. - -To install in /usr/local/bin, /usr/local/lib, /usr/local/man and -/usr/local/include, type - - make install - -To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type - - make install PREFIX=/xxx/yyy - -If you are (justifiably) paranoid and want to see what 'make install' -is going to do, you can first do - - make -n install or - make -n install PREFIX=/xxx/yyy respectively. - -The -n instructs make to show the commands it would execute, but -not actually execute them. - -Instructions for use are in the preformatted manual page, in the file -bzip2.txt. For more detailed documentation, read the full manual. -It is available in Postscript form (manual.ps), PDF form (manual.pdf), -and HTML form (manual.html). - -You can also do "bzip2 --help" to see some helpful information. -"bzip2 -L" displays the software license. - From 49d0927079bd324c269ca8b61f1710ae82016512 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 May 2014 17:14:46 +0000 Subject: [PATCH 10/81] [CRT] * Update fopen_s(). CORE-8080 svn path=/trunk/; revision=63295 --- reactos/lib/sdk/crt/stdio/file.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index ae6164e94f0..7b6e6ed101d 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -3180,11 +3180,9 @@ FILE * CDECL fopen(const char *path, const char *mode) int CDECL fopen_s(FILE** pFile, const char *filename, const char *mode) { - if (!MSVCRT_CHECK_PMT(pFile != NULL) || !MSVCRT_CHECK_PMT(filename != NULL) || - !MSVCRT_CHECK_PMT(mode != NULL)) { - *_errno() = EINVAL; - return EINVAL; - } + if (!MSVCRT_CHECK_PMT(pFile != NULL)) return EINVAL; + if (!MSVCRT_CHECK_PMT(filename != NULL)) return EINVAL; + if (!MSVCRT_CHECK_PMT(mode != NULL)) return EINVAL; *pFile = fopen(filename, mode); From 3396b21b2685b2b0d5f08dbfc5fa8a027fc0ea6a Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 May 2014 18:24:38 +0000 Subject: [PATCH 11/81] [CRT] * Update _wsopen(). CORE-8080 svn path=/trunk/; revision=63296 --- reactos/lib/sdk/crt/stdio/file.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index 7b6e6ed101d..b4ccb1d7388 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -1822,11 +1822,11 @@ int CDECL _wsopen( const wchar_t *path, int oflags, int shflags, ... ) if (oflags & _O_CREAT) { - va_list ap; + __ms_va_list ap; - va_start(ap, shflags); + __ms_va_start(ap, shflags); pmode = va_arg(ap, int); - va_end(ap); + __ms_va_end(ap); } else pmode = 0; From dea92c0361bbab9772ce9147d948e78d4c765e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 14 May 2014 18:50:29 +0000 Subject: [PATCH 12/81] [NTVDM]: Introduce a echo state for INT 21h, AH=01h and AH=3Fh. svn path=/trunk/; revision=63297 --- reactos/subsystems/ntvdm/dos/dos32krnl/dos.c | 20 ++++++++++++++----- reactos/subsystems/ntvdm/dos/dos32krnl/dos.h | 2 ++ .../subsystems/ntvdm/dos/dos32krnl/dosfiles.c | 5 ++--- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c index 8a03448bfc2..bfdef07dc1c 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c @@ -40,6 +40,9 @@ static BYTE DosAllocStrategy = DOS_ALLOC_BEST_FIT; static BOOLEAN DosUmbLinked = FALSE; static WORD DosErrorLevel = 0x0000; +/* Echo state for INT 21h, AH = 01h and AH = 3Fh */ +BOOLEAN DoEcho = FALSE; + /* PRIVATE FUNCTIONS **********************************************************/ /* @@ -1434,8 +1437,9 @@ VOID WINAPI DosInt21h(LPWORD Stack) case 0x01: { // FIXME: Under DOS 2+, input / output handle may be redirected!!!! + DoEcho = TRUE; Character = DosReadCharacter(DOS_INPUT_HANDLE); - DosPrintCharacter(DOS_OUTPUT_HANDLE, Character); + DoEcho = FALSE; // /* Let the BOP repeat if needed */ // if (getCF()) break; @@ -1576,6 +1580,8 @@ VOID WINAPI DosInt21h(LPWORD Stack) while (Count < InputBuffer->MaxLength) { + // FIXME!! This function should interpret backspaces etc... + /* Try to read a character (wait) */ Character = DosReadCharacter(DOS_INPUT_HANDLE); @@ -2051,10 +2057,14 @@ VOID WINAPI DosInt21h(LPWORD Stack) case 0x3F: { WORD BytesRead = 0; - WORD ErrorCode = DosReadFile(getBX(), - SEG_OFF_TO_PTR(getDS(), getDX()), - getCX(), - &BytesRead); + WORD ErrorCode; + + DoEcho = TRUE; + ErrorCode = DosReadFile(getBX(), + SEG_OFF_TO_PTR(getDS(), getDX()), + getCX(), + &BytesRead); + DoEcho = FALSE; if (ErrorCode == ERROR_SUCCESS) { diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h index 6fe399e33dc..ead1344d29b 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h @@ -160,6 +160,8 @@ typedef struct _DOS_EXEC_PARAM_BLOCK #pragma pack(pop) +extern BOOLEAN DoEcho; + /* FUNCTIONS ******************************************************************/ extern CALLBACK16 DosContext; diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dosfiles.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dosfiles.c index 03a5df83847..51c57d3c2c0 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dosfiles.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dosfiles.c @@ -167,15 +167,14 @@ WORD DosReadFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesRead) /* Retrieve the character in AL (scan code is in AH) */ Character = getAL(); - // FIXME: Sometimes we need echo, some other times not. - // DosPrintCharacter(DOS_OUTPUT_HANDLE, Character); + if (DoEcho) DosPrintCharacter(DOS_OUTPUT_HANDLE, Character); ((PCHAR)Buffer)[BytesRead32] = Character; /* Stop on first carriage return */ if (Character == '\r') { - // DosPrintCharacter(DOS_OUTPUT_HANDLE, '\n'); + if (DoEcho) DosPrintCharacter(DOS_OUTPUT_HANDLE, '\n'); break; } From f75a2aec511634495a9225621f1e842ebb4e9f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 14 May 2014 19:19:57 +0000 Subject: [PATCH 13/81] [NTVDM] For diagnostic/debugging purposes, prefill the keyboard buffer with invalid values. svn path=/trunk/; revision=63298 --- reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c b/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c index 716af1f50d7..fdc5b400ed1 100644 --- a/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c +++ b/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c @@ -273,6 +273,9 @@ BOOLEAN KbdBios32Initialize(VOID) Bda->KeybdBufferEnd = Bda->KeybdBufferStart + BIOS_KBD_BUFFER_SIZE * sizeof(WORD); Bda->KeybdBufferHead = Bda->KeybdBufferTail = 0; + // FIXME: Fill the keyboard buffer with invalid values, for diagnostic purposes... + RtlFillMemory(((LPVOID)((ULONG_PTR)Bda + Bda->KeybdBufferStart)), BIOS_KBD_BUFFER_SIZE * sizeof(WORD), 'A'); + /* Register the BIOS 32-bit Interrupts */ /* Initialize software vector handlers */ From a1b89faa39b588761f01ff41b4000a7008d811a1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 14 May 2014 20:23:38 +0000 Subject: [PATCH 14/81] [NTDLL_APITEST] Add a test for NtReleaseMutant svn path=/trunk/; revision=63299 --- rostests/apitests/ntdll/CMakeLists.txt | 1 + rostests/apitests/ntdll/NtMapViewOfSection.c | 451 +++++++++++++++++-- rostests/apitests/ntdll/NtMutant.c | 26 ++ rostests/apitests/ntdll/testlist.c | 2 + 4 files changed, 443 insertions(+), 37 deletions(-) create mode 100644 rostests/apitests/ntdll/NtMutant.c diff --git a/rostests/apitests/ntdll/CMakeLists.txt b/rostests/apitests/ntdll/CMakeLists.txt index 12afccf20f6..b0a13e45b4a 100644 --- a/rostests/apitests/ntdll/CMakeLists.txt +++ b/rostests/apitests/ntdll/CMakeLists.txt @@ -7,6 +7,7 @@ list(APPEND SOURCE NtCreateThread.c NtFreeVirtualMemory.c NtMapViewOfSection.c + NtMutant.c NtProtectVirtualMemory.c NtQuerySystemEnvironmentValue.c NtQueryVolumeInformationFile.c diff --git a/rostests/apitests/ntdll/NtMapViewOfSection.c b/rostests/apitests/ntdll/NtMapViewOfSection.c index f347fa93a92..a6dfbe65b4c 100644 --- a/rostests/apitests/ntdll/NtMapViewOfSection.c +++ b/rostests/apitests/ntdll/NtMapViewOfSection.c @@ -4,6 +4,13 @@ #define WIN32_NO_STATUS #include +BOOL WINAPI SetInformationJobObject( + _In_ HANDLE hJob, + _In_ JOBOBJECTINFOCLASS JobObjectInfoClass, + _In_ LPVOID lpJobObjectInfo, + _In_ DWORD cbJobObjectInfoLength +); + NTSYSAPI NTSTATUS NTAPI @@ -25,10 +32,12 @@ Test_PageFileSection(void) NTSTATUS Status; HANDLE SectionHandle; LARGE_INTEGER MaximumSize, SectionOffset; - PVOID BaseAddress; + PVOID BaseAddress, BaseAddress2; SIZE_T ViewSize; + //ULONG OldProtect; + QUOTA_LIMITS QuotaLimits; - /* Create a page file backed section */ + /* Create a page file backed section with SEC_COMMIT */ MaximumSize.QuadPart = 0x20000; Status = NtCreateSection(&SectionHandle, SECTION_ALL_ACCESS, @@ -37,7 +46,7 @@ Test_PageFileSection(void) PAGE_READWRITE, SEC_COMMIT, NULL); - ok(NT_SUCCESS(Status), "NtCreateSection failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); if (!NT_SUCCESS(Status)) return; @@ -55,8 +64,7 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok(Status == STATUS_MAPPED_ALIGNMENT, - "NtMapViewOfSection returned wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_MAPPED_ALIGNMENT); /* Try to map a page with execute rights */ BaseAddress = (PVOID)0x30000000; @@ -72,10 +80,25 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_EXECUTE_READWRITE); - ok(Status == STATUS_SECTION_PROTECTION, - "NtMapViewOfSection returned wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SECTION_PROTECTION); - /* Map 2 pages, not comitting them */ + /* Try to map 2 pages with MEM_COMMIT */ + BaseAddress = (PVOID)0x30000000; + SectionOffset.QuadPart = 0; + ViewSize = 0x2000; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + PAGE_SIZE, + &SectionOffset, + &ViewSize, + ViewShare, + MEM_COMMIT, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); + + /* Map 2 pages, without MEM_COMMIT */ BaseAddress = (PVOID)0x30000000; SectionOffset.QuadPart = 0; ViewSize = 0x2000; @@ -89,9 +112,18 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); - if (!NT_SUCCESS(Status)) - return; + ok_ntstatus(Status, STATUS_SUCCESS); + + /* We must be able to access the memory */ + _SEH2_TRY + { + *(PULONG)BaseAddress = 1; + } + _SEH2_EXCEPT(1) + { + ok(FALSE, "Got an exception\n"); + } + _SEH2_END; /* Commit a page in the section */ BaseAddress = (PVOID)0x30000000; @@ -102,12 +134,15 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Try to decommit a page in the section */ Status = NtFreeVirtualMemory(NtCurrentProcess(), &BaseAddress, &ViewSize, MEM_DECOMMIT); - ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, "NtFreeVirtualMemory returned wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); + /* Try to commit a range larger than the section */ BaseAddress = (PVOID)0x30000000; ViewSize = 0x3000; @@ -117,8 +152,7 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(Status == STATUS_CONFLICTING_ADDRESSES, - "NtAllocateVirtualMemory failed with wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); /* Try to commit a page after the section */ BaseAddress = (PVOID)0x30002000; @@ -129,7 +163,7 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(!NT_SUCCESS(Status), "NtAllocateVirtualMemory Should fail\n"); + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); /* Try to allocate a page after the section */ BaseAddress = (PVOID)0x30002000; @@ -140,7 +174,7 @@ Test_PageFileSection(void) &ViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); - ok(!NT_SUCCESS(Status), "NtAllocateVirtualMemory should fail\n"); + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); /* Need to go to next 64k boundary */ BaseAddress = (PVOID)0x30010000; @@ -151,7 +185,7 @@ Test_PageFileSection(void) &ViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); if (!NT_SUCCESS(Status)) return; @@ -164,15 +198,14 @@ Test_PageFileSection(void) MEM_RELEASE); ok(NT_SUCCESS(Status), "NtFreeVirtualMemory failed with Status %lx\n", Status); - /* Free the section mapping */ + /* Try to release the section mapping with NtFreeVirtualMemory */ BaseAddress = (PVOID)0x30000000; ViewSize = 0x1000; Status = NtFreeVirtualMemory(NtCurrentProcess(), &BaseAddress, &ViewSize, MEM_RELEASE); - ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, - "NtFreeVirtualMemory failed with wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); /* Commit a page in the section */ BaseAddress = (PVOID)0x30001000; @@ -183,7 +216,7 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); /* Try to decommit the page */ BaseAddress = (PVOID)0x30001000; @@ -192,8 +225,7 @@ Test_PageFileSection(void) &BaseAddress, &ViewSize, MEM_DECOMMIT); - ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, - "NtFreeVirtualMemory failed with wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); BaseAddress = UlongToPtr(0x40000000); SectionOffset.QuadPart = 0; @@ -208,7 +240,7 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); if (!NT_SUCCESS(Status)) return; @@ -227,9 +259,7 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); - if (!NT_SUCCESS(Status)) - return; + ok_ntstatus(Status, STATUS_SUCCESS); ok(BaseAddress == (PVOID)0x40080000, "Invalid BaseAddress: %p", BaseAddress); @@ -241,9 +271,273 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); - if (!NT_SUCCESS(Status)) - return; + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Close the mapping */ + NtUnmapViewOfSection(NtCurrentProcess(), BaseAddress); + NtClose(SectionHandle); + + /* Create a page file backed section, but only reserved */ + MaximumSize.QuadPart = 0x20000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_RESERVE, + NULL); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Try to map 1 page, passing MEM_RESERVE */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = PAGE_SIZE; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + PAGE_SIZE, + &SectionOffset, + &ViewSize, + ViewShare, + MEM_RESERVE, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); + + /* Try to map 1 page using MEM_COMMIT */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = PAGE_SIZE; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + PAGE_SIZE, + &SectionOffset, + &ViewSize, + ViewShare, + MEM_COMMIT, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); + + /* Map 2 pages, but commit 1 */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = 2 * PAGE_SIZE; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + PAGE_SIZE, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* We must be able to access the 1st page */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + *(PUCHAR)BaseAddress = 1; + } + _SEH2_EXCEPT(1) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_SUCCESS); + + /* We must not be able to access the 2nd page */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + *((PUCHAR)BaseAddress + PAGE_SIZE) = 1; + } + _SEH2_EXCEPT(1) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_ACCESS_VIOLATION); + + /* Map the 2 pages again into a different memory location */ + BaseAddress2 = NULL; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress2, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Commit a the 2nd page in the 2nd memory location */ + BaseAddress2 = (PUCHAR)BaseAddress2 + PAGE_SIZE; + ViewSize = PAGE_SIZE; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &BaseAddress2, + 0, + &ViewSize, + MEM_COMMIT, + PAGE_READONLY); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Try to commit again (the already committed page) */ + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &BaseAddress2, + 0, + &ViewSize, + MEM_COMMIT, + PAGE_READONLY); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* We must be able to access the memory in the 2nd page of the 1st memory location */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + *((PUCHAR)BaseAddress + PAGE_SIZE) = 2; + } + _SEH2_EXCEPT(1) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_SUCCESS); + + ok(*(PULONG)BaseAddress2 == 2, "Value in memory was wrong"); + + /* Close the mapping */ + NtUnmapViewOfSection(NtCurrentProcess(), BaseAddress); + NtUnmapViewOfSection(NtCurrentProcess(), (PUCHAR)BaseAddress2 - PAGE_SIZE); + NtClose(SectionHandle); + +#if 0 + { + HANDLE Job; + JOBOBJECT_EXTENDED_LIMIT_INFORMATION JobLimitInformation; + + Job = CreateJobObject(NULL, NULL); + ok_ntstatus(Status, STATUS_SUCCESS); + + ok(AssignProcessToJobObject(Job, NtCurrentProcess()), ""); + + RtlZeroMemory(&JobLimitInformation, sizeof(JobLimitInformation)); + JobLimitInformation.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_JOB_MEMORY; + JobLimitInformation.JobMemoryLimit = 100 * 1024; + JobLimitInformation.PeakProcessMemoryUsed = JobLimitInformation.JobMemoryLimit; + JobLimitInformation.PeakJobMemoryUsed = JobLimitInformation.JobMemoryLimit; + + ok(SetInformationJobObject(Job, + JobObjectExtendedLimitInformation, + &JobLimitInformation, + sizeof(JobLimitInformation)), ""); + } +#endif + + QuotaLimits.PagedPoolLimit = 0; + QuotaLimits.NonPagedPoolLimit = 0; + QuotaLimits.TimeLimit.QuadPart = 0; + QuotaLimits.PagefileLimit = 0; + QuotaLimits.MinimumWorkingSetSize = 90000; + QuotaLimits.MaximumWorkingSetSize = 90000; + Status = NtSetInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + &QuotaLimits, + sizeof(QuotaLimits)); + ok_ntstatus(Status, STATUS_SUCCESS); + + QuotaLimits.MinimumWorkingSetSize = 0; + QuotaLimits.MaximumWorkingSetSize = 0; + QuotaLimits.PagefileLimit = 1; + Status = NtSetInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + &QuotaLimits, + sizeof(QuotaLimits)); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Try to create a huge page file backed section */ + MaximumSize.QuadPart = 0x800000000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_COMMIT, + NULL); + ok_ntstatus(Status, STATUS_COMMITMENT_LIMIT); + + /* Try to create a huge page file backed section with PAGE_NOACCESS protection */ + MaximumSize.QuadPart = 0x8000000000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_NOACCESS, + SEC_COMMIT, + NULL); + ok_ntstatus(Status, STATUS_INVALID_PAGE_PROTECTION); + + /* Create a huge page file backed section, but only reserved */ + MaximumSize.QuadPart = 0x8000000000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_RESERVE, + NULL); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Pass a too large region size */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = 0x80000000; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_INVALID_PARAMETER_4); + + /* Map with PAGE_NOACCESS */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = 0x20000000; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_NOACCESS); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Update protection to PAGE_READWRITE */ + ViewSize = 0x20000000; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), &BaseAddress, 0, &ViewSize, MEM_COMMIT, PAGE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); + + //Status = NtProtectVirtualMemory(NtCurrentProcess(), &BaseAddress, &ViewSize, PAGE_READWRITE, &OldProtect); + //ok_ntstatus(Status, STATUS_SUCCESS); + //ok(OldProtect == PAGE_NOACCESS, "Wrong protection returned: %u\n", OldProtect); + + /* Update protection to PAGE_READWRITE (1 page) */ + ViewSize = 0x1000; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), &BaseAddress, 0, &ViewSize, MEM_COMMIT, PAGE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); } @@ -291,7 +585,7 @@ Test_ImageSection(void) FileHandle); ok(Status == STATUS_SUCCESS, "NtCreateSection failed, Status 0x%lx\n", Status); - /* Map the data section */ + /* Map the data section as flat mapping */ DataBase = NULL; ViewSize = 0; Status = NtMapViewOfSection(DataSectionHandle, @@ -351,12 +645,12 @@ Test_ImageSection(void) Status = NtMapViewOfSection(ImageSectionHandle, NtCurrentProcess(), &ImageBase, - 0, - 0, - NULL, + 0, // ZeroBits + 0, // CommitSize + NULL, // SectionOffset &ViewSize, ViewShare, - 0, + 0, // AllocationType PAGE_READONLY); #ifdef _M_IX86 ok(Status == STATUS_SUCCESS, "NtMapViewOfSection failed, Status 0x%lx\n", Status); @@ -459,10 +753,93 @@ Test_ImageSection(void) NtUnmapViewOfSection(NtCurrentProcess(), ImageBase); } +void +Test_ImageSection2(void) +{ + UNICODE_STRING FileName; + NTSTATUS Status; + OBJECT_ATTRIBUTES FileObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + HANDLE FileHandle, ImageSectionHandle; + PVOID ImageBase, BaseAddress; + SIZE_T ViewSize; + LARGE_INTEGER MaximumSize, SectionOffset; + + if (!RtlDosPathNameToNtPathName_U(L"testdata\\nvoglv32.dll", + &FileName, + NULL, + NULL)) + { + ok(0, "RtlDosPathNameToNtPathName_U failed\n"); + return; + } + + InitializeObjectAttributes(&FileObjectAttributes, + &FileName, + 0, + NULL, + NULL); + + Status = NtOpenFile(&FileHandle, + GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE, + &FileObjectAttributes, + &IoStatusBlock, + FILE_SHARE_READ, + FILE_SYNCHRONOUS_IO_NONALERT); + ok(Status == STATUS_SUCCESS, "NtOpenFile failed, Status 0x%lx\n", Status); + printf("Opened file with handle %p\n", FileHandle); + + /* Create a data section with write access */ + MaximumSize.QuadPart = 0x20000; + Status = NtCreateSection(&ImageSectionHandle, + SECTION_ALL_ACCESS, // DesiredAccess + NULL, // ObjectAttributes + &MaximumSize, // MaximumSize + PAGE_READWRITE, // SectionPageProtection + SEC_IMAGE, // AllocationAttributes + FileHandle); + ok(Status == STATUS_SUCCESS, "NtCreateSection failed, Status 0x%lx\n", Status); + + printf("Created image section with handle %p\n", ImageSectionHandle); + //system("PAUSE"); + + /* Map the image section */ + ImageBase = NULL; + ViewSize = 0x0000; + SectionOffset.QuadPart = 0x00000; + Status = NtMapViewOfSection(ImageSectionHandle, + NtCurrentProcess(), + &ImageBase, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); + ok(Status == STATUS_SUCCESS, "NtMapViewOfSection failed, Status 0x%lx\n", Status); + + printf("Mapped image section at %p, value in text section: %lx\n", + ImageBase, *((ULONG*)((PCHAR)ImageBase + 0x1196))); + system("PAUSE"); + + /* Try to allocate a page after the section */ + BaseAddress = (PUCHAR)ImageBase + 0x10000; + ViewSize = 0x1000; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &BaseAddress, + 0, + &ViewSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE); + printf("allocation status: %lx\n", Status); + system("PAUSE"); + +} START_TEST(NtMapViewOfSection) { Test_PageFileSection(); - Test_ImageSection(); + //Test_ImageSection2(); } diff --git a/rostests/apitests/ntdll/NtMutant.c b/rostests/apitests/ntdll/NtMutant.c new file mode 100644 index 00000000000..a274bb44b79 --- /dev/null +++ b/rostests/apitests/ntdll/NtMutant.c @@ -0,0 +1,26 @@ + +#include + +#include + + +VOID +Test_Release(VOID) +{ + HANDLE MutantHandle; + NTSTATUS Status; + + Status = NtCreateMutant(&MutantHandle, 0, NULL, TRUE); + ok_ntstatus(Status, STATUS_SUCCESS); + + Status = NtReleaseMutant(MutantHandle, NULL); + ok_ntstatus(Status, STATUS_SUCCESS); + +} + + + +START_TEST(NtMutant) +{ + Test_Release(); +} diff --git a/rostests/apitests/ntdll/testlist.c b/rostests/apitests/ntdll/testlist.c index ff74480ea57..40bec87cde6 100644 --- a/rostests/apitests/ntdll/testlist.c +++ b/rostests/apitests/ntdll/testlist.c @@ -10,6 +10,7 @@ extern void func_NtCreateFile(void); extern void func_NtCreateThread(void); extern void func_NtFreeVirtualMemory(void); extern void func_NtMapViewOfSection(void); +extern void func_NtMutant(void); extern void func_NtProtectVirtualMemory(void); extern void func_NtQuerySystemEnvironmentValue(void); extern void func_NtQueryVolumeInformationFile(void); @@ -38,6 +39,7 @@ const struct test winetest_testlist[] = { "NtCreateThread", func_NtCreateThread }, { "NtFreeVirtualMemory", func_NtFreeVirtualMemory }, { "NtMapViewOfSection", func_NtMapViewOfSection }, + { "NtMutant", func_NtMutant }, { "NtProtectVirtualMemory", func_NtProtectVirtualMemory }, { "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue }, { "NtQueryVolumeInformationFile", func_NtQueryVolumeInformationFile }, From e44bf54b10bededad903f7486bd2cec17f645fe0 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 14 May 2014 20:27:18 +0000 Subject: [PATCH 15/81] [NTOSKRNL] Fix NtReleaseMutant, which was expecting MUTANT_QUERY_STATE right on the mutant handle, which is not required, probably a copypasta. Fixes a test. svn path=/trunk/; revision=63300 --- reactos/ntoskrnl/ex/mutant.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ex/mutant.c b/reactos/ntoskrnl/ex/mutant.c index 02e760d69b6..3d1170992db 100644 --- a/reactos/ntoskrnl/ex/mutant.c +++ b/reactos/ntoskrnl/ex/mutant.c @@ -325,7 +325,7 @@ NtReleaseMutant(IN HANDLE MutantHandle, /* Open the Object */ Status = ObReferenceObjectByHandle(MutantHandle, - MUTANT_QUERY_STATE, + 0, /* No access rights required */ ExMutantObjectType, PreviousMode, (PVOID*)&Mutant, From 3ed2e2a09502fc446b9901657c9a6f33ee487e5f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 14 May 2014 20:46:47 +0000 Subject: [PATCH 16/81] [NTDLL_APITEST] Revert unwanted changes svn path=/trunk/; revision=63301 --- rostests/apitests/ntdll/NtMapViewOfSection.c | 451 ++----------------- 1 file changed, 37 insertions(+), 414 deletions(-) diff --git a/rostests/apitests/ntdll/NtMapViewOfSection.c b/rostests/apitests/ntdll/NtMapViewOfSection.c index a6dfbe65b4c..f347fa93a92 100644 --- a/rostests/apitests/ntdll/NtMapViewOfSection.c +++ b/rostests/apitests/ntdll/NtMapViewOfSection.c @@ -4,13 +4,6 @@ #define WIN32_NO_STATUS #include -BOOL WINAPI SetInformationJobObject( - _In_ HANDLE hJob, - _In_ JOBOBJECTINFOCLASS JobObjectInfoClass, - _In_ LPVOID lpJobObjectInfo, - _In_ DWORD cbJobObjectInfoLength -); - NTSYSAPI NTSTATUS NTAPI @@ -32,12 +25,10 @@ Test_PageFileSection(void) NTSTATUS Status; HANDLE SectionHandle; LARGE_INTEGER MaximumSize, SectionOffset; - PVOID BaseAddress, BaseAddress2; + PVOID BaseAddress; SIZE_T ViewSize; - //ULONG OldProtect; - QUOTA_LIMITS QuotaLimits; - /* Create a page file backed section with SEC_COMMIT */ + /* Create a page file backed section */ MaximumSize.QuadPart = 0x20000; Status = NtCreateSection(&SectionHandle, SECTION_ALL_ACCESS, @@ -46,7 +37,7 @@ Test_PageFileSection(void) PAGE_READWRITE, SEC_COMMIT, NULL); - ok_ntstatus(Status, STATUS_SUCCESS); + ok(NT_SUCCESS(Status), "NtCreateSection failed with Status %lx\n", Status); if (!NT_SUCCESS(Status)) return; @@ -64,7 +55,8 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_MAPPED_ALIGNMENT); + ok(Status == STATUS_MAPPED_ALIGNMENT, + "NtMapViewOfSection returned wrong Status %lx\n", Status); /* Try to map a page with execute rights */ BaseAddress = (PVOID)0x30000000; @@ -80,25 +72,10 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_EXECUTE_READWRITE); - ok_ntstatus(Status, STATUS_SECTION_PROTECTION); + ok(Status == STATUS_SECTION_PROTECTION, + "NtMapViewOfSection returned wrong Status %lx\n", Status); - /* Try to map 2 pages with MEM_COMMIT */ - BaseAddress = (PVOID)0x30000000; - SectionOffset.QuadPart = 0; - ViewSize = 0x2000; - Status = NtMapViewOfSection(SectionHandle, - NtCurrentProcess(), - &BaseAddress, - 0, - PAGE_SIZE, - &SectionOffset, - &ViewSize, - ViewShare, - MEM_COMMIT, - PAGE_READWRITE); - ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); - - /* Map 2 pages, without MEM_COMMIT */ + /* Map 2 pages, not comitting them */ BaseAddress = (PVOID)0x30000000; SectionOffset.QuadPart = 0; ViewSize = 0x2000; @@ -112,18 +89,9 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* We must be able to access the memory */ - _SEH2_TRY - { - *(PULONG)BaseAddress = 1; - } - _SEH2_EXCEPT(1) - { - ok(FALSE, "Got an exception\n"); - } - _SEH2_END; + ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); + if (!NT_SUCCESS(Status)) + return; /* Commit a page in the section */ BaseAddress = (PVOID)0x30000000; @@ -134,15 +102,12 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* Try to decommit a page in the section */ + ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); Status = NtFreeVirtualMemory(NtCurrentProcess(), &BaseAddress, &ViewSize, MEM_DECOMMIT); - ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); - + ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, "NtFreeVirtualMemory returned wrong Status %lx\n", Status); /* Try to commit a range larger than the section */ BaseAddress = (PVOID)0x30000000; ViewSize = 0x3000; @@ -152,7 +117,8 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); + ok(Status == STATUS_CONFLICTING_ADDRESSES, + "NtAllocateVirtualMemory failed with wrong Status %lx\n", Status); /* Try to commit a page after the section */ BaseAddress = (PVOID)0x30002000; @@ -163,7 +129,7 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); + ok(!NT_SUCCESS(Status), "NtAllocateVirtualMemory Should fail\n"); /* Try to allocate a page after the section */ BaseAddress = (PVOID)0x30002000; @@ -174,7 +140,7 @@ Test_PageFileSection(void) &ViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); + ok(!NT_SUCCESS(Status), "NtAllocateVirtualMemory should fail\n"); /* Need to go to next 64k boundary */ BaseAddress = (PVOID)0x30010000; @@ -185,7 +151,7 @@ Test_PageFileSection(void) &ViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); + ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); if (!NT_SUCCESS(Status)) return; @@ -198,14 +164,15 @@ Test_PageFileSection(void) MEM_RELEASE); ok(NT_SUCCESS(Status), "NtFreeVirtualMemory failed with Status %lx\n", Status); - /* Try to release the section mapping with NtFreeVirtualMemory */ + /* Free the section mapping */ BaseAddress = (PVOID)0x30000000; ViewSize = 0x1000; Status = NtFreeVirtualMemory(NtCurrentProcess(), &BaseAddress, &ViewSize, MEM_RELEASE); - ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); + ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, + "NtFreeVirtualMemory failed with wrong Status %lx\n", Status); /* Commit a page in the section */ BaseAddress = (PVOID)0x30001000; @@ -216,7 +183,7 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); + ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); /* Try to decommit the page */ BaseAddress = (PVOID)0x30001000; @@ -225,7 +192,8 @@ Test_PageFileSection(void) &BaseAddress, &ViewSize, MEM_DECOMMIT); - ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); + ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, + "NtFreeVirtualMemory failed with wrong Status %lx\n", Status); BaseAddress = UlongToPtr(0x40000000); SectionOffset.QuadPart = 0; @@ -240,7 +208,7 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); + ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); if (!NT_SUCCESS(Status)) return; @@ -259,7 +227,9 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); + ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); + if (!NT_SUCCESS(Status)) + return; ok(BaseAddress == (PVOID)0x40080000, "Invalid BaseAddress: %p", BaseAddress); @@ -271,273 +241,9 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* Close the mapping */ - NtUnmapViewOfSection(NtCurrentProcess(), BaseAddress); - NtClose(SectionHandle); - - /* Create a page file backed section, but only reserved */ - MaximumSize.QuadPart = 0x20000; - Status = NtCreateSection(&SectionHandle, - SECTION_ALL_ACCESS, - NULL, - &MaximumSize, - PAGE_READWRITE, - SEC_RESERVE, - NULL); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* Try to map 1 page, passing MEM_RESERVE */ - BaseAddress = NULL; - SectionOffset.QuadPart = 0; - ViewSize = PAGE_SIZE; - Status = NtMapViewOfSection(SectionHandle, - NtCurrentProcess(), - &BaseAddress, - 0, - PAGE_SIZE, - &SectionOffset, - &ViewSize, - ViewShare, - MEM_RESERVE, - PAGE_READWRITE); - ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); - - /* Try to map 1 page using MEM_COMMIT */ - BaseAddress = NULL; - SectionOffset.QuadPart = 0; - ViewSize = PAGE_SIZE; - Status = NtMapViewOfSection(SectionHandle, - NtCurrentProcess(), - &BaseAddress, - 0, - PAGE_SIZE, - &SectionOffset, - &ViewSize, - ViewShare, - MEM_COMMIT, - PAGE_READWRITE); - ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); - - /* Map 2 pages, but commit 1 */ - BaseAddress = NULL; - SectionOffset.QuadPart = 0; - ViewSize = 2 * PAGE_SIZE; - Status = NtMapViewOfSection(SectionHandle, - NtCurrentProcess(), - &BaseAddress, - 0, - PAGE_SIZE, - &SectionOffset, - &ViewSize, - ViewShare, - 0, - PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* We must be able to access the 1st page */ - Status = STATUS_SUCCESS; - _SEH2_TRY - { - *(PUCHAR)BaseAddress = 1; - } - _SEH2_EXCEPT(1) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; - ok_ntstatus(Status, STATUS_SUCCESS); - - /* We must not be able to access the 2nd page */ - Status = STATUS_SUCCESS; - _SEH2_TRY - { - *((PUCHAR)BaseAddress + PAGE_SIZE) = 1; - } - _SEH2_EXCEPT(1) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; - ok_ntstatus(Status, STATUS_ACCESS_VIOLATION); - - /* Map the 2 pages again into a different memory location */ - BaseAddress2 = NULL; - Status = NtMapViewOfSection(SectionHandle, - NtCurrentProcess(), - &BaseAddress2, - 0, - 0, - &SectionOffset, - &ViewSize, - ViewShare, - 0, - PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* Commit a the 2nd page in the 2nd memory location */ - BaseAddress2 = (PUCHAR)BaseAddress2 + PAGE_SIZE; - ViewSize = PAGE_SIZE; - Status = NtAllocateVirtualMemory(NtCurrentProcess(), - &BaseAddress2, - 0, - &ViewSize, - MEM_COMMIT, - PAGE_READONLY); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* Try to commit again (the already committed page) */ - Status = NtAllocateVirtualMemory(NtCurrentProcess(), - &BaseAddress2, - 0, - &ViewSize, - MEM_COMMIT, - PAGE_READONLY); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* We must be able to access the memory in the 2nd page of the 1st memory location */ - Status = STATUS_SUCCESS; - _SEH2_TRY - { - *((PUCHAR)BaseAddress + PAGE_SIZE) = 2; - } - _SEH2_EXCEPT(1) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; - ok_ntstatus(Status, STATUS_SUCCESS); - - ok(*(PULONG)BaseAddress2 == 2, "Value in memory was wrong"); - - /* Close the mapping */ - NtUnmapViewOfSection(NtCurrentProcess(), BaseAddress); - NtUnmapViewOfSection(NtCurrentProcess(), (PUCHAR)BaseAddress2 - PAGE_SIZE); - NtClose(SectionHandle); - -#if 0 - { - HANDLE Job; - JOBOBJECT_EXTENDED_LIMIT_INFORMATION JobLimitInformation; - - Job = CreateJobObject(NULL, NULL); - ok_ntstatus(Status, STATUS_SUCCESS); - - ok(AssignProcessToJobObject(Job, NtCurrentProcess()), ""); - - RtlZeroMemory(&JobLimitInformation, sizeof(JobLimitInformation)); - JobLimitInformation.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_JOB_MEMORY; - JobLimitInformation.JobMemoryLimit = 100 * 1024; - JobLimitInformation.PeakProcessMemoryUsed = JobLimitInformation.JobMemoryLimit; - JobLimitInformation.PeakJobMemoryUsed = JobLimitInformation.JobMemoryLimit; - - ok(SetInformationJobObject(Job, - JobObjectExtendedLimitInformation, - &JobLimitInformation, - sizeof(JobLimitInformation)), ""); - } -#endif - - QuotaLimits.PagedPoolLimit = 0; - QuotaLimits.NonPagedPoolLimit = 0; - QuotaLimits.TimeLimit.QuadPart = 0; - QuotaLimits.PagefileLimit = 0; - QuotaLimits.MinimumWorkingSetSize = 90000; - QuotaLimits.MaximumWorkingSetSize = 90000; - Status = NtSetInformationProcess(NtCurrentProcess(), - ProcessQuotaLimits, - &QuotaLimits, - sizeof(QuotaLimits)); - ok_ntstatus(Status, STATUS_SUCCESS); - - QuotaLimits.MinimumWorkingSetSize = 0; - QuotaLimits.MaximumWorkingSetSize = 0; - QuotaLimits.PagefileLimit = 1; - Status = NtSetInformationProcess(NtCurrentProcess(), - ProcessQuotaLimits, - &QuotaLimits, - sizeof(QuotaLimits)); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* Try to create a huge page file backed section */ - MaximumSize.QuadPart = 0x800000000; - Status = NtCreateSection(&SectionHandle, - SECTION_ALL_ACCESS, - NULL, - &MaximumSize, - PAGE_READWRITE, - SEC_COMMIT, - NULL); - ok_ntstatus(Status, STATUS_COMMITMENT_LIMIT); - - /* Try to create a huge page file backed section with PAGE_NOACCESS protection */ - MaximumSize.QuadPart = 0x8000000000; - Status = NtCreateSection(&SectionHandle, - SECTION_ALL_ACCESS, - NULL, - &MaximumSize, - PAGE_NOACCESS, - SEC_COMMIT, - NULL); - ok_ntstatus(Status, STATUS_INVALID_PAGE_PROTECTION); - - /* Create a huge page file backed section, but only reserved */ - MaximumSize.QuadPart = 0x8000000000; - Status = NtCreateSection(&SectionHandle, - SECTION_ALL_ACCESS, - NULL, - &MaximumSize, - PAGE_READWRITE, - SEC_RESERVE, - NULL); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* Pass a too large region size */ - BaseAddress = NULL; - SectionOffset.QuadPart = 0; - ViewSize = 0x80000000; - Status = NtMapViewOfSection(SectionHandle, - NtCurrentProcess(), - &BaseAddress, - 0, - 0, - &SectionOffset, - &ViewSize, - ViewShare, - 0, - PAGE_READWRITE); - ok_ntstatus(Status, STATUS_INVALID_PARAMETER_4); - - /* Map with PAGE_NOACCESS */ - BaseAddress = NULL; - SectionOffset.QuadPart = 0; - ViewSize = 0x20000000; - Status = NtMapViewOfSection(SectionHandle, - NtCurrentProcess(), - &BaseAddress, - 0, - 0, - &SectionOffset, - &ViewSize, - ViewShare, - 0, - PAGE_NOACCESS); - ok_ntstatus(Status, STATUS_SUCCESS); - - /* Update protection to PAGE_READWRITE */ - ViewSize = 0x20000000; - Status = NtAllocateVirtualMemory(NtCurrentProcess(), &BaseAddress, 0, &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); - - //Status = NtProtectVirtualMemory(NtCurrentProcess(), &BaseAddress, &ViewSize, PAGE_READWRITE, &OldProtect); - //ok_ntstatus(Status, STATUS_SUCCESS); - //ok(OldProtect == PAGE_NOACCESS, "Wrong protection returned: %u\n", OldProtect); - - /* Update protection to PAGE_READWRITE (1 page) */ - ViewSize = 0x1000; - Status = NtAllocateVirtualMemory(NtCurrentProcess(), &BaseAddress, 0, &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok_ntstatus(Status, STATUS_SUCCESS); + ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); + if (!NT_SUCCESS(Status)) + return; } @@ -585,7 +291,7 @@ Test_ImageSection(void) FileHandle); ok(Status == STATUS_SUCCESS, "NtCreateSection failed, Status 0x%lx\n", Status); - /* Map the data section as flat mapping */ + /* Map the data section */ DataBase = NULL; ViewSize = 0; Status = NtMapViewOfSection(DataSectionHandle, @@ -645,12 +351,12 @@ Test_ImageSection(void) Status = NtMapViewOfSection(ImageSectionHandle, NtCurrentProcess(), &ImageBase, - 0, // ZeroBits - 0, // CommitSize - NULL, // SectionOffset + 0, + 0, + NULL, &ViewSize, ViewShare, - 0, // AllocationType + 0, PAGE_READONLY); #ifdef _M_IX86 ok(Status == STATUS_SUCCESS, "NtMapViewOfSection failed, Status 0x%lx\n", Status); @@ -753,93 +459,10 @@ Test_ImageSection(void) NtUnmapViewOfSection(NtCurrentProcess(), ImageBase); } -void -Test_ImageSection2(void) -{ - UNICODE_STRING FileName; - NTSTATUS Status; - OBJECT_ATTRIBUTES FileObjectAttributes; - IO_STATUS_BLOCK IoStatusBlock; - HANDLE FileHandle, ImageSectionHandle; - PVOID ImageBase, BaseAddress; - SIZE_T ViewSize; - LARGE_INTEGER MaximumSize, SectionOffset; - - if (!RtlDosPathNameToNtPathName_U(L"testdata\\nvoglv32.dll", - &FileName, - NULL, - NULL)) - { - ok(0, "RtlDosPathNameToNtPathName_U failed\n"); - return; - } - - InitializeObjectAttributes(&FileObjectAttributes, - &FileName, - 0, - NULL, - NULL); - - Status = NtOpenFile(&FileHandle, - GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE, - &FileObjectAttributes, - &IoStatusBlock, - FILE_SHARE_READ, - FILE_SYNCHRONOUS_IO_NONALERT); - ok(Status == STATUS_SUCCESS, "NtOpenFile failed, Status 0x%lx\n", Status); - printf("Opened file with handle %p\n", FileHandle); - - /* Create a data section with write access */ - MaximumSize.QuadPart = 0x20000; - Status = NtCreateSection(&ImageSectionHandle, - SECTION_ALL_ACCESS, // DesiredAccess - NULL, // ObjectAttributes - &MaximumSize, // MaximumSize - PAGE_READWRITE, // SectionPageProtection - SEC_IMAGE, // AllocationAttributes - FileHandle); - ok(Status == STATUS_SUCCESS, "NtCreateSection failed, Status 0x%lx\n", Status); - - printf("Created image section with handle %p\n", ImageSectionHandle); - //system("PAUSE"); - - /* Map the image section */ - ImageBase = NULL; - ViewSize = 0x0000; - SectionOffset.QuadPart = 0x00000; - Status = NtMapViewOfSection(ImageSectionHandle, - NtCurrentProcess(), - &ImageBase, - 0, - 0, - &SectionOffset, - &ViewSize, - ViewShare, - 0, - PAGE_READWRITE); - ok(Status == STATUS_SUCCESS, "NtMapViewOfSection failed, Status 0x%lx\n", Status); - - printf("Mapped image section at %p, value in text section: %lx\n", - ImageBase, *((ULONG*)((PCHAR)ImageBase + 0x1196))); - system("PAUSE"); - - /* Try to allocate a page after the section */ - BaseAddress = (PUCHAR)ImageBase + 0x10000; - ViewSize = 0x1000; - Status = NtAllocateVirtualMemory(NtCurrentProcess(), - &BaseAddress, - 0, - &ViewSize, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE); - printf("allocation status: %lx\n", Status); - system("PAUSE"); - -} START_TEST(NtMapViewOfSection) { Test_PageFileSection(); - //Test_ImageSection2(); + Test_ImageSection(); } From 5f6ac9ac39cabd975ca1d19a67f1464f946a33e0 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Wed, 14 May 2014 20:56:21 +0000 Subject: [PATCH 17/81] [NTVDM] Don't calculate NextElement twice. Properly initialize the keyboard buffer head and tail. svn path=/trunk/; revision=63302 --- reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c b/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c index fdc5b400ed1..d3a4ad8b3e0 100644 --- a/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c +++ b/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c @@ -39,14 +39,7 @@ static BOOLEAN BiosKbdBufferPush(WORD Data) /* Put the value in the queue */ *((LPWORD)((ULONG_PTR)Bda + Bda->KeybdBufferTail)) = Data; - Bda->KeybdBufferTail += sizeof(WORD); - - /* Check if we are at, or have passed, the end of the buffer */ - if (Bda->KeybdBufferTail >= Bda->KeybdBufferEnd) - { - /* Return it to the beginning */ - Bda->KeybdBufferTail = Bda->KeybdBufferStart; - } + Bda->KeybdBufferTail = NextElement; /* Return success */ return TRUE; @@ -271,7 +264,7 @@ BOOLEAN KbdBios32Initialize(VOID) /* Initialize the BDA */ Bda->KeybdBufferStart = FIELD_OFFSET(BIOS_DATA_AREA, KeybdBuffer); Bda->KeybdBufferEnd = Bda->KeybdBufferStart + BIOS_KBD_BUFFER_SIZE * sizeof(WORD); - Bda->KeybdBufferHead = Bda->KeybdBufferTail = 0; + Bda->KeybdBufferHead = Bda->KeybdBufferTail = Bda->KeybdBufferStart; // FIXME: Fill the keyboard buffer with invalid values, for diagnostic purposes... RtlFillMemory(((LPVOID)((ULONG_PTR)Bda + Bda->KeybdBufferStart)), BIOS_KBD_BUFFER_SIZE * sizeof(WORD), 'A'); From 8afc11c2e4abc04f2dd818451a99d7afb6484f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 15 May 2014 01:13:44 +0000 Subject: [PATCH 18/81] [NTVDM]: Code formatting and DPRINT fix. svn path=/trunk/; revision=63303 --- reactos/subsystems/ntvdm/bios/vidbios.c | 2 +- reactos/subsystems/ntvdm/callback.c | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/reactos/subsystems/ntvdm/bios/vidbios.c b/reactos/subsystems/ntvdm/bios/vidbios.c index 41d22d3b1a6..c5d94e061c2 100644 --- a/reactos/subsystems/ntvdm/bios/vidbios.c +++ b/reactos/subsystems/ntvdm/bios/vidbios.c @@ -1494,7 +1494,7 @@ VOID WINAPI VidBiosVideoService(LPWORD Stack) /* Alternate Function Select */ case 0x12: { - DPRINT1("BIOS Function INT 12h (Alternate Function Select), BX = 0x%04X NOT IMPLEMENTED\n", + DPRINT1("BIOS Function INT 10h, AH = 12h (Alternate Function Select), BX = 0x%04X NOT IMPLEMENTED\n", getBX()); break; } diff --git a/reactos/subsystems/ntvdm/callback.c b/reactos/subsystems/ntvdm/callback.c index 0cffdfd105a..7566a9437a7 100644 --- a/reactos/subsystems/ntvdm/callback.c +++ b/reactos/subsystems/ntvdm/callback.c @@ -27,10 +27,8 @@ EMULATOR_INT32_PROC Int32Proc[EMULATOR_MAX_INT32_NUM] = { NULL }; /* BOP Identifiers */ #define BOP_CONTROL 0xFF // Control BOP Handler #define BOP_CONTROL_DEFFUNC 0x00 // Default Control BOP Function - -/* 32-bit Interrupt dispatcher function code for the Control BOP Handler */ -#define BOP_CONTROL_INT32 0xFF - + #define BOP_CONTROL_INT32 0xFF // 32-bit Interrupt dispatcher + // function code for the Control BOP Handler #define BOP(num) LOBYTE(EMULATOR_BOP), HIBYTE(EMULATOR_BOP), (num) #define UnSimulate16(trap) \ @@ -89,7 +87,7 @@ InitializeContext(IN PCALLBACK16 Context, Context->TrampolineFarPtr = MAKELONG(Offset, Segment); Context->Segment = Segment; Context->NextOffset = Offset + max(CALL16_TRAMPOLINE_SIZE, - INT16_TRAMPOLINE_SIZE); + INT16_TRAMPOLINE_SIZE); } VOID @@ -280,11 +278,17 @@ static VOID WINAPI ControlBop(LPWORD Stack) BYTE FuncNum = *(PBYTE)SEG_OFF_TO_PTR(getCS(), getIP()); setIP(getIP() + 1); - if (FuncNum == BOP_CONTROL_INT32) - Int32Dispatch(Stack); - else - // DPRINT1("Unassigned Control BOP Function: 0x%02X\n", FuncNum); - DisplayMessage(L"Unassigned Control BOP Function: 0x%02X\n", FuncNum); + switch (FuncNum) + { + case BOP_CONTROL_INT32: + Int32Dispatch(Stack); + break; + + default: + // DPRINT1("Unassigned Control BOP Function: 0x%02X\n", FuncNum); + DisplayMessage(L"Unassigned Control BOP Function: 0x%02X", FuncNum); + break; + } } VOID InitializeCallbacks(VOID) From ac2f92611e4e690538dc88a3210cd4277e8849f2 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Thu, 15 May 2014 16:32:30 +0000 Subject: [PATCH 19/81] [FORMATTING] Fix indentation and coding style. No code changes! svn path=/trunk/; revision=63305 --- reactos/base/setup/usetup/interface/consup.c | 814 +++++++++--------- reactos/base/setup/usetup/native/console.c | 5 +- reactos/base/setup/usetup/native/fslist.c | 33 +- .../base/setup/usetup/native/utils/console.c | 749 ++++++++-------- .../base/setup/usetup/native/utils/console.h | 125 +-- 5 files changed, 872 insertions(+), 854 deletions(-) diff --git a/reactos/base/setup/usetup/interface/consup.c b/reactos/base/setup/usetup/interface/consup.c index 88fd4b960b3..fd9ff284c5b 100644 --- a/reactos/base/setup/usetup/interface/consup.c +++ b/reactos/base/setup/usetup/interface/consup.c @@ -43,230 +43,230 @@ SHORT yScreen = 0; BOOLEAN CONSOLE_Init( - VOID) + VOID) { - CONSOLE_SCREEN_BUFFER_INFO csbi; - if (!HOST_InitConsole()) - return FALSE; + CONSOLE_SCREEN_BUFFER_INFO csbi; + if (!HOST_InitConsole()) + return FALSE; - StdInput = GetStdHandle(STD_INPUT_HANDLE); - StdOutput = GetStdHandle(STD_OUTPUT_HANDLE); - if (!GetConsoleScreenBufferInfo(StdOutput, &csbi)) - return FALSE; - xScreen = csbi.dwSize.X; - yScreen = 50;//csbi.dwSize.Y; - return TRUE; + StdInput = GetStdHandle(STD_INPUT_HANDLE); + StdOutput = GetStdHandle(STD_OUTPUT_HANDLE); + if (!GetConsoleScreenBufferInfo(StdOutput, &csbi)) + return FALSE; + xScreen = csbi.dwSize.X; + yScreen = 50;//csbi.dwSize.Y; + return TRUE; } VOID CONSOLE_ConInKey( - OUT PINPUT_RECORD Buffer) + OUT PINPUT_RECORD Buffer) { - DWORD Read; + DWORD Read; - while (TRUE) - { - ReadConsoleInput(StdInput, Buffer, 1, &Read); + while (TRUE) + { + ReadConsoleInput(StdInput, Buffer, 1, &Read); - if ((Buffer->EventType == KEY_EVENT) - && (Buffer->Event.KeyEvent.bKeyDown == TRUE)) - break; - } + if ((Buffer->EventType == KEY_EVENT) + && (Buffer->Event.KeyEvent.bKeyDown == TRUE)) + break; + } } VOID CONSOLE_ConOutChar( - IN CHAR c) + IN CHAR c) { - DWORD Written; + DWORD Written; - WriteConsole( - StdOutput, - &c, - 1, - &Written, - NULL); + WriteConsole( + StdOutput, + &c, + 1, + &Written, + NULL); } VOID CONSOLE_ConOutPuts( - IN LPCSTR szText) + IN LPCSTR szText) { - DWORD Written; + DWORD Written; - WriteConsole( - StdOutput, - szText, - (ULONG)strlen(szText), - &Written, - NULL); - WriteConsole( - StdOutput, - "\n", - 1, - &Written, - NULL); + WriteConsole( + StdOutput, + szText, + (ULONG)strlen(szText), + &Written, + NULL); + WriteConsole( + StdOutput, + "\n", + 1, + &Written, + NULL); } VOID CONSOLE_ConOutPrintf( - IN LPCSTR szFormat, ...) + IN LPCSTR szFormat, ...) { - CHAR szOut[256]; - DWORD dwWritten; - va_list arg_ptr; + CHAR szOut[256]; + DWORD dwWritten; + va_list arg_ptr; - va_start(arg_ptr, szFormat); - vsprintf(szOut, szFormat, arg_ptr); - va_end(arg_ptr); + va_start(arg_ptr, szFormat); + vsprintf(szOut, szFormat, arg_ptr); + va_end(arg_ptr); - WriteConsole( - StdOutput, - szOut, - (ULONG)strlen(szOut), - &dwWritten, - NULL); + WriteConsole( + StdOutput, + szOut, + (ULONG)strlen(szOut), + &dwWritten, + NULL); } BOOL CONSOLE_Flush(VOID) { - return FlushConsoleInputBuffer(StdInput); + return FlushConsoleInputBuffer(StdInput); } SHORT CONSOLE_GetCursorX(VOID) { - CONSOLE_SCREEN_BUFFER_INFO csbi; + CONSOLE_SCREEN_BUFFER_INFO csbi; - GetConsoleScreenBufferInfo(StdOutput, &csbi); + GetConsoleScreenBufferInfo(StdOutput, &csbi); - return csbi.dwCursorPosition.X; + return csbi.dwCursorPosition.X; } SHORT CONSOLE_GetCursorY(VOID) { - CONSOLE_SCREEN_BUFFER_INFO csbi; + CONSOLE_SCREEN_BUFFER_INFO csbi; - GetConsoleScreenBufferInfo(StdOutput, &csbi); + GetConsoleScreenBufferInfo(StdOutput, &csbi); - return csbi.dwCursorPosition.Y; + return csbi.dwCursorPosition.Y; } VOID CONSOLE_SetCursorType( - IN BOOL bInsert, - IN BOOL bVisible) + IN BOOL bInsert, + IN BOOL bVisible) { - CONSOLE_CURSOR_INFO cci; + CONSOLE_CURSOR_INFO cci; - cci.dwSize = bInsert ? 10 : 99; - cci.bVisible = bVisible; + cci.dwSize = bInsert ? 10 : 99; + cci.bVisible = bVisible; - SetConsoleCursorInfo(StdOutput, &cci); + SetConsoleCursorInfo(StdOutput, &cci); } VOID CONSOLE_SetCursorXY( - IN SHORT x, - IN SHORT y) + IN SHORT x, + IN SHORT y) { - COORD coPos; + COORD coPos; - coPos.X = x; - coPos.Y = y; - SetConsoleCursorPosition(StdOutput, coPos); + coPos.X = x; + coPos.Y = y; + SetConsoleCursorPosition(StdOutput, coPos); } VOID CONSOLE_ClearScreen(VOID) { - COORD coPos; - DWORD Written; + COORD coPos; + DWORD Written; - coPos.X = 0; - coPos.Y = 0; + coPos.X = 0; + coPos.Y = 0; - FillConsoleOutputAttribute( - StdOutput, - FOREGROUND_WHITE | BACKGROUND_BLUE, - xScreen * yScreen, - coPos, - &Written); + FillConsoleOutputAttribute( + StdOutput, + FOREGROUND_WHITE | BACKGROUND_BLUE, + xScreen * yScreen, + coPos, + &Written); - FillConsoleOutputCharacterA( - StdOutput, - ' ', - xScreen * yScreen, - coPos, - &Written); + FillConsoleOutputCharacterA( + StdOutput, + ' ', + xScreen * yScreen, + coPos, + &Written); } VOID CONSOLE_InvertTextXY( - IN SHORT x, - IN SHORT y, - IN SHORT col, - IN SHORT row) + IN SHORT x, + IN SHORT y, + IN SHORT col, + IN SHORT row) { - COORD coPos; - DWORD Written; + COORD coPos; + DWORD Written; - for (coPos.Y = y; coPos.Y < y + row; coPos.Y++) - { - coPos.X = x; + for (coPos.Y = y; coPos.Y < y + row; coPos.Y++) + { + coPos.X = x; - FillConsoleOutputAttribute( - StdOutput, - FOREGROUND_BLUE | BACKGROUND_WHITE, - col, - coPos, - &Written); - } + FillConsoleOutputAttribute( + StdOutput, + FOREGROUND_BLUE | BACKGROUND_WHITE, + col, + coPos, + &Written); + } } VOID CONSOLE_NormalTextXY( - IN SHORT x, - IN SHORT y, - IN SHORT col, - IN SHORT row) + IN SHORT x, + IN SHORT y, + IN SHORT col, + IN SHORT row) { - COORD coPos; - DWORD Written; + COORD coPos; + DWORD Written; - for (coPos.Y = y; coPos.Y < y + row; coPos.Y++) - { - coPos.X = x; + for (coPos.Y = y; coPos.Y < y + row; coPos.Y++) + { + coPos.X = x; - FillConsoleOutputAttribute( - StdOutput, - FOREGROUND_WHITE | BACKGROUND_BLUE, - col, - coPos, - &Written); - } + FillConsoleOutputAttribute( + StdOutput, + FOREGROUND_WHITE | BACKGROUND_BLUE, + col, + coPos, + &Written); + } } VOID CONSOLE_SetTextXY( - IN SHORT x, - IN SHORT y, - IN LPCSTR Text) + IN SHORT x, + IN SHORT y, + IN LPCSTR Text) { - COORD coPos; - DWORD Written; + COORD coPos; + DWORD Written; - coPos.X = x; - coPos.Y = y; + coPos.X = x; + coPos.Y = y; - WriteConsoleOutputCharacterA( - StdOutput, - Text, - (ULONG)strlen(Text), - coPos, - &Written); + WriteConsoleOutputCharacterA( + StdOutput, + Text, + (ULONG)strlen(Text), + coPos, + &Written); } static @@ -290,164 +290,164 @@ CONSOLE_ClearTextXY(IN SHORT x, VOID CONSOLE_SetInputTextXY( - IN SHORT x, - IN SHORT y, - IN SHORT len, - IN LPCWSTR Text) + IN SHORT x, + IN SHORT y, + IN SHORT len, + IN LPCWSTR Text) { - COORD coPos; - SHORT Length; - DWORD Written; + COORD coPos; + SHORT Length; + DWORD Written; - coPos.X = x; - coPos.Y = y; + coPos.X = x; + coPos.Y = y; - Length = (SHORT)wcslen(Text); - if (Length > len - 1) - Length = len - 1; + Length = (SHORT)wcslen(Text); + if (Length > len - 1) + Length = len - 1; - FillConsoleOutputAttribute( - StdOutput, - BACKGROUND_WHITE, - len, - coPos, - &Written); + FillConsoleOutputAttribute( + StdOutput, + BACKGROUND_WHITE, + len, + coPos, + &Written); - WriteConsoleOutputCharacterW( - StdOutput, - Text, - (ULONG)Length, - coPos, - &Written); + WriteConsoleOutputCharacterW( + StdOutput, + Text, + (ULONG)Length, + coPos, + &Written); - coPos.X += Length; - FillConsoleOutputCharacterA( - StdOutput, - '_', - 1, - coPos, - &Written); + coPos.X += Length; + FillConsoleOutputCharacterA( + StdOutput, + '_', + 1, + coPos, + &Written); - if (len > Length + 1) - { - coPos.X++; - FillConsoleOutputCharacterA( - StdOutput, - ' ', - len - Length - 1, - coPos, - &Written); - } + if (len > Length + 1) + { + coPos.X++; + FillConsoleOutputCharacterA( + StdOutput, + ' ', + len - Length - 1, + coPos, + &Written); + } } VOID CONSOLE_SetUnderlinedTextXY( - IN SHORT x, - IN SHORT y, - IN LPCSTR Text) + IN SHORT x, + IN SHORT y, + IN LPCSTR Text) { - COORD coPos; - DWORD Length; - DWORD Written; + COORD coPos; + DWORD Length; + DWORD Written; - coPos.X = x; - coPos.Y = y; + coPos.X = x; + coPos.Y = y; - Length = (ULONG)strlen(Text); + Length = (ULONG)strlen(Text); - WriteConsoleOutputCharacterA( - StdOutput, - Text, - Length, - coPos, - &Written); + WriteConsoleOutputCharacterA( + StdOutput, + Text, + Length, + coPos, + &Written); - coPos.Y++; - FillConsoleOutputCharacterA( - StdOutput, - 0xCD, - Length, - coPos, - &Written); + coPos.Y++; + FillConsoleOutputCharacterA( + StdOutput, + 0xCD, + Length, + coPos, + &Written); } VOID CONSOLE_SetStatusText( - IN LPCSTR fmt, ...) + IN LPCSTR fmt, ...) { - CHAR Buffer[128]; - va_list ap; - COORD coPos; - DWORD Written; + CHAR Buffer[128]; + va_list ap; + COORD coPos; + DWORD Written; - va_start(ap, fmt); - vsprintf(Buffer, fmt, ap); - va_end(ap); + va_start(ap, fmt); + vsprintf(Buffer, fmt, ap); + va_end(ap); - coPos.X = 0; - coPos.Y = yScreen - 1; + coPos.X = 0; + coPos.Y = yScreen - 1; - FillConsoleOutputAttribute( - StdOutput, - BACKGROUND_WHITE, - xScreen, - coPos, - &Written); + FillConsoleOutputAttribute( + StdOutput, + BACKGROUND_WHITE, + xScreen, + coPos, + &Written); - FillConsoleOutputCharacterA( - StdOutput, - ' ', - xScreen, - coPos, - &Written); + FillConsoleOutputCharacterA( + StdOutput, + ' ', + xScreen, + coPos, + &Written); - WriteConsoleOutputCharacterA( - StdOutput, - Buffer, - (ULONG)strlen(Buffer), - coPos, - &Written); + WriteConsoleOutputCharacterA( + StdOutput, + Buffer, + (ULONG)strlen(Buffer), + coPos, + &Written); } VOID CONSOLE_SetStatusTextX( IN SHORT x, - IN LPCSTR fmt, ...) + IN LPCSTR fmt, ...) { - CHAR Buffer[128]; - va_list ap; - COORD coPos; - DWORD Written; + CHAR Buffer[128]; + va_list ap; + COORD coPos; + DWORD Written; - va_start(ap, fmt); - vsprintf(Buffer, fmt, ap); - va_end(ap); + va_start(ap, fmt); + vsprintf(Buffer, fmt, ap); + va_end(ap); - coPos.X = 0; - coPos.Y = yScreen - 1; + coPos.X = 0; + coPos.Y = yScreen - 1; - FillConsoleOutputAttribute( - StdOutput, - BACKGROUND_WHITE, - xScreen, - coPos, - &Written); + FillConsoleOutputAttribute( + StdOutput, + BACKGROUND_WHITE, + xScreen, + coPos, + &Written); - FillConsoleOutputCharacterA( - StdOutput, - ' ', - xScreen, - coPos, - &Written); + FillConsoleOutputCharacterA( + StdOutput, + ' ', + xScreen, + coPos, + &Written); coPos.X = x; - WriteConsoleOutputCharacterA( - StdOutput, - Buffer, - (ULONG)strlen(Buffer), - coPos, - &Written); + WriteConsoleOutputCharacterA( + StdOutput, + Buffer, + (ULONG)strlen(Buffer), + coPos, + &Written); } static @@ -472,15 +472,15 @@ CONSOLE_ClearStatusTextX(IN SHORT x, VOID CONSOLE_SetStatusTextAutoFitX( IN SHORT x, - IN LPCSTR fmt, ...) + IN LPCSTR fmt, ...) { - CHAR Buffer[128]; + CHAR Buffer[128]; DWORD Length; - va_list ap; + va_list ap; - va_start(ap, fmt); - vsprintf(Buffer, fmt, ap); - va_end(ap); + va_start(ap, fmt); + vsprintf(Buffer, fmt, ap); + va_end(ap); Length = (ULONG)strlen(Buffer); @@ -496,211 +496,211 @@ CONSOLE_SetStatusTextAutoFitX( VOID CONSOLE_SetInvertedTextXY( - IN SHORT x, - IN SHORT y, - IN LPCSTR Text) + IN SHORT x, + IN SHORT y, + IN LPCSTR Text) { - COORD coPos; - DWORD Length; - DWORD Written; + COORD coPos; + DWORD Length; + DWORD Written; - coPos.X = x; - coPos.Y = y; + coPos.X = x; + coPos.Y = y; - Length = (ULONG)strlen(Text); + Length = (ULONG)strlen(Text); - FillConsoleOutputAttribute( - StdOutput, - FOREGROUND_BLUE | BACKGROUND_WHITE, - Length, - coPos, - &Written); + FillConsoleOutputAttribute( + StdOutput, + FOREGROUND_BLUE | BACKGROUND_WHITE, + Length, + coPos, + &Written); - WriteConsoleOutputCharacterA( - StdOutput, - Text, - Length, - coPos, - &Written); + WriteConsoleOutputCharacterA( + StdOutput, + Text, + Length, + coPos, + &Written); } VOID CONSOLE_SetHighlightedTextXY( - IN SHORT x, - IN SHORT y, - IN LPCSTR Text) + IN SHORT x, + IN SHORT y, + IN LPCSTR Text) { - COORD coPos; - DWORD Length; - DWORD Written; + COORD coPos; + DWORD Length; + DWORD Written; - coPos.X = x; - coPos.Y = y; + coPos.X = x; + coPos.Y = y; - Length = (ULONG)strlen(Text); + Length = (ULONG)strlen(Text); - FillConsoleOutputAttribute( - StdOutput, - FOREGROUND_WHITE | FOREGROUND_INTENSITY | BACKGROUND_BLUE, - Length, - coPos, - &Written); + FillConsoleOutputAttribute( + StdOutput, + FOREGROUND_WHITE | FOREGROUND_INTENSITY | BACKGROUND_BLUE, + Length, + coPos, + &Written); - WriteConsoleOutputCharacterA( - StdOutput, - Text, - Length, - coPos, - &Written); + WriteConsoleOutputCharacterA( + StdOutput, + Text, + Length, + coPos, + &Written); } VOID CONSOLE_PrintTextXY( - IN SHORT x, - IN SHORT y, - IN LPCSTR fmt, ...) + IN SHORT x, + IN SHORT y, + IN LPCSTR fmt, ...) { - CHAR buffer[512]; - va_list ap; - COORD coPos; - DWORD Written; + CHAR buffer[512]; + va_list ap; + COORD coPos; + DWORD Written; - va_start(ap, fmt); - vsprintf(buffer, fmt, ap); - va_end(ap); + va_start(ap, fmt); + vsprintf(buffer, fmt, ap); + va_end(ap); - coPos.X = x; - coPos.Y = y; + coPos.X = x; + coPos.Y = y; - WriteConsoleOutputCharacterA( - StdOutput, - buffer, - (ULONG)strlen(buffer), - coPos, - &Written); + WriteConsoleOutputCharacterA( + StdOutput, + buffer, + (ULONG)strlen(buffer), + coPos, + &Written); } VOID CONSOLE_PrintTextXYN( - IN SHORT x, - IN SHORT y, - IN SHORT len, - IN LPCSTR fmt, ...) + IN SHORT x, + IN SHORT y, + IN SHORT len, + IN LPCSTR fmt, ...) { - CHAR buffer[512]; - va_list ap; - COORD coPos; - SHORT Length; - DWORD Written; + CHAR buffer[512]; + va_list ap; + COORD coPos; + SHORT Length; + DWORD Written; - va_start(ap, fmt); - vsprintf(buffer, fmt, ap); - va_end(ap); + va_start(ap, fmt); + vsprintf(buffer, fmt, ap); + va_end(ap); - coPos.X = x; - coPos.Y = y; + coPos.X = x; + coPos.Y = y; - Length = (SHORT)strlen(buffer); - if (Length > len - 1) - Length = len - 1; + Length = (SHORT)strlen(buffer); + if (Length > len - 1) + Length = len - 1; - WriteConsoleOutputCharacterA( - StdOutput, - buffer, - Length, - coPos, - &Written); + WriteConsoleOutputCharacterA( + StdOutput, + buffer, + Length, + coPos, + &Written); - coPos.X += Length; + coPos.X += Length; - if (len > Length) - { - FillConsoleOutputCharacterA( - StdOutput, - ' ', - len - Length, - coPos, - &Written); - } + if (len > Length) + { + FillConsoleOutputCharacterA( + StdOutput, + ' ', + len - Length, + coPos, + &Written); + } } VOID CONSOLE_SetStyledText( - IN SHORT x, - IN SHORT y, - IN INT Flags, - IN LPCSTR Text) + IN SHORT x, + IN SHORT y, + IN INT Flags, + IN LPCSTR Text) { - COORD coPos; - DWORD Length; + COORD coPos; + DWORD Length; - coPos.X = x; - coPos.Y = y; + coPos.X = x; + coPos.Y = y; - Length = (ULONG)strlen(Text); + Length = (ULONG)strlen(Text); if (Flags & TEXT_TYPE_STATUS) - { - coPos.X = x; - coPos.Y = yScreen - 1; - } + { + coPos.X = x; + coPos.Y = yScreen - 1; + } else /* TEXT_TYPE_REGULAR (Default) */ { coPos.X = x; - coPos.Y = y; + coPos.Y = y; } if (Flags & TEXT_ALIGN_CENTER) - { - coPos.X = (xScreen - Length) /2; - } + { + coPos.X = (xScreen - Length) /2; + } else if(Flags & TEXT_ALIGN_RIGHT) - { - coPos.X = coPos.X - Length; + { + coPos.X = coPos.X - Length; - if (Flags & TEXT_PADDING_SMALL) - { - coPos.X -= 1; - } - else if (Flags & TEXT_PADDING_MEDIUM) - { - coPos.X -= 2; - } - else if (Flags & TEXT_PADDING_BIG) - { - coPos.X -= 3; - } - } - else /* TEXT_ALIGN_LEFT (Default) */ - { - if (Flags & TEXT_PADDING_SMALL) - { - coPos.X += 1; - } - else if (Flags & TEXT_PADDING_MEDIUM) - { - coPos.X += 2; - } - else if (Flags & TEXT_PADDING_BIG) - { - coPos.X += 3; - } - } + if (Flags & TEXT_PADDING_SMALL) + { + coPos.X -= 1; + } + else if (Flags & TEXT_PADDING_MEDIUM) + { + coPos.X -= 2; + } + else if (Flags & TEXT_PADDING_BIG) + { + coPos.X -= 3; + } + } + else /* TEXT_ALIGN_LEFT (Default) */ + { + if (Flags & TEXT_PADDING_SMALL) + { + coPos.X += 1; + } + else if (Flags & TEXT_PADDING_MEDIUM) + { + coPos.X += 2; + } + else if (Flags & TEXT_PADDING_BIG) + { + coPos.X += 3; + } + } - if (Flags & TEXT_TYPE_STATUS) - { + if (Flags & TEXT_TYPE_STATUS) + { CONSOLE_SetStatusTextX(coPos.X, Text); - } + } else /* TEXT_TYPE_REGULAR (Default) */ { if (Flags & TEXT_STYLE_HIGHLIGHT) - { + { CONSOLE_SetHighlightedTextXY(coPos.X, coPos.Y, Text); - } + } else if (Flags & TEXT_STYLE_UNDERLINE) - { + { CONSOLE_SetUnderlinedTextXY(coPos.X, coPos.Y, Text); - } + } else /* TEXT_STYLE_NORMAL (Default) */ { CONSOLE_SetTextXY(coPos.X, coPos.Y, Text); diff --git a/reactos/base/setup/usetup/native/console.c b/reactos/base/setup/usetup/native/console.c index 6971b98f72b..963caa72f0d 100644 --- a/reactos/base/setup/usetup/native/console.c +++ b/reactos/base/setup/usetup/native/console.c @@ -1,8 +1,7 @@ #include BOOLEAN -NATIVE_InitConsole( - VOID) +NATIVE_InitConsole(VOID) { - return (BOOLEAN)AllocConsole(); + return (BOOLEAN)AllocConsole(); } diff --git a/reactos/base/setup/usetup/native/fslist.c b/reactos/base/setup/usetup/native/fslist.c index c1211c874ec..d00a7c91368 100644 --- a/reactos/base/setup/usetup/native/fslist.c +++ b/reactos/base/setup/usetup/native/fslist.c @@ -2,30 +2,29 @@ BOOLEAN NATIVE_CreateFileSystemList( - IN PFILE_SYSTEM_LIST List) + IN PFILE_SYSTEM_LIST List) { - FS_AddProvider(List, L"FAT", VfatFormat, VfatChkdsk); + FS_AddProvider(List, L"FAT", VfatFormat, VfatChkdsk); #if 0 - FS_AddProvider(List, L"EXT2", Ext2Format, Ext2Chkdsk); + FS_AddProvider(List, L"EXT2", Ext2Format, Ext2Chkdsk); #endif - return TRUE; + return TRUE; } + BOOLEAN NATIVE_FormatPartition( - IN PFILE_SYSTEM_ITEM FileSystem, - IN PCUNICODE_STRING DriveRoot, - IN PFMIFSCALLBACK Callback) + IN PFILE_SYSTEM_ITEM FileSystem, + IN PCUNICODE_STRING DriveRoot, + IN PFMIFSCALLBACK Callback) { - NTSTATUS Status; + NTSTATUS Status; - Status = FileSystem->FormatFunc( - (PUNICODE_STRING)DriveRoot, - FMIFS_HARDDISK, /* MediaFlag */ - NULL, /* Label */ - FileSystem->QuickFormat, /* QuickFormat */ - 0, /* ClusterSize */ - Callback); /* Callback */ - - return NT_SUCCESS(Status); + Status = FileSystem->FormatFunc((PUNICODE_STRING)DriveRoot, + FMIFS_HARDDISK, /* MediaFlag */ + NULL, /* Label */ + FileSystem->QuickFormat, /* QuickFormat */ + 0, /* ClusterSize */ + Callback); /* Callback */ + return NT_SUCCESS(Status); } diff --git a/reactos/base/setup/usetup/native/utils/console.c b/reactos/base/setup/usetup/native/utils/console.c index 21aff2c0235..327efe3f018 100644 --- a/reactos/base/setup/usetup/native/utils/console.c +++ b/reactos/base/setup/usetup/native/utils/console.c @@ -36,476 +36,481 @@ /* FUNCTIONS *****************************************************************/ -BOOL WINAPI +BOOL +WINAPI AllocConsole(VOID) { - UNICODE_STRING ScreenName = RTL_CONSTANT_STRING(L"\\??\\BlueScreen"); - UNICODE_STRING KeyboardName = RTL_CONSTANT_STRING(L"\\Device\\KeyboardClass0"); - OBJECT_ATTRIBUTES ObjectAttributes; - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS Status; + UNICODE_STRING ScreenName = RTL_CONSTANT_STRING(L"\\??\\BlueScreen"); + UNICODE_STRING KeyboardName = RTL_CONSTANT_STRING(L"\\Device\\KeyboardClass0"); + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; - /* Open the screen */ - InitializeObjectAttributes( - &ObjectAttributes, - &ScreenName, - 0, - NULL, - NULL); - Status = NtOpenFile( - &StdOutput, - FILE_ALL_ACCESS, - &ObjectAttributes, - &IoStatusBlock, - FILE_OPEN, - FILE_SYNCHRONOUS_IO_ALERT); - if (!NT_SUCCESS(Status)) - return FALSE; + /* Open the screen */ + InitializeObjectAttributes(&ObjectAttributes, + &ScreenName, + 0, + NULL, + NULL); + Status = NtOpenFile(&StdOutput, + FILE_ALL_ACCESS, + &ObjectAttributes, + &IoStatusBlock, + FILE_OPEN, + FILE_SYNCHRONOUS_IO_ALERT); + if (!NT_SUCCESS(Status)) + return FALSE; - /* Open the keyboard */ - InitializeObjectAttributes( - &ObjectAttributes, - &KeyboardName, - 0, - NULL, - NULL); - Status = NtOpenFile( - &StdInput, - FILE_ALL_ACCESS, - &ObjectAttributes, - &IoStatusBlock, - FILE_OPEN, - 0); - if (!NT_SUCCESS(Status)) - return FALSE; + /* Open the keyboard */ + InitializeObjectAttributes(&ObjectAttributes, + &KeyboardName, + 0, + NULL, + NULL); + Status = NtOpenFile(&StdInput, + FILE_ALL_ACCESS, + &ObjectAttributes, + &IoStatusBlock, + FILE_OPEN, + 0); + if (!NT_SUCCESS(Status)) + return FALSE; - return TRUE; + return TRUE; } -BOOL WINAPI + +BOOL +WINAPI AttachConsole( - IN DWORD dwProcessId) + IN DWORD dwProcessId) { - return FALSE; + return FALSE; } -BOOL WINAPI + +BOOL +WINAPI FreeConsole(VOID) { - if (StdInput != INVALID_HANDLE_VALUE) - NtClose(StdInput); + if (StdInput != INVALID_HANDLE_VALUE) + NtClose(StdInput); - if (StdOutput != INVALID_HANDLE_VALUE) - NtClose(StdOutput); + if (StdOutput != INVALID_HANDLE_VALUE) + NtClose(StdOutput); - return TRUE; + return TRUE; } -BOOL WINAPI + +BOOL +WINAPI WriteConsole( - IN HANDLE hConsoleOutput, - IN const VOID* lpBuffer, - IN DWORD nNumberOfCharsToWrite, - OUT LPDWORD lpNumberOfCharsWritten, - IN LPVOID lpReserved) + IN HANDLE hConsoleOutput, + IN const VOID *lpBuffer, + IN DWORD nNumberOfCharsToWrite, + OUT LPDWORD lpNumberOfCharsWritten, + IN LPVOID lpReserved) { - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; - Status = NtWriteFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - (PVOID)lpBuffer, - nNumberOfCharsToWrite, - NULL, - NULL); - if (!NT_SUCCESS(Status)) - return FALSE; + Status = NtWriteFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + (PVOID)lpBuffer, + nNumberOfCharsToWrite, + NULL, + NULL); + if (!NT_SUCCESS(Status)) + return FALSE; - *lpNumberOfCharsWritten = IoStatusBlock.Information; - return TRUE; + *lpNumberOfCharsWritten = IoStatusBlock.Information; + return TRUE; } -HANDLE WINAPI + +HANDLE +WINAPI GetStdHandle( - IN DWORD nStdHandle) + IN DWORD nStdHandle) { - switch (nStdHandle) - { - case STD_INPUT_HANDLE: - return StdInput; - case STD_OUTPUT_HANDLE: - return StdOutput; - default: - return INVALID_HANDLE_VALUE; - } + switch (nStdHandle) + { + case STD_INPUT_HANDLE: + return StdInput; + case STD_OUTPUT_HANDLE: + return StdOutput; + default: + return INVALID_HANDLE_VALUE; + } } -BOOL WINAPI + +BOOL +WINAPI FlushConsoleInputBuffer( - IN HANDLE hConsoleInput) + IN HANDLE hConsoleInput) { - LARGE_INTEGER Offset, Timeout; - IO_STATUS_BLOCK IoStatusBlock; - KEYBOARD_INPUT_DATA InputData; - NTSTATUS Status; + LARGE_INTEGER Offset, Timeout; + IO_STATUS_BLOCK IoStatusBlock; + KEYBOARD_INPUT_DATA InputData; + NTSTATUS Status; - do - { - Offset.QuadPart = 0; - Status = NtReadFile( - hConsoleInput, - NULL, - NULL, - NULL, - &IoStatusBlock, - &InputData, - sizeof(KEYBOARD_INPUT_DATA), - &Offset, - 0); - if (Status == STATUS_PENDING) - { - Timeout.QuadPart = -100; - Status = NtWaitForSingleObject(hConsoleInput, FALSE, &Timeout); - if (Status == STATUS_TIMEOUT) - { - NtCancelIoFile(hConsoleInput, &IoStatusBlock); - return TRUE; - } - } - } while (NT_SUCCESS(Status)); - return FALSE; + do + { + Offset.QuadPart = 0; + Status = NtReadFile(hConsoleInput, + NULL, + NULL, + NULL, + &IoStatusBlock, + &InputData, + sizeof(KEYBOARD_INPUT_DATA), + &Offset, + 0); + if (Status == STATUS_PENDING) + { + Timeout.QuadPart = -100; + Status = NtWaitForSingleObject(hConsoleInput, FALSE, &Timeout); + if (Status == STATUS_TIMEOUT) + { + NtCancelIoFile(hConsoleInput, &IoStatusBlock); + return TRUE; + } + } + } while (NT_SUCCESS(Status)); + return FALSE; } -BOOL WINAPI + +BOOL +WINAPI ReadConsoleInput( - IN HANDLE hConsoleInput, - OUT PINPUT_RECORD lpBuffer, - IN DWORD nLength, - OUT LPDWORD lpNumberOfEventsRead) + IN HANDLE hConsoleInput, + OUT PINPUT_RECORD lpBuffer, + IN DWORD nLength, + OUT LPDWORD lpNumberOfEventsRead) { - LARGE_INTEGER Offset; - IO_STATUS_BLOCK IoStatusBlock; - KEYBOARD_INPUT_DATA InputData; - NTSTATUS Status; + LARGE_INTEGER Offset; + IO_STATUS_BLOCK IoStatusBlock; + KEYBOARD_INPUT_DATA InputData; + NTSTATUS Status; - Offset.QuadPart = 0; - Status = NtReadFile( - hConsoleInput, - NULL, - NULL, - NULL, - &IoStatusBlock, - &InputData, - sizeof(KEYBOARD_INPUT_DATA), - &Offset, - 0); - if (Status == STATUS_PENDING) - { - Status = NtWaitForSingleObject(hConsoleInput, FALSE, NULL); - Status = IoStatusBlock.Status; - } - if (!NT_SUCCESS(Status)) - return FALSE; + Offset.QuadPart = 0; + Status = NtReadFile(hConsoleInput, + NULL, + NULL, + NULL, + &IoStatusBlock, + &InputData, + sizeof(KEYBOARD_INPUT_DATA), + &Offset, + 0); + if (Status == STATUS_PENDING) + { + Status = NtWaitForSingleObject(hConsoleInput, FALSE, NULL); + Status = IoStatusBlock.Status; + } + if (!NT_SUCCESS(Status)) + return FALSE; - lpBuffer->EventType = KEY_EVENT; - Status = IntTranslateKey(&InputData, &lpBuffer->Event.KeyEvent); - if (!NT_SUCCESS(Status)) - return FALSE; + lpBuffer->EventType = KEY_EVENT; + Status = IntTranslateKey(&InputData, &lpBuffer->Event.KeyEvent); + if (!NT_SUCCESS(Status)) + return FALSE; - *lpNumberOfEventsRead = 1; - return TRUE; + *lpNumberOfEventsRead = 1; + return TRUE; } -BOOL WINAPI + +BOOL +WINAPI WriteConsoleOutputCharacterA( - HANDLE hConsoleOutput, - IN LPCSTR lpCharacter, - IN DWORD nLength, - IN COORD dwWriteCoord, - OUT LPDWORD lpNumberOfCharsWritten) + HANDLE hConsoleOutput, + IN LPCSTR lpCharacter, + IN DWORD nLength, + IN COORD dwWriteCoord, + OUT LPDWORD lpNumberOfCharsWritten) { - IO_STATUS_BLOCK IoStatusBlock; - PCHAR Buffer; - COORD *pCoord; - PCHAR pText; - NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + PCHAR Buffer; + COORD *pCoord; + PCHAR pText; + NTSTATUS Status; - Buffer = (CHAR*) RtlAllocateHeap( - ProcessHeap, - 0, - nLength + sizeof(COORD)); - pCoord = (COORD *)Buffer; - pText = (PCHAR)(pCoord + 1); + Buffer = (CHAR*)RtlAllocateHeap(ProcessHeap, + 0, + nLength + sizeof(COORD)); + pCoord = (COORD *)Buffer; + pText = (PCHAR)(pCoord + 1); - *pCoord = dwWriteCoord; - memcpy(pText, lpCharacter, nLength); + *pCoord = dwWriteCoord; + memcpy(pText, lpCharacter, nLength); - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER, - NULL, - 0, - Buffer, - nLength + sizeof(COORD)); + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER, + NULL, + 0, + Buffer, + nLength + sizeof(COORD)); - RtlFreeHeap( - ProcessHeap, - 0, - Buffer); - if (!NT_SUCCESS(Status)) - return FALSE; + RtlFreeHeap(ProcessHeap, 0, Buffer); + if (!NT_SUCCESS(Status)) + return FALSE; - *lpNumberOfCharsWritten = IoStatusBlock.Information; - return TRUE; + *lpNumberOfCharsWritten = IoStatusBlock.Information; + return TRUE; } -BOOL WINAPI + +BOOL +WINAPI WriteConsoleOutputCharacterW( - HANDLE hConsoleOutput, - IN LPCWSTR lpCharacter, - IN DWORD nLength, - IN COORD dwWriteCoord, - OUT LPDWORD lpNumberOfCharsWritten) + HANDLE hConsoleOutput, + IN LPCWSTR lpCharacter, + IN DWORD nLength, + IN COORD dwWriteCoord, + OUT LPDWORD lpNumberOfCharsWritten) { - IO_STATUS_BLOCK IoStatusBlock; - PCHAR Buffer; - COORD *pCoord; - PCHAR pText; - NTSTATUS Status; - ULONG i; + IO_STATUS_BLOCK IoStatusBlock; + PCHAR Buffer; + COORD *pCoord; + PCHAR pText; + NTSTATUS Status; + ULONG i; - Buffer = (CHAR*) RtlAllocateHeap( - ProcessHeap, - 0, - nLength + sizeof(COORD)); - pCoord = (COORD *)Buffer; - pText = (PCHAR)(pCoord + 1); + Buffer = (CHAR*)RtlAllocateHeap(ProcessHeap, + 0, + nLength + sizeof(COORD)); + pCoord = (COORD *)Buffer; + pText = (PCHAR)(pCoord + 1); - *pCoord = dwWriteCoord; + *pCoord = dwWriteCoord; - /* FIXME: use real unicode->oem conversion */ - for (i = 0; i < nLength; i++) - pText[i] = (CHAR)lpCharacter[i]; + /* FIXME: use real unicode->oem conversion */ + for (i = 0; i < nLength; i++) + pText[i] = (CHAR)lpCharacter[i]; - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER, - NULL, - 0, - Buffer, - nLength + sizeof(COORD)); + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER, + NULL, + 0, + Buffer, + nLength + sizeof(COORD)); - RtlFreeHeap( - ProcessHeap, - 0, - Buffer); - if (!NT_SUCCESS(Status)) - return FALSE; + RtlFreeHeap(ProcessHeap, 0, Buffer); + if (!NT_SUCCESS(Status)) + return FALSE; - *lpNumberOfCharsWritten = IoStatusBlock.Information; - return TRUE; + *lpNumberOfCharsWritten = IoStatusBlock.Information; + return TRUE; } -BOOL WINAPI + +BOOL +WINAPI FillConsoleOutputAttribute( - IN HANDLE hConsoleOutput, - IN WORD wAttribute, - IN DWORD nLength, - IN COORD dwWriteCoord, - OUT LPDWORD lpNumberOfAttrsWritten) + IN HANDLE hConsoleOutput, + IN WORD wAttribute, + IN DWORD nLength, + IN COORD dwWriteCoord, + OUT LPDWORD lpNumberOfAttrsWritten) { - IO_STATUS_BLOCK IoStatusBlock; - OUTPUT_ATTRIBUTE Buffer; - NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + OUTPUT_ATTRIBUTE Buffer; + NTSTATUS Status; - Buffer.wAttribute = wAttribute; - Buffer.nLength = nLength; - Buffer.dwCoord = dwWriteCoord; + Buffer.wAttribute = wAttribute; + Buffer.nLength = nLength; + Buffer.dwCoord = dwWriteCoord; - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_FILL_OUTPUT_ATTRIBUTE, - &Buffer, - sizeof(OUTPUT_ATTRIBUTE), - &Buffer, - sizeof(OUTPUT_ATTRIBUTE)); + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_FILL_OUTPUT_ATTRIBUTE, + &Buffer, + sizeof(OUTPUT_ATTRIBUTE), + &Buffer, + sizeof(OUTPUT_ATTRIBUTE)); + if (!NT_SUCCESS(Status)) + return FALSE; - if (!NT_SUCCESS(Status)) - return FALSE; - - *lpNumberOfAttrsWritten = Buffer.dwTransfered; - return TRUE; + *lpNumberOfAttrsWritten = Buffer.dwTransfered; + return TRUE; } -BOOL WINAPI + +BOOL +WINAPI FillConsoleOutputCharacterA( - IN HANDLE hConsoleOutput, - IN CHAR cCharacter, - IN DWORD nLength, - IN COORD dwWriteCoord, - OUT LPDWORD lpNumberOfCharsWritten) + IN HANDLE hConsoleOutput, + IN CHAR cCharacter, + IN DWORD nLength, + IN COORD dwWriteCoord, + OUT LPDWORD lpNumberOfCharsWritten) { - IO_STATUS_BLOCK IoStatusBlock; - OUTPUT_CHARACTER Buffer; - NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + OUTPUT_CHARACTER Buffer; + NTSTATUS Status; - Buffer.cCharacter = cCharacter; - Buffer.nLength = nLength; - Buffer.dwCoord = dwWriteCoord; + Buffer.cCharacter = cCharacter; + Buffer.nLength = nLength; + Buffer.dwCoord = dwWriteCoord; - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_FILL_OUTPUT_CHARACTER, - &Buffer, - sizeof(OUTPUT_CHARACTER), - &Buffer, - sizeof(OUTPUT_CHARACTER)); - if (!NT_SUCCESS(Status)) - return FALSE; + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_FILL_OUTPUT_CHARACTER, + &Buffer, + sizeof(OUTPUT_CHARACTER), + &Buffer, + sizeof(OUTPUT_CHARACTER)); + if (!NT_SUCCESS(Status)) + return FALSE; - *lpNumberOfCharsWritten = Buffer.dwTransfered; - return TRUE; + *lpNumberOfCharsWritten = Buffer.dwTransfered; + return TRUE; } -BOOL WINAPI + +BOOL +WINAPI GetConsoleScreenBufferInfo( - IN HANDLE hConsoleOutput, - OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo) + IN HANDLE hConsoleOutput, + OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo) { - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_GET_SCREEN_BUFFER_INFO, - NULL, - 0, - lpConsoleScreenBufferInfo, - sizeof(CONSOLE_SCREEN_BUFFER_INFO)); - return NT_SUCCESS(Status); + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_GET_SCREEN_BUFFER_INFO, + NULL, + 0, + lpConsoleScreenBufferInfo, + sizeof(CONSOLE_SCREEN_BUFFER_INFO)); + return NT_SUCCESS(Status); } -BOOL WINAPI + +BOOL +WINAPI SetConsoleCursorInfo( - IN HANDLE hConsoleOutput, - IN const CONSOLE_CURSOR_INFO* lpConsoleCursorInfo) + IN HANDLE hConsoleOutput, + IN const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo) { - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_SET_CURSOR_INFO, - (PCONSOLE_CURSOR_INFO)lpConsoleCursorInfo, - sizeof(CONSOLE_CURSOR_INFO), - NULL, - 0); - return NT_SUCCESS(Status); + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_SET_CURSOR_INFO, + (PCONSOLE_CURSOR_INFO)lpConsoleCursorInfo, + sizeof(CONSOLE_CURSOR_INFO), + NULL, + 0); + return NT_SUCCESS(Status); } -BOOL WINAPI + +BOOL +WINAPI SetConsoleCursorPosition( - IN HANDLE hConsoleOutput, - IN COORD dwCursorPosition) + IN HANDLE hConsoleOutput, + IN COORD dwCursorPosition) { - CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo; - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS Status; + CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; - Status = GetConsoleScreenBufferInfo(hConsoleOutput, &ConsoleScreenBufferInfo); - if (!NT_SUCCESS(Status)) - return FALSE; + Status = GetConsoleScreenBufferInfo(hConsoleOutput, &ConsoleScreenBufferInfo); + if (!NT_SUCCESS(Status)) + return FALSE; - ConsoleScreenBufferInfo.dwCursorPosition.X = dwCursorPosition.X; - ConsoleScreenBufferInfo.dwCursorPosition.Y = dwCursorPosition.Y; + ConsoleScreenBufferInfo.dwCursorPosition.X = dwCursorPosition.X; + ConsoleScreenBufferInfo.dwCursorPosition.Y = dwCursorPosition.Y; - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_SET_SCREEN_BUFFER_INFO, - &ConsoleScreenBufferInfo, - sizeof(CONSOLE_SCREEN_BUFFER_INFO), - NULL, - 0); - - return NT_SUCCESS(Status); + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_SET_SCREEN_BUFFER_INFO, + &ConsoleScreenBufferInfo, + sizeof(CONSOLE_SCREEN_BUFFER_INFO), + NULL, + 0); + return NT_SUCCESS(Status); } -BOOL WINAPI + +BOOL +WINAPI SetConsoleTextAttribute( - IN HANDLE hConsoleOutput, - IN WORD wAttributes) + IN HANDLE hConsoleOutput, + IN WORD wAttributes) { - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_SET_TEXT_ATTRIBUTE, - &wAttributes, - sizeof(USHORT), - NULL, - 0); - return NT_SUCCESS(Status); + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_SET_TEXT_ATTRIBUTE, + &wAttributes, + sizeof(USHORT), + NULL, + 0); + return NT_SUCCESS(Status); } -BOOL WINAPI + +BOOL +WINAPI SetConsoleOutputCP( - IN UINT wCodepage) + IN UINT wCodepage) { - HANDLE hConsoleOutput; - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS Status; + HANDLE hConsoleOutput; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; - hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); + hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); - Status = NtDeviceIoControlFile( - hConsoleOutput, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_CONSOLE_LOADFONT, - &wCodepage, - sizeof(ULONG), - NULL, - 0); - return NT_SUCCESS(Status); + Status = NtDeviceIoControlFile(hConsoleOutput, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_CONSOLE_LOADFONT, + &wCodepage, + sizeof(ULONG), + NULL, + 0); + return NT_SUCCESS(Status); } diff --git a/reactos/base/setup/usetup/native/utils/console.h b/reactos/base/setup/usetup/native/utils/console.h index feb89829245..c2021709510 100644 --- a/reactos/base/setup/usetup/native/utils/console.h +++ b/reactos/base/setup/usetup/native/utils/console.h @@ -26,90 +26,105 @@ #pragma once -BOOL WINAPI +BOOL +WINAPI AllocConsole(VOID); -BOOL WINAPI +BOOL +WINAPI AttachConsole( - IN DWORD dwProcessId); + IN DWORD dwProcessId); -BOOL WINAPI +BOOL +WINAPI FillConsoleOutputAttribute( - IN HANDLE hConsoleOutput, - IN WORD wAttribute, - IN DWORD nLength, - IN COORD dwWriteCoord, - OUT LPDWORD lpNumberOfAttrsWritten); + IN HANDLE hConsoleOutput, + IN WORD wAttribute, + IN DWORD nLength, + IN COORD dwWriteCoord, + OUT LPDWORD lpNumberOfAttrsWritten); -BOOL WINAPI +BOOL +WINAPI FillConsoleOutputCharacterA( - IN HANDLE hConsoleOutput, - IN CHAR cCharacter, - IN DWORD nLength, - IN COORD dwWriteCoord, - OUT LPDWORD lpNumberOfCharsWritten); + IN HANDLE hConsoleOutput, + IN CHAR cCharacter, + IN DWORD nLength, + IN COORD dwWriteCoord, + OUT LPDWORD lpNumberOfCharsWritten); -BOOL WINAPI +BOOL +WINAPI FreeConsole(VOID); -BOOL WINAPI +BOOL +WINAPI GetConsoleScreenBufferInfo( - IN HANDLE hConsoleOutput, - OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo); + IN HANDLE hConsoleOutput, + OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo); -HANDLE WINAPI +HANDLE +WINAPI GetStdHandle( - IN DWORD nStdHandle); + IN DWORD nStdHandle); -BOOL WINAPI +BOOL +WINAPI ReadConsoleInput( - IN HANDLE hConsoleInput, - OUT PINPUT_RECORD lpBuffer, - IN DWORD nLength, - OUT LPDWORD lpNumberOfEventsRead); + IN HANDLE hConsoleInput, + OUT PINPUT_RECORD lpBuffer, + IN DWORD nLength, + OUT LPDWORD lpNumberOfEventsRead); -BOOL WINAPI +BOOL +WINAPI SetConsoleCursorInfo( - IN HANDLE hConsoleOutput, - IN const CONSOLE_CURSOR_INFO* lpConsoleCursorInfo); + IN HANDLE hConsoleOutput, + IN const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo); -BOOL WINAPI +BOOL +WINAPI SetConsoleCursorPosition( - IN HANDLE hConsoleOutput, - IN COORD dwCursorPosition); + IN HANDLE hConsoleOutput, + IN COORD dwCursorPosition); -BOOL WINAPI +BOOL +WINAPI SetConsoleTextAttribute( - IN HANDLE hConsoleOutput, - IN WORD wAttributes); + IN HANDLE hConsoleOutput, + IN WORD wAttributes); -BOOL WINAPI +BOOL +WINAPI WriteConsole( - IN HANDLE hConsoleOutput, - IN const VOID* lpBuffer, - IN DWORD nNumberOfCharsToWrite, - OUT LPDWORD lpNumberOfCharsWritten, - IN LPVOID lpReserved); + IN HANDLE hConsoleOutput, + IN const VOID *lpBuffer, + IN DWORD nNumberOfCharsToWrite, + OUT LPDWORD lpNumberOfCharsWritten, + IN LPVOID lpReserved); -BOOL WINAPI +BOOL +WINAPI WriteConsoleOutputCharacterA( - HANDLE hConsoleOutput, - IN LPCSTR lpCharacter, - IN DWORD nLength, - IN COORD dwWriteCoord, - OUT LPDWORD lpNumberOfCharsWritten); + HANDLE hConsoleOutput, + IN LPCSTR lpCharacter, + IN DWORD nLength, + IN COORD dwWriteCoord, + OUT LPDWORD lpNumberOfCharsWritten); -BOOL WINAPI +BOOL +WINAPI WriteConsoleOutputCharacterW( - HANDLE hConsoleOutput, - IN LPCSTR lpCharacter, - IN DWORD nLength, - IN COORD dwWriteCoord, - OUT LPDWORD lpNumberOfCharsWritten); + HANDLE hConsoleOutput, + IN LPCSTR lpCharacter, + IN DWORD nLength, + IN COORD dwWriteCoord, + OUT LPDWORD lpNumberOfCharsWritten); -BOOL WINAPI +BOOL +WINAPI SetConsoleOutputCP( - IN UINT wCodePageID + IN UINT wCodePageID ); /* EOF */ From 480e3ae350e1818f7ffabbadcfe63338d7755e97 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Thu, 15 May 2014 23:00:01 +0000 Subject: [PATCH 20/81] [NTVDM] Fix dead code. svn path=/trunk/; revision=63308 --- reactos/subsystems/ntvdm/hardware/cmos.c | 59 +++++++++++++++++------- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/reactos/subsystems/ntvdm/hardware/cmos.c b/reactos/subsystems/ntvdm/hardware/cmos.c index 4f86467249b..47306ebcd8d 100644 --- a/reactos/subsystems/ntvdm/hardware/cmos.c +++ b/reactos/subsystems/ntvdm/hardware/cmos.c @@ -53,6 +53,7 @@ VOID CmosWriteAddress(BYTE Value) BYTE CmosReadData(VOID) { + BYTE Value; SYSTEMTIME CurrentTime; /* Get the current time */ @@ -61,21 +62,33 @@ BYTE CmosReadData(VOID) switch (SelectedRegister) { case CMOS_REG_SECONDS: - return READ_CMOS_DATA(CmosMemory, CurrentTime.wSecond); + { + Value = READ_CMOS_DATA(CmosMemory, CurrentTime.wSecond); + break; + } case CMOS_REG_ALARM_SEC: - return READ_CMOS_DATA(CmosMemory, CmosMemory.AlarmSecond); + { + Value = READ_CMOS_DATA(CmosMemory, CmosMemory.AlarmSecond); + break; + } case CMOS_REG_MINUTES: - return READ_CMOS_DATA(CmosMemory, CurrentTime.wMinute); + { + Value = READ_CMOS_DATA(CmosMemory, CurrentTime.wMinute); + break; + } case CMOS_REG_ALARM_MIN: - return READ_CMOS_DATA(CmosMemory, CmosMemory.AlarmMinute); + { + Value = READ_CMOS_DATA(CmosMemory, CmosMemory.AlarmMinute); + break; + } case CMOS_REG_HOURS: { BOOLEAN Afternoon = FALSE; - BYTE Value = CurrentTime.wHour; + Value = CurrentTime.wHour; if (!(CmosMemory.StatusRegB & CMOS_STB_24HOUR) && (Value >= 12)) { @@ -88,13 +101,13 @@ BYTE CmosReadData(VOID) /* Convert to 12-hour */ if (Afternoon) Value |= 0x80; - return Value; + break; } case CMOS_REG_ALARM_HRS: { BOOLEAN Afternoon = FALSE; - BYTE Value = CmosMemory.AlarmHour; + Value = CmosMemory.AlarmHour; if (!(CmosMemory.StatusRegB & CMOS_STB_24HOUR) && (Value >= 12)) { @@ -107,35 +120,47 @@ BYTE CmosReadData(VOID) /* Convert to 12-hour */ if (Afternoon) Value |= 0x80; - return Value; + break; } case CMOS_REG_DAY_OF_WEEK: + { /* * The CMOS value is 1-based but the * GetLocalTime API value is 0-based. * Correct it. */ - return READ_CMOS_DATA(CmosMemory, CurrentTime.wDayOfWeek + 1); + Value = READ_CMOS_DATA(CmosMemory, CurrentTime.wDayOfWeek + 1); + break; + } case CMOS_REG_DAY: - return READ_CMOS_DATA(CmosMemory, CurrentTime.wDay); + { + Value = READ_CMOS_DATA(CmosMemory, CurrentTime.wDay); + break; + } case CMOS_REG_MONTH: - return READ_CMOS_DATA(CmosMemory, CurrentTime.wMonth); + { + Value = READ_CMOS_DATA(CmosMemory, CurrentTime.wMonth); + break; + } case CMOS_REG_YEAR: - return READ_CMOS_DATA(CmosMemory, CurrentTime.wYear % 100); + { + Value = READ_CMOS_DATA(CmosMemory, CurrentTime.wYear % 100); + break; + } case CMOS_REG_STATUS_C: { - BYTE Value = CmosMemory.StatusRegC; + /* Return the old value */ + Value = CmosMemory.StatusRegC; /* Clear status register C */ CmosMemory.StatusRegC = 0x00; - /* Return the old value */ - return Value; + break; } case CMOS_REG_STATUS_A: @@ -146,12 +171,14 @@ BYTE CmosReadData(VOID) default: { // ASSERT(SelectedRegister < CMOS_REG_MAX); - return CmosMemory.Regs[SelectedRegister]; + Value = CmosMemory.Regs[SelectedRegister]; } } /* Return to Status Register D */ SelectedRegister = CMOS_REG_STATUS_D; + + return Value; } VOID CmosWriteData(BYTE Value) From 325729ca4a9fc911c2259339977380b1f4108080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 15 May 2014 23:13:06 +0000 Subject: [PATCH 21/81] [NTVDM] - Add some diagnostic DPRINTs (they are off by default), and fix few of them. - Fix/complete few comments. - Implement INT 21h, AH=56h (rename file), 5Ah (create temporary file), 5Bh (create new file), 68h and 6Ah ("commit" aka. flush file; they are the same function). - Stubplement INT 21h, AH=60h (canonicalize file name or path) and 6Ch (extended open or create file). For this latest one I will merge DosCreateFile and DosOpenFile into the same function (in fact a wrapper around CreateFileA, that is used both for creating and opening files). svn path=/trunk/; revision=63309 --- reactos/subsystems/ntvdm/dos/dos32krnl/bios.c | 6 +- reactos/subsystems/ntvdm/dos/dos32krnl/dos.c | 190 ++++++++++++++++-- reactos/subsystems/ntvdm/dos/dos32krnl/dos.h | 8 +- .../subsystems/ntvdm/dos/dos32krnl/dosfiles.c | 103 +++++++--- 4 files changed, 261 insertions(+), 46 deletions(-) diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/bios.c b/reactos/subsystems/ntvdm/dos/dos32krnl/bios.c index 32057e51f4b..b70be3b2be7 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/bios.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/bios.c @@ -1,8 +1,8 @@ /* * COPYRIGHT: GPL - See COPYING in the top level directory * PROJECT: ReactOS Virtual DOS Machine - * FILE: dos.c - * PURPOSE: VDM DOS Kernel + * FILE: dos/dos32krnl/bios.c + * PURPOSE: DOS32 Bios * PROGRAMMERS: Aleksandar Andrejevic */ @@ -31,6 +31,8 @@ CHAR DosReadCharacter(WORD FileHandle) CHAR Character = '\0'; WORD BytesRead; + DPRINT("DosReadCharacter\n"); + /* Use the file reading function */ DosReadFile(FileHandle, &Character, 1, &BytesRead); diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c index bfdef07dc1c..4928ca443fe 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c @@ -2,8 +2,9 @@ * COPYRIGHT: GPL - See COPYING in the top level directory * PROJECT: ReactOS Virtual DOS Machine * FILE: dos/dos32krnl/dos.c - * PURPOSE: VDM DOS Kernel + * PURPOSE: DOS32 Kernel * PROGRAMMERS: Aleksandar Andrejevic + * Hermes Belusca-Maito (hermes.belusca@sfr.fr) */ /* INCLUDES *******************************************************************/ @@ -1436,13 +1437,16 @@ VOID WINAPI DosInt21h(LPWORD Stack) /* Read Character from STDIN with Echo */ case 0x01: { + DPRINT("INT 21h, AH = 01h\n"); + // FIXME: Under DOS 2+, input / output handle may be redirected!!!! DoEcho = TRUE; Character = DosReadCharacter(DOS_INPUT_HANDLE); DoEcho = FALSE; - // /* Let the BOP repeat if needed */ - // if (getCF()) break; + // FIXME: Check whether Ctrl-C / Ctrl-Break is pressed, and call INT 23h if so. + // Check also Ctrl-P and set echo-to-printer flag. + // Ctrl-Z is not interpreted. setAL(Character); break; @@ -1536,6 +1540,8 @@ VOID WINAPI DosInt21h(LPWORD Stack) case 0x07: case 0x08: { + DPRINT("Char input without echo\n"); + // FIXME: Under DOS 2+, input handle may be redirected!!!! Character = DosReadCharacter(DOS_INPUT_HANDLE); @@ -1566,7 +1572,7 @@ VOID WINAPI DosInt21h(LPWORD Stack) * See Ralf Brown: http://www.ctyme.com/intr/rb-2562.htm * for more information. */ - setAL('$'); + setAL('$'); // *String break; } @@ -1576,7 +1582,7 @@ VOID WINAPI DosInt21h(LPWORD Stack) WORD Count = 0; InputBuffer = (PDOS_INPUT_BUFFER)SEG_OFF_TO_PTR(getDS(), getDX()); - DPRINT1("Read Buffered Input\n"); + DPRINT("Read Buffered Input\n"); while (Count < InputBuffer->MaxLength) { @@ -1585,12 +1591,15 @@ VOID WINAPI DosInt21h(LPWORD Stack) /* Try to read a character (wait) */ Character = DosReadCharacter(DOS_INPUT_HANDLE); + // FIXME: Check whether Ctrl-C / Ctrl-Break is pressed, and call INT 23h if so. + /* Echo the character and append it to the buffer */ DosPrintCharacter(DOS_OUTPUT_HANDLE, Character); InputBuffer->Buffer[Count] = Character; + Count++; /* Carriage returns are also counted */ + if (Character == '\r') break; - Count++; } /* Update the length */ @@ -1623,13 +1632,9 @@ VOID WINAPI DosInt21h(LPWORD Stack) InputFunction == 0x07 || InputFunction == 0x08 || InputFunction == 0x0A) { + /* Call ourselves recursively */ setAH(InputFunction); - /* - * Instead of calling ourselves really recursively as in: - * DosInt21h(Stack); - * prefer resetting the CF flag to let the BOP repeat. - */ - setCF(1); + DosInt21h(Stack); } break; } @@ -1737,7 +1742,7 @@ VOID WINAPI DosInt21h(LPWORD Stack) /* Create New PSP */ case 0x26: { - DPRINT1("INT 21h, 26h - Create New PSP is UNIMPLEMENTED\n"); + DPRINT1("INT 21h, AH = 26h - Create New PSP is UNIMPLEMENTED\n"); break; } @@ -1993,15 +1998,16 @@ VOID WINAPI DosInt21h(LPWORD Stack) break; } - /* Create File */ + /* Create or Truncate File */ case 0x3C: { WORD FileHandle; WORD ErrorCode = DosCreateFile(&FileHandle, (LPCSTR)SEG_OFF_TO_PTR(getDS(), getDX()), + CREATE_ALWAYS, getCX()); - if (ErrorCode == 0) + if (ErrorCode == ERROR_SUCCESS) { Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; setAX(FileHandle); @@ -2023,7 +2029,7 @@ VOID WINAPI DosInt21h(LPWORD Stack) (LPCSTR)SEG_OFF_TO_PTR(getDS(), getDX()), getAL()); - if (ErrorCode == 0) + if (ErrorCode == ERROR_SUCCESS) { Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; setAX(FileHandle); @@ -2059,6 +2065,8 @@ VOID WINAPI DosInt21h(LPWORD Stack) WORD BytesRead = 0; WORD ErrorCode; + DPRINT("INT 21h, AH = 3Fh\n"); + DoEcho = TRUE; ErrorCode = DosReadFile(getBX(), SEG_OFF_TO_PTR(getDS(), getDX()), @@ -2468,6 +2476,30 @@ VOID WINAPI DosInt21h(LPWORD Stack) break; } + /* Rename File */ + case 0x56: + { + LPSTR ExistingFileName = (LPSTR)SEG_OFF_TO_PTR(getDS(), getDX()); + LPSTR NewFileName = (LPSTR)SEG_OFF_TO_PTR(getES(), getDI()); + + /* + * See Ralf Brown: http://www.ctyme.com/intr/rb-2990.htm + * for more information. + */ + + if (MoveFileA(ExistingFileName, NewFileName)) + { + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + } + else + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(GetLastError()); + } + + break; + } + /* Get/Set Memory Management Options */ case 0x58: { @@ -2524,6 +2556,79 @@ VOID WINAPI DosInt21h(LPWORD Stack) break; } + /* Create Temporary File */ + case 0x5A: + { + LPSTR PathName = (LPSTR)SEG_OFF_TO_PTR(getDS(), getDX()); + LPSTR FileName = PathName; // The buffer for the path and the full file name is the same. + UINT uRetVal; + WORD FileHandle; + WORD ErrorCode; + + /* + * See Ralf Brown: http://www.ctyme.com/intr/rb-3014.htm + * for more information. + */ + + // FIXME: Check for buffer validity? + // It should be a ASCIZ path ending with a '\' + 13 zero bytes + // to receive the generated filename. + + /* First create the temporary file */ + uRetVal = GetTempFileNameA(PathName, NULL, 0, FileName); + if (uRetVal == 0) + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(GetLastError()); + break; + } + + /* Now try to open it in read/write access */ + ErrorCode = DosOpenFile(&FileHandle, FileName, 2); + if (ErrorCode == ERROR_SUCCESS) + { + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + setAX(FileHandle); + } + else + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(ErrorCode); + } + + break; + } + + /* Create New File */ + case 0x5B: + { + WORD FileHandle; + WORD ErrorCode = DosCreateFile(&FileHandle, + (LPCSTR)SEG_OFF_TO_PTR(getDS(), getDX()), + CREATE_NEW, + getCX()); + + if (ErrorCode == ERROR_SUCCESS) + { + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + setAX(FileHandle); + } + else + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(ErrorCode); + } + + break; + } + + /* Canonicalize File Name or Path */ + case 0x60: + { + // TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + break; + } + /* Set Handle Count */ case 0x67: { @@ -2537,6 +2642,50 @@ VOID WINAPI DosInt21h(LPWORD Stack) break; } + /* Commit File */ + case 0x68: + case 0x6A: + { + /* + * Function 6Ah is identical to function 68h, + * and sets AH to 68h if success. + * See Ralf Brown: http://www.ctyme.com/intr/rb-3176.htm + * for more information. + */ + setAH(0x68); + + if (DosFlushFileBuffers(getBX())) + { + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + } + else + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(GetLastError()); + } + + break; + } + + /* Extended Open/Create */ + case 0x6C: + { + /* Check for AL == 00 */ + if (getAL() != 0x00) + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(ERROR_INVALID_FUNCTION); + break; + } + + // TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // FIXME: Extend and merge DosOpenFile and DosCreateFile into + // a single wrapper around CreateFileA, which acts as: + // http://www.ctyme.com/intr/rb-3179.htm + + break; + } + /* Unsupported */ default: { @@ -2562,6 +2711,8 @@ VOID WINAPI DosFastConOut(LPWORD Stack) { /* * This is the DOS 2+ Fast Console Output Interrupt. + * The default handler under DOS 2.x and 3.x simply calls INT 10h/AH=0Eh. + * * See Ralf Brown: http://www.ctyme.com/intr/rb-4124.htm * for more information. */ @@ -2570,7 +2721,12 @@ VOID WINAPI DosFastConOut(LPWORD Stack) USHORT AX = getAX(); USHORT BX = getBX(); - /* Set the parameters (AL = character, already set) */ + /* + * Set the parameters: + * AL contains the character to print (already set), + * BL contains the character attribute, + * BH contains the video page to use. + */ setBL(DOS_CHAR_ATTRIBUTE); setBH(Bda->VideoPage); diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h index ead1344d29b..e2f0cef368c 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h @@ -1,8 +1,8 @@ /* * COPYRIGHT: GPL - See COPYING in the top level directory * PROJECT: ReactOS Virtual DOS Machine - * FILE: dos.h - * PURPOSE: VDM DOS Kernel + * FILE: dos/dos32krnl/dos.h + * PURPOSE: DOS32 Kernel * PROGRAMMERS: Aleksandar Andrejevic */ @@ -191,8 +191,8 @@ BOOL IsConsoleHandle(HANDLE hHandle); WORD DosOpenHandle(HANDLE Handle); HANDLE DosGetRealHandle(WORD DosHandle); -WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, WORD Attributes); -WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessMode); +WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, WORD CreationFlags, WORD Attributes); +WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessShareModes); WORD DosReadFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesRead); WORD DosWriteFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesWritten); WORD DosSeekFile(WORD FileHandle, LONG Offset, BYTE Origin, LPDWORD NewOffset); diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dosfiles.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dosfiles.c index 51c57d3c2c0..e5560b2264d 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dosfiles.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dosfiles.c @@ -2,8 +2,9 @@ * COPYRIGHT: GPL - See COPYING in the top level directory * PROJECT: ReactOS Virtual DOS Machine * FILE: dos/dos32krnl/dosfiles.c - * PURPOSE: DOS Files + * PURPOSE: DOS32 Files Support * PROGRAMMERS: Aleksandar Andrejevic + * Hermes Belusca-Maito (hermes.belusca@sfr.fr) */ /* INCLUDES *******************************************************************/ @@ -22,13 +23,14 @@ /* PUBLIC FUNCTIONS ***********************************************************/ -WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, WORD Attributes) +WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, WORD CreationFlags, WORD Attributes) { HANDLE FileHandle; WORD DosHandle; - DPRINT("DosCreateFile: FilePath \"%s\", Attributes 0x%04X\n", + DPRINT("DosCreateFile: FilePath \"%s\", CreationFlags 0x%04X, Attributes 0x%04X\n", FilePath, + CreationFlags, Attributes); /* Create the file */ @@ -36,7 +38,7 @@ WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, WORD Attributes) GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, - CREATE_ALWAYS, + CreationFlags, Attributes, NULL); @@ -63,37 +65,40 @@ WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, WORD Attributes) return ERROR_SUCCESS; } -WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessMode) +WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessShareModes) { HANDLE FileHandle; - ACCESS_MASK Access = 0; + ACCESS_MASK AccessMode = 0; + DWORD ShareMode = 0; + BOOL InheritableFile = FALSE; + SECURITY_ATTRIBUTES SecurityAttributes; WORD DosHandle; - DPRINT("DosOpenFile: FilePath \"%s\", AccessMode 0x%04X\n", + DPRINT("DosOpenFile: FilePath \"%s\", AccessShareModes 0x%04X\n", FilePath, - AccessMode); + AccessShareModes); /* Parse the access mode */ - switch (AccessMode & 3) + switch (AccessShareModes & 0x03) { case 0: { /* Read-only */ - Access = GENERIC_READ; + AccessMode = GENERIC_READ; break; } case 1: { /* Write only */ - Access = GENERIC_WRITE; + AccessMode = GENERIC_WRITE; break; } case 2: { /* Read and write */ - Access = GENERIC_READ | GENERIC_WRITE; + AccessMode = GENERIC_READ | GENERIC_WRITE; break; } @@ -104,11 +109,64 @@ WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessMode) } } + /* Parse the share mode */ + switch ((AccessShareModes >> 4) & 0x07) + { + case 0: + { + /* Compatibility mode */ + ShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; + break; + } + + case 1: + { + /* No sharing "DenyAll" */ + ShareMode = 0; + break; + } + + case 2: + { + /* No write share "DenyWrite" */ + ShareMode = FILE_SHARE_READ; + break; + } + + case 3: + { + /* No read share "DenyRead" */ + ShareMode = FILE_SHARE_WRITE; + break; + } + + case 4: + { + /* Full share "DenyNone" */ + ShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; + break; + } + + default: + { + /* Invalid */ + return ERROR_INVALID_PARAMETER; + } + } + + /* Check for inheritance */ + InheritableFile = ((AccessShareModes & 0x80) == 0); + + /* Assign default security attributes to the file, and set the inheritance flag */ + SecurityAttributes.nLength = sizeof(SecurityAttributes); + SecurityAttributes.lpSecurityDescriptor = NULL; + SecurityAttributes.bInheritHandle = InheritableFile; + /* Open the file */ FileHandle = CreateFileA(FilePath, - Access, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, + AccessMode, + ShareMode, + &SecurityAttributes, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); @@ -142,7 +200,7 @@ WORD DosReadFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesRead) DWORD BytesRead32 = 0; HANDLE Handle = DosGetRealHandle(FileHandle); - DPRINT1("DosReadFile: FileHandle 0x%04X, Count 0x%04X\n", FileHandle, Count); + DPRINT("DosReadFile: FileHandle 0x%04X, Count 0x%04X\n", FileHandle, Count); /* Make sure the handle is valid */ if (Handle == INVALID_HANDLE_VALUE) return ERROR_INVALID_HANDLE; @@ -207,9 +265,7 @@ WORD DosWriteFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesWritte DWORD BytesWritten32 = 0; HANDLE Handle = DosGetRealHandle(FileHandle); - DPRINT1("DosWriteFile: FileHandle 0x%04X, Count 0x%04X\n", - FileHandle, - Count); + DPRINT("DosWriteFile: FileHandle 0x%04X, Count 0x%04X\n", FileHandle, Count); /* Make sure the handle is valid */ if (Handle == INVALID_HANDLE_VALUE) return ERROR_INVALID_HANDLE; @@ -313,7 +369,6 @@ WORD DosSeekFile(WORD FileHandle, LONG Offset, BYTE Origin, LPDWORD NewOffset) return ERROR_SUCCESS; } -// This function is almost exclusively used as a DosFlushInputBuffer BOOL DosFlushFileBuffers(WORD FileHandle) { HANDLE Handle = DosGetRealHandle(FileHandle); @@ -322,9 +377,11 @@ BOOL DosFlushFileBuffers(WORD FileHandle) if (Handle == INVALID_HANDLE_VALUE) return FALSE; /* - * No need to check whether the handle is a console handle since - * FlushFileBuffers() automatically does this check and calls - * FlushConsoleInputBuffer() for us. + * This function can either flush files back to disks, or flush + * console input buffers, in which case there is no need to check + * whether the handle is a console handle. FlushFileBuffers() + * automatically does this check and calls FlushConsoleInputBuffer() + * if needed. */ return FlushFileBuffers(Handle); } From a242a67b73ab17dbe28990c15f212d95c3e03570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 16 May 2014 00:34:54 +0000 Subject: [PATCH 22/81] [NTVDM] Partially implement INT 21h, AH=60h -- "Canonicalize File Name or Path". svn path=/trunk/; revision=63310 --- reactos/subsystems/ntvdm/dos/dos32krnl/dos.c | 31 +++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c index 4928ca443fe..f0f3b7ef215 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c @@ -2625,7 +2625,36 @@ VOID WINAPI DosInt21h(LPWORD Stack) /* Canonicalize File Name or Path */ case 0x60: { - // TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + /* + * See Ralf Brown: http://www.ctyme.com/intr/rb-3137.htm + * for more information. + */ + + /* + * We suppose that the DOS app gave to us a valid + * 128-byte long buffer for the canonicalized name. + */ + DWORD dwRetVal = GetFullPathNameA(SEG_OFF_TO_PTR(getDS(), getSI()), + 128, + SEG_OFF_TO_PTR(getES(), getDI()), + NULL); + if (dwRetVal == 0) + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(GetLastError()); + } + else + { + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + setAX(0x0000); + } + + // FIXME: Convert the full path name into short version. + // We cannot reliably use GetShortPathName, because it fails + // if the path name given doesn't exist. However this DOS + // function AH=60h should be able to work even for non-existing + // path and file names. + break; } From 2d601a6dfc6fec788d5bd2557419af8264c32471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 16 May 2014 00:56:46 +0000 Subject: [PATCH 23/81] [NTVDM] Implement INT 21h, AH=5Ch "Lock/Unlock Region of File". svn path=/trunk/; revision=63311 --- reactos/subsystems/ntvdm/dos/dos32krnl/dos.c | 53 ++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c index f0f3b7ef215..b0769cd7d79 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c @@ -2622,6 +2622,59 @@ VOID WINAPI DosInt21h(LPWORD Stack) break; } + /* Lock/Unlock Region of File */ + case 0x5C: + { + HANDLE Handle = DosGetRealHandle(getBX()); + + if (Handle == INVALID_HANDLE_VALUE) + { + /* The handle is invalid */ + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(ERROR_INVALID_HANDLE); + break; + } + + if (getAL() == 0x00) + { + /* Lock region of file */ + if (LockFile(Handle, + MAKELONG(getCX(), getDX()), 0, + MAKELONG(getSI(), getDI()), 0)) + { + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + } + else + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(GetLastError()); + } + } + else if (getAL() == 0x01) + { + /* Unlock region of file */ + if (UnlockFile(Handle, + MAKELONG(getCX(), getDX()), 0, + MAKELONG(getSI(), getDI()), 0)) + { + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + } + else + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(GetLastError()); + } + } + else + { + /* Invalid subfunction */ + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(ERROR_INVALID_FUNCTION); + } + + break; + } + /* Canonicalize File Name or Path */ case 0x60: { From 07c315c504da5aabdf4b32c331aae5b716a91135 Mon Sep 17 00:00:00 2001 From: Kamil Hornicek Date: Fri, 16 May 2014 15:52:15 +0000 Subject: [PATCH 24/81] [OPENGL32] - don't try to free an invalid address svn path=/trunk/; revision=63314 --- reactos/dll/opengl/opengl32/wgl_font.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/reactos/dll/opengl/opengl32/wgl_font.c b/reactos/dll/opengl/opengl32/wgl_font.c index 95d01cff8f4..9640d41f411 100644 --- a/reactos/dll/opengl/opengl32/wgl_font.c +++ b/reactos/dll/opengl/opengl32/wgl_font.c @@ -347,7 +347,7 @@ static BOOL wglUseFontOutlines_common(HDC hdc, BYTE *buf; TTPOLYGONHEADER *pph; TTPOLYCURVE *ppc; - GLdouble *vertices = NULL; + GLdouble *vertices = NULL, *vertices_temp = NULL; int vertex_total = -1; if(unicode) @@ -360,6 +360,9 @@ static BOOL wglUseFontOutlines_common(HDC hdc, buf = HeapAlloc(GetProcessHeap(), 0, needed); + if(!buf) + goto error; + if(unicode) GetGlyphOutlineW(hdc, glyph, GGO_NATIVE, &gm, needed, buf, &identity); else @@ -393,7 +396,7 @@ static BOOL wglUseFontOutlines_common(HDC hdc, while(!vertices) { if(vertex_total != -1) - vertices = HeapAlloc(GetProcessHeap(), 0, vertex_total * 3 * sizeof(GLdouble)); + vertices_temp = vertices = HeapAlloc(GetProcessHeap(), 0, vertex_total * 3 * sizeof(GLdouble)); vertex_total = 0; pph = (TTPOLYGONHEADER*)buf; @@ -521,8 +524,11 @@ error_in_list: pgluTessEndPolygon(tess); funcs->Translated((GLdouble)gm.gmCellIncX / em_size, (GLdouble)gm.gmCellIncY / em_size, 0.0); funcs->EndList(); + HeapFree(GetProcessHeap(), 0, buf); - HeapFree(GetProcessHeap(), 0, vertices); + + if(vertices_temp) + HeapFree(GetProcessHeap(), 0, vertices_temp); } error: From a61decb1c0f7e2ed2751e234624b48fec046ad1e Mon Sep 17 00:00:00 2001 From: James Tabor Date: Fri, 16 May 2014 18:26:00 +0000 Subject: [PATCH 25/81] [ConSrv] - Strip the Atl-F4 from the Pop Up System Menu since we do not support it. svn path=/trunk/; revision=63315 --- reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c b/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c index c9243298ad2..526d1764ff7 100644 --- a/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c +++ b/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c @@ -253,9 +253,15 @@ AppendMenuItems(HMENU hMenu, static VOID CreateSysMenu(HWND hWnd) { + MENUITEMINFOW mii; HMENU hMenu = GetSystemMenu(hWnd, FALSE); if (hMenu != NULL) { + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_STRING; + mii.dwTypeData = L"&Close"; + SetMenuItemInfoW(hMenu, SC_CLOSE, FALSE, &mii); + AppendMenuItems(hMenu, GuiConsoleMainMenuItems); DrawMenuBar(hWnd); } From d5880674f29b9978bb8d2feecab22f830e6fcc74 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Fri, 16 May 2014 20:43:23 +0000 Subject: [PATCH 26/81] [NtUser|User32] - Fully strip the Atl-F4 from the Pop Up System Menu. - Fix menu.c:1418: Test failed: InsertMenuItem should have failed. Both A/W... - Fix menu key by Item when cloning menus. svn path=/trunk/; revision=63317 --- reactos/win32ss/user/ntuser/menu.c | 85 +++++++++++++------ reactos/win32ss/user/ntuser/menu.h | 1 + .../user/winsrv/consrv/frontends/gui/conwnd.c | 18 +++- 3 files changed, 76 insertions(+), 28 deletions(-) diff --git a/reactos/win32ss/user/ntuser/menu.c b/reactos/win32ss/user/ntuser/menu.c index f46ea919348..a155c9ff1e5 100644 --- a/reactos/win32ss/user/ntuser/menu.c +++ b/reactos/win32ss/user/ntuser/menu.c @@ -150,7 +150,6 @@ PMENU FASTCALL VerifyMenu(PMENU pMenu) UINT i; if (!pMenu) return NULL; - ERR("VerifyMenu 1!\n"); _SEH2_TRY { hMenu = UserHMGetHandle(pMenu); @@ -167,10 +166,13 @@ PMENU FASTCALL VerifyMenu(PMENU pMenu) _SEH2_YIELD(return NULL); } _SEH2_END - ERR("VerifyMenu 2!\n"); + if ( UserObjectInDestroy(hMenu)) + { + ERR("Menu is marked for destruction!\n"); return NULL; - ERR("VerifyMenu 3!\n"); + } + return pMenu; } @@ -533,28 +535,24 @@ IntCloneMenuItems(PMENU Destination, PMENU Source) NewMenuItem->hbmpChecked = MenuItem->hbmpChecked; NewMenuItem->hbmpUnchecked = MenuItem->hbmpUnchecked; NewMenuItem->dwItemData = MenuItem->dwItemData; - if((MENU_ITEM_TYPE(NewMenuItem->fType) == MF_STRING)) + if (MenuItem->lpstr.Length) { - if(MenuItem->lpstr.Length) + NewMenuItem->lpstr.Length = 0; + NewMenuItem->lpstr.MaximumLength = MenuItem->lpstr.MaximumLength; + NewMenuItem->lpstr.Buffer = DesktopHeapAlloc(Destination->head.rpdesk, MenuItem->lpstr.MaximumLength); + if (!NewMenuItem->lpstr.Buffer) { - NewMenuItem->lpstr.Length = 0; - NewMenuItem->lpstr.MaximumLength = MenuItem->lpstr.MaximumLength; - NewMenuItem->lpstr.Buffer = DesktopHeapAlloc(Destination->head.rpdesk, MenuItem->lpstr.MaximumLength); - if(!NewMenuItem->lpstr.Buffer) - { - DesktopHeapFree(Destination->head.rpdesk, NewMenuItem); - break; - } - RtlCopyUnicodeString(&NewMenuItem->lpstr, &MenuItem->lpstr); - } - else - { - NewMenuItem->lpstr.Buffer = MenuItem->lpstr.Buffer; + DesktopHeapFree(Destination->head.rpdesk, NewMenuItem); + break; } + RtlCopyUnicodeString(&NewMenuItem->lpstr, &MenuItem->lpstr); + NewMenuItem->lpstr.Buffer[MenuItem->lpstr.Length / sizeof(WCHAR)] = 0; + NewMenuItem->Xlpstr = NewMenuItem->lpstr.Buffer; } else { NewMenuItem->lpstr.Buffer = MenuItem->lpstr.Buffer; + NewMenuItem->Xlpstr = NewMenuItem->lpstr.Buffer; } NewMenuItem->hbmp = MenuItem->hbmp; } @@ -773,6 +771,7 @@ BOOL FASTCALL IntSetMenuItemInfo(PMENU MenuObject, PITEM MenuItem, PROSMENUITEMINFO lpmii, PUNICODE_STRING lpstr) { PMENU SubMenuObject; + BOOL circref = FALSE; if(!MenuItem || !MenuObject || !lpmii) { @@ -846,17 +845,28 @@ IntSetMenuItemInfo(PMENU MenuObject, PITEM MenuItem, PROSMENUITEMINFO lpmii, PUN if(lpmii->fMask & MIIM_SUBMENU) { - /* Make sure the submenu is marked as a popup menu */ if (lpmii->hSubMenu) { SubMenuObject = UserGetMenuObject(lpmii->hSubMenu); - if (SubMenuObject != NULL) + if ( SubMenuObject && !(UserObjectInDestroy(lpmii->hSubMenu)) ) { - if ( MENU_depth( SubMenuObject, 0) > MAXMENUDEPTH) + //// wine Bug 12171 : Adding Popup Menu to itself! Could create endless loops. + //// CORE-7967. + if (MenuObject == SubMenuObject) + { + HANDLE hMenu; + ERR("Pop Up Menu Double Trouble!\n"); + SubMenuObject = IntCreateMenu(&hMenu, FALSE); // It will be marked. + if (!SubMenuObject) return FALSE; + circref = TRUE; + } + if ( MENU_depth( SubMenuObject, 0) > MAXMENUDEPTH ) { ERR( "Loop detected in menu hierarchy or maximum menu depth exceeded!\n"); + if (circref) IntDestroyMenuObject(SubMenuObject, FALSE, TRUE); return FALSE; } + /* Make sure the submenu is marked as a popup menu */ SubMenuObject->fFlags |= MNF_POPUP; // Now fix the test_subpopup_locked_by_menu tests.... if (MenuItem->spSubMenu) IntReleaseMenuObject(MenuItem->spSubMenu); @@ -1435,6 +1445,34 @@ HMENU FASTCALL UserCreateMenu(BOOL PopupMenu) return (HMENU)Handle; } +BOOL FASTCALL +IntMenuItemInfo( + PMENU Menu, + UINT Item, + BOOL ByPosition, + PROSMENUITEMINFO ItemInfo, + BOOL SetOrGet, + PUNICODE_STRING lpstr) +{ + PITEM MenuItem; + BOOL Ret; + + if (!(MenuItem = MENU_FindItem( &Menu, &Item, (ByPosition ? MF_BYPOSITION : MF_BYCOMMAND) ))) + { + EngSetLastError(ERROR_MENU_ITEM_NOT_FOUND); + return( FALSE); + } + if (SetOrGet) + { + Ret = IntSetMenuItemInfo(Menu, MenuItem, ItemInfo, lpstr); + } + else + { + Ret = IntGetMenuItemInfo(Menu, MenuItem, ItemInfo); + } + return( Ret); +} + BOOL FASTCALL UserMenuItemInfo( PMENU Menu, @@ -1925,15 +1963,10 @@ NtUserGetMenuBarInfo( //kmbi.fBarFocused = top_popup_hmenu == hMenu; if (idItem) { - //PITEM MenuItem; - //UINT nPos = idItem-1; kmbi.fFocused = Menu->iItem == idItem-1; if (kmbi.fFocused && (Menu->rgItems[idItem - 1].spSubMenu)) - //MenuItem = MENU_FindItem (&Menu, &nPos, MF_BYPOSITION); - //if ( MenuItem && kmbi.fFocused && MenuItem->spSubMenu ) { kmbi.hwndMenu = Menu->rgItems[idItem - 1].spSubMenu->hWnd; - //kmbi.hwndMenu = MenuItem->spSubMenu->hWnd; } } /* else diff --git a/reactos/win32ss/user/ntuser/menu.h b/reactos/win32ss/user/ntuser/menu.h index e5830546cb5..0a63e49f562 100644 --- a/reactos/win32ss/user/ntuser/menu.h +++ b/reactos/win32ss/user/ntuser/menu.h @@ -47,3 +47,4 @@ UINT FASTCALL IntFindSubMenu(HMENU *hMenu, HMENU hSubTarget ); UINT FASTCALL IntGetMenuState( HMENU hMenu, UINT uId, UINT uFlags); BOOL FASTCALL IntRemoveMenuItem(PMENU Menu, UINT uPosition, UINT uFlags, BOOL bRecurse); PITEM FASTCALL MENU_FindItem( PMENU *pmenu, UINT *nPos, UINT wFlags ); +BOOL FASTCALL IntMenuItemInfo(PMENU Menu, UINT Item, BOOL ByPosition, PROSMENUITEMINFO UnsafeItemInfo, BOOL SetOrGet, PUNICODE_STRING lpstr); diff --git a/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c b/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c index 526d1764ff7..c61216c157c 100644 --- a/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c +++ b/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c @@ -254,13 +254,27 @@ static VOID CreateSysMenu(HWND hWnd) { MENUITEMINFOW mii; + WCHAR szMenuStringBack[255]; + const WCHAR *ptrTab; HMENU hMenu = GetSystemMenu(hWnd, FALSE); if (hMenu != NULL) { mii.cbSize = sizeof(mii); mii.fMask = MIIM_STRING; - mii.dwTypeData = L"&Close"; - SetMenuItemInfoW(hMenu, SC_CLOSE, FALSE, &mii); + mii.dwTypeData = szMenuStringBack; + mii.cch = sizeof(szMenuStringBack); + + GetMenuItemInfoW(hMenu, SC_CLOSE, FALSE, &mii); + + ptrTab = wcschr(szMenuStringBack, '\t'); + if (ptrTab) + { + mii.cch = (int)( ptrTab - szMenuStringBack); + RtlZeroMemory((PVOID)ptrTab, mii.cch); + mii.cch = wcslen(szMenuStringBack); + + SetMenuItemInfoW(hMenu, SC_CLOSE, FALSE, &mii); + } AppendMenuItems(hMenu, GuiConsoleMainMenuItems); DrawMenuBar(hWnd); From fdc93df98faa275f9a176d7b18ab186d33780da4 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Fri, 16 May 2014 21:05:37 +0000 Subject: [PATCH 27/81] [ConSrv] - Readjust the bytes to wide character size. svn path=/trunk/; revision=63318 --- reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c b/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c index c61216c157c..a8c744a0a56 100644 --- a/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c +++ b/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c @@ -262,7 +262,7 @@ CreateSysMenu(HWND hWnd) mii.cbSize = sizeof(mii); mii.fMask = MIIM_STRING; mii.dwTypeData = szMenuStringBack; - mii.cch = sizeof(szMenuStringBack); + mii.cch = sizeof(szMenuStringBack)/sizeof(WCHAR); GetMenuItemInfoW(hMenu, SC_CLOSE, FALSE, &mii); @@ -271,6 +271,7 @@ CreateSysMenu(HWND hWnd) { mii.cch = (int)( ptrTab - szMenuStringBack); RtlZeroMemory((PVOID)ptrTab, mii.cch); + mii.cch = wcslen(szMenuStringBack); SetMenuItemInfoW(hMenu, SC_CLOSE, FALSE, &mii); From ef2221fd12b1b4d957dda2f7c4389f4ab97a494b Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sat, 17 May 2014 02:15:50 +0000 Subject: [PATCH 28/81] [ConSrv] - Move Alt-Escape, Space and Tab to ConWndProc, disable GuiProcessKeyCallback. - Alt-Space was not getting launched out of GuiProcessKeyCallback. The key needed translated. - Reduce code for system menus. svn path=/trunk/; revision=63319 --- .../win32ss/user/winsrv/consrv/frontends/gui/conwnd.c | 11 +++++++---- .../user/winsrv/consrv/frontends/gui/guiterm.c | 5 +++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c b/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c index a8c744a0a56..f660e3414fe 100644 --- a/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c +++ b/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c @@ -255,7 +255,7 @@ CreateSysMenu(HWND hWnd) { MENUITEMINFOW mii; WCHAR szMenuStringBack[255]; - const WCHAR *ptrTab; + WCHAR *ptrTab; HMENU hMenu = GetSystemMenu(hWnd, FALSE); if (hMenu != NULL) { @@ -269,9 +269,7 @@ CreateSysMenu(HWND hWnd) ptrTab = wcschr(szMenuStringBack, '\t'); if (ptrTab) { - mii.cch = (int)( ptrTab - szMenuStringBack); - RtlZeroMemory((PVOID)ptrTab, mii.cch); - + *ptrTab = '\0'; mii.cch = wcslen(szMenuStringBack); SetMenuItemInfoW(hMenu, SC_CLOSE, FALSE, &mii); @@ -1927,6 +1925,11 @@ ConWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) break; } + /* Detect Alt-Esc/Space/Tab presses defer to DefWindowProc */ + if ( (HIWORD(lParam) & KF_ALTDOWN) && (wParam == VK_ESCAPE || wParam == VK_SPACE || wParam == VK_TAB)) + { + return DefWindowProcW(hWnd, msg, wParam, lParam); + } OnKey(GuiData, msg, wParam, lParam); break; diff --git a/reactos/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c b/reactos/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c index a38875d2618..e56e4c5e25a 100644 --- a/reactos/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c +++ b/reactos/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c @@ -806,8 +806,9 @@ GuiProcessKeyCallback(IN OUT PFRONTEND This, if ((ShiftState & (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED) || KeyStateMenu & 0x80) && (VirtualKeyCode == VK_ESCAPE || VirtualKeyCode == VK_TAB || VirtualKeyCode == VK_SPACE)) { - DefWindowProcW(msg->hwnd, msg->message, msg->wParam, msg->lParam); - return TRUE; + DPRINT1("GuiProcessKeyCallback\n"); + //DefWindowProcW(msg->hwnd, msg->message, msg->wParam, msg->lParam); + //return TRUE; } return FALSE; From 9273fa01fa21ea86155a08b938c286fc89b9da13 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 10:28:57 +0000 Subject: [PATCH 29/81] [CRT] * Update _fseeki64(). * Fixes some msvcrt tests. CORE-8080 svn path=/trunk/; revision=63320 --- reactos/lib/sdk/crt/stdio/file.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index b4ccb1d7388..64138a5ca17 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -1170,19 +1170,10 @@ int CDECL _fseeki64(FILE* file, __int64 offset, int whence) flush_buffer(file); if(whence == SEEK_CUR && file->_flag & _IOREAD ) { - offset -= file->_cnt; - if (get_ioinfo(file->_file)->wxflag & WX_TEXT) { - /* Black magic correction for CR removal */ - int i; - for (i=0; i_cnt; i++) { - if (file->_ptr[i] == '\n') - offset--; - } - /* Black magic when reading CR at buffer boundary*/ - if(get_ioinfo(file->_file)->wxflag & WX_READCR) - offset--; - } + whence = SEEK_SET; + offset += _ftelli64(file); } + /* Discard buffered input */ file->_cnt = 0; file->_ptr = file->_base; From fa9bf9ef6e10f742ff92ccbb5b0c7398a349d32e Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 10:35:35 +0000 Subject: [PATCH 30/81] [CRT] * Import _chsize_s(). * Update _chsize(). CORE-8080 svn path=/trunk/; revision=63321 --- reactos/lib/sdk/crt/stdio/file.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index 64138a5ca17..3146f2b2b41 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -1198,15 +1198,17 @@ int CDECL fseek(FILE* file, long offset, int whence) } /********************************************************************* - * _chsize (MSVCRT.@) + * _chsize_s (MSVCRT.@) */ -int CDECL _chsize(int fd, long size) +int CDECL _chsize_s(int fd, __int64 size) { - LONG cur, pos; + __int64 cur, pos; HANDLE handle; BOOL ret = FALSE; - TRACE("(fd=%d, size=%d)\n", fd, size); + TRACE("(fd=%d, size=%s)\n", fd, wine_dbgstr_longlong(size)); + + if (!MSVCRT_CHECK_PMT(size >= 0)) return EINVAL; LOCK_FILES(); @@ -1214,10 +1216,10 @@ int CDECL _chsize(int fd, long size) if (handle != INVALID_HANDLE_VALUE) { /* save the current file pointer */ - cur = _lseek(fd, 0, SEEK_CUR); + cur = _lseeki64(fd, 0, SEEK_CUR); if (cur >= 0) { - pos = _lseek(fd, size, SEEK_SET); + pos = _lseeki64(fd, size, SEEK_SET); if (pos >= 0) { ret = SetEndOfFile(handle); @@ -1225,12 +1227,21 @@ int CDECL _chsize(int fd, long size) } /* restore the file pointer */ - _lseek(fd, cur, SEEK_SET); + _lseeki64(fd, cur, SEEK_SET); } } UNLOCK_FILES(); - return ret ? 0 : -1; + return ret ? 0 : *_errno(); +} + +/********************************************************************* + * _chsize (MSVCRT.@) + */ +int CDECL _chsize(int fd, long size) +{ + /* _chsize_s returns errno on failure but _chsize should return -1 */ + return _chsize_s( fd, size ) == 0 ? 0 : -1; } /********************************************************************* From 778c8e998c79f466e6215bb89b5d4f0c177c9e46 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 10:41:36 +0000 Subject: [PATCH 31/81] [CRT] * Update _sopen_s(). * Fixes some msvcrt tests. CORE-8080 svn path=/trunk/; revision=63322 --- reactos/lib/sdk/crt/stdio/file.c | 93 +++----------------------------- 1 file changed, 7 insertions(+), 86 deletions(-) diff --git a/reactos/lib/sdk/crt/stdio/file.c b/reactos/lib/sdk/crt/stdio/file.c index 3146f2b2b41..299e2ddf7ab 100644 --- a/reactos/lib/sdk/crt/stdio/file.c +++ b/reactos/lib/sdk/crt/stdio/file.c @@ -1842,94 +1842,15 @@ int CDECL _wsopen( const wchar_t *path, int oflags, int shflags, ... ) */ int CDECL _sopen_s( int *fd, const char *path, int oflags, int shflags, int pmode ) { - DWORD access = 0, creation = 0, attrib; - DWORD sharing; - int wxflag; - HANDLE hand; - SECURITY_ATTRIBUTES sa; + wchar_t *pathW; + int ret; - TRACE("fd*: %p file: (%s) oflags: 0x%04x shflags: 0x%04x pmode: 0x%04x\n", - fd, path, oflags, shflags, pmode); + if(!MSVCRT_CHECK_PMT(path && (pathW = msvcrt_wstrdupa(path)))) + return EINVAL; - if (!fd) - { - MSVCRT_INVALID_PMT("null out fd pointer", EINVAL); - return EINVAL; - } - - *fd = -1; - wxflag = split_oflags(oflags); - switch (oflags & (_O_RDONLY | _O_WRONLY | _O_RDWR)) - { - case _O_RDONLY: access |= GENERIC_READ; break; - case _O_WRONLY: access |= GENERIC_WRITE; break; - case _O_RDWR: access |= GENERIC_WRITE | GENERIC_READ; break; - } - - if (oflags & _O_CREAT) - { - if(pmode & ~(_S_IREAD | _S_IWRITE)) - FIXME(": pmode 0x%04x ignored\n", pmode); - else - WARN(": pmode 0x%04x ignored\n", pmode); - - if (oflags & _O_EXCL) - creation = CREATE_NEW; - else if (oflags & _O_TRUNC) - creation = CREATE_ALWAYS; - else - creation = OPEN_ALWAYS; - } - else /* no _O_CREAT */ - { - if (oflags & _O_TRUNC) - creation = TRUNCATE_EXISTING; - else - creation = OPEN_EXISTING; - } - - switch( shflags ) - { - case _SH_DENYRW: - sharing = 0L; - break; - case _SH_DENYWR: - sharing = FILE_SHARE_READ; - break; - case _SH_DENYRD: - sharing = FILE_SHARE_WRITE; - break; - case _SH_DENYNO: - sharing = FILE_SHARE_READ | FILE_SHARE_WRITE; - break; - default: - ERR( "Unhandled shflags 0x%x\n", shflags ); - return EINVAL; - } - attrib = FILE_ATTRIBUTE_NORMAL; - - if (oflags & _O_TEMPORARY) - { - attrib |= FILE_FLAG_DELETE_ON_CLOSE; - access |= DELETE; - sharing |= FILE_SHARE_DELETE; - } - - sa.nLength = sizeof( SECURITY_ATTRIBUTES ); - sa.lpSecurityDescriptor = NULL; - sa.bInheritHandle = (oflags & _O_NOINHERIT) ? FALSE : TRUE; - - hand = CreateFileA(path, access, sharing, &sa, creation, attrib, 0); - if (hand == INVALID_HANDLE_VALUE) { - WARN(":failed-last error (%d)\n", GetLastError()); - _dosmaperr(GetLastError()); - return *_errno(); - } - - *fd = alloc_fd(hand, wxflag); - - TRACE(":fd (%d) handle (%p)\n", *fd, hand); - return 0; + ret = _wsopen_s(fd, pathW, oflags, shflags, pmode); + free(pathW); + return ret; } /********************************************************************* From c64645fd6665411c1281dbd7359628fcaf59a9d1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 17 May 2014 10:58:10 +0000 Subject: [PATCH 32/81] [SPEC2DEF] Fix def file generation on non-86 svn path=/trunk/; revision=63323 --- reactos/tools/spec2def/spec2def.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/tools/spec2def/spec2def.c b/reactos/tools/spec2def/spec2def.c index c197cf5ef43..c7e907ccc57 100644 --- a/reactos/tools/spec2def/spec2def.c +++ b/reactos/tools/spec2def/spec2def.c @@ -329,7 +329,7 @@ PrintName(FILE *fileDest, EXPORT *pexp, PSTRING pstr, int fDeco) { /* Does the string already have stdcall decoration? */ pcAt = ScanToken(pcName, '@'); - if ((pcAt < (pcName + nNameLength)) && (pcName[0] == '_')) + if (pcAt && (pcAt < (pcName + nNameLength)) && (pcName[0] == '_')) { /* Skip leading underscore and remove trailing decoration */ pcName++; @@ -485,6 +485,7 @@ OutputLine_def_GCC(FILE *fileDest, EXPORT *pexp) int OutputLine_def(FILE *fileDest, EXPORT *pexp) { + DbgPrint("OutputLine_def: '%.*s'...\n", pexp->strName.len, pexp->strName.buf); fprintf(fileDest, " "); if (gbMSComp) @@ -684,6 +685,7 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine) /* Get name */ exp.strName.buf = pc; exp.strName.len = TokenLength(pc); + DbgPrint("Got name: '%.*s'\n", exp.strName.len, exp.strName.buf); /* Check for autoname */ if ((exp.strName.len == 1) && (exp.strName.buf[0] == '@')) @@ -699,7 +701,6 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine) if (exp.nCallingConvention != CC_EXTERN && exp.nCallingConvention != CC_STUB) { - //fprintf(stderr, "info: options:'%.10s'\n", pc); /* Go to next token */ if (!(pc = NextToken(pc))) { From dd17546bfe1f75c65efd7be55beaee3bc2919bec Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 11:25:50 +0000 Subject: [PATCH 33/81] [RAPPS] * Some list entries fixes. * Mention that Turkish translations were done by Erdem Ersoy. CORE-7710 #resolve #comment Committed in r63324. svn path=/trunk/; revision=63324 --- .../base/applications/rapps/rapps/7zip.txt | 3 +- .../base/applications/rapps/rapps/abiword.txt | 3 +- .../applications/rapps/rapps/abiword26.txt | 3 +- .../base/applications/rapps/rapps/abyss.txt | 3 +- .../rapps/rapps/ac97forvirtualbox.txt | 27 +++++++-------- .../applications/rapps/rapps/alreader.txt | 13 ++++---- .../base/applications/rapps/rapps/ants.txt | 16 +++++---- .../applications/rapps/rapps/audiograbber.txt | 3 +- .../applications/rapps/rapps/bittorrent.txt | 3 +- .../base/applications/rapps/rapps/bochs.txt | 6 ++-- .../base/applications/rapps/rapps/boswars.txt | 6 ++-- .../applications/rapps/rapps/boundaround.txt | 5 +-- .../rapps/rapps/christmasbound.txt | 3 +- .../applications/rapps/rapps/chromium.txt | 6 ++-- reactos/base/applications/rapps/rapps/cnt.txt | 5 +-- .../applications/rapps/rapps/codeblocks.txt | 4 ++- .../rapps/rapps/codeblocks_gcc.txt | 2 ++ .../rapps/rapps/codeblocks_gcc_2.txt | 2 ++ .../applications/rapps/rapps/comctl32ocx.txt | 18 ++++++++-- .../rapps/rapps/devcpp_mingw32.txt | 4 ++- .../rapps/rapps/devcpp_tdm_gcc_x64.txt | 4 ++- .../base/applications/rapps/rapps/diablo2.txt | 5 +-- .../applications/rapps/rapps/dosblaster.txt | 5 +-- .../base/applications/rapps/rapps/dosbox.txt | 3 +- .../rapps/rapps/doublecommander.txt | 3 +- .../base/applications/rapps/rapps/dplus.txt | 1 + .../applications/rapps/rapps/dvdwritenow.txt | 9 ++--- .../applications/rapps/rapps/excelview.txt | 3 +- reactos/base/applications/rapps/rapps/fap.txt | 3 +- .../base/applications/rapps/rapps/fira.txt | 15 +++++---- .../base/applications/rapps/rapps/firefox.txt | 3 +- .../applications/rapps/rapps/firefox2.txt | 3 +- .../applications/rapps/rapps/firefox3.txt | 3 +- .../applications/rapps/rapps/firefox36.txt | 3 +- .../applications/rapps/rapps/freebasic.txt | 3 +- .../rapps/rapps/glidewrapzbag.txt | 1 + .../applications/rapps/rapps/globulation2.txt | 6 ++-- .../base/applications/rapps/rapps/hover.txt | 5 +-- reactos/base/applications/rapps/rapps/hxd.txt | 5 +-- .../applications/rapps/rapps/indiftpd.txt | 5 +-- .../applications/rapps/rapps/irfanview.txt | 5 +-- .../rapps/rapps/irfanviewplugins.txt | 5 +-- .../base/applications/rapps/rapps/kdewin.txt | 1 + .../base/applications/rapps/rapps/kyodai.txt | 10 +++--- .../applications/rapps/rapps/lazaruside.txt | 5 +-- .../applications/rapps/rapps/lbreakout2.txt | 3 +- .../applications/rapps/rapps/lgeneral.txt | 3 +- .../applications/rapps/rapps/libreoffice.txt | 23 ++++++------- .../applications/rapps/rapps/lmarbles.txt | 3 +- .../base/applications/rapps/rapps/mcwin32.txt | 13 ++++---- .../base/applications/rapps/rapps/mfc40.txt | 3 +- .../applications/rapps/rapps/mirandaim.txt | 3 +- .../base/applications/rapps/rapps/mirc.txt | 5 +-- .../base/applications/rapps/rapps/mirc6.txt | 5 +-- .../base/applications/rapps/rapps/mono2.txt | 19 ++++++----- reactos/base/applications/rapps/rapps/mpc.txt | 1 + .../base/applications/rapps/rapps/mpxplay.txt | 6 ++-- .../base/applications/rapps/rapps/msxml3.txt | 3 +- .../base/applications/rapps/rapps/net11.txt | 21 ++++++++++-- .../base/applications/rapps/rapps/net20.txt | 1 + .../applications/rapps/rapps/net20sp2.txt | 11 +++++++ reactos/base/applications/rapps/rapps/npp.txt | 2 ++ .../applications/rapps/rapps/offbyone.txt | 5 +-- .../applications/rapps/rapps/opencodecs.txt | 5 +-- .../applications/rapps/rapps/openoffice.txt | 25 +++++++------- .../rapps/rapps/openoffice2.4.txt | 13 ++++---- .../base/applications/rapps/rapps/openttd.txt | 4 ++- .../base/applications/rapps/rapps/opera.txt | 3 +- .../base/applications/rapps/rapps/opera9.txt | 3 +- .../base/applications/rapps/rapps/peazip.txt | 4 ++- .../applications/rapps/rapps/pengupop.txt | 6 ++-- .../applications/rapps/rapps/photofiltre.txt | 5 +-- .../base/applications/rapps/rapps/pingus.txt | 5 +-- .../base/applications/rapps/rapps/pptview.txt | 3 +- .../base/applications/rapps/rapps/pspad.txt | 12 ++++--- .../base/applications/rapps/rapps/ptanks.txt | 8 ++--- .../base/applications/rapps/rapps/putty.txt | 3 +- .../base/applications/rapps/rapps/python.txt | 3 +- .../base/applications/rapps/rapps/python2.txt | 3 +- .../base/applications/rapps/rapps/qb64sdl.txt | 8 +++-- .../base/applications/rapps/rapps/qmmp.txt | 7 ++-- .../base/applications/rapps/rapps/remood.txt | 5 +-- .../base/applications/rapps/rapps/reshack.txt | 8 ++--- .../base/applications/rapps/rapps/rocks.txt | 6 ++-- .../base/applications/rapps/rapps/rosbe.txt | 3 +- .../applications/rapps/rapps/rosbeamd64.txt | 3 +- .../applications/rapps/rapps/rosbearm.txt | 3 +- .../applications/rapps/rapps/sambatng.txt | 3 +- .../applications/rapps/rapps/sbforvmware.txt | 27 +++++++-------- .../base/applications/rapps/rapps/scite.txt | 5 +-- .../base/applications/rapps/rapps/scummvm.txt | 21 ++++++------ .../applications/rapps/rapps/sdl_mixer.txt | 5 +-- .../applications/rapps/rapps/sdl_runtime.txt | 5 +-- .../applications/rapps/rapps/seamonkey.txt | 3 +- .../applications/rapps/rapps/smplayer.txt | 3 +- .../base/applications/rapps/rapps/snoopy.txt | 4 ++- .../base/applications/rapps/rapps/stamina.txt | 5 +-- .../base/applications/rapps/rapps/steam.txt | 33 ++++++++++++------- .../applications/rapps/rapps/sumatrapdf.txt | 23 ++++++++----- .../applications/rapps/rapps/summerbound.txt | 2 ++ .../applications/rapps/rapps/superdxb.txt | 9 ++--- .../applications/rapps/rapps/superfinder.txt | 3 +- .../applications/rapps/rapps/supertux.txt | 6 ++-- .../base/applications/rapps/rapps/tahoma.txt | 3 +- .../applications/rapps/rapps/thunderbird.txt | 9 ++++- .../applications/rapps/rapps/thunderbird3.txt | 3 +- .../applications/rapps/rapps/tileworld.txt | 5 +-- .../rapps/rapps/totalcommander.txt | 6 ++-- .../applications/rapps/rapps/tuxpaint.txt | 5 +-- .../applications/rapps/rapps/ultravnc.txt | 5 +-- .../applications/rapps/rapps/utorrent.txt | 5 +-- .../base/applications/rapps/rapps/vb5run.txt | 1 + .../base/applications/rapps/rapps/vb6run.txt | 1 + .../applications/rapps/rapps/vc2005sp1run.txt | 3 +- .../applications/rapps/rapps/vc2008sp1run.txt | 1 + .../applications/rapps/rapps/vc2010run.txt | 1 + .../base/applications/rapps/rapps/vc6run.txt | 1 + reactos/base/applications/rapps/rapps/vlc.txt | 1 + .../applications/rapps/rapps/winboard.txt | 3 +- .../base/applications/rapps/rapps/wme9.txt | 1 + .../applications/rapps/rapps/wordview.txt | 3 +- reactos/base/applications/rapps/rapps/zaz.txt | 3 +- 122 files changed, 470 insertions(+), 274 deletions(-) diff --git a/reactos/base/applications/rapps/rapps/7zip.txt b/reactos/base/applications/rapps/rapps/7zip.txt index 2fc922e8590..9938f9cf308 100644 --- a/reactos/base/applications/rapps/rapps/7zip.txt +++ b/reactos/base/applications/rapps/rapps/7zip.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = 7-Zip @@ -35,7 +36,7 @@ Description = Un utilitar de arhivare a fișierelor, compatibil cu 7zip, zip, ta Size = 1,1 Mo [Section.041f] -Description = 7zip, zip, tar, rar ve diğer birçok belgelik biçimini destekleyen bir belgelikleme aracıdır. +Description = 7zip, zip, tar, rar ve başka birçok belgelik biçimi destekli bir kütük belgelikleme aracı. Size = 1,1 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/abiword.txt b/reactos/base/applications/rapps/rapps/abiword.txt index 9d6ac792613..c15f48bb4f1 100644 --- a/reactos/base/applications/rapps/rapps/abiword.txt +++ b/reactos/base/applications/rapps/rapps/abiword.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = AbiWord @@ -35,7 +36,7 @@ Description = Procesor de text. Size = 9,4 Mo [Section.041f] -Description = Bir zengin metin düzenleyicisi. +Description = Sözcük işlemcisi. Size = 9,4 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/abiword26.txt b/reactos/base/applications/rapps/rapps/abiword26.txt index 0a6ed2a6613..a2d9635fb2a 100644 --- a/reactos/base/applications/rapps/rapps/abiword26.txt +++ b/reactos/base/applications/rapps/rapps/abiword26.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = AbiWord @@ -35,7 +36,7 @@ Description = Procesor de text. Size = 5,64 Mo [Section.041f] -Description = Bir zengin metin düzenleyicisi. +Description = Sözcük işlemcisi. Size = 5,64 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/abyss.txt b/reactos/base/applications/rapps/rapps/abyss.txt index 7dfbe6ac50f..5ad87798927 100644 --- a/reactos/base/applications/rapps/rapps/abyss.txt +++ b/reactos/base/applications/rapps/rapps/abyss.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Abyss Web server X1 @@ -40,7 +41,7 @@ Size = 2,1 Mo [Section.041f] Name = Abyss Umûmî Ağ Sunucusu X1 Licence = Ücretsiz -Description = Abyss Umûmî Ağ Sunucusu, bilgisayarda Umûmî Ağ sitelerinin yayınlanmasını sağlar. Abyss Umûmî Ağ Sunucusu, güvenli SSL/TLS bağlantılarını (HTTPS), Umûmî Ağ uygulayım biliminin geniş yelpâzesiyle destekler. Abyss Umûmî Ağ Sunucusu; MySQL, SQLite, MS SQL Server, MS Access, ve Oracle gibi veri tabanlarını destekleyen gelişmiş PHP, Perl, Python, ASP, ASP.NET ve Rails üzerinde Ruby Umûmî Ağ uygulamalarını çalıştırabilir. +Description = Abyss Umûmî Ağ Sunucusu, bilgisayarınızda Umûmî Ağ sitelerinizin barındırılmasına olanak sağlar. Umûmî Ağ uygulayım biliminin bir geniş yelpâzesinin yanı sıra güvenli SSL/TLS bağlantılarını (HTTPS) destekler. Ayrıca MySQL, SQLite, MS SQL Server, MS Access, ve Oracle gibi veri tabanlarıyla desteklenebilen gelişmiş PHP, Perl, Python, ASP, ASP.NET ve Rails üzerinde Ruby Umûmî Ağ uygulamalarını çalıştırabilir. Size = 2,1 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt b/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt index cca6ec4fcf3..bfcb24a1703 100644 --- a/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt +++ b/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = AC97 Driver for VirtualBox Version = 5.10.00.3610 Licence = Unknown -Description = Unzip in the "ReactOS" folder then restart ReactOS twice. +Description = Unzip in the ReactOS's folder then restart ReactOS twice. Size = 185.5 kB Category = 13 URLDownload = http://svn.reactos.org/packages/ac97_vbox.exe @@ -13,12 +14,12 @@ CDPath = none [Section.0405] Name = Ovladač AC97 pro VirtualBox Licence = Neznámá -Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte. +Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte. (FIXME) [Section.0407] Name = AC97 Treiber für VirtualBox Licence = Unbekannt -Description = Entpacken in das "ReactOS"-Verzeichnis und ReactOS zweimal neustarten. +Description = Entpacken in das "ReactOS"-Verzeichnis und ReactOS zweimal neustarten. (FIXME) [Section.0410] Name = Driver AC97 per VirtualBox @@ -28,52 +29,52 @@ Descrizione = Estrarre nella cartella "ReactOS" e poi riavviare ReactOs due volt [Section.040a] Name = Driver AC97 para VirtualBox Licence = Desconocida -Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. +Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. (FIXME) [Section.040c] Name = Pilote AC97 pour VirtualBox Licence = Inconnue -Description = Décompresser dans le dossier "ReactOS" puis redémarrer ReactOS deux fois. +Description = Décompresser dans le dossier "ReactOS" puis redémarrer ReactOS deux fois. (FIXME) Size = 185,5 ko [Section.0410] Name = Driver AC97 per VirtualBox Licence = Sconosciuta -Description = Decomprimere nella cartella "ReactOS" e riavviare ReactOS. +Description = Decomprimere nella cartella "ReactOS" e riavviare ReactOS. (FIXME) [Section.0413] Name = AC97 Driver voor VirtualBox Licence = Ongekend -Description = Pak uit in de "ReactOS" map en start tweemaal opnieuw op. +Description = Pak uit in de "ReactOS" map en start tweemaal opnieuw op. (FIXME) [Section.0415] Name = Sterownik AC97 dla VirtualBox Licence = Nieznana -Description = Rozpakuj zawartość w folderze "ReactOS" i dwukrotnie zrestartuj system. +Description = Rozpakuj zawartość w folderze "ReactOS" i dwukrotnie zrestartuj system. (FIXME) [Section.0418] Name = Modul pilot AC97 pentru VirtualBox Licence = Nespecificată -Description = Dezarhivați în dosarul „ReactOS” apoi reporniți ReactOS de două ori. +Description = Dezarhivați în dosarul „ReactOS” apoi reporniți ReactOS de două ori. (FIXME) Size = 185,5 ko [Section.0419] Name = Драйвер AC97 для VirtualBox Licence = Не указано -Description = Pазархивируйте содержимое в папку "ReactOS", затем дважды перезагрузите систему. +Description = Pазархивируйте содержимое в папку "ReactOS", затем дважды перезагрузите систему. (FIXME) [Section.041f] Name = VirtualBox için AC97 Sürücüsü Licence = Bilinmiyor -Description = Bunu ReactOS'un dizinine çıkartıp bilgisayarı iki kez yeniden başlatınız. +Description = ReactOS'un dizinine çıkartınız, sonra bilgisayarı iki kez yeniden başlatınız. Size = 185,5 KB [Section.0422] Name = Драйвер AC97 для VirtualBox Licence = Невідома -Description = Pозархівуйте вміст в теку "ReactOS" після чого двічі перезавантажте систему. +Description = Pозархівуйте вміст в теку "ReactOS" після чого двічі перезавантажте систему. (FIXME) [Section.0813] Name = AC97 Driver voor VirtualBox Licence = Ongekend -Description = Pak uit in de "ReactOS" map en start tweemaal opnieuw op. +Description = Pak uit in de "ReactOS" map en start tweemaal opnieuw op. (FIXME) diff --git a/reactos/base/applications/rapps/rapps/alreader.txt b/reactos/base/applications/rapps/rapps/alreader.txt index 501ff11ab9c..c932ab20444 100644 --- a/reactos/base/applications/rapps/rapps/alreader.txt +++ b/reactos/base/applications/rapps/rapps/alreader.txt @@ -1,8 +1,9 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = AlReader -Description = A FB2 eBook Reader. Read formats: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. Supported ZIP and GZ archives. +Description = A FB2 eBook Reader. Supported read formats: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. Supported ZIP and GZ archives. URLSite = http://www.alreader.com Size = 4.6 MB Category = 6 @@ -10,18 +11,18 @@ URLDownload = http://svn.reactos.org/packages/AlReader2Setup.exe CDPath = none [Section.0407] -Description = Ein FB2 eBook Reader. Unterstützung für folgende Formate: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. ZIP und GZ Archive werden ebenfalls unterstützt. +Description = Ein FB2 eBook Reader. Unterstützung für folgende Formate: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. ZIP und GZ Archive werden ebenfalls unterstützt. (FIXME?) [Section.0410] -Description = Un eBook Reader. Legge i formati fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. Supporta gli archivi ZIP e GZ. +Description = Un eBook Reader. Legge i formati fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. Supporta gli archivi ZIP e GZ. (FIXME) [Section.0415] -Description = Czytnik eBooków. Obsługuje formaty: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. Obsługiwane są także pliki w archivach ZIP i GZ. +Description = Czytnik eBooków. Obsługuje formaty: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. Obsługiwane są także pliki w archivach ZIP i GZ. (FIXME) [Section.0418] -Description = Cititor de cărți electronice în format FB2. +Description = Cititor de cărți electronice în format FB2. Supported read formats: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. Supported ZIP and GZ archives. (FIXME) Size = 4,6 Mo [Section.041f] -Description = Bir FB2 e-Kitap ouyucusu. +Description = Bir FB2 elektronik kitap okuyucusu. Desteklenen okuma biçimleri: fb2, fbz, txt, epub, html, doc, docx, odt, rtf, mobi, prc (PalmDoc), tcr. ZIP ve GZ belgeliklerini destekler. Size = 4,6 MB diff --git a/reactos/base/applications/rapps/rapps/ants.txt b/reactos/base/applications/rapps/rapps/ants.txt index ac1b79f5468..3294e86a91c 100644 --- a/reactos/base/applications/rapps/rapps/ants.txt +++ b/reactos/base/applications/rapps/rapps/ants.txt @@ -1,10 +1,12 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = Ants Version = N/A Licence = Freeware -Description = A card strategic game. You're building your own castle and trying to destroy enemy castle. You need a ZIP decompression program to install it. +Description = A card strategic game. Build your own castle and try to destroy enemy castle. You need a ZIP decompression program to install it. Size = 632 kB Category = 4 URLSite = http://peter.hostuju.cz/index.htm @@ -12,21 +14,21 @@ URLDownload = http://petr.hostuju.cz/program/download/ANTS.zip CDPath = none [Section.0407] -Description = Ein strategisches Kartenspiel. Sie bauen Ihr eigenes Schloss und versuchen, die gegnerische Burg zu zerstören. Sie benötigen ein ZIP-Programm, um es zu installieren. +Description = Ein strategisches Kartenspiel. Sie bauen Ihr eigenes Schloss und versuchen, die gegnerische Burg zu zerstören. Sie benötigen ein ZIP-Programm, um es zu installieren. (FIXME) [Section.0410] Description = Un gioco di carte strategico. Costruisci il tuo castello e prova a distruggere il castello nemico. Necessita di un programma di estrazione ZIP per essere installato. [Section.0415] -Description = Karciana gra strategiczna. Budujesz zamek, przy okazji próbujesz zniszczyć zamek wroga. Wymaga programu archiwizującego do wypakowania. +Description = Karciana gra strategiczna. Budujesz zamek, przy okazji próbujesz zniszczyć zamek wroga. Wymaga programu archiwizującego do wypakowania. (FIXME) [Section.0418] Licence = Gratuită -Description = Un joc strategic de cărți. Jucătorul își va construi un castel și încerca să distrugă castelele oponenților. Este necesar un utilitar de dezarhivare ZIP pentru a instala acest joc. +Description = Un joc strategic de cărți. Jucătorul își va construi un castel și încerca să distrugă castelele oponenților. Este necesar un utilitar de dezarhivare ZIP pentru a instala acest joc. (FIXME) Size = 632 ko [Section.041f] -Name = Karıncalar +Version = Yok Licence = Ücretsiz -Description = Bir kartlarla izlem oyunu. Kalenizi bitirmeye veyâ rakip kaleyi yıkmaya çalışın. Yazılımı kurmak için ZIP biçiminde çıkartma yeteneği olan bir yazılım gerekir. +Description = Bir kartlarla izlem oyunu. Kendi kurganınızı yapınız ve rakip kaleyi yıkmaya çalışınız. Kurmak için bir ZIP çıkarma izlencesi gerekir. Size = 632 KB diff --git a/reactos/base/applications/rapps/rapps/audiograbber.txt b/reactos/base/applications/rapps/rapps/audiograbber.txt index 5f59de91cbc..9c7410cb103 100644 --- a/reactos/base/applications/rapps/rapps/audiograbber.txt +++ b/reactos/base/applications/rapps/rapps/audiograbber.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Audio Grabber @@ -40,7 +41,7 @@ Size = 4,35 Mo [Section.041f] Licence = Ücretsiz -Description = Çok iyi bir CD ripleyicisi ve ses biçimi dönüştürücüsü. +Description = Çok iyi bir CD ripleyicisi ve ses kütüğü dönüştürücüsü. Size = 4,35 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/bittorrent.txt b/reactos/base/applications/rapps/rapps/bittorrent.txt index cd600628fdb..faaa324b0a1 100644 --- a/reactos/base/applications/rapps/rapps/bittorrent.txt +++ b/reactos/base/applications/rapps/rapps/bittorrent.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = BitTorrent @@ -28,6 +29,6 @@ Description = Originalul client BitTorrent. Size = 1,07 Mo [Section.041f] -Licence = Ticârî olmayan kullanımlarda ücretsiz. +Licence = Tecimlik olmayan kullanımlar için ücretsiz. Description = Özgün BitTorrent istemcisi. Size = 1,07 MB diff --git a/reactos/base/applications/rapps/rapps/bochs.txt b/reactos/base/applications/rapps/rapps/bochs.txt index 84094fcd96f..3709d9ca419 100644 --- a/reactos/base/applications/rapps/rapps/bochs.txt +++ b/reactos/base/applications/rapps/rapps/bochs.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Bochs @@ -26,5 +27,6 @@ Description = Bochs este un emulator PC (x86) cu surse publice și portabilitate Size = 4,7 Mo [Section.041f] -Description = Bochs; son derece taşınabilir, C++ ile yazılmış, en bilinen platformlarda çalışan, açık kaynak bir IA-32 (x86) PC öykünücüsüdür. +Licence = LGPL 2. sürüm +Description = Bochs; çok taşınabilir, C++ ile yazılmış, en yaygın platformlarda çalışan, açık kaynak bir IA-32 (x86) PC öykünücüsüdür. Size = 4,7 MB diff --git a/reactos/base/applications/rapps/rapps/boswars.txt b/reactos/base/applications/rapps/rapps/boswars.txt index 58e7b36c1fc..4d66d757fcb 100644 --- a/reactos/base/applications/rapps/rapps/boswars.txt +++ b/reactos/base/applications/rapps/rapps/boswars.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Bos Wars @@ -26,6 +27,5 @@ Description = Bos Wars e o strategie în timp real, futuristă. Pentru a porni j Size = 62,3 Mo [Section.041f] -Name = Bos Savaşları -Description = Bos Savaşları, gelecekçi ve gerçek zamanlı bir izlem oyunudur. Oyunu başlatmak için Mikroyazılım Basarî C++ 2008 Yürütücüsü'nü kurunuz. +Description = Bos Wars, gelecekçi ve gerçek zamanlı bir izlem oyunudur. Oyunu başlatmak için Microsoft Visual C++ 2008 Yürütücüsü'nü kurunuz. Size = 62,3 MB diff --git a/reactos/base/applications/rapps/rapps/boundaround.txt b/reactos/base/applications/rapps/rapps/boundaround.txt index ef5adb3a1c7..7474e9ebb8b 100644 --- a/reactos/base/applications/rapps/rapps/boundaround.txt +++ b/reactos/base/applications/rapps/rapps/boundaround.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Bound Around (Demo) @@ -19,6 +20,6 @@ Description = Un gioco simile a Frozen Fruits. [Section.041f] Name = Bound Around (Göstermelik) -Licence = Kısıtlı -Description = Frozen Fruits'e benzeyen bir oyun. +Licence = Paylaşımlı +Description = Frozen Fruits benzeri bir oyun. Size = 1,95 MB diff --git a/reactos/base/applications/rapps/rapps/christmasbound.txt b/reactos/base/applications/rapps/rapps/christmasbound.txt index 4b6798c2077..ffb8384ff44 100644 --- a/reactos/base/applications/rapps/rapps/christmasbound.txt +++ b/reactos/base/applications/rapps/rapps/christmasbound.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Christmas Bound @@ -19,5 +20,5 @@ Description = Un gioco simile a Frozen Fuits. [Section.041f] Licence = Ücretsiz -Description = Frozen Fruits'e benzeyen bir oyun. +Description = Frozen Fruits benzeri bir oyun. Size = 892 KB diff --git a/reactos/base/applications/rapps/rapps/chromium.txt b/reactos/base/applications/rapps/rapps/chromium.txt index 693a5884d5b..61b64468d3d 100644 --- a/reactos/base/applications/rapps/rapps/chromium.txt +++ b/reactos/base/applications/rapps/rapps/chromium.txt @@ -1,5 +1,7 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = Chromium B.S.U. Version = 0.9.13.2 @@ -25,5 +27,5 @@ Description = Chromium B.S.U. este un joc de vânătoare în spațiul cosmic (ar Size = 2,3 Mo [Section.041f] -Description = Chromium B.S.U., atari salonu oyunu türünde, üst kaydırmalı bir uzay nişancısıdır. +Description = Chromium B.S.U., atari salonu oyunu türünde, üstten kaydırmalı bir uzay gezleyicisidir. Size = 2,3 MB diff --git a/reactos/base/applications/rapps/rapps/cnt.txt b/reactos/base/applications/rapps/rapps/cnt.txt index 07fdc789ead..ac5a3753d52 100644 --- a/reactos/base/applications/rapps/rapps/cnt.txt +++ b/reactos/base/applications/rapps/rapps/cnt.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Click-N-Type Virtual Keyboard Version = 3.03 Licence = Freeware -Description = Freeware Virtual Keyboard App. +Description = Freeware virtual keyboard application. Size = 1.3 MB Category = 12 URLSite = http://http://cnt.lakefolks.com @@ -29,5 +30,5 @@ Size = 1,3 Mo [Section.041f] Name = Click-N-Type Farazî Düğme Takımı Licence = Ücretsiz -Description = Ücretsiz bir farazî düğme takımı uygulaması. +Description = Ücretsiz farazî düğme takımı uygulaması. Size = 1,3 MB diff --git a/reactos/base/applications/rapps/rapps/codeblocks.txt b/reactos/base/applications/rapps/rapps/codeblocks.txt index ac2172c1b83..82257b02454 100644 --- a/reactos/base/applications/rapps/rapps/codeblocks.txt +++ b/reactos/base/applications/rapps/rapps/codeblocks.txt @@ -1,7 +1,8 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] -Name = Code::Blocks (no compiler) +Name = Code::Blocks (without compiler) Version = 13.12 Licence = GPLv3 Description = A open source, cross-platform, powerful IDE. It doesn't contain a compiler. @@ -19,5 +20,6 @@ Description = Un IDE potente, open source, multipiattaforma. Non contiene un com [Section.041f] Name = Code::Blocks (Derleyicisiz) +Licence = GPL 3. sürüm Description = Açık kaynak, çapraz platform, güçlü bir tümleşik geliştirme ortamı. Bir derleyici içermez. Size = 29,2 MB diff --git a/reactos/base/applications/rapps/rapps/codeblocks_gcc.txt b/reactos/base/applications/rapps/rapps/codeblocks_gcc.txt index 654057867bf..70dc894a960 100644 --- a/reactos/base/applications/rapps/rapps/codeblocks_gcc.txt +++ b/reactos/base/applications/rapps/rapps/codeblocks_gcc.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Code::Blocks TDM-GCC (version 4.7.1, 32 bit) @@ -19,5 +20,6 @@ Description = Un IDE potente, open source, multipiattaforma. Contiene il compila [Section.041f] Name = Code::Blocks TDM-GCC (sürüm 4.7.1, 32 bitlik) +Licence = GPL 3. sürüm Description = Açık kaynak, çapraz platform, güçlü bir tümleşik geliştirme ortamı. TDM-GCC (sürüm 4.7.1, 32 bitlik) derleyicisini içerir. Size = 97,8 MB diff --git a/reactos/base/applications/rapps/rapps/codeblocks_gcc_2.txt b/reactos/base/applications/rapps/rapps/codeblocks_gcc_2.txt index e8fadd4c305..e7678186859 100644 --- a/reactos/base/applications/rapps/rapps/codeblocks_gcc_2.txt +++ b/reactos/base/applications/rapps/rapps/codeblocks_gcc_2.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Code::Blocks TDM-GCC (version 4.8.1, 32 bit) @@ -19,5 +20,6 @@ Description = Un IDE potente, open source, multipiattaforma. Contiene il compila [Section.041f] Name = Code::Blocks TDM-GCC (sürüm 4.8.1, 32 bitlik) +Licence = GPL 3. sürüm Description = Açık kaynak, çapraz platform, güçlü bir tümleşik geliştirme ortamı. TDM-GCC (sürüm 4.8.1, 32 bitlik) derleyicisini içerir. Size = 100 MB diff --git a/reactos/base/applications/rapps/rapps/comctl32ocx.txt b/reactos/base/applications/rapps/rapps/comctl32ocx.txt index b9ea0fd0d71..21c32cb5be7 100644 --- a/reactos/base/applications/rapps/rapps/comctl32ocx.txt +++ b/reactos/base/applications/rapps/rapps/comctl32ocx.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Visual Basic 6.0 Common Controls @@ -7,26 +8,37 @@ Licence = Unknown Description = File needed by some applications. Contains: comctl32.ocx, mscomctl.ocx, advpack.dll. Size = 913.73 kB Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=25437D98-51D0-41C1-BB14-64662F5F62FE&displaylang=en +URLSite = http://www.microsoft.com/en-us/download/details.aspx?id=10019 URLDownload = http://download.microsoft.com/download/3/a/5/3a5925ac-e779-4b1c-bb01-af67dc2f96fc/VisualBasic6-KB896559-v1-ENU.exe CDPath = none [Section.0407] Licence = Unbekannt Description = Datei wird von einigen Anwendungen benötigt. Beinhaltet: comctl32.ocx, mscomctl.ocx, advpack.dll. +Size = 908.73 kB +URLSite = http://www.microsoft.com/de-DE/download/details.aspx?id=10019 +URLDownload = http://download.microsoft.com/download/c/e/d/ced699fe-7a40-420b-bdd7-10b38caef4c6/VisualBasic6-KB896559-v1-DEU.exe [Section.040a] Licence = Desconocida Description = X es necesario para varias aplicaciones. Incluye: comctl32.ocx, mscomctl.ocx, advpack.dll. +Size = 910.23 kB +URLSite = http://www.microsoft.com/es-ES/download/details.aspx?id=10019 +URLDownload = http://download.microsoft.com/download/9/0/9/90935db7-89ec-4344-a9ea-e6913c03f060/VisualBasic6-KB896559-v1-ESN.exe [Section.040c] Licence = Inconnue Description = Fichier nécessaire pour certaines applications. Contient: comctl32.ocx, mscomctl.ocx, advpack.dll. -Size = 913,73 ko +Size = 911,23 ko +URLSite = http://www.microsoft.com/fr-FR/download/details.aspx?id=10019 +URLDownload = http://download.microsoft.com/download/4/0/f/40f775ea-b257-410c-8f78-f1f60afe0306/VisualBasic6-KB896559-v1-FRA.exe [Section.0410] Licence = Sconosciuta Description = File necessari per alcune applicazioni. Contiene: Comctl32.ocx, mscomctl.ocx, advpack.dll. +Size = 909.73 kB +URLSite = http://www.microsoft.com/it-IT/download/details.aspx?id=10019 +URLDownload = http://download.microsoft.com/download/8/1/b/81b968b9-1d7d-4d0a-aa27-864f4a2e3c23/VisualBasic6-KB896559-v1-ITA.exe [Section.0413] Licence = Ongekend @@ -44,7 +56,7 @@ Size = 913,73 ko [Section.041f] Name = Microsoft Visual Basic 6.0 Ortak Denetimler Licence = Bilinmiyor -Description = Birtakım uygulamalar için gereklidir. Şunları içerir: comctl32.ocx, mscomctl.ocx, advpack.dll. +Description = Birtakım uygulamalar için gerekli kütük. Şunları içerir: comctl32.ocx, mscomctl.ocx, advpack.dll. Size = 913,73 KB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/devcpp_mingw32.txt b/reactos/base/applications/rapps/rapps/devcpp_mingw32.txt index 0db353c927c..eeab44f6c2a 100644 --- a/reactos/base/applications/rapps/rapps/devcpp_mingw32.txt +++ b/reactos/base/applications/rapps/rapps/devcpp_mingw32.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Orwell Dev-C++ MinGW32 @@ -18,5 +19,6 @@ Description = Eine gepflegte Version von Dev-C++. Der MinGW32 Compiler liegt bei Description = Una versione mantenuta di Dev-C++. Contiene il compilatore MinGW32. [Section.041f] -Description = Dev-C++'nın sürdürülen bir sürümü. MinGW32 derleyicisini içerir. +Licence = GPL 2. sürüm +Description = Dev-C++'nın sürdürülen bir sürümü. MinGW32 derleyicisi içerir. Size = 60,2 MB diff --git a/reactos/base/applications/rapps/rapps/devcpp_tdm_gcc_x64.txt b/reactos/base/applications/rapps/rapps/devcpp_tdm_gcc_x64.txt index f0f490d16e1..ed2f12c3687 100644 --- a/reactos/base/applications/rapps/rapps/devcpp_tdm_gcc_x64.txt +++ b/reactos/base/applications/rapps/rapps/devcpp_tdm_gcc_x64.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Orwell Dev-C++ TDM GCC x64 @@ -18,5 +19,6 @@ Description = Eine gepflegte Version von Dev-C++. Der 64 bit TDM-GCC Compiler li Description = Una versione sostenuta di Dev-C++. Contiene il compilatore a 64bit TDM-GCC. [Section.041f] -Description = Dev-C++'nın sürdürülen bir sürümü. 64 bitlik TDM-GCC derleyicisini içerir. +Licence = GPL 2. sürüm +Description = Dev-C++'nın sürdürülen bir sürümü. 64 bitlik TDM-GCC derleyicisi içerir. Size = 44,8 MB diff --git a/reactos/base/applications/rapps/rapps/diablo2.txt b/reactos/base/applications/rapps/rapps/diablo2.txt index 5079c79e3bb..ff7a2ae4dc7 100644 --- a/reactos/base/applications/rapps/rapps/diablo2.txt +++ b/reactos/base/applications/rapps/rapps/diablo2.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Diablo II @@ -36,8 +37,8 @@ Description = Diablo 2 Shareware. Pentru execuție este necesar (pachetul) zecke Size = 131,9 Mo [Section.041f] -Licence = Kısıtlı -Description = Diablo 2'nin kısıtlısı. Çalıştırmak için zeckensack'ın glide çeviricisi gereklidir. +Licence = Paylaşımlı +Description = Diablo 2 Paylaşımlı. Çalıştırmak için zeckensack'ın glide wrapper'ı gereklidir. Size = 131,9 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/dosblaster.txt b/reactos/base/applications/rapps/rapps/dosblaster.txt index 03325b677dc..78bb2809cc3 100644 --- a/reactos/base/applications/rapps/rapps/dosblaster.txt +++ b/reactos/base/applications/rapps/rapps/dosblaster.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = DosBlaster Version = 2.5 Licence = GPL -Description = DosBlaster is a Shell extension which makes it possible to open any DOS executabe in DOSBox via right click. This version contains DOSBox 0.70, but can be simply updated by installing a newer DOSBox into the DosBlaster folders. +Description = DosBlaster is a shell extension which makes it possible to open any DOS executable in DOSBox via right click. This version contains DOSBox 0.70, but can be simply updated by installing a newer DOSBox into the DosBlaster folders. Size = 2.05 MB Category = 15 URLSite = http://dosblaster.sourceforge.net/ @@ -35,7 +36,7 @@ Description = DosBlaster este o extensie de interfațare ce oferă posibilitatea Size = 2,05 Mo [Section.041f] -Description = DosBlaster, bir DOS uygulamasını sağ tıklamayla DOSBox'ta çalıştırabilmesini sağlayan bir kabuk uzantısıdır. Bu sürüm, DOSBox 0.70 içerir ancak daha yeni bir DOSBox'u DosBlaster dizinlerinin içine kurarak bunu kolayca yükseltebilirsiniz. +Description = DosBlaster, bir DOS uygulamasını DOSBox'ta sağ tıklamayla açtırılabilmesini olanaklı duruma getiren bir kabuk uzantısıdır. Bu sürüm DOSBox 0.70 içerir ancak daha yeni bir DOSBox'u DosBlaster dizinlerinin içine kurarak kolayca şimdikileştirilebilir. Size = 2,05 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/dosbox.txt b/reactos/base/applications/rapps/rapps/dosbox.txt index f38620fa1d4..f8ebb4a5309 100644 --- a/reactos/base/applications/rapps/rapps/dosbox.txt +++ b/reactos/base/applications/rapps/rapps/dosbox.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = DOSBox @@ -32,7 +33,7 @@ Description = DOSBox este un emulator DOS. Size = 1,38 Mo [Section.041f] -Description = DOSBox, bir DOS öykünücüsüdür. +Description = DOSBox bir DOS öykünücüsüdür. Size = 1,38 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/doublecommander.txt b/reactos/base/applications/rapps/rapps/doublecommander.txt index 8a8975d8b63..e2c80a5c1b9 100644 --- a/reactos/base/applications/rapps/rapps/doublecommander.txt +++ b/reactos/base/applications/rapps/rapps/doublecommander.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Double Commander @@ -32,7 +33,7 @@ Description = Double Commander - это открытый двухпанельн [Section.041f] Version = 0.5.8 Gelişme -Description = Double Commander, yan yana duran iki bölmenin bulunduğu bir açık kaynak kütük yöneticisidir. Bunu çıkartmak için 7-Zip ya da 7-Zip benzeri bir yazılım kullanmanız gerekir. +Description = Double Commander, yan yana iki bölmeli bir açık kaynak kütük yöneticisidir. Çıkartmak için 7-Zip ya da benzeri bir yazılım kullanmanız gerekir. Size = 7,6 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/dplus.txt b/reactos/base/applications/rapps/rapps/dplus.txt index 2a54a7e534d..a5c94d616a4 100644 --- a/reactos/base/applications/rapps/rapps/dplus.txt +++ b/reactos/base/applications/rapps/rapps/dplus.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = D+ Browser diff --git a/reactos/base/applications/rapps/rapps/dvdwritenow.txt b/reactos/base/applications/rapps/rapps/dvdwritenow.txt index d2ff1961b56..2795a805b1b 100644 --- a/reactos/base/applications/rapps/rapps/dvdwritenow.txt +++ b/reactos/base/applications/rapps/rapps/dvdwritenow.txt @@ -1,10 +1,12 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = DVD Write Now Version = 1.5.12 sp2 Licence = Freeware -Description = A free direct CD/DVD recording software. Once installed, you can use your CD/DVD RW as USB Flash or removable hard drives. Along with this you can write to CD/DVD RW recorded with UDF filesystem. You can also read UDF disks created with other software. (Microsoft DVD−ROMs, RW disks recorded with Ahead InCD). You need a ZIP decompression program to install it. +Description = A free direct CD/DVD recording software. Once installed, you can use your CD/DVD RW as USB Flash or removable hard drives. Along with this you can write to CD/DVD RW recorded with UDF filesystem. You can also read UDF disks created with other software (Microsoft DVD−ROMs, RW disks recorded with Ahead InCD). You need a ZIP decompression program to install it. Size = 1.2 MB Category = 12 URLSite = http://dwn.alter.org.ua/ @@ -30,7 +32,6 @@ Description = DVD Write Now - бесплатная программа для п URLSite = http://dwn.alter.org.ua/ru/ [Section.041f] -Name = DVD Şimdi Yaz Licence = Ücretsiz -Description = Ücretsiz bir doğrudan CD/DVD kaydedicisi. Kurulur kurulmaz CD/DVD RW'leri çıkartılabilir disk olarak kullanabilirsiniz. Bununla birlikte CD/DVD RW'leri UDF kütük dizgesiyle kaydedebilirsiniz. Ayrıca, Mikroyazılım DVD−ROM'ları, Ahead InCD ile kaydedilen RW diskleri gibi diğer yazılımlarla oluşturulan UDF diskleri okutabilirsiniz. Yazılımı kurmak için ZIP biçiminde çıkartma yeteneği olan bir yazılım gerekir. +Description = Ücretsiz bir doğrudan CD/DVD kaydedici yazılımı. Kurulduktan sonra CD/DVD RW'lerinizi USB Flash veyâ çıkarılabilir sâbit disk sürücüleri olarak kullanabilirsiniz. Bununla birlikte UDF kütük dizgesiyle kaydedilmiş CD/DVD RW'lere yazabilirsiniz. Ayrıca Microsoft DVD−ROM'ları, Ahead InCD ile kaydedilmiş RW diskleri gibi başka yazılımlarla oluşturulmuş UDF diskleri okuyabilirsiniz. Kurmak için bir ZIP çıkarma izlencesi gerekir. Size = 1,2 MB diff --git a/reactos/base/applications/rapps/rapps/excelview.txt b/reactos/base/applications/rapps/rapps/excelview.txt index 35e433d000a..0a406456170 100644 --- a/reactos/base/applications/rapps/rapps/excelview.txt +++ b/reactos/base/applications/rapps/rapps/excelview.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Excel Viewer @@ -50,7 +51,7 @@ URLDownload = http://download.microsoft.com/download/D/D/2/DD28D077-97F3-47C0-93 Name = Microsoft Excel Görüntüleyici Licence = Bilinmiyor Description = Microsoft Excel Görüntüleyici -Size = 51.1 MB +Size = 51,1 MB URLDownload = http://download.microsoft.com/download/8/5/D/85DCDD24-8237-4334-866D-417F74F37C47/ExcelViewer.exe [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/fap.txt b/reactos/base/applications/rapps/rapps/fap.txt index 49903520e58..730dcdd65f4 100644 --- a/reactos/base/applications/rapps/rapps/fap.txt +++ b/reactos/base/applications/rapps/rapps/fap.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Fox Audio Player @@ -36,7 +37,7 @@ Size = 1,89 Mo [Section.041f] Name = Fox Ses Oynatıcısı -Description = Bayağı ve yeğni bir ses oynatıcısı. +Description = Bayağı ve yeğni ses oynatıcısı. Size = 1,89 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/fira.txt b/reactos/base/applications/rapps/rapps/fira.txt index 30373c7a033..beee410b87d 100644 --- a/reactos/base/applications/rapps/rapps/fira.txt +++ b/reactos/base/applications/rapps/rapps/fira.txt @@ -1,11 +1,12 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Mozilla Fira Font Version = 1.0 Licence = Unknown -Description = Mozilla Fira Font Pack, Includes Mono and Sans fonts. Unzip in the "ReactOS" folder. +Description = Mozilla Fira Font Pack, Includes Mono and Sans fonts. Unzip in the ReactOS's folder. Size = 543 kB Category = 14 URLSite = https://github.com/mozilla/Fira @@ -14,23 +15,23 @@ CDPath = none [Section.0407] Licence = Unbekannt -Description = Mozilla Fira Font Pack, Beinhaltet Mono und Sans Schriften. Bitte in den "ReactOS" Ordner entpacken. +Description = Mozilla Fira Font Pack, Beinhaltet Mono und Sans Schriften. Bitte in den "ReactOS" Ordner entpacken. (FIXME) [Section.0410] Licence = Sconosciuta Description = Fira Font Pack di Mozilla, Include i font Mono e Sans. Estrare nella cartella "ReactOS". [Section.0415] -Description = Pakiet czcionek Mozilla Fira Font, zawiera czcionki Mono i Sans. Wypakuj do folderu "ReactOS". Licence = Nieznana +Description = Pakiet czcionek Mozilla Fira Font, zawiera czcionki Mono i Sans. Wypakuj do folderu "ReactOS". (FIXME) [Section.0418] Licence = Nespecificată -Description = Pachetul Mozilla Fira Font, include fonturile Mono și Sans. Dezarhivați în dosarul „ReactOS”. +Description = Pachetul Mozilla Fira Font, include fonturile Mono și Sans. Dezarhivați în dosarul „ReactOS”. (FIXME) Size = 543 ko [Section.041f] -Name = Mozilla Fira Yazı Türü +Name = Mozilla Fira Yazı Tipi Licence = Bilinmiyor -Description = Mozilla Fira Yazı Türü Paketi, Mono ve Sans yazı türlerini kapsar. ReactOS'un "Fonts" dizinine çıkartınız. +Description = Mozilla Fira Yazı Tipi Paketi, Mono ve Sans yazı tiplerini kapsar. ReactOS'un dizinine çıkartınız. Size = 543 KB diff --git a/reactos/base/applications/rapps/rapps/firefox.txt b/reactos/base/applications/rapps/rapps/firefox.txt index 038cfe10183..fee9955b3c5 100644 --- a/reactos/base/applications/rapps/rapps/firefox.txt +++ b/reactos/base/applications/rapps/rapps/firefox.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Mozilla Firefox 28 @@ -71,7 +72,7 @@ URLSite = http://www.mozilla.org/sk/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/28.0/win32/sk/Firefox%20Setup%2028.0.exe [Section.041f] -Description = Özgür Umûmî Ağ tarayıcıları arasında en tutulanı ve en iyisi. +Description = Özgür Umûmî Ağ tarayıcıları arasında en tutulanı ve en iyilerinden biri. Size = 22,8 MB URLSite = http://www.mozilla.org/tr/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/28.0/win32/tr/Firefox%20Setup%2028.0.exe diff --git a/reactos/base/applications/rapps/rapps/firefox2.txt b/reactos/base/applications/rapps/rapps/firefox2.txt index ae699823393..d71050a0305 100644 --- a/reactos/base/applications/rapps/rapps/firefox2.txt +++ b/reactos/base/applications/rapps/rapps/firefox2.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Mozilla Firefox 2.0 @@ -77,7 +78,7 @@ URLSite = http://www.mozilla.org/sk/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.20/win32/sk/Firefox%20Setup%202.0.0.20.exe [Section.041f] -Description = Özgür Umûmî Ağ tarayıcıları arasında en tutulanı ve en iyisi. +Description = Özgür Umûmî Ağ tarayıcıları arasında en tutulanı ve en iyilerinden biri. Size = 5,58 MB URLSite = http://www.mozilla.org/tr/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.20/win32/tr/Firefox%20Setup%202.0.0.20.exe diff --git a/reactos/base/applications/rapps/rapps/firefox3.txt b/reactos/base/applications/rapps/rapps/firefox3.txt index e7032cbc1ae..6d1e80c0284 100644 --- a/reactos/base/applications/rapps/rapps/firefox3.txt +++ b/reactos/base/applications/rapps/rapps/firefox3.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Mozilla Firefox 3.0 @@ -77,7 +78,7 @@ URLSite = http://www.mozilla.org/sk/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/sk/Firefox%20Setup%203.0.19.exe [Section.041f] -Description = Özgür Umûmî Ağ tarayıcıları arasında en tutulanı ve en iyisi. +Description = Özgür Umûmî Ağ tarayıcıları arasında en tutulanı ve en iyilerinden biri. Size = 7,00 MB URLSite = http://www.mozilla.org/tr/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/tr/Firefox%20Setup%203.0.19.exe diff --git a/reactos/base/applications/rapps/rapps/firefox36.txt b/reactos/base/applications/rapps/rapps/firefox36.txt index 4046e9f1109..0d8ad6bf44f 100644 --- a/reactos/base/applications/rapps/rapps/firefox36.txt +++ b/reactos/base/applications/rapps/rapps/firefox36.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Mozilla Firefox 3.6 @@ -71,7 +72,7 @@ URLSite = http://www.mozilla.org/sk/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.6.28/win32/sk/Firefox%20Setup%203.6.28.exe [Section.041f] -Description = Özgür Umûmî Ağ tarayıcıları arasında en tutulanı ve en iyisi. +Description = Özgür Umûmî Ağ tarayıcıları arasında en tutulanı ve en iyilerinden biri. Size = 8,07 MB URLSite = http://www.mozilla.org/tr/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.6.28/win32/tr/Firefox%20Setup%203.6.28.exe diff --git a/reactos/base/applications/rapps/rapps/freebasic.txt b/reactos/base/applications/rapps/rapps/freebasic.txt index 1a40490443a..d9519fdd7f2 100644 --- a/reactos/base/applications/rapps/rapps/freebasic.txt +++ b/reactos/base/applications/rapps/rapps/freebasic.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = FreeBASIC @@ -32,7 +33,7 @@ Description = Compilator (open-source) BASIC. Sintaxa BASIC este compatibilă cu Size = 7,4 Mo [Section.041f] -Description = Açık kaynak bir BASIC derleyicisi. Bu BASIC türevi, QBASIC ile uyumludur. +Description = Açık kaynak BASIC derleyicisi. Bu BASIC söz dizimi, QBASIC ile uyumludur. Size = 7,4 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/glidewrapzbag.txt b/reactos/base/applications/rapps/rapps/glidewrapzbag.txt index 8d100209291..4e8172886f2 100644 --- a/reactos/base/applications/rapps/rapps/glidewrapzbag.txt +++ b/reactos/base/applications/rapps/rapps/glidewrapzbag.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = GlidewrapZbag diff --git a/reactos/base/applications/rapps/rapps/globulation2.txt b/reactos/base/applications/rapps/rapps/globulation2.txt index 22747acc973..5b540869e51 100644 --- a/reactos/base/applications/rapps/rapps/globulation2.txt +++ b/reactos/base/applications/rapps/rapps/globulation2.txt @@ -1,5 +1,7 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = Globulation2 Version = 0.9.4.4 @@ -25,5 +27,5 @@ Description = Globulation 2 este un joc de strategie în timp real. Jocul minimi Size = 13,5 Mo [Section.041f] -Description = Globulation 2, gerçek zamanlı bir izlem oyunudur. Bu oyun, birimlere kendiliğinden görevler atayarak oyun mikroyönetimini en aza indirir. +Description = Globulation 2, gerçek zamanlı bir izlem oyunudur. Bu oyun, birimlere kendiliğinden görevler atayarak oyun mikro yönetimini en aza indirir. Size = 13,5 MB diff --git a/reactos/base/applications/rapps/rapps/hover.txt b/reactos/base/applications/rapps/rapps/hover.txt index a43dd0e119c..9627e69f231 100644 --- a/reactos/base/applications/rapps/rapps/hover.txt +++ b/reactos/base/applications/rapps/rapps/hover.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Hover! @@ -25,5 +26,5 @@ Description = Jocul clasic Hover CTF, care se găsea pe CD-ul Windows 95. Size = 6,2 Mo [Section.041f] -Description = Pencereler 95 CD'sinde bulunan bir bayrak kapmaca oyunu. +Description = Windows 95 CD'sinde bulunan kökleşik Hover CTF oyunu. Size = 6,2 MB diff --git a/reactos/base/applications/rapps/rapps/hxd.txt b/reactos/base/applications/rapps/rapps/hxd.txt index 0faa3bbe870..eb203dad07e 100644 --- a/reactos/base/applications/rapps/rapps/hxd.txt +++ b/reactos/base/applications/rapps/rapps/hxd.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = HxD @@ -32,6 +33,6 @@ URLDownload = http://mh-nexus.de/downloads/HxDSetupROM.zip [Section.041f] Licence = Ücretsiz -Description = İyi bir onaltılık düzenleyici. Bunu çıkartmak için 7-Zip ya da 7-Zip benzeri bir yazılım kullanmanız gerekir. +Description = İyi bir onaltılık düzenleyici. Çıkartmak için 7-Zip ya da benzeri bir yazılım kullanmanız gerekir. Size = 853 KB URLDownload = http://mh-nexus.de/downloads/HxDSetupTR.zip diff --git a/reactos/base/applications/rapps/rapps/indiftpd.txt b/reactos/base/applications/rapps/rapps/indiftpd.txt index 1f146cb8d44..09a17d09df1 100644 --- a/reactos/base/applications/rapps/rapps/indiftpd.txt +++ b/reactos/base/applications/rapps/rapps/indiftpd.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = IndiFTPD @@ -27,5 +28,5 @@ Size = 556 ko [Section.041f] Version = 1.0.9 Gelişme -Description = IndiFTPD, bağımsız (bir tek çalıştırılabilir kütükten oluşan) bir FTP sunucusudur. Bu yazılım, çabucak çalışan bir sunucuya iye olmak isteyen, ancak dizgesinde bir sunucu kurmak/ayarlamak istemeyen veyâ dizgesine bir sunucu kuramayan/ayarlayamayan kullanıcılar için tasarlanmıştır. +Description = IndiFTPD, bir tek çalıştırılabilir kütükten çalışan tek başına bir FTP sunucusudur. Bir kullanıcının, çabucak, çalışan bir sunucuya iye olmak istediği ve dizgesinde bir sunucu kurmak/yapılandırmak istemediği (veyâ bunu yapmaya izni olmadığı) durumlar için tasarlanmıştır. Size = 556 KB diff --git a/reactos/base/applications/rapps/rapps/irfanview.txt b/reactos/base/applications/rapps/rapps/irfanview.txt index 698ce46dfa8..6737655192c 100644 --- a/reactos/base/applications/rapps/rapps/irfanview.txt +++ b/reactos/base/applications/rapps/rapps/irfanview.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = IrfanView @@ -42,8 +43,8 @@ Description = Lector pentru multiple formaturi de fișiere grafice/audio/video. Size = 1,8 Mo [Section.041f] -Licence = Şahsî kullanımlar için ücretsiz. -Description = Çizge, ses ve vidyo kütükleri görüntüleyicisi. +Licence = Şahsî kullanım için ücretsiz. +Description = Çizgelerin, ses kütüklerinin, vidyo kütüklerinin tüm türleri için görüntüleyici. Size = 1,8 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/irfanviewplugins.txt b/reactos/base/applications/rapps/rapps/irfanviewplugins.txt index 54285b9d5e7..4fbd6e85630 100644 --- a/reactos/base/applications/rapps/rapps/irfanviewplugins.txt +++ b/reactos/base/applications/rapps/rapps/irfanviewplugins.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = IrfanView Plugins @@ -43,8 +44,8 @@ Size = 10,2 Mo [Section.041f] Name = IrfanView Eklentileri -Licence = Şahsî kullanımlar için ücretsiz. -Description = Daha çok kütük türünü desteklemeye yarayan eklentiler. +Licence = Şahsî kullanım için ücretsiz. +Description = Daha çok kütük türü desteklemek için eklentiler. Size = 10,2 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/kdewin.txt b/reactos/base/applications/rapps/rapps/kdewin.txt index ca9bbe5485e..974dcc9ba20 100644 --- a/reactos/base/applications/rapps/rapps/kdewin.txt +++ b/reactos/base/applications/rapps/rapps/kdewin.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = K Desktop Environment diff --git a/reactos/base/applications/rapps/rapps/kyodai.txt b/reactos/base/applications/rapps/rapps/kyodai.txt index 2e5e11235cc..5ad84c2b330 100644 --- a/reactos/base/applications/rapps/rapps/kyodai.txt +++ b/reactos/base/applications/rapps/rapps/kyodai.txt @@ -1,5 +1,7 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = Kyodai Mahjongg Version = 21.42 @@ -7,6 +9,7 @@ Licence = Shareware Description = One of the best Mahjongg Solitaire games out there. Size = 13.8 MB Category = 4 +URLSite = http://cynagames.com/ URLDownload = http://files.cynagames.com/kyo2006.exe CDPath = none @@ -25,7 +28,6 @@ Description = Unul dintre cele mai bune jocuri de pasiență Mahjongg. Size = 13,8 Mo [Section.041f] -Name = Kyodai Çin Dominosu -Licence = Kısıtlı -Description = Çin dominosu türündeki solitaire oyunları arasında en iyisi. +Licence = Paylaşımlı +Description = Mahjong solitaire oyunları arasında en iyilerinden biri. Size = 13,8 MB diff --git a/reactos/base/applications/rapps/rapps/lazaruside.txt b/reactos/base/applications/rapps/rapps/lazaruside.txt index 10395af40ae..a0ef0845afe 100644 --- a/reactos/base/applications/rapps/rapps/lazaruside.txt +++ b/reactos/base/applications/rapps/rapps/lazaruside.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Lazarus @@ -28,4 +29,4 @@ Size = 112 Mo [Section.041f] Licence = Değiştirilmiş LGPL, GPL -Description = Basarî ve basarî olmayan Nesne Paskal çizeylemleri oluşturmayı sağlayan, Özgür Paskal derleyicisini kullanarak çalıştırabilir kütük oluşturan bir çapraz platform tümleşik geliştirme ortamı. +Description = Görmelik (GUI) ve görmelik olmayan Object Pascal izlenceleri oluşturmanızı sağlayan, çalıştırılabilir kütüğünüzü oluşturmak için Free Pascal derleyicisini kullanan bir çapraz platform bir tümleşik geliştirme ortamı (IDE). diff --git a/reactos/base/applications/rapps/rapps/lbreakout2.txt b/reactos/base/applications/rapps/rapps/lbreakout2.txt index 6f1aec180d8..07d017b615b 100644 --- a/reactos/base/applications/rapps/rapps/lbreakout2.txt +++ b/reactos/base/applications/rapps/rapps/lbreakout2.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = LBreakout2 @@ -35,7 +36,7 @@ Description = Ramificație-clonă a bibliotecilor SDL. Size = 3,03 Mo [Section.041f] -Description = SDL kitaplıklarını kullanan bir Breakout taklidi. +Description = SDL kitaplıklarını kullanan Breakout taklidi. Size = 3,03 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/lgeneral.txt b/reactos/base/applications/rapps/rapps/lgeneral.txt index e70dc80e590..96dde00be75 100644 --- a/reactos/base/applications/rapps/rapps/lgeneral.txt +++ b/reactos/base/applications/rapps/rapps/lgeneral.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = LGeneral @@ -35,7 +36,7 @@ Description = Clonă Panzer General utilizând bibliotecile SDL. Size = 1,92 Mo [Section.041f] -Description = SDL kitaplıklarını kullanan bir Panzer General taklidi. +Description = SDL kitaplıklarını kullanan Panzer General taklidi. Size = 1,92 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/libreoffice.txt b/reactos/base/applications/rapps/rapps/libreoffice.txt index d3d2c50487c..31ff17d102b 100644 --- a/reactos/base/applications/rapps/rapps/libreoffice.txt +++ b/reactos/base/applications/rapps/rapps/libreoffice.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = LibreOffice Version = 4.2.3 Licence = LGPL -Description = Former called OpenOffice. Open Source Office Suite. +Description = A powerful and open source office suite. It has been forked from OpenOffice. Size = 211.0 MB Category = 6 URLSite = http://www.documentfoundation.org/ @@ -12,34 +13,34 @@ URLDownload = http://download.documentfoundation.org/libreoffice/stable/4.2.3/wi CDPath = none [Section.0407] -Description = Vorher bekannt als OpenOffice. Open Source Office Suite. +Description = Vorher bekannt als OpenOffice. Open Source Office Suite. (FIXME) [Section.040a] -Description = La suite de ofimática de código abierto. +Description = La suite de ofimática de código abierto. (FIXME) [Section.040c] -Description = Précédemment appelé OpenOffice. Suite bureautique open source. +Description = Précédemment appelé OpenOffice. Suite bureautique open source. (FIXME) Size = 211,0 Mo [Section.0410] -Description = Precedentemente chiamato OpenOffice. Open Source Office Suite. +Description = Precedentemente chiamato OpenOffice. Open Source Office Suite. (FIXME) [Section.0413] -Description = Voorheen OpenOffice. Open-bron Office pakket. +Description = Voorheen OpenOffice. Open-bron Office pakket. (FIXME) [Section.0415] -Description = Otwarty pakiet biurowy. +Description = Otwarty pakiet biurowy. (FIXME) [Section.0418] -Description = Fostul OpenOffice. Suita de aplicații de birotică open-source. +Description = Fostul OpenOffice. Suita de aplicații de birotică open-source. (FIXME) Size = 211,0 Mo [Section.041f] -Description = OpenOffice gibi bir açık kaynak büro takımı. +Description = Güçlü ve açık kaynak bir büro takımı. OpenOffice'ten çatallanılmıştır. Size = 211,0 MB [Section.0422] -Description = Відкритий офісний пакет. +Description = Відкритий офісний пакет. (FIXME) [Section.0813] -Description = Voorheen OpenOffice. Open-bron Office pakket. +Description = Voorheen OpenOffice. Open-bron Office pakket. (FIXME) diff --git a/reactos/base/applications/rapps/rapps/lmarbles.txt b/reactos/base/applications/rapps/rapps/lmarbles.txt index dac8e7a76f4..9812d030f25 100644 --- a/reactos/base/applications/rapps/rapps/lmarbles.txt +++ b/reactos/base/applications/rapps/rapps/lmarbles.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = LMarbles @@ -35,7 +36,7 @@ Description = Clona Atomix utilizând bibliotecile SDL. Size = 1,39 Mo [Section.041f] -Description = SDL kitaplıklarını kullanan bir Atomix taklidi. +Description = SDL kitaplıklarını kullanan Atomix taklidi. Size = 1,39 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/mcwin32.txt b/reactos/base/applications/rapps/rapps/mcwin32.txt index a77b674e709..086cc7618b1 100644 --- a/reactos/base/applications/rapps/rapps/mcwin32.txt +++ b/reactos/base/applications/rapps/rapps/mcwin32.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Midnight Commander for Windows @@ -17,16 +18,14 @@ Version = Revisione 183 (4.8.11) Licence = GPL versione 3 Description = Un porting Windows 32bit di Midnight Commander. +[Section.0415] +Name = Midnight Commander dla Windows +Licence = GPL wersja 3 +Description = 32-bitowy port GNU Midnight Commander dla Windows. + [Section.041f] Name = Midnight Commander (Windows için) Version = Yapı 183 (4.8.11) Licence = GPL 3. sürüm Description = GNU Midnight Commander'ın 32 bitlik Windows uyarlamasıdır. Size = 2,35 MB - -[Section.0415] -Name = Midnight Commander dla Windows -Version = Build 183 (4.8.11) -Licence = GPL wersja 3 -Description = 32-bitowy port GNU Midnight Commander dla Windows. -Size = 2,35 MB diff --git a/reactos/base/applications/rapps/rapps/mfc40.txt b/reactos/base/applications/rapps/rapps/mfc40.txt index e4e1a5bac04..84e80226bf2 100644 --- a/reactos/base/applications/rapps/rapps/mfc40.txt +++ b/reactos/base/applications/rapps/rapps/mfc40.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = OLE Viewer and Microsoft Foundation Classes version 4 @@ -48,7 +49,7 @@ Size = 865,04 ko [Section.041f] Name = OLE Görüntüleyicisi ve Microsoft Ana Sınıfları (MFC) Sürüm 4 Licence = Bilinmiyor -Description = Birtakım uygulamalar için gereklidir. Şunları içerir: mfc40.dll, msvcrt40.dll. +Description = MFC 4, birtakım uygulamalar için gereklidir. Şunları içerir: mfc40.dll, msvcrt40.dll. Size = 865,04 KB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/mirandaim.txt b/reactos/base/applications/rapps/rapps/mirandaim.txt index 51fdc5fa987..145d7d66582 100644 --- a/reactos/base/applications/rapps/rapps/mirandaim.txt +++ b/reactos/base/applications/rapps/rapps/mirandaim.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Miranda IM @@ -35,7 +36,7 @@ Description = Aplicație de mesagerie instant multiprotocol (open-source) - posi Size = 2,8 Mo [Section.041f] -Description = Bir açık kaynak, çoklu iletişim kurallı ve evgin iletileşme yazılımı. Eksiksiz olarak çalışmayabilir. +Description = Açık kaynak, çoklu iletişim kâideli, evgin iletileşme uygulaması. Eksiksiz olarak çalışmayabilir. Size = 2,8 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/mirc.txt b/reactos/base/applications/rapps/rapps/mirc.txt index 7bbfff1e58a..b8bde6c9037 100644 --- a/reactos/base/applications/rapps/rapps/mirc.txt +++ b/reactos/base/applications/rapps/rapps/mirc.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = mIRC 7 @@ -36,8 +37,8 @@ Description = Cel mai popular client de IRC (Internet Relay Chat). Size = 1,85 Mo [Section.041f] -Licence = Kısıtlı -Description = Umûmî Ağ Eşzamanlı Söyleşi (IRC) istemcileri arasında en tutulanı. +Licence = Paylaşımlı +Description = Umûmî Ağ Eş Zamanlı Söyleşi (IRC) için en çok tutulan istemci. Size = 1,85 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/mirc6.txt b/reactos/base/applications/rapps/rapps/mirc6.txt index 3f90e2bde66..70327578535 100644 --- a/reactos/base/applications/rapps/rapps/mirc6.txt +++ b/reactos/base/applications/rapps/rapps/mirc6.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = mIRC 6 @@ -36,8 +37,8 @@ Description = Cel mai popular client de IRC (Internet Relay Chat). Size = 1,67 Mo [Section.041f] -Licence = Kısıtlı -Description = Umûmî Ağ Eşzamanlı Söyleşi (IRC) istemcileri arasında en tutulanı. +Licence = Paylaşımlı +Description = Umûmî Ağ Eş Zamanlı Söyleşi (IRC) için en çok tutulan istemci. Size = 1,67 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/mono2.txt b/reactos/base/applications/rapps/rapps/mono2.txt index 1bb628fc439..7f97d095cc1 100644 --- a/reactos/base/applications/rapps/rapps/mono2.txt +++ b/reactos/base/applications/rapps/rapps/mono2.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] -Name = Mono .net Development Framework +Name = Mono .NET Development Framework Version = 2.11.4 Licence = Unknown -Description = Open-source .net Framework. +Description = Open-source .NET Framework. Size = 91.93 MB Category = 14 URLSite = http://www.mono-project.com/Main_Page @@ -12,31 +13,31 @@ URLDownload = http://download.mono-project.com/archive/2.11.4/windows-installer/ CDPath = none [Section.0407] -Description = Open Source .net Framework. +Description = Open Source .NET Framework. [Section.040a] Description = Versión open-source de .NET Framework. [Section.040c] -Description = Framework .net open source. +Description = Framework .NET open source. Size = 91,93 Mo [Section.0410] -Description = Versione Open-source di .net Framework. +Description = Versione Open-source di .NET Framework. [Section.0415] -Description = Pakiet Mono .net Framework dla Programistów. +Description = Pakiet Mono .NET Framework dla Programistów. [Section.0418] Licence = Nespecificată -Description = Platformă .net (open-source). +Description = Platformă .NET (open-source). Size = 91,93 Mo [Section.041f] Name = Mono .NET Geliştirme Çatısı Licence = Bilinmiyor -Description = Bir açık kaynak .NET çatısı. +Description = Açık kaynak .NET Çatısı. Size = 91,93 MB [Section.0422] -Description = Відкритий .net Фреймворк. +Description = Відкритий .NET Фреймворк. diff --git a/reactos/base/applications/rapps/rapps/mpc.txt b/reactos/base/applications/rapps/rapps/mpc.txt index 5958f33126f..1f1f1d6f519 100644 --- a/reactos/base/applications/rapps/rapps/mpc.txt +++ b/reactos/base/applications/rapps/rapps/mpc.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Media Player Classic Home Cinema diff --git a/reactos/base/applications/rapps/rapps/mpxplay.txt b/reactos/base/applications/rapps/rapps/mpxplay.txt index 9b2cebfdc4c..00f9e566c76 100644 --- a/reactos/base/applications/rapps/rapps/mpxplay.txt +++ b/reactos/base/applications/rapps/rapps/mpxplay.txt @@ -1,5 +1,7 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = Mpxplay Version = 1.60b @@ -28,5 +30,5 @@ Size = 520 ko Description = Mpxplay - 32-разрядный консольный аудиоплеер для Windows. Вам нужен 7-Zip или подобная утилита для его распаковки. [Section.041f] -Description = Mpxplay, Pencereler için 32 ikillik, konsolluk bir ses oynatıcısıdır. Bunu çıkartmak için 7-Zip ya da 7-Zip benzeri bir yazılım kullanmanız gerekir. +Description = Mpxplay; Windows için, 32 bitlik, konsolluk bir ses oynatıcısıdır. Çıkartmak için 7-Zip ya da benzeri bir yazılım kullanmanız gerekir. Size = 520 KB diff --git a/reactos/base/applications/rapps/rapps/msxml3.txt b/reactos/base/applications/rapps/rapps/msxml3.txt index 5945a66a013..70c46fac930 100644 --- a/reactos/base/applications/rapps/rapps/msxml3.txt +++ b/reactos/base/applications/rapps/rapps/msxml3.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft XML 3 @@ -43,7 +44,7 @@ Size = 1,85 Mo [Section.041f] Licence = Bilinmiyor -Description = Birtakım Microsoft Yükleyicileri için gereklidir. Şunları içerir: msxml3.dll, msxml3a.dll, msxml3r.dll. +Description = MSXML3, birtakım Microsoft Yükleyicileri için gereklidir. Şunları içerir: msxml3.dll, msxml3a.dll, msxml3r.dll. Size = 1,85 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/net11.txt b/reactos/base/applications/rapps/rapps/net11.txt index e7f7d59ca34..bafa8ae5ee4 100644 --- a/reactos/base/applications/rapps/rapps/net11.txt +++ b/reactos/base/applications/rapps/rapps/net11.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft .NET Framework Version 1.1 Redistributable Package @@ -7,25 +8,39 @@ Licence = Unknown Description = Microsoft .NET Framework Version 1.1 - Redistributable Package. Size = 23.14 MB Category = 14 -URLSite = http://www.microsoft.com/en-us/download/details.aspx?id=26 +URLSite = http://www.microsoft.com/en-US/download/details.aspx?id=26 URLDownload = http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe CDPath = none [Section.0407] Description = Microsoft .NET Framework Version 1.1 - Redistributable Paket. +Size = 23.15 MB +URLSite = http://www.microsoft.com/de-DE/download/details.aspx?id=26 +URLDownload = http://download.microsoft.com/download/4/f/3/4f3ac857-e063-45d0-9835-83894f20e808/dotnetfx.exe [Section.040a] Description = Microsoft .NET Framework versión 1.1 - Paquete redistribuible. +Size = 23.15 MB +URLSite = http://www.microsoft.com/es-ES/download/details.aspx?id=26 +URLDownload = http://download.microsoft.com/download/8/f/0/8f023ff4-2dc1-4f10-9618-333f5b9f8040/dotnetfx.exe [Section.040c] Description = Microsoft .NET Framework version 1.1 - Paquet redistribuable. -Size = 23,14 Mo +Size = 23,15 Mo +URLSite = http://www.microsoft.com/fr-FR/download/details.aspx?id=26 +URLDownload = http://download.microsoft.com/download/e/d/a/eda9d4ea-8ec9-4431-8efa-75391fb91421/dotnetfx.exe [Section.0410] Description = Microsoft .NET Framework Version 1.1 - Redistributable Package. +Size = 23.15 MB +URLSite = http://www.microsoft.com/it-IT/download/details.aspx?id=26 +URLDownload = http://download.microsoft.com/download/1/f/a/1fa816d7-a8d6-4f15-b682-b96239e68ab7/dotnetfx.exe [Section.0415] Description = Microsoft .NET Framework Wersja 1.1 - Pakiet Dystrybucyjny. +Size = 23.15 MB +URLSite = http://www.microsoft.com/pl-PL/download/details.aspx?id=26 +URLDownload = http://download.microsoft.com/download/c/9/f/c9f672f3-c14b-4cff-9671-d419842d792d/dotnetfx.exe [Section.0418] Licence = Nespecificată @@ -37,3 +52,5 @@ Name = Microsoft .NET Çatısı Sürüm 1.1 Yeniden Dağıtılabilir Paket Licence = Bilinmiyor Description = Microsoft .NET Çatısı Sürüm 1.1 - Yeniden Dağıtılabilir Paket Size = 23,14 MB +URLSite = http://www.microsoft.com/tr-TR/download/details.aspx?id=26 +URLDownload = http://download.microsoft.com/download/a/f/7/af738ebf-dc15-4c61-a20d-1c29306cd9bc/dotnetfx.exe diff --git a/reactos/base/applications/rapps/rapps/net20.txt b/reactos/base/applications/rapps/rapps/net20.txt index 7827168b10c..15a81edc3a0 100644 --- a/reactos/base/applications/rapps/rapps/net20.txt +++ b/reactos/base/applications/rapps/rapps/net20.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft .NET Framework Version 2.0 Redistributable Package diff --git a/reactos/base/applications/rapps/rapps/net20sp2.txt b/reactos/base/applications/rapps/rapps/net20sp2.txt index cb285f88c61..ede7fa23f0c 100644 --- a/reactos/base/applications/rapps/rapps/net20sp2.txt +++ b/reactos/base/applications/rapps/rapps/net20sp2.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft .NET Framework Version 2.0 Service Pack 2 @@ -13,16 +14,24 @@ CDPath = none [Section.0407] Description = Microsoft .NET Framework Version 2.0 Service Pack 2. +URLSite = http://www.microsoft.com/de-DE/download/details.aspx?id=1639 +URLDownload = http://www.microsoft.com/de-de/download/confirmation.aspx?id=1639&6B49FDFB-8E5B-4B07-BC31-15695C5A2143=1 [Section.040a] Description = Microsoft .NET Framework versión 2.0 Service Pack 2. +URLSite = http://www.microsoft.com/es-ES/download/details.aspx?id=1639 +URLDownload = http://www.microsoft.com/es-es/download/confirmation.aspx?id=1639&6B49FDFB-8E5B-4B07-BC31-15695C5A2143=1 [Section.040c] Description = Microsoft .NET Framework version 2.0 Service Pack 2. Size = 23,84 Mo +URLSite = http://www.microsoft.com/fr-FR/download/details.aspx?id=1639 +URLDownload = http://www.microsoft.com/fr-fr/download/confirmation.aspx?id=1639&6B49FDFB-8E5B-4B07-BC31-15695C5A2143=1 [Section.0415] Description = Microsoft .NET Framework Wersja 2.0 Service Pack 2. +URLSite = http://www.microsoft.com/pl-PL/download/details.aspx?id=1639 +URLDownload = http://www.microsoft.com/pl-pl/download/confirmation.aspx?id=1639&6B49FDFB-8E5B-4B07-BC31-15695C5A2143=1 [Section.0418] Licence = Nespecificată @@ -34,3 +43,5 @@ Name = Microsoft .NET Çatısı Sürüm 2.0 Hizmet Paketi 2 Licence = Bilinmiyor Description = Microsoft .NET Çatısı Sürüm 2.0 - Hizmet Paketi 2 Size = 23,84 MB +URLSite = http://www.microsoft.com/tr-TR/download/details.aspx?id=1639 +URLDownload = http://www.microsoft.com/tr-tr/download/confirmation.aspx?id=1639&6B49FDFB-8E5B-4B07-BC31-15695C5A2143=1 diff --git a/reactos/base/applications/rapps/rapps/npp.txt b/reactos/base/applications/rapps/rapps/npp.txt index 31009edec5b..eb9e917d3e8 100644 --- a/reactos/base/applications/rapps/rapps/npp.txt +++ b/reactos/base/applications/rapps/rapps/npp.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Notepad++ @@ -20,6 +21,7 @@ Description = Un editor de text. [Section.040c] Description = Un éditeur de texte. Size = 7,3 Mo +URLSite = http://notepad-plus-plus.org/fr/ [Section.0410] Description = Un editor di testo. diff --git a/reactos/base/applications/rapps/rapps/offbyone.txt b/reactos/base/applications/rapps/rapps/offbyone.txt index 7d85199b6e8..5899978b181 100644 --- a/reactos/base/applications/rapps/rapps/offbyone.txt +++ b/reactos/base/applications/rapps/rapps/offbyone.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Off By One Browser @@ -39,9 +40,9 @@ Description = Un navigator web foarte mic și rapid compatibil cu HTML 3.2. Size = 1010,89 ko [Section.041f] -Name = Off By One Tarayıcısı +Name = Off By One Tarayıcı Licence = Ücretsiz -Description = Off By One Tarayıcısı, HTML 3.2 desteğiyle çok küçük ve hızlı bir tarayıcıdır. +Description = Off By One Tarayıcı, eksiksiz HTML 3.2 desteğiyle çok küçük ve hızlı bir Umûmî Ağ tarayıcısıdır. Size = 1010,89 KB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/opencodecs.txt b/reactos/base/applications/rapps/rapps/opencodecs.txt index 514944e9d2f..0de6abb7c7f 100644 --- a/reactos/base/applications/rapps/rapps/opencodecs.txt +++ b/reactos/base/applications/rapps/rapps/opencodecs.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL trans by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = xiph.org OpenCodecs @@ -26,5 +27,5 @@ Description = Filtrele DirectShow pentru formatele de fișiere Ogg Vorbis, Speex Size = 2,53 Mo [Section.041f] -Description = Ogg Vorbis, Speex, Theora, FLAC ve WebM kütük türleri için DirectShow süzgeçleri. +Description = Ogg Vorbis, Speex, Theora, FLAC ve WebM kütük biçimleri için DirectShow süzgeçleri. Size = 2,53 MB diff --git a/reactos/base/applications/rapps/rapps/openoffice.txt b/reactos/base/applications/rapps/rapps/openoffice.txt index fd27224897a..3e18dc4de54 100644 --- a/reactos/base/applications/rapps/rapps/openoffice.txt +++ b/reactos/base/applications/rapps/rapps/openoffice.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = OpenOffice 4.0 Version = 4.0.1 Licence = LGPL -Description = THE Open Source Office Suite. +Description = The open source office suite. Size = 136.79 MB Category = 6 URLSite = http://www.openoffice.org/ @@ -12,39 +13,39 @@ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1 CDPath = none [Section.0407] -Description = DIE Open Source Office Suite. -URLSite = http://www.openoffice.org/de/ +Description = DIE Open Source Office Suite. (FIXME) Size = 154.88 MB +URLSite = http://www.openoffice.org/de/ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1/binaries/de/Apache_OpenOffice_4.0.1_Win_x86_install_de.exe [Section.040a] Description = La suite de ofimática de código abierto. -URLSite = http://www.openoffice.org/es/ Size = 126.29 MB +URLSite = http://www.openoffice.org/es/ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1/binaries/es/Apache_OpenOffice_4.0.1_Win_x86_install_es.exe [Section.040c] Description = LA suite bureautique open source. -URLSite = http://www.openoffice.org/fr/ Size = 127,22 Mo +URLSite = http://www.openoffice.org/fr/ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1/binaries/fr/Apache_OpenOffice_4.0.1_Win_x86_install_fr.exe [Section.0410] Description = La suite di office Open Source. -URLSite = http://www.openoffice.org/it/ Size = 132.39 MB +URLSite = http://www.openoffice.org/it/ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1/binaries/it/Apache_OpenOffice_4.0.1_Win_x86_install_it.exe [Section.0413] -Description = Open-bron Office Pakket. -URLSite = http://www.openoffice.org/nl/ +Description = Open-bron Office Pakket. (FIXME) Size = 132.11 MB +URLSite = http://www.openoffice.org/nl/ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1/binaries/nl/Apache_OpenOffice_4.0.1_Win_x86_install_nl.exe [Section.0415] Description = Otwarty pakiet biurowy. -URLSite = http://www.openoffice.org/pl/ Size = 127.47 MB +URLSite = http://www.openoffice.org/pl/ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1/binaries/pl/Apache_OpenOffice_4.0.1_Win_x86_install_pl.exe [Section.0418] @@ -60,11 +61,11 @@ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1 [Section.0422] Description = Відкритий офісний пакет. -URLSite = http://www.openoffice.org/ua/ Size = 136.79 MB +URLSite = http://www.openoffice.org/ua/ [Section.0813] -Description = Open-bron Office Pakket. -URLSite = http://www.openoffice.org/nl/ +Description = Open-bron Office Pakket. (FIXME) Size = 132.11 MB +URLSite = http://www.openoffice.org/nl/ URLDownload = http://download.sourceforge.net/project/openofficeorg.mirror/4.0.1/binaries/nl/Apache_OpenOffice_4.0.1_Win_x86_install_nl.exe diff --git a/reactos/base/applications/rapps/rapps/openoffice2.4.txt b/reactos/base/applications/rapps/rapps/openoffice2.4.txt index 4ea78aa2fe0..6f7fa511d38 100644 --- a/reactos/base/applications/rapps/rapps/openoffice2.4.txt +++ b/reactos/base/applications/rapps/rapps/openoffice2.4.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = OpenOffice 2.4 Version = 2.4.3 Licence = LGPL -Description = THE Open Source Office Suite. +Description = The open source office suite. Size = 113 MB Category = 6 URLSite = http://www.openoffice.org/ @@ -12,7 +13,7 @@ URLDownload = http://archive.services.openoffice.org/pub/openoffice-archive/stab CDPath = none [Section.0407] -Description = DIE Open Source Office Suite. +Description = DIE Open Source Office Suite. (FIXME) Size = 114.25 MB URLSite = http://www.openoffice.org/de/ URLDownload = http://archive.services.openoffice.org/pub/openoffice-archive/localized/de/2.4.3/OOo_2.4.3_Win32Intel_install_de.exe @@ -38,7 +39,7 @@ URLDownload = http://archive.services.openoffice.org/pub/openoffice-archive/loca [Section.0413] Version = 2.4.2 -Description = Open-bron Office Pakket. +Description = Open-bron Office Pakket. (FIXME) Size = 113.8 MB URLSite = http://www.openoffice.org/nl/ URLDownload = http://archive.services.openoffice.org/pub/openoffice-archive/localized/nl/2.4.2/OOo_2.4.2_Win32Intel_install_nl.exe @@ -60,14 +61,14 @@ Description = Bir açık kaynak büro takımı. URLSite = http://www.openoffice.org/tr/ [Section.0422] -URLSite = http://www.openoffice.org/ua/ Description = Відкритий офісний пакет. -URLDownload = http://archive.services.openoffice.org/pub/openoffice-archive/localized/ru/2.4.3/OOo_2.4.3_Win32Intel_install_ru.exe Size = 114.76 MB +URLSite = http://www.openoffice.org/ua/ +URLDownload = http://archive.services.openoffice.org/pub/openoffice-archive/localized/ru/2.4.3/OOo_2.4.3_Win32Intel_install_ru.exe [Section.0813] Version = 2.4.2 -Description = Open-bron Office Pakket. +Description = Open-bron Office Pakket. (FIXME) Size = 113.8 MB URLSite = http://www.openoffice.org/nl/ URLDownload = http://archive.services.openoffice.org/pub/openoffice-archive/localized/nl/2.4.2/OOo_2.4.2_Win32Intel_install_nl.exe diff --git a/reactos/base/applications/rapps/rapps/openttd.txt b/reactos/base/applications/rapps/rapps/openttd.txt index f48893de4ca..a22ab3aa28e 100644 --- a/reactos/base/applications/rapps/rapps/openttd.txt +++ b/reactos/base/applications/rapps/rapps/openttd.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = OpenTTD @@ -35,7 +36,8 @@ Description = Clona (open-source a) motorului de joc "Transport Tycoon Deluxe". Size = 7,0 Mo [Section.041f] -Description = Transport Tycoon Deluxe oyun motorunun bir açık kaynak taklidi. Transport Tycoon'un bir kopyası gerekir. +Licence = GPL 2. sürüm +Description = "Transport Tycoon Deluxe" oyun motorunun açık kaynak taklidi. Transport Tycoon'un bir kopyası gerekir. Size = 7,0 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/opera.txt b/reactos/base/applications/rapps/rapps/opera.txt index 8ce86d78d87..4e86e6748e3 100644 --- a/reactos/base/applications/rapps/rapps/opera.txt +++ b/reactos/base/applications/rapps/rapps/opera.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Opera @@ -43,7 +44,7 @@ Description = Популярный браузер со многими допол [Section.041f] Licence = Ücretsiz -Description = Tutulan Opera Tarayıcı, birçok gelişmiş husûsiyetle ve kendi mail ve BitTorrent istemcileriyle birlikte gelir. +Description = Bir posta ve BitTorrent istemcisini kapsayan birçok gelişmiş husûsiyetle, tutulan Opera Tarayıcı. Size = 12,56 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/opera9.txt b/reactos/base/applications/rapps/rapps/opera9.txt index c118ee1aa5e..52f11828c74 100644 --- a/reactos/base/applications/rapps/rapps/opera9.txt +++ b/reactos/base/applications/rapps/rapps/opera9.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Opera @@ -40,7 +41,7 @@ Description = Популярный браузер со многими допол [Section.041f] Licence = Ücretsiz -Description = Tutulan Opera Tarayıcı, birçok gelişmiş husûsiyetle ve kendi mail ve BitTorrent istemcileriyle birlikte gelir. +Description = Bir posta ve BitTorrent istemcisini kapsayan birçok gelişmiş husûsiyetle, tutulan Opera Tarayıcı. Size = 7,21 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/peazip.txt b/reactos/base/applications/rapps/rapps/peazip.txt index 7a6def37c03..73b6dbb03db 100644 --- a/reactos/base/applications/rapps/rapps/peazip.txt +++ b/reactos/base/applications/rapps/rapps/peazip.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = PeaZip @@ -21,5 +22,6 @@ Description = PeaZip è un manager di file e archivi gratis, multipiattaforma e PeaZip to darmowy, wieloplatformowy menedżer plików i archiwów, o otwartym źródle. Obsługuje ponad 150 formatów archiwów. [Section.041f] -Description = PeaZip; ücretsiz, çapraz platform, açık kaynak bir kütük ve belgelik yöneticisidir. 150'den çok belgelikleme biçimini destekler. +Licence = LGPL 3. sürüm, OpenCandy EULA +Description = PeaZip; ücretsiz, çapraz platform, açık kaynak kütük ve belgelik yöneticisidir. 150'den çok belgelikleme biçimini destekler. Size = 5,8 MB diff --git a/reactos/base/applications/rapps/rapps/pengupop.txt b/reactos/base/applications/rapps/rapps/pengupop.txt index b66cffdd33c..ac058a0bfd6 100644 --- a/reactos/base/applications/rapps/rapps/pengupop.txt +++ b/reactos/base/applications/rapps/rapps/pengupop.txt @@ -1,5 +1,7 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = Pengupop Version = 2.2.3 @@ -24,5 +26,5 @@ Description = Scopul acestui joc este de a arunca globuri colorate în propriul Size = 384 ko [Section.041f] -Description = Oyunun amacı, oyun alanınızda üç ya da daha çok takımdan oluşan renkli küreleri vurmaktır. +Description = Bu oyunun amacı, oyun alanınızda üç ya da daha çok takımdan oluşan renkli küreleri vurmaktır. Size = 384 KB diff --git a/reactos/base/applications/rapps/rapps/photofiltre.txt b/reactos/base/applications/rapps/rapps/photofiltre.txt index eac3f5edfde..2d5a348ca1c 100644 --- a/reactos/base/applications/rapps/rapps/photofiltre.txt +++ b/reactos/base/applications/rapps/rapps/photofiltre.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = PhotoFiltre 7 @@ -28,5 +29,5 @@ Size = 4,99 Mo [Section.041f] Licence = Ücretsiz -Description = Bu sürüm, katmanlarla gelmektedir ancak Stüdyo X sürümünden daha kısıtlıdır. PhotoFiltre Stüdyo, eksiksiz bir resim düzeltme yazılımıdır. +Description = Bu sürüm, katmanlarla gelmektedir ancak Studio X sürümünden daha kısıtlıdır. PhotoFiltre Studio eksiksiz bir resim düzeltme yazılımıdır. Size = 4,99 MB diff --git a/reactos/base/applications/rapps/rapps/pingus.txt b/reactos/base/applications/rapps/rapps/pingus.txt index 2497dae2553..661ced3b738 100644 --- a/reactos/base/applications/rapps/rapps/pingus.txt +++ b/reactos/base/applications/rapps/rapps/pingus.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Pingus @@ -26,5 +27,5 @@ Description = Pingus este un joc-enigmă asemănător cu Lemmings. Size = 16,0 Mo [Section.041f] -Description = Pingus, ücretsiz, Yaban Sıçanları gibi bir bulmaca oyunudur. +Description = Pingus, ücretsiz, Lemmings gibi bir bulmaca oyunudur. Size = 16,0 MB diff --git a/reactos/base/applications/rapps/rapps/pptview.txt b/reactos/base/applications/rapps/rapps/pptview.txt index bab9cb16534..ff2c7fd034b 100644 --- a/reactos/base/applications/rapps/rapps/pptview.txt +++ b/reactos/base/applications/rapps/rapps/pptview.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Powerpoint Viewer @@ -50,7 +51,7 @@ URLDownload = http://download.microsoft.com/download/5/6/E/56E4DBA3-D725-43EA-B1 Name = Microsoft Powerpoint Görüntüleyici Licence = Bilinmiyor Description = Microsoft Powerpoint Görüntüleyici -Size = 60.4 MB +Size = 60,4 MB URLDownload = http://download.microsoft.com/download/4/6/4/4641DACB-5DE8-4E3A-B8F4-39A1C73889D3/PowerPointViewer.exe [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/pspad.txt b/reactos/base/applications/rapps/rapps/pspad.txt index 9ab8c664c38..07a048e8fcf 100644 --- a/reactos/base/applications/rapps/rapps/pspad.txt +++ b/reactos/base/applications/rapps/rapps/pspad.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = PSPad @@ -14,19 +15,20 @@ CDPath = none [Section.0407] Description = Ein Texteditor. +URLSite = http://www.pspad.com/de/ [Section.040a] Description = Un editor de text. +URLSite = http://www.pspad.com/es/ [Section.040c] Description = Un éditeur de texte. Size = 4,46 Mo +URLSite = http://www.pspad.com/fr/ [Section.0410] Description = Un editor di testo. - -Section.0415] -Description = Edytor tekstu. +URLSite = http://www.pspad.com/it/ [Section.0413] Description = Een teksteditor. @@ -41,9 +43,11 @@ Size = 4,46 Mo [Section.0419] Description = Текстовый редактор. +URLSite = http://www.pspad.com/ru/ [Section.041b] Description = Textový editor. +URLSite = http://www.pspad.com/sk/ [Section.041f] Licence = Ücretsiz diff --git a/reactos/base/applications/rapps/rapps/ptanks.txt b/reactos/base/applications/rapps/rapps/ptanks.txt index 4af55891617..71839f61e10 100644 --- a/reactos/base/applications/rapps/rapps/ptanks.txt +++ b/reactos/base/applications/rapps/rapps/ptanks.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Pocket Tanks @@ -27,7 +28,6 @@ Description = Cel mai rapid joc de artilerie pe care-l veți juca vreodată. Size = 2,86 Mo [Section.041f] -Name = Küçük Tanklar -Licence = Kısıtlı -Description = Bu güne kadar oynadığınız en hızlı topçu oyunu. +Licence = Paylaşımlı +Description = Şimdiye kadar oynayacağınız en hızlı topçuluk oyunu. Size = 2,86 MB diff --git a/reactos/base/applications/rapps/rapps/putty.txt b/reactos/base/applications/rapps/rapps/putty.txt index 5902e63a6ef..fe722146a1a 100644 --- a/reactos/base/applications/rapps/rapps/putty.txt +++ b/reactos/base/applications/rapps/rapps/putty.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = PuTTY @@ -35,7 +36,7 @@ Description = Un client gratuit de SSH, Telnet, rlogin, and TCP brut. Size = 1,78 Mo [Section.041f] -Description = Özgür bir SSH, Telnet, rlogin ve ham TCP istemcisi. +Description = Özgür bir SSH, Telnet, rlogin ve işlenmemiş TCP istemcisi. Size = 1,78 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/python.txt b/reactos/base/applications/rapps/rapps/python.txt index 93e3253980b..b89b1f3dffb 100644 --- a/reactos/base/applications/rapps/rapps/python.txt +++ b/reactos/base/applications/rapps/rapps/python.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Python 3 @@ -35,7 +36,7 @@ Description = Un limbaj de programare dinamic și puternic. Size = 23,4 Mo [Section.041f] -Description = İlgi çekici, güçlü ve devingen bir izlenceleme dili. +Description = Dikkat çekici, güçlü ve devingen bir izlenceleme dili. Size = 23,4 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/python2.txt b/reactos/base/applications/rapps/rapps/python2.txt index 049cc5b5172..23b90742890 100644 --- a/reactos/base/applications/rapps/rapps/python2.txt +++ b/reactos/base/applications/rapps/rapps/python2.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Python 2 @@ -35,7 +36,7 @@ Description = Un limbaj de programare dinamic și puternic. Size = 15,48 Mo [Section.041f] -Description = İlgi çekici, güçlü ve devingen bir izlenceleme dili. +Description = Dikkat çekici, güçlü ve devingen bir izlenceleme dili. Size = 15,48 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/qb64sdl.txt b/reactos/base/applications/rapps/rapps/qb64sdl.txt index 75be16553e3..ae334963d4b 100644 --- a/reactos/base/applications/rapps/rapps/qb64sdl.txt +++ b/reactos/base/applications/rapps/rapps/qb64sdl.txt @@ -1,5 +1,7 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = QB64 (SDL version) Version = 0.980 @@ -26,7 +28,7 @@ Description = QB64 este un compilator BASIC auto-compilabil pentru Windows, Linu Size = 39,0 Mo [Section.041f] -Name = QB64 (SDL Sürümü) +Name = QB64 (SDL sürümü) Licence = Ücretsiz -Description = QB64; Mikroyazılım Pencereler, Linux ve Mac OS X için yapılmış, Mikroyazılım QBasic ve Mikroyazılım QuickBASIC ile uyumlu olarak tasarlanan, kendi kendini derleyen bir BASIC derleyicisidir. Bunu çıkartmak için 7-Zip ya da 7-Zip benzeri bir yazılım kullanmanız gerekir. +Description = QB64; Microsoft Windows, Linux ve Mac OS X için, Microsoft QBasic ve Microsoft QuickBASIC ile uyumlu olacak biçimde tasarlanmış, kendi kendini derleyen bir BASIC derleyicisidir. Çıkartmak için 7-Zip ya da benzeri bir yazılım kullanmanız gerekir. Size = 39,0 MB diff --git a/reactos/base/applications/rapps/rapps/qmmp.txt b/reactos/base/applications/rapps/rapps/qmmp.txt index 96bba2adfc7..574e6fc1f95 100644 --- a/reactos/base/applications/rapps/rapps/qmmp.txt +++ b/reactos/base/applications/rapps/rapps/qmmp.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Qmmp (Qt-based Multimedia Player) @@ -29,6 +30,6 @@ Size = 16,0 Mo Description = Аудиоплеер Qmmp (Qt-based Multimedia Player). [Section.041f] -Name = Qt Tabanlı Çokluortam Oynatıcısı -Description = Qmmp, Qt kitaplığının yardımıyla yazılan bir ses oynatıcısıdır. Kullanıcı arayüzüsü WinAMP'ınkine ve XMMS'ninkine benzer. Ayrıca değişik kullanıcı arayüzleri de vardır. +Name = Qmmp (Qt Tabanlı Çoklu Ortam Oynatıcısı) +Description = Qmmp, Qt kitaplığının yardımıyla yazılmış bir ses oynatıcısıdır. Kullanıcı arayüzü WinAMP'a ve XMMS'ye benzer. Başka kullanıcı arayüzleri de vardır. Size = 16,0 MB diff --git a/reactos/base/applications/rapps/rapps/remood.txt b/reactos/base/applications/rapps/rapps/remood.txt index 0b2053c5427..8d5aad16c01 100644 --- a/reactos/base/applications/rapps/rapps/remood.txt +++ b/reactos/base/applications/rapps/rapps/remood.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = ReMooD Version = 0.8a Licence = GPL -Description = ReMooD is a source port of Doom Legacy. It aims to provide the classic Legacy Experience with new features and more stability. +Description = ReMooD is a source port of Doom Legacy. It aims to provide the classic Legacy experience with new features and more stability. Size = 1.15 MB Category = 4 URLSite = http://remood.sourceforge.net/ @@ -38,7 +39,7 @@ Description = ReMooD este o portare a codului Doom Legacy. Scopul e de a oferi c Size = 1,15 Mo [Section.041f] -Description = ReMooD, Doom Legacy'in kaynak kodlarının bir uyarlamasıdır. Bilindik Legacy deneyimiyle yeni husûsiyetler ve daha fazla kararlılık sağlamayı amaçlar. +Description = ReMooD, Doom Legacy'in bir kaynak kodu uyarlamasıdır. Yeni husûsiyetlerle ve daha çok kararlılıkla kökleşik Legacy deneyimini sağlamayı amaçlar. Size = 1,15 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/reshack.txt b/reactos/base/applications/rapps/rapps/reshack.txt index 02fdce2faa2..694d289fb32 100644 --- a/reactos/base/applications/rapps/rapps/reshack.txt +++ b/reactos/base/applications/rapps/rapps/reshack.txt @@ -1,11 +1,12 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Resource Hacker Version = 3.6.0 Licence = Freeware -Description = Resource Hacker, is a freeware utility to view, modify, rename, add, delete and extract resources in 32bit & 64bit Windows executables and resource files (*.res). +Description = Resource Hacker is a freeware utility to view, modify, rename, add, delete and extract resources in 32bit & 64bit Windows executables and resource files (*.res). Size = 730 kB Category = 7 URLSite = http://www.angusj.com/resourcehacker/ @@ -27,7 +28,6 @@ Description = Resource Hacker este un utilitar gratuit pentru inspectarea, modif Size = 730 ko [Section.041f] -Name = Kaynak Korsancısı Licence = Ücretsiz -Description = Kaynak Korsancısı, 32 ya da 64 ikillik Pencereler çaılştırabilirlerini ve .res uzantılı kaynak kütüklerindeki kaynakları görüntüleyen, değiştiren, yeniden adlandıran, ekleyen, silen ve çıkartan ücretsiz bir araçtır. +Description = Resoure Hacker, 32 ve 64 bitlik Windows çaılştırılabilirlerindeki ve kaynak kütüklerindeki (*.res) kaynakları görüntülemek, değiştirmek, yeniden adlandırmak, eklemek, silmek ve çıkarmak için ücretsiz bir araçtır. Size = 730 KB diff --git a/reactos/base/applications/rapps/rapps/rocks.txt b/reactos/base/applications/rapps/rapps/rocks.txt index b17b5290fd0..6a1416aee0f 100644 --- a/reactos/base/applications/rapps/rapps/rocks.txt +++ b/reactos/base/applications/rapps/rapps/rocks.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Rocks'n'Diamonds @@ -26,5 +27,6 @@ Description = Un joc de tip arcadă pentru UNIX, Mac OS X, Windows și DOS; resp Size = 2,42 Mo [Section.041f] -Description = UNIX, Mac OS X, Pencereler ve DOS için yapılmış, atari oyun salonu türünde bir oyun. Şu gelenekleri içerir: "Boulder Dash" (C64), "Zümrüt Mâdeni" (Amiga), "Supaplex" (Amiga ve PC), "Sokoban" (PC). Yazılımı kurmak için ZIP biçiminde çıkartma yeteneği olan bir yazılım gerekir. +Licence = GPL 2. sürüm +Description = "Boulder Dash" (C64), "Emerald Mine" (Amiga), "Supaplex" (Amiga/PC), "Sokoban" (PC) gelenekleri içinde; UNIX, Mac OS X, Windows ve DOS için atari oyun salonu türünde oyun. Kurmak için bir ZIP çıkarma izlencesi gerekir. Size = 2,42 MB diff --git a/reactos/base/applications/rapps/rapps/rosbe.txt b/reactos/base/applications/rapps/rapps/rosbe.txt index bbdd3ebb224..962526d96b5 100644 --- a/reactos/base/applications/rapps/rapps/rosbe.txt +++ b/reactos/base/applications/rapps/rapps/rosbe.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = ReactOS Build Environment @@ -39,7 +40,7 @@ Size = 28,3 Mo [Section.041f] Name = ReactOS Derleme Ortamı -Description = ReactOS Kaynak Kodları'nı derlettirir. Daha çok açıklama için ReactOS Wiki'ye bakınız. +Description = ReactOS Kaynak Kodları'nı derlemenize olanak sağlar. Daha çok açıklama için ReactOS Wiki'ye bakınız. Size = 28,3 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/rosbeamd64.txt b/reactos/base/applications/rapps/rapps/rosbeamd64.txt index f51d300d064..7666ac51dcd 100644 --- a/reactos/base/applications/rapps/rapps/rosbeamd64.txt +++ b/reactos/base/applications/rapps/rapps/rosbeamd64.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = ReactOS Build Environment AMD64 Addon @@ -39,7 +40,7 @@ Size = 15,83 Mo [Section.041f] Name = ReactOS Derleme Ortamı AMD64 Eklentisi -Description = ReactOS AMD64 Kaynak Kodları'nı derlettirir. Daha çok açıklama için ReactOS Wiki'ye bakınız. +Description = ReactOS AMD64 Kaynak Kodları'nı derlemenize olanak sağlar. Daha çok açıklama için ReactOS Wiki'ye bakınız. Size = 15,83 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/rosbearm.txt b/reactos/base/applications/rapps/rapps/rosbearm.txt index 1990dea2ed2..8c46951979d 100644 --- a/reactos/base/applications/rapps/rapps/rosbearm.txt +++ b/reactos/base/applications/rapps/rapps/rosbearm.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = ReactOS Build Environment ARM Addon @@ -36,7 +37,7 @@ Size = 11,15 Mo [Section.041f] Name = ReactOS Derleme Ortamı ARM Eklentisi -Description = ReactOS ARM Kaynak Kodları'nı derlettirir. Daha çok açıklama için ReactOS Wiki'ye bakınız. +Description = ReactOS ARM Kaynak Kodları'nı derlemenize olanak sağlar. Daha çok açıklama için ReactOS Wiki'ye bakınız. Size = 11,15 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/sambatng.txt b/reactos/base/applications/rapps/rapps/sambatng.txt index 0b586ea2c6c..ae30ccaad22 100644 --- a/reactos/base/applications/rapps/rapps/sambatng.txt +++ b/reactos/base/applications/rapps/rapps/sambatng.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Samba TNG @@ -35,7 +36,7 @@ Description = Acest instrument permite accesarea în ReactOS a dosarelor/imprima Size = 2,13 Mo [Section.041f] -Description = Bu araç, ReactOS'ta Windows'un paylaşılan yazıcılarıyla paylaşılan dizinlerine erişimi sağlar. +Description = Bu araç, size, ReactOS'la Windows paylaşılan dizinlerinize ve paylaşılan yazıcılarınıza erişime olanak sağlar. Size = 2,13 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/sbforvmware.txt b/reactos/base/applications/rapps/rapps/sbforvmware.txt index 2e184062f53..97f9ea34666 100644 --- a/reactos/base/applications/rapps/rapps/sbforvmware.txt +++ b/reactos/base/applications/rapps/rapps/sbforvmware.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = SoundBlaster Driver for VMWare Version = 5.12.1.5017 Licence = Unknown -Description = Unzip in the "ReactOS" folder then restart ReactOS twice. +Description = Unzip in the ReactOS's folder then restart ReactOS twice. Size = 2.22 MB Category = 13 URLDownload = http://svn.reactos.org/packages/sb_vmware.exe @@ -13,62 +14,62 @@ CDPath = none [Section.0405] Name = Ovladač SoundBlaster pro VMWare Licence = Neznámá -Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte. +Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte. (FIXME) [Section.0407] Name = SoundBlaster Treiber für VMWare Licence = Unbekannt -Description = Entpacken in das "ReactOS"-Verzeichnis und ReactOS zweimal neustarten. +Description = Entpacken in das "ReactOS"-Verzeichnis und ReactOS zweimal neustarten. (FIXME) [Section.040a] Name = Driver SoundBlaster para VMWare Licence = Desconocida -Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. +Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. (FIXME) [Section.040c] Name = Pilote SoundBlaster pour VMWare Licence = Inconnue -Description = Dézippez dans le répertoire "ReactOS" puis redémarrez deux fois. +Description = Dézippez dans le répertoire "ReactOS" puis redémarrez deux fois. (FIXME) Size = 2,22 Mo [Section.0410] Name = Driver SoundBlaster per VMWare Licence = Sconosciuta -Description = Estrarre nella cartella "ReactOS" e riavviare ReactOS due volte. +Description = Estrarre nella cartella "ReactOS" e riavviare ReactOS due volte. (FIXME) [Section.0413] Name = SoundBlaster Driver voor VMWare Licence = Ongekend -Description = Pak uit in de "ReactOS" folder en start ReactOS tweemaal opnieuw op. +Description = Pak uit in de "ReactOS" folder en start ReactOS tweemaal opnieuw op. (FIXME) [Section.0415] Name = Sterownik SoundBlaster dla VMWare Licence = Nieznana -Description = Rozpakuj zawartość w folderze "ReactOS" i dwukrotnie zrestartuj system. +Description = Rozpakuj zawartość w folderze "ReactOS" i dwukrotnie zrestartuj system. (FIXME) [Section.0418] Name = Modul pilot SoundBlaster pentru VMWare Licence = Nespecificată -Description = Dezarhivați în dosarul „ReactOS” apoi reporniți ReactOS de două ori. +Description = Dezarhivați în dosarul „ReactOS” apoi reporniți ReactOS de două ori. (FIXME) Size = 2,22 Mo [Section.0419] Name = Драйвер SoundBlaster для VMWare Licence = Не указано -Description = Pазархивируйте содержимое в папку "ReactOS", затем дважды перезагрузите систему. +Description = Pазархивируйте содержимое в папку "ReactOS", затем дважды перезагрузите систему. (FIXME) [Section.041f] Name = VMWare için SoundBlaster Sürücüsü Licence = Bilinmiyor -Description = Bunu, ReactOS'un dizinine çıkartıp bilgisayarı iki kez yeniden başlatınız. +Description = ReactOS'un dizinine çıkartınız, sonra bilgisayarı iki kez yeniden başlatınız. Size = 2,22 MB [Section.0422] Name = Драйвер SoundBlaster для VMWare Licence = Невідома -Description = Pозархівуйте вміст в теку "ReactOS" після чого двічі перезавантажте систему. +Description = Pозархівуйте вміст в теку "ReactOS" після чого двічі перезавантажте систему. (FIXME) [Section.0813] Name = SoundBlaster Driver voor VMWare Licence = Ongekend -Description = Pak uit in de "ReactOS" folder en start ReactOS tweemaal opnieuw op. +Description = Pak uit in de "ReactOS" folder en start ReactOS tweemaal opnieuw op. (FIXME) diff --git a/reactos/base/applications/rapps/rapps/scite.txt b/reactos/base/applications/rapps/rapps/scite.txt index 208bcb833fa..e51ffc902c9 100644 --- a/reactos/base/applications/rapps/rapps/scite.txt +++ b/reactos/base/applications/rapps/rapps/scite.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = SciTE Version = 3.4.1 Licence = Freeware -Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs. +Description = SciTE is a SCIntilla based text editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs. Size = 730 kB Category = 7 URLSite = http://www.scintilla.org/ @@ -37,7 +38,7 @@ Size = 730 ko [Section.041f] Licence = Ücretsiz -Description = SciTE, Scintilla tabanlı bir metin düzenleyicisidir. Başlangıçta, Scintilla'yı göstermek için yapılmıştır ancak umûmiyetle izlenceleri yapmak ve çalıştırmak yetenekleriyle birlikte kullanışlı bir düzenleyici olarak geliştirilmiştir. +Description = SciTE, bir Scintilla tabanlı metin düzenleyicisidir. İlk başta Scintilla'yı göstermek için yapıldı, izlenceleri yapmak ve çalıştırmak yetenekleriyle bir umûmiyetle kullanışlı düzenleyici olmak için gelişti. Size = 730 KB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/scummvm.txt b/reactos/base/applications/rapps/rapps/scummvm.txt index c6df83307e6..5984063d547 100644 --- a/reactos/base/applications/rapps/rapps/scummvm.txt +++ b/reactos/base/applications/rapps/rapps/scummvm.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = ScummVM Version = 1.6.0 Licence = GPL -Description = Software that reproduce the working of graphical engine for videogames (Sam and Max, Day of the Tentacle, etc) on ReactOS. +Description = Software that reproduce the working of graphical engine for videogames (Sam and Max, Day of the Tentacle, etc.) on ReactOS. Size = 6.28 MB Category = 4 URLSite = http://scummvm.org/ @@ -12,34 +13,34 @@ URLDownload = http://download.sourceforge.net/project/scummvm/scummvm/1.6.0/scum CDPath = none [Section.0407] -Description = Sam and Max, Day of the Tentacle usw in ReactOS. +Description = Sam and Max, Day of the Tentacle usw in ReactOS. (FIXME) [Section.040a] -Description = Sam and Max, Day of the Tentacle en ReactOS. +Description = Sam and Max, Day of the Tentacle en ReactOS. (FIXME) [Section.040c] -Description = Sam and Max, Day of the Tentacle, etc sur ReactOS. +Description = Sam and Max, Day of the Tentacle, etc sur ReactOS. (FIXME) Size = 6,28 Mo [Section.0410] -Description = Software che riproduce il funzionamento di motori grafici per videogiochi (Sam and Max, Day of the Tentacle, etc) su ReactOS. +Description = Software che riproduce il funzionamento di motori grafici per videogiochi (Sam and Max, Day of the Tentacle, etc) su ReactOS. (FIXME?) [Section.0413] -Description = Sam and Max, Day of the Tentacle, enz. op ReactOS. +Description = Sam and Max, Day of the Tentacle, enz. op ReactOS. (FIXME) [Section.0415] Description = Program pozwalający uruchomić stare gry przygodowe (Sam and Max, Day of the Tentacle, Monkey Island) w ReactOS. [Section.0418] -Description = Motor de execuție pentru jocuri SCUMM. +Description = Motor de execuție pentru jocuri SCUMM. (FIXME) Size = 6,28 Mo [Section.041f] -Description = ReactOS üzerinde Sam ve Max, Day of the Tentacle vb. +Description = ReactOS üzerinde Sam ve Max, Day of the Tentacle gibi vidyo oyunlarının oyun motorlarının çalışmasını taklit eden yazılım. Size = 6,28 MB [Section.0422] -Description = Дозволить грати Sam and Max, Day of the Tentacle та інші класичні ігри в ReactOS. +Description = Дозволить грати Sam and Max, Day of the Tentacle та інші класичні ігри в ReactOS. (FIXME) [Section.0813] -Description = Sam and Max, Day of the Tentacle, enz. op ReactOS. +Description = Sam and Max, Day of the Tentacle, enz. op ReactOS. (FIXME) diff --git a/reactos/base/applications/rapps/rapps/sdl_mixer.txt b/reactos/base/applications/rapps/rapps/sdl_mixer.txt index 236b3dc5095..67b89b3982e 100644 --- a/reactos/base/applications/rapps/rapps/sdl_mixer.txt +++ b/reactos/base/applications/rapps/rapps/sdl_mixer.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Simple Direct Media Layer (SDL) Mixer Version = 1.2.12 Licence = LGPL -Description = Needed for some Open Source Games to run. You need 7-Zip or a similar Utility to extract it. +Description = Needed for some open source games to run. You need 7-Zip or a similar utility to extract it. Size = 548.02 kB Category = 14 URLSite = http://www.libsdl.org/projects/SDL_mixer/ @@ -39,7 +40,7 @@ Size = 548,02 ko [Section.041f] Name = SDL (Bayağı Doğrudan Ortam Katmanı) Karıştırıcısı -Description = Birtakım açık kaynak uygulamalar için gereklidir. Bunu çıkartmak için 7-Zip ya da 7-Zip benzeri bir yazılım kullanmanız gerekir. +Description = Birtakım açık kaynak oyunları çalıştırmak için gereklidir. Çıkartmak için 7-Zip ya da benzeri bir yazılım kullanmanız gerekir. Size = 548,02 KB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/sdl_runtime.txt b/reactos/base/applications/rapps/rapps/sdl_runtime.txt index fa77781a246..3e16033d841 100644 --- a/reactos/base/applications/rapps/rapps/sdl_runtime.txt +++ b/reactos/base/applications/rapps/rapps/sdl_runtime.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Simple Direct Media Layer (SDL) Runtime Version = 1.2.15 Licence = LGPL -Description = Needed for many Open Source Games to run. You need 7-Zip or a similar Utility to extract it. +Description = Needed for many open source games to run. You need 7-Zip or a similar utility to extract it. Size = 136.67 kB Category = 14 URLSite = http://www.libsdl.org/ @@ -40,7 +41,7 @@ Size = 136,67 ko [Section.041f] Name = SDL (Bayağı Doğrudan Ortam Katmanı) Yürütücüsü -Description = Birtakım açık kaynak uygulamalar için gereklidir. Bunu çıkartmak için 7-Zip ya da 7-Zip benzeri bir yazılım kullanmanız gerekir. +Description = Birçok açık kaynak oyunu çalıştırmak için gereklidir. Çıkartmak için 7-Zip ya da benzeri bir yazılım kullanmanız gerekir. Size = 136,67 KB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/seamonkey.txt b/reactos/base/applications/rapps/rapps/seamonkey.txt index 7e978dbe1f8..706345b6968 100644 --- a/reactos/base/applications/rapps/rapps/seamonkey.txt +++ b/reactos/base/applications/rapps/rapps/seamonkey.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Mozilla SeaMonkey @@ -51,7 +52,7 @@ Size = 24.27 MB URLDownload = http://ftp.mozilla.org/pub/mozilla.org/seamonkey/releases/2.25/win32/ru/SeaMonkey%20Setup%202.25.exe [Section.041f] -Description = Bu; yalnızca Tarayıcı, Mail, Söyleşi ve Yazar'dan oluşan, hiç gereksinim duymayacağınız bir bohçadır. +Description = Mozilla Bohçası sağ. Bu, hiç gereksinim duymayacağınız, yalnızca Tarayıcı, Posta, Söyleşi ve Yazar bohçasıdır. Size = 23,83 MB URLDownload = http://ftp.mozilla.org/pub/mozilla.org/seamonkey/releases/2.25/win32/tr/SeaMonkey%20Setup%202.25.exe diff --git a/reactos/base/applications/rapps/rapps/smplayer.txt b/reactos/base/applications/rapps/rapps/smplayer.txt index ca7683d142e..80fab3ea53d 100644 --- a/reactos/base/applications/rapps/rapps/smplayer.txt +++ b/reactos/base/applications/rapps/rapps/smplayer.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = SMPlayer @@ -38,7 +39,7 @@ Description = Lector multimedia (interfață pentru MPlayer). Size = 20,7 Mo [Section.041f] -Description = MPlayer için çizgelik önyüz. +Description = MPlayer için çizgelik ön yüz. Size = 20,7 MB URLSite = http://smplayer.sourceforge.net/tr/info diff --git a/reactos/base/applications/rapps/rapps/snoopy.txt b/reactos/base/applications/rapps/rapps/snoopy.txt index ad350ef230c..cfc98f0028c 100644 --- a/reactos/base/applications/rapps/rapps/snoopy.txt +++ b/reactos/base/applications/rapps/rapps/snoopy.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Snoopy @@ -13,11 +14,12 @@ CDPath = none [Section.0407] Description = Das Original C64 Snoopy Remake. +URLSite = http://www.blueskied.com/spiele-spielen/snoopy.htm [Section.0410] Description = Il remake del gioco Snoopy per Commodore 64. [Section.041f] Licence = Ücretsiz -Description = Özgün C64 Snoppy'nın yeniden yapılmışı. +Description = Özgün C64 Snoopy'in yeniden yapılmışı. Size = 704 KB diff --git a/reactos/base/applications/rapps/rapps/stamina.txt b/reactos/base/applications/rapps/rapps/stamina.txt index 0ff51a0f879..c06941f1f10 100644 --- a/reactos/base/applications/rapps/rapps/stamina.txt +++ b/reactos/base/applications/rapps/rapps/stamina.txt @@ -1,5 +1,6 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Stamina 2.5 @@ -24,5 +25,5 @@ Description = Tutor gratuit pentru dactilografiere. Size = 4,7 Mo [Section.041f] -Description = Ücretsiz bir düğme takımında yazma öğreticisi. +Description = Ücretsiz düğme takımında yazma öğreticisi. Size = 4,7 MB diff --git a/reactos/base/applications/rapps/rapps/steam.txt b/reactos/base/applications/rapps/rapps/steam.txt index 9197a95b539..82d13f58ff3 100644 --- a/reactos/base/applications/rapps/rapps/steam.txt +++ b/reactos/base/applications/rapps/rapps/steam.txt @@ -1,10 +1,10 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] -Name = STEAM -Version = 1.0 +Name = Steam Licence = Freeware -Description = The STEAM Gaming platform used by many games these days. +Description = The Steam gaming platform used by many games these days. Size = 1.59 MB Category = 4 URLSite = http://steampowered.com/ @@ -12,37 +12,46 @@ URLDownload = http://storefront.steampowered.com/download/SteamInstall.msi CDPath = none [Section.0407] -Description = Die STEAM Spieleplattform, die von viele Spielen verwendet wird. +Description = Die Steam Spieleplattform, die von viele Spielen verwendet wird. +URLSite = http://store.steampowered.com/?l=german [Section.040a] -Description = La plataforma de juego STEAM usada por muchos juegos actuales. +Description = La plataforma de juego Steam usada por muchos juegos actuales. +URLSite = http://store.steampowered.com/?l=spanish [Section.040c] -Description = La plateforme de jeu STEAM utilisée par beaucoup de jeux de nos jours. +Description = La plateforme de jeu Steam utilisée par beaucoup de jeux de nos jours. Size = 1,59 Mo +URLSite = http://store.steampowered.com/?l=french [Section.0410] -Description = La piattaforma di gioco STEAM usata da molti giochi in questi giorni. +Description = La piattaforma di gioco Steam usata da molti giochi in questi giorni. +URLSite = http://store.steampowered.com/?l=italian [Section.0413] -Description = Het STEAM platform, veel gebruikt voor spelletjes. +Description = Het Steam platform, veel gebruikt voor spelletjes. +URLSite = http://store.steampowered.com/?l=dutch [Section.0415] -Description = STEAM - platforma, którą używa obecnie wiele gier. +Description = Steam - platforma, którą używa obecnie wiele gier. +URLSite = http://store.steampowered.com/?l=polish [Section.0418] Licence = Gratuită -Description = Platforma de joc STEAM, utilizată de multe jocuri în zilele de astăzi. +Description = Platforma de joc Steam, utilizată de multe jocuri în zilele de astăzi. Size = 1,59 Mo URLSite = http://store.steampowered.com/?l=romanian [Section.041f] Licence = Ücretsiz -Description = Bu günlerde STEAM oyun platformu, birçok oyun tarafından kullanılmaktadır. +Description = Bugünlerde Steam oyun platformu birçok oyun eliyle kullanılmaktadır. Size = 1,59 MB +URLSite = http://store.steampowered.com/?l=turkish [Section.0422] Description = Ігрова платформа, що використовується багатьма іграми. +URLSite = http://store.steampowered.com/?l=ukrainian [Section.0813] -Description = Het STEAM platform, veel gebruikt voor spelletjes. +Description = Het Steam platform, veel gebruikt voor spelletjes. +URLSite = http://store.steampowered.com/?l=dutch diff --git a/reactos/base/applications/rapps/rapps/sumatrapdf.txt b/reactos/base/applications/rapps/rapps/sumatrapdf.txt index a4c3a8aa13e..d48bad627fd 100644 --- a/reactos/base/applications/rapps/rapps/sumatrapdf.txt +++ b/reactos/base/applications/rapps/rapps/sumatrapdf.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = SumatraPDF @@ -12,32 +13,36 @@ URLDownload = https://kjkpub.s3.amazonaws.com/sumatrapdf/rel/SumatraPDF-2.4-inst CDPath = none [Section.0407] -Description = Sumatra PDF ist ein freies, schlankes, Open-Source PDF-Anzeigeprogramm. +Description = Sumatra PDF ist ein freies, schlankes, Open-Source PDF-Anzeigeprogramm. (FIXME) +URLSite = http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader-de.html [Section.040a] -Description = Sumatra PDF es un lector PDF ligero, libre y open-source. +Description = Sumatra PDF es un lector PDF ligero, libre y open-source. (FIXME) +URLSite = http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader-es.html [Section.040c] -Description = Sumatra PDF est un lecteur PDF léger, libre et open-source. +Description = Sumatra PDF est un lecteur PDF léger, libre et open-source. (FIXME) Size = 4,0 Mo +URLSite = http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader-fr.html [Section.0410] -Description = Sumatra PDF è un visualizzatore di file PDF, leggero e open source. +Description = Sumatra PDF è un visualizzatore di file PDF, leggero e open source. (FIXME) [Section.0413] -Description = Sumatra PDF is een slanke, gratis, open-bron PDF lezer. +Description = Sumatra PDF is een slanke, gratis, open-bron PDF lezer. (FIXME) [Section.0415] -Description = Sumatra PDF to mały, darmowy, otwarty czytnik PDF. +Description = Sumatra PDF to mały, darmowy, otwarty czytnik PDF. (FIXME) [Section.0418] -Description = Lector PDF - ușor, gratuit (open-source), și portabil. +Description = Lector PDF - ușor, gratuit (open-source), și portabil. (FIXME) Size = 4,0 Mo URLSite = http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader-ro.html [Section.041f] -Description = SumatraPDF; yeğni, ücretsiz ve açık kaynak bir PDF okuyucusudur. Taşınabilirdir. +Licence = GPL 3. sürüm +Description = SumatraPDF; yeğni, ücretsiz ve açık kaynak bir PDF okuyucusudur. Kutunun dışında taşınabilirdir. Size = 4,0 MB [Section.0813] -Description = Sumatra PDF is een slanke, gratis, open-bron PDF lezer. +Description = Sumatra PDF is een slanke, gratis, open-bron PDF lezer. (FIXME) diff --git a/reactos/base/applications/rapps/rapps/summerbound.txt b/reactos/base/applications/rapps/rapps/summerbound.txt index e45c2c9fba8..d9889a9da90 100644 --- a/reactos/base/applications/rapps/rapps/summerbound.txt +++ b/reactos/base/applications/rapps/rapps/summerbound.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Summer Bound @@ -13,6 +14,7 @@ CDPath = none [Section.0407] Description = Ein Spiel, ähnlich zu Frozen Fruits. +URLSite = http://www.blueskied.com/freeware-spiele/runterladen.htm [Section.0410] Description = Un gioco simile a Frozen Fuits diff --git a/reactos/base/applications/rapps/rapps/superdxb.txt b/reactos/base/applications/rapps/rapps/superdxb.txt index bd0151d8bce..2213f3bc5a4 100644 --- a/reactos/base/applications/rapps/rapps/superdxb.txt +++ b/reactos/base/applications/rapps/rapps/superdxb.txt @@ -1,5 +1,7 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = Super DX-Ball Version = 1.1 @@ -26,7 +28,6 @@ Description = Un joc ce implică spargerea de cărămizi. Size = 3,8 Mo [Section.041f] -Name = Süper DX-Ball -Licence = Kısıtlı -Description = Süper DX-Ball, canlı ve renkli bir tuğla kırma oyunudur. +Licence = Paylaşımlı +Description = Super DX-Ball canlı ve renkli bir tuğla kırma oyunudur. Size = 3,8 MB diff --git a/reactos/base/applications/rapps/rapps/superfinder.txt b/reactos/base/applications/rapps/rapps/superfinder.txt index 9695da8b2f4..c08ee2ab990 100644 --- a/reactos/base/applications/rapps/rapps/superfinder.txt +++ b/reactos/base/applications/rapps/rapps/superfinder.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Super Finder XT Version = 1.6.3.2 Licence = Freeware -Description = A fast and feature rich search Application. +Description = A fast and feature rich search application. Size = 4.94 MB Category = 12 URLSite = http://fsl.sytes.net/ssearchxt.html diff --git a/reactos/base/applications/rapps/rapps/supertux.txt b/reactos/base/applications/rapps/rapps/supertux.txt index 20dd10d9b38..c7416cc0f33 100644 --- a/reactos/base/applications/rapps/rapps/supertux.txt +++ b/reactos/base/applications/rapps/rapps/supertux.txt @@ -1,5 +1,7 @@ ; UTF-8 -; PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) + [Section] Name = SuperTux Version = 0.1.3 @@ -25,5 +27,5 @@ Description = SuperTux este un joc gratuit, cu surse publice, pe platformă bi-d Size = 7,3 Mo [Section.041f] -Description = SuperTux, ücretsiz, iki boyutlu ve açık kaynak bir platform oyunudur. +Description = SuperTux, ücretsiz, açık kaynak ve iki boyutlu bir platform oyunudur. Size = 7,3 MB diff --git a/reactos/base/applications/rapps/rapps/tahoma.txt b/reactos/base/applications/rapps/rapps/tahoma.txt index e40f3a14a97..ae23090eb89 100644 --- a/reactos/base/applications/rapps/rapps/tahoma.txt +++ b/reactos/base/applications/rapps/rapps/tahoma.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Tahoma Font @@ -42,7 +43,7 @@ Size = 305,12 ko [Section.041f] Name = Microsoft Tahoma Yazı Tipi Licence = Bilinmiyor -Description = Tahoma Yazı Tipleri. Steam gibi birtakım yazılımlar için gereklidir. Şunları içerir: Tahoma.ttf, Tahomabd.ttf. +Description = Tahoma Yazı Tipi paketi, Steam gibi birtakım uygulamalar için gereklidir. Şunları içerir: Tahoma.ttf, Tahomabd.ttf. Size = 305,12 KB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/thunderbird.txt b/reactos/base/applications/rapps/rapps/thunderbird.txt index 427b78a8ac9..bb86e892602 100644 --- a/reactos/base/applications/rapps/rapps/thunderbird.txt +++ b/reactos/base/applications/rapps/rapps/thunderbird.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Mozilla Thunderbird 24 @@ -60,7 +61,7 @@ URLSite = https://www.mozilla.org/ru/thunderbird/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/24.4.0/win32/ru/Thunderbird%20Setup%2024.4.0.exe [Section.041f] -Description = Özgür mail istemcileri arasında en tutulanı ve en iyisi. +Description = Özgür posta istemcileri arasında en tutulanı ve en iyilerinden biri. Size = 20,99 MB URLSite = https://www.mozilla.org/tr/thunderbird/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/24.4.0/win32/tr/Thunderbird%20Setup%2024.4.0.exe @@ -70,3 +71,9 @@ Description = Найпопулярніший та один з кращих по Size = 21.41 MB URLSite = https://www.mozilla.org/uk/thunderbird/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/24.4.0/win32/uk/Thunderbird%20Setup%2024.4.0.exe + +[Section.0813] +Description = De meest populaire en een van de beste gratis e-mail-programma's. +Size = 9.71 MB +URLSite = https://www.mozilla.org/nl/thunderbird/ +URLDownload = http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/24.4.0/win32/nl/Thunderbird%20Setup%2024.4.0.exe diff --git a/reactos/base/applications/rapps/rapps/thunderbird3.txt b/reactos/base/applications/rapps/rapps/thunderbird3.txt index ffc3bce18fd..e013e28645d 100644 --- a/reactos/base/applications/rapps/rapps/thunderbird3.txt +++ b/reactos/base/applications/rapps/rapps/thunderbird3.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Mozilla Thunderbird @@ -60,7 +61,7 @@ URLSite = https://www.mozilla.org/ru/thunderbird/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.20/win32/ru/Thunderbird%20Setup%203.1.20.exe [Section.041f] -Description = Özgür mail istemcileri arasında en tutulanı ve en iyisi. +Description = Özgür posta istemcileri arasında en tutulanı ve en iyilerinden biri. Size = 8,91 MB URLSite = https://www.mozilla.org/tr/thunderbird/ URLDownload = http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.20/win32/tr/Thunderbird%20Setup%203.1.20.exe diff --git a/reactos/base/applications/rapps/rapps/tileworld.txt b/reactos/base/applications/rapps/rapps/tileworld.txt index 4aa47a2da7a..70b2ce163c9 100644 --- a/reactos/base/applications/rapps/rapps/tileworld.txt +++ b/reactos/base/applications/rapps/rapps/tileworld.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Tile World Version = 1.3.0 Licence = GPL -Description = Nice Clone of Chip's Challenge originally made for the Atari Lynx. Includes free CCLP2 Graphics Pack, so you dont need the copyrighted Original. +Description = Nice clone of Chip's Challenge originally made for the Atari Lynx. Includes free CCLP2 Graphics Pack, so you dont need the copyrighted original. Size = 1.16 MB Category = 4 URLSite = http://www.muppetlabs.com/~breadbox/software/tworld/ @@ -35,7 +36,7 @@ Description = Clonă a Chip's Challenge, creată inițial pentru Atari Lynx. Inc Size = 1,16 Mo [Section.041f] -Description = Başlangıçta Atari Lynx için yapılan Chip's Challenge adlı oyunun iyi bir taklidi. Ücretsiz CCLP2 Çizge Paketi'ni de kapsadığından bunun telifli özgününe gerek yoktur. +Description = Başlangıçta Atari Lynx için yapılan Chip's Challenge oyununun iyi bir taklidi. Ücretsiz CCLP2 Çizge Paketi'ni kapsar, bu yüzden telifli özgününe gereksinim duymazsınız. Size = 1,16 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/totalcommander.txt b/reactos/base/applications/rapps/rapps/totalcommander.txt index ca17f0ac6cc..07446c9e1ad 100644 --- a/reactos/base/applications/rapps/rapps/totalcommander.txt +++ b/reactos/base/applications/rapps/rapps/totalcommander.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Total Commander @@ -13,6 +14,7 @@ CDPath = none [Section.0407] Description = Total Commander ist ein Dateimanager mit zwei nebeneinander liegenden Panels. +URLSite = http://www.ghisler.com/deutsch.htm [Section.0410] Description = Total Commander è un file manager con due pannelli affiancati. @@ -29,8 +31,8 @@ Description = Total Commander este un gestionar de fișiere după modelul «dou Size = 3,5 Mo [Section.041f] -Licence = Kısıtlı -Description = Total Commander, yan yana iki bölmenin bulunduğu bir kütük yöneticisidir. +Licence = Paylaşımlı +Description = Total Commander, yan yana iki bölmeli bir kütük yöneticisidir. Size = 3,5 MB [Section.0813] diff --git a/reactos/base/applications/rapps/rapps/tuxpaint.txt b/reactos/base/applications/rapps/rapps/tuxpaint.txt index 9a23c5034bd..49209fd4d3a 100644 --- a/reactos/base/applications/rapps/rapps/tuxpaint.txt +++ b/reactos/base/applications/rapps/rapps/tuxpaint.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = TuxPaint Version = 0.9.21c Licence = GPL -Description = An Open Source bitmap graphics editor geared towards young children. +Description = An open source bitmap graphics editor geared towards young children. Size = 10.42 MB Category = 3 URLSite = http://tuxpaint.org/ @@ -38,7 +39,7 @@ Description = Un editor grafic bitmap, adresat copiilor. Size = 10,42 Mo [Section.041f] -Description = Çocuklar için açık kaynak bit eşlem çizge düzenleyicisi. +Description = Küçük çocuklar için yapılmış bir açık kaynak bit eşlem çizge düzenleyicisi. Size = 10,42 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/ultravnc.txt b/reactos/base/applications/rapps/rapps/ultravnc.txt index 06e225f312b..1a7446a9945 100644 --- a/reactos/base/applications/rapps/rapps/ultravnc.txt +++ b/reactos/base/applications/rapps/rapps/ultravnc.txt @@ -1,10 +1,11 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = UltraVNC Version = 1.1.9.0 Licence = GPL -Description = Open-source VNC client/server. +Description = Open source VNC client/server. Size = 3.27 MB Category = 5 URLSite = http://www.uvnc.com/ @@ -35,7 +36,7 @@ Description = Client/server VNC (open-source). Size = 3,27 Mo [Section.041f] -Description = Açık kaynak bir VNC istemcisi ve bir VNC sunucusu. +Description = Açık kaynak VNC istemcisi ve sunucusu. Size = 3,27 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/utorrent.txt b/reactos/base/applications/rapps/rapps/utorrent.txt index 6a4bcc1a21a..0fb3c5aae9c 100644 --- a/reactos/base/applications/rapps/rapps/utorrent.txt +++ b/reactos/base/applications/rapps/rapps/utorrent.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = µTorrent @@ -50,8 +51,8 @@ Licence = Бесплатная для некоммерческого испол Description = Маленький и быстрый клиент BitTorrent. [Section.041f] -Licence = Ticârî olmayan kullanımlarda ücretsiz. -Description = Küçük ve hızlı bir BitTorrent istemcisi. +Licence = Tecimlik olmayan kullanımlar için ücretsiz. +Description = Küçük ve hızlı BitTorrent istemcisi. Size = 1,6 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/vb5run.txt b/reactos/base/applications/rapps/rapps/vb5run.txt index b4813f9a136..26e78bc3215 100644 --- a/reactos/base/applications/rapps/rapps/vb5run.txt +++ b/reactos/base/applications/rapps/rapps/vb5run.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Visual Basic 5 Runtime diff --git a/reactos/base/applications/rapps/rapps/vb6run.txt b/reactos/base/applications/rapps/rapps/vb6run.txt index 1c48f22e06f..b6a0291cbb5 100644 --- a/reactos/base/applications/rapps/rapps/vb6run.txt +++ b/reactos/base/applications/rapps/rapps/vb6run.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Visual Basic 6 Runtime diff --git a/reactos/base/applications/rapps/rapps/vc2005sp1run.txt b/reactos/base/applications/rapps/rapps/vc2005sp1run.txt index c5c773a5a86..b5aac6a4e5c 100644 --- a/reactos/base/applications/rapps/rapps/vc2005sp1run.txt +++ b/reactos/base/applications/rapps/rapps/vc2005sp1run.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Visual C++ 2005 SP1 Redistributable Package @@ -44,7 +45,7 @@ Size = 2,6 Mo [Section.041f] Name = Microsoft Visual C++ 2005 SP1 Yeniden Dağıtılabilir Paket Licence = Bilinmiyor -Description = Microsoft Visual Studio 2005 SP1 Yürütücüsü. Şunları içerir: atl80.dll, mfc80.dll, mfcm80.dll, mfcm80u.dll, msdia80.dll, msvcm80.dll, msvcp80.dll, msvcr80.dll, vcomp.dll. +Description = Microsoft Visual Studio 2005 Yürütücüsü SP1. Şunları içerir: atl80.dll, mfc80.dll, mfcm80.dll, mfcm80u.dll, msdia80.dll, msvcm80.dll, msvcp80.dll, msvcr80.dll, vcomp.dll. Size = 2,6 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/vc2008sp1run.txt b/reactos/base/applications/rapps/rapps/vc2008sp1run.txt index 1920ff12472..dd2527f40ac 100644 --- a/reactos/base/applications/rapps/rapps/vc2008sp1run.txt +++ b/reactos/base/applications/rapps/rapps/vc2008sp1run.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Visual C++ 2008 SP1 Redistributable Package diff --git a/reactos/base/applications/rapps/rapps/vc2010run.txt b/reactos/base/applications/rapps/rapps/vc2010run.txt index 99c699761e0..c579426f2ef 100644 --- a/reactos/base/applications/rapps/rapps/vc2010run.txt +++ b/reactos/base/applications/rapps/rapps/vc2010run.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Visual C++ 2010 Redistributable Package diff --git a/reactos/base/applications/rapps/rapps/vc6run.txt b/reactos/base/applications/rapps/rapps/vc6run.txt index 9085eb47563..203c5227cc8 100644 --- a/reactos/base/applications/rapps/rapps/vc6run.txt +++ b/reactos/base/applications/rapps/rapps/vc6run.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Visual C++ 6 Redistributable Package diff --git a/reactos/base/applications/rapps/rapps/vlc.txt b/reactos/base/applications/rapps/rapps/vlc.txt index 6aeca7556a6..205f84ed336 100644 --- a/reactos/base/applications/rapps/rapps/vlc.txt +++ b/reactos/base/applications/rapps/rapps/vlc.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = VLC media player diff --git a/reactos/base/applications/rapps/rapps/winboard.txt b/reactos/base/applications/rapps/rapps/winboard.txt index 483140c9c02..adbc371bf2e 100644 --- a/reactos/base/applications/rapps/rapps/winboard.txt +++ b/reactos/base/applications/rapps/rapps/winboard.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = WinBoard @@ -35,7 +36,7 @@ Description = WinBoard este o tablă de șah grafică pentru Windows/ReactOS ce Size = 5,93 Mo [Section.041f] -Description = WinBoard; GNU Chess, Crafty ve diğer satranç motorlarını Umûmî Ağ satranç sunucuları ve maille yazışmalı satranç için bir arayüz olarak sunan, Windows/ReactOS için bir çizgelik satranç tahtasıdır. +Description = WinBoard; GNU Chess, Crafty ve diğer satranç motorlarını Umûmî Ağ satranç sunucuları ve postayla yazışmalı satranç için bir arayüz olarak sunan, Windows/ReactOS için bir çizgelik satranç tahtasıdır. Size = 5,93 MB [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/wme9.txt b/reactos/base/applications/rapps/rapps/wme9.txt index a6723407167..23d57556cd4 100644 --- a/reactos/base/applications/rapps/rapps/wme9.txt +++ b/reactos/base/applications/rapps/rapps/wme9.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Windows Media Encoder 9 diff --git a/reactos/base/applications/rapps/rapps/wordview.txt b/reactos/base/applications/rapps/rapps/wordview.txt index c2c46eeb8b7..1c95d061cac 100644 --- a/reactos/base/applications/rapps/rapps/wordview.txt +++ b/reactos/base/applications/rapps/rapps/wordview.txt @@ -1,4 +1,5 @@ ; UTF-8 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Microsoft Word Viewer @@ -50,7 +51,7 @@ URLDownload = http://download.microsoft.com/download/1/2/3/123d3dc8-6f3f-473f-ac Name = Microsoft Word Görüntüleyici Licence = Bilinmiyor Description = Microsoft Word Görüntüleyici -Size = 24.55 MB +Size = 24,55 MB URLDownload = http://download.microsoft.com/download/7/6/e/76efefb4-9575-4903-ac2a-180c280ab6c7/wordview_tr-tr.exe [Section.0422] diff --git a/reactos/base/applications/rapps/rapps/zaz.txt b/reactos/base/applications/rapps/rapps/zaz.txt index ce7ff58e402..9ecd11079d3 100644 --- a/reactos/base/applications/rapps/rapps/zaz.txt +++ b/reactos/base/applications/rapps/rapps/zaz.txt @@ -1,5 +1,6 @@ ; UTF-8 -;PL translation by wojo664 +; Polish translation by wojo664 +; Turkish translation by Erdem Ersoy (eersoy93) (erdemersoy@live.com) [Section] Name = Zaz From 1d4476db48849b89f3c99015208338f0fcc0991f Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 11:40:54 +0000 Subject: [PATCH 34/81] =?UTF-8?q?[FONTS]=20*=20Update=20tahoma.ttf=20and?= =?UTF-8?q?=20tahomabd.ttf.=20CORE-7909=20#resolve=20#comment=20Committed?= =?UTF-8?q?=20in=20r63325.=20Thanks=20=C8=98tefan!=20CORE-8080?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=63325 --- reactos/media/fonts/tahoma.ttf | Bin 100420 -> 143652 bytes reactos/media/fonts/tahomabd.ttf | Bin 92268 -> 137272 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/media/fonts/tahoma.ttf b/reactos/media/fonts/tahoma.ttf index d59769461846e157679c1d84bc936def48a48db9..4f68d1edfa825a0b27e0f41932867b768157a7a7 100644 GIT binary patch delta 53083 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 delta 9414 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 E0eIl+wg3PC diff --git a/reactos/media/fonts/tahomabd.ttf b/reactos/media/fonts/tahomabd.ttf index 007f9ad81be613790b8726b1acded7146e9d1c2f..c01f9e19f33b60ae98212d7a253cde7ccf7159de 100644 GIT binary patch delta 63327 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 delta 18171 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 L8aM*M Date: Sat, 17 May 2014 12:55:06 +0000 Subject: [PATCH 35/81] [NTOSKRNL] xHalIoReadPartitionTable: Only used non-container partition entries have a non-zero partition number. svn path=/trunk/; revision=63326 --- reactos/ntoskrnl/fstub/disksup.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/fstub/disksup.c b/reactos/ntoskrnl/fstub/disksup.c index df2ce496f6f..35ac482da17 100644 --- a/reactos/ntoskrnl/fstub/disksup.c +++ b/reactos/ntoskrnl/fstub/disksup.c @@ -1655,8 +1655,7 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, UInt32x32To64(GET_PARTITION_LENGTH(PartitionDescriptor), SectorSize); - /* FIXME: REACTOS HACK */ - PartitionInfo->PartitionNumber = i + 1; + PartitionInfo->PartitionNumber = (!IsContainerPartition(PartitionType)) ? i : 0; } else { @@ -1667,7 +1666,6 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, PartitionInfo->PartitionLength.QuadPart = 0; PartitionInfo->HiddenSectors = 0; - /* FIXME: REACTOS HACK */ PartitionInfo->PartitionNumber = 0; } } From 9ef81cf0389539c5f7c90edcfc2e27c7c4316d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 17 May 2014 13:26:32 +0000 Subject: [PATCH 36/81] [GREEN]: Fix 2nd parameter of ObOpenObjectByName. svn path=/trunk/; revision=63327 --- rosapps/drivers/green/pnp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosapps/drivers/green/pnp.c b/rosapps/drivers/green/pnp.c index a5253e3938d..a3ef66fa885 100644 --- a/rosapps/drivers/green/pnp.c +++ b/rosapps/drivers/green/pnp.c @@ -50,7 +50,7 @@ CreateGreenFdo( InitializeObjectAttributes(&ObjectAttributes, &DriverExtension->AttachedDeviceName, OBJ_KERNEL_HANDLE, NULL, NULL); Status = ObOpenObjectByName( &ObjectAttributes, - IoFileObjectType, + *IoFileObjectType, KernelMode, NULL, DesiredAccess, From b0f91e882d1bbd148b14dc6b352701a4e6394151 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 14:00:54 +0000 Subject: [PATCH 37/81] [PSDK] * Add some missing definitions. * Fix SCardReleaseStartedEvent(). svn path=/trunk/; revision=63328 --- reactos/include/psdk/winscard.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/reactos/include/psdk/winscard.h b/reactos/include/psdk/winscard.h index 825e26df447..884d350ace0 100644 --- a/reactos/include/psdk/winscard.h +++ b/reactos/include/psdk/winscard.h @@ -24,6 +24,11 @@ #include #include +/* Valid scopes for contexts */ +#define SCARD_SCOPE_USER 0 +#define SCARD_SCOPE_TERMINAL 1 +#define SCARD_SCOPE_SYSTEM 2 + #ifndef _LPCBYTE_DEFINED #define _LPCBYTE_DEFINED typedef const BYTE *LPCBYTE; @@ -129,7 +134,7 @@ LONG WINAPI SCardLocateCardsByATRW(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPS #define SCardLocateCardsByATR WINELIB_NAME_AW(SCardLocateCardsByATR) LONG WINAPI SCardReconnect(SCARDHANDLE,DWORD,DWORD,DWORD,LPDWORD); LONG WINAPI SCardReleaseContext(SCARDCONTEXT); -void WINAPI SCardReleaseStartedEvent(HANDLE); +void WINAPI SCardReleaseStartedEvent(void); LONG WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT,LPCSTR,LPCSTR); LONG WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR); #define SCardRemoveReaderFromGroup WINELIB_NAME_AW(SCardRemoveReaderFromGroup) From 1a4036b36935236e11be68ce5838ae054a308db0 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 14:06:12 +0000 Subject: [PATCH 38/81] [WINSCARD] * Import from Wine 1.7.17. * Properly stub some exports thanks to our previous code. * Add to build. CORE-8224 #resolve #comment Added in r63328. Thanks for reporting! CORE-8080 svn path=/trunk/; revision=63329 --- reactos/dll/win32/CMakeLists.txt | 2 +- reactos/dll/win32/winscard/CMakeLists.txt | 21 + reactos/dll/win32/winscard/precomp.h | 22 +- reactos/dll/win32/winscard/stubs.c | 645 ++++++++++++++++ reactos/dll/win32/winscard/winscard.c | 883 ++-------------------- reactos/dll/win32/winscard/winscard.def | 68 -- reactos/dll/win32/winscard/winscard.spec | 63 ++ reactos/media/doc/README.WINE | 1 + 8 files changed, 825 insertions(+), 880 deletions(-) create mode 100644 reactos/dll/win32/winscard/CMakeLists.txt create mode 100644 reactos/dll/win32/winscard/stubs.c delete mode 100644 reactos/dll/win32/winscard/winscard.def create mode 100644 reactos/dll/win32/winscard/winscard.spec diff --git a/reactos/dll/win32/CMakeLists.txt b/reactos/dll/win32/CMakeLists.txt index 21f27e093ce..3355a269c2d 100644 --- a/reactos/dll/win32/CMakeLists.txt +++ b/reactos/dll/win32/CMakeLists.txt @@ -227,7 +227,7 @@ add_subdirectory(wing32) add_subdirectory(winhttp) add_subdirectory(wininet) add_subdirectory(winmm) -#add_subdirectory(winscard) # not built in trunk +add_subdirectory(winscard) add_subdirectory(winspool) add_subdirectory(winsta) add_subdirectory(wintrust) diff --git a/reactos/dll/win32/winscard/CMakeLists.txt b/reactos/dll/win32/winscard/CMakeLists.txt new file mode 100644 index 00000000000..c7b54e35e44 --- /dev/null +++ b/reactos/dll/win32/winscard/CMakeLists.txt @@ -0,0 +1,21 @@ + +add_definitions(-D__WINESRC__) +include_directories(${REACTOS_SOURCE_DIR}/include/reactos/wine) +spec2def(winscard.dll winscard.spec) + +list(APPEND SOURCE + winscard.c + stubs.c + precomp.h + ${CMAKE_CURRENT_BINARY_DIR}/winscard_stubs.c) + +add_library(winscard SHARED + ${SOURCE} + winscard.rc + ${CMAKE_CURRENT_BINARY_DIR}/winscard.def) + +set_module_type(winscard win32dll) +target_link_libraries(winscard wine) +add_importlibs(winscard msvcrt kernel32 ntdll) +add_pch(winscard precomp.h SOURCE) +add_cd_file(TARGET winscard DESTINATION reactos/system32 FOR all) diff --git a/reactos/dll/win32/winscard/precomp.h b/reactos/dll/win32/winscard/precomp.h index 4175448869f..0cbff0095f0 100644 --- a/reactos/dll/win32/winscard/precomp.h +++ b/reactos/dll/win32/winscard/precomp.h @@ -1,5 +1,19 @@ -#include -#include -#include +#ifndef _WINSCARD_PCH_ +#define _WINSCARD_PCH_ -/* EOF */ +#include + +#include + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H + +#include +#include +#include + +#include +WINE_DEFAULT_DEBUG_CHANNEL(winscard); + +#endif /* _WINSCARD_PCH_ */ diff --git a/reactos/dll/win32/winscard/stubs.c b/reactos/dll/win32/winscard/stubs.c new file mode 100644 index 00000000000..25253ff0f3a --- /dev/null +++ b/reactos/dll/win32/winscard/stubs.c @@ -0,0 +1,645 @@ +/* + * PROJECT: ReactOS SmartCard API + * FILE: dll/win32/winscard/stubs.c + * PURPOSE: ReactOS SmartCard API + * PROGRAMMER: Thomas Weidenmueller + * + * UPDATE HISTORY: + * 11/07/2004 Created + */ + +#include + +/* + * @unimplemented + */ +LONG +WINAPI +SCardBeginTransaction(SCARDHANDLE hCard) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardCancel(SCARDCONTEXT hContext) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardConnectA(SCARDCONTEXT hContext, + LPCSTR szReader, + DWORD dwShareMode, + DWORD dwPreferredProtocols, + LPSCARDHANDLE phCard, + LPDWORD pdwActiveProtocol) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardConnectW(SCARDCONTEXT hContext, + LPCWSTR szReader, + DWORD dwShareMode, + DWORD dwPreferredProtocols, + LPSCARDHANDLE phCard, + LPDWORD pdwActiveProtocol) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardControl(SCARDHANDLE hCard, + DWORD dwControlCode, + LPCVOID lpInBuffer, + DWORD nInBufferSize, + LPVOID lpOutBuffer, + DWORD nOutBufferSize, + LPDWORD lpBytesReturned) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardDisconnect(SCARDHANDLE hCard, + DWORD dwDisposition) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardEndTransaction(SCARDHANDLE hCard, + DWORD dwDisposition) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardForgetCardTypeA(SCARDCONTEXT hContext, + LPCSTR szCardName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardForgetCardTypeW(SCARDCONTEXT hContext, + LPCWSTR szCardName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardForgetReaderA(SCARDCONTEXT hContext, + LPCSTR szReaderName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardForgetReaderW(SCARDCONTEXT hContext, + LPCWSTR szReaderName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardForgetReaderGroupA(SCARDCONTEXT hContext, + LPCSTR szGroupName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardForgetReaderGroupW(SCARDCONTEXT hContext, + LPCWSTR szGroupName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardFreeMemory(SCARDCONTEXT hContext, + LPCVOID pvMem) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardGetAttrib(SCARDHANDLE hCard, + DWORD dwAttrId, + LPBYTE pbAttr, + LPDWORD pcbAttrLen) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext, + LPCSTR szCardName, + DWORD dwProviderId, + LPSTR szProvider, + LPDWORD pcchProvider) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext, + LPCWSTR szCardName, + DWORD dwProviderId, + LPWSTR szProvider, + LPDWORD pcchProvider) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardGetProviderIdA(SCARDCONTEXT hContext, + LPCSTR szCard, + LPGUID pguidProviderId) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardGetProviderIdW(SCARDCONTEXT hContext, + LPCWSTR szCard, + LPGUID pguidProviderId) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardGetStatusChangeA(SCARDCONTEXT hContext, + DWORD dwTimeout, + LPSCARD_READERSTATEA rgReaderState, + DWORD cReaders) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardGetStatusChangeW(SCARDCONTEXT hContext, + DWORD dwTimeout, + LPSCARD_READERSTATEW rgReaderState, + DWORD cReaders) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardIntroduceCardTypeA(SCARDCONTEXT hContext, + LPCSTR szCardName, + LPCGUID pguidPrimaryProvider, + LPCGUID rgguidInterfaces, + DWORD dwInterfaceCount, + LPCBYTE pbAtr, + LPCBYTE pbAtrMask, + DWORD cbAtrLen) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardIntroduceCardTypeW(SCARDCONTEXT hContext, + LPCWSTR szCardName, + LPCGUID pguidPrimaryProvider, + LPCGUID rgguidInterfaces, + DWORD dwInterfaceCount, + LPCBYTE pbAtr, + LPCBYTE pbAtrMask, + DWORD cbAtrLen) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardIntroduceReaderA(SCARDCONTEXT hContext, + LPCSTR szReaderName, + LPCSTR szDeviceName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardIntroduceReaderW(SCARDCONTEXT hContext, + LPCWSTR szReaderName, + LPCWSTR szDeviceName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardIntroduceReaderGroupA(SCARDCONTEXT hContext, + LPCSTR szGroupName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardIntroduceReaderGroupW(SCARDCONTEXT hContext, + LPCWSTR szGroupName) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardListCardsW(SCARDCONTEXT hContext, + LPCBYTE pbAtr, + LPCGUID rgguidInterface, + DWORD cguidInterfaceCount, + LPWSTR mszCards, + LPDWORD pcchCards) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardListInterfacesA(SCARDCONTEXT hContext, + LPCSTR szCard, + LPGUID pguidInterfaces, + LPDWORD pcguidInteraces) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardListInterfacesW(SCARDCONTEXT hContext, + LPCWSTR szCard, + LPGUID pguidInterfaces, + LPDWORD pcguidInteraces) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardListReaderGroupsA(SCARDCONTEXT hContext, + LPSTR mszGroups, + LPDWORD pcchGroups) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardListReaderGroupsW(SCARDCONTEXT hContext, + LPWSTR mszGroups, + LPDWORD pcchGroups) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardListReadersA(SCARDCONTEXT Context, + LPCSTR mszGroups, + LPSTR mszReaders, + LPDWORD pcchReaders) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardListReadersW(SCARDCONTEXT Context, + LPCWSTR mszGroups, + LPWSTR mszReaders, + LPDWORD pcchReaders) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardLocateCardsA(SCARDCONTEXT hContext, + LPCSTR mszCards, + LPSCARD_READERSTATEA rgReaderStates, + DWORD cReaders) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardLocateCardsW(SCARDCONTEXT hContext, + LPCWSTR mszCards, + LPSCARD_READERSTATEW rgReaderStates, + DWORD cReaders) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardLocateCardsByATRA(SCARDCONTEXT hContext, + LPSCARD_ATRMASK rgAtrMasks, + DWORD cAtrs, + LPSCARD_READERSTATEA rgReaderStates, + DWORD cReaders) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardLocateCardsByATRW(SCARDCONTEXT hContext, + LPSCARD_ATRMASK rgAtrMasks, + DWORD cAtrs, + LPSCARD_READERSTATEW rgReaderStates, + DWORD cReaders) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardReconnect(SCARDHANDLE hCard, + DWORD dwShareMode, + DWORD dwPreferredProtocols, + DWORD dwInitialization, + LPDWORD pdwActiveProtocol) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext, + LPCSTR szReaderName, + LPCSTR szGroupname) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext, + LPCWSTR szReaderName, + LPCWSTR szGroupname) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardSetAttrib(SCARDHANDLE hCard, + DWORD dwAttrId, + LPCBYTE pbAttr, + DWORD cbAttrLen) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext, + LPCSTR szCardName, + DWORD dwProviderId, + LPCSTR szProvider) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext, + LPCWSTR szCardName, + DWORD dwProviderId, + LPCWSTR szProvider) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardState(SCARDHANDLE hCard, + LPDWORD pdwState, + LPDWORD pdwProtocol, + LPBYTE pbAtr, + LPDWORD pcbAtrlen) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} + +/* + * @unimplemented + */ +LONG +WINAPI +SCardTransmit(SCARDHANDLE hCard, + LPCSCARD_IO_REQUEST pioSendPci, + LPCBYTE pbSendBuffer, + DWORD cbSendLength, + LPSCARD_IO_REQUEST pioRecvPci, + LPBYTE pbRecvBuffer, + LPDWORD pcbRecvLength) +{ + UNIMPLEMENTED; + return SCARD_F_UNKNOWN_ERROR; +} diff --git a/reactos/dll/win32/winscard/winscard.c b/reactos/dll/win32/winscard/winscard.c index e2eb7557c0d..39cdd0b77ee 100644 --- a/reactos/dll/win32/winscard/winscard.c +++ b/reactos/dll/win32/winscard/winscard.c @@ -1,6 +1,5 @@ /* - * ReactOS SmartCard API - * Copyright (C) 2004 ReactOS Team + * Copyright 2007 Mounir IDRASSI (mounir.idrassi@idrix.fr, for IDRIX) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -14,843 +13,113 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* - * PROJECT: ReactOS SmartCard API - * FILE: lib/winscard/winscard.c - * PURPOSE: ReactOS SmartCard API - * PROGRAMMER: Thomas Weidenmueller - * - * UPDATE HISTORY: - * 11/07/2004 Created - */ -#include "precomp.h" -const SCARD_IO_REQUEST g_rgSCardT0Pci; -const SCARD_IO_REQUEST g_rgSCardT1Pci; -const SCARD_IO_REQUEST g_rgSCardRawPci; +#include -/* - * @unimplemented - */ -HANDLE -WINAPI -SCardAccessStartedEvent(VOID) +#include + +static HANDLE g_startedEvent = NULL; + +const SCARD_IO_REQUEST g_rgSCardT0Pci = { SCARD_PROTOCOL_T0, 8 }; +const SCARD_IO_REQUEST g_rgSCardT1Pci = { SCARD_PROTOCOL_T1, 8 }; +const SCARD_IO_REQUEST g_rgSCardRawPci = { SCARD_PROTOCOL_RAW, 8 }; + + +BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return NULL; + TRACE("%p,%x,%p\n", hinstDLL, fdwReason, lpvReserved); + + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hinstDLL); + /* FIXME: for now, we act as if the pcsc daemon is always started */ + g_startedEvent = CreateEventA(NULL,TRUE,TRUE,NULL); + break; + case DLL_PROCESS_DETACH: + if (lpvReserved) break; + CloseHandle(g_startedEvent); + break; + } + + return TRUE; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardAddReaderToGroupA(SCARDCONTEXT hContext, - LPCSTR szReaderName, - LPCSTR szGroupName) +HANDLE WINAPI SCardAccessStartedEvent(void) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + return g_startedEvent; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardAddReaderToGroupW(SCARDCONTEXT hContext, - LPCWSTR szReaderName, - LPCWSTR szGroupName) +LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT context, LPCSTR reader, LPCSTR group) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + LONG retval; + UNICODE_STRING readerW, groupW; + + if(reader) RtlCreateUnicodeStringFromAsciiz(&readerW,reader); + else readerW.Buffer = NULL; + if(group) RtlCreateUnicodeStringFromAsciiz(&groupW,group); + else groupW.Buffer = NULL; + + retval = SCardAddReaderToGroupW(context, readerW.Buffer, groupW.Buffer); + + RtlFreeUnicodeString(&readerW); + RtlFreeUnicodeString(&groupW); + + return retval; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardBeginTransaction(SCARDHANDLE hCard) +LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT context, LPCWSTR reader, LPCWSTR group) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + FIXME("%x %s %s\n", (unsigned int) context, debugstr_w(reader), debugstr_w(group)); + return SCARD_S_SUCCESS; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardCancel(SCARDCONTEXT hContext) +LONG WINAPI SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, + LPCVOID pvReserved2, LPSCARDCONTEXT phContext) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + FIXME("(%x,%p,%p,%p) stub\n", dwScope, pvReserved1, pvReserved2, phContext); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return SCARD_F_INTERNAL_ERROR; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardConnectA(SCARDCONTEXT hContext, - LPCSTR szReader, - DWORD dwShareMode, - DWORD dwPreferredProtocols, - LPSCARDHANDLE phCard, - LPDWORD pdwActiveProtocol) +LONG WINAPI SCardIsValidContext(SCARDCONTEXT context) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + FIXME("(%lx) stub\n", context); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return SCARD_F_INTERNAL_ERROR; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardConnectW(SCARDCONTEXT hContext, - LPCWSTR szReader, - DWORD dwShareMode, - DWORD dwPreferredProtocols, - LPSCARDHANDLE phCard, - LPDWORD pdwActiveProtocol) +LONG WINAPI SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr, LPCGUID rgguidInterfaces, DWORD cguidInterfaceCount, LPSTR mszCards, LPDWORD pcchCards) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + FIXME(": stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return SCARD_F_INTERNAL_ERROR; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardControl(SCARDHANDLE hCard, - DWORD dwControlCode, - LPCVOID lpInBuffer, - DWORD nInBufferSize, - LPVOID lpOutBuffer, - DWORD nOutBufferSize, - LPDWORD lpBytesReturned) +LONG WINAPI SCardReleaseContext(SCARDCONTEXT context) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + FIXME("(%lx) stub\n", context); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return SCARD_F_INTERNAL_ERROR; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardDisconnect(SCARDHANDLE hCard, - DWORD dwDisposition) +LONG WINAPI SCardStatusA(SCARDHANDLE context, LPSTR szReaderName, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + FIXME("(%lx) stub\n", context); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return SCARD_F_INTERNAL_ERROR; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardEndTransaction(SCARDHANDLE hCard, - DWORD dwDisposition) +LONG WINAPI SCardStatusW(SCARDHANDLE context, LPWSTR szReaderName, LPDWORD pcchReaderLen, LPDWORD pdwState,LPDWORD pdwProtocol,LPBYTE pbAtr,LPDWORD pcbArtLen) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + FIXME("(%lx) stub\n", context); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return SCARD_F_INTERNAL_ERROR; } - -/* - * @unimplemented - */ -LONG -WINAPI -SCardEstablishContext(DWORD dwScope, - LPCVOID pvReserved1, - LPCVOID pvReserved2, - LPSCARDCONTEXT phContext) +void WINAPI SCardReleaseStartedEvent(void) { - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; + FIXME("stub\n"); } - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardForgetCardTypeA(SCARDCONTEXT hContext, - LPCSTR szCardName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardForgetCardTypeW(SCARDCONTEXT hContext, - LPCWSTR szCardName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardForgetReaderA(SCARDCONTEXT hContext, - LPCSTR szReaderName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardForgetReaderW(SCARDCONTEXT hContext, - LPCWSTR szReaderName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardForgetReaderGroupA(SCARDCONTEXT hContext, - LPCSTR szGroupName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardForgetReaderGroupW(SCARDCONTEXT hContext, - LPCWSTR szGroupName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardFreeMemory(SCARDCONTEXT hContext, - LPCVOID pvMem) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardGetAttrib(SCARDHANDLE hCard, - DWORD dwAttrId, - LPBYTE pbAttr, - LPDWORD pcbAttrLen) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext, - LPCSTR szCardName, - DWORD dwProviderId, - LPSTR szProvider, - LPDWORD pcchProvider) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext, - LPCWSTR szCardName, - DWORD dwProviderId, - LPWSTR szProvider, - LPDWORD pcchProvider) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardGetProviderIdA(SCARDCONTEXT hContext, - LPCSTR szCard, - LPGUID pguidProviderId) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardGetProviderIdW(SCARDCONTEXT hContext, - LPCWSTR szCard, - LPGUID pguidProviderId) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardGetStatusChangeA(SCARDCONTEXT hContext, - DWORD dwTimeout, - LPSCARD_READERSTATEA rgReaderState, - DWORD cReaders) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardGetStatusChangeW(SCARDCONTEXT hContext, - DWORD dwTimeout, - LPSCARD_READERSTATEW rgReaderState, - DWORD cReaders) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardIntroduceCardTypeA(SCARDCONTEXT hContext, - LPCSTR szCardName, - LPCGUID pguidPrimaryProvider, - LPCGUID rgguidInterfaces, - DWORD dwInterfaceCount, - LPCBYTE pbAtr, - LPCBYTE pbAtrMask, - DWORD cbAtrLen) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardIntroduceCardTypeW(SCARDCONTEXT hContext, - LPCWSTR szCardName, - LPCGUID pguidPrimaryProvider, - LPCGUID rgguidInterfaces, - DWORD dwInterfaceCount, - LPCBYTE pbAtr, - LPCBYTE pbAtrMask, - DWORD cbAtrLen) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardIntroduceReaderA(SCARDCONTEXT hContext, - LPCSTR szReaderName, - LPCSTR szDeviceName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardIntroduceReaderW(SCARDCONTEXT hContext, - LPCWSTR szReaderName, - LPCWSTR szDeviceName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardIntroduceReaderGroupA(SCARDCONTEXT hContext, - LPCSTR szGroupName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardIntroduceReaderGroupW(SCARDCONTEXT hContext, - LPCWSTR szGroupName) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardIsValidContext(SCARDCONTEXT hContext) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardListCardsA(SCARDCONTEXT hContext, - LPCBYTE pbAtr, - LPCGUID rgguidInterface, - DWORD cguidInterfaceCount, - LPCSTR mszCards, - LPDWORD pcchCards) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardListCardsW(SCARDCONTEXT hContext, - LPCBYTE pbAtr, - LPCGUID rgguidInterface, - DWORD cguidInterfaceCount, - LPCWSTR mszCards, - LPDWORD pcchCards) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardListInterfacesA(SCARDCONTEXT hContext, - LPCSTR szCard, - LPGUID pguidInterfaces, - LPDWORD pcguidInteraces) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardListInterfacesW(SCARDCONTEXT hContext, - LPCWSTR szCard, - LPGUID pguidInterfaces, - LPDWORD pcguidInteraces) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardListReaderGroupsA(SCARDCONTEXT hContext, - LPSTR mszGroups, - LPDWORD pcchGroups) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardListReaderGroupsW(SCARDCONTEXT hContext, - LPWSTR mszGroups, - LPDWORD pcchGroups) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardListReadersA(SCARDCONTEXT Context, - LPCSTR mszGroups, - LPSTR mszReaders, - LPDWORD pcchReaders) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardListReadersW(SCARDCONTEXT Context, - LPCWSTR mszGroups, - LPWSTR mszReaders, - LPDWORD pcchReaders) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardLocateCardsA(SCARDCONTEXT hContext, - LPCSTR mszCards, - LPSCARD_READERSTATEA rgReaderStates, - DWORD cReaders) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardLocateCardsW(SCARDCONTEXT hContext, - LPCWSTR mszCards, - LPSCARD_READERSTATEW rgReaderStates, - DWORD cReaders) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardLocateCardsByATRA(SCARDCONTEXT hContext, - LPSCARD_ATRMASK rgAtrMasks, - DWORD cAtrs, - LPSCARD_READERSTATEA rgReaderStates, - DWORD cReaders) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardLocateCardsByATRW(SCARDCONTEXT hContext, - LPSCARD_ATRMASK rgAtrMasks, - DWORD cAtrs, - LPSCARD_READERSTATEW rgReaderStates, - DWORD cReaders) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardReconnect(SCARDHANDLE hCard, - DWORD dwShareMode, - DWORD dwPreferredProtocols, - DWORD dwInitialization, - LPDWORD pdwActiveProtocol) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardReleaseContext(SCARDCONTEXT hContext) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -VOID -WINAPI -SCardReleaseStartedEvent(HANDLE hStartedEventHandle) -{ - UNIMPLEMENTED; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext, - LPCSTR szReaderName, - LPCSTR szGroupname) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext, - LPCWSTR szReaderName, - LPCWSTR szGroupname) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardSetAttrib(SCARDHANDLE hCard, - DWORD dwAttrId, - LPCBYTE pbAttr, - DWORD cbAttrLen) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext, - LPCSTR szCardName, - DWORD dwProviderId, - LPCSTR szProvider) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext, - LPCWSTR szCardName, - DWORD dwProviderId, - LPCWSTR szProvider) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardState(SCARDHANDLE hCard, - LPDWORD pdwState, - LPDWORD pdwProtocol, - LPBYTE pbAtr, - LPDWORD pcbAtrlen) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardStatusA(SCARDHANDLE hCard, - LPSTR szReaderName, - LPDWORD pcchReaderLen, - LPDWORD pdwState, - LPDWORD pdwProtocol, - LPBYTE pbAtr, - LPDWORD pcbAtrLen) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardStatusW(SCARDHANDLE hCard, - LPWSTR szReaderName, - LPDWORD pcchReaderLen, - LPDWORD pdwState, - LPDWORD pdwProtocol, - LPBYTE pbAtr, - LPDWORD pcbAtrLen) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - - -/* - * @unimplemented - */ -LONG -WINAPI -SCardTransmit(SCARDHANDLE hCard, - LPCSCARD_IO_REQUEST pioSendPci, - LPCBYTE pbSendBuffer, - DWORD cbSendLength, - LPSCARD_IO_REQUEST pioRecvPci, - LPBYTE pbRecvBuffer, - LPDWORD pcbRecvLength) -{ - UNIMPLEMENTED; - return SCARD_F_UNKNOWN_ERROR; -} - diff --git a/reactos/dll/win32/winscard/winscard.def b/reactos/dll/win32/winscard/winscard.def deleted file mode 100644 index a4b193a82b4..00000000000 --- a/reactos/dll/win32/winscard/winscard.def +++ /dev/null @@ -1,68 +0,0 @@ -LIBRARY winscard.dll - -EXPORTS -;ClassInstall32@0 @1 -;SCardAccessNewReaderEvent@0 @2 -;SCardReleaseAllEvents@0 @3 -;SCardReleaseNewReaderEvent@0 @4 -SCardAccessStartedEvent@0 @5 -SCardAddReaderToGroupA@12 @6 -SCardAddReaderToGroupW@12 @7 -SCardBeginTransaction@4 @8 -SCardCancel@4 @9 -SCardConnectA@24 @10 -SCardConnectW@24 @11 -SCardControl@28 @12 -SCardDisconnect@8 @13 -SCardEndTransaction@8 @14 -SCardEstablishContext@16 @15 -SCardForgetCardTypeA@8 @16 -SCardForgetCardTypeW@8 @17 -SCardForgetReaderA@8 @18 -SCardForgetReaderGroupA@8 @19 -SCardForgetReaderGroupW@8 @20 -SCardForgetReaderW@8 @21 -SCardFreeMemory@8 @22 -SCardGetAttrib@16 @23 -SCardGetCardTypeProviderNameA@20 @24 -SCardGetCardTypeProviderNameW@20 @25 -SCardGetProviderIdA@12 @26 -SCardGetProviderIdW@12 @27 -SCardGetStatusChangeA@16 @28 -SCardGetStatusChangeW@16 @29 -SCardIntroduceCardTypeA@32 @30 -SCardIntroduceCardTypeW@32 @31 -SCardIntroduceReaderA@12 @32 -SCardIntroduceReaderGroupA@8 @33 -SCardIntroduceReaderGroupW@8 @34 -SCardIntroduceReaderW@12 @35 -SCardIsValidContext@4 @36 -SCardListCardsA@24 @37 -SCardListCardsW@24 @38 -SCardListInterfacesA@16 @39 -SCardListInterfacesW@16 @40 -SCardListReaderGroupsA@12 @41 -SCardListReaderGroupsW@12 @42 -SCardListReadersA@16 @43 -SCardListReadersW@16 @44 -SCardLocateCardsA@16 @45 -SCardLocateCardsByATRA@20 @46 -SCardLocateCardsByATRW@20 @47 -SCardLocateCardsW@16 @48 -SCardReconnect@20 @49 -SCardReleaseContext@4 @50 -SCardReleaseStartedEvent@4 @51 -SCardRemoveReaderFromGroupA@12 @52 -SCardRemoveReaderFromGroupW@12 @53 -SCardSetAttrib@16 @54 -SCardSetCardTypeProviderNameA@16 @55 -SCardSetCardTypeProviderNameW@16 @56 -SCardState@20 @57 -SCardStatusA@28 @58 -SCardStatusW@28 @59 -SCardTransmit@28 @60 -g_rgSCardRawPci @61 DATA -g_rgSCardT0Pci @62 DATA -g_rgSCardT1Pci @63 DATA - -; EOF diff --git a/reactos/dll/win32/winscard/winscard.spec b/reactos/dll/win32/winscard/winscard.spec new file mode 100644 index 00000000000..a20d780f4c5 --- /dev/null +++ b/reactos/dll/win32/winscard/winscard.spec @@ -0,0 +1,63 @@ +@ stdcall -stub ClassInstall32(long ptr ptr) +@ stdcall -stub SCardAccessNewReaderEvent() +@ stdcall -stub SCardReleaseAllEvents() +@ stub SCardReleaseNewReaderEvent +@ stdcall SCardAccessStartedEvent() +@ stdcall SCardAddReaderToGroupA(long str str) +@ stdcall SCardAddReaderToGroupW(long wstr wstr) +@ stdcall SCardBeginTransaction(long) +@ stdcall SCardCancel(long) +@ stdcall SCardConnectA(long ptr long long ptr ptr) +@ stdcall SCardConnectW(long ptr long long ptr ptr) +@ stdcall SCardControl(long long ptr long ptr long ptr) +@ stdcall SCardDisconnect(long long) +@ stdcall SCardEndTransaction(long long) +@ stdcall SCardEstablishContext(long ptr ptr ptr) +@ stdcall SCardForgetCardTypeA(long ptr) +@ stdcall SCardForgetCardTypeW(long ptr) +@ stdcall SCardForgetReaderA(long ptr) +@ stdcall SCardForgetReaderGroupA(long ptr) +@ stdcall SCardForgetReaderGroupW(long ptr) +@ stdcall SCardForgetReaderW(long ptr) +@ stdcall SCardFreeMemory(long ptr) +@ stdcall SCardGetAttrib(long long ptr ptr) +@ stdcall SCardGetCardTypeProviderNameA(long ptr long ptr ptr) +@ stdcall SCardGetCardTypeProviderNameW(long ptr long ptr ptr) +@ stdcall SCardGetProviderIdA(long ptr ptr) +@ stdcall SCardGetProviderIdW(long ptr ptr) +@ stdcall SCardGetStatusChangeA(long long ptr long) +@ stdcall SCardGetStatusChangeW(long long ptr long) +@ stdcall SCardIntroduceCardTypeA(long ptr ptr ptr long ptr ptr long) +@ stdcall SCardIntroduceCardTypeW(long ptr ptr ptr long ptr ptr long) +@ stdcall SCardIntroduceReaderA(long ptr ptr) +@ stdcall SCardIntroduceReaderGroupA(long ptr) +@ stdcall SCardIntroduceReaderGroupW(long ptr) +@ stdcall SCardIntroduceReaderW(long ptr ptr) +@ stdcall SCardIsValidContext(long) +@ stdcall SCardListCardsA(long ptr ptr long str long) +@ stdcall SCardListCardsW(long ptr ptr long str long) +@ stdcall SCardListInterfacesA(long ptr ptr ptr) +@ stdcall SCardListInterfacesW(long ptr ptr ptr) +@ stdcall SCardListReaderGroupsA(long ptr ptr) +@ stdcall SCardListReaderGroupsW(long ptr ptr) +@ stdcall SCardListReadersA(long ptr ptr ptr) +@ stdcall SCardListReadersW(long ptr ptr ptr) +@ stdcall SCardLocateCardsA(long ptr ptr long) +@ stdcall SCardLocateCardsByATRA(long ptr long ptr long) +@ stdcall SCardLocateCardsByATRW(long ptr long ptr long) +@ stdcall SCardLocateCardsW(long ptr ptr long) +@ stdcall SCardReconnect(long long long long ptr) +@ stdcall SCardReleaseContext(long) +@ stdcall SCardReleaseStartedEvent() +@ stdcall SCardRemoveReaderFromGroupA(long ptr ptr) +@ stdcall SCardRemoveReaderFromGroupW(long ptr ptr) +@ stdcall SCardSetAttrib(long long ptr long) +@ stdcall SCardSetCardTypeProviderNameA(long ptr long ptr) +@ stdcall SCardSetCardTypeProviderNameW(long ptr long ptr) +@ stdcall SCardState(long ptr ptr ptr ptr) +@ stdcall SCardStatusA (long str long long long ptr long ) +@ stdcall SCardStatusW (long wstr long long long ptr long ) +@ stdcall SCardTransmit(long ptr ptr long ptr ptr ptr) +@ extern g_rgSCardRawPci +@ extern g_rgSCardT0Pci +@ extern g_rgSCardT1Pci diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index b88a56ed424..781541477d4 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -212,6 +212,7 @@ reactos/dll/win32/wininet # Synced to Wine-1.7.17 reactos/dll/win32/winmm # Forked at Wine-20050628 reactos/dll/win32/winmm/midimap # Forked at Wine-20050628 reactos/dll/win32/winmm/wavemap # Forked at Wine-20050628 +reactos/dll/win32/winscard # Synced to Wine-1.7.17 reactos/dll/win32/wintrust # Synced to Wine-1.7.17 reactos/dll/win32/wldap32 # Synced to Wine-1.7.17 reactos/dll/win32/wmi # Synced to Wine-1.7.17 From a47b155648f4c3ed4c5de6e577bf9c50da10cc1e Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 17 May 2014 14:42:28 +0000 Subject: [PATCH 39/81] [NTOSKRNL] Partial revert of r63326! The correct partition numbers cause boot failures. svn path=/trunk/; revision=63330 --- reactos/ntoskrnl/fstub/disksup.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/fstub/disksup.c b/reactos/ntoskrnl/fstub/disksup.c index 35ac482da17..86a7e0ad6b0 100644 --- a/reactos/ntoskrnl/fstub/disksup.c +++ b/reactos/ntoskrnl/fstub/disksup.c @@ -1655,7 +1655,9 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, UInt32x32To64(GET_PARTITION_LENGTH(PartitionDescriptor), SectorSize); - PartitionInfo->PartitionNumber = (!IsContainerPartition(PartitionType)) ? i : 0; + // BUGBUGBUG: The correct partition numbers seem to cause boot failures!!! +// PartitionInfo->PartitionNumber = (!IsContainerPartition(PartitionType)) ? i : 0; + PartitionInfo->PartitionNumber = i + 1; } else { From 9de7dafcc94e92f8d1311d67375dcb01b5d87969 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Sat, 17 May 2014 15:29:07 +0000 Subject: [PATCH 40/81] [NTVDM] DosResizeMemory shouldn't succeed unless the memory block has been resized to the specified amount. svn path=/trunk/; revision=63331 --- reactos/subsystems/ntvdm/dos/dos32krnl/dos.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c index b0769cd7d79..6925c268ce8 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c @@ -249,6 +249,14 @@ static BOOLEAN DosResizeMemory(WORD BlockData, WORD NewSize, WORD *MaxAvailable) /* Set the maximum possible size of the block */ ReturnSize += NextMcb->Size + 1; + if (ReturnSize < NewSize) + { + DPRINT("Cannot expand memory block: insufficient free segments available!\n"); + DosLastError = ERROR_NOT_ENOUGH_MEMORY; + Success = FALSE; + goto Done; + } + /* Maximize the current block */ Mcb->Size = ReturnSize; Mcb->BlockType = NextMcb->BlockType; From a17de02b7138d307119cbc5d5de4bdfe42384f98 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 18:14:51 +0000 Subject: [PATCH 41/81] [LIBJPEG] * Update to release 9a. Based on the sync done by Ivan Di Francesco. CORE-8033 svn path=/trunk/; revision=63332 --- reactos/dll/3rdparty/libjpeg/README | 81 +- reactos/dll/3rdparty/libjpeg/ansi2knr.c | 739 ------------------ reactos/dll/3rdparty/libjpeg/change.log | 27 + reactos/dll/3rdparty/libjpeg/cjpeg.c | 12 + reactos/dll/3rdparty/libjpeg/jcapistd.c | 3 +- reactos/dll/3rdparty/libjpeg/jcarith.c | 19 +- reactos/dll/3rdparty/libjpeg/jccolor.c | 133 +++- reactos/dll/3rdparty/libjpeg/jcdctmgr.c | 79 +- reactos/dll/3rdparty/libjpeg/jchuff.c | 119 ++- reactos/dll/3rdparty/libjpeg/jcinit.c | 19 + reactos/dll/3rdparty/libjpeg/jcmarker.c | 6 +- reactos/dll/3rdparty/libjpeg/jcmaster.c | 36 +- reactos/dll/3rdparty/libjpeg/jcparam.c | 110 ++- reactos/dll/3rdparty/libjpeg/jctrans.c | 6 +- reactos/dll/3rdparty/libjpeg/jdapimin.c | 43 +- reactos/dll/3rdparty/libjpeg/jdapistd.c | 1 + reactos/dll/3rdparty/libjpeg/jdarith.c | 16 +- reactos/dll/3rdparty/libjpeg/jdcolor.c | 226 ++++-- reactos/dll/3rdparty/libjpeg/jddctmgr.c | 4 +- reactos/dll/3rdparty/libjpeg/jdhuff.c | 38 +- reactos/dll/3rdparty/libjpeg/jdinput.c | 11 +- reactos/dll/3rdparty/libjpeg/jdmarker.c | 16 +- reactos/dll/3rdparty/libjpeg/jdmaster.c | 18 +- reactos/dll/3rdparty/libjpeg/jdmerge.c | 17 +- reactos/dll/3rdparty/libjpeg/jfdctint.c | 622 ++++++++------- reactos/dll/3rdparty/libjpeg/jidctint.c | 356 +++++---- reactos/dll/3rdparty/libjpeg/jpegtran.c | 23 +- reactos/dll/3rdparty/libjpeg/transupp.c | 230 +++++- .../include/reactos/libs/libjpeg/jconfig.h | 10 +- .../include/reactos/libs/libjpeg/jmorecfg.h | 80 +- .../include/reactos/libs/libjpeg/jpegint.h | 6 +- .../include/reactos/libs/libjpeg/jpeglib.h | 31 +- .../include/reactos/libs/libjpeg/jversion.h | 6 +- .../include/reactos/libs/libjpeg/transupp.h | 22 +- reactos/media/doc/3rd Party Files.txt | 4 + 35 files changed, 1577 insertions(+), 1592 deletions(-) delete mode 100644 reactos/dll/3rdparty/libjpeg/ansi2knr.c diff --git a/reactos/dll/3rdparty/libjpeg/README b/reactos/dll/3rdparty/libjpeg/README index fc5ca5d458c..014ad301742 100644 --- a/reactos/dll/3rdparty/libjpeg/README +++ b/reactos/dll/3rdparty/libjpeg/README @@ -1,8 +1,8 @@ The Independent JPEG Group's JPEG software ========================================== -README for release 9 of 13-Jan-2013 -=================================== +README for release 9a of 19-Jan-2014 +==================================== This distribution contains the ninth public release of the Independent JPEG Group's free JPEG software. You are welcome to redistribute this software and @@ -14,7 +14,7 @@ Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, and other members of the Independent JPEG Group. IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee -(also known as JPEG, together with ITU-T SG16). +(previously known as JPEG, together with ITU-T SG16). DOCUMENTATION ROADMAP @@ -115,7 +115,7 @@ with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. -This software is copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding. +This software is copyright (C) 1991-2014, Thomas G. Lane, Guido Vollbeding. All Rights Reserved except as specified below. Permission is hereby granted to use, copy, modify, and distribute this @@ -153,11 +153,11 @@ ltmain.sh). Another support script, install-sh, is copyright by X Consortium but is also freely distributable. The IJG distribution formerly included code to read and write GIF files. -To avoid entanglement with the Unisys LZW patent, GIF reading support has -been removed altogether, and the GIF writer has been simplified to produce -"uncompressed GIFs". This technique does not use the LZW algorithm; the -resulting GIF files are larger than usual, but are readable by all standard -GIF decoders. +To avoid entanglement with the Unisys LZW patent (now expired), GIF reading +support has been removed altogether, and the GIF writer has been simplified +to produce "uncompressed GIFs". This technique does not use the LZW +algorithm; the resulting GIF files are larger than usual, but are readable +by all standard GIF decoders. We are required to state that "The Graphics Interchange Format(c) is the Copyright property of @@ -252,8 +252,8 @@ ARCHIVE LOCATIONS The "official" archive site for this software is www.ijg.org. The most recent released version can always be found there in directory "files". This particular version will be archived as -http://www.ijg.org/files/jpegsrc.v9.tar.gz, and in Windows-compatible -"zip" archive format as http://www.ijg.org/files/jpegsr9.zip. +http://www.ijg.org/files/jpegsrc.v9a.tar.gz, and in Windows-compatible +"zip" archive format as http://www.ijg.org/files/jpegsr9a.zip. The JPEG FAQ (Frequently Asked Questions) article is a source of some general information about JPEG. @@ -280,7 +280,7 @@ Thank to Thomas Wiegand and Gary Sullivan for inviting me to the Joint Video Team (MPEG & ITU) meeting in Geneva, Switzerland. Thank to Thomas Richter and Daniel Lee for inviting me to the -ISO/IEC JTC1/SC29/WG1 (also known as JPEG, together with ITU-T SG16) +ISO/IEC JTC1/SC29/WG1 (previously known as JPEG, together with ITU-T SG16) meeting in Berlin, Germany. Thank to John Korejwa and Massimo Ballerini for inviting me to @@ -306,10 +306,10 @@ design and development of this singular software package. FILE FORMAT WARS ================ -The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together -with ITU-T SG16) currently promotes different formats containing the name -"JPEG" which is misleading because these formats are incompatible with -original DCT-based JPEG and are based on faulty technologies. +The ISO/IEC JTC1/SC29/WG1 standards committee (previously known as JPEG, +together with ITU-T SG16) currently promotes different formats containing +the name "JPEG" which is misleading because these formats are incompatible +with original DCT-based JPEG and are based on faulty technologies. IJG therefore does not and will not support such momentary mistakes (see REFERENCES). There exist also distributions under the name "OpenJPEG" promoting such @@ -322,9 +322,13 @@ Don't use an incompatible file format! (In any case, our decoder will remain capable of reading existing JPEG image files indefinitely.) -Furthermore, the ISO committee pretends to be "responsible for the popular -JPEG" in their public reports which is not true because they don't respond to -actual requirements for the maintenance of the original JPEG specification. +The ISO committee pretends to be "responsible for the popular JPEG" in their +public reports which is not true because they don't respond to actual +requirements for the maintenance of the original JPEG specification. +Furthermore, the ISO committee pretends to "ensure interoperability" with +their standards which is not true because their "standards" support only +application-specific and proprietary use cases and contain mathematically +incorrect code. There are currently different distributions in circulation containing the name "libjpeg" which is misleading because they don't have the features and @@ -332,19 +336,46 @@ are incompatible with formats supported by actual IJG libjpeg distributions. One of those fakes is released by members of the ISO committee and just uses the name of libjpeg for misdirection of people, similar to the abuse of the name JPEG as described above, while having nothing in common with actual IJG -libjpeg distributions. -The other one claims to be a "derivative" or "fork" of the original libjpeg -and violates the license conditions as described under LEGAL ISSUES above. -We have no sympathy for the release of misleading and illegal distributions -derived from obsolete code bases. +libjpeg distributions and containing mathematically incorrect code. +The other one claims to be a "derivative" or "fork" of the original libjpeg, +but violates the license conditions as described under LEGAL ISSUES above +and violates basic C programming properties. +We have no sympathy for the release of misleading, incorrect and illegal +distributions derived from obsolete code bases. Don't use an obsolete code base! +According to the UCC (Uniform Commercial Code) law, IJG has the lawful and +legal right to foreclose on certain standardization bodies and other +institutions or corporations that knowingly perform substantial and +systematic deceptive acts and practices, fraud, theft, and damaging of the +value of the people of this planet without their knowing, willing and +intentional consent. +The titles, ownership, and rights of these institutions and all their assets +are now duly secured and held in trust for the free people of this planet. +People of the planet, on every country, may have a financial interest in +the assets of these former principals, agents, and beneficiaries of the +foreclosed institutions and corporations. +IJG asserts what is: that each man, woman, and child has unalienable value +and rights granted and deposited in them by the Creator and not any one of +the people is subordinate to any artificial principality, corporate fiction +or the special interest of another without their appropriate knowing, +willing and intentional consent made by contract or accommodation agreement. +IJG expresses that which already was. +The people have already determined and demanded that public administration +entities, national governments, and their supporting judicial systems must +be fully transparent, accountable, and liable. +IJG has secured the value for all concerned free people of the planet. + +A partial list of foreclosed institutions and corporations ("Hall of Shame") +is currently prepared and will be published later. + TO DO ===== Version 9 is the second release of a new generation JPEG standard -to overcome the limitations of the original JPEG specification. +to overcome the limitations of the original JPEG specification, +and is the first true source reference JPEG codec. More features are being prepared for coming releases... Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. diff --git a/reactos/dll/3rdparty/libjpeg/ansi2knr.c b/reactos/dll/3rdparty/libjpeg/ansi2knr.c deleted file mode 100644 index e84c210b66b..00000000000 --- a/reactos/dll/3rdparty/libjpeg/ansi2knr.c +++ /dev/null @@ -1,739 +0,0 @@ -/* Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved. */ - -/*$Id: ansi2knr.c,v 1.14 2003/09/06 05:36:56 eggert Exp $*/ -/* Convert ANSI C function definitions to K&R ("traditional C") syntax */ - -/* -ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY. No author or distributor accepts responsibility to anyone for the -consequences of using it or for whether it serves any particular purpose or -works at all, unless he says so in writing. Refer to the GNU General Public -License (the "GPL") for full details. - -Everyone is granted permission to copy, modify and redistribute ansi2knr, -but only under the conditions described in the GPL. A copy of this license -is supposed to have been given to you along with ansi2knr so you can know -your rights and responsibilities. It should be in a file named COPYLEFT, -or, if there is no file named COPYLEFT, a file named COPYING. Among other -things, the copyright notice and this notice must be preserved on all -copies. - -We explicitly state here what we believe is already implied by the GPL: if -the ansi2knr program is distributed as a separate set of sources and a -separate executable file which are aggregated on a storage medium together -with another program, this in itself does not bring the other program under -the GPL, nor does the mere fact that such a program or the procedures for -constructing it invoke the ansi2knr executable bring any other part of the -program under the GPL. -*/ - -/* - * Usage: - ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]] - * --filename provides the file name for the #line directive in the output, - * overriding input_file (if present). - * If no input_file is supplied, input is read from stdin. - * If no output_file is supplied, output goes to stdout. - * There are no error messages. - * - * ansi2knr recognizes function definitions by seeing a non-keyword - * identifier at the left margin, followed by a left parenthesis, with a - * right parenthesis as the last character on the line, and with a left - * brace as the first token on the following line (ignoring possible - * intervening comments and/or preprocessor directives), except that a line - * consisting of only - * identifier1(identifier2) - * will not be considered a function definition unless identifier2 is - * the word "void", and a line consisting of - * identifier1(identifier2, <>) - * will not be considered a function definition. - * ansi2knr will recognize a multi-line header provided that no intervening - * line ends with a left or right brace or a semicolon. These algorithms - * ignore whitespace, comments, and preprocessor directives, except that - * the function name must be the first thing on the line. The following - * constructs will confuse it: - * - Any other construct that starts at the left margin and - * follows the above syntax (such as a macro or function call). - * - Some macros that tinker with the syntax of function headers. - */ - -/* - * The original and principal author of ansi2knr is L. Peter Deutsch - * . Other authors are noted in the change history - * that follows (in reverse chronological order): - - lpd 2000-04-12 backs out Eggert's changes because of bugs: - - concatlits didn't declare the type of its bufend argument; - - concatlits didn't recognize when it was inside a comment; - - scanstring could scan backward past the beginning of the string; when - - the check for \ + newline in scanstring was unnecessary. - - 2000-03-05 Paul Eggert - - Add support for concatenated string literals. - * ansi2knr.c (concatlits): New decl. - (main): Invoke concatlits to concatenate string literals. - (scanstring): Handle backslash-newline correctly. Work with - character constants. Fix bug when scanning backwards through - backslash-quote. Check for unterminated strings. - (convert1): Parse character constants, too. - (appendline, concatlits): New functions. - * ansi2knr.1: Document this. - - lpd 1999-08-17 added code to allow preprocessor directives - wherever comments are allowed - lpd 1999-04-12 added minor fixes from Pavel Roskin - for clean compilation with - gcc -W -Wall - lpd 1999-03-22 added hack to recognize lines consisting of - identifier1(identifier2, xxx) as *not* being procedures - lpd 1999-02-03 made indentation of preprocessor commands consistent - lpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an - endless loop; quoted strings within an argument list - confused the parser - lpd 1999-01-24 added a check for write errors on the output, - suggested by Jim Meyering - lpd 1998-11-09 added further hack to recognize identifier(void) - as being a procedure - lpd 1998-10-23 added hack to recognize lines consisting of - identifier1(identifier2) as *not* being procedures - lpd 1997-12-08 made input_file optional; only closes input and/or - output file if not stdin or stdout respectively; prints - usage message on stderr rather than stdout; adds - --filename switch (changes suggested by - ) - lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with - compilers that don't understand void, as suggested by - Tom Lane - lpd 1996-01-15 changed to require that the first non-comment token - on the line following a function header be a left brace, - to reduce sensitivity to macros, as suggested by Tom Lane - - lpd 1995-06-22 removed #ifndefs whose sole purpose was to define - undefined preprocessor symbols as 0; changed all #ifdefs - for configuration symbols to #ifs - lpd 1995-04-05 changed copyright notice to make it clear that - including ansi2knr in a program does not bring the entire - program under the GPL - lpd 1994-12-18 added conditionals for systems where ctype macros - don't handle 8-bit characters properly, suggested by - Francois Pinard ; - removed --varargs switch (this is now the default) - lpd 1994-10-10 removed CONFIG_BROKETS conditional - lpd 1994-07-16 added some conditionals to help GNU `configure', - suggested by Francois Pinard ; - properly erase prototype args in function parameters, - contributed by Jim Avera ; - correct error in writeblanks (it shouldn't erase EOLs) - lpd 1989-xx-xx original version - */ - -/* Most of the conditionals here are to make ansi2knr work with */ -/* or without the GNU configure machinery. */ - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include - -#if HAVE_CONFIG_H - -/* - For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). - This will define HAVE_CONFIG_H and so, activate the following lines. - */ - -# if STDC_HEADERS || HAVE_STRING_H -# include -# else -# include -# endif - -#else /* not HAVE_CONFIG_H */ - -/* Otherwise do it the hard way */ - -# ifdef BSD -# include -# else -# ifdef VMS - extern int strlen(), strncmp(); -# else -# include -# endif -# endif - -#endif /* not HAVE_CONFIG_H */ - -#if STDC_HEADERS -# include -#else -/* - malloc and free should be declared in stdlib.h, - but if you've got a K&R compiler, they probably aren't. - */ -# ifdef MSDOS -# include -# else -# ifdef VMS - extern char *malloc(); - extern void free(); -# else - extern char *malloc(); - extern int free(); -# endif -# endif - -#endif - -/* Define NULL (for *very* old compilers). */ -#ifndef NULL -# define NULL (0) -#endif - -/* - * The ctype macros don't always handle 8-bit characters correctly. - * Compensate for this here. - */ -#ifdef isascii -# undef HAVE_ISASCII /* just in case */ -# define HAVE_ISASCII 1 -#else -#endif -#if STDC_HEADERS || !HAVE_ISASCII -# define is_ascii(c) 1 -#else -# define is_ascii(c) isascii(c) -#endif - -#define is_space(c) (is_ascii(c) && isspace(c)) -#define is_alpha(c) (is_ascii(c) && isalpha(c)) -#define is_alnum(c) (is_ascii(c) && isalnum(c)) - -/* Scanning macros */ -#define isidchar(ch) (is_alnum(ch) || (ch) == '_') -#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') - -/* Forward references */ -char *ppdirforward(); -char *ppdirbackward(); -char *skipspace(); -char *scanstring(); -int writeblanks(); -int test1(); -int convert1(); - -/* The main program */ -int -main(argc, argv) - int argc; - char *argv[]; -{ FILE *in = stdin; - FILE *out = stdout; - char *filename = 0; - char *program_name = argv[0]; - char *output_name = 0; -#define bufsize 5000 /* arbitrary size */ - char *buf; - char *line; - char *more; - char *usage = - "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n"; - /* - * In previous versions, ansi2knr recognized a --varargs switch. - * If this switch was supplied, ansi2knr would attempt to convert - * a ... argument to va_alist and va_dcl; if this switch was not - * supplied, ansi2knr would simply drop any such arguments. - * Now, ansi2knr always does this conversion, and we only - * check for this switch for backward compatibility. - */ - int convert_varargs = 1; - int output_error; - - while ( argc > 1 && argv[1][0] == '-' ) { - if ( !strcmp(argv[1], "--varargs") ) { - convert_varargs = 1; - argc--; - argv++; - continue; - } - if ( !strcmp(argv[1], "--filename") && argc > 2 ) { - filename = argv[2]; - argc -= 2; - argv += 2; - continue; - } - fprintf(stderr, "%s: Unrecognized switch: %s\n", program_name, - argv[1]); - fprintf(stderr, usage); - exit(1); - } - switch ( argc ) - { - default: - fprintf(stderr, usage); - exit(0); - case 3: - output_name = argv[2]; - out = fopen(output_name, "w"); - if ( out == NULL ) { - fprintf(stderr, "%s: Cannot open output file %s\n", - program_name, output_name); - exit(1); - } - /* falls through */ - case 2: - in = fopen(argv[1], "r"); - if ( in == NULL ) { - fprintf(stderr, "%s: Cannot open input file %s\n", - program_name, argv[1]); - exit(1); - } - if ( filename == 0 ) - filename = argv[1]; - /* falls through */ - case 1: - break; - } - if ( filename ) - fprintf(out, "#line 1 \"%s\"\n", filename); - buf = malloc(bufsize); - if ( buf == NULL ) - { - fprintf(stderr, "Unable to allocate read buffer!\n"); - exit(1); - } - line = buf; - while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) - { -test: line += strlen(line); - switch ( test1(buf) ) - { - case 2: /* a function header */ - convert1(buf, out, 1, convert_varargs); - break; - case 1: /* a function */ - /* Check for a { at the start of the next line. */ - more = ++line; -f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ - goto wl; - if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) - goto wl; - switch ( *skipspace(ppdirforward(more), 1) ) - { - case '{': - /* Definitely a function header. */ - convert1(buf, out, 0, convert_varargs); - fputs(more, out); - break; - case 0: - /* The next line was blank or a comment: */ - /* keep scanning for a non-comment. */ - line += strlen(line); - goto f; - default: - /* buf isn't a function header, but */ - /* more might be. */ - fputs(buf, out); - strcpy(buf, more); - line = buf; - goto test; - } - break; - case -1: /* maybe the start of a function */ - if ( line != buf + (bufsize - 1) ) /* overflow check */ - continue; - /* falls through */ - default: /* not a function */ -wl: fputs(buf, out); - break; - } - line = buf; - } - if ( line != buf ) - fputs(buf, out); - free(buf); - if ( output_name ) { - output_error = ferror(out); - output_error |= fclose(out); - } else { /* out == stdout */ - fflush(out); - output_error = ferror(out); - } - if ( output_error ) { - fprintf(stderr, "%s: error writing to %s\n", program_name, - (output_name ? output_name : "stdout")); - exit(1); - } - if ( in != stdin ) - fclose(in); - return 0; -} - -/* - * Skip forward or backward over one or more preprocessor directives. - */ -char * -ppdirforward(p) - char *p; -{ - for (; *p == '#'; ++p) { - for (; *p != '\r' && *p != '\n'; ++p) - if (*p == 0) - return p; - if (*p == '\r' && p[1] == '\n') - ++p; - } - return p; -} -char * -ppdirbackward(p, limit) - char *p; - char *limit; -{ - char *np = p; - - for (;; p = --np) { - if (*np == '\n' && np[-1] == '\r') - --np; - for (; np > limit && np[-1] != '\r' && np[-1] != '\n'; --np) - if (np[-1] == 0) - return np; - if (*np != '#') - return p; - } -} - -/* - * Skip over whitespace, comments, and preprocessor directives, - * in either direction. - */ -char * -skipspace(p, dir) - char *p; - int dir; /* 1 for forward, -1 for backward */ -{ - for ( ; ; ) { - while ( is_space(*p) ) - p += dir; - if ( !(*p == '/' && p[dir] == '*') ) - break; - p += dir; p += dir; - while ( !(*p == '*' && p[dir] == '/') ) { - if ( *p == 0 ) - return p; /* multi-line comment?? */ - p += dir; - } - p += dir; p += dir; - } - return p; -} - -/* Scan over a quoted string, in either direction. */ -char * -scanstring(p, dir) - char *p; - int dir; -{ - for (p += dir; ; p += dir) - if (*p == '"' && p[-dir] != '\\') - return p + dir; -} - -/* - * Write blanks over part of a string. - * Don't overwrite end-of-line characters. - */ -int -writeblanks(start, end) - char *start; - char *end; -{ char *p; - for ( p = start; p < end; p++ ) - if ( *p != '\r' && *p != '\n' ) - *p = ' '; - return 0; -} - -/* - * Test whether the string in buf is a function definition. - * The string may contain and/or end with a newline. - * Return as follows: - * 0 - definitely not a function definition; - * 1 - definitely a function definition; - * 2 - definitely a function prototype (NOT USED); - * -1 - may be the beginning of a function definition, - * append another line and look again. - * The reason we don't attempt to convert function prototypes is that - * Ghostscript's declaration-generating macros look too much like - * prototypes, and confuse the algorithms. - */ -int -test1(buf) - char *buf; -{ char *p = buf; - char *bend; - char *endfn; - int contin; - - if ( !isidfirstchar(*p) ) - return 0; /* no name at left margin */ - bend = skipspace(ppdirbackward(buf + strlen(buf) - 1, buf), -1); - switch ( *bend ) - { - case ';': contin = 0 /*2*/; break; - case ')': contin = 1; break; - case '{': return 0; /* not a function */ - case '}': return 0; /* not a function */ - default: contin = -1; - } - while ( isidchar(*p) ) - p++; - endfn = p; - p = skipspace(p, 1); - if ( *p++ != '(' ) - return 0; /* not a function */ - p = skipspace(p, 1); - if ( *p == ')' ) - return 0; /* no parameters */ - /* Check that the apparent function name isn't a keyword. */ - /* We only need to check for keywords that could be followed */ - /* by a left parenthesis (which, unfortunately, is most of them). */ - { static char *words[] = - { "asm", "auto", "case", "char", "const", "double", - "extern", "float", "for", "if", "int", "long", - "register", "return", "short", "signed", "sizeof", - "static", "switch", "typedef", "unsigned", - "void", "volatile", "while", 0 - }; - char **key = words; - char *kp; - unsigned len = endfn - buf; - - while ( (kp = *key) != 0 ) - { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) - return 0; /* name is a keyword */ - key++; - } - } - { - char *id = p; - int len; - /* - * Check for identifier1(identifier2) and not - * identifier1(void), or identifier1(identifier2, xxxx). - */ - - while ( isidchar(*p) ) - p++; - len = p - id; - p = skipspace(p, 1); - if (*p == ',' || - (*p == ')' && (len != 4 || strncmp(id, "void", 4))) - ) - return 0; /* not a function */ - } - /* - * If the last significant character was a ), we need to count - * parentheses, because it might be part of a formal parameter - * that is a procedure. - */ - if (contin > 0) { - int level = 0; - - for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1)) - level += (*p == '(' ? 1 : *p == ')' ? -1 : 0); - if (level > 0) - contin = -1; - } - return contin; -} - -/* Convert a recognized function definition or header to K&R syntax. */ -int -convert1(buf, out, header, convert_varargs) - char *buf; - FILE *out; - int header; /* Boolean */ - int convert_varargs; /* Boolean */ -{ char *endfn; - char *p; - /* - * The breaks table contains pointers to the beginning and end - * of each argument. - */ - char **breaks; - unsigned num_breaks = 2; /* for testing */ - char **btop; - char **bp; - char **ap; - char *vararg = 0; - - /* Pre-ANSI implementations don't agree on whether strchr */ - /* is called strchr or index, so we open-code it here. */ - for ( endfn = buf; *(endfn++) != '('; ) - ; -top: p = endfn; - breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); - if ( breaks == NULL ) - { /* Couldn't allocate break table, give up */ - fprintf(stderr, "Unable to allocate break table!\n"); - fputs(buf, out); - return -1; - } - btop = breaks + num_breaks * 2 - 2; - bp = breaks; - /* Parse the argument list */ - do - { int level = 0; - char *lp = NULL; - char *rp = NULL; - char *end = NULL; - - if ( bp >= btop ) - { /* Filled up break table. */ - /* Allocate a bigger one and start over. */ - free((char *)breaks); - num_breaks <<= 1; - goto top; - } - *bp++ = p; - /* Find the end of the argument */ - for ( ; end == NULL; p++ ) - { switch(*p) - { - case ',': - if ( !level ) end = p; - break; - case '(': - if ( !level ) lp = p; - level++; - break; - case ')': - if ( --level < 0 ) end = p; - else rp = p; - break; - case '/': - if (p[1] == '*') - p = skipspace(p, 1) - 1; - break; - case '"': - p = scanstring(p, 1) - 1; - break; - default: - ; - } - } - /* Erase any embedded prototype parameters. */ - if ( lp && rp ) - writeblanks(lp + 1, rp); - p--; /* back up over terminator */ - /* Find the name being declared. */ - /* This is complicated because of procedure and */ - /* array modifiers. */ - for ( ; ; ) - { p = skipspace(p - 1, -1); - switch ( *p ) - { - case ']': /* skip array dimension(s) */ - case ')': /* skip procedure args OR name */ - { int level = 1; - while ( level ) - switch ( *--p ) - { - case ']': case ')': - level++; - break; - case '[': case '(': - level--; - break; - case '/': - if (p > buf && p[-1] == '*') - p = skipspace(p, -1) + 1; - break; - case '"': - p = scanstring(p, -1) + 1; - break; - default: ; - } - } - if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) - { /* We found the name being declared */ - while ( !isidfirstchar(*p) ) - p = skipspace(p, 1) + 1; - goto found; - } - break; - default: - goto found; - } - } -found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) - { if ( convert_varargs ) - { *bp++ = "va_alist"; - vararg = p-2; - } - else - { p++; - if ( bp == breaks + 1 ) /* sole argument */ - writeblanks(breaks[0], p); - else - writeblanks(bp[-1] - 1, p); - bp--; - } - } - else - { while ( isidchar(*p) ) p--; - *bp++ = p+1; - } - p = end; - } - while ( *p++ == ',' ); - *bp = p; - /* Make a special check for 'void' arglist */ - if ( bp == breaks+2 ) - { p = skipspace(breaks[0], 1); - if ( !strncmp(p, "void", 4) ) - { p = skipspace(p+4, 1); - if ( p == breaks[2] - 1 ) - { bp = breaks; /* yup, pretend arglist is empty */ - writeblanks(breaks[0], p + 1); - } - } - } - /* Put out the function name and left parenthesis. */ - p = buf; - while ( p != endfn ) putc(*p, out), p++; - /* Put out the declaration. */ - if ( header ) - { fputs(");", out); - for ( p = breaks[0]; *p; p++ ) - if ( *p == '\r' || *p == '\n' ) - putc(*p, out); - } - else - { for ( ap = breaks+1; ap < bp; ap += 2 ) - { p = *ap; - while ( isidchar(*p) ) - putc(*p, out), p++; - if ( ap < bp - 1 ) - fputs(", ", out); - } - fputs(") ", out); - /* Put out the argument declarations */ - for ( ap = breaks+2; ap <= bp; ap += 2 ) - (*ap)[-1] = ';'; - if ( vararg != 0 ) - { *vararg = 0; - fputs(breaks[0], out); /* any prior args */ - fputs("va_dcl", out); /* the final arg */ - fputs(bp[0], out); - } - else - fputs(breaks[0], out); - } - free((char *)breaks); - return 0; -} diff --git a/reactos/dll/3rdparty/libjpeg/change.log b/reactos/dll/3rdparty/libjpeg/change.log index a1d94ff47ed..97cde1d43ed 100644 --- a/reactos/dll/3rdparty/libjpeg/change.log +++ b/reactos/dll/3rdparty/libjpeg/change.log @@ -1,6 +1,33 @@ CHANGE LOG for Independent JPEG Group's JPEG software +Version 9a 19-Jan-2014 +----------------------- + +Add support for wide gamut color spaces (JFIF version 2). +Improve clarity and accuracy in color conversion modules. +Note: Requires rebuild of test images. + +Extend the bit depth support to all values from 8 to 12 +(BITS_IN_JSAMPLE configuration option in jmorecfg.h). +jpegtran now supports N bits sample data precision with all N from 8 to 12 +in a single instance. Thank to Roland Fassauer for inspiration. + +Try to resolve issues with new boolean type definition. +Thank also to v4hn for suggestion. + +Enable option to use default Huffman tables for lossless compression +(for hardware solution), and in this case improve lossless RGB compression +with reversible color transform. Thank to Benny Alexandar for hint. + +Extend the entropy decoding structure, so that extraneous bytes between +compressed scan data and following marker can be reported correctly. +Thank to Nigel Tao for hint. + +Add jpegtran -wipe option and extension for -crop. +Thank to Andrew Senior, David Clunie, and Josef Schmid for suggestion. + + Version 9 13-Jan-2013 ---------------------- diff --git a/reactos/dll/3rdparty/libjpeg/cjpeg.c b/reactos/dll/3rdparty/libjpeg/cjpeg.c index d05cdd0a941..3cb07fa4ba7 100644 --- a/reactos/dll/3rdparty/libjpeg/cjpeg.c +++ b/reactos/dll/3rdparty/libjpeg/cjpeg.c @@ -174,6 +174,7 @@ usage (void) #endif #if JPEG_LIB_VERSION_MAJOR >= 9 fprintf(stderr, " -rgb1 Create RGB JPEG file with reversible color transform\n"); + fprintf(stderr, " -bgycc Create big gamut YCC JPEG file\n"); #endif #ifdef DCT_ISLOW_SUPPORTED fprintf(stderr, " -dct int Use integer DCT method%s\n", @@ -323,6 +324,17 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, #endif jpeg_set_colorspace(cinfo, JCS_RGB); + } else if (keymatch(arg, "bgycc", 5)) { + /* Force a big gamut YCC JPEG file to be generated. */ +#if JPEG_LIB_VERSION_MAJOR >= 9 && \ + (JPEG_LIB_VERSION_MAJOR > 9 || JPEG_LIB_VERSION_MINOR >= 1) + jpeg_set_colorspace(cinfo, JCS_BG_YCC); +#else + fprintf(stderr, "%s: sorry, BG_YCC colorspace not supported\n", + progname); + exit(EXIT_FAILURE); +#endif + } else if (keymatch(arg, "maxmemory", 3)) { /* Maximum memory in Kb (or Mb with 'm'). */ long lval; diff --git a/reactos/dll/3rdparty/libjpeg/jcapistd.c b/reactos/dll/3rdparty/libjpeg/jcapistd.c index c0320b1b190..0917afa97dc 100644 --- a/reactos/dll/3rdparty/libjpeg/jcapistd.c +++ b/reactos/dll/3rdparty/libjpeg/jcapistd.c @@ -2,6 +2,7 @@ * jcapistd.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -145,7 +146,7 @@ jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data, (*cinfo->master->pass_startup) (cinfo); /* Verify that at least one iMCU row has been passed. */ - lines_per_iMCU_row = cinfo->max_v_samp_factor * DCTSIZE; + lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_v_scaled_size; if (num_lines < lines_per_iMCU_row) ERREXIT(cinfo, JERR_BUFFER_SIZE); diff --git a/reactos/dll/3rdparty/libjpeg/jcarith.c b/reactos/dll/3rdparty/libjpeg/jcarith.c index a7f9ff7acca..a64190e72e0 100644 --- a/reactos/dll/3rdparty/libjpeg/jcarith.c +++ b/reactos/dll/3rdparty/libjpeg/jcarith.c @@ -1,7 +1,7 @@ /* * jcarith.c * - * Developed 1997-2012 by Guido Vollbeding. + * Developed 1997-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -362,7 +362,6 @@ METHODDEF(boolean) encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; - JBLOCKROW block; unsigned char *st; int blkn, ci, tbl; int v, v2, m; @@ -381,14 +380,13 @@ encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* Encode the MCU data blocks */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - block = MCU_data[blkn]; ci = cinfo->MCU_membership[blkn]; tbl = cinfo->cur_comp_info[ci]->dc_tbl_no; /* Compute the DC value after the required point transform by Al. * This is simply an arithmetic right shift. */ - m = IRIGHT_SHIFT((int) ((*block)[0]), cinfo->Al); + m = IRIGHT_SHIFT((int) (MCU_data[blkn][0][0]), cinfo->Al); /* Sections F.1.4.1 & F.1.4.4.1: Encoding of DC coefficients */ @@ -453,11 +451,11 @@ METHODDEF(boolean) encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + const int * natural_order; JBLOCKROW block; unsigned char *st; int tbl, k, ke; int v, v2, m; - const int * natural_order; /* Emit restart marker if needed */ if (cinfo->restart_interval) { @@ -552,6 +550,8 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* * MCU encoding for DC successive approximation refinement scan. + * Note: we assume such scans can be multi-component, + * although the spec is not very clear on the point. */ METHODDEF(boolean) @@ -593,11 +593,11 @@ METHODDEF(boolean) encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + const int * natural_order; JBLOCKROW block; unsigned char *st; int tbl, k, ke, kex; int v; - const int * natural_order; /* Emit restart marker if needed */ if (cinfo->restart_interval) { @@ -692,12 +692,13 @@ METHODDEF(boolean) encode_mcu (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; - jpeg_component_info * compptr; + const int * natural_order; JBLOCKROW block; unsigned char *st; - int blkn, ci, tbl, k, ke; + int tbl, k, ke; int v, v2, m; - const int * natural_order; + int blkn, ci; + jpeg_component_info * compptr; /* Emit restart marker if needed */ if (cinfo->restart_interval) { diff --git a/reactos/dll/3rdparty/libjpeg/jccolor.c b/reactos/dll/3rdparty/libjpeg/jccolor.c index 81d74efb6e2..f6b4a493fda 100644 --- a/reactos/dll/3rdparty/libjpeg/jccolor.c +++ b/reactos/dll/3rdparty/libjpeg/jccolor.c @@ -2,7 +2,7 @@ * jccolor.c * * Copyright (C) 1991-1996, Thomas G. Lane. - * Modified 2011-2012 by Guido Vollbeding. + * Modified 2011-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -29,13 +29,25 @@ typedef my_color_converter * my_cconvert_ptr; /**************** RGB -> YCbCr conversion: most common case **************/ /* - * YCbCr is defined per CCIR 601-1, except that Cb and Cr are - * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. - * The conversion equations to be implemented are therefore - * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B - * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE - * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE - * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * YCbCr is defined per Recommendation ITU-R BT.601-7 (03/2011), + * previously known as Recommendation CCIR 601-1, except that Cb and Cr + * are normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * sRGB (standard RGB color space) is defined per IEC 61966-2-1:1999. + * sYCC (standard luma-chroma-chroma color space with extended gamut) + * is defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex F. + * bg-sRGB and bg-sYCC (big gamut standard color spaces) + * are defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex G. + * Note that the derived conversion coefficients given in some of these + * documents are imprecise. The general conversion equations are + * Y = Kr * R + (1 - Kr - Kb) * G + Kb * B + * Cb = 0.5 * (B - Y) / (1 - Kb) + * Cr = 0.5 * (R - Y) / (1 - Kr) + * With Kr = 0.299 and Kb = 0.114 (derived according to SMPTE RP 177-1993 + * from the 1953 FCC NTSC primaries and CIE Illuminant C), + * the conversion equations to be implemented are therefore + * Y = 0.299 * R + 0.587 * G + 0.114 * B + * Cb = -0.168735892 * R - 0.331264108 * G + 0.5 * B + CENTERJSAMPLE + * Cr = 0.5 * R - 0.418687589 * G - 0.081312411 * B + CENTERJSAMPLE * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2, * rather than CENTERJSAMPLE, for Cb and Cr. This gave equal positive and * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0) @@ -49,9 +61,9 @@ typedef my_color_converter * my_cconvert_ptr; * For even more speed, we avoid doing any multiplications in the inner loop * by precalculating the constants times R,G,B for all possible values. * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); - * for 12-bit samples it is still acceptable. It's not very reasonable for - * 16-bit samples, but if you want lossless storage you shouldn't be changing - * colorspace anyway. + * for 9-bit to 12-bit samples it is still acceptable. It's not very + * reasonable for 16-bit samples, but if you want lossless storage you + * shouldn't be changing colorspace anyway. * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included * in the tables to save adding them separately in the inner loop. */ @@ -96,21 +108,21 @@ rgb_ycc_start (j_compress_ptr cinfo) (TABLE_SIZE * SIZEOF(INT32))); for (i = 0; i <= MAXJSAMPLE; i++) { - rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i; - rgb_ycc_tab[i+G_Y_OFF] = FIX(0.58700) * i; - rgb_ycc_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; - rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.16874)) * i; - rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.33126)) * i; + rgb_ycc_tab[i+R_Y_OFF] = FIX(0.299) * i; + rgb_ycc_tab[i+G_Y_OFF] = FIX(0.587) * i; + rgb_ycc_tab[i+B_Y_OFF] = FIX(0.114) * i + ONE_HALF; + rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.168735892)) * i; + rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.331264108)) * i; /* We use a rounding fudge-factor of 0.5-epsilon for Cb and Cr. * This ensures that the maximum output will round to MAXJSAMPLE * not MAXJSAMPLE+1, and thus that we don't have to range-limit. */ - rgb_ycc_tab[i+B_CB_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; + rgb_ycc_tab[i+B_CB_OFF] = FIX(0.5) * i + CBCR_OFFSET + ONE_HALF-1; /* B=>Cb and R=>Cr tables are the same - rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; + rgb_ycc_tab[i+R_CR_OFF] = FIX(0.5) * i + CBCR_OFFSET + ONE_HALF-1; */ - rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.41869)) * i; - rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.08131)) * i; + rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.418687589)) * i; + rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.081312411)) * i; } } @@ -274,6 +286,9 @@ cmyk_ycck_convert (j_compress_ptr cinfo, * Convert some rows of samples to the JPEG colorspace. * [R,G,B] to [R-G,G,B-G] conversion with modulo calculation * (forward reversible color transform). + * This can be seen as an adaption of the general RGB->YCbCr + * conversion equation with Kr = Kb = 0, while replacing the + * normalization by modulo calculation. */ METHODDEF(void) @@ -312,7 +327,7 @@ rgb_rgb1_convert (j_compress_ptr cinfo, /* * Convert some rows of samples to the JPEG colorspace. * This version handles grayscale output with no conversion. - * The source can be either plain grayscale or YCbCr (since Y == gray). + * The source can be either plain grayscale or YCC (since Y == gray). */ METHODDEF(void) @@ -439,11 +454,13 @@ jinit_color_converter (j_compress_ptr cinfo) break; case JCS_RGB: + case JCS_BG_RGB: if (cinfo->input_components != RGB_PIXELSIZE) ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); break; case JCS_YCbCr: + case JCS_BG_YCC: if (cinfo->input_components != 3) ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); break; @@ -460,8 +477,10 @@ jinit_color_converter (j_compress_ptr cinfo) break; } - /* Support color transform only for RGB colorspace */ - if (cinfo->color_transform && cinfo->jpeg_color_space != JCS_RGB) + /* Support color transform only for RGB colorspaces */ + if (cinfo->color_transform && + cinfo->jpeg_color_space != JCS_RGB && + cinfo->jpeg_color_space != JCS_BG_RGB) ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); /* Check num_components, set conversion method based on requested space */ @@ -469,20 +488,26 @@ jinit_color_converter (j_compress_ptr cinfo) case JCS_GRAYSCALE: if (cinfo->num_components != 1) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_GRAYSCALE || - cinfo->in_color_space == JCS_YCbCr) + switch (cinfo->in_color_space) { + case JCS_GRAYSCALE: + case JCS_YCbCr: + case JCS_BG_YCC: cconvert->pub.color_convert = grayscale_convert; - else if (cinfo->in_color_space == JCS_RGB) { + break; + case JCS_RGB: cconvert->pub.start_pass = rgb_ycc_start; cconvert->pub.color_convert = rgb_gray_convert; - } else + break; + default: ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } break; case JCS_RGB: + case JCS_BG_RGB: if (cinfo->num_components != 3) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_RGB) { + if (cinfo->in_color_space == cinfo->jpeg_color_space) { switch (cinfo->color_transform) { case JCT_NONE: cconvert->pub.color_convert = rgb_convert; @@ -492,7 +517,6 @@ jinit_color_converter (j_compress_ptr cinfo) break; default: ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; } } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); @@ -501,13 +525,48 @@ jinit_color_converter (j_compress_ptr cinfo) case JCS_YCbCr: if (cinfo->num_components != 3) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_RGB) { + switch (cinfo->in_color_space) { + case JCS_RGB: cconvert->pub.start_pass = rgb_ycc_start; cconvert->pub.color_convert = rgb_ycc_convert; - } else if (cinfo->in_color_space == JCS_YCbCr) + break; + case JCS_YCbCr: cconvert->pub.color_convert = null_convert; - else + break; + default: ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } + break; + + case JCS_BG_YCC: + if (cinfo->num_components != 3) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + switch (cinfo->in_color_space) { + case JCS_RGB: + /* For conversion from normal RGB input to BG_YCC representation, + * the Cb/Cr values are first computed as usual, and then + * quantized further after DCT processing by a factor of + * 2 in reference to the nominal quantization factor. + */ + /* need quantization scale by factor of 2 after DCT */ + cinfo->comp_info[1].component_needed = TRUE; + cinfo->comp_info[2].component_needed = TRUE; + /* compute normal YCC first */ + cconvert->pub.start_pass = rgb_ycc_start; + cconvert->pub.color_convert = rgb_ycc_convert; + break; + case JCS_YCbCr: + /* need quantization scale by factor of 2 after DCT */ + cinfo->comp_info[1].component_needed = TRUE; + cinfo->comp_info[2].component_needed = TRUE; + /*FALLTHROUGH*/ + case JCS_BG_YCC: + /* Pass through for BG_YCC input */ + cconvert->pub.color_convert = null_convert; + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } break; case JCS_CMYK: @@ -522,13 +581,17 @@ jinit_color_converter (j_compress_ptr cinfo) case JCS_YCCK: if (cinfo->num_components != 4) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_CMYK) { + switch (cinfo->in_color_space) { + case JCS_CMYK: cconvert->pub.start_pass = rgb_ycc_start; cconvert->pub.color_convert = cmyk_ycck_convert; - } else if (cinfo->in_color_space == JCS_YCCK) + break; + case JCS_YCCK: cconvert->pub.color_convert = null_convert; - else + break; + default: ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } break; default: /* allow null conversion of JCS_UNKNOWN */ diff --git a/reactos/dll/3rdparty/libjpeg/jcdctmgr.c b/reactos/dll/3rdparty/libjpeg/jcdctmgr.c index 0bbdbb685d1..fafab91c69b 100644 --- a/reactos/dll/3rdparty/libjpeg/jcdctmgr.c +++ b/reactos/dll/3rdparty/libjpeg/jcdctmgr.c @@ -2,6 +2,7 @@ * jcdctmgr.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2003-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -25,22 +26,30 @@ typedef struct { /* Pointer to the DCT routine actually in use */ forward_DCT_method_ptr do_dct[MAX_COMPONENTS]; - /* The actual post-DCT divisors --- not identical to the quant table - * entries, because of scaling (especially for an unnormalized DCT). - * Each table is given in normal array order. - */ - DCTELEM * divisors[NUM_QUANT_TBLS]; - #ifdef DCT_FLOAT_SUPPORTED /* Same as above for the floating-point case. */ float_DCT_method_ptr do_float_dct[MAX_COMPONENTS]; - FAST_FLOAT * float_divisors[NUM_QUANT_TBLS]; #endif } my_fdct_controller; typedef my_fdct_controller * my_fdct_ptr; +/* The allocated post-DCT divisor tables -- big enough for any + * supported variant and not identical to the quant table entries, + * because of scaling (especially for an unnormalized DCT) -- + * are pointed to by dct_table in the per-component comp_info + * structures. Each table is given in normal array order. + */ + +typedef union { + DCTELEM int_array[DCTSIZE2]; +#ifdef DCT_FLOAT_SUPPORTED + FAST_FLOAT float_array[DCTSIZE2]; +#endif +} divisor_table; + + /* The current scaled-DCT routines require ISLOW-style divisor tables, * so be sure to compile that code if either ISLOW or SCALING is requested. */ @@ -71,7 +80,7 @@ forward_DCT (j_compress_ptr cinfo, jpeg_component_info * compptr, /* This routine is heavily used, so it's worth coding it tightly. */ my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; forward_DCT_method_ptr do_dct = fdct->do_dct[compptr->component_index]; - DCTELEM * divisors = fdct->divisors[compptr->quant_tbl_no]; + DCTELEM * divisors = (DCTELEM *) compptr->dct_table; DCTELEM workspace[DCTSIZE2]; /* work area for FDCT subroutine */ JDIMENSION bi; @@ -134,7 +143,7 @@ forward_DCT_float (j_compress_ptr cinfo, jpeg_component_info * compptr, /* This routine is heavily used, so it's worth coding it tightly. */ my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; float_DCT_method_ptr do_dct = fdct->do_float_dct[compptr->component_index]; - FAST_FLOAT * divisors = fdct->float_divisors[compptr->quant_tbl_no]; + FAST_FLOAT * divisors = (FAST_FLOAT *) compptr->dct_table; FAST_FLOAT workspace[DCTSIZE2]; /* work area for FDCT subroutine */ JDIMENSION bi; @@ -352,22 +361,17 @@ start_pass_fdctmgr (j_compress_ptr cinfo) cinfo->quant_tbl_ptrs[qtblno] == NULL) ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); qtbl = cinfo->quant_tbl_ptrs[qtblno]; - /* Compute divisors for this quant table */ - /* We may do this more than once for same table, but it's not a big deal */ + /* Create divisor table from quant table */ switch (method) { #ifdef PROVIDE_ISLOW_TABLES case JDCT_ISLOW: /* For LL&M IDCT method, divisors are equal to raw quantization * coefficients multiplied by 8 (to counteract scaling). */ - if (fdct->divisors[qtblno] == NULL) { - fdct->divisors[qtblno] = (DCTELEM *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(DCTELEM)); - } - dtbl = fdct->divisors[qtblno]; + dtbl = (DCTELEM *) compptr->dct_table; for (i = 0; i < DCTSIZE2; i++) { - dtbl[i] = ((DCTELEM) qtbl->quantval[i]) << 3; + dtbl[i] = + ((DCTELEM) qtbl->quantval[i]) << (compptr->component_needed ? 4 : 3); } fdct->pub.forward_DCT[ci] = forward_DCT; break; @@ -395,17 +399,12 @@ start_pass_fdctmgr (j_compress_ptr cinfo) }; SHIFT_TEMPS - if (fdct->divisors[qtblno] == NULL) { - fdct->divisors[qtblno] = (DCTELEM *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(DCTELEM)); - } - dtbl = fdct->divisors[qtblno]; + dtbl = (DCTELEM *) compptr->dct_table; for (i = 0; i < DCTSIZE2; i++) { dtbl[i] = (DCTELEM) DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], (INT32) aanscales[i]), - CONST_BITS-3); + compptr->component_needed ? CONST_BITS-4 : CONST_BITS-3); } } fdct->pub.forward_DCT[ci] = forward_DCT; @@ -422,25 +421,20 @@ start_pass_fdctmgr (j_compress_ptr cinfo) * What's actually stored is 1/divisor so that the inner loop can * use a multiplication rather than a division. */ - FAST_FLOAT * fdtbl; + FAST_FLOAT * fdtbl = (FAST_FLOAT *) compptr->dct_table; int row, col; static const double aanscalefactor[DCTSIZE] = { 1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379 }; - if (fdct->float_divisors[qtblno] == NULL) { - fdct->float_divisors[qtblno] = (FAST_FLOAT *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(FAST_FLOAT)); - } - fdtbl = fdct->float_divisors[qtblno]; i = 0; for (row = 0; row < DCTSIZE; row++) { for (col = 0; col < DCTSIZE; col++) { fdtbl[i] = (FAST_FLOAT) - (1.0 / (((double) qtbl->quantval[i] * - aanscalefactor[row] * aanscalefactor[col] * 8.0))); + (1.0 / ((double) qtbl->quantval[i] * + aanscalefactor[row] * aanscalefactor[col] * + (compptr->component_needed ? 16.0 : 8.0))); i++; } } @@ -464,19 +458,20 @@ GLOBAL(void) jinit_forward_dct (j_compress_ptr cinfo) { my_fdct_ptr fdct; - int i; + int ci; + jpeg_component_info *compptr; fdct = (my_fdct_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_fdct_controller)); - cinfo->fdct = (struct jpeg_forward_dct *) fdct; + cinfo->fdct = &fdct->pub; fdct->pub.start_pass = start_pass_fdctmgr; - /* Mark divisor tables unallocated */ - for (i = 0; i < NUM_QUANT_TBLS; i++) { - fdct->divisors[i] = NULL; -#ifdef DCT_FLOAT_SUPPORTED - fdct->float_divisors[i] = NULL; -#endif + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Allocate a divisor table for each component */ + compptr->dct_table = + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(divisor_table)); } } diff --git a/reactos/dll/3rdparty/libjpeg/jchuff.c b/reactos/dll/3rdparty/libjpeg/jchuff.c index 257d7aa1f54..d1313f676f6 100644 --- a/reactos/dll/3rdparty/libjpeg/jchuff.c +++ b/reactos/dll/3rdparty/libjpeg/jchuff.c @@ -2,7 +2,7 @@ * jchuff.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2006-2009 by Guido Vollbeding. + * Modified 2006-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -308,24 +308,27 @@ emit_bits_s (working_state * state, unsigned int code, int size) /* Emit some bits; return TRUE if successful, FALSE if must suspend */ { /* This routine is heavily used, so it's worth coding tightly. */ - register INT32 put_buffer = (INT32) code; - register int put_bits = state->cur.put_bits; + register INT32 put_buffer; + register int put_bits; /* if size is 0, caller used an invalid Huffman table entry */ if (size == 0) ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE); - put_buffer &= (((INT32) 1)<cur.put_bits; + put_buffer <<= 24 - put_bits; /* align incoming bits */ - put_buffer |= state->cur.put_buffer; /* and merge with old buffer contents */ - + /* and merge with old buffer contents */ + put_buffer |= state->cur.put_buffer; + while (put_bits >= 8) { int c = (int) ((put_buffer >> 16) & 0xFF); - + emit_byte_s(state, c, return FALSE); if (c == 0xFF) { /* need to stuff a zero byte? */ emit_byte_s(state, 0, return FALSE); @@ -347,8 +350,8 @@ emit_bits_e (huff_entropy_ptr entropy, unsigned int code, int size) /* Emit some bits, unless we are in gather mode */ { /* This routine is heavily used, so it's worth coding tightly. */ - register INT32 put_buffer = (INT32) code; - register int put_bits = entropy->saved.put_bits; + register INT32 put_buffer; + register int put_bits; /* if size is 0, caller used an invalid Huffman table entry */ if (size == 0) @@ -357,9 +360,11 @@ emit_bits_e (huff_entropy_ptr entropy, unsigned int code, int size) if (entropy->gather_statistics) return; /* do nothing if we're only getting stats */ - put_buffer &= (((INT32) 1)<saved.put_bits; put_buffer <<= 24 - put_bits; /* align incoming bits */ @@ -543,10 +548,7 @@ encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; register int temp, temp2; register int nbits; - int blkn, ci; - int Al = cinfo->Al; - JBLOCKROW block; - jpeg_component_info * compptr; + int blkn, ci, tbl; ISHIFT_TEMPS entropy->next_output_byte = cinfo->dest->next_output_byte; @@ -559,28 +561,27 @@ encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* Encode the MCU data blocks */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - block = MCU_data[blkn]; ci = cinfo->MCU_membership[blkn]; - compptr = cinfo->cur_comp_info[ci]; + tbl = cinfo->cur_comp_info[ci]->dc_tbl_no; /* Compute the DC value after the required point transform by Al. * This is simply an arithmetic right shift. */ - temp2 = IRIGHT_SHIFT((int) ((*block)[0]), Al); + temp = IRIGHT_SHIFT((int) (MCU_data[blkn][0][0]), cinfo->Al); /* DC differences are figured on the point-transformed values. */ - temp = temp2 - entropy->saved.last_dc_val[ci]; - entropy->saved.last_dc_val[ci] = temp2; + temp2 = temp - entropy->saved.last_dc_val[ci]; + entropy->saved.last_dc_val[ci] = temp; /* Encode the DC coefficient difference per section G.1.2.1 */ - temp2 = temp; + temp = temp2; if (temp < 0) { temp = -temp; /* temp is abs value of input */ /* For a negative input, want temp2 = bitwise complement of abs(input) */ /* This code assumes we are on a two's complement machine */ temp2--; } - + /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 0; while (temp) { @@ -592,10 +593,10 @@ encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) */ if (nbits > MAX_COEF_BITS+1) ERREXIT(cinfo, JERR_BAD_DCT_COEF); - + /* Count/emit the Huffman-coded symbol for the number of bits */ - emit_dc_symbol(entropy, compptr->dc_tbl_no, nbits); - + emit_dc_symbol(entropy, tbl, nbits); + /* Emit that number of bits of the value, if positive, */ /* or the complement of its magnitude, if negative. */ if (nbits) /* emit_bits rejects calls with size 0 */ @@ -628,12 +629,12 @@ METHODDEF(boolean) encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + const int * natural_order; + JBLOCKROW block; register int temp, temp2; register int nbits; register int r, k; int Se, Al; - const int * natural_order; - JBLOCKROW block; entropy->next_output_byte = cinfo->dest->next_output_byte; entropy->free_in_buffer = cinfo->dest->free_in_buffer; @@ -731,18 +732,15 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* * MCU encoding for DC successive approximation refinement scan. - * Note: we assume such scans can be multi-component, although the spec - * is not very clear on the point. + * Note: we assume such scans can be multi-component, + * although the spec is not very clear on the point. */ METHODDEF(boolean) encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - register int temp; - int blkn; - int Al = cinfo->Al; - JBLOCKROW block; + int Al, blkn; entropy->next_output_byte = cinfo->dest->next_output_byte; entropy->free_in_buffer = cinfo->dest->free_in_buffer; @@ -752,13 +750,12 @@ encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) if (entropy->restarts_to_go == 0) emit_restart_e(entropy, entropy->next_restart_num); + Al = cinfo->Al; + /* Encode the MCU data blocks */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - block = MCU_data[blkn]; - /* We simply emit the Al'th bit of the DC coefficient value. */ - temp = (*block)[0]; - emit_bits_e(entropy, (unsigned int) (temp >> Al), 1); + emit_bits_e(entropy, (unsigned int) (MCU_data[blkn][0][0] >> Al), 1); } cinfo->dest->next_output_byte = entropy->next_output_byte; @@ -786,14 +783,14 @@ METHODDEF(boolean) encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + const int * natural_order; + JBLOCKROW block; register int temp; register int r, k; + int Se, Al; int EOB; char *BR_buffer; unsigned int BR; - int Se, Al; - const int * natural_order; - JBLOCKROW block; int absvalues[DCTSIZE2]; entropy->next_output_byte = cinfo->dest->next_output_byte; @@ -918,7 +915,7 @@ encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, { register int temp, temp2; register int nbits; - register int k, r, i; + register int r, k; int Se = state->cinfo->lim_Se; const int * natural_order = state->cinfo->natural_order; @@ -960,7 +957,7 @@ encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, r = 0; /* r = run length of zeros */ for (k = 1; k <= Se; k++) { - if ((temp = block[natural_order[k]]) == 0) { + if ((temp2 = block[natural_order[k]]) == 0) { r++; } else { /* if run length > 15, must emit special run-length-16 codes (0xF0) */ @@ -970,7 +967,7 @@ encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, r -= 16; } - temp2 = temp; + temp = temp2; if (temp < 0) { temp = -temp; /* temp is abs value of input */ /* This code assumes we are on a two's complement machine */ @@ -986,8 +983,8 @@ encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); /* Emit Huffman symbol for run length / number of bits */ - i = (r << 4) + nbits; - if (! emit_bits_s(state, actbl->ehufco[i], actbl->ehufsi[i])) + temp = (r << 4) + nbits; + if (! emit_bits_s(state, actbl->ehufco[temp], actbl->ehufsi[temp])) return FALSE; /* Emit that number of bits of the value, if positive, */ @@ -1124,16 +1121,16 @@ htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val, { register int temp; register int nbits; - register int k, r; + register int r, k; int Se = cinfo->lim_Se; const int * natural_order = cinfo->natural_order; - + /* Encode the DC coefficient difference per section F.1.2.1 */ - + temp = block[0] - last_dc_val; if (temp < 0) temp = -temp; - + /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 0; while (temp) { @@ -1148,11 +1145,11 @@ htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val, /* Count the Huffman symbol for the number of bits */ dc_counts[nbits]++; - + /* Encode the AC coefficients per section F.1.2.2 */ - + r = 0; /* r = run length of zeros */ - + for (k = 1; k <= Se; k++) { if ((temp = block[natural_order[k]]) == 0) { r++; @@ -1162,11 +1159,11 @@ htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val, ac_counts[0xF0]++; r -= 16; } - + /* Find the number of bits needed for the magnitude of the coefficient */ if (temp < 0) temp = -temp; - + /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 1; /* there must be at least one 1 bit */ while ((temp >>= 1)) @@ -1174,10 +1171,10 @@ htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val, /* Check for out-of-range coefficient values */ if (nbits > MAX_COEF_BITS) ERREXIT(cinfo, JERR_BAD_DCT_COEF); - + /* Count Huffman symbol for run length / number of bits */ ac_counts[(r << 4) + nbits]++; - + r = 0; } } @@ -1562,7 +1559,7 @@ jinit_huff_encoder (j_compress_ptr cinfo) entropy = (huff_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(huff_entropy_encoder)); - cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; + cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass_huff; /* Mark tables unallocated */ diff --git a/reactos/dll/3rdparty/libjpeg/jcinit.c b/reactos/dll/3rdparty/libjpeg/jcinit.c index 0ba310f217d..1e13e3462d6 100644 --- a/reactos/dll/3rdparty/libjpeg/jcinit.c +++ b/reactos/dll/3rdparty/libjpeg/jcinit.c @@ -2,6 +2,7 @@ * jcinit.c * * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2003-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -29,6 +30,24 @@ GLOBAL(void) jinit_compress_master (j_compress_ptr cinfo) { + long samplesperrow; + JDIMENSION jd_samplesperrow; + + /* For now, precision must match compiled-in value... */ + if (cinfo->data_precision != BITS_IN_JSAMPLE) + ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); + + /* Sanity check on image dimensions */ + if (cinfo->image_height <= 0 || cinfo->image_width <= 0 || + cinfo->input_components <= 0) + ERREXIT(cinfo, JERR_EMPTY_IMAGE); + + /* Width of an input scanline must be representable as JDIMENSION. */ + samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components; + jd_samplesperrow = (JDIMENSION) samplesperrow; + if ((long) jd_samplesperrow != samplesperrow) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + /* Initialize master control (includes parameter checking/processing) */ jinit_c_master_control(cinfo, FALSE /* full compression */); diff --git a/reactos/dll/3rdparty/libjpeg/jcmarker.c b/reactos/dll/3rdparty/libjpeg/jcmarker.c index 92aa65fe0dc..ca2bb39922f 100644 --- a/reactos/dll/3rdparty/libjpeg/jcmarker.c +++ b/reactos/dll/3rdparty/libjpeg/jcmarker.c @@ -2,7 +2,7 @@ * jcmarker.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2003-2012 by Guido Vollbeding. + * Modified 2003-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -508,8 +508,8 @@ write_marker_byte (j_compress_ptr cinfo, int val) * Write datastream header. * This consists of an SOI and optional APPn markers. * We recommend use of the JFIF marker, but not the Adobe marker, - * when using YCbCr or grayscale data. The JFIF marker should NOT - * be used for any other JPEG colorspace. The Adobe marker is helpful + * when using YCbCr or grayscale data. The JFIF marker is also used + * for other standard JPEG colorspaces. The Adobe marker is helpful * to distinguish RGB, CMYK, and YCCK colorspaces. * Note that an application can write additional header markers after * jpeg_start_compress returns. diff --git a/reactos/dll/3rdparty/libjpeg/jcmaster.c b/reactos/dll/3rdparty/libjpeg/jcmaster.c index caf80a53b38..2a8ae63303a 100644 --- a/reactos/dll/3rdparty/libjpeg/jcmaster.c +++ b/reactos/dll/3rdparty/libjpeg/jcmaster.c @@ -2,7 +2,7 @@ * jcmaster.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2003-2011 by Guido Vollbeding. + * Modified 2003-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -222,8 +222,6 @@ initial_setup (j_compress_ptr cinfo, boolean transcode_only) { int ci, ssize; jpeg_component_info *compptr; - long samplesperrow; - JDIMENSION jd_samplesperrow; if (transcode_only) jpeg_calc_trans_dimensions(cinfo); @@ -251,7 +249,7 @@ initial_setup (j_compress_ptr cinfo, boolean transcode_only) /* Sanity check on image dimensions */ if (cinfo->jpeg_height <= 0 || cinfo->jpeg_width <= 0 || - cinfo->num_components <= 0 || cinfo->input_components <= 0) + cinfo->num_components <= 0) ERREXIT(cinfo, JERR_EMPTY_IMAGE); /* Make sure image isn't bigger than I can handle */ @@ -259,14 +257,8 @@ initial_setup (j_compress_ptr cinfo, boolean transcode_only) (long) cinfo->jpeg_width > (long) JPEG_MAX_DIMENSION) ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); - /* Width of an input scanline must be representable as JDIMENSION. */ - samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components; - jd_samplesperrow = (JDIMENSION) samplesperrow; - if ((long) jd_samplesperrow != samplesperrow) - ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); - - /* For now, precision must match compiled-in value... */ - if (cinfo->data_precision != BITS_IN_JSAMPLE) + /* Only 8 to 12 bits data precision are supported for DCT based JPEG */ + if (cinfo->data_precision < 8 || cinfo->data_precision > 12) ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); /* Check that number of components won't exceed internal array sizes */ @@ -339,8 +331,10 @@ initial_setup (j_compress_ptr cinfo, boolean transcode_only) jdiv_round_up((long) cinfo->jpeg_height * (long) (compptr->v_samp_factor * compptr->DCT_v_scaled_size), (long) (cinfo->max_v_samp_factor * cinfo->block_size)); - /* Mark component needed (this flag isn't actually used for compression) */ - compptr->component_needed = TRUE; + /* Don't need quantization scale after DCT, + * until color conversion says otherwise. + */ + compptr->component_needed = FALSE; } /* Compute number of fully interleaved MCU rows (number of times that @@ -811,7 +805,7 @@ jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only) master = (my_master_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_comp_master)); - cinfo->master = (struct jpeg_comp_master *) master; + cinfo->master = &master->pub; master->pub.prepare_for_pass = prepare_for_pass; master->pub.pass_startup = pass_startup; master->pub.finish_pass = finish_pass_master; @@ -833,10 +827,14 @@ jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only) cinfo->num_scans = 1; } - if ((cinfo->progressive_mode || cinfo->block_size < DCTSIZE) && - !cinfo->arith_code) /* TEMPORARY HACK ??? */ - /* assume default tables no good for progressive or downscale mode */ - cinfo->optimize_coding = TRUE; + if (cinfo->optimize_coding) + cinfo->arith_code = FALSE; /* disable arithmetic coding */ + else if (! cinfo->arith_code && + (cinfo->progressive_mode || + (cinfo->block_size > 1 && cinfo->block_size < DCTSIZE))) + /* TEMPORARY HACK ??? */ + /* assume default tables no good for progressive or reduced AC mode */ + cinfo->optimize_coding = TRUE; /* force Huffman optimization */ /* Initialize my private state */ if (transcode_only) { diff --git a/reactos/dll/3rdparty/libjpeg/jcparam.c b/reactos/dll/3rdparty/libjpeg/jcparam.c index e530c3c4bd1..4b2bee24976 100644 --- a/reactos/dll/3rdparty/libjpeg/jcparam.c +++ b/reactos/dll/3rdparty/libjpeg/jcparam.c @@ -2,7 +2,7 @@ * jcparam.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2003-2012 by Guido Vollbeding. + * Modified 2003-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -323,18 +323,17 @@ jpeg_set_defaults (j_compress_ptr cinfo) /* Expect normal source image, not raw downsampled data */ cinfo->raw_data_in = FALSE; - /* Use Huffman coding, not arithmetic coding, by default */ - cinfo->arith_code = FALSE; + /* The standard Huffman tables are only valid for 8-bit data precision. + * If the precision is higher, use arithmetic coding. + * (Alternatively, using Huffman coding would be possible with forcing + * optimization on so that usable tables will be computed, or by + * supplying default tables that are valid for the desired precision.) + * Otherwise, use Huffman coding by default. + */ + cinfo->arith_code = cinfo->data_precision > 8 ? TRUE : FALSE; /* By default, don't do extra passes to optimize entropy coding */ cinfo->optimize_coding = FALSE; - /* The standard Huffman tables are only valid for 8-bit data precision. - * If the precision is higher, force optimization on so that usable - * tables will be computed. This test can be removed if default tables - * are supplied that are valid for the desired precision. - */ - if (cinfo->data_precision > 8) - cinfo->optimize_coding = TRUE; /* By default, use the simpler non-cosited sampling alignment */ cinfo->CCIR601_sampling = FALSE; @@ -360,6 +359,9 @@ jpeg_set_defaults (j_compress_ptr cinfo) * JFIF_minor_version to 2. We could probably get away with just defaulting * to 1.02, but there may still be some decoders in use that will complain * about that; saying 1.01 should minimize compatibility problems. + * + * For wide gamut colorspaces (BG_RGB and BG_YCC), the major version will be + * overridden by jpeg_set_colorspace and set to 2. */ cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */ cinfo->JFIF_minor_version = 1; @@ -384,6 +386,9 @@ GLOBAL(void) jpeg_default_colorspace (j_compress_ptr cinfo) { switch (cinfo->in_color_space) { + case JCS_UNKNOWN: + jpeg_set_colorspace(cinfo, JCS_UNKNOWN); + break; case JCS_GRAYSCALE: jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); break; @@ -399,8 +404,12 @@ jpeg_default_colorspace (j_compress_ptr cinfo) case JCS_YCCK: jpeg_set_colorspace(cinfo, JCS_YCCK); break; - case JCS_UNKNOWN: - jpeg_set_colorspace(cinfo, JCS_UNKNOWN); + case JCS_BG_RGB: + /* No translation for now -- conversion to BG_YCC not yet supportet */ + jpeg_set_colorspace(cinfo, JCS_BG_RGB); + break; + case JCS_BG_YCC: + jpeg_set_colorspace(cinfo, JCS_BG_YCC); break; default: ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); @@ -441,29 +450,40 @@ jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */ switch (colorspace) { + case JCS_UNKNOWN: + cinfo->num_components = cinfo->input_components; + if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPONENTS); + for (ci = 0; ci < cinfo->num_components; ci++) { + SET_COMP(ci, ci, 1,1, 0, 0,0); + } + break; case JCS_GRAYSCALE: cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ cinfo->num_components = 1; /* JFIF specifies component ID 1 */ - SET_COMP(0, 1, 1,1, 0, 0,0); + SET_COMP(0, 0x01, 1,1, 0, 0,0); break; case JCS_RGB: cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */ cinfo->num_components = 3; - SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0); - SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, + SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0); + SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0); + SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0, cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0); - SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0); break; case JCS_YCbCr: cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ cinfo->num_components = 3; /* JFIF specifies component IDs 1,2,3 */ /* We default to 2x2 subsamples of chrominance */ - SET_COMP(0, 1, 2,2, 0, 0,0); - SET_COMP(1, 2, 1,1, 1, 1,1); - SET_COMP(2, 3, 1,1, 1, 1,1); + SET_COMP(0, 0x01, 2,2, 0, 0,0); + SET_COMP(1, 0x02, 1,1, 1, 1,1); + SET_COMP(2, 0x03, 1,1, 1, 1,1); break; case JCS_CMYK: cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */ @@ -476,19 +496,33 @@ jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) case JCS_YCCK: cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */ cinfo->num_components = 4; - SET_COMP(0, 1, 2,2, 0, 0,0); - SET_COMP(1, 2, 1,1, 1, 1,1); - SET_COMP(2, 3, 1,1, 1, 1,1); - SET_COMP(3, 4, 2,2, 0, 0,0); + SET_COMP(0, 0x01, 2,2, 0, 0,0); + SET_COMP(1, 0x02, 1,1, 1, 1,1); + SET_COMP(2, 0x03, 1,1, 1, 1,1); + SET_COMP(3, 0x04, 2,2, 0, 0,0); break; - case JCS_UNKNOWN: - cinfo->num_components = cinfo->input_components; - if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, - MAX_COMPONENTS); - for (ci = 0; ci < cinfo->num_components; ci++) { - SET_COMP(ci, ci, 1,1, 0, 0,0); - } + case JCS_BG_RGB: + cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ + cinfo->JFIF_major_version = 2; /* Set JFIF major version = 2 */ + cinfo->num_components = 3; + /* Add offset 0x20 to the normal R/G/B component IDs */ + SET_COMP(0, 0x72 /* 'r' */, 1,1, 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0); + SET_COMP(1, 0x67 /* 'g' */, 1,1, 0, 0,0); + SET_COMP(2, 0x62 /* 'b' */, 1,1, 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0); + break; + case JCS_BG_YCC: + cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ + cinfo->JFIF_major_version = 2; /* Set JFIF major version = 2 */ + cinfo->num_components = 3; + /* Add offset 0x20 to the normal Cb/Cr component IDs */ + /* We default to 2x2 subsamples of chrominance */ + SET_COMP(0, 0x01, 2,2, 0, 0,0); + SET_COMP(1, 0x22, 1,1, 1, 1,1); + SET_COMP(2, 0x23, 1,1, 1, 1,1); break; default: ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); @@ -572,8 +606,10 @@ jpeg_simple_progression (j_compress_ptr cinfo) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* Figure space needed for script. Calculation must match code below! */ - if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { - /* Custom script for YCbCr color images. */ + if (ncomps == 3 && + (cinfo->jpeg_color_space == JCS_YCbCr || + cinfo->jpeg_color_space == JCS_BG_YCC)) { + /* Custom script for YCC color images. */ nscans = 10; } else { /* All-purpose script for other color spaces. */ @@ -588,7 +624,7 @@ jpeg_simple_progression (j_compress_ptr cinfo) * multiple compressions without changing the settings. To avoid a memory * leak if jpeg_simple_progression is called repeatedly for the same JPEG * object, we try to re-use previously allocated space, and we allocate - * enough space to handle YCbCr even if initially asked for grayscale. + * enough space to handle YCC even if initially asked for grayscale. */ if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) { cinfo->script_space_size = MAX(nscans, 10); @@ -600,8 +636,10 @@ jpeg_simple_progression (j_compress_ptr cinfo) cinfo->scan_info = scanptr; cinfo->num_scans = nscans; - if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { - /* Custom script for YCbCr color images. */ + if (ncomps == 3 && + (cinfo->jpeg_color_space == JCS_YCbCr || + cinfo->jpeg_color_space == JCS_BG_YCC)) { + /* Custom script for YCC color images. */ /* Initial DC scan */ scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); /* Initial AC scan: get some luma data out in a hurry */ diff --git a/reactos/dll/3rdparty/libjpeg/jctrans.c b/reactos/dll/3rdparty/libjpeg/jctrans.c index 8813c3eac9e..7cd077e4f67 100644 --- a/reactos/dll/3rdparty/libjpeg/jctrans.c +++ b/reactos/dll/3rdparty/libjpeg/jctrans.c @@ -2,7 +2,7 @@ * jctrans.c * * Copyright (C) 1995-1998, Thomas G. Lane. - * Modified 2000-2012 by Guido Vollbeding. + * Modified 2000-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -143,10 +143,10 @@ jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, * if the application chooses to copy JFIF 1.02 extension markers from * the source file, we need to copy the version to make sure we don't * emit a file that has 1.02 extensions but a claimed version of 1.01. - * We will *not*, however, copy version info from mislabeled "2.01" files. */ if (srcinfo->saw_JFIF_marker) { - if (srcinfo->JFIF_major_version == 1) { + if (srcinfo->JFIF_major_version == 1 || + srcinfo->JFIF_major_version == 2) { dstinfo->JFIF_major_version = srcinfo->JFIF_major_version; dstinfo->JFIF_minor_version = srcinfo->JFIF_minor_version; } diff --git a/reactos/dll/3rdparty/libjpeg/jdapimin.c b/reactos/dll/3rdparty/libjpeg/jdapimin.c index 7f1ce4c05b2..a6e0dd9fb82 100644 --- a/reactos/dll/3rdparty/libjpeg/jdapimin.c +++ b/reactos/dll/3rdparty/libjpeg/jdapimin.c @@ -2,7 +2,7 @@ * jdapimin.c * * Copyright (C) 1994-1998, Thomas G. Lane. - * Modified 2009 by Guido Vollbeding. + * Modified 2009-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -114,8 +114,9 @@ jpeg_abort_decompress (j_decompress_ptr cinfo) LOCAL(void) default_decompress_parms (j_decompress_ptr cinfo) { + int cid0, cid1, cid2; + /* Guess the input colorspace, and set output colorspace accordingly. */ - /* (Wish JPEG committee had provided a real way to specify this...) */ /* Note application may override our guesses. */ switch (cinfo->num_components) { case 1: @@ -124,9 +125,22 @@ default_decompress_parms (j_decompress_ptr cinfo) break; case 3: - if (cinfo->saw_JFIF_marker) { - cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */ - } else if (cinfo->saw_Adobe_marker) { + cid0 = cinfo->comp_info[0].component_id; + cid1 = cinfo->comp_info[1].component_id; + cid2 = cinfo->comp_info[2].component_id; + + /* First try to guess from the component IDs */ + if (cid0 == 0x01 && cid1 == 0x02 && cid2 == 0x03) + cinfo->jpeg_color_space = JCS_YCbCr; + else if (cid0 == 0x01 && cid1 == 0x22 && cid2 == 0x23) + cinfo->jpeg_color_space = JCS_BG_YCC; + else if (cid0 == 0x52 && cid1 == 0x47 && cid2 == 0x42) + cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */ + else if (cid0 == 0x72 && cid1 == 0x67 && cid2 == 0x62) + cinfo->jpeg_color_space = JCS_BG_RGB; /* ASCII 'r', 'g', 'b' */ + else if (cinfo->saw_JFIF_marker) + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + else if (cinfo->saw_Adobe_marker) { switch (cinfo->Adobe_transform) { case 0: cinfo->jpeg_color_space = JCS_RGB; @@ -136,23 +150,12 @@ default_decompress_parms (j_decompress_ptr cinfo) break; default: WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); - cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ break; } } else { - /* Saw no special markers, try to guess from the component IDs */ - int cid0 = cinfo->comp_info[0].component_id; - int cid1 = cinfo->comp_info[1].component_id; - int cid2 = cinfo->comp_info[2].component_id; - - if (cid0 == 1 && cid1 == 2 && cid2 == 3) - cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */ - else if (cid0 == 82 && cid1 == 71 && cid2 == 66) - cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */ - else { - TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); - cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ - } + TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ } /* Always guess RGB is proper output colorspace. */ cinfo->out_color_space = JCS_RGB; @@ -169,7 +172,7 @@ default_decompress_parms (j_decompress_ptr cinfo) break; default: WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); - cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */ + cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */ break; } } else { diff --git a/reactos/dll/3rdparty/libjpeg/jdapistd.c b/reactos/dll/3rdparty/libjpeg/jdapistd.c index 9d745377724..7f3a78b25af 100644 --- a/reactos/dll/3rdparty/libjpeg/jdapistd.c +++ b/reactos/dll/3rdparty/libjpeg/jdapistd.c @@ -2,6 +2,7 @@ * jdapistd.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2002-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * diff --git a/reactos/dll/3rdparty/libjpeg/jdarith.c b/reactos/dll/3rdparty/libjpeg/jdarith.c index 6e32d230cd1..efdb26d3af7 100644 --- a/reactos/dll/3rdparty/libjpeg/jdarith.c +++ b/reactos/dll/3rdparty/libjpeg/jdarith.c @@ -1,7 +1,7 @@ /* * jdarith.c * - * Developed 1997-2012 by Guido Vollbeding. + * Developed 1997-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -395,6 +395,8 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* * MCU decoding for DC successive approximation refinement scan. + * Note: we assume such scans can be multi-component, + * although the spec is not very clear on the point. */ METHODDEF(boolean) @@ -743,6 +745,17 @@ start_pass (j_decompress_ptr cinfo) } +/* + * Finish up at the end of an arithmetic-compressed scan. + */ + +METHODDEF(void) +finish_pass (j_decompress_ptr cinfo) +{ + /* no work necessary here */ +} + + /* * Module initialization routine for arithmetic entropy decoding. */ @@ -758,6 +771,7 @@ jinit_arith_decoder (j_decompress_ptr cinfo) SIZEOF(arith_entropy_decoder)); cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass; + entropy->pub.finish_pass = finish_pass; /* Mark tables unallocated */ for (i = 0; i < NUM_ARITH_TBLS; i++) { diff --git a/reactos/dll/3rdparty/libjpeg/jdcolor.c b/reactos/dll/3rdparty/libjpeg/jdcolor.c index 939df757a49..a31c28615a9 100644 --- a/reactos/dll/3rdparty/libjpeg/jdcolor.c +++ b/reactos/dll/3rdparty/libjpeg/jdcolor.c @@ -2,7 +2,7 @@ * jdcolor.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2011-2012 by Guido Vollbeding. + * Modified 2011-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -19,12 +19,15 @@ typedef struct { struct jpeg_color_deconverter pub; /* public fields */ - /* Private state for YCC->RGB conversion */ + /* Private state for YCbCr->RGB and BG_YCC->RGB conversion */ int * Cr_r_tab; /* => table for Cr to R conversion */ int * Cb_b_tab; /* => table for Cb to B conversion */ INT32 * Cr_g_tab; /* => table for Cr to G conversion */ INT32 * Cb_g_tab; /* => table for Cb to G conversion */ + JSAMPLE * range_limit; /* pointer to normal sample range limit table, */ + /* or extended sample range limit table for BG_YCC */ + /* Private state for RGB->Y conversion */ INT32 * rgb_y_tab; /* => table for RGB to Y conversion */ } my_color_deconverter; @@ -32,22 +35,44 @@ typedef struct { typedef my_color_deconverter * my_cconvert_ptr; -/**************** YCbCr -> RGB conversion: most common case **************/ -/**************** RGB -> Y conversion: less common case **************/ +/*************** YCbCr -> RGB conversion: most common case **************/ +/*************** BG_YCC -> RGB conversion: less common case **************/ +/*************** RGB -> Y conversion: less common case **************/ /* - * YCbCr is defined per CCIR 601-1, except that Cb and Cr are - * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. - * The conversion equations to be implemented are therefore + * YCbCr is defined per Recommendation ITU-R BT.601-7 (03/2011), + * previously known as Recommendation CCIR 601-1, except that Cb and Cr + * are normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * sRGB (standard RGB color space) is defined per IEC 61966-2-1:1999. + * sYCC (standard luma-chroma-chroma color space with extended gamut) + * is defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex F. + * bg-sRGB and bg-sYCC (big gamut standard color spaces) + * are defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex G. + * Note that the derived conversion coefficients given in some of these + * documents are imprecise. The general conversion equations are * - * R = Y + 1.40200 * Cr - * G = Y - 0.34414 * Cb - 0.71414 * Cr - * B = Y + 1.77200 * Cb + * R = Y + K * (1 - Kr) * Cr + * G = Y - K * (Kb * (1 - Kb) * Cb + Kr * (1 - Kr) * Cr) / (1 - Kr - Kb) + * B = Y + K * (1 - Kb) * Cb * - * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B + * Y = Kr * R + (1 - Kr - Kb) * G + Kb * B + * + * With Kr = 0.299 and Kb = 0.114 (derived according to SMPTE RP 177-1993 + * from the 1953 FCC NTSC primaries and CIE Illuminant C), K = 2 for sYCC, + * the conversion equations to be implemented are therefore + * + * R = Y + 1.402 * Cr + * G = Y - 0.344136286 * Cb - 0.714136286 * Cr + * B = Y + 1.772 * Cb + * + * Y = 0.299 * R + 0.587 * G + 0.114 * B * * where Cb and Cr represent the incoming values less CENTERJSAMPLE. - * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * For bg-sYCC, with K = 4, the equations are + * + * R = Y + 2.804 * Cr + * G = Y - 0.688272572 * Cb - 1.428272572 * Cr + * B = Y + 3.544 * Cb * * To avoid floating-point arithmetic, we represent the fractional constants * as integers scaled up by 2^16 (about 4 digits precision); we have to divide @@ -58,9 +83,9 @@ typedef my_color_deconverter * my_cconvert_ptr; * For even more speed, we avoid doing any multiplications in the inner loop * by precalculating the constants times Cb and Cr for all possible values. * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); - * for 12-bit samples it is still acceptable. It's not very reasonable for - * 16-bit samples, but if you want lossless storage you shouldn't be changing - * colorspace anyway. + * for 9-bit to 12-bit samples it is still acceptable. It's not very + * reasonable for 16-bit samples, but if you want lossless storage you + * shouldn't be changing colorspace anyway. * The Cr=>R and Cb=>B values can be rounded to integers in advance; the * values for the G calculation are left scaled up, since we must add them * together before rounding. @@ -84,11 +109,12 @@ typedef my_color_deconverter * my_cconvert_ptr; /* - * Initialize tables for YCC->RGB colorspace conversion. + * Initialize tables for YCbCr->RGB and BG_YCC->RGB colorspace conversion. */ LOCAL(void) build_ycc_rgb_table (j_decompress_ptr cinfo) +/* Normal case, sYCC */ { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; int i; @@ -108,24 +134,84 @@ build_ycc_rgb_table (j_decompress_ptr cinfo) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(INT32)); + cconvert->range_limit = cinfo->sample_range_limit; + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ - /* Cr=>R value is nearest int to 1.40200 * x */ + /* Cr=>R value is nearest int to 1.402 * x */ cconvert->Cr_r_tab[i] = (int) - RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); - /* Cb=>B value is nearest int to 1.77200 * x */ + RIGHT_SHIFT(FIX(1.402) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 1.772 * x */ cconvert->Cb_b_tab[i] = (int) - RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); - /* Cr=>G value is scaled-up -0.71414 * x */ - cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; - /* Cb=>G value is scaled-up -0.34414 * x */ + RIGHT_SHIFT(FIX(1.772) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -0.714136286 * x */ + cconvert->Cr_g_tab[i] = (- FIX(0.714136286)) * x; + /* Cb=>G value is scaled-up -0.344136286 * x */ /* We also add in ONE_HALF so that need not do it in inner loop */ - cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + cconvert->Cb_g_tab[i] = (- FIX(0.344136286)) * x + ONE_HALF; } } +LOCAL(void) +build_bg_ycc_rgb_table (j_decompress_ptr cinfo) +/* Wide gamut case, bg-sYCC */ +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + int i; + INT32 x; + SHIFT_TEMPS + + cconvert->Cr_r_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cb_b_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cr_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + cconvert->Cb_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + + cconvert->range_limit = (JSAMPLE *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 5 * (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); + + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ + /* Cr=>R value is nearest int to 2.804 * x */ + cconvert->Cr_r_tab[i] = (int) + RIGHT_SHIFT(FIX(2.804) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 3.544 * x */ + cconvert->Cb_b_tab[i] = (int) + RIGHT_SHIFT(FIX(3.544) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -1.428272572 * x */ + cconvert->Cr_g_tab[i] = (- FIX(1.428272572)) * x; + /* Cb=>G value is scaled-up -0.688272572 * x */ + /* We also add in ONE_HALF so that need not do it in inner loop */ + cconvert->Cb_g_tab[i] = (- FIX(0.688272572)) * x + ONE_HALF; + } + + /* Cb and Cr portions can extend to double range in wide gamut case, + * so we prepare an appropriate extended range limit table. + */ + + /* First segment of range limit table: limit[x] = 0 for x < 0 */ + MEMZERO(cconvert->range_limit, 2 * (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); + cconvert->range_limit += 2 * (MAXJSAMPLE+1); + /* Main part of range limit table: limit[x] = x */ + for (i = 0; i <= MAXJSAMPLE; i++) + cconvert->range_limit[i] = (JSAMPLE) i; + /* End of range limit table: limit[x] = MAXJSAMPLE for x > MAXJSAMPLE */ + for (; i < 3 * (MAXJSAMPLE+1); i++) + cconvert->range_limit[i] = MAXJSAMPLE; +} + + /* * Convert some rows of samples to the output colorspace. * @@ -149,7 +235,7 @@ ycc_rgb_convert (j_decompress_ptr cinfo, register JDIMENSION col; JDIMENSION num_cols = cinfo->output_width; /* copy these pointers into registers if possible */ - register JSAMPLE * range_limit = cinfo->sample_range_limit; + register JSAMPLE * range_limit = cconvert->range_limit; register int * Crrtab = cconvert->Cr_r_tab; register int * Cbbtab = cconvert->Cb_b_tab; register INT32 * Crgtab = cconvert->Cr_g_tab; @@ -166,19 +252,21 @@ ycc_rgb_convert (j_decompress_ptr cinfo, y = GETJSAMPLE(inptr0[col]); cb = GETJSAMPLE(inptr1[col]); cr = GETJSAMPLE(inptr2[col]); - /* Range-limiting is essential due to noise introduced by DCT losses. */ - outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; + /* Range-limiting is essential due to noise introduced by DCT losses, + * for extended gamut (sYCC) and wide gamut (bg-sYCC) encodings. + */ + outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; outptr[RGB_GREEN] = range_limit[y + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS))]; - outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; + outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; outptr += RGB_PIXELSIZE; } } } -/**************** Cases other than YCbCr -> RGB **************/ +/**************** Cases other than YCC -> RGB ****************/ /* @@ -198,9 +286,9 @@ build_rgb_y_table (j_decompress_ptr cinfo) (TABLE_SIZE * SIZEOF(INT32))); for (i = 0; i <= MAXJSAMPLE; i++) { - rgb_y_tab[i+R_Y_OFF] = FIX(0.29900) * i; - rgb_y_tab[i+G_Y_OFF] = FIX(0.58700) * i; - rgb_y_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; + rgb_y_tab[i+R_Y_OFF] = FIX(0.299) * i; + rgb_y_tab[i+G_Y_OFF] = FIX(0.587) * i; + rgb_y_tab[i+B_Y_OFF] = FIX(0.114) * i + ONE_HALF; } } @@ -244,6 +332,9 @@ rgb_gray_convert (j_decompress_ptr cinfo, /* * [R-G,G,B-G] to [R,G,B] conversion with modulo calculation * (inverse color transform). + * This can be seen as an adaption of the general YCbCr->RGB + * conversion equation with Kr = Kb = 0, while replacing the + * normalization by modulo calculation. */ METHODDEF(void) @@ -387,7 +478,7 @@ null_convert (j_decompress_ptr cinfo, /* * Color conversion for grayscale: just copy the data. - * This also works for YCbCr -> grayscale conversion, in which + * This also works for YCC -> grayscale conversion, in which * we just copy the Y (luminance) component and ignore chrominance. */ @@ -466,7 +557,9 @@ ycck_cmyk_convert (j_decompress_ptr cinfo, y = GETJSAMPLE(inptr0[col]); cb = GETJSAMPLE(inptr1[col]); cr = GETJSAMPLE(inptr2[col]); - /* Range-limiting is essential due to noise introduced by DCT losses. */ + /* Range-limiting is essential due to noise introduced by DCT losses, + * and for extended gamut encodings (sYCC). + */ outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */ ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], @@ -516,6 +609,8 @@ jinit_color_deconverter (j_decompress_ptr cinfo) case JCS_RGB: case JCS_YCbCr: + case JCS_BG_RGB: + case JCS_BG_YCC: if (cinfo->num_components != 3) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); break; @@ -532,8 +627,10 @@ jinit_color_deconverter (j_decompress_ptr cinfo) break; } - /* Support color transform only for RGB colorspace */ - if (cinfo->color_transform && cinfo->jpeg_color_space != JCS_RGB) + /* Support color transform only for RGB colorspaces */ + if (cinfo->color_transform && + cinfo->jpeg_color_space != JCS_RGB && + cinfo->jpeg_color_space != JCS_BG_RGB) ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); /* Set out_color_components and conversion method based on requested space. @@ -544,13 +641,16 @@ jinit_color_deconverter (j_decompress_ptr cinfo) switch (cinfo->out_color_space) { case JCS_GRAYSCALE: cinfo->out_color_components = 1; - if (cinfo->jpeg_color_space == JCS_GRAYSCALE || - cinfo->jpeg_color_space == JCS_YCbCr) { + switch (cinfo->jpeg_color_space) { + case JCS_GRAYSCALE: + case JCS_YCbCr: + case JCS_BG_YCC: cconvert->pub.color_convert = grayscale_convert; /* For color->grayscale conversion, only the Y (0) component is needed */ for (ci = 1; ci < cinfo->num_components; ci++) cinfo->comp_info[ci].component_needed = FALSE; - } else if (cinfo->jpeg_color_space == JCS_RGB) { + break; + case JCS_RGB: switch (cinfo->color_transform) { case JCT_NONE: cconvert->pub.color_convert = rgb_gray_convert; @@ -560,21 +660,29 @@ jinit_color_deconverter (j_decompress_ptr cinfo) break; default: ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; } build_rgb_y_table(cinfo); - } else + break; + default: ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } break; case JCS_RGB: cinfo->out_color_components = RGB_PIXELSIZE; - if (cinfo->jpeg_color_space == JCS_YCbCr) { + switch (cinfo->jpeg_color_space) { + case JCS_GRAYSCALE: + cconvert->pub.color_convert = gray_rgb_convert; + break; + case JCS_YCbCr: cconvert->pub.color_convert = ycc_rgb_convert; build_ycc_rgb_table(cinfo); - } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { - cconvert->pub.color_convert = gray_rgb_convert; - } else if (cinfo->jpeg_color_space == JCS_RGB) { + break; + case JCS_BG_YCC: + cconvert->pub.color_convert = ycc_rgb_convert; + build_bg_ycc_rgb_table(cinfo); + break; + case JCS_RGB: switch (cinfo->color_transform) { case JCT_NONE: cconvert->pub.color_convert = rgb_convert; @@ -584,7 +692,25 @@ jinit_color_deconverter (j_decompress_ptr cinfo) break; default: ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } + break; + + case JCS_BG_RGB: + cinfo->out_color_components = RGB_PIXELSIZE; + if (cinfo->jpeg_color_space == JCS_BG_RGB) { + switch (cinfo->color_transform) { + case JCT_NONE: + cconvert->pub.color_convert = rgb_convert; break; + case JCT_SUBTRACT_GREEN: + cconvert->pub.color_convert = rgb1_rgb_convert; + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); } } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); @@ -592,13 +718,17 @@ jinit_color_deconverter (j_decompress_ptr cinfo) case JCS_CMYK: cinfo->out_color_components = 4; - if (cinfo->jpeg_color_space == JCS_YCCK) { + switch (cinfo->jpeg_color_space) { + case JCS_YCCK: cconvert->pub.color_convert = ycck_cmyk_convert; build_ycc_rgb_table(cinfo); - } else if (cinfo->jpeg_color_space == JCS_CMYK) { + break; + case JCS_CMYK: cconvert->pub.color_convert = null_convert; - } else + break; + default: ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } break; default: diff --git a/reactos/dll/3rdparty/libjpeg/jddctmgr.c b/reactos/dll/3rdparty/libjpeg/jddctmgr.c index 0ded9d57413..9ecfbb5107e 100644 --- a/reactos/dll/3rdparty/libjpeg/jddctmgr.c +++ b/reactos/dll/3rdparty/libjpeg/jddctmgr.c @@ -2,7 +2,7 @@ * jddctmgr.c * * Copyright (C) 1994-1996, Thomas G. Lane. - * Modified 2002-2010 by Guido Vollbeding. + * Modified 2002-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -368,7 +368,7 @@ jinit_inverse_dct (j_decompress_ptr cinfo) idct = (my_idct_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_idct_controller)); - cinfo->idct = (struct jpeg_inverse_dct *) idct; + cinfo->idct = &idct->pub; idct->pub.start_pass = start_pass; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; diff --git a/reactos/dll/3rdparty/libjpeg/jdhuff.c b/reactos/dll/3rdparty/libjpeg/jdhuff.c index e548e689bae..6920e207c8e 100644 --- a/reactos/dll/3rdparty/libjpeg/jdhuff.c +++ b/reactos/dll/3rdparty/libjpeg/jdhuff.c @@ -2,7 +2,7 @@ * jdhuff.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2006-2012 by Guido Vollbeding. + * Modified 2006-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -627,6 +627,22 @@ jpeg_huff_decode (bitread_working_state * state, } +/* + * Finish up at the end of a Huffman-compressed scan. + */ + +METHODDEF(void) +finish_pass_huff (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + + /* Throw away any unused bits remaining in bit buffer; */ + /* include any full bytes in next_marker's count of discarded bytes */ + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + entropy->bitstate.bits_left = 0; +} + + /* * Check for a restart marker & resynchronize decoder. * Returns FALSE if must suspend. @@ -638,10 +654,7 @@ process_restart (j_decompress_ptr cinfo) huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; int ci; - /* Throw away any unused bits remaining in bit buffer; */ - /* include any full bytes in next_marker's count of discarded bytes */ - cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; - entropy->bitstate.bits_left = 0; + finish_pass_huff(cinfo); /* Advance past the RSTn marker */ if (! (*cinfo->marker->read_restart_marker) (cinfo)) @@ -846,17 +859,15 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* * MCU decoding for DC successive approximation refinement scan. - * Note: we assume such scans can be multi-component, although the spec - * is not very clear on the point. + * Note: we assume such scans can be multi-component, + * although the spec is not very clear on the point. */ METHODDEF(boolean) decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ - int blkn; - JBLOCKROW block; + int p1, blkn; BITREAD_STATE_VARS; /* Process restart marker if needed; may have to suspend */ @@ -873,15 +884,15 @@ decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* Load up working state */ BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + /* Outer loop handles each block in the MCU */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - block = MCU_data[blkn]; - /* Encoded data is simply the next bit of the two's-complement DC value */ CHECK_BIT_BUFFER(br_state, 1, return FALSE); if (GET_BITS(1)) - (*block)[0] |= p1; + MCU_data[blkn][0][0] |= p1; /* Note: since we use |=, repeating the assignment later is safe */ } @@ -1517,6 +1528,7 @@ jinit_huff_decoder (j_decompress_ptr cinfo) SIZEOF(huff_entropy_decoder)); cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass_huff_decoder; + entropy->pub.finish_pass = finish_pass_huff; if (cinfo->progressive_mode) { /* Create progression status table */ diff --git a/reactos/dll/3rdparty/libjpeg/jdinput.c b/reactos/dll/3rdparty/libjpeg/jdinput.c index 2c5c717b9c3..0199553e896 100644 --- a/reactos/dll/3rdparty/libjpeg/jdinput.c +++ b/reactos/dll/3rdparty/libjpeg/jdinput.c @@ -2,7 +2,7 @@ * jdinput.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2002-2009 by Guido Vollbeding. + * Modified 2002-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -196,7 +196,7 @@ jpeg_core_output_dimensions (j_decompress_ptr cinfo) /* Hardwire it to "no scaling" */ cinfo->output_width = cinfo->image_width; cinfo->output_height = cinfo->image_height; - /* jdinput.c has already initialized DCT_scaled_size, + /* initial_setup has already initialized DCT_scaled_size, * and has computed unscaled downsampled_width and downsampled_height. */ @@ -216,8 +216,8 @@ initial_setup (j_decompress_ptr cinfo) (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); - /* For now, precision must match compiled-in value... */ - if (cinfo->data_precision != BITS_IN_JSAMPLE) + /* Only 8 to 12 bits data precision are supported for DCT based JPEG */ + if (cinfo->data_precision < 8 || cinfo->data_precision > 12) ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); /* Check that number of components won't exceed internal array sizes */ @@ -537,6 +537,7 @@ start_input_pass (j_decompress_ptr cinfo) METHODDEF(void) finish_input_pass (j_decompress_ptr cinfo) { + (*cinfo->entropy->finish_pass) (cinfo); cinfo->inputctl->consume_input = consume_markers; } @@ -646,7 +647,7 @@ jinit_input_controller (j_decompress_ptr cinfo) inputctl = (my_inputctl_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, SIZEOF(my_input_controller)); - cinfo->inputctl = (struct jpeg_input_controller *) inputctl; + cinfo->inputctl = &inputctl->pub; /* Initialize method pointers */ inputctl->pub.consume_input = consume_markers; inputctl->pub.reset_input_controller = reset_input_controller; diff --git a/reactos/dll/3rdparty/libjpeg/jdmarker.c b/reactos/dll/3rdparty/libjpeg/jdmarker.c index ce8b713c523..3fbe5c16578 100644 --- a/reactos/dll/3rdparty/libjpeg/jdmarker.c +++ b/reactos/dll/3rdparty/libjpeg/jdmarker.c @@ -2,7 +2,7 @@ * jdmarker.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2009-2012 by Guido Vollbeding. + * Modified 2009-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -269,8 +269,8 @@ get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, /* We don't support files in which the image height is initially specified */ /* as 0 and is later redefined by DNL. As long as we have to check that, */ /* might as well have a general sanity check. */ - if (cinfo->image_height <= 0 || cinfo->image_width <= 0 - || cinfo->num_components <= 0) + if (cinfo->image_height <= 0 || cinfo->image_width <= 0 || + cinfo->num_components <= 0) ERREXIT(cinfo, JERR_EMPTY_IMAGE); if (length != (cinfo->num_components * 3)) @@ -350,6 +350,9 @@ get_sos (j_decompress_ptr cinfo) /* Detect the case where component id's are not unique, and, if so, */ /* create a fake component id using the same logic as in get_sof. */ + /* Note: This also ensures that all of the SOF components are */ + /* referenced in the single scan case, which prevents access to */ + /* uninitialized memory in later decoding stages. */ for (ci = 0; ci < i; ci++) { if (c == cinfo->cur_comp_info[ci]->component_id) { c = cinfo->cur_comp_info[0]->component_id; @@ -493,6 +496,8 @@ get_dht (j_decompress_ptr cinfo) if (count > 256 || ((INT32) count) > length) ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + MEMZERO(huffval, SIZEOF(huffval)); /* pre-zero array for later copy */ + for (i = 0; i < count; i++) INPUT_BYTE(cinfo, huffval[i], return FALSE); @@ -735,12 +740,13 @@ examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data, cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]); cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]); /* Check version. - * Major version must be 1, anything else signals an incompatible change. + * Major version must be 1 or 2, anything else signals an incompatible + * change. * (We used to treat this as an error, but now it's a nonfatal warning, * because some bozo at Hijaak couldn't read the spec.) * Minor version should be 0..2, but process anyway if newer. */ - if (cinfo->JFIF_major_version != 1) + if (cinfo->JFIF_major_version != 1 && cinfo->JFIF_major_version != 2) WARNMS2(cinfo, JWRN_JFIF_MAJOR, cinfo->JFIF_major_version, cinfo->JFIF_minor_version); /* Generate trace messages */ diff --git a/reactos/dll/3rdparty/libjpeg/jdmaster.c b/reactos/dll/3rdparty/libjpeg/jdmaster.c index fef72a21b49..6f42d3c5a34 100644 --- a/reactos/dll/3rdparty/libjpeg/jdmaster.c +++ b/reactos/dll/3rdparty/libjpeg/jdmaster.c @@ -2,7 +2,7 @@ * jdmaster.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2002-2011 by Guido Vollbeding. + * Modified 2002-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -51,7 +51,8 @@ use_merged_upsample (j_decompress_ptr cinfo) /* jdmerge.c only supports YCC=>RGB color conversion */ if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 || cinfo->out_color_space != JCS_RGB || - cinfo->out_color_components != RGB_PIXELSIZE) + cinfo->out_color_components != RGB_PIXELSIZE || + cinfo->color_transform) return FALSE; /* and it only handles 2h1v or 2h2v sampling ratios */ if (cinfo->comp_info[0].h_samp_factor != 2 || @@ -158,9 +159,11 @@ jpeg_calc_output_dimensions (j_decompress_ptr cinfo) cinfo->out_color_components = 1; break; case JCS_RGB: + case JCS_BG_RGB: cinfo->out_color_components = RGB_PIXELSIZE; break; case JCS_YCbCr: + case JCS_BG_YCC: cinfo->out_color_components = 3; break; case JCS_CMYK: @@ -273,10 +276,19 @@ master_selection (j_decompress_ptr cinfo) long samplesperrow; JDIMENSION jd_samplesperrow; + /* For now, precision must match compiled-in value... */ + if (cinfo->data_precision != BITS_IN_JSAMPLE) + ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); + /* Initialize dimensions and other stuff */ jpeg_calc_output_dimensions(cinfo); prepare_range_limit_table(cinfo); + /* Sanity check on image dimensions */ + if (cinfo->output_height <= 0 || cinfo->output_width <= 0 || + cinfo->out_color_components <= 0) + ERREXIT(cinfo, JERR_EMPTY_IMAGE); + /* Width of an output scanline must be representable as JDIMENSION. */ samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components; jd_samplesperrow = (JDIMENSION) samplesperrow; @@ -521,7 +533,7 @@ jinit_master_decompress (j_decompress_ptr cinfo) master = (my_master_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_decomp_master)); - cinfo->master = (struct jpeg_decomp_master *) master; + cinfo->master = &master->pub; master->pub.prepare_for_output_pass = prepare_for_output_pass; master->pub.finish_output_pass = finish_output_pass; diff --git a/reactos/dll/3rdparty/libjpeg/jdmerge.c b/reactos/dll/3rdparty/libjpeg/jdmerge.c index 37444468c23..a6bde33c174 100644 --- a/reactos/dll/3rdparty/libjpeg/jdmerge.c +++ b/reactos/dll/3rdparty/libjpeg/jdmerge.c @@ -2,6 +2,7 @@ * jdmerge.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -103,17 +104,17 @@ build_ycc_rgb_table (j_decompress_ptr cinfo) for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ - /* Cr=>R value is nearest int to 1.40200 * x */ + /* Cr=>R value is nearest int to 1.402 * x */ upsample->Cr_r_tab[i] = (int) - RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); - /* Cb=>B value is nearest int to 1.77200 * x */ + RIGHT_SHIFT(FIX(1.402) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 1.772 * x */ upsample->Cb_b_tab[i] = (int) - RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); - /* Cr=>G value is scaled-up -0.71414 * x */ - upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; - /* Cb=>G value is scaled-up -0.34414 * x */ + RIGHT_SHIFT(FIX(1.772) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -0.714136286 * x */ + upsample->Cr_g_tab[i] = (- FIX(0.714136286)) * x; + /* Cb=>G value is scaled-up -0.344136286 * x */ /* We also add in ONE_HALF so that need not do it in inner loop */ - upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + upsample->Cb_g_tab[i] = (- FIX(0.344136286)) * x + ONE_HALF; } } diff --git a/reactos/dll/3rdparty/libjpeg/jfdctint.c b/reactos/dll/3rdparty/libjpeg/jfdctint.c index 1dde58c499d..a2ef2031b2a 100644 --- a/reactos/dll/3rdparty/libjpeg/jfdctint.c +++ b/reactos/dll/3rdparty/libjpeg/jfdctint.c @@ -2,7 +2,7 @@ * jfdctint.c * * Copyright (C) 1991-1996, Thomas G. Lane. - * Modification developed 2003-2009 by Guido Vollbeding. + * Modification developed 2003-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -165,16 +165,18 @@ jpeg_fdct_islow (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * cK represents sqrt(2) * cos(K*pi/16). + */ dataptr = data; for (ctr = 0; ctr < DCTSIZE; ctr++) { elemptr = sample_data[ctr] + start_col; /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + * rotator "c1" should be "c6". */ tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]); @@ -196,47 +198,49 @@ jpeg_fdct_islow (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) dataptr[0] = (DCTELEM) ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << PASS1_BITS); dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); /* c6 */ /* Add fudge factor here for final descale. */ z1 += ONE << (CONST_BITS-PASS1_BITS-1); - dataptr[2] = (DCTELEM) RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), - CONST_BITS-PASS1_BITS); - dataptr[6] = (DCTELEM) RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), - CONST_BITS-PASS1_BITS); + + dataptr[2] = (DCTELEM) + RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */ + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) + RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */ + CONST_BITS-PASS1_BITS); /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * cK represents sqrt(2) * cos(K*pi/16). * i0..i3 in the paper are tmp0..tmp3 here. */ - tmp10 = tmp0 + tmp3; - tmp11 = tmp1 + tmp2; tmp12 = tmp0 + tmp2; tmp13 = tmp1 + tmp3; - z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ /* Add fudge factor here for final descale. */ z1 += ONE << (CONST_BITS-PASS1_BITS-1); - tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ - tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ - tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ - tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ - tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ - tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ - tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ - tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ - + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* -c3+c5 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ tmp12 += z1; tmp13 += z1; - dataptr[1] = (DCTELEM) - RIGHT_SHIFT(tmp0 + tmp10 + tmp12, CONST_BITS-PASS1_BITS); - dataptr[3] = (DCTELEM) - RIGHT_SHIFT(tmp1 + tmp11 + tmp13, CONST_BITS-PASS1_BITS); - dataptr[5] = (DCTELEM) - RIGHT_SHIFT(tmp2 + tmp11 + tmp12, CONST_BITS-PASS1_BITS); - dataptr[7] = (DCTELEM) - RIGHT_SHIFT(tmp3 + tmp10 + tmp13, CONST_BITS-PASS1_BITS); + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp0 += z1 + tmp12; + tmp3 += z1 + tmp13; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp1 += z1 + tmp13; + tmp2 += z1 + tmp12; + + dataptr[1] = (DCTELEM) RIGHT_SHIFT(tmp0, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) RIGHT_SHIFT(tmp1, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS); + dataptr[7] = (DCTELEM) RIGHT_SHIFT(tmp3, CONST_BITS-PASS1_BITS); dataptr += DCTSIZE; /* advance pointer to next row */ } @@ -244,12 +248,13 @@ jpeg_fdct_islow (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pass 2: process columns. * We remove the PASS1_BITS scaling, but leave the results scaled up * by an overall factor of 8. + * cK represents sqrt(2) * cos(K*pi/16). */ dataptr = data; for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + * rotator "c1" should be "c6". */ tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; @@ -271,47 +276,49 @@ jpeg_fdct_islow (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp10 + tmp11, PASS1_BITS); dataptr[DCTSIZE*4] = (DCTELEM) RIGHT_SHIFT(tmp10 - tmp11, PASS1_BITS); - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); /* c6 */ /* Add fudge factor here for final descale. */ z1 += ONE << (CONST_BITS+PASS1_BITS-1); + dataptr[DCTSIZE*2] = (DCTELEM) - RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), CONST_BITS+PASS1_BITS); + RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */ + CONST_BITS+PASS1_BITS); dataptr[DCTSIZE*6] = (DCTELEM) - RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), CONST_BITS+PASS1_BITS); + RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */ + CONST_BITS+PASS1_BITS); /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * cK represents sqrt(2) * cos(K*pi/16). * i0..i3 in the paper are tmp0..tmp3 here. */ - tmp10 = tmp0 + tmp3; - tmp11 = tmp1 + tmp2; tmp12 = tmp0 + tmp2; tmp13 = tmp1 + tmp3; - z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ /* Add fudge factor here for final descale. */ z1 += ONE << (CONST_BITS+PASS1_BITS-1); - tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ - tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ - tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ - tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ - tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ - tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ - tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ - tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ - + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* -c3+c5 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ tmp12 += z1; tmp13 += z1; - dataptr[DCTSIZE*1] = (DCTELEM) - RIGHT_SHIFT(tmp0 + tmp10 + tmp12, CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*3] = (DCTELEM) - RIGHT_SHIFT(tmp1 + tmp11 + tmp13, CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*5] = (DCTELEM) - RIGHT_SHIFT(tmp2 + tmp11 + tmp12, CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*7] = (DCTELEM) - RIGHT_SHIFT(tmp3 + tmp10 + tmp13, CONST_BITS+PASS1_BITS); + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp0 += z1 + tmp12; + tmp3 += z1 + tmp13; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp1 += z1 + tmp13; + tmp2 += z1 + tmp12; + + dataptr[DCTSIZE*1] = (DCTELEM) RIGHT_SHIFT(tmp0, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) RIGHT_SHIFT(tmp1, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) RIGHT_SHIFT(tmp2, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*7] = (DCTELEM) RIGHT_SHIFT(tmp3, CONST_BITS+PASS1_BITS); dataptr++; /* advance pointer to next column */ } @@ -338,10 +345,11 @@ jpeg_fdct_7x7 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* cK represents sqrt(2) * cos(K*pi/14). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * cK represents sqrt(2) * cos(K*pi/14). + */ dataptr = data; for (ctr = 0; ctr < 7; ctr++) { @@ -472,10 +480,11 @@ jpeg_fdct_6x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* cK represents sqrt(2) * cos(K*pi/12). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * cK represents sqrt(2) * cos(K*pi/12). + */ dataptr = data; for (ctr = 0; ctr < 6; ctr++) { @@ -585,12 +594,13 @@ jpeg_fdct_5x5 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* We scale the results further by 2 as part of output adaption */ - /* scaling for different DCT size. */ - /* cK represents sqrt(2) * cos(K*pi/10). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * We scale the results further by 2 as part of output adaption + * scaling for different DCT size. + * cK represents sqrt(2) * cos(K*pi/10). + */ dataptr = data; for (ctr = 0; ctr < 5; ctr++) { @@ -695,11 +705,12 @@ jpeg_fdct_4x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* We must also scale the output by (8/4)**2 = 2**2, which we add here. */ - /* cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * We must also scale the output by (8/4)**2 = 2**2, which we add here. + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. + */ dataptr = data; for (ctr = 0; ctr < 4; ctr++) { @@ -737,6 +748,7 @@ jpeg_fdct_4x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pass 2: process columns. * We remove the PASS1_BITS scaling, but leave the results scaled up * by an overall factor of 8. + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. */ dataptr = data; @@ -787,12 +799,13 @@ jpeg_fdct_3x3 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* We scale the results further by 2**2 as part of output adaption */ - /* scaling for different DCT size. */ - /* cK represents sqrt(2) * cos(K*pi/6). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * We scale the results further by 2**2 as part of output adaption + * scaling for different DCT size. + * cK represents sqrt(2) * cos(K*pi/6). + */ dataptr = data; for (ctr = 0; ctr < 3; ctr++) { @@ -869,8 +882,9 @@ jpeg_fdct_2x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT. */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT. + */ /* Row 0 */ elemptr = sample_data[0] + start_col; @@ -935,11 +949,12 @@ jpeg_fdct_9x9 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* we scale the results further by 2 as part of output adaption */ - /* scaling for different DCT size. */ - /* cK represents sqrt(2) * cos(K*pi/18). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * we scale the results further by 2 as part of output adaption + * scaling for different DCT size. + * cK represents sqrt(2) * cos(K*pi/18). + */ dataptr = data; ctr = 0; @@ -1084,11 +1099,12 @@ jpeg_fdct_10x10 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* we scale the results further by 2 as part of output adaption */ - /* scaling for different DCT size. */ - /* cK represents sqrt(2) * cos(K*pi/20). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * we scale the results further by 2 as part of output adaption + * scaling for different DCT size. + * cK represents sqrt(2) * cos(K*pi/20). + */ dataptr = data; ctr = 0; @@ -1248,11 +1264,12 @@ jpeg_fdct_11x11 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* we scale the results further by 2 as part of output adaption */ - /* scaling for different DCT size. */ - /* cK represents sqrt(2) * cos(K*pi/22). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * we scale the results further by 2 as part of output adaption + * scaling for different DCT size. + * cK represents sqrt(2) * cos(K*pi/22). + */ dataptr = data; ctr = 0; @@ -1430,9 +1447,10 @@ jpeg_fdct_12x12 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT. */ - /* cK represents sqrt(2) * cos(K*pi/24). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT. + * cK represents sqrt(2) * cos(K*pi/24). + */ dataptr = data; ctr = 0; @@ -1596,9 +1614,10 @@ jpeg_fdct_13x13 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT. */ - /* cK represents sqrt(2) * cos(K*pi/26). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT. + * cK represents sqrt(2) * cos(K*pi/26). + */ dataptr = data; ctr = 0; @@ -1794,9 +1813,10 @@ jpeg_fdct_14x14 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT. */ - /* cK represents sqrt(2) * cos(K*pi/28). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT. + * cK represents sqrt(2) * cos(K*pi/28). + */ dataptr = data; ctr = 0; @@ -1995,9 +2015,10 @@ jpeg_fdct_15x15 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT. */ - /* cK represents sqrt(2) * cos(K*pi/30). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT. + * cK represents sqrt(2) * cos(K*pi/30). + */ dataptr = data; ctr = 0; @@ -2173,10 +2194,11 @@ jpeg_fdct_16x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* cK represents sqrt(2) * cos(K*pi/32). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * cK represents sqrt(2) * cos(K*pi/32). + */ dataptr = data; ctr = 0; @@ -2275,6 +2297,7 @@ jpeg_fdct_16x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) * We remove the PASS1_BITS scaling, but leave the results scaled up * by an overall factor of 8. * We must also scale the output by (8/16)**2 = 1/2**2. + * cK represents sqrt(2) * cos(K*pi/32). */ dataptr = data; @@ -2380,10 +2403,11 @@ jpeg_fdct_16x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* 16-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/32). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 16-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/32). + */ dataptr = data; ctr = 0; @@ -2475,12 +2499,13 @@ jpeg_fdct_16x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) * We remove the PASS1_BITS scaling, but leave the results scaled up * by an overall factor of 8. * We must also scale the output by 8/16 = 1/2. + * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). */ dataptr = data; for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + * rotator "c1" should be "c6". */ tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; @@ -2501,43 +2526,43 @@ jpeg_fdct_16x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS+1); dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS+1); - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); - dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, FIX_0_765366865), - CONST_BITS+PASS1_BITS+1); - dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 - MULTIPLY(tmp13, FIX_1_847759065), - CONST_BITS+PASS1_BITS+1); + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); /* c6 */ + dataptr[DCTSIZE*2] = (DCTELEM) + DESCALE(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */ + CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*6] = (DCTELEM) + DESCALE(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */ + CONST_BITS+PASS1_BITS+1); /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). * i0..i3 in the paper are tmp0..tmp3 here. */ - tmp10 = tmp0 + tmp3; - tmp11 = tmp1 + tmp2; tmp12 = tmp0 + tmp2; tmp13 = tmp1 + tmp3; - z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ - - tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ - tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ - tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ - tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ - tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ - tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ - tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ - tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* -c3+c5 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ tmp12 += z1; tmp13 += z1; - dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0 + tmp10 + tmp12, - CONST_BITS+PASS1_BITS+1); - dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1 + tmp11 + tmp13, - CONST_BITS+PASS1_BITS+1); - dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2 + tmp11 + tmp12, - CONST_BITS+PASS1_BITS+1); - dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3 + tmp10 + tmp13, - CONST_BITS+PASS1_BITS+1); + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp0 += z1 + tmp12; + tmp3 += z1 + tmp13; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp1 += z1 + tmp13; + tmp2 += z1 + tmp12; + + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+PASS1_BITS+1); + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3, CONST_BITS+PASS1_BITS+1); dataptr++; /* advance pointer to next column */ } @@ -2564,10 +2589,11 @@ jpeg_fdct_14x7 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Zero bottom row of output coefficient block. */ MEMZERO(&data[DCTSIZE*7], SIZEOF(DCTELEM) * DCTSIZE); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* 14-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/28). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 14-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/28). + */ dataptr = data; for (ctr = 0; ctr < 7; ctr++) { @@ -2727,10 +2753,11 @@ jpeg_fdct_12x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Zero 2 bottom rows of output coefficient block. */ MEMZERO(&data[DCTSIZE*6], SIZEOF(DCTELEM) * DCTSIZE * 2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* 12-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/24). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 12-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/24). + */ dataptr = data; for (ctr = 0; ctr < 6; ctr++) { @@ -2866,10 +2893,11 @@ jpeg_fdct_10x5 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Zero 3 bottom rows of output coefficient block. */ MEMZERO(&data[DCTSIZE*5], SIZEOF(DCTELEM) * DCTSIZE * 3); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* 10-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/20). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 10-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/20). + */ dataptr = data; for (ctr = 0; ctr < 5; ctr++) { @@ -2999,17 +3027,19 @@ jpeg_fdct_8x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Zero 4 bottom rows of output coefficient block. */ MEMZERO(&data[DCTSIZE*4], SIZEOF(DCTELEM) * DCTSIZE * 4); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* We must also scale the output by 8/4 = 2, which we add here. */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * We must also scale the output by 8/4 = 2, which we add here. + * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ dataptr = data; for (ctr = 0; ctr < 4; ctr++) { elemptr = sample_data[ctr] + start_col; /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + * rotator "c1" should be "c6". */ tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]); @@ -3032,47 +3062,49 @@ jpeg_fdct_8x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << (PASS1_BITS+1)); dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << (PASS1_BITS+1)); - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); /* c6 */ /* Add fudge factor here for final descale. */ z1 += ONE << (CONST_BITS-PASS1_BITS-2); - dataptr[2] = (DCTELEM) RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), - CONST_BITS-PASS1_BITS-1); - dataptr[6] = (DCTELEM) RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), - CONST_BITS-PASS1_BITS-1); + + dataptr[2] = (DCTELEM) + RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */ + CONST_BITS-PASS1_BITS-1); + dataptr[6] = (DCTELEM) + RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */ + CONST_BITS-PASS1_BITS-1); /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). * i0..i3 in the paper are tmp0..tmp3 here. */ - tmp10 = tmp0 + tmp3; - tmp11 = tmp1 + tmp2; tmp12 = tmp0 + tmp2; tmp13 = tmp1 + tmp3; - z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ /* Add fudge factor here for final descale. */ z1 += ONE << (CONST_BITS-PASS1_BITS-2); - tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ - tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ - tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ - tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ - tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ - tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ - tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ - tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ - + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* -c3+c5 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ tmp12 += z1; tmp13 += z1; - dataptr[1] = (DCTELEM) - RIGHT_SHIFT(tmp0 + tmp10 + tmp12, CONST_BITS-PASS1_BITS-1); - dataptr[3] = (DCTELEM) - RIGHT_SHIFT(tmp1 + tmp11 + tmp13, CONST_BITS-PASS1_BITS-1); - dataptr[5] = (DCTELEM) - RIGHT_SHIFT(tmp2 + tmp11 + tmp12, CONST_BITS-PASS1_BITS-1); - dataptr[7] = (DCTELEM) - RIGHT_SHIFT(tmp3 + tmp10 + tmp13, CONST_BITS-PASS1_BITS-1); + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp0 += z1 + tmp12; + tmp3 += z1 + tmp13; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp1 += z1 + tmp13; + tmp2 += z1 + tmp12; + + dataptr[1] = (DCTELEM) RIGHT_SHIFT(tmp0, CONST_BITS-PASS1_BITS-1); + dataptr[3] = (DCTELEM) RIGHT_SHIFT(tmp1, CONST_BITS-PASS1_BITS-1); + dataptr[5] = (DCTELEM) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS-1); + dataptr[7] = (DCTELEM) RIGHT_SHIFT(tmp3, CONST_BITS-PASS1_BITS-1); dataptr += DCTSIZE; /* advance pointer to next row */ } @@ -3080,7 +3112,8 @@ jpeg_fdct_8x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pass 2: process columns. * We remove the PASS1_BITS scaling, but leave the results scaled up * by an overall factor of 8. - * 4-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + * 4-point FDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. */ dataptr = data; @@ -3099,7 +3132,7 @@ jpeg_fdct_8x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Odd part */ - tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100); /* c6 */ + tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100); /* c6 */ /* Add fudge factor here for final descale. */ tmp0 += ONE << (CONST_BITS+PASS1_BITS-1); @@ -3134,12 +3167,13 @@ jpeg_fdct_6x3 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* We scale the results further by 2 as part of output adaption */ - /* scaling for different DCT size. */ - /* 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * We scale the results further by 2 as part of output adaption + * scaling for different DCT size. + * 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ dataptr = data; for (ctr = 0; ctr < 3; ctr++) { @@ -3234,12 +3268,13 @@ jpeg_fdct_4x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* We must also scale the output by (8/4)*(8/2) = 2**3, which we add here. */ - /* 4-point FDCT kernel, */ - /* cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * We must also scale the output by (8/4)*(8/2) = 2**3, which we add here. + * 4-point FDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. + */ dataptr = data; for (ctr = 0; ctr < 2; ctr++) { @@ -3323,10 +3358,12 @@ jpeg_fdct_2x1 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) */ /* Even part */ + /* Apply unsigned->signed conversion */ data[0] = (DCTELEM) ((tmp0 + tmp1 - 2 * CENTERJSAMPLE) << 5); /* Odd part */ + data[1] = (DCTELEM) ((tmp0 - tmp1) << 5); } @@ -3350,9 +3387,11 @@ jpeg_fdct_8x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) int ctr; SHIFT_TEMPS - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ dataptr = data; ctr = 0; @@ -3360,7 +3399,7 @@ jpeg_fdct_8x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) elemptr = sample_data[ctr] + start_col; /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + * rotator "c1" should be "c6". */ tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]); @@ -3382,39 +3421,43 @@ jpeg_fdct_8x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) dataptr[0] = (DCTELEM) ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << PASS1_BITS); dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); - dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, FIX_0_765366865), - CONST_BITS-PASS1_BITS); - dataptr[6] = (DCTELEM) DESCALE(z1 - MULTIPLY(tmp13, FIX_1_847759065), - CONST_BITS-PASS1_BITS); + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); /* c6 */ + dataptr[2] = (DCTELEM) + DESCALE(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */ + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) + DESCALE(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */ + CONST_BITS-PASS1_BITS); /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). * i0..i3 in the paper are tmp0..tmp3 here. */ - tmp10 = tmp0 + tmp3; - tmp11 = tmp1 + tmp2; tmp12 = tmp0 + tmp2; tmp13 = tmp1 + tmp3; - z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ - - tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ - tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ - tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ - tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ - tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ - tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ - tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ - tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* -c3+c5 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ tmp12 += z1; tmp13 += z1; - dataptr[1] = (DCTELEM) DESCALE(tmp0 + tmp10 + tmp12, CONST_BITS-PASS1_BITS); - dataptr[3] = (DCTELEM) DESCALE(tmp1 + tmp11 + tmp13, CONST_BITS-PASS1_BITS); - dataptr[5] = (DCTELEM) DESCALE(tmp2 + tmp11 + tmp12, CONST_BITS-PASS1_BITS); - dataptr[7] = (DCTELEM) DESCALE(tmp3 + tmp10 + tmp13, CONST_BITS-PASS1_BITS); + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp0 += z1 + tmp12; + tmp3 += z1 + tmp13; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp1 += z1 + tmp13; + tmp2 += z1 + tmp12; + + dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS-PASS1_BITS); + dataptr[7] = (DCTELEM) DESCALE(tmp3, CONST_BITS-PASS1_BITS); ctr++; @@ -3541,10 +3584,11 @@ jpeg_fdct_7x14 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* 7-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/14). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 7-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/14). + */ dataptr = data; ctr = 0; @@ -3721,10 +3765,11 @@ jpeg_fdct_6x12 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ dataptr = data; ctr = 0; @@ -3870,10 +3915,11 @@ jpeg_fdct_5x10 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* 5-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/10). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 5-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/10). + */ dataptr = data; ctr = 0; @@ -4015,11 +4061,13 @@ jpeg_fdct_4x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* We must also scale the output by 8/4 = 2, which we add here. */ - /* 4-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * We must also scale the output by 8/4 = 2, which we add here. + * 4-point FDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT]. + */ dataptr = data; for (ctr = 0; ctr < DCTSIZE; ctr++) { @@ -4057,12 +4105,13 @@ jpeg_fdct_4x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pass 2: process columns. * We remove the PASS1_BITS scaling, but leave the results scaled up * by an overall factor of 8. + * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). */ dataptr = data; for (ctr = 0; ctr < 4; ctr++) { /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + * rotator "c1" should be "c6". */ tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; @@ -4084,47 +4133,49 @@ jpeg_fdct_4x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp10 + tmp11, PASS1_BITS); dataptr[DCTSIZE*4] = (DCTELEM) RIGHT_SHIFT(tmp10 - tmp11, PASS1_BITS); - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); /* c6 */ /* Add fudge factor here for final descale. */ z1 += ONE << (CONST_BITS+PASS1_BITS-1); + dataptr[DCTSIZE*2] = (DCTELEM) - RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), CONST_BITS+PASS1_BITS); + RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */ + CONST_BITS+PASS1_BITS); dataptr[DCTSIZE*6] = (DCTELEM) - RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), CONST_BITS+PASS1_BITS); + RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */ + CONST_BITS+PASS1_BITS); /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16). * i0..i3 in the paper are tmp0..tmp3 here. */ - tmp10 = tmp0 + tmp3; - tmp11 = tmp1 + tmp2; tmp12 = tmp0 + tmp2; tmp13 = tmp1 + tmp3; - z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ + + z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602); /* c3 */ /* Add fudge factor here for final descale. */ z1 += ONE << (CONST_BITS+PASS1_BITS-1); - tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ - tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ - tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ - tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ - tmp10 = MULTIPLY(tmp10, - FIX_0_899976223); /* c7-c3 */ - tmp11 = MULTIPLY(tmp11, - FIX_2_562915447); /* -c1-c3 */ - tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* c5-c3 */ - tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ - + tmp12 = MULTIPLY(tmp12, - FIX_0_390180644); /* -c3+c5 */ + tmp13 = MULTIPLY(tmp13, - FIX_1_961570560); /* -c3-c5 */ tmp12 += z1; tmp13 += z1; - dataptr[DCTSIZE*1] = (DCTELEM) - RIGHT_SHIFT(tmp0 + tmp10 + tmp12, CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*3] = (DCTELEM) - RIGHT_SHIFT(tmp1 + tmp11 + tmp13, CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*5] = (DCTELEM) - RIGHT_SHIFT(tmp2 + tmp11 + tmp12, CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*7] = (DCTELEM) - RIGHT_SHIFT(tmp3 + tmp10 + tmp13, CONST_BITS+PASS1_BITS); + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_1_501321110); /* c1+c3-c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp0 += z1 + tmp12; + tmp3 += z1 + tmp13; + + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_3_072711026); /* c1+c3+c5-c7 */ + tmp2 = MULTIPLY(tmp2, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp1 += z1 + tmp13; + tmp2 += z1 + tmp12; + + dataptr[DCTSIZE*1] = (DCTELEM) RIGHT_SHIFT(tmp0, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) RIGHT_SHIFT(tmp1, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) RIGHT_SHIFT(tmp2, CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*7] = (DCTELEM) RIGHT_SHIFT(tmp3, CONST_BITS+PASS1_BITS); dataptr++; /* advance pointer to next column */ } @@ -4150,12 +4201,13 @@ jpeg_fdct_3x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - /* We scale the results further by 2 as part of output adaption */ - /* scaling for different DCT size. */ - /* 3-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/6). */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * We scale the results further by 2 as part of output adaption + * scaling for different DCT size. + * 3-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/6). + */ dataptr = data; for (ctr = 0; ctr < 6; ctr++) { @@ -4255,9 +4307,10 @@ jpeg_fdct_2x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT. */ - /* We must also scale the output by (8/2)*(8/4) = 2**3, which we add here. */ + /* Pass 1: process rows. + * Note results are scaled up by sqrt(8) compared to a true DCT. + * We must also scale the output by (8/2)*(8/4) = 2**3, which we add here. + */ dataptr = data; for (ctr = 0; ctr < 4; ctr++) { @@ -4329,18 +4382,23 @@ jpeg_fdct_1x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col) /* Pre-zero output coefficient block. */ MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2); - tmp0 = GETJSAMPLE(sample_data[0][start_col]); - tmp1 = GETJSAMPLE(sample_data[1][start_col]); + /* Pass 1: empty. */ - /* We leave the results scaled up by an overall factor of 8. + /* Pass 2: process columns. + * We leave the results scaled up by an overall factor of 8. * We must also scale the output by (8/1)*(8/2) = 2**5. */ /* Even part */ + + tmp0 = GETJSAMPLE(sample_data[0][start_col]); + tmp1 = GETJSAMPLE(sample_data[1][start_col]); + /* Apply unsigned->signed conversion */ data[DCTSIZE*0] = (DCTELEM) ((tmp0 + tmp1 - 2 * CENTERJSAMPLE) << 5); /* Odd part */ + data[DCTSIZE*1] = (DCTELEM) ((tmp0 - tmp1) << 5); } diff --git a/reactos/dll/3rdparty/libjpeg/jidctint.c b/reactos/dll/3rdparty/libjpeg/jidctint.c index dcdf7ce4547..76fe5d9cfbc 100644 --- a/reactos/dll/3rdparty/libjpeg/jidctint.c +++ b/reactos/dll/3rdparty/libjpeg/jidctint.c @@ -2,7 +2,7 @@ * jidctint.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modification developed 2002-2009 by Guido Vollbeding. + * Modification developed 2002-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -165,6 +165,8 @@ /* * Perform dequantization and inverse DCT on one block of coefficients. + * + * cK represents sqrt(2) * cos(K*pi/16). */ GLOBAL(void) @@ -184,9 +186,10 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, int workspace[DCTSIZE2]; /* buffers data between passes */ SHIFT_TEMPS - /* Pass 1: process columns from input, store into work array. */ - /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* Pass 1: process columns from input, store into work array. + * Note results are scaled up by sqrt(8) compared to a true IDCT; + * furthermore, we scale the results by 2**PASS1_BITS. + */ inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; @@ -223,15 +226,16 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, continue; } - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ - + /* Even part: reverse the even part of the forward DCT. + * The rotator is c(-6). + */ + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); - tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); @@ -256,25 +260,25 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); - + z2 = tmp0 + tmp2; z3 = tmp1 + tmp3; - z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ - z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* -c3-c5 */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* -c3+c5 */ z2 += z1; z3 += z1; - z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* c1+c3-c5-c7 */ tmp0 += z1 + z2; tmp3 += z1 + z3; - z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* c1+c3+c5-c7 */ tmp1 += z1 + z3; tmp2 += z1 + z2; @@ -288,15 +292,16 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS); - + inptr++; /* advance pointers to next column */ quantptr++; wsptr++; } - /* Pass 2: process rows from work array, store into output array. */ - /* Note that we must descale the results by a factor of 8 == 2**3, */ - /* and also undo the PASS1_BITS scaling. */ + /* Pass 2: process rows from work array, store into output array. + * Note that we must descale the results by a factor of 8 == 2**3, + * and also undo the PASS1_BITS scaling. + */ wsptr = workspace; for (ctr = 0; ctr < DCTSIZE; ctr++) { @@ -330,15 +335,16 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, } #endif - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ - + /* Even part: reverse the even part of the forward DCT. + * The rotator is c(-6). + */ + z2 = (INT32) wsptr[2]; z3 = (INT32) wsptr[6]; - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); - tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ /* Add fudge factor here for final descale. */ z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); @@ -346,7 +352,7 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, tmp0 = (z2 + z3) << CONST_BITS; tmp1 = (z2 - z3) << CONST_BITS; - + tmp10 = tmp0 + tmp2; tmp13 = tmp0 - tmp2; tmp11 = tmp1 + tmp3; @@ -364,21 +370,21 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, z2 = tmp0 + tmp2; z3 = tmp1 + tmp3; - z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ - z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* -c3-c5 */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* -c3+c5 */ z2 += z1; z3 += z1; - z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* c1+c3-c5-c7 */ tmp0 += z1 + z2; tmp3 += z1 + z3; - z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* c1+c3+c5-c7 */ tmp1 += z1 + z3; tmp2 += z1 + z2; @@ -2835,9 +2841,11 @@ jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, int workspace[8*8]; /* buffers data between passes */ SHIFT_TEMPS - /* Pass 1: process columns from input, store into work array. */ - /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* Pass 1: process columns from input, store into work array. + * Note results are scaled up by sqrt(8) compared to a true IDCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 8-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; @@ -2851,14 +2859,14 @@ jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, * With typical images and quantization tables, half or more of the * column DCT calculations can be simplified this way. */ - + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) { /* AC terms all zero */ int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; - + wsptr[DCTSIZE*0] = dcval; wsptr[DCTSIZE*1] = dcval; wsptr[DCTSIZE*2] = dcval; @@ -2867,23 +2875,24 @@ jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, wsptr[DCTSIZE*5] = dcval; wsptr[DCTSIZE*6] = dcval; wsptr[DCTSIZE*7] = dcval; - + inptr++; /* advance pointers to next column */ quantptr++; wsptr++; continue; } - - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ - + + /* Even part: reverse the even part of the forward DCT. + * The rotator is c(-6). + */ + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); - - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); - tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); - + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); z2 <<= CONST_BITS; @@ -2893,44 +2902,44 @@ jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, tmp0 = z2 + z3; tmp1 = z2 - z3; - + tmp10 = tmp0 + tmp2; tmp13 = tmp0 - tmp2; tmp11 = tmp1 + tmp3; tmp12 = tmp1 - tmp3; - + /* Odd part per figure 8; the matrix is unitary and hence its * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. */ - + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); - + z2 = tmp0 + tmp2; z3 = tmp1 + tmp3; - z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ - z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* -c3-c5 */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* -c3+c5 */ z2 += z1; z3 += z1; - z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* c1+c3-c5-c7 */ tmp0 += z1 + z2; tmp3 += z1 + z3; - z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* c1+c3+c5-c7 */ tmp1 += z1 + z3; tmp2 += z1 + z2; - + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ - + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); @@ -2939,7 +2948,7 @@ jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS); - + inptr++; /* advance pointers to next column */ quantptr++; wsptr++; @@ -2948,6 +2957,7 @@ jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 8 rows from work array, store into output array. * 16-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/32). */ + wsptr = workspace; for (ctr = 0; ctr < 8; ctr++) { outptr = output_buf[ctr] + output_col; @@ -3109,6 +3119,7 @@ jpeg_idct_14x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 7-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/14). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -3164,6 +3175,7 @@ jpeg_idct_14x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 7 rows from work array, store into output array. * 14-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/28). */ + wsptr = workspace; for (ctr = 0; ctr < 7; ctr++) { outptr = output_buf[ctr] + output_col; @@ -3304,6 +3316,7 @@ jpeg_idct_12x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -3346,6 +3359,7 @@ jpeg_idct_12x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 6 rows from work array, store into output array. * 12-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/24). */ + wsptr = workspace; for (ctr = 0; ctr < 6; ctr++) { outptr = output_buf[ctr] + output_col; @@ -3480,6 +3494,7 @@ jpeg_idct_10x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 5-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/10). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -3520,6 +3535,7 @@ jpeg_idct_10x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 5 rows from work array, store into output array. * 10-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/20). */ + wsptr = workspace; for (ctr = 0; ctr < 5; ctr++) { outptr = output_buf[ctr] + output_col; @@ -3639,8 +3655,10 @@ jpeg_idct_8x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, SHIFT_TEMPS /* Pass 1: process columns from input, store into work array. - * 4-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + * 4-point IDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT]. */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -3675,31 +3693,34 @@ jpeg_idct_8x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, wsptr[8*2] = (int) (tmp12 - tmp2); } - /* Pass 2: process rows from work array, store into output array. */ - /* Note that we must descale the results by a factor of 8 == 2**3, */ - /* and also undo the PASS1_BITS scaling. */ + /* Pass 2: process rows from work array, store into output array. + * Note that we must descale the results by a factor of 8 == 2**3, + * and also undo the PASS1_BITS scaling. + * 8-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ wsptr = workspace; for (ctr = 0; ctr < 4; ctr++) { outptr = output_buf[ctr] + output_col; - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ + /* Even part: reverse the even part of the forward DCT. + * The rotator is c(-6). + */ z2 = (INT32) wsptr[2]; z3 = (INT32) wsptr[6]; - - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); - tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); - + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + /* Add fudge factor here for final descale. */ z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); z3 = (INT32) wsptr[4]; - + tmp0 = (z2 + z3) << CONST_BITS; tmp1 = (z2 - z3) << CONST_BITS; - + tmp10 = tmp0 + tmp2; tmp13 = tmp0 - tmp2; tmp11 = tmp1 + tmp3; @@ -3717,21 +3738,21 @@ jpeg_idct_8x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, z2 = tmp0 + tmp2; z3 = tmp1 + tmp3; - z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ - z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* -c3-c5 */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* -c3+c5 */ z2 += z1; z3 += z1; - z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* c1+c3-c5-c7 */ tmp0 += z1 + z2; tmp3 += z1 + z3; - z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* c1+c3+c5-c7 */ tmp1 += z1 + z3; tmp2 += z1 + z2; @@ -3793,6 +3814,7 @@ jpeg_idct_6x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 3-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/6). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -3823,6 +3845,7 @@ jpeg_idct_6x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 3 rows from work array, store into output array. * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). */ + wsptr = workspace; for (ctr = 0; ctr < 3; ctr++) { outptr = output_buf[ctr] + output_col; @@ -3924,6 +3947,7 @@ jpeg_idct_4x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, * 4-point IDCT kernel, * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT]. */ + wsptr = workspace; for (ctr = 0; ctr < 2; ctr++) { outptr = output_buf[ctr] + output_col; @@ -3979,7 +4003,7 @@ jpeg_idct_2x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col) { - INT32 tmp0, tmp10; + INT32 tmp0, tmp1; ISLOW_MULT_TYPE * quantptr; JSAMPROW outptr; JSAMPLE *range_limit = IDCT_range_limit(cinfo); @@ -3994,18 +4018,18 @@ jpeg_idct_2x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Even part */ - tmp10 = DEQUANTIZE(coef_block[0], quantptr[0]); + tmp0 = DEQUANTIZE(coef_block[0], quantptr[0]); /* Add fudge factor here for final descale. */ - tmp10 += ONE << 2; + tmp0 += ONE << 2; /* Odd part */ - tmp0 = DEQUANTIZE(coef_block[1], quantptr[1]); + tmp1 = DEQUANTIZE(coef_block[1], quantptr[1]); /* Final output stage */ - outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) & RANGE_MASK]; - outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) & RANGE_MASK]; + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3) & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3) & RANGE_MASK]; } @@ -4036,6 +4060,7 @@ jpeg_idct_8x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 16-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/32). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -4134,69 +4159,72 @@ jpeg_idct_8x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr, wsptr[8*7] = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS); wsptr[8*8] = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS); } - - /* Pass 2: process rows from work array, store into output array. */ - /* Note that we must descale the results by a factor of 8 == 2**3, */ - /* and also undo the PASS1_BITS scaling. */ + + /* Pass 2: process rows from work array, store into output array. + * Note that we must descale the results by a factor of 8 == 2**3, + * and also undo the PASS1_BITS scaling. + * 8-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ wsptr = workspace; for (ctr = 0; ctr < 16; ctr++) { outptr = output_buf[ctr] + output_col; - - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ - + + /* Even part: reverse the even part of the forward DCT. + * The rotator is c(-6). + */ + z2 = (INT32) wsptr[2]; z3 = (INT32) wsptr[6]; - - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); - tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); - + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + /* Add fudge factor here for final descale. */ z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); z3 = (INT32) wsptr[4]; - + tmp0 = (z2 + z3) << CONST_BITS; tmp1 = (z2 - z3) << CONST_BITS; - + tmp10 = tmp0 + tmp2; tmp13 = tmp0 - tmp2; tmp11 = tmp1 + tmp3; tmp12 = tmp1 - tmp3; - + /* Odd part per figure 8; the matrix is unitary and hence its * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. */ - + tmp0 = (INT32) wsptr[7]; tmp1 = (INT32) wsptr[5]; tmp2 = (INT32) wsptr[3]; tmp3 = (INT32) wsptr[1]; - + z2 = tmp0 + tmp2; z3 = tmp1 + tmp3; - z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ - z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* -c3-c5 */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* -c3+c5 */ z2 += z1; z3 += z1; - z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* c1+c3-c5-c7 */ tmp0 += z1 + z2; tmp3 += z1 + z3; - z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* c1+c3+c5-c7 */ tmp1 += z1 + z3; tmp2 += z1 + z2; - + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ - + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; @@ -4221,7 +4249,7 @@ jpeg_idct_8x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr, outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; - + wsptr += DCTSIZE; /* advance pointer to next row */ } } @@ -4254,6 +4282,7 @@ jpeg_idct_7x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 14-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/28). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -4341,6 +4370,7 @@ jpeg_idct_7x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 14 rows from work array, store into output array. * 7-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/14). */ + wsptr = workspace; for (ctr = 0; ctr < 14; ctr++) { outptr = output_buf[ctr] + output_col; @@ -4437,6 +4467,7 @@ jpeg_idct_6x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 12-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/24). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -4520,6 +4551,7 @@ jpeg_idct_6x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 12 rows from work array, store into output array. * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). */ + wsptr = workspace; for (ctr = 0; ctr < 12; ctr++) { outptr = output_buf[ctr] + output_col; @@ -4601,6 +4633,7 @@ jpeg_idct_5x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 10-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/20). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -4676,6 +4709,7 @@ jpeg_idct_5x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 10 rows from work array, store into output array. * 5-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/10). */ + wsptr = workspace; for (ctr = 0; ctr < 10; ctr++) { outptr = output_buf[ctr] + output_col; @@ -4750,9 +4784,11 @@ jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, int workspace[4*8]; /* buffers data between passes */ SHIFT_TEMPS - /* Pass 1: process columns from input, store into work array. */ - /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ + /* Pass 1: process columns from input, store into work array. + * Note results are scaled up by sqrt(8) compared to a true IDCT; + * furthermore, we scale the results by 2**PASS1_BITS. + * 8-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; @@ -4789,16 +4825,17 @@ jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, continue; } - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ + /* Even part: reverse the even part of the forward DCT. + * The rotator is c(-6). + */ z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); - - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); - tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); - + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); z2 <<= CONST_BITS; @@ -4808,7 +4845,7 @@ jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, tmp0 = z2 + z3; tmp1 = z2 - z3; - + tmp10 = tmp0 + tmp2; tmp13 = tmp0 - tmp2; tmp11 = tmp1 + tmp3; @@ -4826,21 +4863,21 @@ jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, z2 = tmp0 + tmp2; z3 = tmp1 + tmp3; - z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ - z2 = MULTIPLY(z2, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z3 = MULTIPLY(z3, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* c3 */ + z2 = MULTIPLY(z2, - FIX_1_961570560); /* -c3-c5 */ + z3 = MULTIPLY(z3, - FIX_0_390180644); /* -c3+c5 */ z2 += z1; z3 += z1; - z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */ + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* -c1+c3+c5-c7 */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* c1+c3-c5-c7 */ tmp0 += z1 + z2; tmp3 += z1 + z3; - z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* c1+c3-c5+c7 */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* c1+c3+c5-c7 */ tmp1 += z1 + z3; tmp2 += z1 + z2; @@ -4861,8 +4898,10 @@ jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, } /* Pass 2: process 8 rows from work array, store into output array. - * 4-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + * 4-point IDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT]. */ + wsptr = workspace; for (ctr = 0; ctr < 8; ctr++) { outptr = output_buf[ctr] + output_col; @@ -4900,7 +4939,7 @@ jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; - + wsptr += 4; /* advance pointer to next row */ } } @@ -4932,6 +4971,7 @@ jpeg_idct_3x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 1: process columns from input, store into work array. * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -4974,6 +5014,7 @@ jpeg_idct_3x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Pass 2: process 6 rows from work array, store into output array. * 3-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/6). */ + wsptr = workspace; for (ctr = 0; ctr < 6; ctr++) { outptr = output_buf[ctr] + output_col; @@ -5037,6 +5078,7 @@ jpeg_idct_2x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, * 4-point IDCT kernel, * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT]. */ + inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; @@ -5106,7 +5148,7 @@ jpeg_idct_1x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col) { - INT32 tmp0, tmp10; + INT32 tmp0, tmp1; ISLOW_MULT_TYPE * quantptr; JSAMPLE *range_limit = IDCT_range_limit(cinfo); SHIFT_TEMPS @@ -5117,19 +5159,19 @@ jpeg_idct_1x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, /* Even part */ - tmp10 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); /* Add fudge factor here for final descale. */ - tmp10 += ONE << 2; + tmp0 += ONE << 2; /* Odd part */ - tmp0 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp1 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); /* Final output stage */ - output_buf[0][output_col] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) + output_buf[0][output_col] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3) & RANGE_MASK]; - output_buf[1][output_col] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) + output_buf[1][output_col] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3) & RANGE_MASK]; } diff --git a/reactos/dll/3rdparty/libjpeg/jpegtran.c b/reactos/dll/3rdparty/libjpeg/jpegtran.c index 7e8ef0ce4d6..5269344e171 100644 --- a/reactos/dll/3rdparty/libjpeg/jpegtran.c +++ b/reactos/dll/3rdparty/libjpeg/jpegtran.c @@ -1,7 +1,7 @@ /* * jpegtran.c * - * Copyright (C) 1995-2012, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1995-2013, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -66,8 +66,8 @@ usage (void) fprintf(stderr, "Switches for modifying the image:\n"); #if TRANSFORMS_SUPPORTED fprintf(stderr, " -crop WxH+X+Y Crop to a rectangular subarea\n"); - fprintf(stderr, " -grayscale Reduce to grayscale (omit color data)\n"); fprintf(stderr, " -flip [horizontal|vertical] Mirror image (left-right or top-bottom)\n"); + fprintf(stderr, " -grayscale Reduce to grayscale (omit color data)\n"); fprintf(stderr, " -perfect Fail if there is non-transformable edge blocks\n"); fprintf(stderr, " -rotate [90|180|270] Rotate image (degrees clockwise)\n"); #endif @@ -76,6 +76,7 @@ usage (void) fprintf(stderr, " -transpose Transpose image\n"); fprintf(stderr, " -transverse Transverse transpose image\n"); fprintf(stderr, " -trim Drop non-transformable edge blocks\n"); + fprintf(stderr, " -wipe WxH+X+Y Wipe (gray out) a rectangular subarea\n"); #endif fprintf(stderr, "Switches for advanced users:\n"); #ifdef C_ARITH_CODING_SUPPORTED @@ -187,7 +188,8 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, #if TRANSFORMS_SUPPORTED if (++argn >= argc) /* advance to next argument */ usage(); - if (! jtransform_parse_crop_spec(&transformoption, argv[argn])) { + if (transformoption.crop /* reject multiple crop/wipe requests */ || + ! jtransform_parse_crop_spec(&transformoption, argv[argn])) { fprintf(stderr, "%s: bogus -crop argument '%s'\n", progname, argv[argn]); exit(EXIT_FAILURE); @@ -336,6 +338,21 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, /* Trim off any partial edge MCUs that the transform can't handle. */ transformoption.trim = TRUE; + } else if (keymatch(arg, "wipe", 1)) { +#if TRANSFORMS_SUPPORTED + if (++argn >= argc) /* advance to next argument */ + usage(); + if (transformoption.crop /* reject multiple crop/wipe requests */ || + ! jtransform_parse_crop_spec(&transformoption, argv[argn])) { + fprintf(stderr, "%s: bogus -wipe argument '%s'\n", + progname, argv[argn]); + exit(EXIT_FAILURE); + } + select_transform(JXFORM_WIPE); +#else + select_transform(JXFORM_NONE); /* force an error */ +#endif + } else { usage(); /* bogus switch */ } diff --git a/reactos/dll/3rdparty/libjpeg/transupp.c b/reactos/dll/3rdparty/libjpeg/transupp.c index d0013cce8ce..525932a3170 100644 --- a/reactos/dll/3rdparty/libjpeg/transupp.c +++ b/reactos/dll/3rdparty/libjpeg/transupp.c @@ -1,7 +1,7 @@ /* * transupp.c * - * Copyright (C) 1997-2012, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1997-2013, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -113,6 +113,116 @@ do_crop (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, } +LOCAL(void) +do_crop_ext (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Crop. This is only used when no rotate/flip is requested with the crop. + * Extension: If the destination size is larger than the source, we fill in + * the extra area with zero (neutral gray). Note we also have to zero partial + * iMCUs at the right and bottom edge of the source image area in this case. + */ +{ + JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height; + JDIMENSION dst_blk_y, x_crop_blocks, y_crop_blocks; + int ci, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + jpeg_component_info *compptr; + + MCU_cols = srcinfo->output_width / + (dstinfo->max_h_samp_factor * dstinfo->min_DCT_h_scaled_size); + MCU_rows = srcinfo->output_height / + (dstinfo->max_v_samp_factor * dstinfo->min_DCT_v_scaled_size); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + comp_height = MCU_rows * compptr->v_samp_factor; + x_crop_blocks = x_crop_offset * compptr->h_samp_factor; + y_crop_blocks = y_crop_offset * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + if (dstinfo->jpeg_height > srcinfo->output_height) { + if (dst_blk_y < y_crop_blocks || + dst_blk_y >= comp_height + y_crop_blocks) { + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + FMEMZERO(dst_buffer[offset_y], + compptr->width_in_blocks * SIZEOF(JBLOCK)); + } + continue; + } + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_y - y_crop_blocks, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } else { + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + dst_blk_y + y_crop_blocks, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + if (dstinfo->jpeg_width > srcinfo->output_width) { + if (x_crop_blocks > 0) { + FMEMZERO(dst_buffer[offset_y], + x_crop_blocks * SIZEOF(JBLOCK)); + } + jcopy_block_row(src_buffer[offset_y], + dst_buffer[offset_y] + x_crop_blocks, + comp_width); + if (compptr->width_in_blocks > comp_width + x_crop_blocks) { + FMEMZERO(dst_buffer[offset_y] + + comp_width + x_crop_blocks, + (compptr->width_in_blocks - + comp_width - x_crop_blocks) * SIZEOF(JBLOCK)); + } + } else { + jcopy_block_row(src_buffer[offset_y] + x_crop_blocks, + dst_buffer[offset_y], + compptr->width_in_blocks); + } + } + } + } +} + + +LOCAL(void) +do_wipe (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JDIMENSION x_crop_offset, JDIMENSION y_crop_offset, + jvirt_barray_ptr *src_coef_arrays, + JDIMENSION drop_width, JDIMENSION drop_height) +/* Wipe - drop content of specified area, fill with zero (neutral gray) */ +{ + JDIMENSION comp_width, comp_height; + JDIMENSION blk_y, x_wipe_blocks, y_wipe_blocks; + int ci, offset_y; + JBLOCKARRAY buffer; + jpeg_component_info *compptr; + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = drop_width * compptr->h_samp_factor; + comp_height = drop_height * compptr->v_samp_factor; + x_wipe_blocks = x_crop_offset * compptr->h_samp_factor; + y_wipe_blocks = y_crop_offset * compptr->v_samp_factor; + for (blk_y = 0; blk_y < comp_height; blk_y += compptr->v_samp_factor) { + buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], blk_y + y_wipe_blocks, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + FMEMZERO(buffer[offset_y] + x_wipe_blocks, + comp_width * SIZEOF(JBLOCK)); + } + } + } +} + + LOCAL(void) do_flip_h_no_crop (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, JDIMENSION x_crop_offset, @@ -888,7 +998,8 @@ jtransform_request_workspace (j_decompress_ptr srcinfo, /* Determine number of components in output image */ if (info->force_grayscale && - srcinfo->jpeg_color_space == JCS_YCbCr && + (srcinfo->jpeg_color_space == JCS_YCbCr || + srcinfo->jpeg_color_space == JCS_BG_YCC) && srcinfo->num_components == 3) /* We'll only process the first component */ info->num_components = 1; @@ -965,39 +1076,81 @@ jtransform_request_workspace (j_decompress_ptr srcinfo, info->crop_xoffset = 0; /* default to +0 */ if (info->crop_yoffset_set == JCROP_UNSET) info->crop_yoffset = 0; /* default to +0 */ - if (info->crop_xoffset >= info->output_width || - info->crop_yoffset >= info->output_height) - ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); - if (info->crop_width_set == JCROP_UNSET) + if (info->crop_width_set == JCROP_UNSET) { + if (info->crop_xoffset >= info->output_width) + ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); info->crop_width = info->output_width - info->crop_xoffset; - if (info->crop_height_set == JCROP_UNSET) + } else { + /* Check for crop extension */ + if (info->crop_width > info->output_width) { + /* Crop extension does not work when transforming! */ + if (info->transform != JXFORM_NONE || + info->crop_xoffset >= info->crop_width || + info->crop_xoffset > info->crop_width - info->output_width) + ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); + } else { + if (info->crop_xoffset >= info->output_width || + info->crop_width <= 0 || + info->crop_xoffset > info->output_width - info->crop_width) + ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); + } + } + if (info->crop_height_set == JCROP_UNSET) { + if (info->crop_yoffset >= info->output_height) + ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); info->crop_height = info->output_height - info->crop_yoffset; - /* Ensure parameters are valid */ - if (info->crop_width <= 0 || info->crop_width > info->output_width || - info->crop_height <= 0 || info->crop_height > info->output_height || - info->crop_xoffset > info->output_width - info->crop_width || - info->crop_yoffset > info->output_height - info->crop_height) - ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); + } else { + /* Check for crop extension */ + if (info->crop_height > info->output_height) { + /* Crop extension does not work when transforming! */ + if (info->transform != JXFORM_NONE || + info->crop_yoffset >= info->crop_height || + info->crop_yoffset > info->crop_height - info->output_height) + ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); + } else { + if (info->crop_yoffset >= info->output_height || + info->crop_height <= 0 || + info->crop_yoffset > info->output_height - info->crop_height) + ERREXIT(srcinfo, JERR_BAD_CROP_SPEC); + } + } /* Convert negative crop offsets into regular offsets */ - if (info->crop_xoffset_set == JCROP_NEG) - xoffset = info->output_width - info->crop_width - info->crop_xoffset; - else + if (info->crop_xoffset_set != JCROP_NEG) xoffset = info->crop_xoffset; - if (info->crop_yoffset_set == JCROP_NEG) - yoffset = info->output_height - info->crop_height - info->crop_yoffset; + else if (info->crop_width > info->output_width) /* crop extension */ + xoffset = info->crop_width - info->output_width - info->crop_xoffset; else + xoffset = info->output_width - info->crop_width - info->crop_xoffset; + if (info->crop_yoffset_set != JCROP_NEG) yoffset = info->crop_yoffset; + else if (info->crop_height > info->output_height) /* crop extension */ + yoffset = info->crop_height - info->output_height - info->crop_yoffset; + else + yoffset = info->output_height - info->crop_height - info->crop_yoffset; /* Now adjust so that upper left corner falls at an iMCU boundary */ - if (info->crop_width_set == JCROP_FORCE) - info->output_width = info->crop_width; - else - info->output_width = - info->crop_width + (xoffset % info->iMCU_sample_width); - if (info->crop_height_set == JCROP_FORCE) - info->output_height = info->crop_height; - else - info->output_height = - info->crop_height + (yoffset % info->iMCU_sample_height); + if (info->transform == JXFORM_WIPE) { + /* Ensure the effective wipe region will cover the requested */ + info->drop_width = (JDIMENSION) jdiv_round_up + ((long) (info->crop_width + (xoffset % info->iMCU_sample_width)), + (long) info->iMCU_sample_width); + info->drop_height = (JDIMENSION) jdiv_round_up + ((long) (info->crop_height + (yoffset % info->iMCU_sample_height)), + (long) info->iMCU_sample_height); + } else { + /* Ensure the effective crop region will cover the requested */ + if (info->crop_width_set == JCROP_FORCE || + info->crop_width > info->output_width) + info->output_width = info->crop_width; + else + info->output_width = + info->crop_width + (xoffset % info->iMCU_sample_width); + if (info->crop_height_set == JCROP_FORCE || + info->crop_height > info->output_height) + info->output_height = info->crop_height; + else + info->output_height = + info->crop_height + (yoffset % info->iMCU_sample_height); + } /* Save x/y offsets measured in iMCUs */ info->x_crop_offset = xoffset / info->iMCU_sample_width; info->y_crop_offset = yoffset / info->iMCU_sample_height; @@ -1013,7 +1166,9 @@ jtransform_request_workspace (j_decompress_ptr srcinfo, transpose_it = FALSE; switch (info->transform) { case JXFORM_NONE: - if (info->x_crop_offset != 0 || info->y_crop_offset != 0) + if (info->x_crop_offset != 0 || info->y_crop_offset != 0 || + info->output_width > srcinfo->output_width || + info->output_height > srcinfo->output_height) need_workspace = TRUE; /* No workspace needed if neither cropping nor transforming */ break; @@ -1067,6 +1222,8 @@ jtransform_request_workspace (j_decompress_ptr srcinfo, need_workspace = TRUE; transpose_it = TRUE; break; + case JXFORM_WIPE: + break; } /* Allocate workspace if needed. @@ -1327,12 +1484,13 @@ jtransform_adjust_parameters (j_decompress_ptr srcinfo, { /* If force-to-grayscale is requested, adjust destination parameters */ if (info->force_grayscale) { - /* First, ensure we have YCbCr or grayscale data, and that the source's + /* First, ensure we have YCC or grayscale data, and that the source's * Y channel is full resolution. (No reasonable person would make Y * be less than full resolution, so actually coping with that case * isn't worth extra code space. But we check it to avoid crashing.) */ - if (((dstinfo->jpeg_color_space == JCS_YCbCr && + if ((((dstinfo->jpeg_color_space == JCS_YCbCr || + dstinfo->jpeg_color_space == JCS_BG_YCC) && dstinfo->num_components == 3) || (dstinfo->jpeg_color_space == JCS_GRAYSCALE && dstinfo->num_components == 1)) && @@ -1427,7 +1585,11 @@ jtransform_execute_transform (j_decompress_ptr srcinfo, */ switch (info->transform) { case JXFORM_NONE: - if (info->x_crop_offset != 0 || info->y_crop_offset != 0) + if (info->output_width > srcinfo->output_width || + info->output_height > srcinfo->output_height) + do_crop_ext(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, dst_coef_arrays); + else if (info->x_crop_offset != 0 || info->y_crop_offset != 0) do_crop(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, src_coef_arrays, dst_coef_arrays); break; @@ -1463,6 +1625,10 @@ jtransform_execute_transform (j_decompress_ptr srcinfo, do_rot_270(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, src_coef_arrays, dst_coef_arrays); break; + case JXFORM_WIPE: + do_wipe(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset, + src_coef_arrays, info->drop_width, info->drop_height); + break; } } diff --git a/reactos/include/reactos/libs/libjpeg/jconfig.h b/reactos/include/reactos/libs/libjpeg/jconfig.h index 99172ce91c2..6e7a009023e 100644 --- a/reactos/include/reactos/libs/libjpeg/jconfig.h +++ b/reactos/include/reactos/libs/libjpeg/jconfig.h @@ -1,12 +1,20 @@ #define HAVE_PROTOTYPES #define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT #define HAVE_STDDEF_H #define HAVE_STDLIB_H +/* Define "boolean" as unsigned char, not enum, per Windows custom */ #ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ typedef unsigned char boolean; #endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif #define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ #undef NEED_BSD_STRINGS @@ -14,5 +22,3 @@ typedef unsigned char boolean; #undef NEED_FAR_POINTERS /* we presume a 32-bit flat memory model */ #undef NEED_SHORT_EXTERNAL_NAMES #undef INCOMPLETE_TYPES_BROKEN - -// typedef long INT32; diff --git a/reactos/include/reactos/libs/libjpeg/jmorecfg.h b/reactos/include/reactos/libs/libjpeg/jmorecfg.h index 2407edbef8c..679d68bdc54 100644 --- a/reactos/include/reactos/libs/libjpeg/jmorecfg.h +++ b/reactos/include/reactos/libs/libjpeg/jmorecfg.h @@ -2,7 +2,7 @@ * jmorecfg.h * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 1997-2012 by Guido Vollbeding. + * Modified 1997-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -15,13 +15,22 @@ /* * Define BITS_IN_JSAMPLE as either * 8 for 8-bit sample values (the usual setting) + * 9 for 9-bit sample values + * 10 for 10-bit sample values + * 11 for 11-bit sample values * 12 for 12-bit sample values - * Only 8 and 12 are legal data precisions for lossy JPEG according to the - * JPEG standard, and the IJG code does not support anything else! - * We do not support run-time selection of data precision, sorry. + * Only 8, 9, 10, 11, and 12 bits sample data precision are supported for + * full-feature DCT processing. Further depths up to 16-bit may be added + * later for the lossless modes of operation. + * Run-time selection and conversion of data precision will be added later + * and are currently not supported, sorry. + * Exception: The transcoding part (jpegtran) supports all settings in a + * single instance, since it operates on the level of DCT coefficients and + * not sample values. The DCT coefficients are of the same type (16 bits) + * in all cases (see below). */ -#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ +#define BITS_IN_JSAMPLE 8 /* use 8, 9, 10, 11, or 12 */ /* @@ -77,6 +86,48 @@ typedef char JSAMPLE; #endif /* BITS_IN_JSAMPLE == 8 */ +#if BITS_IN_JSAMPLE == 9 +/* JSAMPLE should be the smallest type that will hold the values 0..511. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 511 +#define CENTERJSAMPLE 256 + +#endif /* BITS_IN_JSAMPLE == 9 */ + + +#if BITS_IN_JSAMPLE == 10 +/* JSAMPLE should be the smallest type that will hold the values 0..1023. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 1023 +#define CENTERJSAMPLE 512 + +#endif /* BITS_IN_JSAMPLE == 10 */ + + +#if BITS_IN_JSAMPLE == 11 +/* JSAMPLE should be the smallest type that will hold the values 0..2047. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 2047 +#define CENTERJSAMPLE 1024 + +#endif /* BITS_IN_JSAMPLE == 11 */ + + #if BITS_IN_JSAMPLE == 12 /* JSAMPLE should be the smallest type that will hold the values 0..4095. * On nearly all machines "short" will do nicely. @@ -252,7 +303,10 @@ typedef void noreturn_t; * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. */ -#ifdef HAVE_BOOLEAN +#ifndef HAVE_BOOLEAN +#if defined FALSE || defined TRUE || defined QGLOBAL_H +/* Qt3 defines FALSE and TRUE as "const" variables in qglobal.h */ +typedef int boolean; #ifndef FALSE /* in case these macros already exist */ #define FALSE 0 /* values of boolean */ #endif @@ -262,6 +316,7 @@ typedef void noreturn_t; #else typedef enum { FALSE = 0, TRUE = 1 } boolean; #endif +#endif /* @@ -299,11 +354,12 @@ typedef enum { FALSE = 0, TRUE = 1 } boolean; #define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ #define DCT_SCALING_SUPPORTED /* Input rescaling via DCT? (Requires DCT_ISLOW)*/ #define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ -/* Note: if you selected 12-bit data precision, it is dangerous to turn off - * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit - * precision, so jchuff.c normally uses entropy optimization to compute - * usable tables for higher precision. If you don't want to do optimization, - * you'll have to supply different default Huffman tables. +/* Note: if you selected more than 8-bit data precision, it is dangerous to + * turn off ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only + * good for 8-bit precision, so arithmetic coding is recommended for higher + * precision. The Huffman encoder normally uses entropy optimization to + * compute usable tables for higher precision. Otherwise, you'll have to + * supply different default Huffman tables. * The exact same statements apply for progressive JPEG: the default tables * don't work for progressive mode. (This may get fixed, however.) */ @@ -314,7 +370,7 @@ typedef enum { FALSE = 0, TRUE = 1 } boolean; #define D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ #define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ #define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? (Requires DCT_ISLOW)*/ #define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ #define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ #undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ diff --git a/reactos/include/reactos/libs/libjpeg/jpegint.h b/reactos/include/reactos/libs/libjpeg/jpegint.h index c0d5c142022..18bb8879aaa 100644 --- a/reactos/include/reactos/libs/libjpeg/jpegint.h +++ b/reactos/include/reactos/libs/libjpeg/jpegint.h @@ -2,7 +2,7 @@ * jpegint.h * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 1997-2011 by Guido Vollbeding. + * Modified 1997-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -211,8 +211,8 @@ struct jpeg_marker_reader { /* Entropy decoding */ struct jpeg_entropy_decoder { JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); - JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, - JBLOCKROW *MCU_data)); + JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)); + JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); }; /* Inverse DCT (also performs dequantization) */ diff --git a/reactos/include/reactos/libs/libjpeg/jpeglib.h b/reactos/include/reactos/libs/libjpeg/jpeglib.h index 0a6dac44c33..f4fbf23e9d8 100644 --- a/reactos/include/reactos/libs/libjpeg/jpeglib.h +++ b/reactos/include/reactos/libs/libjpeg/jpeglib.h @@ -2,7 +2,7 @@ * jpeglib.h * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2002-2012 by Guido Vollbeding. + * Modified 2002-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -39,12 +39,12 @@ extern "C" { #define JPEG_LIB_VERSION 90 /* Compatibility version 9.0 */ #define JPEG_LIB_VERSION_MAJOR 9 -#define JPEG_LIB_VERSION_MINOR 0 +#define JPEG_LIB_VERSION_MINOR 1 /* Various constants determining the sizes of things. - * All of these are specified by the JPEG standard, so don't change them - * if you want to be compatible. + * All of these are specified by the JPEG standard, + * so don't change them if you want to be compatible. */ #define DCTSIZE 8 /* The basic DCT block is 8x8 coefficients */ @@ -157,16 +157,21 @@ typedef struct { /* The downsampled dimensions are the component's actual, unpadded number * of samples at the main buffer (preprocessing/compression interface); * DCT scaling is included, so - * downsampled_width = ceil(image_width * Hi/Hmax * DCT_h_scaled_size/DCTSIZE) + * downsampled_width = + * ceil(image_width * Hi/Hmax * DCT_h_scaled_size/block_size) * and similarly for height. */ JDIMENSION downsampled_width; /* actual width in samples */ JDIMENSION downsampled_height; /* actual height in samples */ - /* This flag is used only for decompression. In cases where some of the - * components will be ignored (eg grayscale output from YCbCr image), - * we can skip most computations for the unused components. + /* For decompression, in cases where some of the components will be + * ignored (eg grayscale output from YCbCr image), we can skip most + * computations for the unused components. + * For compression, some of the components will need further quantization + * scale by factor of 2 after DCT (eg BG_YCC output from normal RGB input). + * The field is first set TRUE for decompression, FALSE for compression + * in initial_setup, and then adapted in color conversion setup. */ - boolean component_needed; /* do we need the value of this component? */ + boolean component_needed; /* These values are computed before starting a scan of the component. */ /* The decompressor output side may not use these variables. */ @@ -215,10 +220,12 @@ struct jpeg_marker_struct { typedef enum { JCS_UNKNOWN, /* error/unspecified */ JCS_GRAYSCALE, /* monochrome */ - JCS_RGB, /* red/green/blue */ - JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_RGB, /* red/green/blue, standard RGB (sRGB) */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV), standard YCC */ JCS_CMYK, /* C/M/Y/K */ - JCS_YCCK /* Y/Cb/Cr/K */ + JCS_YCCK, /* Y/Cb/Cr/K */ + JCS_BG_RGB, /* big gamut red/green/blue, bg-sRGB */ + JCS_BG_YCC /* big gamut Y/Cb/Cr, bg-sYCC */ } J_COLOR_SPACE; /* Supported color transforms. */ diff --git a/reactos/include/reactos/libs/libjpeg/jversion.h b/reactos/include/reactos/libs/libjpeg/jversion.h index 232085f13b7..a6e3ac734dc 100644 --- a/reactos/include/reactos/libs/libjpeg/jversion.h +++ b/reactos/include/reactos/libs/libjpeg/jversion.h @@ -1,7 +1,7 @@ /* * jversion.h * - * Copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1991-2014, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -9,6 +9,6 @@ */ -#define JVERSION "9 13-Jan-2013" +#define JVERSION "9a 19-Jan-2014" -#define JCOPYRIGHT "Copyright (C) 2013, Thomas G. Lane, Guido Vollbeding" +#define JCOPYRIGHT "Copyright (C) 2014, Thomas G. Lane, Guido Vollbeding" diff --git a/reactos/include/reactos/libs/libjpeg/transupp.h b/reactos/include/reactos/libs/libjpeg/transupp.h index 9aa0af385a8..eee6931414c 100644 --- a/reactos/include/reactos/libs/libjpeg/transupp.h +++ b/reactos/include/reactos/libs/libjpeg/transupp.h @@ -1,7 +1,7 @@ /* * transupp.h * - * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1997-2013, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -51,14 +51,17 @@ * * We also offer a lossless-crop option, which discards data outside a given * image region but losslessly preserves what is inside. Like the rotate and - * flip transforms, lossless crop is restricted by the JPEG format: the upper - * left corner of the selected region must fall on an iMCU boundary. If this - * does not hold for the given crop parameters, we silently move the upper left - * corner up and/or left to make it so, simultaneously increasing the region - * dimensions to keep the lower right crop corner unchanged. (Thus, the + * flip transforms, lossless crop is restricted by the current JPEG format: the + * upper left corner of the selected region must fall on an iMCU boundary. If + * this does not hold for the given crop parameters, we silently move the upper + * left corner up and/or left to make it so, simultaneously increasing the + * region dimensions to keep the lower right crop corner unchanged. (Thus, the * output image covers at least the requested region, but may cover more.) * The adjustment of the region dimensions may be optionally disabled. * + * A complementary lossless-wipe option is provided to discard (gray out) data + * inside a given image region while losslessly preserving what is outside. + * * We also provide a lossless-resize option, which is kind of a lossless-crop * operation in the DCT coefficient block domain - it discards higher-order * coefficients and losslessly preserves lower-order coefficients of a @@ -102,7 +105,8 @@ typedef enum { JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */ JXFORM_ROT_90, /* 90-degree clockwise rotation */ JXFORM_ROT_180, /* 180-degree rotation */ - JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */ + JXFORM_ROT_270, /* 270-degree clockwise (or 90 ccw) */ + JXFORM_WIPE /* wipe */ } JXFORM_CODE; /* @@ -130,7 +134,7 @@ typedef struct { boolean perfect; /* if TRUE, fail if partial MCUs are requested */ boolean trim; /* if TRUE, trim partial MCUs as needed */ boolean force_grayscale; /* if TRUE, convert color image to grayscale */ - boolean crop; /* if TRUE, crop source image */ + boolean crop; /* if TRUE, crop or wipe source image */ /* Crop parameters: application need not set these unless crop is TRUE. * These can be filled in by jtransform_parse_crop_spec(). @@ -151,6 +155,8 @@ typedef struct { JDIMENSION output_height; JDIMENSION x_crop_offset; /* destination crop offsets measured in iMCUs */ JDIMENSION y_crop_offset; + JDIMENSION drop_width; /* drop/wipe dimensions measured in iMCUs */ + JDIMENSION drop_height; int iMCU_sample_width; /* destination iMCU size */ int iMCU_sample_height; } jpeg_transform_info; diff --git a/reactos/media/doc/3rd Party Files.txt b/reactos/media/doc/3rd Party Files.txt index 8905398bf9e..80fa7795c3c 100644 --- a/reactos/media/doc/3rd Party Files.txt +++ b/reactos/media/doc/3rd Party Files.txt @@ -65,3 +65,7 @@ Website: http://stlport.sourceforge.net/ Title: win-iconv Used Version: r44 Website: https://code.google.com/p/win-iconv/ + +Title: libjpeg +Used Version: 9a +Website: http://www.ijg.org/ From 9f835ff3ffb570de4d0a823858b4fd2af50bc14b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 17 May 2014 18:35:39 +0000 Subject: [PATCH 42/81] [NTDLL_APITEST] Add more tests for NtMapViewOfSection. Fix some tests, so that everything works on windows 2003. svn path=/trunk/; revision=63333 --- rostests/apitests/ntdll/NtMapViewOfSection.c | 663 +++++++++++++++++-- 1 file changed, 613 insertions(+), 50 deletions(-) diff --git a/rostests/apitests/ntdll/NtMapViewOfSection.c b/rostests/apitests/ntdll/NtMapViewOfSection.c index f347fa93a92..e9fc4eed506 100644 --- a/rostests/apitests/ntdll/NtMapViewOfSection.c +++ b/rostests/apitests/ntdll/NtMapViewOfSection.c @@ -25,10 +25,11 @@ Test_PageFileSection(void) NTSTATUS Status; HANDLE SectionHandle; LARGE_INTEGER MaximumSize, SectionOffset; - PVOID BaseAddress; + PVOID BaseAddress, BaseAddress2; SIZE_T ViewSize; + ULONG OldProtect; - /* Create a page file backed section */ + /* Create a page file backed section with SEC_COMMIT */ MaximumSize.QuadPart = 0x20000; Status = NtCreateSection(&SectionHandle, SECTION_ALL_ACCESS, @@ -37,7 +38,7 @@ Test_PageFileSection(void) PAGE_READWRITE, SEC_COMMIT, NULL); - ok(NT_SUCCESS(Status), "NtCreateSection failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); if (!NT_SUCCESS(Status)) return; @@ -55,8 +56,7 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok(Status == STATUS_MAPPED_ALIGNMENT, - "NtMapViewOfSection returned wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_MAPPED_ALIGNMENT); /* Try to map a page with execute rights */ BaseAddress = (PVOID)0x30000000; @@ -72,10 +72,25 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_EXECUTE_READWRITE); - ok(Status == STATUS_SECTION_PROTECTION, - "NtMapViewOfSection returned wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SECTION_PROTECTION); - /* Map 2 pages, not comitting them */ + /* Try to map 2 pages with MEM_COMMIT */ + BaseAddress = (PVOID)0x30000000; + SectionOffset.QuadPart = 0; + ViewSize = 0x2000; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + PAGE_SIZE, + &SectionOffset, + &ViewSize, + ViewShare, + MEM_COMMIT, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); + + /* Map 2 pages, without MEM_COMMIT */ BaseAddress = (PVOID)0x30000000; SectionOffset.QuadPart = 0; ViewSize = 0x2000; @@ -89,9 +104,18 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); - if (!NT_SUCCESS(Status)) - return; + ok_ntstatus(Status, STATUS_SUCCESS); + + /* We must be able to access the memory */ + _SEH2_TRY + { + *(PULONG)BaseAddress = 1; + } + _SEH2_EXCEPT(1) + { + ok(FALSE, "Got an exception\n"); + } + _SEH2_END; /* Commit a page in the section */ BaseAddress = (PVOID)0x30000000; @@ -102,12 +126,15 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Try to decommit a page in the section */ Status = NtFreeVirtualMemory(NtCurrentProcess(), &BaseAddress, &ViewSize, MEM_DECOMMIT); - ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, "NtFreeVirtualMemory returned wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); + /* Try to commit a range larger than the section */ BaseAddress = (PVOID)0x30000000; ViewSize = 0x3000; @@ -117,8 +144,7 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(Status == STATUS_CONFLICTING_ADDRESSES, - "NtAllocateVirtualMemory failed with wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); /* Try to commit a page after the section */ BaseAddress = (PVOID)0x30002000; @@ -129,7 +155,7 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(!NT_SUCCESS(Status), "NtAllocateVirtualMemory Should fail\n"); + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); /* Try to allocate a page after the section */ BaseAddress = (PVOID)0x30002000; @@ -140,7 +166,7 @@ Test_PageFileSection(void) &ViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); - ok(!NT_SUCCESS(Status), "NtAllocateVirtualMemory should fail\n"); + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); /* Need to go to next 64k boundary */ BaseAddress = (PVOID)0x30010000; @@ -151,7 +177,7 @@ Test_PageFileSection(void) &ViewSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); if (!NT_SUCCESS(Status)) return; @@ -164,15 +190,14 @@ Test_PageFileSection(void) MEM_RELEASE); ok(NT_SUCCESS(Status), "NtFreeVirtualMemory failed with Status %lx\n", Status); - /* Free the section mapping */ + /* Try to release the section mapping with NtFreeVirtualMemory */ BaseAddress = (PVOID)0x30000000; ViewSize = 0x1000; Status = NtFreeVirtualMemory(NtCurrentProcess(), &BaseAddress, &ViewSize, MEM_RELEASE); - ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, - "NtFreeVirtualMemory failed with wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); /* Commit a page in the section */ BaseAddress = (PVOID)0x30001000; @@ -183,7 +208,7 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); /* Try to decommit the page */ BaseAddress = (PVOID)0x30001000; @@ -192,8 +217,7 @@ Test_PageFileSection(void) &BaseAddress, &ViewSize, MEM_DECOMMIT); - ok(Status == STATUS_UNABLE_TO_DELETE_SECTION, - "NtFreeVirtualMemory failed with wrong Status %lx\n", Status); + ok_ntstatus(Status, STATUS_UNABLE_TO_DELETE_SECTION); BaseAddress = UlongToPtr(0x40000000); SectionOffset.QuadPart = 0; @@ -208,7 +232,7 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); if (!NT_SUCCESS(Status)) return; @@ -227,9 +251,7 @@ Test_PageFileSection(void) ViewShare, 0, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtMapViewOfSection failed with Status %lx\n", Status); - if (!NT_SUCCESS(Status)) - return; + ok_ntstatus(Status, STATUS_SUCCESS); ok(BaseAddress == (PVOID)0x40080000, "Invalid BaseAddress: %p", BaseAddress); @@ -241,9 +263,384 @@ Test_PageFileSection(void) &ViewSize, MEM_COMMIT, PAGE_READWRITE); - ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed with Status %lx\n", Status); - if (!NT_SUCCESS(Status)) - return; + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Close the mapping */ + NtUnmapViewOfSection(NtCurrentProcess(), BaseAddress); + NtClose(SectionHandle); + + /* Create a page file backed section, but only reserved */ + MaximumSize.QuadPart = 0x20000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_RESERVE, + NULL); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Try to map 1 page, passing MEM_RESERVE */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = PAGE_SIZE; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + PAGE_SIZE, + &SectionOffset, + &ViewSize, + ViewShare, + MEM_RESERVE, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); + + /* Try to map 1 page using MEM_COMMIT */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = PAGE_SIZE; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + PAGE_SIZE, + &SectionOffset, + &ViewSize, + ViewShare, + MEM_COMMIT, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_INVALID_PARAMETER_9); + + /* Map 2 pages, but commit 1 */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = 2 * PAGE_SIZE; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + PAGE_SIZE, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* We must be able to access the 1st page */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + *(PUCHAR)BaseAddress = 1; + } + _SEH2_EXCEPT(1) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_SUCCESS); + + /* We must not be able to access the 2nd page */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + *((PUCHAR)BaseAddress + PAGE_SIZE) = 1; + } + _SEH2_EXCEPT(1) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_ACCESS_VIOLATION); + + /* Map the 2 pages again into a different memory location */ + BaseAddress2 = NULL; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress2, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Commit a the 2nd page in the 2nd memory location */ + BaseAddress2 = (PUCHAR)BaseAddress2 + PAGE_SIZE; + ViewSize = PAGE_SIZE; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &BaseAddress2, + 0, + &ViewSize, + MEM_COMMIT, + PAGE_READONLY); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Try to commit again (the already committed page) */ + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &BaseAddress2, + 0, + &ViewSize, + MEM_COMMIT, + PAGE_READONLY); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* We must be able to access the memory in the 2nd page of the 1st memory location */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + *((PUCHAR)BaseAddress + PAGE_SIZE) = 2; + } + _SEH2_EXCEPT(1) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_SUCCESS); + + ok(*(PULONG)BaseAddress2 == 2, "Value in memory was wrong"); + + /* Close the mapping */ + NtUnmapViewOfSection(NtCurrentProcess(), BaseAddress); + NtUnmapViewOfSection(NtCurrentProcess(), (PUCHAR)BaseAddress2 - PAGE_SIZE); + NtClose(SectionHandle); + + /* Try to create a 512 GB page file backed section with committed pages */ + MaximumSize.QuadPart = 0x8000000000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_COMMIT, + NULL); + ok_ntstatus(Status, STATUS_COMMITMENT_LIMIT); + + /* Try to create a huge page file backed section with PAGE_NOACCESS protection */ + MaximumSize.QuadPart = 0x8000000000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_NOACCESS, + SEC_COMMIT, + NULL); + ok_ntstatus(Status, STATUS_INVALID_PAGE_PROTECTION); + + /* Try to create a very huge page file backed section, but only reserved */ + MaximumSize.QuadPart = 0x80000000000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_RESERVE, + NULL); +#ifdef _WIN64 + ok_ntstatus(Status, STATUS_INSUFFICIENT_RESOURCES); +#else + /* WoW64 returns STATUS_INSUFFICIENT_RESOURCES */ + ok((Status == STATUS_INSUFFICIENT_RESOURCES) || (Status == STATUS_SECTION_TOO_BIG), + "got wrong Status: 0x%lx", Status); +#endif + + /* Try to create a even huger page file backed section, but only reserved */ + MaximumSize.QuadPart = 0x800000000000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_RESERVE, + NULL); + ok_ntstatus(Status, STATUS_SECTION_TOO_BIG); + + /* Create a 8 GB page file backed section, but only reserved */ + MaximumSize.QuadPart = 0x200000000; + Status = NtCreateSection(&SectionHandle, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_RESERVE, + NULL); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Pass a too large region size */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = MAXULONG_PTR; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); +#ifdef _WIN64 + ok_ntstatus(Status, STATUS_INVALID_PARAMETER_3); +#else + /* WoW64 returns STATUS_INVALID_PARAMETER_4 */ + ok((Status == STATUS_INVALID_PARAMETER_4) || (Status == STATUS_INVALID_PARAMETER_3), + "got wrong Status: 0x%lx", Status); +#endif + + /* Pass 0 region size */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = 0; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); +#ifdef _WIN64 + ok_ntstatus(Status, STATUS_SUCCESS); + ok(ViewSize == 0x200000000, "wrong ViewSize: 0x%Ix\n", ViewSize); +#else + /* WoW64 returns STATUS_NO_MEMORY */ + ok((Status == STATUS_NO_MEMORY) || (Status == STATUS_INVALID_VIEW_SIZE), + "got wrong Status: 0x%lx", Status); + ok(ViewSize == 0, "wrong ViewSize: 0x%Ix\n", ViewSize); +#endif + + /* Map with PAGE_NOACCESS */ + BaseAddress = NULL; + SectionOffset.QuadPart = 0; + ViewSize = 0x20000000; + Status = NtMapViewOfSection(SectionHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_NOACCESS); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Try to change protection to read/write */ + ViewSize = 0x1000; + OldProtect = -1; + BaseAddress2 = BaseAddress; + Status = NtProtectVirtualMemory(NtCurrentProcess(), &BaseAddress2, &ViewSize, PAGE_READWRITE, &OldProtect); + ok_ntstatus(Status, STATUS_SECTION_PROTECTION); + // Windows 2003 returns bogus + //ok(OldProtect == PAGE_READWRITE, "Wrong protection returned: %u\n", OldProtect); + + /* Test read access */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + (void)(*(volatile char*)BaseAddress2); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_ACCESS_VIOLATION); + + /* Try to change protection to read/write */ + ViewSize = 0x1000; + OldProtect = -1; + BaseAddress2 = BaseAddress; + Status = NtProtectVirtualMemory(NtCurrentProcess(), &BaseAddress2, &ViewSize, PAGE_READWRITE, &OldProtect); + ok_ntstatus(Status, STATUS_SECTION_PROTECTION); +#ifdef _WIN64 + ok(OldProtect == 0, "Wrong protection returned: 0x%lx\n", OldProtect); +#else + // Windows 2003 returns bogus +#endif + + /* Try to change protection to readonly */ + ViewSize = 0x1000; + OldProtect = -1; + BaseAddress2 = BaseAddress; + Status = NtProtectVirtualMemory(NtCurrentProcess(), &BaseAddress2, &ViewSize, PAGE_READONLY, &OldProtect); + ok_ntstatus(Status, STATUS_SECTION_PROTECTION); +#ifdef _WIN64 + //ok(OldProtect == 0, "Wrong protection returned: 0x%lx\n", OldProtect); +#else + // Windows 2003 returns bogus +#endif + + /* Commit a page */ + ViewSize = 0x1000; + BaseAddress2 = BaseAddress; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), &BaseAddress2, 0, &ViewSize, MEM_COMMIT, PAGE_READONLY); + ok_ntstatus(Status, STATUS_SUCCESS); + ok(BaseAddress2 == BaseAddress, "Invalid base address: %p\n", BaseAddress2); + + /* Commit the page again */ + ViewSize = 0x1000; + BaseAddress2 = BaseAddress; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), &BaseAddress2, 0, &ViewSize, MEM_COMMIT, PAGE_READONLY); + ok_ntstatus(Status, STATUS_SUCCESS); + ok(BaseAddress2 == BaseAddress, "Invalid base address: %p\n", BaseAddress2); + + /* Test read access */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + (void)(*(volatile char*)BaseAddress2); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Test write access */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + *(char*)BaseAddress2 = 1; + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_ACCESS_VIOLATION); + + /* Update protection to PAGE_READWRITE */ + ViewSize = 0x1000; + BaseAddress2 = BaseAddress; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), &BaseAddress2, 0, &ViewSize, MEM_COMMIT, PAGE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Test write access */ + Status = STATUS_SUCCESS; + _SEH2_TRY + { + *(char*)BaseAddress2 = 1; + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Update protection to PAGE_EXECUTE_READWRITE (1 page) */ + ViewSize = 0x1000; + BaseAddress2 = BaseAddress; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), &BaseAddress2, 0, &ViewSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); } @@ -279,7 +676,7 @@ Test_ImageSection(void) &IoStatusBlock, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT); - ok(Status == STATUS_SUCCESS, "NtOpenFile failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); /* Create a data section with write access */ Status = NtCreateSection(&DataSectionHandle, @@ -289,9 +686,9 @@ Test_ImageSection(void) PAGE_READWRITE, // SectionPageProtection SEC_COMMIT, // AllocationAttributes FileHandle); - ok(Status == STATUS_SUCCESS, "NtCreateSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); - /* Map the data section */ + /* Map the data section as flat mapping */ DataBase = NULL; ViewSize = 0; Status = NtMapViewOfSection(DataSectionHandle, @@ -304,7 +701,8 @@ Test_ImageSection(void) ViewShare, 0, PAGE_READWRITE); - ok(Status == STATUS_SUCCESS, "NtMapViewOfSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); + //ok(ViewSize == 0x3f95cc48, "ViewSize wrong: 0x%lx\n"); /* Check the original data */ ok(*(ULONG*)DataBase == 0x00905a4d, "Header not ok\n"); @@ -326,7 +724,7 @@ Test_ImageSection(void) PAGE_READWRITE, // SectionPageProtection SEC_IMAGE, // AllocationAttributes FileHandle); - ok(Status == STATUS_INVALID_IMAGE_NOT_MZ, "NtCreateSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_INVALID_IMAGE_NOT_MZ); /* Restore the original header */ *(ULONG*)DataBase = 0x00905a4d; @@ -343,7 +741,7 @@ Test_ImageSection(void) PAGE_READWRITE, // SectionPageProtection SEC_IMAGE, // AllocationAttributes FileHandle); - ok(Status == STATUS_SUCCESS, "NtCreateSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); /* Map the image section */ ImageBase = NULL; @@ -351,17 +749,17 @@ Test_ImageSection(void) Status = NtMapViewOfSection(ImageSectionHandle, NtCurrentProcess(), &ImageBase, - 0, - 0, - NULL, + 0, // ZeroBits + 0, // CommitSize + NULL, // SectionOffset &ViewSize, ViewShare, - 0, + 0, // AllocationType PAGE_READONLY); #ifdef _M_IX86 - ok(Status == STATUS_SUCCESS, "NtMapViewOfSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_IMAGE_NOT_AT_BASE); #else - ok(Status == STATUS_IMAGE_MACHINE_TYPE_MISMATCH, "NtMapViewOfSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_IMAGE_MACHINE_TYPE_MISMATCH); #endif /* Check the header */ @@ -390,7 +788,7 @@ Test_ImageSection(void) &DataBase, &ViewSize, &IoStatusBlock); - ok(Status == STATUS_SUCCESS, "NtFlushVirtualMemory failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); /* Check the data again */ ok(*(ULONG*)ImageBase == 0x00905a4d, "Data should not be synced!\n"); @@ -414,7 +812,7 @@ Test_ImageSection(void) PAGE_READWRITE, // SectionPageProtection SEC_IMAGE, // AllocationAttributes FileHandle); - ok(Status == STATUS_SUCCESS, "NtCreateSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_SUCCESS); /* Map the image section again */ ImageBase = NULL; @@ -430,14 +828,15 @@ Test_ImageSection(void) 0, PAGE_READONLY); #ifdef _M_IX86 - ok(Status == STATUS_SUCCESS, "NtMapViewOfSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_IMAGE_NOT_AT_BASE); #else - ok(Status == STATUS_IMAGE_MACHINE_TYPE_MISMATCH, "NtMapViewOfSection failed, Status 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_IMAGE_MACHINE_TYPE_MISMATCH); #endif + // This one doesn't always work, needs investigation /* Check the .data section again */ - ok(*(ULONG*)((PUCHAR)ImageBase + 0x80000) == 0xf00dada, - "Data should be synced: 0x%lx!\n", *(ULONG*)((PUCHAR)ImageBase + 0x80000)); + //ok(*(ULONG*)((PUCHAR)ImageBase + 0x80000) == 0xf00dada, + // "Data should be synced: 0x%lx!\n", *(ULONG*)((PUCHAR)ImageBase + 0x80000)); /* Restore the original data */ *(ULONG*)((PUCHAR)DataBase + 0x800) = 0x12345678; @@ -451,7 +850,7 @@ Test_ImageSection(void) DataBase = (PUCHAR)ImageBase + 0x20000; ViewSize = 0x1000; Status = NtAllocateVirtualMemory(NtCurrentProcess(), &DataBase, 0, &ViewSize, MEM_RESERVE, PAGE_NOACCESS); - ok(Status == STATUS_CONFLICTING_ADDRESSES, "Wrong Status: 0x%lx\n", Status); + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); /* Cleanup */ NtClose(FileHandle); @@ -459,10 +858,174 @@ Test_ImageSection(void) NtUnmapViewOfSection(NtCurrentProcess(), ImageBase); } +void +Test_ImageSection2(void) +{ + UNICODE_STRING FileName; + NTSTATUS Status; + OBJECT_ATTRIBUTES FileObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + HANDLE FileHandle, ImageSectionHandle; + PVOID ImageBase, BaseAddress; + SIZE_T ViewSize; + LARGE_INTEGER MaximumSize, SectionOffset; + + if (!RtlDosPathNameToNtPathName_U(L"testdata\\nvoglv32.dll", + &FileName, + NULL, + NULL)) + { + ok(0, "RtlDosPathNameToNtPathName_U failed\n"); + return; + } + + InitializeObjectAttributes(&FileObjectAttributes, + &FileName, + 0, + NULL, + NULL); + + Status = NtOpenFile(&FileHandle, + GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE, + &FileObjectAttributes, + &IoStatusBlock, + FILE_SHARE_READ, + FILE_SYNCHRONOUS_IO_NONALERT); + ok_ntstatus(Status, STATUS_SUCCESS); + printf("Opened file with handle %p\n", FileHandle); + + /* Create a data section with write access */ + MaximumSize.QuadPart = 0x20000; + Status = NtCreateSection(&ImageSectionHandle, + SECTION_ALL_ACCESS, // DesiredAccess + NULL, // ObjectAttributes + &MaximumSize, // MaximumSize + PAGE_READWRITE, // SectionPageProtection + SEC_IMAGE, // AllocationAttributes + FileHandle); + ok_ntstatus(Status, STATUS_SUCCESS); + + printf("Created image section with handle %p\n", ImageSectionHandle); + //system("PAUSE"); + + /* Map the image section */ + ImageBase = NULL; + ViewSize = 0x0000; + SectionOffset.QuadPart = 0x00000; + Status = NtMapViewOfSection(ImageSectionHandle, + NtCurrentProcess(), + &ImageBase, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); + ok_ntstatus(Status, STATUS_SUCCESS); + + printf("Mapped image section at %p, value in text section: %lx\n", + ImageBase, *((ULONG*)((PCHAR)ImageBase + 0x1196))); + system("PAUSE"); + + /* Try to allocate a page after the section */ + BaseAddress = (PUCHAR)ImageBase + 0x10000; + ViewSize = 0x1000; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &BaseAddress, + 0, + &ViewSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE); + printf("allocation status: %lx\n", Status); + system("PAUSE"); + +} + +// doesn't work with WoW64! +void +Test_BasedSection(void) +{ + NTSTATUS Status; + HANDLE SectionHandle1, SectionHandle2; + LARGE_INTEGER MaximumSize, SectionOffset; + PVOID BaseAddress1, BaseAddress2; + SIZE_T ViewSize; + + /* Create a based section with SEC_COMMIT */ + MaximumSize.QuadPart = 0x1000; + Status = NtCreateSection(&SectionHandle1, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_COMMIT | SEC_BASED, + NULL); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Map the 1st section */ + BaseAddress1 = NULL; + SectionOffset.QuadPart = 0; + ViewSize = 0; + Status = NtMapViewOfSection(SectionHandle1, + NtCurrentProcess(), + &BaseAddress1, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); +#if 0 // WOW64? + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); +#else + ok_ntstatus(Status, STATUS_SUCCESS); +#endif + + /* Create a 2nd based section with SEC_COMMIT */ + MaximumSize.QuadPart = 0x1000; + Status = NtCreateSection(&SectionHandle2, + SECTION_ALL_ACCESS, + NULL, + &MaximumSize, + PAGE_READWRITE, + SEC_COMMIT | SEC_BASED, + NULL); + ok_ntstatus(Status, STATUS_SUCCESS);// + + /* Map the 2nd section */ + BaseAddress2 = NULL; + SectionOffset.QuadPart = 0; + ViewSize = 0; + Status = NtMapViewOfSection(SectionHandle2, + NtCurrentProcess(), + &BaseAddress2, + 0, + 0, + &SectionOffset, + &ViewSize, + ViewShare, + 0, + PAGE_READWRITE); +#if 0 // WOW64? + ok_ntstatus(Status, STATUS_CONFLICTING_ADDRESSES); +#else + ok_ntstatus(Status, STATUS_SUCCESS); +#endif + + ok_ntstatus(Status, STATUS_SUCCESS); + ok((ULONG_PTR)BaseAddress2 < (ULONG_PTR)BaseAddress1, + "Invalid addresses: BaseAddress1=%p, BaseAddress2=%p\n", BaseAddress1, BaseAddress2); + ok(((ULONG_PTR)BaseAddress1 - (ULONG_PTR)BaseAddress2) == 0x10000, + "Invalid addresses: BaseAddress1=%p, BaseAddress2=%p\n", BaseAddress1, BaseAddress2); + +} START_TEST(NtMapViewOfSection) { Test_PageFileSection(); Test_ImageSection(); + Test_BasedSection(); } From aa3d15ae6ce61f80c7dc7258b21d8a2a87195b51 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 17 May 2014 18:36:22 +0000 Subject: [PATCH 43/81] [TESTDATA] Fix test.dll svn path=/trunk/; revision=63334 --- rostests/apitests/testdata/test.dll | Bin 3072 -> 8192 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rostests/apitests/testdata/test.dll b/rostests/apitests/testdata/test.dll index a95851e64d1cc1920758ab7d290de5dd48239ff5..f51e7d2949c9e4c9188b744c37863a2d31ef6fce 100644 GIT binary patch delta 29 gcmZpWXmD7-!BP=sBD7hMkR0RR91 delta 10 RcmZp0XpmUIu~>nF1ppG-0?+^e From f88752ba0ea041d87e81c525eab0d0860feb7997 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 May 2014 18:52:24 +0000 Subject: [PATCH 44/81] [FREETYPE] * Update to 2.5.3. Based on the sync done by Ivan Di Francesco. CORE-8033 svn path=/trunk/; revision=63335 --- reactos/lib/3rdparty/freetype/ChangeLog | 7396 +++-------------- reactos/lib/3rdparty/freetype/README | 12 +- .../lib/3rdparty/freetype/devel/ftoption.h | 13 + .../freetype/include/config/ftconfig.h | 4 +- .../freetype/include/config/ftoption.h | 13 + .../lib/3rdparty/freetype/include/freetype.h | 44 +- .../lib/3rdparty/freetype/include/ftautoh.h | 47 +- reactos/lib/3rdparty/freetype/include/ftbdf.h | 5 +- .../3rdparty/freetype/include/ftchapters.h | 1 + .../lib/3rdparty/freetype/include/ftoutln.h | 5 +- .../freetype/include/internal/ftrfork.h | 12 +- .../freetype/include/internal/fttrace.h | 4 +- .../3rdparty/freetype/src/autofit/afblue.c | 2 +- .../3rdparty/freetype/src/autofit/afblue.cin | 2 +- .../3rdparty/freetype/src/autofit/afblue.h | 18 +- .../3rdparty/freetype/src/autofit/afblue.hin | 2 +- .../lib/3rdparty/freetype/src/autofit/afcjk.c | 171 +- .../lib/3rdparty/freetype/src/autofit/afcjk.h | 13 +- .../3rdparty/freetype/src/autofit/afcover.h | 105 + .../3rdparty/freetype/src/autofit/afdummy.c | 28 +- .../3rdparty/freetype/src/autofit/afdummy.h | 6 +- .../3rdparty/freetype/src/autofit/afglobal.c | 297 +- .../3rdparty/freetype/src/autofit/afglobal.h | 66 +- .../3rdparty/freetype/src/autofit/afhints.c | 29 +- .../3rdparty/freetype/src/autofit/afhints.h | 42 +- .../3rdparty/freetype/src/autofit/afindic.c | 55 +- .../3rdparty/freetype/src/autofit/afindic.h | 8 +- .../3rdparty/freetype/src/autofit/aflatin.c | 233 +- .../3rdparty/freetype/src/autofit/aflatin.h | 26 +- .../3rdparty/freetype/src/autofit/aflatin2.c | 67 +- .../3rdparty/freetype/src/autofit/aflatin2.h | 14 +- .../3rdparty/freetype/src/autofit/afloader.c | 47 +- .../3rdparty/freetype/src/autofit/afloader.h | 4 +- .../3rdparty/freetype/src/autofit/afmodule.c | 71 +- .../3rdparty/freetype/src/autofit/afmodule.h | 5 +- .../lib/3rdparty/freetype/src/autofit/afpic.c | 28 +- .../lib/3rdparty/freetype/src/autofit/afpic.h | 16 +- .../3rdparty/freetype/src/autofit/afranges.c | 208 + .../3rdparty/freetype/src/autofit/afranges.h | 41 + .../3rdparty/freetype/src/autofit/afscript.h | 125 +- .../3rdparty/freetype/src/autofit/afstyles.h | 150 + .../3rdparty/freetype/src/autofit/aftypes.h | 310 +- .../3rdparty/freetype/src/autofit/afwrtsys.h | 3 +- .../3rdparty/freetype/src/autofit/autofit.c | 4 + .../3rdparty/freetype/src/autofit/hbshim.c | 531 ++ .../3rdparty/freetype/src/autofit/hbshim.h | 56 + .../3rdparty/freetype/src/autofit/module.mk | 23 - .../3rdparty/freetype/src/autofit/rules.mk | 82 - .../lib/3rdparty/freetype/src/base/basepic.c | 6 +- .../lib/3rdparty/freetype/src/base/ftbitmap.c | 4 +- .../lib/3rdparty/freetype/src/base/ftcalc.c | 4 +- .../lib/3rdparty/freetype/src/base/ftobjs.c | 22 +- .../lib/3rdparty/freetype/src/base/ftoutln.c | 4 +- .../lib/3rdparty/freetype/src/base/ftrfork.c | 26 +- .../lib/3rdparty/freetype/src/base/rules.mk | 99 - .../lib/3rdparty/freetype/src/bdf/bdfdrivr.c | 11 +- .../lib/3rdparty/freetype/src/bdf/bdflib.c | 58 +- .../lib/3rdparty/freetype/src/bdf/module.mk | 34 - .../lib/3rdparty/freetype/src/bdf/rules.mk | 81 - .../lib/3rdparty/freetype/src/bzip2/rules.mk | 63 - .../lib/3rdparty/freetype/src/cache/rules.mk | 80 - .../lib/3rdparty/freetype/src/cff/cf2blues.c | 11 +- .../lib/3rdparty/freetype/src/cff/cf2font.c | 21 +- reactos/lib/3rdparty/freetype/src/cff/cf2ft.c | 39 +- .../lib/3rdparty/freetype/src/cff/cf2hints.c | 4 +- .../lib/3rdparty/freetype/src/cff/cffload.c | 15 +- .../lib/3rdparty/freetype/src/cff/cffobjs.c | 2 +- .../lib/3rdparty/freetype/src/cff/cffparse.c | 6 +- .../lib/3rdparty/freetype/src/cff/module.mk | 23 - .../lib/3rdparty/freetype/src/cff/rules.mk | 86 - .../lib/3rdparty/freetype/src/cid/cidload.c | 19 +- .../lib/3rdparty/freetype/src/cid/cidobjs.c | 7 +- .../lib/3rdparty/freetype/src/cid/cidparse.c | 4 +- .../lib/3rdparty/freetype/src/cid/cidparse.h | 22 +- .../lib/3rdparty/freetype/src/cid/module.mk | 23 - .../lib/3rdparty/freetype/src/cid/rules.mk | 70 - .../3rdparty/freetype/src/gxvalid/module.mk | 23 - .../3rdparty/freetype/src/gxvalid/rules.mk | 94 - .../lib/3rdparty/freetype/src/gzip/rules.mk | 78 - .../lib/3rdparty/freetype/src/lzw/rules.mk | 70 - .../3rdparty/freetype/src/otvalid/module.mk | 23 - .../3rdparty/freetype/src/otvalid/rules.mk | 78 - .../lib/3rdparty/freetype/src/pcf/module.mk | 34 - .../lib/3rdparty/freetype/src/pcf/pcfread.c | 7 +- .../lib/3rdparty/freetype/src/pcf/rules.mk | 79 - .../lib/3rdparty/freetype/src/pfr/module.mk | 23 - .../lib/3rdparty/freetype/src/pfr/pfrload.c | 3 +- .../lib/3rdparty/freetype/src/pfr/pfrobjs.c | 3 +- .../lib/3rdparty/freetype/src/pfr/rules.mk | 73 - .../lib/3rdparty/freetype/src/psaux/module.mk | 23 - .../lib/3rdparty/freetype/src/psaux/psobjs.c | 8 +- .../lib/3rdparty/freetype/src/psaux/rules.mk | 73 - .../3rdparty/freetype/src/pshinter/module.mk | 23 - .../3rdparty/freetype/src/pshinter/pshalgo.c | 5 +- .../3rdparty/freetype/src/pshinter/rules.mk | 73 - .../3rdparty/freetype/src/psnames/module.mk | 23 - .../3rdparty/freetype/src/psnames/rules.mk | 71 - .../3rdparty/freetype/src/raster/ftraster.c | 4 +- .../3rdparty/freetype/src/raster/module.mk | 23 - .../lib/3rdparty/freetype/src/raster/rules.mk | 70 - .../lib/3rdparty/freetype/src/sfnt/module.mk | 23 - .../lib/3rdparty/freetype/src/sfnt/rules.mk | 78 - .../lib/3rdparty/freetype/src/sfnt/sfdriver.c | 4 +- .../lib/3rdparty/freetype/src/sfnt/ttcmap.c | 65 +- .../lib/3rdparty/freetype/src/sfnt/ttsbit.c | 23 +- .../3rdparty/freetype/src/smooth/ftgrays.c | 3 +- .../3rdparty/freetype/src/smooth/module.mk | 27 - .../lib/3rdparty/freetype/src/smooth/rules.mk | 70 - .../lib/3rdparty/freetype/src/tools/afblue.pl | 23 +- .../3rdparty/freetype/src/truetype/module.mk | 23 - .../3rdparty/freetype/src/truetype/rules.mk | 74 - .../3rdparty/freetype/src/truetype/ttgload.c | 134 +- .../3rdparty/freetype/src/truetype/ttinterp.c | 38 +- .../3rdparty/freetype/src/truetype/ttinterp.h | 6 +- .../lib/3rdparty/freetype/src/type1/module.mk | 23 - .../lib/3rdparty/freetype/src/type1/rules.mk | 73 - .../lib/3rdparty/freetype/src/type1/t1gload.c | 4 +- .../lib/3rdparty/freetype/src/type1/t1load.c | 13 +- .../lib/3rdparty/freetype/src/type1/t1objs.c | 8 +- .../lib/3rdparty/freetype/src/type1/t1parse.c | 31 +- .../3rdparty/freetype/src/type42/module.mk | 23 - .../lib/3rdparty/freetype/src/type42/rules.mk | 70 - .../3rdparty/freetype/src/type42/t42objs.c | 6 +- .../3rdparty/freetype/src/type42/t42parse.c | 50 +- .../3rdparty/freetype/src/winfonts/module.mk | 23 - .../3rdparty/freetype/src/winfonts/rules.mk | 65 - .../3rdparty/freetype/src/winfonts/winfnt.c | 24 +- reactos/media/doc/3rd Party Files.txt | 2 +- 128 files changed, 3728 insertions(+), 9550 deletions(-) create mode 100644 reactos/lib/3rdparty/freetype/src/autofit/afcover.h create mode 100644 reactos/lib/3rdparty/freetype/src/autofit/afranges.c create mode 100644 reactos/lib/3rdparty/freetype/src/autofit/afranges.h create mode 100644 reactos/lib/3rdparty/freetype/src/autofit/afstyles.h create mode 100644 reactos/lib/3rdparty/freetype/src/autofit/hbshim.c create mode 100644 reactos/lib/3rdparty/freetype/src/autofit/hbshim.h delete mode 100644 reactos/lib/3rdparty/freetype/src/autofit/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/autofit/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/base/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/bdf/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/bdf/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/bzip2/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/cache/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/cff/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/cff/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/cid/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/cid/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/gxvalid/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/gxvalid/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/gzip/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/lzw/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/otvalid/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/otvalid/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/pcf/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/pcf/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/pfr/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/pfr/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/psaux/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/psaux/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/pshinter/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/pshinter/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/psnames/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/psnames/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/raster/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/raster/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/sfnt/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/sfnt/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/smooth/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/smooth/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/truetype/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/truetype/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/type1/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/type1/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/type42/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/type42/rules.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/winfonts/module.mk delete mode 100644 reactos/lib/3rdparty/freetype/src/winfonts/rules.mk diff --git a/reactos/lib/3rdparty/freetype/ChangeLog b/reactos/lib/3rdparty/freetype/ChangeLog index b67e4362a38..ea1eb4acbc2 100644 --- a/reactos/lib/3rdparty/freetype/ChangeLog +++ b/reactos/lib/3rdparty/freetype/ChangeLog @@ -1,3 +1,1048 @@ +2014-03-06 Werner Lemberg + + * Version 2.5.3 released. + ========================= + + + Tag sources with `VER-2-5-3'. + + * docs/VERSION.DLL: Update documentation and bump version number to + 2.5.3. + + * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj, + builds/windows/vc2005/index.html, + builds/windows/vc2008/freetype.vcproj, + builds/windows/vc2008/index.html, + builds/windows/vc2010/freetype.vcxproj, + builds/windows/vc2010/index.html, + builds/windows/visualc/freetype.dsp, + builds/windows/visualc/freetype.vcproj, + builds/windows/visualc/index.html, + builds/windows/visualce/freetype.dsp, + builds/windows/visualce/freetype.vcproj, + builds/windows/visualce/index.html, + builds/wince/vc2005-ce/freetype.vcproj, + builds/wince/vc2005-ce/index.html, + builds/wince/vc2008-ce/freetype.vcproj, + builds/wince/vc2008-ce/index.html: s/2.5.2/2.5.3/, s/252/253/. + + * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3. + + * builds/unix/configure.raw (version_info): Set to 17:2:11. + * CMakeLists.txt (VERSION_PATCH): Set to 3. + * docs/CHANGES: Updated. + +2014-03-06 Werner Lemberg + + Fixes for compilation with C++. + + * src/autofit/hbshim.c (scripts): Change type to `hb_script_t'. + (af_get_coverage): Updated. + (COVERAGE): Add cast. + +2014-03-06 Sean McBride + + Remove more clang analyzer warnings. + + * src/bdf/bdflib.c (_bdf_readstream), src/truetype/ttgload.c + (TT_Load_Glyph): Remove dead stores. + +2014-03-05 Werner Lemberg + + * builds/unix/configure.raw: Simplify. + +2014-03-05 suzuki toshiya + + Fix a bug in configure in library dependency setting + Reported in https://bugs.freedesktop.org/show_bug.cgi?id=75652. + + * builds/unix/configure.raw: Use `x"${xxx}" != xno' style. + +2014-03-04 Werner Lemberg + + Minor fix for `make devel'. + + * builds/freetype.mk (INCLUDE_FLAGS) [DEVEL_DIR]: Don't use + pkg-config for bzip2 since not all GNU/Linux distributions have + `bzip2.pc' (and the header file `bzlib.h' is located in /usr/include + normally). + +2014-03-04 Sean McBride + + Fix several clang static analyzer dead store warnings. + + * src/autofit/afhints.c (af_glyph_hints_reload, + af_glyph_hints_align_weak_points): Remove unnecessary assignments. + + * src/bdf/bdflib.c (bdf_font_load): Ditto. + + * src/pshinter/pshalgo.c (psh_glyph_compute_extrema, + psh_glyph_interpolate_other_points): Ditto. + + * src/type1/t1load.c (T1_Set_MM_Blend): Ditto. + +2014-03-03 Werner Lemberg + + Rewrite library option handling in `configure'. + + o Introduce `auto' value for `--with-XXX' library options; this is + now the default. + + o First use `pkg-config' for library detection, then fall back to + other tests. + + * builds/unix/configure.raw (--with-zlib, --with-bzip2, --with-png, + --with-harfbuzz): Rewrite. + Use new `xxx_reqpriv', `xxx_libpriv', and `xxx_libstaticconf' + variables to collect data for `freetype2.pc' and `freetype-config'. + (FT2_EXTRA_LIBS): Renamed to ... + (ft2_extra_libs): This since it gets no longer substituted. + (REQUIRES_PRIVATE, LIBS_PRIVATE, LIBS_CONFIG, LIBSSTATIC_CONFIG): + New output variables, replacing `XXX_PKG' and `LIBXXX'. + Add notice at the end of `configure' showing the library + configuration. + + * builds/unix/freetype-config.in (--static): New command line + option. + (libs): Updated. + (staticlibs): New variable, to be used if `--static' is given. + * builds/doc/freetype-config.1: Document `--static'. + + * builds/unix/freetype2.in, builds/unix/unix-def.in: Updated. + +2014-03-01 Werner Lemberg + + Avoid `long long' warnings with older gcc compilers. + Problem reported by Hin-Tak Leung . + + * builds/unix/configure.raw: Don't use gcc's `-pedantic' flag for + versions < 4.6. This is especially needed for Max OS X since this + OS runs a gcc variant (or emulation) based on version 4.2.1. + +2014-03-01 Werner Lemberg + + * docs/INSTALL.CROSS: Revised and updated. + +2014-03-01 Werner Lemberg + + Make `make clean' remove `freetype2.pc'. + + This is a generated file at build time, not configure time. + + * builds/unix/unix-def.in (DISTCLEAN): Move `freetype2.pc' to ... + (CLEAN): This variable. + +2014-03-01 Werner Lemberg + + Use pkg-config for detecting libpng and libbz2 also. + + * builds/unix/configure.raw (HAVE_PKG): New variable. + Search for libbz2 using `pkg-config'; s/BZ2/BZIP2/. + Search for libpng using `pkg-config'. + Fix definition of `LIBHARFBUZZ' variable. + * builds/unix/freetype-config.in ($libs): Updated. + * builds/unix/freetype2.in: Add `URL' field. + Update `Requires.private' and `Libs.private'. + * builds/unix/unix-def.in: Updated. + +2014-03-01 Werner Lemberg + + Add configure support for HarfBuzz. + + * builds/unix/pkg.m4: New file. + * builds/unix/configure.raw: Search for libharfbuzz using + `pkg-config'. + Add `--without-harfbuzz' option. + * builds/unix/freetype-config.in, builds/unix/freetype2.in, + builds/unix/unix-def.in (freetype-config, freetype2.pc): Handle + HarfBuzz. + + * docs/INSTALL.UNIX: Document interdependency of Freetype with + HarfBuzz. + +2014-02-28 Alexei Podtelezhnikov + + [cff] Math simplifications. + + * src/cf2blues.c (cf2_blues_init): Use `FT_MulDiv'. + * src/cf2ft.c (cf2_getScaleAndHintFlag): Use simple division. + +2014-02-28 Dave Arnold + + [cff] Fix Savannah bug #41697, part 2. + + * src/cff/cf2ft.c (cf2_initLocalRegionBuffer, + cf2_initGlobalRegionBuffer): It is possible for a charstring to call + a subroutine if no subroutines exist. This is an error but should + not trigger an assert. Split the assert to account for this. + +2014-02-28 Dave Arnold + + [cff] Fix Savannah bug #41697, part 1. + + * src/cff/cf2hints.c (cf2_hintmap_build): Return when `hintMask' is + invalid. In this case, it is not safe to use the length of + `hStemHintArray'; the exception has already been recorded in + `hintMask'. + +2014-02-26 Werner Lemberg + + [sfnt] Fix Savannah bug #41696. + + * src/sfnt/ttcmap.c (tt_cmap0_validate, tt_cmap2_validate, + tt_cmap4_validate, tt_cmap14_validate): Fix limit tests. + +2014-02-26 Werner Lemberg + + [winfnt] Fix Savannah bug #41694. + + * src/winfonts/winfnt.c (FNT_Load_Glyph): Check glyph offset. + +2014-02-26 Werner Lemberg + + [cff] Fix Savannah bug #41693. + + * src/cff/cffload.c (CFF_Load_FD_Select): Reject empty array. + +2014-02-26 Werner Lemberg + + [bdf] Fix Savannah bug #41692. + + bdflib puts data from the input stream into a buffer in chunks of + 1024 bytes. The data itself gets then parsed line by line, simply + increasing the current pointer into the buffer; if the search for + the final newline character exceeds the buffer size, more data gets + read. + + However, in case the current line's end is very near to the buffer + end, and the keyword to compare with is longer than the current + line's length, an out-of-bounds read might happen since `memcmp' + doesn't stop properly at the string end. + + * src/bdf/bdflib.c: s/ft_memcmp/ft_strncmp/ to make comparisons + stop at string ends. + +2014-02-17 suzuki toshiya + + [autofit] Fix `make multi' compilation. + + * src/autofit/hbshim.c: Include `afglobal.h' and `aftypes.h'. + +2014-02-19 Werner Lemberg + Simon Bünzli + + Fix Savannah bug #32902. + + Patch taken from + + https://code.google.com/p/sumatrapdf/source/browse/trunk/ext/_patches/freetype2.patch?spec=svn8620&r=8620#87 + + with slight modifications. + + * src/type1/t1parse.c (T1_Get_Private_Dict): Add heuristic test to + handle fonts that incorrectly use \r at the beginning of an eexec + block. + +2014-02-19 Simon Bünzli + + Fix Savannah bug #41590. + + * src/type1/t1load.c (parse_encoding): Protect against invalid + number. + +2014-02-12 Dave Arnold + + [cff] Optimize by using `FT_MulDiv'. + Suggested by Alexei. + + * src/cff/cf2font.c (cf2_computeDarkening): Do it. + +2014-02-12 Werner Lemberg + + Fix Savannah bug #41465. + + * builds/unix/unix-def.in (CLEAN): Add `freetype-config'. + (DISTCLEAN): Remove `freetype-config'. + +2014-02-08 Sean McBride + + Fix clang static analyzer and compiler warnings. + + * src/autofit/afhints.c (af_glyph_hints_align_weak_points), + src/autofit/afloader (af_loader_load_g) , + src/base/ftcalc.c (FT_MSB), src/base/ftoutln.c + (FT_Outline_Decompose), src/bdf/bdfdrivr.c (bdf_interpret_style), + src/cff/cffparse.c (cff_parse_integer), src/cid/cidparse.c + (cid_parser_new), src/pfr/pfrload.c (pfr_phy_font_load), + src/raster/ftraster.c (Decompose_Curve), src/sfnt/sfdriver.c + (sfnt_get_ps_name), src/sfnt/ttcmap.c (tt_cmap12_next, + tt_cmap13_next), src/smooth/ftgrays.c (gray_hline): Remove dead + code. + + * src/autofit/afmodule.c (af_property_get_face_globals, + af_property_set, af_property_get), src/base/ftbitmap.c + (ft_gray_for_premultiplied_srgb_bgra): Make functions static. + + * src/base/ftobjs.c (ft_remove_renderer): Protect against + library == NULL. + (ft_property_do): Make function static. + + * src/base/ftrfork.c: Include `ftbase.h'. + + * src/sfnt/ttsbit.c (tt_face_load_sbix_image) + [!FT_CONFIG_OPTION_USE_PNG], src/type1/t1gload.c + (T1_Compute_Max_Advance): Avoid compiler warning. + + * src/truetype/ttinterp.c (TT_New_Context): Reduce scope of + variable. + +2014-02-08 Werner Lemberg + + Fix Windows build directories. + + The build target is now `windows' instead of `win32'. + + Problem reported by Nickolas George . + + * builds/modules.mk: Don't use `win32' and `win16' (!) but + `windows'. + + * builds/windows/detect.mk, builds/windows/win32-def.mk: + s/win32/windows/. + +2014-02-08 Eugen Sawin + + Fix Savannah bug #41507. + + * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap) + [!FT_CONFIG_OPTION_USE_PNG] <17, 17, 19>: Fix error handling. + +2014-02-08 Dave Arnold + + [cff] Fix minor performance bug. + + * src/cff/cf2font.c (cf2_font_setup): Darkening amount and blue zone + calculations are now cached and not recomputed on each glyph. + +2014-02-05 Werner Lemberg + + Fix problems with perl 5.8.8 as distributed with current MinGW. + + * src/tools/afblue.pl: Work-around for Perl bug #63402. + (string_re): Avoid `possessive quantifiers', which have been + introduced in Perl version 5.10. + +2014-02-04 Werner Lemberg + + Fix compilation with MinGW. + + Right now, compilation out of the box with latest MinGW is broken + due to bugs in header files of mingwrt 4.0.3 in strict ANSI mode, + cf. + + https://sourceforge.net/p/mingw/bugs/2024/ + https://sourceforge.net/p/mingw/bugs/2046/ + + * builds/unix/configure.raw: Don't set `-ansi' flag for MinGW. + +2014-02-04 Werner Lemberg + + [autofit] Minor fix. + + * src/autofit/afcjk.c (af_cjk_metrics_init_widths), + src/autofit/aflatin.c (af_latin_metrics_init_widths): Fix handling + of alternative standard characters. + This also fixes a compilation warning in non-debug mode. + +2014-02-03 Werner Lemberg + + [cff] Fix Savannah bug #41363. + + * src/cff/cf2ft.c (cf2_checkTransform): Convert assertion into + parameter check. + (cf2_decoder_parse_charstrings): Call `cf2_checkTransform' only if + we are scaling the outline. + (cf2_getPpemY): Remove problematic assertion. + +2014-01-26 Werner Lemberg + + [autofit] Introduce two more slots for standard characters. + + This is useful for OpenType features like `c2sc' (caps to small + caps) that don't have lowercase letters by definition, or other + features that mainly operate on numerals. + + * src/autofit/afscript.h: Add more standard characters. + + * src/autofit/aftypes.h: Update use of `SCRIPT' macro. + (AF_ScriptClassRec): Add members to hold two more standard + characters. + (AF_DEFINE_SCRIPT_CLASS): Updated. + + * src/autofit/afglobal.c, src/autofit/afglobal.h, + * src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/hbshim.c: + Update use of `SCRIPT' macro. + + * src/autofit/afcjk.c (af_cjk_metrics_init_widths), + src/autofit/aflatin.c (af_latin_metrics_init_widths): Scan two more + standard characters. + +2014-01-24 Werner Lemberg + + Fix Savannah bug #41320. + + * src/autofit/aflatin.c (af_latin_metrics_init_blues) + : Avoid negative index of `last'. + +2014-01-23 Werner Lemberg + + Fix Savannah bug #41310. + + * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap) : + Don't check metrics, which this format doesn't have. + This is another correction to the commit from 2013-11-21. + +2014-01-23 Werner Lemberg + + Fix Savannah bug #41309. + + * src/type1/t1load.c (t1_parse_font_matrix): Properly handle result + of `T1_ToFixedArray'. + + * src/cid/cidload.c (cid_parse_font_matrix): Synchronize with + `t1_parse_font_matrix'. + + * src/type42/t42parse.c (t42_parse_font_matrix): Synchronize with + `t1_parse_font_matrix'. + (t42_parse_encoding): Synchronize with `t1_parse_encoding'. + + * src/psaux/psobjs.c (ps_parser_load_field) , + : Properly handle result of `ps_tofixedarray'. + +2014-01-22 Werner Lemberg + + * src/autofit/hbshim.c (af_get_coverage): Fix memory leaks. + +2014-01-16 Werner Lemberg + + [autofit] Improve tracing of style coverages. + + * include/internal/fttrace.h: Add `afglobal' for tracing style + coverages. + + * src/autofit/afglobal.c: Include FT_INTERNAL_DEBUG_H. + (FT_COMPONENT): Define. + (af_face_globals_compute_style_coverage): Trace `gstyles' array + data. + +2014-01-09 Werner Lemberg + + Fix Savannah bug #41158. + + * builds/unix/install.mk (install): Create man page directory. + +2014-01-08 Chongyu Zhu + + [arm] Fix Savannah bug #41138, part 2. + + * builds/unix/ftconfig.in (FT_MulFix_arm), include/config/ftconfig.h + (FT_MulFix_arm), src/truetype/ttinterp.c (TT_MulFix14_arm): Fix + preprocessor conditionals for `add.w'. + +2014-01-08 Werner Lemberg + + [autofit] Fix Savannah bug #41138, part 1. + + * src/tools/afblue.pl : Produce correct auxiliary + enumeration names for generated `#else'. + + * src/autofit/afblue.h: Regenerated. + +2014-01-06 Werner Lemberg + + Add manual page for `freetype-config'. + Contributed by Nis Martensen . + + * docs/freetype-config.1: New file. + + * builds/unix/unix-def.in (mandir): Define. + * builds/unix/install.mk (install, uninstall): Handle manpage. + +2014-01-05 Werner Lemberg + + [autofit] Minor fixes for `afblue.pl'. + + * src/tools/afblue.pl (aux_name): Don't use `reverse'. + : Use proper indentation for generated `#else'. + + * src/autofit/afblue.h: Regenerated. + +2014-01-04 Werner Lemberg + + [autofit] Fix Indic scripts. + + Split the single, incorrect Indic entry into separate scripts so + that the covered ranges are the same: Bengali, Devanagari, Gujarati, + Gurmukhi, Kannada, Limbu, Malayalam, Oriya, Sinhala, Sundanese, + Syloti Nagri, Tamil, Telugu, and Tibetan. At the same time, remove + entries for Meetai Mayak and Sharada – the Unicode ranges were + incorrect (and nobody has complained about that), fonts are scarce + for those scripts, and the Indic auto-hinter support is rudimentary + anyways. + + * src/autofit/afscript.h: Updated, using AF_CONFIG_OPTION_INDIC and + AF_CONFIG_OPTION_CJK. + + * src/autofit/afstyles.h (STYLE_DEFAULT_INDIC): New auxiliary macro. + Use it, together with AF_CONFIG_OPTION_INDIC and + AF_CONFIG_OPTION_CJK, to update. + + * src/autofit/afranges.c [AF_CONFIG_OPTION_INDIC]: Updated. + [!AF_CONFIG_OPTION_INDIC, !AF_CONFIG_OPTION_CJK]: Removed. + Sort entries by tags. + +2014-01-03 Werner Lemberg + + [autofit] Thinko. + + * src/autofit/hbshim.c (af_get_char_index): Similar to + `af_get_coverage', reject glyphs which are not substituted. + +2014-01-03 Werner Lemberg + + [autofit] Fix handling of default coverages. + + With this commit, the implementation of coverage handling is + completed. + + * src/autofit/hbshim.c (af_get_coverage): Exit early if nothing to + do. + Reject coverages which don't contain appropriate glyphs for blue + zones. + +2014-01-03 Werner Lemberg + + [autofit] Fix handling of default coverages. + + * src/autofit/afglobal.c (af_face_globals_compute_style_coverage): + First handle non-default coverages, then the default coverage of the + default script, and finally the other default coverages. + +2014-01-03 Werner Lemberg + + [autofit] Fix scaling of HarfBuzz shaping. + + * src/autofit/hbshim.c (af_get_char_index): Scale to units per EM. + +2014-01-03 Werner Lemberg + + [autofit] Better ftgrid support. + + * src/autofit/afhints.c (af_glyph_hints_get_segment_offset): Add + parameters `is_blue' and `blue_offset'. + +2014-01-01 Werner Lemberg + + [autofit] Remove some styles. + + * src/autofit/afcover.h: Remove coverages for alternative fractions, + denominators, numerators, and fractions. + + * src/autofit/afstyles.h (META_STYLE_LATIN): Updated. + +2014-01-01 Werner Lemberg + + [autofit] Add more styles. + + * src/autofit/afstyles.h (STYLE_LATIN, META_STYLE_LATIN): New + auxiliary macros; use them to define styles for Cyrillic, Greek, and + Latin. + + * src/autofit/afcover.h: Remove coverage for oldstyle figures. + Since those digits are used in combination with ordinary letters, it + makes no sense to handle them separately. + + * src/autofit/afglobal.c (af_face_globals_get_metrics): Don't limit + `options' parameter to 4 bits. + +2014-01-01 Werner Lemberg + + [autofit] Fix style assignments to glyphs. + + * src/autofit/hbshim.c (af_get_coverage) + [FT_CONFIG_OPTION_USE_HARFBUZZ]: Scan GPOS coverage of features also + so that we can skip glyphs that have both GSUB and GPOS data. + +2014-01-01 Werner Lemberg + + * src/autofit/hbshim.c: s/{lookups,glyphs}/gsub_{lookups,glyphs}/. + +2014-01-01 Werner Lemberg + + [autofit] Implement and use `af_get_char_index' with HarfBuzz. + + * src/autofit/hbshim.c (COVERAGE) [FT_CONFIG_OPTION_USE_HARFBUZZ]: + Redefine to construct HarfBuzz features. + (af_get_char_index) [FT_CONFIG_OPTION_USE_HARFBUZZ]: Rewritten. + + * src/autofit/aflatin.c (af_latin_metrics_init_blues): Use + `y_offset' to adjust `best_y'. + +2013-12-31 Werner Lemberg + + [autofit] s/AF_STYLE_...._DEFAULT/AF_STYLE_...._DFLT/i. + +2013-12-31 Werner Lemberg + + [autofit] Fix interface of `af_get_char_index'. + + * src/autofit/hbshim.c (af_get_char_index): Return error value. + Add argument for y offset (to be used in a yet-to-come patch). + + * src/autofit/hbshim.h, src/autofit/afcjk.c, + src/autofit/aflatin.c: Updated. + +2013-12-30 Werner Lemberg + + [autofit] Don't combine multiple features into one set. + + Combining them, as originally envisioned, would lead to much more + complicated code, as investigations have shown meanwhile. The major + drawback is that we run out of available style slots much earlier. + However, this is only a theoretical issue since we don't support a + large number of scripts currently. + + * src/autofit/afcover.h: Replace `COVERAGE_{1,2,3}' macros with + a single-element `COVERAGE' macro, sort the elements by the feature + tags, and add entry for `ruby'. + + * src/autofit/aftypes.h: Updated. + * src/autofit/hbshim.c: Updated. + +2013-12-28 Werner Lemberg + + [autofit] Code shuffling to reduce use of cpp macros. + + * src/autofit/afglobal.c (af_face_globals_compute_style_coverage): + Call `af_get_coverage' unconditionally. + + * src/autofit/autofit.c: Include `hbshim.c' unconditionally. + + * src/autofit/hbshim.c (af_get_coverage) + [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Provide dummy function. + + * src/autofit/hbshim.h: Provide function declarations + unconditionally. + +2013-12-28 Werner Lemberg + + [autofit] Add wrapper function for `FT_Get_Char_Index'. + + Yet-to-come changes will provide HarfBuzz functionality for the new + function. + + * src/autofit/hbshim.c (af_get_char_index): New function. + * src/autofit/hbshim.h: Updated. + + * src/autofit/afcjk.c (af_cjk_metrics_init_widths, + af_cjk_metrics_init_blues, af_cjk_metrics_check_digits): Updated. + + * src/autofit/aflatin.c (af_latin_metrics_init_widths, + af_latin_metrics_init_blues, af_latin_metrics_check_digits): + Updated. + +2013-12-28 Werner Lemberg + + [autofit] Use `global' HarfBuzz font object. + + We now use `hb_font' instead of `hb_face' since yet-to-come changes + need this. + + * src/autofit/afglobal.h: Include `hbshim.h'. + (AF_FaceGlobalsRec) [FT_CONFIG_OPTION_USE_HARFBUZZ]: New member + `hb_font'. + + * src/autofit/afglobal.c (af_face_globals_new) + [FT_CONFIG_OPTION_USE_HARFBUZZ]: Create `hb_font'. + (af_face_globals_free) [FT_CONFIG_OPTION_USE_HARFBUZZ]: Destroy + `hb_font'. + + * src/autofit/hbshim.h: Include HarfBuzz headers. + + * src/autofit/hbshim.c: Include `hbshim.h' instead of HarfBuzz + headers. + (af_get_coverage): Updated. + +2013-12-27 Werner Lemberg + + [autofit] Handle `DFLT' OpenType script for coverages. + + * include/ftautoh.h: Document new `default-script' property. + + * src/autofit/hbshim.c (af_get_coverage): Use `AF_FaceGlobals' for + type of first parameter. + (script_tags): Add one more element. + (af_get_coverage): Adjust `script_tags' to handle `DFLT' script tag. + + * src/autofit/hbshim.h: Updated. + + * src/autofit/afglobal.c (af_face_globals_compute_style_coverage): + Updated. + + * src/autofit/afglobal.h (AF_SCRIPT_DEFAULT): New macro. + + * src/autofit/afmodule.h (AF_ModuleRec): New `default_script' + member. + + * src/autofit/afmodule.c (af_property_set, af_property_get): Handle + `default-script' property. + (af_autofitter_init): Updated. + +2013-12-27 suzuki toshiya + + [ftrfork] Fix the face order difference between POSIX and Carbon. + + The fragmented resources in Suitcase and .dfont should be reordered + when `POST' resource for Type1 is being restored, but reordering of + sfnt resources induces the different face order. Now the ordering + is restricted to `POST' resource only, to prevent the different + order issue (e.g. the face index in the fontconfig cache generated + with Carbon framework is incompatible with that by FreeType 2 + without Carbon framework.) Found by Khaled Hosny and Hin-Tak Leung. + + http://lists.gnu.org/archive/html/freetype-devel/2013-02/msg00035.html + http://lists.gnu.org/archive/html/freetype-devel/2013-12/msg00027.html + + * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): Add a switch + `sort_by_res_id' to control the fragmented resource ordering. + * include/internal/ftrfork.h: Declare new switch. + * src/base/ftobjs.c (IsMacResource): Enable the sorting for `POST' + resource, and disable the sorting for `sfnt' resource. + +2013-12-25 Werner Lemberg + + Fix Savannah bug #40997. + + * src/bdf/bdfdrivr.c (BDF_Face_Init): Only use OR operator to + adjust face flags since FT_FACE_FLAG_EXTERNAL_STREAM might already + be set. + * src/cff/cffobjs.c (cff_face_init): Ditto. + * src/cid/cidobjs.c (cid_face_init): Ditto. + * src/pcf/pcfread.c (pcf_load_font): Ditto. + * src/pfr/pfrobjs.c (pfr_face_init): Ditto. + * src/type1/t1objs.c (T1_Face_Init): Ditto. + * src/type42/t42objs.c (T42_Face_Init): Ditto. + * src/winfonts/winfnt.c (FNT_Face_Init): Ditto. + +2013-12-21 Werner Lemberg + + [autofit] Introduce `coverages'. + + Coverages are the interface to the HarfBuzz library to acces + OpenType features for handling glyphs not addressable by the cmap. + + Right now, compilation of HarfBuzz is only added to the development + build. A solution for standard build mode will be delayed until + HarfBuzz gets split into two libraries to avoid mutual dependencies + between FreeType and HarfBuzz. + + Note that this is only a first step in handling coverages, basically + providing the framework only. Code for handling selected OpenType + features (this is, actually using the data in `afcover.h') will + follow. + + * devel/ftoption.h, include/config/ftoption.h + (FT_CONFIG_OPTION_USE_HARFBUZZ): New macro. + + * src/autofit/hbshim.c, src/autofit/hbshim.h, src/autofit/afcover.h: + New files. + + * src/autofit/afscript.h: Add HarfBuzz script name tags. + + * src/autofit/afstyles.h: Add default coverage enumeration values. + + * src/autofit/aftypes.h: Update use of `SCRIPT' and `STYLE' macros. + (AF_Coverage): New enumeration (generated by `afcover.h'). + (AF_StyleClassRec): New member `coverage'. + (AF_DEFINE_STYLE_CLASS): Updated. + + * include/internal/fttrace.h: Add `afharfbuzz' for tracing coverage + data. + + * src/autofit/afglobal.h: Update use of `SCRIPT' and `STYLE' macros. + (AF_SCRIPT_FALLBACK): Renamed to ... + (AF_STYLE_FALLBACK): ... this. + + * src/autofit/afglobal.c: Include `hbshim.c'. + Update use of `SCRIPT' and `STYLE' macros. + (af_face_globals_compute_style_coverage) + [FT_CONFIG_OPTION_USE_HARFBUZZ]: Call `af_get_coverage'. + Update. + + * src/autofit/afmodule.h (AF_ModuleRec): + s/fallback_script/fallback_style/. + + * src/autofit/afmodule.c (af_property_set): Adapt handling of + `fallback-script' property to set a fallback style. + (af_property_get, af_autofitter_init): Updated. + + * src/autofit/afpic.c: Update use of `SCRIPT' and `STYLE' macros. + + * src/autofit/afranges.h: Update use of `SCRIPT' macro. + + * src/autofit/autofit.c [FT_CONFIG_OPTION_USE_HARFBUZZ]: Include + `hbshim.c'. + + * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `hbshim.c'. + (AUTOF_DRV_H): Add `afcover.h'. + + * builds/freetype.mk (INCLUDE_FLAGS) [DEVEL_DIR]: Use pkg-config for + all libraries needed by FreeType. + +2013-12-21 Werner Lemberg + + Fix Savannah bug #40975 (sort of). + + * src/truetype/ttinterp.c (Ins_IP): Fix sign typo to make FreeType + behave the same as the Windows TrueType engine for the invalid case. + +2013-12-21 Werner Lemberg + + [autofit] Make PIC mode work actually. + + * src/autofit/afpic.h (AFModulePIC): Fix array sizes to fit the + enumeration values automatically generated by including `afscript.h' + and friends. + + * src/autofit/afpic.c (autofit_module_class_pic_init): Updated. + +2013-12-21 Werner Lemberg + + Fix PIC linking. + + * include/internal/ftrfork.h (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Fix + generated function name. + + * src/base/basepic.c (FT_Init_Table_raccess_guess_table): Rename + to ... + (FT_Init_Table_ft_raccess_guess_table): ... this so that the + function name correctly corresponds to what the macro framework + expects. + + * src/psnames/rules.mk (PSNAMES_DRV_SRC_S): Use correct file name so + that PIC functions are compiled also. + +2013-12-21 Werner Lemberg + + [base] Add missing dependencies to Makefile. + + * src/base/rules.mk (BASE_SRC): Add `basepic.c' and `ftpic.c'. + (BASE_H): Add `basepic.h'. + +2013-12-20 Werner Lemberg + + [autofit] Fix PIC compilation. + + * src/autofit/afcjk.c (af_cjk_metrics_init_widths), + src/autofit/aflatin.c (af_latin_metrics_init_widths) + [FT_CONFIG_OPTION_PIC]: Declare `globals'. + + * src/autofit/afglobal.c: Always call AF_DEFINE_SCRIPT_CLASS, and + AF_DEFINE_STYLE_CLASS. + + * src/autofit/afpic.c: Include `afglobal.h'. + (autofit_module_class_pic_init): Typo. + + * src/autofit/aftypes.h (AF_DEFINE_SCRIPT_CLASS, + AF_DEFINE_STYLE_CLASS): Don't use the same identifier for macro + parameter and structure member. + +2013-12-20 Werner Lemberg + + [autofit] Introduce `styles'. + + This is the new top-level structure for handling glyph input data; + scripts are now defined separately. + + * src/autofit/aftypes.h (SCRIPT): Updated. + (AF_ScriptClassRec): Move `blue_stringset' and `writing_system' + members to ... + (AF_Style_ClassRec): ... this new structure. + (AF_Style): New enumeration. + (AF_StyleMetricsRec): Replace `script' enumeration with + `style_class' pointer. + (AF_DEFINE_SCRIPT_CLASS, AF_DECLARE_SCRIPT_CLASS): Updated. + (AF_DEFINE_STYLE_CLASS, AF_DECLARE_STYLE_CLASS): New macros. + + * src/autofit/afstyles.h: New file, using data from `afscript.h'. + * src/autofit/afscript.h: Updated. + + * src/autofit/afcjk.c (af_cjk_metrics_init_widths, + af_cjk_metrics_init_blues, af_cjk_hint_edges): Updated. + + * src/autofit/afglobal.c (SCRIPT): Updated. + (STYLE): Redefine macro to load `afstyles.h'. + (af_script_names) [FT_DEBUG_LEVEL_TRACE]: Replace with... + (af_style_names): ... this array. + (af_face_globals_compute_script_coverage): Renamed to... + (af_face_globals_compute_style_coverage): ... this. + Updated. + (af_face_globals_new, af_face_globals_free, + af_face_globals_get_metrics): Updated. + + * src/autofit/afglobal.h (SCRIPT): Updated. + (STYLE): Redefine macro to load `afstyles.h'. + (AF_SCRIPT_FALLBACK): Update definition. This will get more + refinements with later on. + (AF_SCRIPT_UNASSIGNED): Replace with... + (AF_STYLE_UNASSIGNED): ... this macro. + (AF_FaceGlobalsRec): Updated. + + * src/autofit/aflatin.c (af_latin_metrics_init_widths, + af_latin_metrics_init_blues, af_latin_metrics_scale_dim, + af_latin_hint_edges): Updated. + + * src/autofit/aflatin2.c (af_latin2_metrics_init_widths): Updated. + (af_ltn2_uniranges): Removed. + + * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph): + Updated. + + * src/autofit/afpic.c (autofit_module_class_pic_init): Updated. + * src/autofit/afpic.h (AF_STYLE_CLASSES_GET): New macro. + (AFModulePIC): Add `af_style_classes' and `af_style_classes_rec' + members. + + * src/autofit/afranges.h: Updated. + + * src/autofit/rules.mk (AUTOF_DRV_H): Add `afstyles.h'. + +2013-12-19 Werner Lemberg + + [autofit] Factor scripts and uniranges out of writing system files. + + * src/autofit/afranges.c, src/autofit/afranges.h: New files. + + * src/autofit/afscript.h: Extend `SCRIPT' macro with more + parameters, taking data from the writing system files. + + * src/autofit/aftypes.h: Updated. + + * src/autofit/afglobal.c: Include `afranges.h'. + Load `afscript.h' to call AF_DEFINE_SCRIPT_CLASS. + * src/autofit/afglobal.c: Include `afranges.h'. + Load `afscript.h' to call AF_DECLARE_SCRIPT_CLASS. + + * src/autofit/afcjk.c, src/autofit/afcjk.h: Updated. + * src/autofit/afdummy.c, src/autofit/afdummy.h: Updated. + * src/autofit/afindic.c, src/autofit/afindic.h: Updated. + * src/autofit/aflatin.c, src/autofit/aflatin.h: Updated. + * src/autofit/aflatn2.c, src/autofit/aflatn2.h: Updated. + + * src/autofit/afpic.c: Updated. + + * src/autofir/autofit.c: Include `afranges.c'. + * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `afranges.c'. + +2013-12-18 Werner Lemberg + + [autofit] More code orthogonality. + + * src/autofit/aftypes.h (AF_StyleMetrics): Replace `script_class' + pointer to an `AF_ScriptClass' structure with `script' index of type + `AF_Script'. + Move some code around. + + * src/autofit/afcjk.c: Include `afpic.h'. + (af_cjk_metrics_init_widths, af_cjk_metrics_init_blues, + af_cjk_hint_edges): Updated. + + * src/autofit/aflatin.c: Include `afpic.h'. + (af_latin_metrics_init_widths, af_latin_metrics_init_blues, + af_latin_metrics_scale_dim, af_latin_hint_edges): Updated. + + * src/autofit/afglobal.c (af_face_globals_get_metrics): Updated. + + * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph): + Updated. + +2013-12-18 Werner Lemberg + + [autofit] s/ScriptMetrics/StyleMetrics/. + +2013-12-18 Werner Lemberg + + [autofit] s/script_{metrics,hints}/style_{metrics,hints}/ + +2013-12-18 Werner Lemberg + + [autofit] s/gscripts/gstyles/. + +2013-12-18 Werner Lemberg + + [autofit] s/glyph_scripts/glyph_styles/. + + This is the first commit of a series to create a new top-level + structure (a `style') for handling scripts, writing_systems, and + soon-to-be-added coverages. + +2013-12-17 Werner Lemberg + + [autofit] s/AF_Script_/AF_WritingSystem_/ where appropriate. + +2013-12-11 Infinality + + [truetype] Simplify logic of rendering modes. + + This patch unifies the subpixel and non-subpixel cases. + + * src/truetype/ttinterp.h (TT_ExecContextRec): Remove + `grayscale_hinting'; all code should refer to `grayscale' instead. + Remove unused `native_hinting' member. + Rename `subpixel_hinting' member to `subpixel. + + * src/truetype/ttgload.c (TT_LOADER_SET_PP): Updated. + (tt_loader_init): Updated. + + * src/truetype/ttinterp.c (Ins_GETINFO): Simplify. + Updated. + +2013-12-11 Werner Lemberg + + [documentation] Add section how to include FreeType header files. + Problem reported by David Kastrup . + + Surprisingly, a description how to do that was completely missing in + the API reference. + + * include/freetype.h, include/ftchapters.h: New documentation + section `header_inclusion'. + +2013-12-10 Werner Lemberg + + [autofit] s/DFLT/NONE/, s/dflt/none/. + +2013-12-10 Werner Lemberg + + [autofit] s/AF_SCRIPT_NONE/AF_SCRIPT_UNASSIGNED/. + +2013-12-10 Werner Lemberg + + [truetype] Fix scaling of vertical phantom points. + + * src/truetype/ttgload.c (load_truetype_glyph): Scale pp3.x and + pp4.x also. + +2013-12-10 Werner Lemberg + + [truetype] Fix positioning of composite glyphs. + Problem reported by Nigel Tao . + + * src/truetype/ttgload.c (TT_Hint_Glyph): Remove code that shifts + the glyph (component) by a fractional value computed from the LSB + phantom point. This is wrong, since the horizontal phantom points + get rounded horizontally later on. + 2013-12-08 Werner Lemberg * Version 2.5.2 released. @@ -26,9 +1071,10 @@ builds/wince/vc2008-ce/freetype.vcproj, builds/wince/vc2008-ce/index.html: s/2.5.1/2.5.2/, s/251/252/. - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1. + * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2. * builds/unix/configure.raw (version_info): Set to 17:1:11. + * CMakeLists.txt (VERSION_PATCH): Set to 2. * docs/CHANGES: Updated. 2013-12-07 Werner Lemberg @@ -136,7 +1182,7 @@ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1. * builds/unix/configure.raw (version_info): Set to 17:0:11. - * CMakeLists.txt (VERSION_PATCH): Set to 2. + * CMakeLists.txt (VERSION_PATCH): Set to 1. * docs/CHANGES, docs/release: Updated. 2013-11-23 Werner Lemberg @@ -2138,6353 +3184,9 @@ */* [FT_CONFIG_OPTION_OLD_INTERNALS]: Remove macro and guarded code. -2013-05-08 Werner Lemberg - - * Version 2.4.12 released. - ========================== - - - Tag sources with `VER-2-4-12'. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.12. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.11/2.4.12/, s/2411/2412/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 12. - - * builds/unix/configure.raw (version_info): Set to 16:1:10. - -2013-05-08 Werner Lemberg - - * docs/CHANGES: Updated. - -2013-05-08 Werner Lemberg - - * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Typo. - -2013-05-05 Werner Lemberg - - Synchronize `ftconfig.h'. - - * builds/unix/ftconfig.in: Updated. - -2013-05-05 Werner Lemberg - - Fix compilation with C++. - - * src/base/md5.c (body): Use proper cast. - -2013-05-05 Werner Lemberg - - Fix 64bit compilation issues. - - * include/freetype/config/ftconfig.h [FT_LONG64]: Typedef - `FT_Int64' here. - - * src/base/ftcalc.c: Remove typedef of `FT_Int64'. - (FT_DivFix): Fix cast. - * src/base/fttrigon.c: Remove typedef of `FT_Int64'. - -2013-05-05 Werner Lemberg - - [raster] Fix clang issues. - - Fix suggested by . - - * src/raster/ftraster.c (ULong): New typedef. - (SCALED): Add proper cast. - -2013-05-04 Werner Lemberg - - Fix clang fixes. - - * src/base/fttrigon.c (ft_trig_prenorm, FT_Vector_Rotate): Use - correct types. - - * src/cff/cf2intrp.c (cf2_interpT2CharString) : Force - unsigned for computations. - * src/cff/cffgload.c (cff_decoder_parse_charstrings): Ditto. - * src/cff/cffparse.c (cff_parse_integer): Ditto. - - * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Ditto. - -2013-05-04 Werner Lemberg - - [cff] Make Adobe CFF engine work correctly on 64bit hosts. - - Reported by numerous people on the `freetype-devel' list. Without - this fix, glyphs aren't properly aligned on a common baseline. - - On 64bit systems, `FT_Pos' expands to `long int', having a width of - 64bit. `CF2_Fixed' expands to `int' which is normally 32bit wide on - 64bit hosts also. Wrong casts filled up the blues arrays with - incorrect values. Note that all blues values are accessed with the - `cf2_blueToFixed' macro which handles the 64bit to 32bit conversion. - - * src/cff/cf2ft.h (cf2_getBlueValues, cf2_getOtherBlues, - cf2_getFamilyBlues, cf2_getFamilyOtherBlues): Use `FT_Pos' for - `data', not `CF2_Fixed'. - * src/cff/cf2ft.c (cf2_getBlueValues, cf2_getOtherBlues, - cf2_getFamilyBlues, cf2_getFamilyOtherBlues): Updated. - * src/cff/cf2blues.c (cf2_blues_init): Updated. - -2013-05-04 Werner Lemberg - - More fixes for clang's `sanitize' feature. - - * src/base/ftcalc.c (FT_DivFix): Use unsigned values for - computations which use the left shift operator and convert to signed - as the last step. - * src/base/fttrigon.c (ft_trig_prenorm, FT_Vector_Rotate, - FT_Vector_Length, FT_Vector_Polarize): Ditto. - - * src/cff/cffgload.c (cff_decoder_parse_charstrings): Simplify. - * src/cff/cffload.c (cff_subfont_load): Fix constant. - * src/cff/cffparse.c (cff_parse_integer, cff_parse_real, do_fixed, - cff_parse_fixed_dynamic): Use unsigned values for computations which - use the left shift operator and convert to signed as the last step. - - * src/cid/cidload.c (cid_get_offset): Ditto. - - * src/psaux/psconv.c (PS_Conv_ToFixed): Ditto. - * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Ditto. - - * src/truetype/ttinterp.c (TT_MulFix14, TT_DotFix14): Ditto. - -2013-05-04 Werner Lemberg - - Fix errors reported by clang's `sanitize' feature. - - * include/freetype/internal/ftstream.h: Simplify and fix integer - extraction macros. - (FT_INT8_, FT_BYTE_I16, FT_BYTE_I32, FT_INT8_I16, FT_INT8_I32, - FT_INT8_I32, FT_INT8_U32): Removed. - (FT_PEEK_SHORT, FT_PEEK_LONG, FT_PEEK_OFF3, FT_PEEK_SHORT_LE, - FT_PEEK_LONG_LE, FT_PEEK_OFF3_LE): Use unsigned values for - computations and convert to signed as the last step. - - * src/cff/cf2fixed.h (cf2_intToFixed, cf2_fixedToInt, - cf2_fracToFixed): Avoid shifts of negative values. - (cf2_intToFrac, cf2_fixedToFrac, cf2_fixedTo26Dot6): Removed, - unused. - - * src/cff/cf2intrp.c (cf2_interpT2CharString) : Use unsigned values for computations and convert to signed - as the last step. - Use proper types in tracing messages. - - * src/cff/cffgload.c (cff_decoder_parse_charstrings): Use unsigned - values for computation of operands and convert to signed as the last - step. - Use proper type in tracing message. - -2013-05-03 Werner Lemberg - - * src/cff/cf2blues.c: Remove dead code. - -2013-05-02 Chris Liddell - - * src/cff/cffgload.c: Include FT_CFF_DRIVER_H. - -2013-04-27 Werner Lemberg - - * docs/CHANGES: Updated. - * README: Improved. - -2013-04-13 Werner Lemberg - - [cff] Add a new Type 2 interpreter and hinter. - - This work, written by Dave Arnold and fully - integrated into FreeType by me, is a donation by Adobe in - collaboration with Google. It is vastly superior to the old CFF - engine, and it will replace it soon. Right now, it is still off by - default, and you have to explicitly select it using the new - `hinting-engine' property of the cff driver. - - For convenience, (most of) the new files are committed separately. - - * include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro. - * include/freetype/ftcffdrv.h: New file to access CFF driver - properties. - * include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error - code. - * include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints', - and `cf2interp'. - - * src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'. - * src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine' - and `no_stem_darkening'. - * src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'. - - * src/cff/cff.c: Include new files. - * src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle - `hinting-engine' and `no-stem-darkening' properties (only the Adobe - engine listens to them). - * src/cff/cffgload.c: Include `cf2ft.h'. - (cff_decoder_prepare): Initialize `current_subfont'. - (cff_build_add_point): Handle Adobe engine which uses 16.16 - coordinates. - (cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING - separately. - Choose rendering engine based on `hinting_engine' property. - * src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe - engine. - * src/cff/cffobjs.c: Include FT_CFF_DRIVER_H. - (cff_driver_init): Set default property values. - - * src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files. - - * src/cff/cf2*.*: New files, containing the Adobe engine. - -2013-04-12 Werner Lemberg - - [cff] Minor code administration issues. - - * src/cff/cffgload.c (check_points): Rename to... - (cff_check_points): ...this and make it FT_LOCAL. - (cff_builder_add_point, cff_builder_add_point1, - cff_builder_start_point, cff_builder_close_contour, - cff_lookup_glyph_by_stdcharcode, cff_get_glyph_data, - cff_free_glyph_data): Make them FT_LOCAL. - - * src/cff/cffgload.h: Updated. - -2013-04-12 Werner Lemberg - - Add output bitmap checksums. - - Use `FT2_DEBUG=bitmap:3' for tracing. - - * src/base/md5.c, src/base/md5.h: New files, taken from - - http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 - - * include/freetype/internal/fttrace.h: Add `bitmap'. - - * src/base/ftobjs.c [FT_DEBUG_LEVEL_TRACE]: Include `md5.c' - - (FT_Render_Glyph_Internal) [FT_DEBUG_LEVEL_TRACE]: For tracing, - convert resulting bitmap to a uniform format and compute a checksum. - Use `bitmap' category for the tracing message. - - * src/base/rules.mk (BASE_H): Updated. - - * docs/LICENSE.TXT: Updated. - -2013-04-12 Werner Lemberg - - [cff] Add framework for CFF properties. - - * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC7): - New macro. - - * src/cff/cffdrivr.c: Include FT_SERVICE_PROPERTIES_H. - (cff_property_set, cff_property_get): New functions, still empty. - Define `cff_service_properties' service. - Update `cff_services'. - - * src/cff/cffpic.h: Include FT_SERVICE_PROPERTIES_H. - (CFF_SERVICE_PROPERTIES_GET): New macro. - (CffModulePIC): Add `cff_service_properties'. - -2013-04-03 Werner Lemberg - - [bdf] Fix Savannah bug #38589. - - * src/bdf/bdflib.c (_bdf_readstream): Thinko. - -2013-03-31 Werner Lemberg - - * configure: Use egrep, not grep. - - Problem reported Mojca Miklavec . - -2013-03-29 Werner Lemberg - - * include/freetype/ftlcdfil.h: Add description of color filtering. - - Based on a contribution from Antti S. Lankila - (Savannah bug #38607). - -2013-03-23 Werner Lemberg - - [autofit] Minor. - - * src/autofit/afmodule.c (af_property_set): Typo. - (af_autofitter_init, af_autofitter_done): Use cast. - -2013-03-21 Werner Lemberg - - * configure: Automatically test for `gmake' also. - - Suggested by Mojca Miklavec . - -2013-03-21 Peter Breitenlohner - - Respect CONFIG_SHELL from the environment. - - Some large packages using FreeType have to use a broken (deficient) - /bin/sh. The configure scripts (as generated by Autoconf) are - clever enough to find a better shell and put that one into the - environment variable CONFIG_SHELL. If that environment variable is - already set the script skips the test and assumes to be already - running under a good shell. - - * builds/unix/detect.mk: Honour CONFIG_SHELL. - * builds/unix/unix-def.in (SHELL): Define. - -2013-03-21 Werner Lemberg - - Fix Savannah patch #7971. - - * configure: Handle MAKE environment variable also. - -2013-03-17 Werner Lemberg - - Fix Savannah bug #38538. - - * builds/amiga/src/base/ftdebug.c, builds/win32/ftdebug.c, - builds/wince/ftdebug.c (FT_Throw): Add function. - -2013-03-17 Werner Lemberg - - [raster] Remove dead code. - - * src/raster/rastpic.c (ft_raster1_renderer_class_pic_init) - src/smooth/ftspic.c (ft_smooth_renderer_class_pic_init): Do it. - -2013-03-17 Werner Lemberg - - * src/pshinter/pshpic.h (GET_PIC): Use correct container. - -2013-03-15 Werner Lemberg - - * include/freetype/ftmoderr.h: Fix commit from 2013-03-11. - - The previous version was not backwards compatible. Reported by - Behdad. - -2013-03-14 Werner Lemberg - - */*: Use FT_ERR_EQ, FT_ERR_NEQ, and FT_ERR where appropriate. - - FT_Err_XXX and friends are no longer directly used in the source - code. - -2013-03-14 Werner Lemberg - - New error management macros. - - * include/freetype/fterrors.h (FT_ERR_XCAT, FT_ERR_CAT): Move to... - * include/freetype/fttypes.h: ... this file. - (FT_ERR, FT_ERR_EQ, FT_ERR_NEQ, FT_MODERR_EQ, FT_MODERR_NEQ): New - macros. - - * include/freetype/freetype.h: Updated. - -2013-03-14 Werner Lemberg - - */*: Use FT_Err_Ok only. - - This is a purely mechanical conversion. - -2013-03-14 Werner Lemberg - - */*: Use `FT_THROW'. - - This is essentially a mechanical conversion, adding inclusion of - `FT_INTERNAL_DEBUG_H' where necessary, and providing the macros for - stand-alone compiling modes of the rasterizer modules. - - To convert the remaining occurrences of FT_Err_XXX and friends it is - necessary to rewrite the code. Note, however, that it doesn't harm - if some cases are not handled since FT_THROW is a no-op. - -2013-03-13 Werner Lemberg - - Introduce `FT_THROW' macro. - - The idea is to replace code like - - return FT_Err_Foo_Bar; - - or - - return CFF_Err_Foo_Bar; - - with - - return FT_THROW( Foo_Bar ); - - The FT_THROW macro has two functions: - - . It hides the module specific prefix. - - . In debug mode, it calls the empty function `FT_Throw' which can - be thus used to set a breakpoint. - - * include/freetype/internal/ftdebug.h (FT_THROW): New macro. - (FT_Throw): New prototype. - * src/base/ftdebug.c (FT_Throw): New function. - -2013-03-12 Werner Lemberg - - Remove `FT_KEEP_ERR_PREFIX'. - - The idea is to always have FT_ERR_PREFIX available internally. - - * include/freetype/fterrors.h: Use FT2_BUILD_LIBRARY to guard - undefinition of FT_ERR_PREFIX - - * src/gxvalid/gxverror.h, src/otvalid/otverror.h, - src/sfnt/sferrors.h: Updated. - -2013-03-11 Werner Lemberg - - [gxvalid] Fix module error. - - * src/gxvalid/gxverror.h (FT_ERR_BASE): Define as - FT_Mod_Err_GXvalid. - * include/freetype/ftmoderr.h: Add module error for `GXvalid'. - -2013-03-11 Werner Lemberg - - Always use module related error codes. - - * src/cff/cffobjs.c (cff_face_init), src/type1/t1objs.c - (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init): Use - `FT_ERROR_BASE'. - - * src/type1/t1load.c (parse_encoding): Use - T1_Err_Unknown_File_Format. - -2013-03-08 Werner Lemberg - - [cff] Set `linear{Hori,Vert}Advance' for embedded bitmaps also. - - Problem reported by Khaled Hosny . - - * src/cff/cffgload.c (cff_slot_load): Implement it. - -2013-02-23 Alexei Podtelezhnikov - - [base] Fix commit ab02d9e8. - - * src/base/ftbbox.c (BBox_Cubic_Check): Change scaling to msb of 22. - -2013-02-19 Alexei Podtelezhnikov - - [base] New bisecting BBox_Cubic_Check (disabled). - - * src/base/ftbbox.c (BBox_Cubic_Check): New bisecting algorithm - for extremum search built around simple condition that defines - which half contains the extremum. - -2013-02-18 Alexei Podtelezhnikov - - [tools] Update BBox testing tool. - - * src/tools/test_bbox.c: Add another cubic outline with exact BBox. - (REPEAT): Increase the number of benchmarking cycles. - (profile_outline): Tweak output formatting. - -2013-02-02 Werner Lemberg - - Fix Savannah bug #38235. - - * builds/unix/configure.raw: Don't generate `freetype-config' and - `freetype.pc'. - - * builds/unix/unix-def.in (FT2_EXTRA_LIBS, LIBBZ2, LIBZ, - build_libtool_libs, ft_version): New variables to be substituted. - (freetype-config, freetype.pc): New rules to generate those files. - - * builds/unix/freetype-config.in: Remove code for handling `rpath'. - The use of $rpath has been accidentally removed in a patch from - 2009-12-22, and apparently noone has missed it since. - Use `%' instead of `@' as a variable substitution marker. - Use quotes. - - * builds/unix/freetype.in: Use `%' instead of `@' as a variable - substitution marker. - Use quotes. - -2013-02-07 Werner Lemberg - - * src/truetype/ttobjs.c (tt_size_run_prep): Reset more GS variables. - - BTW, Greg agrees that the OpenType specification is missing the list - of GS variables which will always be reset to the default values - after the `prep' table has been executed. - -2013-02-06 Werner Lemberg - - * src/truetype/ttobjs.c (tt_size_run_prep): Reset reference points. - - Up to now, we simply took a snapshot of the Graphics State after the - `prep' table has been executed, and right before a glyph's bytecode - was run it got reloaded. However, as Greg Hitchcock has told us in - private communication, reference points get reset to zero in the MS - rasterizer and we follow in due course. While reasonable, this is - undocumented behaviour. - - Most notably, this fixes the rendering of Arial's `x' glyph in - subpixel hinting mode. - -2013-02-05 Werner Lemberg - - [truetype] A better fix for Savannah bug #38211. - - * src/truetype/ttinterp.c (Ins_IP): Implement identical behaviour to - MS rasterizer if rp1 == rp2 (confirmed by Greg Hitchcock). - -2013-02-01 Alexei Podtelezhnikov - - [pcf] Streamline parsing of PCF encoding table. - - * src/pcf/pcfread.c (pcf_get_encodings): Use simpler double for-loop. - Reallocate array instead of using temporary storage. - -2013-02-01 Werner Lemberg - - Fix Savannah bug #38227. - - * builds/unix/freetype-config.in: Set LC_ALL. - -2013-02-01 Werner Lemberg - - Fix Savannah bug #38221. - - This complements commit 83c0ebab. - - * src/base/ftcalc.c (FT_MulDiv_No_Round): Don't enclose with - `TT_USE_BYTECODE_INTERPRETER'. - -2013-02-01 Werner Lemberg - - [truetype] Fix Savannah bug #38211. - - * src/truetype/ttinterp.c (Ins_IP): Make FreeType behave identical - to other interpreters if rp1 == rp2 (which is invalid). - -2013-01-28 Alexei Podtelezhnikov - - [base] Small optimization of BBox calculation. - - * src/base/ftbbox.c (BBox_Cubic_Check): Use FT_MSB function in - scaling algorithm. - -2013-01-26 Infinality - - [truetype] Minor formatting fix. - - * src/truetype/ttinterp.c: Updated. - (DO_RS): Fix indentation. - -2013-01-26 Infinality - - [truetype] Fix rasterizer_version logic in sph. - - * src/truetype/ttsubpix.c: Updated. - (ALWAYS_SKIP_DELTAP_Rules): Remove rule for Trebuchet MS. - (sph_set_tweaks): Fix `rasterizer_version' logic. - -2013-01-26 Infinality - - [truetype] Align more to ClearType whitepaper for sph. - - * include/freetype/internal/tttypes.h (TT_FaceRec): Add flags - for detected opcode patterns and compatibility mode. - - * src/truetype/ttgload.c (tt_loader_init): Complete conditional. - - * src/truetype/ttinterp.c: Updated. - Remove SPH_DEBUG and replace with FT_TRACE7. - (DO_RS): More conditions. - (Ins_FDEF): Add more opcode detection patterns. - More specific conditions when flagging an fdef. - Make compatibility mode only turn on when delta fdefs are found. - (Ins_CALL, Ins_LOOPCALL): Set flags for currently executed fdef. - (Ins_SHPIX): Remove logic to handle ttfautohinted fonts. - Simplify conditionals where possible. - Use `&' instead of `%' operator for dumb compilers. - (Ins_MIAP): Adjust twilight zone conditional. - Ensure `ignore_x_mode' is on when testing sph conditionals. - (Ins_MIRP): Ensure `ignore_x_mode' is on when testing sph - conditionals. - Do cvt cutin always when `ignore_x_mode' is active. - Remove test for ttfautohinted fonts. - (Ins_DELTAP): Ensure `ignore_x_mode' is on when testing sph - conditionals. - Do cvt cutin always when `ignore_x_mode' is active. - Remove test for ttfautohinted fonts. - Use `&' instead of `%' operator for dumb compilers. - (Ins_GETINFO): Remove SPH_DEBUG and replace with FT_TRACE7. - - * src/truetype/ttinterp.h: Updated. - (TT_ExecContextRec): Remove compatibility_mode variable. - Add variable to indicate when executing in special fdefs for sph. - - * src/truetype/ttobjs.h: Updated. - (TT_DefRecord): Add flags to identify special fdefs for sph. - (TT_SizeRec): Remove unnecessary ttfautohinted variable. - - * src/truetype/ttsubpix.c: Updated. - (COMPATIBILITY_MODE_Rules): Remove all. Auto-detected now. - (PIXEL_HINTING_Rules): Remove all. Unnecessary after fixes. - (SKIP_NONPIXEL_Y_MOVES_Rules): Remove Ubuntu. - (SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions): Add Arial Bold `N'. - (SKIP_OFFPIXEL_Y_MOVES_Rules): Remove all. Happens automatically - now. - (ROUND_NONPIXEL_Y_MOVES_Rules): Remove Ubuntu. - (ROUND_NONPIXEL_Y_MOVES_Rules_Exceptions): Remove all. - (NORMAL_ROUND_Rules): Remove Verdana. - (NO_DELTAP_AFTER_IUP_Rules): Remove all. - (sph_set_tweaks): Performance fix. Don't run prep always. - Adjust conditional for sph_compatibility_mode. - - * src/truetype/ttsubpix.h: Add new fdef flags for sph. - -2013-01-23 Alexei Podtelezhnikov - - [base] Fix broken emboldening at small sizes. - - * src/base/ftoutln.c (FT_Outline_EmboldenXY): Do not attempt to - normalize zero-length vectors. - -2013-01-25 Werner Lemberg - - Fix Savannah bug #38167. - - This fixes commit 83c0ebab from 2012-06-27. - - * src/truetype/ttinterp.h: - s/TT_CONFIG_OPTION_BYTECODE_INTERPRETER/TT_USE_BYTECODE_INTERPRETER/. - -2013-01-25 Xi Wang - - [sfnt] Fix broken pointer overflow checks. - - Many compilers such as gcc and clang optimize away pointer overflow - checks `p + n < p', because pointer overflow is undefined behavior. - Use a safe form `n > p_limit - p' instead. - - Also avoid possible integer overflow issues, for example, using - `num_glyphs > ( p_limit - p ) / 2' rather than `num_glyphs * 2' - given a large `num_glyphs'. - - * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Implement it. - -2013-01-25 Werner Lemberg - - [base] Fix `make multi'. - - * src/base/ftoutln.c, src/base/fttrigon.c: Include - FT_INTERNAL_CALC_H. - -2013-01-25 David 'Digit' Turner - - [truetype] Fix C++ compilation. - - * src/truetype/ttsubpix.h: Updated. - (SPH_X_SCALING_RULES_SIZE): Moved and renamed to... - * src/truetype/ttsubpix.c (X_SCALING_RULES_SIZE): This. - (sph_X_SCALING_Rules): Removed. - (scale_test_tweak): Make function static. - (sph_test_tweak_x_scaling): New function. - - * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Updated. - -2013-01-23 Werner Lemberg - - [base] Make `FT_Hypot' really internal. - - * include/freetype/fttrigon.h (FT_Hypot): Move to... - * include/freetype/internal/ftcalc.h: This file. - - * src/base/fttrigon.c (FT_Hypot): Move to... - * src/base/ftcalc.c: This file. - Include FT_TRIGONOMETRY_H. - - * src/truetype/ttgload.c: Don't include FT_TRIGONOMETRY_H. - -2013-01-23 Werner Lemberg - - [truetype] Revert change from 2013-01-22. - - FreeType's `height' value is the baseline-to-baseline distance... - - * src/truetype/ttobjs.c (tt_size_reset): Undo. - -2013-01-23 Alexei Podtelezhnikov - - [base, truetype] New internal `FT_Hypot' function. - - * include/freetype/fttrigon.h (FT_Hypot): Declare it. - * src/base/fttrigon.c (FT_Hypot): Define it. - * src/truetype/ttgload.c (TT_Process_Composite_Component): Use it - instead of explicit expressions. - * src/truetype/ttinterp.c (Current_Ratio, Normalize): Use it instead - of TT_VecLen. - (TT_VecLen): Removed. - -2013-01-23 Alexei Podtelezhnikov - - [base] Fix integer overflow. - - * src/base/ftoutln.c (FT_Outline_EmboldenXY): Normalize incoming and - outgoing vectors and use fixed point arithmetic. - -2013-01-23 Alexei Podtelezhnikov - - [base] Fix integer overflow. - - * src/base/ftoutln.c (FT_Outline_Get_Orientation): Scale the - coordinates down to avoid overflow. - -2013-01-23 Alexei Podtelezhnikov - - [base] Split out MSB function. - - * src/base/fttrigon.c (ft_trig_prenorm): Borrow from here. - * include/freetype/internal/ftcalc.h (FT_MSB): Declare here. - * src/base/ftcalc.c (FT_MSB): Define here. - -2013-01-22 Werner Lemberg - - [truetype] Fix font height. - - * src/truetype/ttobjs.c (tt_size_reset): The Windows rendering - engine uses rounded values of the ascender and descender to compute - the TrueType font height. - -2013-01-16 Behdad Esfahbod - - [sfnt] Fix optimized sbit loader. - - It was not taking bit_depth into consideration when blitting! - - * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_byte_aligned, - * tt_sbit_decoder_load_bit_aligned): Handle bit - depth. - -2013-01-16 David 'Digit' Turner - - [truetype] Improve sub-pixel code. - - This patches fixes many issues with the ttsubpix implementation. - - 1. Data tables are defined, instead of declared, in the header, and - thus copied into each source file that includes it. - - 2. These tables were defined as global, mutable, visible variables, - and thus costing private RAM to every process that loads the - library (> 50 KB / process, this is huge!). - - Additionally, this also made the library export the symbols - completely needlessly. - - 3. Missing `sph_' and `SPH_' prefixes to some of the definitions. - - Note that this doesn't try to fix the incredibly inefficient storage - format for the data tables used by the code. This one will require - another pass in the future. - - * src/truetype/ttinterp.h (MAX_NAME_SIZE, MAX_CLASS_MEMBERS): - Renamed to... - (SPH_MAX_NAME_SIZE, SPH_MAX_CLASS_MEMBERS): This. - Update all users. - - (SPH_TweakRule, SPH_ScaleRule): Decorate with `const' where - appropriate. - - (Font_Class): Rename to... - (SPH_Font_Class): This. Decorate with `const' where appropriate. - - * src/truetype/ttsubpix.h (scale_test_tweak, sph_test_tweak): - Decorate arguments with `const' where appropriate. - - Move font tweaking tables to... - - * src/truetype/ttsubpic.c: This file and decorate them with `static' - and `const' where appropriate. - - (X_SCALING_Rules, X_SCALING_RULES_SIZE): Renamed to... - (spu_X_SCALING_Rules, SPH_X_SCALING_RULES_SIZE): This. - Update all users. - -2013-01-12 Alexei Podtelezhnikov - - [truetype] Improve accuracy of normalization of short vectors. - - Unit vector components are stored as 2.14 fixed-point numbers. In - order to calculate all 14 bits accurately, a short vector to be - normalized has to be upscaled to at least 14 bits before its length - is calculated. This has been safe since accurate CORDIC algorithms - were adopted. - - * src/truetype/ttinterp.c (Normalize): Scale short vectors by 0x4000. - -2013-01-12 Alexei Podtelezhnikov - - [truetype] Kill very old vector normalization hacks. - - Back in the days, vector length calculations were not very accurate - and the vector normalization function, Normalize, had to meticulously - correct the errors for long vectors [commit b7ef2b096867]. It was no - longer necessary after accurate CORDIC algorithms were adopted, but - the code remained. It is time to kill it. - - * src/truetype/ttinterp.c (Normalize): Remove error compensation. - (TT_VecLen): Remove any mention of old less accurate implementation. - -2013-01-11 Werner Lemberg - - Disable FT_CONFIG_OPTION_OLD_INTERNALS. - - After the next release we are going to remove the code completely. - - * devel/ftoption.h, include/freetype/config/ftoption.h - (FT_CONFIG_OPTION_OLD_INTERNALS): Comment out. - * docs/CHANGES: Document it. - -2013-01-10 Alexei Podtelezhnikov - - [base] Update the overflow protection bit. - - The recent optimizations of CORDIC iterations drastically reduce the - expansion factor. Vector components with MSB of 29 are now safe - from overflow. - - * src/base/fttrigon.c (FT_TRIG_SAFE_MSB): New macro. - (ft_trig_prenorm): Use it and remove dead code. - -2013-01-09 Alexei Podtelezhnikov - - [base, pshinter] Use FT_ABS, FT_MIN, and FT_MAX for readability. - - * src/base/ftbbox.c: Updated. - * src/base/ftobjs.c: Updated. - * src/base/fttrigon.c: Updated. - * src/pshinter/pshalgo.c: Updated. - * src/pshinter/pshrec.c: Updated. - -2013-01-08 Alexei Podtelezhnikov - - [base] Clean up trigonometric core. - - * src/base/fttrigon.c: Document the algorithm in a large comment. - (FT_TRIG_COSCALE): Remove macro. - (FT_Tan: Use `FT_TRIG_SCALE' instead. - (FT_Cos, FT_Vector_Unit): Ditto and round the return values. - -2013-01-02 Alexei Podtelezhnikov - - [base] Use rounding in CORDIC iterations. - - * src/base/fttrigon.c (ft_trig_pseudo_rotate, - ft_trig_pseudo_polarize): Improve accuracy by rounding. - -2013-01-02 Alexei Podtelezhnikov - - [base] Reduce trigonometric algorithms. - - After we get within 45 degrees by means of true 90-degree rotations, - we can remove initial 45-degree CORDIC iteration and start from - atan(1/2) pseudorotation, reducing expansion factor thereby. - - * src/base/fttrigon.c (FT_TRIG_SCALE, FT_TRIG_COSCALE): Update macros. - (ft_trig_pseudo_rotate, ft_trig_pseudo_polarize): Update. - - * src/tools/cordic.py: Bring up to date with trigonometric core. - - * docs/CHANGES: Old typo. - -2013-01-02 Alexei Podtelezhnikov - - * src/pshinter/pshalgo.h: Remove unused code. - -2012-12-27 Werner Lemberg - - * src/truetype/ttgload.c (tt_loader_init): Add more tracing. - -2012-12-23 Werner Lemberg - - [type1] Fix handling of /FontBBox in MM fonts. - Problem reported by Del Merritt - - If we have - - /FontBBox { { 11 12 13 14 15 16 17 18 } - { 21 22 23 24 25 26 27 28 } - { 31 32 33 34 35 36 37 38 } - { 41 42 43 44 45 46 47 48 } } - - in the /Blend dictionary, then the first BBox is { 11 21 31 41 }, - the second { 12 22 32 42 }, etc. - - * include/freetype/internal/psaux.h (T1_FieldType): Add - `T1_FIELD_TYPE_MM_BBOX' (for temporary use). - - * src/psaux/psobjs.c (ps_parser_load_field) : - Implement it. - -2012-12-21 Alexei Podtelezhnikov - - * src/tools/cordic.py: Bring up to date with trigonometric core. - -2012-12-21 Werner Lemberg - - Check parameters of `FT_Outline_New'. - Problem reported by Robin Watts . - - * src/base/ftoutln.c (FT_Outline_New_Internal): Ensure that - `numContours' and `numPoints' fit into FT_Outline's `n_points' and - `n_contours', respectively. - -2012-12-20 Werner Lemberg - - * Version 2.4.11 released. - ========================== - - - Tag sources with `VER-2-4-11'. - - * docs/CHANGES, docs/release: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.11. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.10/2.4.11/, s/2410/2411/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 11. - - * builds/unix/configure.raw (version_info): Set to 16:0:10. - - * builds/toplevel.mk (dist): Don't include `.mailmap'. - -2012-12-20 Alexei Podtelezhnikov - - [base] Improve trigonometric core. - - FreeType used to rely on a 24-step iteration CORDIC algorithm to - calculate trigonometric functions and rotate vectors. It turns out - that once the vector is in the right half-plane, the initial rotation - by 63 degrees is not necessary. The algorithm is perfectly capable - to converge to any angle starting from the second 45 degree rotation. - This patch removes the first rotation and makes it a 23-step CORDIC - algorithm. - - * src/base/fttrigon.c (FT_TRIG_SCALE, FT_TRIG_COSCALE): Update macro - values. - (ft_trig_pseudo_rotate, ft_trig_pseudo_polarize): Remove initial - rotation. - -2012-12-19 Werner Lemberg - - * src/base/ftobjs.c (ft_property_do): Fix compiler warning. - -2012-12-19 Alexei Podtelezhnikov - - * src/base/ftrfork.c (FT_Raccess_Guess): Switch to FT_Int counters. - -2012-12-19 Alexei Podtelezhnikov - - [base] Clean up trigonometric core. - - * src/base/fttrrigon.c (ft_trig_pseudo_polarize): Align algorithm - with `ft_trig_pseudo_rotate'. - -2012-12-18 Infinality - - [truetype] Minor performance enhancement. - - * src/truetype/ttgload.c: (TT_Process_Simple_Glyph): Use FT_MulFix - instead of FT_MulDiv. - -2012-12-17 Infinality - - [truetype] Remove unusued code and variables. - - * src/truetype/ttinterp.c: Updated. - (Ins_FDEF): Remove opcode patterns that are not being used. - -2012-12-16 Werner Lemberg - - Various compiler warning fixes. - - * include/freetype/internal/ftserv.h (FT_SERVICE_UNAVAILABLE): Use - `logical not' operator instead of negation. The idea is that `~' - returns exactly the data type enforced by the cast to a pointer (be - it 32bit or 64bit or whatever), while a negative integer has not - this flexibility. - * src/cache/ftccmap.c (FTC_CMAP_UNKNOWN): Ditto. - * src/truetype/ttgxvar.c (ALL_POINTS, TT_Get_MM_Var): Ditto. - * src/type/t1load.c (T1_Get_MM_Var): Ditto. - (parse_blend_axis_types): Use cast. - * src/bdf/bdflib.c (_bdf_readstream): Use cast. - -2012-12-16 Infinality - - [truetype] Remove unusued code and variables. Add minor fixes. - - * src/truetype/ttsubpix.h: Updated. - (SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions): Add Trebuchet MS. - (ALLOW_X_DMOVEX_Rules): Remove Arial characters. - (ALLOW_X_DMOVE_Rules): Remove Arial characters. - (RASTERIZER_35_Rules): Verdana no longer needs to be here. - (SKIP_IUP_Rules): Formatting fix. - (DELTAP_SKIP_EXAGGERATED_VALUES_Rules): Remove Segoe UI. - (COMPATIBLE_WIDTHS_Rules): Add Monaco and Trebuchet MS. - (X_SCALING_Rules): Add misc. corrective fixes. - - * src/truetype/ttgload.c: (TT_Process_Simple_Glyph): Adjust correction - factor for emboldening during scaling. - - * src/truetype/ttinterp.h: Updated. - (TT_ExecContextRec): Remove unused variables. - - * src/truetype/ttobjs.h: Updated. - (TT_SizeRec): Add ttfautohinted variable. - - * src/truetype/ttinterp.c: Updated. - (Ins_FDEF): Rework code to fix bugs and add more detection. - (Ins_CALL): Remove unused code. - (Ins_LOOPCALL): Remove unused code. - (TT_RunIns): Remove unusued code. - (Ins_SHPIX): Add logic to handle ttfautohinted fonts. - (Ins_MIRP): Don't round x in cut-in calculation. Add logic to handle - ttfautohinted fonts. - -2012-12-16 Werner Lemberg - - [sfnt] Fix Savannah bug #37936. - - * src/sfnt/ttload.c (tt_face_load_gasp): Avoid memory leak. - -2012-12-15 Alexei Podtelezhnikov - - [base] Fix 11-year old bug. - - Since the initial commit (ebe85f59) the value of FT_TRIG_SCALE has - always been slightly less than the correct value, which has been - given in the comment as a hexadecimal. As a result, vector lengths - were underestimated and rotated vectors were shortened. - - * src/base/fttrigon.c (FT_TRIG_SCALE): Fix macro value. - -2012-12-15 Werner Lemberg - - [bdf] Fix Savannah bug #37907. - - * src/bdf/bdflib.c (_bdf_parse_glyphs) : Normalize - negative second parameter of `ENCODING' field also. - -2012-12-15 Werner Lemberg - - [bdf] Fix Savannah bug #37906. - - * src/bdf/bdflib.c (_bdf_parse_glyphs) : Use correct array - size for checking `glyph_enc'. - -2012-12-15 Werner Lemberg - - [bdf] Fix Savannah bug #37905. - - * src/bdf/bdflib.c (_bdf_parse_start) : Reset - `props_size' to zero in case of allocation error; this value gets - used in a loop in `bdf_free_font'. - -2012-12-10 Alexei Podtelezhnikov - - [truetype] Scale F_dot_P down. - - The dot product between freeVector and projVector or cosine of - the angle between these FT_F2Dot14 unit vectors used to be scaled up - by 4 and routinely occupied 32 bits in an FT_Long field F_dot_P. - This patch scales the value down by 2^14 instead, which simplifies - its use throughout the bytecode interpreter. - - This does not lead to the loss of precision because the lower bits - are unreliable anyway. Consider two unit vectors (1,0) and (.6,.8) - for which the true value of F_dot_P is .6 * 0x40000000 = 0x26666666. - These vectors are stored as (0x4000,0) and (0x2666,0x3333) after - rounding and F_dot_P is assigned 0x26660000. The lower bits were - already lost while rounding the unit vector components. - - Besides code simplification, this change can lead to better - performance when FT_MulDiv with the scaled-down F_dot_P is less - likely to use the costly 64-bit path. We are not changing the type - of F_dot_P to FT_F2Dot14 at this point. - - * src/truetype/ttinterp.c (Compute_Funcs): Scale F_dot_P down by 14 - bits and modify its use accordingly. - (Direct_Move, Direct_Move_Orig, Compute_Point_Displacement): Modify - the use of F_dot_P field. - * src/truetype/ttobjs.c (tt_size_run_fpgm): Change arbitrary - assignment of F_dot_P to its theoretical maximum in case we decide - to scale back its type later. - -2012-12-09 Johnson Y. Yan - - [type1] Another fix for 2012-09-17 commit. - - * src/type1/t1parse.c (T1_Get_Private_Dict) : Correctly set - `limit' value. - -2012-12-06 Alexei Podtelezhnikov - - [truetype] Tweak the previous commit. - - * src/truetype/ttinterp.c (Current_Ratio): Put unit vector - components as the second TT_MulFix14 arguments. This is required - on 16-bit systems. - -2012-12-06 Alexei Podtelezhnikov - - [truetype] Microoptimizations in bytecode interpreter. - - * src/truetype/ttinterp.c (TT_DivFix14): New macro. - (Normalize): Use it here. - (Current_Ratio): Use TT_MulFix14 instead of FT_MulDiv. - (Ins_SHPIX): Cancel out two TT_MulFix14 calls. - -2012-12-05 Alexei Podtelezhnikov - - [truetype] Cosmetic improvement in bytecode interpreter. - - * src/truetype/ttinterp.c: Use explicit calls to FT_MulDiv, - FT_MulFix, and FT_DivFix instead of macros. - -2012-12-03 John Tytgat - - [pshinter] Clamp BlueScale value. - - This is Savannah bug #37856. - - * src/pshinter/pshglob.c (psh_calc_max_height): New function. - (psh_globals_new): Use it to limit BlueScale value to - `1 / max_of_blue_zone_heights'. - -2012-12-01 Alexei Podtelezhnikov - - [truetype, type1] Revise the use of FT_MulDiv. - - * src/truetype/ttgxvar.c: Updated. - * src/truetype/ttobjs.c: Updated. - * src/type1/t1load.c: Updated. - -2012-11-30 Werner Lemberg - - [configure] Preserve customized `ftoption.h'. - - Problem reported by Del Merritt . - - * builds/unix/configure.raw : Don't - remove existing FreeType configuration files. - -2012-11-29 John Tytgat - - [type1] Fix Savannah bug #37831. - - The bug report also contains a patch. - - * src/type1/t1parse.c (T1_Get_Private_Dict) : Really fix - change from 2012-09-17. - -2012-11-28 Alexei Podtelezhnikov - - [truetype] Fix formatting and typo. - -2012-11-27 Alexei Podtelezhnikov - - [cid, type1, type42] Clean up units_per_EM calculations. - - * src/cid/cidload.c (cid_parse_font_matrix): Updated. - * src/type1/t1load.c (t1_parse_font_matrix): Updated. - * src/type42/t42parse.c (t42_parse_font_matrix): Updated. - -2012-11-27 Alexei Podtelezhnikov - - [ftstroke] Minor improvement. - - * src/base/ftstroke.c: Replace nested FT_DivFix and FT_MulFix with - FT_MulDiv. - -2012-11-17 Werner Lemberg - - * src/base/fttrigon.c (ft_trig_downscale): Make 64bit version work. - -2012-11-15 Alexei Podtelezhnikov - - [base] Fix integer overflows in dd5718c7d67a. - - * src/base/ftoutln.c (FT_Outline_EmboldenXY): Use FT_MulDiv. - -2012-11-15 Werner Lemberg - - [autofit] Trace stem widths. - - * src/autofit/aflatin.c (af_latin_metrics_init_widths): Add some - FT_TRACE calls. - -2012-11-13 Werner Lemberg - - [cff] Add support for OpenType Collections (OTC). - - * src/cff/cffload.c (cff_font_load): Separate subfont and face - index handling to load both pure CFFs with multiple subfonts and - OTCs (with multiple faces where each face holds exactly one - subfont). - * src/cff/cffobjs.c (cff_face_init): Updated. - -2012-11-12 Werner Lemberg - - [autofit] Minor improvement. - - * src/autofit/aflatin.c (af_latin_hints_compute_blue_edges): Fix - loop. - -2012-11-10 Werner Lemberg - - [autofit] Improve tracing. - - * src/autofit/aflatin.c (af_latin_hint_edges) - [FT_DEBUG_LEVEL_TRACE]: Count number of actions and emit something - if there weren't any. - -2012-11-04 Alexei Podtelezhnikov - - [base] Fortify emboldening code against egregious distortions. - - * src/base/ftoutln.c (FT_Outline_EmboldenXY): Threshold emboldening - strength when it leads to segment collapse. - -2012-11-03 Alexei Podtelezhnikov - - [base] Clean up emboldening code and improve comments there. - - * src/base/ftoutln.c (FT_Outline_EmboldenXY): Replace sequential - calls to FT_MulFix and FT_DivFix with FT_MulDiv. - Mention that bisectors are used to figure out the shift direction. - -2012-10-24 Werner Lemberg - - [autofit] Add standard character to `AF_ScriptClassRec' structure. - - * src/autofit/aftypes.h (AF_ScriptClassRec): Add `standard_char' - member. - (AF_DEFINE_SCRIPT_CLASS): Updated. - - * src/autofit/aflatin.c (af_latin_metrics_init_widths): Use it. - (af_latin_metrics_init, af_latin_script_class): Updated. - - * src/autofit/aflatin.c (af_latin2_metrics_init_widths): Use it. - (af_latin2_metrics_init, af_latin2_script_class): Updated. - - * src/autofit/afcjk.c (af_cjk_metrics_init_widths): Use it. - (af_cjk_metrics_init, af_cjk_script_class): Updated. - - * src/autofit/afindic.c (af_indic_metrics_init, - af_indic_script_class): Updated. - - * src/autofit/afcjk.h, src/autofit/aflatin.h: Updated. - - * src/autofit/afdummy.c: Updated. - -2012-10-24 Werner Lemberg - - [autofit] Only use Unicode CMap. - - * src/autofit/aflatin.c (af_latin_metrics_init): Implement it, to be - in sync with `af_face_globals_compute_script_coverage'. - -2012-10-21 Werner Lemberg - - [psaux] Improve parsing of invalid numbers. - - * src/psaux/psconv.c (PS_Conv_Strtol): Always parse complete number, - even in case of overflow. - (PS_Conv_ToInt): Only increase cursor if parsing was successful. - (PS_Conv_ToFixed): Ditto. - Trace underflow and data error. - -2012-10-21 Werner Lemberg - - [smooth] Improve tracing. - - * src/smooth/ftgrays.c (gray_sweep): Trace last sweep line of - current band also. - -2012-10-20 Alexei Podtelezhnikov - - [truetype] Cheaper way to threshold angles between vectors. - - * src/truetype/ttinterp.c (Ins_ISECT): Thresholding tangent is a lot - cheaper than thresholding sine. - -2012-10-20 Werner Lemberg - - [cff] Improve parsing of invalid real numbers. - - * src/cff/cffparse.c (cff_parse_real): Always parse complete number, - even in case of overflow or underflow. - Also trace one more underflow. - -2012-10-20 Andreas Pehnack - - [sfnt] Load pure CFF fonts wrapped in SFNT container. - - Such fonts only have a `cmap' and a `CFF' table. - - * src/sfnt/ttload.c (tt_face_load_font_dir): Don't call - `check_table_dir' if font signature is `OTTO'. - -2012-10-20 Werner Lemberg - - [psaux] Fix some value overflows and improve tracing. - - * src/psaux/psconv.c: Include FT_INTERNAL_DEBUG_H. - (FT_COMPONENT): Define. - (PS_Conv_Strtol): Return FT_Long. - Handle bad data and overflow. - Emit some tracing messages in case of error. - (PS_Conv_ToInt): Return FT_Long. - (PS_Conv_ToFixed): Updated. - * src/psaux/psconv.h: Updated. - - * include/freetype/internal/fttrace.h: Add `psconv'. - -2012-10-20 Werner Lemberg - - [autofit] Fix `make multi CC=c++'. - - * src/autofit/aflatin.c, src/autofit/aflatin2.c: Include - `afglobal.h'. - * src/autofit/afloader.c: Fix order of header files. - * src/autofit/afmodule.c: Include `afglobal.h' and `aferrors.h'. - -2012-10-19 Werner Lemberg - - [cff] Fix more value errors and improve tracing. - - * src/cff/cffparse.c (cff_parse_integer): Emit tracing message in - case of error. - (cff_parse_real): Handle and trace overflow, underflow, and bad data - consistently. - (do_fixed): New helper function, handling and tracing overflow. - (cff_parse_fixed, cff_parse_fixed_scaled): Use `do_fixed'. - -2012-10-17 Werner Lemberg - - [psaux] Fix some value overflows. - - * src/psaux/psconv.c (PS_Conv_ToFixed): Implement it. - -2012-10-17 Bram Tassyns - - [cff] Fix value overflow. - - * src/cff/cffparse.c (cff_parse_fixed_scaled): Implement it. - -2012-10-17 Werner Lemberg - - [truetype] Fix Savannah bug #37572. - - * src/truetype/ttinterp.c (Ins_ISECT): Use angle between vectors to - avoid grazing intersections. The previous threshold was too coarse, - incorrectly rejecting short but valid vectors. - -2012-09-30 Gilles Espinasse - - Remove useless `rm' detection. - - `rm -f' is directly used in the `configure' script created by - autoconf, thus no availability test is necessary. - - * builds/unix/configure.raw (RMF): Remove test. - * builds/unix/unix-def.in (DELETE): Updated. - -2012-09-29 Werner Lemberg - - [autofit] Minor optimization. - - * src/autofit/afglobals.c (af_face_globals_compute_script_coverage): - Add loop condition. - -2012-09-29 Werner Lemberg - - [autofit] Fix thinko. - - * src/autofit/aftypes.h (AF_SCRIPT): - s/AF_SCRIPT_NONE/AF_SCRIPT_DUMMY/. We already use `AF_SCRIPT_NONE' - as a bit mask. - - * src/autofit/afdummy.c: Updated. - -2012-09-18 Werner Lemberg - - [autofit] Implement `increase-x-height' property. - - * include/freetype/ftautoh.h (FT_Prop_IncreaseXHeight): New - structure. - - * include/autofit/afmodule.c (af_property_get_face_globals): New - function, re-using code from `af_property_get'. - (af_property_set, af_property_get): Handle `increase-x-height'. - Updated. - -2012-09-18 Werner Lemberg - - [autofit] Implement Infinality's `increase glyph heights'. - - This is an improved version of a similar fix contained in the - so-called `Infinality patch', taken from - - http://www.infinality.net/fedora/linux/zips/freetype-infinality-2.4.10-20120616_01-x86_64.tar.bz2 - - which addresses various enhancements of the auto-hinter. Without - properties to control a module's metadata it wasn't possible to - adapt the patches because everything was originally controlled by - environment variables which I consider not suitable in general. - - A patch to control `increase_x_height' follows. - - * src/autofit/afglobal.h (AF_PROP_INCREASE_X_HEIGHT_MIN, - AF_PROP_INCREASE_X_HEIGHT_MAX): New macros. - (AF_FaceGlobalsRec): Add `increase_x_height' member. - * src/autofit/afglobal.c (af_face_globals_new): Initialize it. - - * src/autofit/aflatin.c (af_latin_metrics_scale_dim), - * src/autofit/aflatin2.c (af_latin2_metrics_scale_dim): Implement - handling of `increase_x_height'. - -2012-09-18 Werner Lemberg - - [autofit] Add hierarchical property access to some structures. - - * src/autofit/afglobal.h: Include `afmodule.h'. - (AF_FaceGlobalsRec): Add `module' member. - (AF_FaceGlobals): Typedef moved to... - * src/autofit/aftypes.h: Here. - (AF_ScriptMetricsRec): Add `globals' member. - - * src/autofit/afglobal.c (af_face_globals_new, - af_face_globals_compute_script_coverage, - af_face_globals_get_metrics): Updated. - - * src/autofit/afloader.c (af_loader_reset), src/autofit/afmodule.c - (af_property_get): Updated. - -2012-09-17 Werner Lemberg - - [type1] Fix Savannah bug #37350. - - * src/type1/t1parse.c (T1_Get_Private_Dict) : Check for ASCII - storage only if we actually have at least four bytes. - -2012-09-15 Werner Lemberg - - [autofit] Implement `fallback-script' property. - - * src/autofit/afglobal.c: s/default_script/fallback_script/. - * src/autofit/afglobal.h: s/AF_SCRIPT_DEFAULT/AF_SCRIPT_FALLBACK/. - - * src/autofit/afmodule.c: s/default_script/fallback_script/. - (af_property_set, af_property_get): Implement `fallback-script'. - * src/autofit/afmodule.h: s/default_script/fallback_script/. - - * include/freetype/ftautoh.h: Document it. - -2012-09-15 Werner Lemberg - - [autofit] Correct previous Unicode 6.1.0 change. - - The auto-hinter's latin module only handles latin ligatures in the - `Alphabetical Presentation Forms' block. - - * src/autofit/aflatin.c (af_latin_uniranges): Fix it. - -2012-09-15 Werner Lemberg - - * src/autofit/afmodule.c: s/FT_Err_/AF_Err_/. - -2012-09-15 Werner Lemberg - - [autofit] Make default script a global property. - - * src/autofit/afmodule.h (AF_ModuleRec): Add `default_script' field. - - * src/autofit/afglobal.c (af_face_globals_compute_script_coverage, - af_face_globals_new), src/autofit/afloader.c (af_loader_reset), - src/autofit/afmodule.c (af_property_get) , - af_autofitter_init: - Handle default script. - - * src/autofit/afglobal.h: Updated. - -2012-09-15 Werner Lemberg - - Use `FT_Module' instead of `FT_Library' argument in property funcs. - - This internal change simplifies access to global module data. - - * include/freetype/internal/services/svprop.h - (FT_Properties_SetFunc, FT_Properties_GetFunc): Change accordingly. - - * src/base/ftobjs.c (ft_property_do), src/autofit/afmodule.c - (af_property_set, af_property_get): Updated. - -2012-09-14 Werner Lemberg - - [autofit] Update to Unicode 6.1.0. - - * src/autofit/afcjk.c (af_cjk_uniranges), src/autofit/aflatin.c - (af_latin_uniranges): Add and fix ranges. - -2012-09-14 Werner Lemberg - - [autofit] Pass `AF_Module' instead of `AF_Loader'. - - We want to access the (not yet existing) module's global data later - on. - - * src/autofit/afloader.c: Include `afmodule.h'. - (af_loader_init, af_loader_reset, af_loader_done, - af_loader_load_glyph): Change accordingly. - * src/autofit/afmodule.c (AF_ModuleRec): Move to `afmodule.h'. - Updated. - - * src/autofit/afmodule.h: Include `afloader.h'. - (AF_ModuleRec): Define here. - * src/autofit/afloader.h (AF_Module): Define here. - Updated. - -2012-09-14 Werner Lemberg - - [autofit] Fix `make multi'. - - * include/freetype/internal/fttrace.h: Add `afmodule'. - * src/autofit/afmodule.c: Include FT_INTERNAL_DEBUG_H. - (FT_COMPONENT): Define. - -2012-09-14 Werner Lemberg - - * src/autofit/afmodule.c: s/FT_Autofitter/AF_Module/. - -2012-09-12 Werner Lemberg - - [autofit] Minor reorganization. - - * src/autofit/afglobal.c (AF_SCRIPT_LIST_DEFAULT, - AF_SCRIPT_LIST_NONE, AF_DIGIT): Move to... - * src/autofit/afglobal.h (AF_SCRIPT_DEFAULT, AF_SCRIPT_LIST_NONE, - AF_DIGIT): This and update code. - -2012-09-01 Werner Lemberg - - [autofit] Implement `glyph-to-script-map' property. - - * include/freetype/ftautoh.h: New public header file. - * include/freetype/config/ftheader.h (FT_AUTOHINTER_H): New macro. - - * src/autofit/afglobal.c (AF_FaceGlobalsRec): Move structure to... - * src/autofit/afglobal.h: This header file. - * src/autofit/afmodule.c: Include FT_AUTOHINTER_H. - (af_property_get): Handle `glyph-to-script-map'. - -2012-08-31 Werner Lemberg - - [autofit] Implement properties service framework. - - No properties are added yet. - - * src/autofit/afmodule.c: Include FT_SERVICE_PROPERTIES_H. - (af_property_set, af_property_get): New dummy functions. - (af_service_properties, af_services, af_get_interface): Provide - service setup. - (autofit_moduleclass): Add service interface. - - * src/autofit/afpic.c: Add necessary forward declarations. - (autofit_module_class_pic_init): Add code for service addition. - (autofit_module_pic_free): Add code for service removal. - * src/autofit/afpic.h (AF_SERVICES_GET, AF_SERVICE_PROPERTIES_GET): - New macros which provide necessary syntactical sugar for PIC - support. - -2012-08-30 Werner Lemberg - - Implement properties to control FreeType modules. - - * include/freetype/fterrdef.h (FT_Err_Missing_Property): New error - code. - * include/freetype/ftmodapi.h (FT_Property_Set, FT_Property_Get): - New API. - - * include/freetype/internal/services/svprop.h: New file. - * include/freetype/internal/ftserv.h (FT_SERVICE_PROPERTIES_H): New - macro. - - * src/base/ftobjs.c: Include FT_SERVICE_PROPERTIES_H. - (ft_property_do, FT_Property_Set, FT_Property_Get): New functions. - -2012-08-29 Werner Lemberg - - [docmaker] Allow `-' in tags and identifiers. - - * src/tools/docmaker/content.py (re_identifier), - src/tools/docmaker/sources.py (re_markup_tag1, re_markup_tag2, - re_crossref): Add `-' in patterns. - -2012-08-27 Werner Lemberg - - [FT_CONFIG_OPTION_PIC] Fix g++ 4.6.2 compiler warnings. - - * include/freetype/internal/ftdriver.h (FT_DEFINE_DRIVER), - include/freetype/internal/ftobjs.h (FT_DEFINE_RENDERER, - FT_DEFINE_MODULE), include/freetype/internal/ftserv.h - (FT_DEFINE_SERVICEDESCREC1, FT_DEFINE_SERVICEDESCREC2, - FT_DEFINE_SERVICEDESCREC3, FT_DEFINE_SERVICEDESCREC4, - FT_DEFINE_SERVICEDESCREC5, FT_DEFINE_SERVICEDESCREC6), - src/autofit/afpic.c (autofit_module_class_pic_init), - src/base/basepic.c (ft_base_pic_init), src/base/ftinit.c - (ft_create_default_module_classes), src/cff/cffparse.c - (FT_Create_Class_cff_field_handlers), src/cff/cffpic.c - (cff_driver_class_pic_init), src/pshinter/pshpic.c - (pshinter_module_class_pic_init), src/psnames/pspic.c - (psnames_module_class_pic_init), src/raster/rastpic.c - (ft_raster1_renderer_class_pic_init), src/sfnt/sfntpic.c - (sfnt_module_class_pic_init), src/sfnt/ttcmap.c - (FT_Create_Class_tt_cmap_classes), src/smooth/ftspic.c - (ft_smooth_renderer_class_pic_init), src/truetype/ttpic.c - (tt_driver_class_pic_init): Initialize allocation variable. - -2012-08-27 Werner Lemberg - - [truetype] Fix compilation warning. - - * src/truetype/ttgload.c (IS_HINTED): Move macro to... - * src/truetype/ttobjs.h: This header file. - -2012-08-27 Werner Lemberg - - [autofit, cff, pshinter, psnames] More renamings for orthogonality. - - * src/autofit/afmodule.c, src/autofit/afpic.h: - s/AF_AUTOFITTER_/AF_/. - - * src/cff/cffdrivr.c, src/cff/cffobjs.c, src/cff/cffparse.c, - src/cff/cffpic.h: s/FT_CFF_/CFF_/. - - * src/pshinter/pshmod.c, src/pshinter/pshpic.h: - s/FT_PSHINTER_/PSHINTER_/. - - * src/psnames/psmodule.c, src/psnames/pspic.h: - s/FT_PSCMAPS/PSCMAPS_/. - -2012-08-27 Werner Lemberg - - [sfnt, truetype] More renamings for orthogonality. - - * src/sfnt/sfdriver.c, src/sfnt/sfntpic.h, src/sfnt/ttcmap.c, - src/truetype/ttdriver.c, src/truetype/ttpic.h: s/FT_SFNT_/SFNT_/, - s/FT_TT_/TT_/, s/GET_CMAP_INFO_GET/CMAP_INFO_GET/. - -2012-08-27 Werner Lemberg - - [autofit] Some macro and variable renamings for orthogonality. - - * include/freetype/internal/autohint.h, src/base/ftobjs.c, - src/autofit/afmodule.c, src/autofit/afpic.c, src/autofit/afpic.h: - s/SERVICE/INTERFACE/, s/service/interface/, s/Service/Interface/. - -2012-08-26 Werner Lemberg - - Fix Savannah bug #37178. - - * src/base/ftobjs.c (FT_Open_Face): Initialize `error' with - `FT_Err_Missing_Module' before loop to indicate `no valid drivers'. - -2012-08-17 Werner Lemberg - - * src/base/ftsynth.c (FT_GlyphSlot_Oblique): Fix shear angle. - - The old value was far too large (more than 20°). The new one - corresponds to 12°, quite common in typography. - -2012-08-12 Alexei Podtelezhnikov - - [smooth] Fix Savannah bug #37017. - - * src/smooth/ftgrays.c (gray_render_cubic): Use a different set of - checks when detecting super curvy splines to be split. - -2012-08-05 Werner Lemberg - - [autofit] Improve recognition of flat segments. - - Problem reported by Brad Dunzer . - - * src/autofit/aflatin.c (af_latin_metrics_init_blues): We have - a flat segment if the horizontal distance of best on-points is - larger than a given threshold. - -2012-08-05 Werner Lemberg - - [autofit] Variable renamings. - - * src/autofit/aflatin.c (af_latin_metrics_init_blues): Replace - `glyph' with `outline'. - s/best_first/best_contour_first/. - s/best_last/best_contour_last/. - -2012-07-31 Werner Lemberg - - [type1] Fix Savannah bug #37000. - - * src/type1/t1load.c (parse_encoding): Fix order of checks. - -2012-07-17 Werner Lemberg - - [psaux] Fix Savannah bug #36833. - - * src/psaux/t1decode.c (t1operator_seac): `seac' is not a valid - operator if we want metrics only. - -2012-07-16 Werner Lemberg - - [type1] Fix Savannah bug #36832. - - * src/type1/t1load.c (parse_charstrings): Reject negative number of - glyphs. - -2012-07-13 Werner Lemberg - - [type1] Fix Savannah bug #36829. - - * src/type1/t1load.c (parse_encoding): Check cursor position after - call to T1_Skip_PS_Token. - -2012-07-12 Alexei Podtelezhnikov - - Revert the last commit 45337b07. - - * src/base/ftstroke.c (FT_Stroker_New): Revert the previous change. - -2012-07-11 Alexei Podtelezhnikov - - [ftstroke] Fix uninitialized return value. - - * src/base/ftstroke.c (FT_Stroker_New): Return FT_Err_Ok instead. - -2012-07-11 Werner Lemberg - - [smooth] Avoid memory leak in case of failure. - - * src/smooth/ftsmooth.c (ft_smooth_render_generic): Use flags to - indicate what to clean up after finishing the function, with and - without errors. - -2012-07-09 Werner Lemberg - - Fix compilation with MSVC 5.0. - - Problem reported by Peter Breitenlohner and Akira Kakuto. - - * include/freetype/config/ftstdlib.h (ft_setjmp): Updated. - * src/sfnt/ttcmap.c (tt_face_build_cmaps): Remove cast. - -2012-07-09 Werner Lemberg - - [autofit] Improve debugging messages; do some code cleanup. - - * src/autofit/aflatin.c (af_latin_align_linked_edge, - af_latin_hint_edges): Synchronize with formatting used in the - ttfautohint project. - -2012-07-07 Gilles Espinasse - - Fix strict-aliasing warning. - - * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Avoid double cast. - -2012-07-07 Dave Thomas - - [ARM] Fix FT_MulFix_arm. - - * include/freetype/config/ftconfig.h (FT_MulFix_arm) [__arm__]: - Avoid ADDS instruction to clobber condition codes. - -2012-07-06 Werner Lemberg - - [autofit] Do some code cleanup. - - * src/autofit/afglobal.c (af_face_globals_new): Simplify. - - * src/autofit/afhints.c: Use `FT_TRACE7' instead of `printf' - everywhere. - (FT_COMPONENT): New macro. - (af_glyph_hints_done): Simplify. - - * include/freetype/internal/fttrace.h: Updated. - -2012-07-05 Werner Lemberg - - [autofit] Improve output of debugging information. - - * src/autofit/afhints.c (af_glyph_hints_dump_segments): Print more - data; report no data. - (af_glyph_hints_dump_edges): Report no data. - -2012-07-04 Werner Lemberg - - [autofit] Fix Savannah bug #36091. - - * src/autofit/aflatin.c (af_latin_metrics_init_blues), - src/autofit/aflatin2.c (af_latin2_metrics_init_blues): Change the - constraint for testing round vs. flat segment: Accept either a - small distance or a small angle. - -2012-07-04 Werner Lemberg - - [autofit] Beautify blue zone tracing. - - * src/autofit/aflatin.c (af_latin_metrics_init_blues), - src/autofit/aflatin2.c (af_latin2_metrics_init_blues): Implement it. - -2012-07-03 Werner Lemberg - - [autofit] Quantize stem widths. - - * src/autofit/afangles.c (af_sort_widths): Rename to... - (af_sort_and_quantize_widths): This. - Add code to avoid stem widths which are almost identical. - * src/autofit/aftypes.h, src/autofit/aflatin.c, src/autofit/afcjk.c: - Updated. - -2012-07-03 Werner Lemberg - - [autofit] Minor speed-up. - - * src/autofit/afangles (af_sort_pos, af_sort_widths): Don't swap - elements if they are equal. - -2012-06-30 Gilles Espinasse - - Fix `checking if gcc static flag -static works' test. - - On my linux build tree, I receive yes answer in in every package I - build except freetype for this test checking if gcc static flag - `-static' works - - On freetype, no is received, unless bzip2 and zlib are disabled using - - ./configure --without-bzip2 --without-zlib - - The reason is that bzip2 and zlib tests add `-lz' and `-lbz2' to - LDFLAGS and this broke static flag test. - - * builds/unix/configure.raw: Update CFLAGS and LDFLAGS only after - LT_INIT has run. - -2012-06-28 Infinality - - [truetype] Fix various artifacts. - - Verdana was broken in the original Infinality commit. Also - includes other minor fixes. - - * src/truetype/ttsubpix.h: Updated. Removed unused macros. - (RASTERIZER_35_Rules): Add Verdana. - (SKIP_NONPIXEL_Y_MOVES_Rules): Add Tahoma `s'. - (MIRP_CVT_ZERO_Rules): Remove Verdana. - (ALWAYS_SKIP_DELTAP_Rules): Add Russian char 0x438. - (COMPATIBLE_WIDTHS_Rules): Rearrange some rules. - (X_SCALING_Rules): Adjust Verdana `a' at 12 and 13 ppem. - - * src/truetype/ttsubpix.c: Updated. - (sph_set_tweaks): Re-execute fpgm always. - -2012-06-28 Gilles Espinasse - - Fix CFLAGS and LDFLAGS share configure test. - - * builds/unix/configure.raw: Fix typo. - -2012-06-28 Werner Lemberg - - [truetype] Set the `subpixel_positioned' flag unconditionally. - - This is how the code currently behaves. - - * src/truetype/ttgload.c (tt_loader_init): Do it. - -2012-06-27 Werner Lemberg - - Fix conditional compilation. - - * src/base/basepic.c: Use FT_CONFIG_OPTION_MAC_FONTS. - -2012-06-27 Werner Lemberg - - Fix conditional compilation. - - * include/freetype/internal/ftcalc.h (FT_MulDiv_No_Round): Don't - enclose with `TT_USE_BYTECODE_INTERPRETER'; we now need the function - elsewhere also. - - * src/autofit/afcjk.h: Use AF_CONFIG_OPTION_CJK. - - * src/truetype/ttgload.c (tt_loader_init): Fix compiler warning. - - * src/truetype/ttinterp.c (Ins_MSIRP): Fix compiler warning. - - * src/truetype/ttinterp.h: Use - TT_CONFIG_OPTION_BYTECODE_INTERPRETER. - -2012-06-26 Infinality - - [truetype] Remove unused rounding functionality. - - The subpixel hinting patch contained the concept of an adjustable - number of gridlines per pixel. This is no longer used due to x - being completely ignored instead. This will return some of the - code to its existing state prior to the original Infinality - commit. - - * include/freetype/internal/ftobjs.h (FT_PIX_FLOOR_GRID, - FT_PIX_ROUND_GRID, FT_PIX_CEIL_GRID): Removed. - - * src/truetype/ttinterp.c: Updated. - (Round_None, Round_To_Grid, Round_To_Half_Grid, Round_Down_To_Grid, - Round_Up_To_Grid, Round_To_Double_Grid, Round_Super, Round_Super_45, - SetSuperRound): Remove parameter to handle the number of grid lines per - pixel. - (SET_SuperRound, ROUND_None, CUR_Func_round): Updated. - (DO_SROUND, DOS45ROUND, DO_ODD, DO_EVEN): Updated. - (DO_ROUND, DO_NROUND): Updated. - (Move_Zp2_Point, Ins_SHPIX, Ins_MSIRP, Ins_MDAP, Ins_MIAP, - Ins_MDRP, Ins_MIRP): Perform Round_None instead of calling a modified - rounding function. Remove gridlines_per_pixel. Create a local - variable to store control value cutin. Simplify the conditional for - ignore_x_mode. Adjust rounding calls to pass only two values. - -2012-06-25 Werner Lemberg - - [cff] Fix Savannah bug #36705. - - Handle numbers like 2.001 correctly. - - * src/cff/cffparse.c (cff_parse_real): Avoid negative values for - `shift'. - -2012-06-18 Infinality - - [truetype] Support subpixel hinting. - - This is the large, famous `Infinality' patch to support ClearType - bytecode which has been available from - http://www.infinality.net/blog/ for some time, and which has been - refined over the last years. While still experimental, it is now - mature enough to be included directly into FreeType. - - Most of the code is based on the ClearType whitepaper written by - Greg Hitchcock - - http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx - - which gives a detailed overview of the necessary changes to the - Microsoft rasterizer so that older fonts are supported. However, a - lot of details are still missing, and this patches provides a - framework to easily handle rendering issues down to the glyph level - of certain fonts. - - Note that ClearType support is not completely implemented! In - particular, full support for the options `compatible_widths', - `symmetrical_smoothing, and `bgr' (via the GETINFO bytecode - instruction) is missing. - - * src/truetype/ttsubpix.c: New file, providing code to handle - `tweaks', this is, rules for certain glyphs in certain fonts - (including wildcards) which need a special treatment. - - * src/truetype/ttsubpix.h: New file, holding the tweaking rules. - - * include/freetype/config/ftoption.h, src/devel/ftoption.h - (TT_CONFIG_OPTION_SUBPIXEL_HINTING): New macro. - - * include/freetype/internal/ftobjs.h (FT_PIX_FLOOR_GRID, - FT_PIX_ROUND_GRID, FT_PIX_CEIL_GRID): New macros. - - * src/truetype/truetype.c [TT_USE_BYTECODE_INTERPRETER]: Include - `ttsubpix.c'. - - * src/truetype/ttgload.c: Include `ttsubpix.h'. - [All changes below are guarded by TT_CONFIG_OPTION_SUBPIXEL_HINTING.] - - (tt_get_metrics): Set tweak flags. - (TT_Hint_Glyph): Call `FT_Outline_EmboldenXY' if necessary. - (TT_Process_Simple_Glyph): Compensate emboldening if necessary. - (compute_glyph_metrics): Handle `compatible widths' option. - (tt_loader_init): Handle ClearType GETINFO information bits. - - * src/truetype/rules.mk (TT_DRC_SRC): Updated. - - * src/truetype/ttinterp.c: Include `ttsubpix.h'. - [Where necessary, changes below are guarded by - TT_CONFIG_OPTION_SUBPIXEL_HINTING.] - - (Direct_Move, Direct_Move_X): Extended. - (Round_None, Round_To_Grid, Round_To_Half_Grid, Round_Down_To_Grid, - Round_Up_To_Grid, Round_To_Double_Grid, Round_Super, Round_Super_45, - SetSuperRound): Add parameter to handle the number of grid lines per - pixel. - (SET_SuperRound, ROUND_None, CUR_Func_round): Updated. - (DO_SROUND, DOS45ROUND, DO_ODD, DO_EVEN): Updated. - (DO_ROUND, DO_NROUND): Updated. - (DO_RS): Take care of `Typeman' bytecode patterns. - (Ins_FDEF): Add some debugging code. Commented out. - (Ins_ENDF): Restore state. - (Ins_CALL, Ins_LOOPCALL): Handle inline delta functions. - (Ins_MD): Handle `Vacuform' rounds. - (Move_Zp2_Point, Ins_SHPIX, Ins_MSIRP, Ins_MDAP, Ins_MIAP, - Ins_MDRP, Ins_MIRP): Handle tweaks. - (Ins_ALIGNRP): Add tweak guard. - (Ins_IUP, Ins_DELTAP): Handle tweaks. - (Ins_GETINFO): Handle new ClearType bits. - (TT_RunIns): Handle tweaks. - - * src/truetype/ttinterp.h: Updated. - (SPH_TweakRule, SPH_ScaleRule): New structures for tweaks. - (TT_ExecContextRec): Add members for subpixel hinting support. - - * src/truetype/ttobjs.h (TT_DefRecord): Add `inline_delta' member. - -2012-06-15 Werner Lemberg - - * Version 2.4.10 released. - ========================= - - - Tag sources with `VER-2-4-10'. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.10. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.9/2.4.10/, s/249/2410/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 10. - - * builds/unix/configure.raw (version_info): Set to 15:0:9. - -2012-06-15 Alexei Podtelezhnikov - - * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Improve spacing. - - * docs/CHANGES: Updated. - -2012-06-14 suzuki toshiya - - * builds/exports.mk: Add CCexe_CFLAGS and CCexe_LDFLAGS. - - to pass special compiler/linker flags under cross development. - Suggested by Savannah bug #36367. - - ChangeLog on 2010-07-15 saying as they were removed was wrong - for the official trunk of FreeType2. This commit is the first - introduction of them. - -2012-06-14 Werner Lemberg - - * docs/CHANGES: Updated. - -2012-06-14 suzuki toshiya - - [truetype] Add new versions of NEC FA family to tricky font list. - - NEC FA family dated in 1996 have different checksum. - Reported by Johnson Y. Yan ; see - - http://lists.gnu.org/archive/html/freetype-devel/2012-06/msg00023.html - - * src/truetype/ttobjs.c (tt_check_trickyness_sfnt_ids): 4 sets - of fpgm & prep table checksums for FA-Gothic, FA-Minchou, - FA-RoundedGothicM, FA-RoundedGothicB are added. The family - names in sample PDF are truncated, thus the list of the - family names in tt_check_trickyness_family() is not updated yet. - -2012-06-06 Werner Lemberg - - [ftraster] Fix rounding issue causing visual artifacts. - - Problem reported by jola ; see - - http://lists.gnu.org/archive/html/freetype-devel/2012-05/msg00036.html - - * src/raster/ftraster.c (SMulDiv_No_Round): New macro. - (Line_Up): Use it. - * src/raster/ftmisc.h (FT_MulDiv_No_Round): Copied from `ftcalc.c'. - -2012-05-28 Alexei Podtelezhnikov - - * src/base/ftoutln.c (FT_Outline_Get_Orientation): Simplify. - - We now use the cross product of the direction vectors to compute the - outline's orientation. - -2012-05-28 Werner Lemberg - - * docs/CHANGES: Updated. - -2012-05-28 Alexei Podtelezhnikov - - New function FT_Outline_EmboldenXY. - - * include/freetype/ftoutln.h (FT_Outline_EmboldenXY): Define it. - - * src/base/ftoutln.c (FT_Outline_EmboldenXY): Implement it, using a - simplified embolding algorithm. - (FT_Outline_Embolden): Make it a special case of - `FT_Outline_EmboldenXY' - -2012-05-07 Werner Lemberg - - [type1] Fix Savannah bug #36386. - - * src/type1/t1load.c (t1_load_keyword): Ignore keyword if context is - not valid. - -2012-04-07 Werner Lemberg - - Remove compiler warning. - - * src/truetype/ttgload.c (TT_Load_Glyph) - [!TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Access `glyph->face' directly. - -2012-03-28 Werner Lemberg - - [autofit] Properly copy scaler flags to script metrics object. - - Without this patch, only the dummy and cjk autohinter modules get - them (since they copy the whole scaler object). - - * src/autofit/aflatin.c (af_latin_metrics_scale), - src/autofit/aflatin2.c (af_latin2_metrics_scale): Implement it. - -2012-03-22 Alexei Podtelezhnikov - - [bdflib] Remove redundant macro. - - * src/bdf/bdflib.c (isdigok): Remove and replace with sbitset, which - is exactly the same. - -2012-03-20 suzuki toshiya - - [configure] Fix Savannah bug #35644. - - * builds/unix/configure.raw: Check `-ansi' flag works even if gcc - is used. Bionic libc headers for Android lose the consistency - when they are parsed with __STDC_VERSION__ older than 199901L or - __STRICT_ANSI__. - -2012-03-20 Werner Lemberg - - [bdf] Improvement to Savannah bug #35656. - - * src/bdf/bdflib.c (isdigok): Add cast, as suggested in report. - -2012-03-17 Chris Liddell - - [type1] Fix Savannah bug #35847. - - * src/type1/t1load.c (parse_subrs): Fix the loop exit condition; - we want to exit when we have run out of data. - -2012-03-16 Werner Lemberg - - [bdf] Really fix Savannah bug #35658. - - * src/bdf/bdflib.c (_bdf_list_split): Add one more `field' initializer. - -2012-03-14 Yann Droneaud - - [sfnt] Make arrays static like all others. - - * src/sfnt/ttload.c (tt_face_load_maxp, tt_face_load_os2), - src/sfnt/ttmtx.c (tt_face_load_hhea): Add `static' keyword to frame - fields. - -2012-03-14 Huw Davies - - [sfnt] A refinement of the previous commit. - - * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_utf16, - tt_name_entry_ascii_from_other): Stop at null byte. - -2012-03-14 Huw Davies - - [sfnt] Add `name' table compatibility to MS Windows. - - * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_utf16, - tt_name_entry_ascii_from_other): Don't replace `\0' with question - marks when converting strings. - -2012-03-14 Werner Lemberg - - [type1] Fix Savannah bug #35833. - - Based on the patch given in the bug report. - - * src/type1/t1load.c (IS_INCREMENTAL): New macro. - (read_binary_data): Add parameter `incremental'. - Update all callers using `IS_INCREMENTAL'. - -2012-03-11 Werner Lemberg - - [autofit] Return correct linear advance width values. - - This was quite a subtle bug which accidentally showed up with glyph - `afii10023' of arial.ttf (version 2.76). This glyph is a composite; - the first component, `E', has an advance width of 1366 font units, - while the advance width of the composite itself (which looks like - uppercase `E' with dieresis) is 1367 font units. I think this is - actually a bug in the font itself, because there is no reason that - this glyph has not the same width as uppercase `E' without the - dieresis. Anyway, it helped identify this problem. - - Using the TrueType hinter, the correct value (1367) of `afii10023' - was returned, but the autohinter mysteriously returned 1366. - - Digging in the code showed that the autohinter recursively calls - FT_Load_Glyph to load the glyph, adding the FT_LOAD_NO_SCALE load - flag. However, the `linearHoriAdvance' field is still returned as a - scaled value. To avoid scaling twice, the old code in autofit reset - `linearHoriAdvance', using the `horiAdvance' field. This seemed to - work since FT_LOAD_NO_SCALE was in use, but it failed actually, - because `horiAdvance' is defined as the distance of the first - subglyph's phantom points, which in turn are initialized using the - advance width of the first subglyph. And as the given example - shows, these widths can differ. - - * src/autofit/afloader.c (af_loader_load_g): Temporarily set - FT_LOAD_LINEAR_DESIGN while calling FT_Load_Glyph to get unscaled - values for the linear advance widths. - -2012-03-10 Werner Lemberg - - [truetype] Fix SSW instruction. - - * src/truetype/ttinterp.c (DO_SSW): SSW *does* use font units. For - verification, it took some time to find a font which actually uses - this instruction. - -2012-03-09 Vinnie Falco - - Prepare source code for amalgamation. - - * include/freetype/freetype.h: Swap order of preprocessor blocks. - -2012-03-08 Werner Lemberg - - * Version 2.4.9 released. - ========================= - - - Tag sources with `VER-2-4-9'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.9. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.8/2.4.9/, s/248/249/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 9. - - * builds/unix/configure.raw (version_info): Set to 14:1:8. - -2012-03-08 Werner Lemberg - - [bdf] Add missing overflow check. - - * src/bdf/bdflib.c (_bdf_parse_glyphs) : Add threshold for - `glyph->bpr'. - -2012-03-07 Vinnie Falco - - Prepare source code for amalgamation. - - * src/autofit/aferrors.h, src/bdf/bdferror.h, src/bzip2/ftbzip2.c, - src/cache/ftcerror.h, src/cff/cfferrs.h, src/cid/ciderrs.h, - src/gxvalid/gxverror.h, src/gzip/ftgzip.c, src/lzw/ftlzw.c, - src/otvalid/otverror.h, src/pcf/pcferror.h, src/pfr/pfrerror.h, - src/psaux/psauxerr.h, src/pshinter/pshnterr.h, - src/psnames/psnamerr.h, src/raster/rasterrs.h, src/sfnt/sferrors.h, - src/smooth/ftsmerrs.h, src/truetype/tterrors.h, - src/type1/t1errors.h, src/type42/t42error.h, src/winfonts/fnterrs.h: - Add #undef FT_ERR_PREFIX before #define FT_ERR_PREFIX. - -2012-03-03 Werner Lemberg - - Fix Savannah bug #35660. - - For some divisions, we use casts to 32bit entities. Always guard - against division by zero with these casts also. - - * src/base/ftcalc.c (ft_div64by32): Remove redundant cast. - (FT_MulDiv, FT_MulDiv_No_Round): Add 32bit cast. - (FT_DivFix): Add 32bit cast (this omission triggered the bug). - -2012-03-03 Werner Lemberg - - [psaux] Fix handling of track kerning. - - * src/psaux/afmparse.c (afm_parse_track_kern): Don't inverse sign - for `min_kern'. It is indeed quite common that track kerning - *increases* spacing for very small sizes. - -2012-03-02 Werner Lemberg - - [truetype] Fix Savannah bug #35689. - - * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Check first outline - point. - -2012-03-01 Werner Lemberg - - [bdf] Fix Savannah bug #35656. - - * src/bdf/bdflib.c (_bdf_parse_glyphs) <_BDF_BITMAP>: Check validity - of nibble characters instead of accessing `a2i' array. - -2012-03-01 Werner Lemberg - - [winfonts] Fix Savannah bug #35659. - - * src/winfonts/winfnt.c (FNT_Face_Init): Check number of glyphs. - -2012-03-01 Werner Lemberg - - [bdf] Fix Savannah bug #35658. - - * src/bdf/bdflib.c (_bdf_list_split): Initialize `field' elements - properly. - -2012-03-01 Werner Lemberg - - [psaux] Fix Savannah bug #35657. - - If in function `skip_spaces' the routine `skip_comment' comes to the - end of buffer, `cur' is still increased by one, so we need to check - for `p >= limit' and not `p == limit'. - - * src/psaux/psconv.c (PS_Conv_Strtol, PS_Conv_ToFixed, - PS_Conv_ASCIIHexDecode, PS_Conv_EexecDecode): Fix boundary checking. - -2012-03-01 Werner Lemberg - - [truetype] Fix Savannah bug #35646. - - * src/truetype/ttinterp.c (Ins_MIRP): Typo, present since ages. The - code is now in sync with the other operators (e.g. MSIRP) which - modify twilight points. - -2012-03-01 Werner Lemberg - - [bdf] Fix Savannah bug #35643. - - * src/bdf/bdflib.c (_bdf_list_ensure): Bring code in sync with - comment before `_bdf_list_split', this is, really allocate at least - five `field' elements. - -2012-03-01 Werner Lemberg - - [bdf] Fix Savannah bug #35641. - - * src/bdf/bdflib.c (_bdf_parse_glyphs) : Abort if - _BDF_ENCODING isn't set. We need this because access to the `glyph' - variable might be undefined otherwise. - -2012-03-01 Werner Lemberg - - [truetype] Fix Savannah bug #35640. - - * src/truetype/ttinterp.c (SkipCode, TT_RunIns): Fix boundary check - for NPUSHB and NPUSHW instructions. - -2012-02-29 Werner Lemberg - - [truetype] Fix Savannah bug #35601. - - * src/truetype/ttinterp.c (Ins_SHZ): Use number of points instead of - last point for loop. - Also remove redundant boundary check. - -2012-02-29 Werner Lemberg - - [truetype] Remove redundant check. - - * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Remove redundant - second check for ordered contour start points. - -2012-02-29 Werner Lemberg - - [truetype] Make SHC instruction behave similar to MS rasterizer. - - * src/truetype/ttinterp.c (Ins_SHC): Handle virtual contour in - twilight zone. - -2012-02-29 Alexei Podtelezhnikov - - Avoid modulo operators against a power-of-two denominator. - - * src/afcjk.c (af_hint_normal_stem), src/base/ftoutln.c - (ft_contour_has), src/cff/cffgload.c (cff_decoder_parse_charstrings) - , - src/gxvalid/gxvcommn.c (GXV_32BIT_ALIGNMENT_VALIDATE), - src/gxvalid/gxvfeat.c (gxv_feat_setting_validate): Replace `%' with - `&' operator. - -2012-02-29 Werner Lemberg - - [autofit] Don't synchronize digit widths for light rendering mode. - - We don't hint horizontally in this mode. - - * src/autofit/afloader.c (af_loader_load_g) : - Implement it. - -2012-02-26 Alexei Podtelezhnikov - - [type42] Minor code optimization (again). - - * src/type42/t42parse.c (t42_parse_sfnts): Simplify previous change. - -2012-02-26 Mateusz Jurczyk - Werner Lemberg - - [smooth] Fix Savannah bug #35604. - - * src/smooth/ftsmooth.c (ft_smooth_render_generic): Use `FT_Pos' - instead of `FT_UInt' for some variables and update comparisons - accordingly. A detailed analysis can be found in the bug report. - -2012-02-26 Alexei Podtelezhnikov - - [type42] Minor code optimization. - - * src/type42/t42parse.c (t42_parse_sfnts): Use bitmask instead of - modulo operator. - -2012-02-26 Werner Lemberg - - * docs/CHANGES: Updated. - -2012-02-26 Werner Lemberg - - [type1] Fix Savannah bug #35608. - - * src/type1/t1parse.c (T1_Get_Private_Dict): Reject too short - dictionaries. - -2012-02-26 Werner Lemberg - - [bdf] Support `ENCODING -1 ' format. - - * src/bdf/bdflib.c (_bdf_parse_glyphs) : Implement it. - -2012-02-26 Werner Lemberg - - [bdf] Fix Savannah bug #35607. - - * src/bdf/bdflib.c (_bdf_parse_glyphs) : Normalize - negative encoding values. - -2012-02-26 Werner Lemberg - - [type1] Fix Savannah bug #35606. - - * src/type1/t1load.c (parse_subrs): Add proper guards for `strncmp'. - - * src/psaux/psobjs.c (ps_parser_skip_PS_token): Emit error message - only if cur < limit. - -2012-02-25 Werner Lemberg - - [pcf] Fix Savannah bug #35603. - - * src/pcf/pcfread.c (pcf_get_properties): Assure final zero byte in - `strings' array. - -2012-02-25 Werner Lemberg - - [type42] Fix Savannah bug #35602. - - * src/type42/t42parse.c (t42_parse_sfnts): Check `string_size' more - thoroughly. - -2012-02-25 Werner Lemberg - - [bdf] Fix Savannah bugs #35599 and #35600. - - * src/bdf/bdflib.c (ACMSG16): New warning message. - (_bdf_parse_glyphs) <_BDF_BITMAP>: Check line length. - -2012-02-24 Werner Lemberg - - [bdf] Fix Savannah bugs #35597 and #35598. - - * src/bdf/bdflib.c (_bdf_is_atom): Fix handling of property value. - -2012-02-24  Vinnie Falco - - Prepare source code for amalgamation (6/6). - - * src/cff/cffdrivr.c: s/Load_Glyph/cff_glyph_load/. - - * src/cid/cidload.c: s/parse_font_matrix/cid_parse_font_matrix/. - s/t1_init_loader/cid_init_loader/. - s/t1_done_loader/cid_done_loader/. - - * src/pxaux/t1cmap.c: s/t1_get_glyph_name/psaux_get_glyph_name/. - - * src/truetype/ttdriver.c: s/Load_Glyph/tt_glyph_load/. - - * src/type1/t1load.c: s/parse_font_matrix/t1_parse_font_matrix/. - -2012-02-24  Vinnie Falco - - Prepare source code for amalgamation (5/6). - - * include/freetype/fterrors.h: Undefine FT_KEEP_ERR_PREFIX after - using it. - -2012-02-22  Vinnie Falco - - Prepare source code for amalgamation (4/6). - - * src/smooth/ftgrays.c, src/raster/ftraster.c: Undefine RAS_ARG, - RAS_ARGS, RAS_VAR, and RAS_VARS before defining it. - - * src/smooth/ftgrays.c: s/TRaster/black_TRaster/, - s/PRaster/black_PRaster/. - * src/raster/ftraster.c: s/TRaster/gray_TRaster/, - s/PRaster/gray_PRaster/. - -2012-02-20  Vinnie Falco - - Prepare source code for amalgamation (3/6). - - * src/smooth/ftgrays.c: s/TWorker/black_TWorker/, - s/PWorker/black_PWorker/. - * src/raster/ftraster.c: s/TWorker/gray_TWorker/, - s/PWorker/gray_PWorker/. - -2012-02-20  Vinnie Falco - - Prepare source code for amalgamation (2/6). - - * src/smooth/ftgrays.c, src/raster/ftraster.c: Undefine FLOOR, - CEILING, TRUNC, and SCALED before defining it. - -2012-02-20  Vinnie Falco - - Prepare source code for amalgamation (1/6). - - See discussion starting at - - http://lists.gnu.org/archive/html/freetype-devel/2012-01/msg00037.html - - * src/smooth/ftgrays.c: s/TBand/gray_TBand/. - * src/raster/ftraster.c: s/TBand/black_TBand/. - -2012-02-17 Alexei Podtelezhnikov - - [autofit] Fix outline flags. - - * src/autofit/afloader.c (af_loader_load_g): Don't reassign - `outline.flags' so that this information is preserved. See - discussion starting at - - http://lists.gnu.org/archive/html/freetype-devel/2012-02/msg00046.html - -2012-02-11 Werner Lemberg - - [truetype] Fix Savannah bug #35466. - - Jump instructions are now bound to the current function. The MS - Windows rasterizer behaves the same, as confirmed by Greg Hitchcock. - - * src/truetype/ttinterp.h (TT_CallRec): Add `Cur_End' element. - * src/truetype/ttobjs.h (TT_DefRecord): Add `end' element. - - * src/truetype/ttinterp.c (DO_JROT, DO_JMPR, DO_JROF): Check upper - bound of jump address. - (Ins_FDEF, Ins_CALL, Ins_LOOPCALL, Ins_UNKNOWN, TT_RunIns): Updated. - -2012-02-11 Werner Lemberg - - We don't use `extensions'. - - * include/freetype/internal/ftobjs.h (FT_DriverRec): Remove - `extensions' field. - -2012-02-11 Werner Lemberg - - Clean up `generic' fields. - - * include/freetype/internal/ftobjs.h (FT_ModuleRec, FT_LibraryRec): - Remove `generic' field since users can't access it. - - * src/base/ftobjs.c (FT_Done_GlyphSlot): Call `generic.finalizer' as - advertised in the documentation of FT_Generic. - (Destroy_Module, FT_Done_Library): Updated to changes in `ftobjs.h'. - -2012-02-07 Werner Lemberg - - [autofit] Harmonize function arguments. - - * src/autofit/afloader.c, src/autofit/afloader.h: Use `FT_Int32' for - `load_flags'. - -2012-02-07 Werner Lemberg - - * src/cff/cffobjs.c (cff_face_init): Remove unnecessary casts. - -2012-01-17 suzuki toshiya - - [gxvalid] Fix Savannah bug #35286. - - Patch submitted by anonymous reporter. - - * src/gxvalid/gxvcommn.c (gxv_XStateTable_subtable_setup): - gxv_set_length_by_ulong_offset() must be called with 3, not 4, - the number of the subtables in the state tables; classTable, - stateArray, entryTable. - -2012-01-17 suzuki toshiya - - [raccess] Modify for PIC build. - - Based on the patch provided by Erik Dahlstrom , - http://lists.gnu.org/archive/html/freetype-devel/2012-01/msg00010.html - - Also `raccess_guess_table[]' and `raccess_rule_by_darwin_vfs()' - are renamed with `ft_' suffixes. - - * src/base/ftbase.h: `raccess_rule_by_darwin_vfs()' is renamed - to `ft_raccess_rule_by_darwin_vfs()'. - * src/base/ftobjs.c: Ditto. - - * src/base/ftrfork.c: Declarations of FT_RFork_Rule, - raccess_guess_rec, are moved to... - * include/freetype/internal/ftrfork.h: Here. - - * include/freetype/internal/ftrfork.h: - FT_RFORK_RULE_ARRAY_{BEGIN,ENTRY,END} macros are defined - to replace raccess_guess_table[] in both of PIC and non-PIC - modes. - * src/base/ftrfork.c: raccess_guess_table[] array is rewritten - by FT_RFORK_RULE_ARRAY_{BEGIN,ENTRY,END}. - - * src/base/basepic.h (BasePIC): Add `ft_raccess_guess_table' - storage. (FT_RACCESS_GUESS_TABLE_GET): New macro to retrieve - the function pointer from `ft_raccess_guess_table' storage in - `BasePIC' structure. - * src/base/ftrfork.c (FT_Raccess_Guess): Rewritten with - FT_RACCESS_GUESS_TABLE_GET. - (raccess_get_rule_type_from_rule_index): Add `library' as the - first argument to the function, to retrieve the storage of - `ft_raccess_guess_table' from it. Also `raccess_guess_table' - is replaced by FT_RACCESS_GUESS_TABLE_GET. - (ft_raccess_rule_by_darwin_vfs): Ditto. - -2012-01-16 suzuki toshiya - - Remove trailing spaces. - -2012-01-16 suzuki toshiya - - Formatting PIC related sources. - - * src/autofit/afpic.c: Harmonize to FT2 coding conventions. - * src/base/basepic.c: Ditto. - * src/base/ftpic.c: Ditto. - * src/cff/cffpic.c: Ditto. - * src/pshinter/pshpic.c: Ditto. - * src/psnames/pspic.c: Ditto. - * src/raster/rastpic.c: Ditto. - * src/sfnt/sfntpic.c: Ditto. - * src/smooth/ftspic.c: Ditto. - * src/truetype/ttpic.c: Ditto. - -2012-01-16 suzuki toshiya - - [autofit] Fix the inclusion of `aflatin2.h' in PIC file. - - * src/autofit/afpic.c: Include `aflatin2.h' when - FT_OPTION_AUTOFIT2 is defined, as afglobal.c does so. - Unconditionally inclusion causes declared but unimplemented - warning by GCC 4.6. - -2012-01-16 suzuki toshiya - - [cff] Remove redundant declarations of cff_cmap_XXX_class_rec. - - * src/cff/cffpic.c: The declarations of - FT_Init_Class_cff_cmap_encoding_class_rec() and - FT_Init_Class_cff_cmap_unicode_class_rec() are removed. - They can be obtained by the inclusion of cffcmap.h. - cffcmap.h invokes FT_DECLARE_CMAP_CLASS() and it declares - FT_Init_Class_cff_cmap_encoding_class_rec() etc in PIC mode. - -2012-01-15 suzuki toshiya - - Fix redundant declaration warning in PIC mode. - - Originally FT_DEFINE_{DRIVER,MODULE,RENDERER}() macros were - designed to declare xxx_pic_{free,init} by themselves. - Because these macros are used at the end of the module - interface (e.g. ttdriver.c) and the wrapper source to build - a module as a single object (e.g. truetype.c) includes - the PIC file (e.g. ttpic.c) before the module interface, - these macros are expanded AFTER xxx_pic_{free,init} body - when the modules are built as single object. - The declaration after the implementation causes the redundant - declaration warnings, so the declarations are moved to module - PIC headers (e.g. ttpic.h). Separating to other header files - are needed for multi build. - - * include/freetype/internal/ftdriver.h (FT_DEFINE_DRIVER): - Remove class_##_pic_free and class_##_pic_init declarations. - * include/freetype/internal/ftobjs.h (FT_DEFINE_RENDERER, - FT_DEFINE_MODULE): Ditto. - - * src/base/basepic.h: Insert a comment and fix coding style. - * src/autofit/afpic.h: Declare autofit_module_class_pic_{free, - init}. - * src/cff/cffpic.h: Declare cff_driver_class_pic_{free,init}. - * src/pshinter/pshpic.h: Declare pshinter_module_class_pic_{free, - init}. - * src/psnames/pspic.h: Declare psnames_module_class_pic_{free, - init}. - * src/raster/rastpic.h: Declare - ft_raster{1,5}_renderer_class_pic_{free,init} - * src/sfnt/sfntpic.h: Declare sfnt_module_class_pic_{free,init}. - * src/smooth/ftspic.h: Declare - ft_smooth_{,lcd_,lcdv_}renderer_class_pic_{free,init}. - * src/truetype/ttpic.h: Declare tt_driver_class_pic_{free,init}. - -2012-01-15 suzuki toshiya - - Make pspic.c to include module error header to fix multi build. - - * src/psnames/pspic.c: Include `psnamerr.h'. - -2012-01-14 suzuki toshiya - - [base] Fix a dereference of uninitialized variable in PIC mode. - - * src/base/ftglyph.c (FT_Glyph_To_Bitmap): `glyph' must be - set before derefering to obtain `library'. The initialization - of `clazz', `glyph', `library' and NULL pointer check are - reordered to minimize PIC conditonals. - -2012-01-14 suzuki toshiya - - [base] Insert explicit cast for GCC 4.6 in PIC mode. - - * src/base/ftinit.c (FT_Add_Default_Modules): Under PIC - configuration, FT_DEFAULT_MODULES_GET returns - FT_Module_Class** pointer, GCC 4.6 warns that - const FT_Module_Class* const* variable is warned as - inappropriate to store it. To calm it, explicit cast is - inserted. Also `library' is checked to prevent the NULL - pointer dereference in FT_DEFAULT_MODULES_GET. - -2012-01-13 suzuki toshiya - - Fix PIC build broken by d9145241fe378104ba4c12a42534549faacc92e6. - - Under PIC configuration, FT_{CFF,PSCMAPS,SFNT,TT}_SERVICES_GET - take no arguments but derefer the variable named `library' - internally. - - * src/cff/cffdrivr.c (cff_get_interface): Declare `library' and - set it if non-NULL driver is passed. - * src/truetype/ttdriver.c (tt_get_interface): Ditto. - - * src/sfnt/sfdriver.c (sfnt_get_interface): Declare `library' - under PIC configuration, and set it if non-NULL module is given. - * src/psnames/psmodule.c (psnames_get_interface): Ditto. - -2012-01-13 suzuki toshiya - - Make PIC files include module error headers, to use the error codes - with per-module prefix. - - * src/autofit/afpic.c: Include `aferrors.h'. - * src/cff/cffpic.c: Include `cfferrs.h'. - * src/pshinter/pshpic.c: Include `pshnterr.h'. - * src/raster/rastpic.c: Include `rasterrs.h'. - * src/sfnt/sfntpic.c: Include `sferrors.h'. - * src/smooth/ftspic.c: Include `ftsmerrs.h'. - * src/truetype/ttpic.c: Include `tterrors.h'. - -2012-01-04 Tobias Ringström - - [truetype] Fix IP instruction if x_ppem != y_ppem. - - * src/truetype/ttinterp.c (Ins_IP): Scale `orus' coordinates - properly. - -2012-01-02 Werner Lemberg - - Fix tracing message for `loca' table. - - * src/truetype/ttpload.c (tt_face_get_location): Don't emit a - warning message if the last `loca' entry references an empty glyph. - -2011-12-10 Werner Lemberg - - Add some variable initializations. - Reported by Richard COOK . - - * src/type1/t1driver.c (t1_ps_get_font_value): Initialize `val'. - * src/smooth/ftgrays.c (gray_render_conic): Initialize `levels' - earlier. - -2011-12-08 Werner Lemberg - - Fix serious scaling bug in `FT_Get_Advances'. - - * src/base/ftadvanc.c (FT_Get_Advances): Advance values returned by - `FT_Load_Glyph' must be simply multiplied by 1024. - -2011-12-08 Werner Lemberg - - * src/bdf/bdflib.c (_bdf_parse_start): Drop redundant error tracing. - -2011-12-02 suzuki toshiya - - [mac] Unify DARWIN_NO_CARBON with FT_MACINTOSH. - - Originally FT_MACINTOSH was a pure auto macro and DARWIN_NO_CARBON - was a configurable macro to disable Carbon-dependent code. Because - now configure script sets DARWIN_NO_CARBON by default and disables - Darwin & Carbon-dependent codes, these macros can be unified. - FT_MACINTOSH (undefined by default) is kept and DARWIN_NO_CARBON - (defined by default) is removed, because DARWIN_NO_CARBON violates - FT_XXX naming convention of public macros, and a macro configured by - default is not portable for the building without configure (e.g. - make devel). - - * builds/unix/configure.raw: Define FT_MACINTOSH if Carbon-based - old Mac font support is requested and Carbon is available. - * builds/unix/ftconfig.in: Undefine FT_MACINTOSH when the support - for Mac OS X without Carbon (e.g. Mac OS X 10.4 for ppc64) is - requested. - * include/freetype/config/ftconfig.in: Ditto. - * builds/vms/ftconfig.h: Ditto. - - * src/base/ftbase.h: Remove DARWIN_NO_CARBON. - * src/base/ftbase.c: Ditto. - * src/base/ftobjs.c: Ditto. - * src/base/ftrfork.c: Ditto. - - * src/base/ftmac.c: Compile the body if FT_MACINTOSH is defined - (same with TT_USE_BYTECODE_INTERPRETER in ttinterp.c). - * builds/mac/ftmac.c: Ditto. - - * builds/mac/FreeType.m68k_cfm.make.txt: Define FT_MACINTOSH. - * builds/mac/FreeType.m68k_far.make.txt: Ditto. - * builds/mac/FreeType.ppc_classic.make.txt: Ditto. - * builds/mac/FreeType.ppc_carbon.make.txt: Ditto. - -2011-11-30 suzuki toshiya - - Fix Savannah bug #34728 (`make devel' on Mac OS X). - - * builds/toplevel.mk: Check `/dev/null' to identify the Unix- - like systems without `init' nor `hurd' (e.g. Mac OS X >= 10.4). - * builds/unix/detect.mk: Ditto. - -2011-11-30 suzuki toshiya - - [apinames] Fix the overflow of signed integer hash. - - * src/tools/apinames.c (names_add): Change the type of `h' from - int to unsigned int, to prevent undefined behaviour in the - overflow of signed integers (overflow of unsigned int is defined - to be wrap around). Found by clang test suggested by Sean - McBride. - -2011-11-30 Werner Lemberg - - [winfonts] Remove casts. - - * src/winfonts/winfnt.c (winfnt_driver_class): Remove all casts and - update affected functions. - (FNT_Size_Select): Fix number of arguments. - -2011-11-30 Werner Lemberg - - [type42] Remove casts. - - * src/type42/t42driver.c (t42_driver_class): Remove all casts and - update affected functions. - - * src/type42/t42objs.c, src/type42/t42objs.h: Updated for t42driver - changes. - -2011-11-30 Werner Lemberg - - [type1] Remove casts. - - * src/type1/t1driver.c (t1_driver_class): Remove all casts and - update affected functions. - - * src/type1/t1gload.c, src/type1/t1gload.h, src/type1/t1objs.c: - Updated for t1driver changes. - src/type1/t1objs.h (T1_Driver): Remove unused typedef. - Updated for t1driver changes. - -2011-11-27 Werner Lemberg - - [bdf] Fix Savannah bug #34896. - - ENCODING now covers the whole Unicode range. - - Note, however, that this change is quite expensive since it - increases the size of three arrays by almost 400kByte in total. The - right fix is to replace the logic with something smarter. - Additionally, there exist very old BDFs for three-byte CCCII - encoding which exceeds the range of Unicode (another reason to have - a smarter logic). - - * src/bdf/bdf.h (bdf_font_t): Increase size of `nmod' and `umod' - arrays. - * src/bdf/bdflib.c (bdf_parse_t): Increase size of `have' array. - -2011-11-27 Werner Lemberg - - [bdf] Improve tracing. - - * src/bdf/bdflib.c (DBGMSG1, DBGMSG2): New macros. - (_bdf_parse_glyphs): Use them. - -2011-11-26 Werner Lemberg - - Improve tracing. - - * src/bdf/bdfdrivr.c (BDF_Face_Done), src/pcf/pcfdrivr.c - (PCF_Face_Done): Remove tracing message. - - * src/bdf/bdfdrivr.c (BDF_Face_Init), src/cff/cffobjs.c - (cff_face_init), src/cid/cidobjs.c (cid_face_init), - src/pfr/pfrobjs.c (pfr_face_init), src/sfnt/sfobjs.c - (sfnt_init_face), src/truetype/ttobjs.c (tt_face_init), - src/type1/t1objs.c (T1_Face_Init), src/type42/t42objs.c - (T42_Face_Init), src/winfonts/winfnt.c (FNT_Face_Init): Add - `greeting' message. - - * src/sfnt/sfobjs.c (sfnt_open_font), src/type42/t42objs.c - (T42_Open_Face): Improve tracing. - -2011-11-26 Werner Lemberg - - [cid] Fix error code. - - * src/cid/cidparse.c (cid_parser_new): Do it. - -2011-11-26 Werner Lemberg - - [cff] Fix error code. - - * src/cff/cffload.c (cff_font_load): Do it. - -2011-11-26 Werner Lemberg - - Add new error code FT_Err_Missing_Module. - - Previously, FreeType misleadingly returned - FT_Err_Unknown_File_Format if a module was missing (or a test was - missing completely). - - * include/freetype/fterrdef.h (FT_Err_Missing_Module): Define. - - * src/cff/cffobjs.c (cff_face_init), src/cff/cffdrivr.c - (cff_get_glyph_name), src/cid/cidobjs.c (cid_face_init), - src/sfnt/sfobjs.c (sfnt_init_face), src/truetype/ttobjs.c - (tt_face_init), src/type1/t1objs.c (T1_Face_Init), - src/type42/t42objs.c (T42_Face_Init, T42_Driver_Init): Updated. - - * src/type1/t1afm.c (T1_Read_Metrics), src/type/t1objs.c - (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init): Remove now - redundant test for `psaux'. - -2011-11-25 Werner Lemberg - - [bdf] Add more error messages. - - * src/bdf/bdflib.c (_bdf_set_default_spacing, _bdf_add_property): - Add line number argument. - Update all callers. - (ERRMSG5, ERRMSG6, ERRMSG7, ERRMSG8, ERRMSG9): New macros. - (_bdf_readstream, _bdf_set_default_spacing, _bdf_add_property, - _bdf_parse_glyphs, _bdf_parse_start): Add error messages. - -2011-11-24 Werner Lemberg - - * include/freetype/fterrors.h: Remove dead code. - -2011-11-15 Werner Lemberg - - * docs/releases: Updated. - -2011-11-15 Werner Lemberg - - * Version 2.4.8 released. - ========================= - - - Tag sources with `VER-2-4-8'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.8. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.7/2.4.8/, s/247/248/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 8. - - * builds/unix/configure.raw (version_info): Set to 14:0:8. - -2011-11-13 Chris Liddell - - Add FT_Get_PS_Font_Value() API. - - This allows a Type 1 font face to be interrogated to retrieve most - of the dictionary keys (keys not relevant to FreeType's Type 1 - interpreter are not available). - - * include/freetype/internal/services/svpsinfo.h - (PS_GetFontValueFunc): New typedef. - (PSInfo): Add `ps_get_font_value'. - (FT_DEFINE_SERVICE_PSINFOREC): Updated. - - * include/freetype/internal/t1types.h (T1_EncodingType): Moved to... - * include/freetype/t1tables.h: Here. - (PS_Dict_Keys): New enumeration. - (FT_Get_PS_Font_Value): New declaration. - - * src/base/fttype1.c (FT_Get_PS_Font_Value): New function. - - * src/type1/t1driver.c (t1_ps_get_font_value): This new function - does the real job. - (t1_service_ps_info): Add it. - - * src/cff/cffdrivr.c (cff_service_ps_info), src/cid/cidriver.c - (cid_service_ps_info), src/type42/t42drivr.c (t42_service_ps_info): - Updated. - -2011-11-08 Braden Thomas - - [cid] Various loading fixes. - - * src/cid/cidload.c (cid_load_keyword) , - (parse_font_matrix, parse_expansion_factor): Correctly check number - of dictionaries. - (cid_read_subrs): Protect against invalid values of `num_subrs'. - Assure that the elements of the `offsets' array are ascending. - -2011-11-05 Werner Lemberg - - * README: We use copyright ranges also. - - According to - - http://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html - - this should be mentioned explicitly. - -2011-10-30 suzuki toshiya - - [raccess] Supplement for previous fix. - - * src/base/ftbase.h (raccess_rule_by_darwin_vfs): Do not declare - it on native Mac OS X. - * src/base/ftrfork.c (raccess_get_rule_type_from_rule_index): - Hide raccess_get_rule_type_from_rule_index() on native Mac OS X - too. - -2011-10-30 suzuki toshiya - - [raccess] Hide raccess_rule_by_darwin_vfs() on native Mac OS X. - - * src/base/ftrfork.c (raccess_rule_by_darwin_vfs): Do not - compile on native Mac OS X because it is not used. - -2011-10-25 Werner Lemberg - - [truetype] Fix MD instruction for twilight zone. - - * src/truetype/ttinterp.c (Ins_MD): Without this fix, the MD - instruction applied to original coordinates of twilight points - always returns zero. - -2011-10-18 Werner Lemberg - - * Version 2.4.7 released. - ========================= - - - Tag sources with `VER-2-4-7'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.7. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.6/2.4.7/, s/246/247/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 7. - - * builds/unix/configure.raw (version_info): Set to 13:2:7. - -2011-10-15 Kal Conley - - Fix handling of transformations if no renderer is present. - - * src/base/ftobjs.c (FT_Load_Glyph): Thinko. - -2011-10-15 Kal Conley - - Fix conditions for autohinting. - - * src/base/ftobjs.c (FT_Load_Glyph): Handle - FT_LOAD_IGNORE_TRANSFORM. - -2011-10-07 suzuki toshiya - - [gxvalid] Fix a bug to detect too large offset in morx table. - - * src/gxvalid/gxvmorx2.c - (gxv_morx_subtable_type2_ligActionIndex_validate): Fix a bug - that too large positive offset cannot be detected. - -2011-10-01 Braden Thomas - - Handle some border cases. - - * include/freetype/config/ftstdlib.h (FT_USHORT_MAX): New macro. - - * src/base/ftbitmap.c (FT_Bitmap_Convert): Protect against invalid - value of `target->rows'. - - * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Add check for - flex start. - - * src/raster/ftrend1.c (ft_raster1_render): Check `width' and - `height'. - - * src/truetype/ttgxvar.c (TT_Vary_Get_Glyph_Deltas): Protect against - invalid values in `localpoints' array. - -2011-10-01 Werner Lemberg - - [psnames] Handle zapfdingbats. - Problem reported by Nicolas Rougier . - - * src/tools/glnames.py (adobe_glyph_list): Add data from AGL's - `zapfdingbats.txt' file. - - * src/psnames/pstables.h: Regenerated. - -2011-09-27 Simon Bünzli - - [type1] Fix Savannah bug #34189. - - * src/type1/t1load.c (T1_Open_Face): Initialize - `face->len_buildchar'. - -2011-09-26 Werner Lemberg - - [cff] Dump SIDs while tracing. - - * src/cff/cffobjs.c (cff_face_init): Do it. - - * src/cff/cffparse.c (cff_parser_run) [FT_DEBUG_LEVEL_TRACE] - : Identify as SID. - -2011-09-17 Werner Lemberg - - Remove unused FT_ALIGNMENT macro. - - * builds/unix/ftconfig.in, builds/vms/ftconfig.h, - include/freetype/config/ftconfig.h: Do it. - -2011-09-17 Alexei Podtelezhnikov - - [smooth] Slightly optimize conic and cubic flatterners. - - * src/smooth/ftgrays.c (gray_render_conic, gray_render_cubic): Move - out some code from the main loop to speed it up. - -2011-09-11 Tomas Hoger - - Slightly improve LZW_CLEAR handling. - - * src/lzw/ftzopen.c (ft_lzwstate_io) : - Ensure that subsequent (modulo garbage byte(s)) LZW_CLEAR codes are - handled as clear codes. This also re-sets old_code and old_char to - predictable values, which is a little better than using `random' - ones if the code following LZW_CLEAR is invalid. - -2011-09-11 Tomas Hoger - - Add explicit LZW decompression stack size limit. - - Stack larger than 1<prefix[code - 256] - when traversing prefix table. Such check is less efficient and - should not be required if prefix table is constructed correctly in - the first place. - - * src/lzw/ftzopen.c (ft_lzwstate_stack_grow): Implement it. - -2011-09-11 Tomas Hoger - - Protect against loops in the prefix table. - - LZW decompressor did not sufficiently check codes read from the - input LZW stream. A specially-crafted or corrupted input could - create a loop in the prefix table, which leads to memory usage - spikes, as there's no decompression stack size limit. - - * src/lzw/ftzopen.c (ft_lzwstate_io) : First - code in valid LZW stream must be 0..255. - : In the special KwKwK case, code == free_ent, - code > free_ent is invalid. - -2011-09-09 Werner Lemberg - - Better tracing of metrics. - - * src/base/ftobjs.c (FT_Request_Size, FT_Select_Size): Decorate with - FT_TRACE. - -2011-09-07 Werner Lemberg - - [cff] Fix Savannah bug #33816. - - * src/cff/cfftypes.h (CFF_FontRecDictRec): New member - `has_font_matrix'. - * src/cff/cffparse.c (cff_parse_font_matrix): Set it. - Update tracing output. - * src/cff/cffobjs.c (cff_face_init): Use it so that the heuristics - can be removed. - -2011-08-30 Werner Lemberg - - Better tracing of metrics. - - * src/base/ftobjs.c (FT_Select_Metrics, FT_Request_Metrics): - Decorate with FT_TRACE. - -2011-08-25 Werner Lemberg - - [cff] Better tracing of the parsing process. - - * src/cff/cffload.c (cff_subfont_load, cff_font_load): Decorate with - FT_TRACE. - - * src/cff/cffparse.c (cff_parse_font_matrix, cff_parse_font_bbox, - cff_parse_private_dict, cff_parse_cid_ros): Updated. - (CFF_FIELD_NUM, CFF_FIELD_FIXED, CFF_FIELD_FIXED_1000, - CFF_FIELD_STRING, CFF_FIELD_BOOL, CFF_FIELD_CALLBACK, CFF_FIELD, - CFF_FIELD_DELTA): Add argument for ID. - (cff_parser_run): Decorate with FT_TRACE. - - * src/cff/cffparse.h (CFF_Field_Handler) [FT_DEBUG_LEVEL_TRACE]: Add - `id' member. - - * src/cff/cfftoken.h: Add IDs to all fields. - -2011-08-16 Werner Lemberg - - Fix Savannah bug #34022. - - * README, docs/INSTALL: Remove references to UPGRADE.UNIX. - -2011-08-15 Werner Lemberg - - Fix Savannah bug #34018. - - * docs/UPGRADE.UNIX: Removed. Obsolete. - -2011-08-15 David Bevan - - Fix Savannah bug #33992. - - * src/base/ftstroke.c (FT_Stroker_ParseOutline): Fix border case. - -2011-08-12 Werner Lemberg - - [cff] Fix Savannah bug #33975. - - * src/cff/cffparse.c (cff_parse_font_matrix): Fix typo. - -2011-07-29 Werner Lemberg - - * Version 2.4.6 released. - ========================= - - - Tag sources with `VER-2-4-6'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.6. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.5/2.4.6/, s/245/246/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 6. - - * builds/unix/configure.raw (version_info): Set to 13:1:7. - -2011-07-29 Werner Lemberg - - [cff] Add some more tracing infos. - - * src/cff/cffparse.c (cff_parse_font_matrix, cff_parse_font_bbox, - cff_parse_cid_ros): Add tracing. - -2011-07-22 Dirk Müller - - [psaux, type1] Fix null pointer dereferences. - - Found with font fuzzying. - - * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Check - `decoder->buildchar'. - - * src/type1/t1load.c (t1_load_keyword): Check `blend->num_designs'. - -2011-07-20 Chris Morgan - - Add FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT. - - Useful for embedded systems which don't need file stream support. - - * src/base/ftsystem.c, src/base/ftobjs.c (FT_Stream_New): Implement - it. - -2011-07-20 Elton Chung - - * src/base/ftpatent.c (FT_Face_SetUnpatentedHinting): Fix typo. - -2011-07-16 Steven Chu - - [truetype] Fix metrics on size request for scalable fonts. - - * src/truetype/ttdriver.c (tt_size_request): Fix copying metrics - from TT_Size to FT_Size if scalable font. - - See - - http://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00049.html - - for some comparison images. - -2011-07-14 Matthias Drochner . - - [psaux] Fix potential sign extension problems. - - When shifting right a signed value, it is not defined by the - C standard whether one gets a sign extension or not. Use a macro to - do an explicit cast from a signed short (assuming that this is - 16bit) to an int. - - * src/psaux/t1decode.c (Fix2Int): New macro. - Use it where appropriate. - -2011-07-14 Werner Lemberg - - * src/psaux/t1decode.c (t1_decoder_parse_charstrings) - : Better handling of subroutine index 0. - From Matthias Drochner . - -2011-07-10 Алексей Подтележников - - [psaux] Optimize previous commit. - - * src/psaux/t1decode.c (t1_decoder_parse_charstrings) - : Move error check down to avoid testing twice for - good cases. - -2011-07-08 Werner Lemberg - - [psaux] Add better argument check for `callothersubr'. - - * src/psaux/t1decode.c (t1_decoder_parse_charstrings) - : Reject negative arguments. - -2011-07-07 Werner Lemberg - - [sfnt] Try harder to find non-zero values for ascender and descender. - - * src/sfnt/sfobjs.c (sfnt_load_face): Consult `OS/2' table in case - the `hhea' table's values are zero. - -2011-07-03 Werner Lemberg - - Fix previous commit. - - We want to unset FT_FACE_FLAG_SCALABLE only if there are bitmap - strikes in the font. - - * src/truetype/ttobjs.c (tt_face_init): Implement it. - - * docs/CHANGES: Updated. - -2011-07-02 Just Fill Bugs - - [truetype] Fix Savannah bug #33246. - - * src/truetype/ttobjs.c (tt_check_single_notdef): New function. - (tt_face_init): Use it to test FT_FACE_FLAG_SCALABLE. - -2011-07-02 Werner Lemberg - - * docs/CHANGES: Updated. - -2011-07-02 David Bevan - - [ftstroke] Major revision. - - The main problems - ----------------- - - o If FT_STROKER_LINEJOIN_BEVEL was specified, unlimited miter - joins (not bevel joins) were generated. Indeed, the meanings of - `miter' and `bevel' were incorrectly reversed (consistently) in - both the code and comments. - - o The way bevel joins were constructed (whether specified - explicitly, or created as a result of exceeding the miter limit) - did not match what is required for stroked text in PostScript or - PDF. - - The main fixes - -------------- - - o The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected. - - o A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has been - introduced to support PostScript and PDF miter joins. - - o FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an - alias for FT_STROKER_LINEJOIN_MITER. - - Additionally, a variety of stroking errors have been fixed. These - would cause various artifacts (including points `at infinity'), - especially when stroking poor quality fonts. - - See - - http://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00001.html - - for example documents. The FreeType stroker now produces results - very similar to that produced by GhostScript and Distiller for these - fonts. - - Other problems - -------------- - - The following problems have been resolved: - - o Inside corners could be generated incorrectly. Intersecting the - inside corner could cause a missing triangular area and other - effects. - - The intersection point can only be used if the join is between - two lines and both lines are long enough. The `optimization' - condition in `ft_stroker_inside' has been corrected; this - requires the line length to be passed into various functions and - stored in `FT_StrokerRec'. - - o Incorrect cubic curves could be generated. The angle - calculations in `FT_Stroker_CubicTo' have been corrected to - handle the case of the curve crossing the +/-PI direction. - - o If the border radius was greater than the radius of curvature of - a curve, then the negative sector would end up outside (not - inside) the border. This situation is now recognized and the - negative sector is circumnavigated in the opposite direction. - (If round line joins are being used, this code is disabled - because the line join will always cover the negative sector.) - - o When a curve is split, the arcs may not join smoothly (especially - if the curve turns sharply back on itself). Changes in - direction between adjacent arcs were not handled. A round - corner is now added if the deviation from one arc to the next is - greater than a suitable threshold. - - o The current direction wasn't retained if a the outline contained - a zero length lineto or a curve that was determined to be - `basically a point'. This could cause a spurious join to be - added. - - o Cubics with close control points could be mishandled. All eight - cases are now distinguished correctly. - - Other improvements - ------------------ - - o Borders for cubic curves could be too `flat'. - FT_SMALL_CUBIC_THRESHOLD has been reduced a little to prevent - this. - - o The handling and use of movable points has been simplified a - little. - - o Various values are now computed only if the results are actually - needed. - - o The directions of the outer and inner borders have been swapped, - as recommended by Graham Asher. - - * src/base/ftstroke.c: Revised. - * include/freetype/ftstroke.h: Updated. - -2011-06-30 İsmail Dönmez - - * builds/toplevel.mk: We use git, not CVS, thus skip `.gitignore'. - -2011-06-29 Werner Lemberg - - [bdf] Fix Savannah bug #33663. - - * src/bdf/bdflib.c (_bdf_parse_glyphs): Handle negative values for - ENCODING correctly. - - * docs/CHANGES: Document it. - -2011-06-24 Werner Lemberg - - * Version 2.4.5 released. - ========================= - - - Tag sources with `VER-2-4-5'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.5 - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.4/2.4.5/, s/244/245/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5. - - * builds/unix/configure.raw (version_info): Set to 13:0:7. - -2011-06-20 Werner Lemberg - - * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Fix change - from 2011-05-04. - -2011-06-19 suzuki toshiya - - [gxvalid] make the `prop' validation tracing verbose. - - * src/gxvalid/gxvprop.c: Add tracing messages for errors. - -2011-06-19 suzuki toshiya - - [autogen.sh] Reflect environment variable LIBTOOLIZE. - -2011-06-18 Werner Lemberg - - Update license documentation. - - * docs/GPL.TXT: Renamed to... - * docs/GPLv2.TXT: This. - - * docs/LICENSE.TXT: Updated. - -2011-06-14 suzuki toshiya - - Fix g++4.6 compiler warnings in module drivers. - - The background is same with previous commit. - - * src/truetype/ttgxvar.c (ft_var_readpackedpoints): - Init `points'. (TT_Vary_Get_Glyph_Deltas): Init - `delta_xy'. (TT_Get_MM_Var): Init `mmvar'. - * src/type1/t1load.c (T1_Get_MM_Var): Ditto. - * src/cff/cffdrivr.c (cff_ps_get_font_info): Init - `font_info'. - * src/cff/cffload.c (cff_index_get_pointers): Init `t'. - (cff_font_load): Init `sub'. - * src/cff/cffobjs.c (cff_size_init): Init `internal'. - (cff_face_init): Init `cff'. - * src/pfr/pfrload.c (pfr_extra_item_load_stem_snaps): - Init `snaps'. - * src/pcf/pcfread.c (pcf_get_properties): Init `properties'. - (pcf_get_bitmaps): Init `offsets'. (pcf_get_encodings): - Init `tmpEncoding'. - * src/sfnt/ttload.c (tt_face_load_gasp): Init `gaspranges'. - * src/sfnt/ttsbit.c (Load_SBit_Image): Init `components'. - * src/cache/ftcmru.c (FTC_MruList_New): Init `node'. - * src/gzip/ftgzip.c (FT_Stream_OpenGzip): Init `zip' and - `zip_buff'. - * src/lzw/ftlzw.c (FT_Stream_OpenLZW): Init `zip'. - * src/bzip2/ftbzip2.c (FT_Stream_OpenBzip2): Init `zip'. - -2011-06-14 suzuki toshiya - - [base] Fix g++4.6 compiler warnings in src/base/*.c. - - Passing uninitialized pointer to FT_NEW() families is - not problematic theoretically (as far as the returned - pointer is checked before writing), but g++4.6 dislikes - it and warns by -Wuninitialized. Initialize them by NULL. - - * src/base/ftobjs.c (FT_Stream_New): Init `stream'. - (new_memory_stream): Ditto. - (FT_New_GlyphSlot): Init `slot'. - (FT_CMap_New): Init `cmap'. - (open_face_PS_from_sfnt_stream): Init `sfnt_ps'. - (Mac_Read_POST_Resource): Init `pfb_data'. - (Mac_Read_sfnt_Resource): Init `sfnt_data'. - * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): - Init `offsets_internal' and `ref'. - (raccess_guess_darwin_hfsplus): Init `newpath'. - (raccess_guess_darwin_newvfs): Ditto. - * src/base/ftbitmap.c (ft_bitmap_assure_buffer): - Init `buffer'. - * src/base/ftstroke.c (FT_Stroker_New): Init `stroker'. - -2011-06-14 suzuki toshiya - - [gxvalid] Cleanup. - - Some invalid, overrunning, unrecommended non-zero values - are cared in paranoid validation mode only. There are - many lines looking like: - - if ( valid->root->level >= FT_VALIDATE_PARANOID ) - FT_INVALID_xxx; - - To simplify them, GXV_SET_ERR_IF_PARANOID( err ) is - introduced for more paranoid validation in future. - - * src/gxvalid/gxvcommn.h (IS_PARANOID_VALIDATION): - New macro to assure valid->root->level is more or - equal to FT_VALIDATE_PARANOID. (GXV_SET_ERR_IF_PARANOID): - New macro to raise an error if in paranoid validation. - * src/gxvalid/gxvcommn.c: Use GXV_SET_ERR_IF_PARANOID(). - * src/gxvalid/gxvfeat.c: Ditto. - * src/gxvalid/gxvjust.c: Ditto. - * src/gxvalid/gxvkern.c: Ditto. - * src/gxvalid/gxvmort.c: Ditto. - * src/gxvalid/gxvmort0.c: Ditto. - * src/gxvalid/gxvmort1.c: Ditto. - * src/gxvalid/gxvmort2.c: Ditto. - * src/gxvalid/gxvmorx1.c: Ditto. - * src/gxvalid/gxvmorx2.c: Ditto. - -2011-06-14 suzuki toshiya - - [gxvalid] Fix gcc4.6 compiler warnings in gxvtrak.c. - - * src/gxvalid/gxvtrak.c (gxv_trak_trackTable_validate): - Check different entries pointing same traking value. - (gxv_trak_validate): Remove unused variable `table_size'. - -2011-06-14 suzuki toshiya - - [gxvalid] Fix gcc4.6 compiler warnings in gxvmorx*.c. - - * src/gxvalid/gxvmorx.c (gxv_morx_subtables_validate): - Conditionalize unvalidated variable `subFeatureFlags'. - (gxv_morx_chain_validate): Conditionalize unvalidated - variable `defaultFlags'. - - * src/gxvalid/gxmorx0.c - (gxv_morx_subtable_type0_entry_validate): - Conditionalize unvalidated variables; `markFirst', - `dontAdvance', `markLast', `verb'. - - * src/gxvalid/gxmorx1.c - (gxv_morx_subtable_type1_entry_validate): Conditionalize - unvalidated variables; `setMark', `dontAdvance'. - - * src/gxvalid/gxvmorx2.c - (gxv_morx_subtable_type2_ligActionOffset_validate): - Conditionalize unvalidated variables; `last', `store'. - Checking for overrunning offset is added. - (gxv_morx_subtable_type2_entry_validate): - Conditionalize unvalidated variables; `setComponent', - `dontAdvance', `performAction'. - (gxv_morx_subtable_type2_ligatureTable_validate): - Check if the GID for ligature does not exceed the - max GID in `maxp' table. - - * src/gxvalid/gxvmort5.c - (gxv_morx_subtable_type5_InsertList_validate): - Conditionalize unvalidated loading of `insert_glyphID' - array. (gxv_morx_subtable_type5_entry_validate): - Conditionalize unvalidated variables; `setMark', - `dontAdvance', `currentIsKashidaLike', - `markedIsKashidaLike', `currentInsertBefore', - `markedInsertBefore'. - -2011-06-14 suzuki toshiya - - [gxvalid] Fix gcc4.6 compiler warnings in gxvmort*.c. - - * src/gxvalid/gxvmort.c (gxv_mort_subtables_validate): - Conditionalize unvalidated variable `subFeatureFlags'. - (gxv_mort_chain_validate): Conditionalize unvalidated - variable `defaultFlags'. - - * src/gxvalid/gxmort0.c - (gxv_mort_subtable_type0_entry_validate): Check the - conflict of the marks for the glyphs. - - * src/gxvalid/gxmort1.c - (gxv_mort_subtable_type1_offset_to_subst_validate): - Local variables `min_gid', `max_gid' are replaced by - variables in the validator. - (gxv_mort_subtable_type1_entry_validate): Conditionalize - unvalidated variables; `setMark', `dontAdvance'. - (gxv_mort_subtable_type1_substTable_validate): - Validate the GID by the min/max GIDs in the validator. - - * src/gxvalid/gxvmort2.c - (gxv_mort_subtable_type2_ligActionOffset_validate): - Conditionalize unvalidated variables; `last', `store'. - Checking for overrunning offset is added. - (gxv_mort_subtable_type2_entry_validate): - Conditionalize unvalidated variables; `setComponent', - `dontAdvance'. - (gxv_mort_subtable_type2_ligatureTable_validate): - Check if the GID for ligature does not exceed the - max GID in `maxp' table. - - * src/gxvalid/gxvmort5.c - (gxv_mort_subtable_type5_InsertList_validate): - Conditionalize unvalidated loading of `insert_glyphID' - array. (gxv_mort_subtable_type5_entry_validate): - Conditionalize unvalidated variables; `setMark', - `dontAdvance', `currentIsKashidaLike', - `markedIsKashidaLike', `currentInsertBefore', - `markedInsertBefore'. - -2011-06-14 suzuki toshiya - - [gxvalid] Fix gcc4.6 compiler warnings in gxvkern.c. - - * src/gxvalid/gxvkern.c - (gxv_kern_subtable_fmt0_pairs_validate): Conditionalize - unvalidated variable `kernValue'. - (gxv_kern_subtable_fmt1_entry_validate): Conditionalize - unvalidated variables; `push', `dontAdvance', `kernAction', - `kernValue'. - (gxv_kern_coverage_new_apple_validate): Conditionalize - trace-only variables; `kernVertical', `kernCrossStream', - `kernVariation'. - (gxv_kern_coverage_classic_apple_validate): Conditionalize - trace-only variables; `horizontal', `cross_stream'. - (gxv_kern_coverage_classic_microsoft_validate): - Conditionalize trace-only variables; `horizontal', - `minimum', `cross_stream', `override'. - (gxv_kern_subtable_validate): Conditionalize trace-only - variables; `version', `tupleIndex'. - -2011-06-14 suzuki toshiya - - [gxvalid] Fix gcc4.6 compiler warnings in gxvjust.c. - - * src/gxvalid/gxvjust.c (gxv_just_check_max_gid): - New function to unify the checks of too large GID. - (gxv_just_wdp_entry_validate): Conditionalize unvalidated - variables; `beforeGrowLimit', `beforeShrinkGrowLimit', - `afterGrowLimit', `afterShrinkGrowLimit', `growFlags', - `shrinkFlags'. Additional check for non-zero values in - unused storage `justClass' is added. - (gxv_just_actSubrecord_type0_validate): Conditionalize - unvalidated variable `order'. GID is checked by - gxv_just_check_max_gid(). Additional check for upside-down - relationship between `lowerLimit' and `upperLimit' is added. - (gxv_just_actSubrecord_type1_validate): GID is checked by - gxv_just_check_max_gid(). - (gxv_just_actSubrecord_type2_validate): Conditionalize - unvalidated variable `substThreshhold'. GID is checked by - gxv_just_check_max_gid(). - (gxv_just_actSubrecord_type5_validate): GID is checked by - gxv_just_check_max_gid(). - (gxv_just_classTable_entry_validate): Conditionalize - unvalidated variables; `setMark', `dontAdvance', - `markClass', `currentClass'. - -2011-06-14 suzuki toshiya - - [gxvalid] Preparation to fix gcc4.6 compiler warnings. - - * src/gxvalid/gxvcommn.h (GXV_LOAD_TRACE_VARS): New macro to - conditionalize the variable which is only used for trace messages. - Automatically set by FT_DEBUG_LEVEL_TRACE. - (GXV_LOAD_UNUSED_VARS): New macro to conditionalize the loading of - unvalidated variables. Undefined by default to calm gcc4.6 warning. - (GXV_ValidatorRec.{min_gid,max_gid}): New variables to hold defined - GID ranges, for the comparison of GID ranges in different subtables. - -2011-06-08 Werner Lemberg - - [autofit] Remove unused structure member. - - * src/autofit/afhints.h (AF_SegmentRec): Remove `contour'. - * src/autofit/aflatin.c (af_latin_hints_compute_segments), - src/autofit/aflatin2.c (af_latin2_hints_compute_segments): Updated. - -2011-05-30 Werner Lemberg - - Fix g++ 4.6 compilation. - - * src/autofit/afhints.c (af_glyph_hints_dump_segments, - af_glyph_hints_dump_edges): Use cast. - -2011-05-30 Werner Lemberg - - Fix gcc 4.6 compiler warnings. - - * src/autofit/afcjk.c (af_cjk_metrics_init_blues): Use casts and - remove unused variables. - * src/autofit/aflatin.c (af_latin_hints_compute_edges): Comment out - `up_dir'. - * src/smooth/ftsmooth.c (ft_smooth_render_generic): Use `height_org' - and `width_org' conditionalized. - -2011-05-28 suzuki toshiya - - [mac] Conditionalize the inclusion of `AvailabilityMacros.h'. - - The native SDK on earliest Mac OS X (10.0-10.1) did not have - `AvailabilityMacros.h'. To prevent the inclusion of missing - header file, ECANCELED (introduced in 10.2) in POSIX header - file is checked to detect the system version. - - * include/freetype/config/ftconfig.h: Conditionalize the - inclusion of `AvailabilityMacros.h'. - * builds/unix/ftconfig.in: Ditto. - * builds/vms/ftconfig.h: Ditto. - -2011-05-27 Werner Lemberg - - [autofit] Improve tracing of hinting process. - - * src/autofit/aflatin.c (af_latin_hint_edges): Add tracing message - `ADJUST'. - -2011-05-26 Werner Lemberg - - [autofit] Fix trace message. - - * src/autofit/aflatin.c (af_latin_hint_edges): Show correct value in - tracing message. - -2011-05-24 Daniel Zimmermann - - Reduce warnings for MS Visual Studio 2010. - - * src/autofit/afhints.c (af_glyph_hints_get_num_segments, - af_glyph_hints_get_segment_offset) [!FT_DEBUG_AUTOFIT]: Provide - return value. - * src/cff/cffgload.c (cff_slot_load): Add cast. - * src/truetype/ttobjs.c (tt_check_trickyness_sfnt_ids): Use proper - loop variable type. - -2011-05-16 suzuki toshiya - - Automake component `builds/unix/install-sh' is removed. - - * builds/unix/install-sh: Removed. It is not needed to - include repository, because autogen.sh installs it. - * builds/unix/.gitignore: Register install-sh. - -2011-05-12 suzuki toshiya - - [autofit] Make trace message for CJK bluezone more verbose. - -2011-05-08 Just Fill Bugs - suzuki toshiya - - [autofit] Add bluezones for CJK Ideographs. - - To remove extremas of vertical strokes of CJK Ideographs at - low resolution and make the top and bottom horizontal stems - aligned, bluezones for CJK Ideographs are calculated from - sample glyphs. At present, vertical bluezones (bluezones - to align vertical stems) are disabled by default. For detail, see - http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html - http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html - http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html - - * include/freetype/internal/fttrace.h: New trace component `afcjk'. - * src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version - for AF_Latin{Blue,Axis,Metric}Rec. - (af_cjk_metrics_check_digits): Ditto, shared with Indic module. - (af_cjk_metrics_init_widths): Ditto. - (af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric. - (af_cjk_metrics_scale): Ditto (declaration). - (af_cjk_hints_init): Ditto (declaration). - (af_cjk_hints_apply): Ditto (declaration). - * src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body). - (af_cjk_hints_init): Ditto (body). - (af_cjk_hints_apply): Ditto (body). - (af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths. - (af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits. - (af_cjk_metrics_init): Call CJK bluezone initializer. - (af_cjk_metrics_scale_dim): Add code to scale bluezones. - (af_cjk_hints_compute_blue_edges): New function, CJK version of - af_latin_hints_compute_blue_edges. - (af_cjk_metrics_init_blues): New function, CJK version of - af_latin_metrics_init_blues. - (af_cjk_hints_edges): Add code to align the edge stems to blue zones. - - * src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric - instead of AF_LatinMetric, and initialize as af_cjk_metrics_init. - However bluezones are not initialized. - (af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric. - (af_indic_hints_init): Ditto. - (af_indic_hints_apply): Ditto. - - * docs/CHANGES: Note about CJK bluezone support. - -2011-05-06 Werner Lemberg - - [autofit] Remove unused struct member. - - * src/autofit/aflatin.h (AF_LatinAxis): Remove `control_overshoot'. - -2011-05-04 Werner Lemberg - - * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Simplify. - -2011-05-01 Just Fill Bugs - Werner Lemberg - - [autofit] Add more debugging functions. - - * src/autofit/afhints.c (af_glyph_hints_get_num_segments, - af_glyph_hints_get_segment_offset): New functions. - -2011-05-01 suzuki toshiya - - Add new option `--disable-mmap' to configure script. - - * builds/unix/configure.raw: New option `--disable-mmap' - is added. It is for the developers to simulate the systems - without mmap() (like 4.3BSD, minix etc) on POSIX systems. - -2011-04-30 suzuki toshiya - - [truetype] Always recalculate the sfnt table checksum. - - * src/truetype/ttobjs.c (tt_get_sfnt_checksum): Recalculate - the sfnt table checksum even if non-zero value is written in - the TrueType font header. Some bad PDF generators write - wrong values. For details see examples and benchmark tests - of the latency by recalculation: - http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00091.html - http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00096.html - -2011-04-30 suzuki toshiya - - [truetype] Register a set of tricky fonts, NEC FA family. - - * src/truetype/ttobjs.c (tt_check_trickyness_sfnt_ids): - Add 8 checksum sets for NEC FA family. For the tricky fonts - without some tables (e.g. NEC FA fonts lack cvt table), - extra check is added to assure that a zero-length table in the - registry is not included in the font. - -2011-04-29 suzuki toshiya - - [truetype] Fix a bug in the sfnt table checksum getter. - - * src/truetype/ttobjs.c (tt_get_sfnt_checksum): Check the - return value of face->goto_table() correctly. - -2011-04-28 Werner Lemberg - - [autofit] Improve tracing messages. - - * src/autofit/aflatin.c (af_latin_metrics_init_blues, - af_latin_align_linked_edge, af_latin_hint_edges): Do it. - -2011-04-25 Kan-Ru Chen - - [truetype] Always check the checksum to identify tricky fonts. - - Because some PDF generators mangle the family name badly, - the trickyness check by the checksum should be invoked always. - For sample PDF, see - http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00073.html - - * src/truetype/ttobjs.c (tt_check_trickyness): Even when - tt_check_trickyness_family() finds no trickyness, - tt_check_trickyness_sfnt_ids() is invoked. - -2011-04-22 suzuki toshiya - - [autofit] Add more Indic scripts with hanging baseline. - - * src/autofit/afindic.c (af_indic_uniranges): Tibetan, Limbu, - Sundanese, Meetei Mayak, Syloti Nagri and Sharada scripts are - added. - -2011-04-21 Behdad Esfahbod - - Always ignore global advance. - - This makes FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH redundant, - deprecated, and ignored. The new behavior is what every major user - of FreeType has been requesting. Global advance is broken in many - CJK fonts. Just ignoring it by default makes most sense. - - * src/truetype/ttdriver.c (tt_get_advances), - src/truetype/ttgload.c (TT_Get_HMetrics, TT_Get_VMetrics, - tt_get_metrics, compute_glyph_metrics, TT_Load_Glyph), - src/truetype/ttgload.h: Implement it. - - * docs/CHANGES: Updated. - -2011-04-21 rainy6144 - - [autofit] Blur CJK stems if too many to preserve their gaps. - - When there are too many stems to preserve their gaps in the - rasterization of CJK Ideographs at a low resolution, blur the - stems instead of showing clumped stems. See - http://lists.gnu.org/archive/html/freetype-devel/2011-02/msg00011.html - http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00046.html - for details. - - * src/autofit/afcjk.c (af_cjk_hint_edges): Store the position of - the previous stem by `has_last_stem' and `last_stem_pos', and skip - a stem if the current and previous stem are too near to preserve - the gap. - -2011-04-18 Werner Lemberg - - Integrate autofitter debugging stuff. - - * devel/ftoption.h, include/freetype/config/ftoption.h - (FT_DEBUG_AUTOFIT): New macro. - - * include/freetype/internal/fttrace.h: Add trace components for - autofitter. - - * src/autofit/aftypes.h (AF_LOG): Removed. - (_af_debug): Removed. - - * src/autofit/*: s/AF_DEBUG/FT_DEBUG_AUTOFIT/. - s/AF_LOG/FT_TRACE5/. - Define FT_COMPONENT where necessary. - -2011-04-18 Werner Lemberg - - Synchronize config files. - - * builds/unix/ftconfig.in: Copy missing assembler routines from - include/freetype/config/ftconfig.h. - -2011-04-13 Werner Lemberg - - [psaux] Fix Savannah bug #33047. - - Patch submitted by anonymous reporter. - - * src/psaux/psobjs.c (ps_table_add): Use FT_PtrDist for pointer - difference. - -2011-04-11 Kan-Ru Chen - - Fix reading of signed integers from files on 64bit platforms. - - Previously, signed integers were converted to unsigned integers, but - this can fail because of sign extension. For example, 0xa344a1eb - becomes 0xffffffffa344a1eb. - - We now do the reverse which is always correct because the integer - size is the same during the cast from unsigned to signed. - - * include/freetype/internal/ftstream.h, src/base/ftstream.c - (FT_Stream_Get*): Replace with... - (FT_Stream_GetU*): Functions which read unsigned integers. - Update all macros accordingly. - - * src/gzip/ftgzip.c (ft_gzip_get_uncompressed_size): Updated. - -2011-04-07 Werner Lemberg - - Update Unicode ranges for CJK autofitter; in particular, add Hangul. - - * src/autofit/afcjk.c (af_cjk_uniranges): Update to Unicode 6.0. - -2011-04-04 Werner Lemberg - - Fix formatting of autofit debug dumps. - - * src/autofit/afhints.c (af_glyph_hints_dump_points, - af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Adjust - column widths. - -2011-03-30 Werner Lemberg - - * src/autofit/aftypes.h (AF_OutlineRec): Removed, unused. - -2011-03-24 Werner Lemberg - - * src/cff/cfftypes.h (CFF_MAX_CID_FONTS): Increase to 256. - This limit is given on p. 37 of Adobe Technical Note #5014. - -2011-03-23 Werner Lemberg - - * src/truetype/ttpload.c (tt_face_load_loca): Fix mismatch warning. - -2011-03-20 Werner Lemberg - - * src/sfnt/sfobjs.c (sfnt_open_font): Check number of TTC subfonts. - -2011-03-19 Werner Lemberg - - More C++ compilation fixes. - - * src/autofit/afhints.c (af_glyph_hints_dump_points, - af_glyph_hints_dump_segments, af_glyph_hints_dump_edges) - [__cplusplus]: Protect with `extern "C"'. - -2011-03-18 Werner Lemberg - - C++ compilation fixes. - - * src/autofit/aflatin.c (af_latin_hints_apply), src/autofit/afcjk.c - (af_cjk_hints_apply): Use cast for `dim'. - -2011-03-17 Alexei Podtelezhnikov - - A better fix for Savannah bug #32671. - - * src/smooth/ftgrays.c (gray_render_conic): Clean up code and - replace WHILE loop with a more natural DO-WHILE construct. - -2011-03-16 Werner Lemberg . - - * src/base/ftstroke.c (FT_StrokerRec): Remove unused `valid' field. - Suggested by Graham Asher. - -2011-03-09 Werner Lemberg - - Make FT_Sfnt_Table_Info return the number of SFNT tables. - - * src/sfnt/sfdriver.c (sfnt_table_info): Implement it. - * include/freetype/tttables.h: Update documentation. - * docs/CHANGES: Updated. - -2011-03-07 Bram Tassyns - - [cff] Fix Savannah bug #27988. - - * src/cff/cffobjs.c (remove_style): New function. - (cff_face_init): Use it to strip off the style part of the family - name. - -2011-03-07 Werner Lemberg - - * docs/CHANGES: Updated. - -2011-03-07 Alexei Podtelezhnikov - - Quick fix for Savannah bug #32671. - - This isn't the optimal solution yet, but it restores the previous - rendering quality (more or less). - - * src/smooth/ftgrays.c (gray_render_conic): Do more splitting. - -2011-03-06 Werner Lemberg - - Fix autohinting fallback. - - * src/base/ftobjs.c (FT_Load_Glyph): Assure that we only check TTFs, - ignoring CFF-based OTFs. - -2011-02-27 Werner Lemberg - - Add AF_CONFIG_OPTION_USE_WARPER to control the autofit warper. - - * devel/ftoption.h, include/freetype/config/ftoption.h - (AF_CONFIG_OPTION_USE_WARPER): New macro. - * src/autofit/aftypes.h (AF_USE_WARPER): Remove. - - * src/autofit/*: s/AF_USE_WARPER/AF_CONFIG_OPTION_USE_WARPER/. - - * src/autofit/afwarp.c [!AF_CONFIG_OPTION_USE_WARPER]: Replace dummy - variable assignment with a typedef. - -2011-02-26 Werner Lemberg - - [autofit] Slight simplifications. - - * src/autofit/aflatin.c (af_latin_hints_link_segments): Remove - test which always returns false. - (af_latin_hints_compute_blue_edges): Remove redundant assignment. - -2011-02-24 Werner Lemberg - - * docs/PROBLEMS: Mention rendering differences on different - platforms. - Suggested and worded by Jason Owen . - -2011-02-24 Werner Lemberg - - [autofit] Comment out unused code. - - * src/autofit/aflatin.c, src/autofit/aflatin2.c - (af_latin_hints_compute_edges): Do it. - -2011-02-24 Werner Lemberg - - * src/autofit/afhints.h (AF_GlyphHints): Remove unused field. - -2011-02-20 suzuki toshiya - - [cache] Fix an off-by-one bug in `FTC_Manager_RemoveFaceID'. - Found by , see detail in - - http://lists.gnu.org/archive/html/freetype/2011-01/msg00023.html - - * src/cache/ftccache.c (FTC_Cache_RemoveFaceID): Check the node - buckets[cache->p + cache->mask] too. - -2011-02-19 Kevin Kofler - - Fall back to autohinting if a TTF/OTF doesn't contain any bytecode. - This is Savannah patch #7471. - - * src/base/ftobjs.c (FT_Load_Glyph): Implement it. - -2011-02-19 John Tytgat - - [cff] Fix subset prefix removal. - This is Savannah patch #7465. - - * src/cff/cffobjs.c (remove_subset_prefix): Update length after - subset prefix removal. - -2011-02-13 Bradley Grainger - - Add inline assembly version of FT_MulFix for MSVC. - - * include/freetype/config/ftconfig.h: Ported the FT_MulFix_i386 - function from GNU inline assembly syntax (see #ifdef __GNUC__ block - above) to MASM syntax for Microsoft Visual C++. - -2011-02-13 Bradley Grainger - - Add project and solution files in Visual Studio 2010 format. - - * builds/win32/.gitignore: Ignore user-specific cache files. - * builds/win32/vc2010/: Add VS2010 project & solution files, created - by upgrading builds/win32/vc2008/freetype.vcproj. - * objs/.gitignore: Ignore Visual Studio output files. - -2011-02-01 Werner Lemberg - - * src/autofit/afdummy.c: Include `aferrors.h'. - Problem reported by Chris Liddell . - -2011-02-01 Werner Lemberg - - [cff] Ignore unknown operators in charstrings. - Patch suggested by Miles.Lau . - - * src/cff/cffgload.c (cff_decoder_parse_charstrings): Emit tracing - message for unknown operators and continue instead of exiting with a - syntax error. - -2011-02-01 Werner Lemberg - - [truetype] FT_LOAD_PEDANTIC now affects `prep' and `fpgm' also. - - * src/truetype/ttgload.c (tt_loader_init): Handle - `FT_LOAD_PEDANTIC'. - * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep, - tt_size_init_bytecode, tt_size_ready_bytecode): New argument to - handle pedantic mode. - * src/truetype/ttobjs.h: Updated. - -2011-01-31 Werner Lemberg - - [truetype] Protect jump instructions against endless loops. - - * src/truetype/interp.c (DO_JROT, DO_JMPR, DO_JROF): Exit with error - if offset is zero. - -2011-01-31 Werner Lemberg - - [truetype] Improve handling of invalid references. - - * src/truetype/interp.c: Set even more TT_Err_Invalid_Reference - error codes only if pedantic hinting is active. At the same time, - try to provide sane values which hopefully allow useful - continuation. Exception to this is CALL and LOOPCALL – due to - possible stack corruption it is necessary to bail out. - -2011-01-31 Werner Lemberg - - [truetype] Improve handling of stack underflow. - - * src/truetype/ttinterp.c (TT_RunIns, Ins_FLIPPT, Ins_DELTAP, - Ins_DELTAC): Exit with error only if `pedantic_hinting' is set. - Otherwise, try to do something sane. - -2011-01-30 Werner Lemberg - - * src/sfnt/ttmtx.c (tt_face_load_hmtx): Fix tracing message. - -2011-01-30 LIU Sun-Liang - - [truetype]: Fix behaviour of MIAP for invalid arguments. - - * src/truetype/ttinterp.c (Ins_MIAP): Set reference points even in - case of error. - -2011-01-18 Werner Lemberg - - [truetype] Fix handling of MIRP instruction. - - Thanks to Greg Hitchcock who explained the issue. - - * src/truetype/ttinterp.c (Ins_MIRP): Replace a `>=' operator with - `>' since the description in the specification is incorrect. - This fixes, for example, glyph `two' in font `Helvetica Neue LT Com - 65 medium' at 15ppem. - -2011-01-15 suzuki toshiya - - Fix ARM assembly code in include/freetype/config/ftconfig.h. - - * include/freetype/config/ftconfig.h (FT_MulFix_arm): - Copy the maintained code from builds/unix/ftconfig.in. - Old GNU binutils could not accept the reduced syntax - `orr %0, %2, lsl #16'. Un-omitted syntax like RVCT, - `orr %0, %0, %2, lsl #16' is better. Reported by - Johnson Y. Yan. The bug report by Qt developers is - considered too. - - http://bugreports.qt.nokia.com/browse/QTBUG-6521 - -2011-01-15 Werner Lemberg - - [raster] Make bbox handling the same as with Microsoft's rasterizer. - - Right before B/W rasterizing, the bbox gets simply rounded to - integers. This fixes, for example, glyph `three' in font `Helvetica - Neue LT Com 65 Medium' at 11ppem. - - Thanks to Greg Hitchcock who explained this behaviour. - - * src/raster/ftrend1.c (ft_raster1_render): Implement it. - -2011-01-15 suzuki toshiya - - Copy -mcpu=* & -march=* options from CFLAGS to LDFLAGS. - - * builds/unix/configure.raw: Consider recent gcc-standard - flags to specify architecture in CFLAGS & LDFLAGS - harmonization. Requested by Savannah bug #32114, to - support multilib feature of BuildRoot SDK correctly. - -2011-01-15 suzuki toshiya - - Fix off-by-one bug in CFLAGS & LDFLAGS harmonizer. - - * builds/unix/configure.raw: Some important options that - included in CFLAGS but not in LDFLAGS are copied to - LDFLAGS, but the last option in CFLAGS was not checked. - -2011-01-13 Werner Lemberg - - [raster] Add undocumented drop-out rule to the other bbox side also. - - * src/raster/ftraster.c (Vertical_Sweep_Drop, - Horizontal_Sweep_Drop): Implement it. - -2011-01-13 Werner Lemberg - - [raster] Reduce jitter value. - - This catches a rendering problem with glyph `x' from Tahoma at - 10ppem. It seems that the increase of the precision in the change - from 2009-06-11 makes a larger jitter value unnecessary. - - * src/raster/ftraster.c (Set_High_Precision): Implement it. - -2011-01-13 Werner Lemberg - - [raster] Handle drop-outs at glyph borders according to Microsoft. - - If a drop-out rule would switch on a pixel outside of the glyph's - bounding box, use the right (or top) pixel instead. This is an - undocumented feature, but some fonts like `Helvetica Neue LT Com 65 - Medium' heavily rely on it. - - Thanks to Greg Hitchcock who explained this behaviour. - - * src/raster/ftraster.c (Vertical_Sweep_Drop, - Horizontal_Sweep_Drop): Implement it. - -2011-01-09 suzuki toshiya - - [cache] Fix Savannah bug #31923, patch drafted by Harsha. - - When a node comparator changes the cached nodes during the - search of a node matching with queried properties, the - pointers obtained before the function should be updated to - prevent the dereference to freed or reallocated nodes. - To minimize the rescan of the linked list, the update is - executed when the comparator notifies the change of cached - nodes. This change depends previous change: - 38b272ffbbdaae276d636aec4ef84af407d16181 - - * src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP): Rescan the - top node if the cached nodes are changed. - * src/cache/ftccache.c (FTC_Cache_Lookup): Ditto. - -2011-01-09 suzuki toshiya - - [cache] Notice if a cache query induced the node list change. - - Some node comparators (comparing the cache node contents and the - properties specified by the query) can flush the cache node to - prevent the cache inflation. The change may invalidate the pointers - to the node obtained before the node comparison, so it should be - noticed to the caller. The problem caused by the cache node - changing is reported by Harsha, see Savannah bug #31923. - - * src/cache/ftccache.h (FTC_Node_CompareFunc): Add new argument - `FT_Bool* list_changed' to indicate the change of the cached nodes - to the caller. - (FTC_CACHE_LOOKUP_CMP): Watch the change of the cached nodes by - `_list_changed'. - (FTC_CACHE_TRYLOOP_END): Take new macro argument `_list_changed' - and update it when `FTC_Manager_FlushN' flushes any nodes. - - * src/cache/ftccback.h (ftc_snode_compare): Updated to fit with new - FTC_Node_CompareFunc type. - (ftc_gnode_compare): Ditto. - - * src/cache/ftcbasic.c: Include FT_INTERNAL_OBJECTS_H to use - TRUE/FALSE macros. - (ftc_basic_gnode_compare_faceid): New argument `FT_Bool* - list_changed' to indicate the change of the cache nodes (anyway, it - is always FALSE). - - * src/cache/ftccmap.c: Include FT_INTERNAL_OBJECTS_H to use - TRUE/FALSE macros. - (ftc_cmap_node_compare): New argument `FT_Bool* list_changed' to - indicate the change of the cache nodes (anyway, it is always FALSE). - (ftc_cmap_node_remove_faceid): Ditto. - - * src/cache/ftccache.c (FTC_Cache_NewNode): Pass a NULL pointer to - `FTC_CACHE_TRYLOOP_END', because the result is not needed. - (FTC_Cache_Lookup): Watch the change of the cache nodes by - `list_changed'. - (FTC_Cache_RemoveFaceID): Ditto. - - * src/cache/ftcglyph.c: Include FT_INTERNAL_OBJECTS_H to use - TRUE/FALSE macros. - (ftc_gnode_compare): New argument `FT_Bool* list_changed' to - indicate the change of the cache nodes (anyway, it is always FALSE). - (FTC_GNode_Compare): New argument `FT_Bool* list_changed' to be - passed to `ftc_gnode_compare'. - * src/cache/ftcglyph.h (FTC_GNode_Compare): Ditto. - - * src/cache/ftcsbits.c (ftc_snode_compare): New argument `FT_Bool* - list_changed' to indicate the change of the cache nodes, anyway. It - is updated by `FTC_CACHE_TRYLOOP'. - (FTC_SNode_Compare): New argument `FT_Bool* list_changed' to be - passed to `ftc_snode_compare'. - * src/cache/ftcsbits.h (FTC_SNode_Compare): Ditto. - -2011-01-09 suzuki toshiya - - [cache] Fit `FTC_GNode_Compare' to `FTC_Node_CompareFunc'. - - * src/cache/ftcglyph.h (FTC_GNode_Compare): Add the 3rd - argument `FTC_Cache cache' to fit FTC_Node_CompareFunc - prototype. - * src/cache/ftcglyph.c (FTC_GNode_Compare): Ditto. Anyway, - `cache' is not used by its child `ftc_gnode_compare'. - -2011-01-09 suzuki toshiya - - [cache] Deduplicate the code to get the top node by a hash. - - There are several duplicated code fragments getting the top node - from a cache by a given hash, like: - - idx = hash & cache->mask; - if ( idx < cache->p ) - idx = hash & ( cache->mask * 2 + 1 ); - pnode = cache->buckets + idx; - - To remove duplication, a cpp-macro to do same work - `FTC_NODE__TOP_FOR_HASH' is introduced. For non-inlined - configuration, non-`ftc_get_top_node_for_hash' is also introduced. - - * src/cache/ftccache.h (FTC_NODE__TOP_FOR_HASH): Declare - and implement inlined version. - (FTC_CACHE_LOOKUP_CMP): Use `FTC_NODE__TOP_FOR_HASH'. - * src/cache/ftccache.c (ftc_get_top_node_for_hash): Non-inlined - version. - (ftc_node_hash_unlink): Use `FTC_NODE__TOP_FOR_HASH'. - (ftc_node_hash_link): Ditto. - (FTC_Cache_Lookup): Ditto. - -2011-01-09 suzuki toshiya - - [cache] inline-specific functions are conditionalized. - - * src/cache/ftcglyph.c (FTC_GNode_Compare): Conditionalized for - inlined configuration. This function is a thin wrapper of - `ftc_gnode_compare' for inlined `FTC_CACHE_LOOKUP_CMP' (see - `nodecmp' argument). Under non-inlined configuration, - `ftc_gnode_compare' is invoked by `FTC_Cache_Lookup', via - `FTC_Cache->clazz.node_compare'. - - * src/cache/ftcglyph.h (FTC_GNode_Compare): Ditto. - * src/cache/ftcsbits.c (FTC_SNode_Compare): Ditto, for - `ftc_snode_compare'. - * src/cache/ftcsbits.h (FTC_SNode_Compare): Ditto. - -2011-01-09 suzuki toshiya - - [cache] Correct a type mismatch under non-inlined config. - - * src/cache/ftcglyph.h (FTC_GCACHE_LOOKUP_CMP): `FTC_GCache_Lookup' - takes the node via a pointer `FTC_Node*', differently from cpp-macro - `FTC_CACHE_LOOKUP_CMP'. - -2011-01-06 suzuki toshiya - - Update Jamfile to include Bzip2 support. - - * Jamfile: Include src/bzip2 to project. - Comments for lzw, gzip, bzip2 are changed to clarify that - they are for compressed PCF fonts, not others. - (e.g. compressed BDF fonts are not supported yet) - -2011-01-05 suzuki toshiya - - Update Symbian project files to include Bzip2 support. - - Currently, it provides `FT_Stream_OpenBzip2' that returns - unimplemented error always, to prevent unresolved symbol - error for the applications designed for Unix systems. - - * builds/symbian/bld.inf: Include ftbzip2.h. - * builds/symbian/freetype.mmp: Include ftbzip2.c. - -2011-01-05 suzuki toshiya - - Update classic MacOS makefiles to include Bzip2 support. - - Currently, it provides `FT_Stream_OpenBzip2' that returns - unimplemented error always, to prevent unresolved symbol - error for the applications designed for Unix systems. - - * builds/mac/FreeType.m68k_cfm.make.txt: Include ftbzip2.c.o. - * builds/mac/FreeType.m68k_far.make.txt: Ditto. - * builds/mac/FreeType.ppc_carbon.make.txt: Include ftbzip2.c.x. - * builds/mac/FreeType.ppc_classic.make.txt: Ditto. - -2011-01-05 suzuki toshiya - - Update Amiga makefiles to include Bzip2 support. - - Currently, it provides `FT_Stream_OpenBzip2' that returns - unimplemented error always, to prevent unresolved symbol - error for the applications designed for Unix systems. - - * builds/amiga/makefile: Include bzip2.ppc.o built from ftbzip2.c. - * builds/amiga/makefile.os4: Include bzip2.o built from ftbzip2.c. - * builds/amiga/smakefile: Ditto. - -2011-01-05 suzuki toshiya - - Update pkg-config tools to reflect Bzip2 support. - - * builds/unix/freetype-config.in: Include `-lbz2' to - --libs output, if built with Bzip2 support. - * builds/unix/freetype2.in: Ditto. - -2011-01-05 suzuki toshiya - - * builds/unix/configure.raw: Remove `SYSTEM_BZ2LIB' macro. - - SYSTEM_ZLIB is used to switch the builtin zlib source - or system zlib source out of FreeType2. But ftbzip2 - module has no builtin bzip2 library and always requires - system bzip2 library. Thus SYSTEM_BZ2LIB is always yes, - it is not used. - -2011-01-03 Werner Lemberg - - */rules.mk: Handle `*pic.c' files. - -2010-12-31 Werner Lemberg - - * src/cff/cfftypes.h (CFF_MAX_CID_FONTS): Increase to 64. - Problem reported by Tom Bishop . - -2010-12-31 Werner Lemberg - - Improve bzip2 support. - - * include/freetype/ftmoderr.h: Add bzip2. - - * docs/INSTALL.ANY, docs/CHANGES: Updated. - - * src/pcf/README: Updated. - * include/freetype/internal/pcftypes.h: Obsolete, removed. - -2010-12-31 Joel Klinghed - - Add bzip2 compression support to handle *.pcf.bz2 files. - - * builds/unix/configure.raw: Test for libbz2 library. - - * devel/ftoption.h, include/freetype/config/ftoption.h - (FT_CONFIG_OPTION_USE_BZIP2): Define. - * include/freetype/config/ftheader.h (FT_BZIP2_H): Define. - - * include/freetype/ftbzip2.h: New file. - - * src/bzip2/*: New files. - - * src/pcf/pcf.h: s/gzip_/comp_/. - * src/pcf/pcfdrvr.c: Include FT_BZIP2_H. - s/gzip_/comp_/. - (PCF_Face_Init): Handle bzip2 compressed files. - - * docs/formats.txt, modules.cfg: Updated. - -2010-12-25 Harsha - - Apply Savannah patch #7422. - - If we encounter a space in a string then the sbit buffer is NULL, - height and width are 0s. So the check in ftc_snode_compare will - always pass for spaces (comparision with 255). Here the comments - above the condition are proper but the implementation is not. When - we create an snode I think it is the proper way to initialize the - width to 255 and then put a check for being equal to 255 in snode - compare function. - - * src/cache/ftcsbits.c (FTC_SNode_New): Initialize sbit widths with - value 255. - (ftc_snode_compare): Fix condition. - -2010-12-13 Werner Lemberg - - Fix parameter handling of `FT_Set_Renderer'. - Reported by Kirill Tishin . - - * src/base/ftobjs.c (FT_Set_Renderer): Increment `parameters'. - -2010-12-09 Werner Lemberg - - [cff] Allow `hlineto' and `vlineto' without arguments. - - We simply ignore such instructions. This is invalid, but it doesn't - harm; and indeed, there exist such subsetted fonts in PDFs. - - Reported by Albert Astals Cid . - - * src/cff/cffgload.c (cff_decoder_parse_charstrings) - [cff_op_hlineto]: Ignore instruction if there aren't any arguments - on the stack. - -2010-11-28 Werner Lemberg - - * Version 2.4.4 released. - ========================= - - - Tag sources with `VER-2-4-4'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.4 - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.3/2.4.4/, s/243/244/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4. - - * builds/unix/configure.raw (version_info): Set to 12:2:6. - -2010-11-28 Alexei Podtelezhnikov - - [ftsmooth]: Minor code simplification. - - * src/smooth/ftgrays (gray_render_cubic): Do only one comparison - instead of two. - -2010-11-26 Johnson Y. Yan - - [truetype] Better multi-threading support. - - * src/truetype/ttinterp.c (TT_Load_Context): Reset glyph zone - references. - -2010-11-23 John Tytgat - - * src/psaux/t1decode.c (t1_decoder_parse_charstring): Expand - start_point, check_points, add_point, add_point1, close_contour - macros. - Remove add_contour macro. - Return error code from t1_builder_start_point and - t1_builder_check_points when there was one (instead of returning 0). - -2010-11-22 suzuki toshiya - - [truetype] Identify the tricky fonts by cvt/fpgm/prep checksums. - Some Latin TrueType fonts are still expected to be unhinted. - Fix Savannah bug #31645. - - * src/truetype/ttobjs.c (tt_check_trickyness): Divided to... - (tt_check_trickyness_family): this checking family name, and - (tt_check_trickyness_sfnt_ids): this checking cvt/fpgm/prep. - (tt_get_sfnt_checksum): Function to retrieve the sfnt checksum - for specified subtable even if cleared by lazy PDF generators. - (tt_synth_sfnt_checksum): Function to calculate the checksum. - -2010-11-18 Werner Lemberg - - [truetype] Fix `loca' handling for inconsistent number of glyphs. - Reported by Johnson Y. Yan . - - * src/truetype/ttpload.c (tt_face_load_loca): While sanitizing, - handle case where `loca' is the last table in the font. - -2010-11-18 Werner Lemberg - - [sfnt] Ignore all errors while loading `OS/2' table. - Suggested by Johnson Y. Yan . - - * src/sfnt/sfobjs.c (sfnt_load_face): Do it. - -2010-11-18 Johnson Y. Yan - - [type1] Fix matrix normalization. - - * src/type1/t1load.c (parse_font_matrix): Handle sign of scaling - factor. - -2010-11-18 Werner Lemberg - - [type1] Improve guard against malformed data. - Based on a patch submitted by Johnson Y. Yan - - - * src/type1/t1load.c (read_binary_data): Check `size'. - -2010-11-17 Werner Lemberg - - [sfnt] While tracing, output table checksums also. - - * src/sfnt/ttload.c (tt_face_load_font_dir): Do it. - -2010-11-04 suzuki toshiya - - [UVS] Fix `find_variant_selector_charmap', Savannah bug #31545. - - Since 2010-07-04, `find_variant_selector_charmap' returns - the first cmap subtable always under rogue-compatible - configuration, it causes NULL pointer dereference and - make UVS-related functions crashed. - - * src/base/ftobjs.c (Fix find_variant_selector_charmap): - Returns UVS cmap correctly. - -2010-11-01 Alexei Podtelezhnikov - - [ftsmooth] Improve rendering. - - * src/smooth/ftsmooth.c (gray_render_conic): Since version 2.4.3, - cubic deviations have been estimated _after_ UPSCALE, whereas - conic ones have been evaluated _before_ UPSCALE, which produces - inferior rendering results. Fix this. - Partially undo change from 2010-10-15 by using ONE_PIXEL/4; this has - been tested with demo images sent to the mailing list. See - - http://lists.gnu.org/archive/html/freetype-devel/2010-10/msg00055.html - - and later mails in this thread. - -2010-10-28 Werner Lemberg - - [ftraster] Minor fixes. - - Reported by Tom Bishop . - - * src/raster/ftraster.c (ULong): Remove unused typedef. - (TWorker): Remove unused variable `precision_mask'. - -2010-10-28 Werner Lemberg - - [ftraster] Fix rendering. - - Problem reported by Tom Bishop ; see - thread starting with - - http://lists.gnu.org/archive/html/freetype/2010-10/msg00049.html - - * src/raster/ftraster.c (Line_Up): Replace FMulDiv with SMulDiv - since the involved multiplication exceeds 32 bits. - -2010-10-25 suzuki toshiya - - Revert a change of `_idx' type in `FTC_CACHE_LOOKUP_CMP'. - - * src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP): Revert - the type of `_idx' from FT_PtrDist (by previous change) - to original FT_UFast, to match with FT_CacheRec. - -2010-10-24 suzuki toshiya - - [cache] Change the hash types to FT_PtrDist. - - On LLP64 platforms (e.g. Win64), FT_ULong (32-bit) - variables are inappropriate to calculate hash values - from the memory address (64-bit). The hash variables - are extended from FT_ULong to FT_PtrDist and new - hashing macro functions are introduced. The hash - values on 16-bit memory platforms are changed, but - ILP32 and LP64 are not changed. The hash value in - the cache subsystem is not reverted to the memory - address, so using signed type FT_PtrDist is safe. - - * src/cache/ftccache.h (_FTC_FACE_ID_HASH): New hash - function to replace `FTC_FACE_ID_HASH' for portability. - * src/cache/ftcmanag.h (FTC_SCALER_HASH): Replace - `FTC_FACE_ID_HASH' by `_FTC_FACE_ID_HASH'. - * src/cache/ftccmap.c (FTC_CMAP_HASH): Ditto. - - * src/cache/ftccache.h (FTC_NodeRec): The type of the - member `hash' is changed from FT_UInt32 to FT_PtrDist. - - * src/cache/ftccache.h (FTC_Cache_Lookup): The type of the - argument `hash' is changed from FT_UInt32 to FT_PtrDist. - (FTC_Cache_NewNode): Ditto. - * src/cache/ftccache.c (ftc_cache_add): Ditto. - (FTC_Cache_Lookup): Ditto. (FTC_Cache_NewNode): Ditto. - * src/cache/ftcglyph.h (FTC_GCache_Lookup): Ditto. - * src/cache/ftcglyph.c (FTC_GCache_Lookup): Ditto. - - * src/cache/ftcbasic.c (FTC_ImageCache_Lookup): The type - of the internal variable `hash' is changed to FT_PtrDist - from FT_UInt32. (FTC_ImageCache_LookupScaler): Ditto. - (FTC_SBitCache_Lookup): Ditto. - (FTC_SBitCache_LookupScaler): Ditto. - * src/cache/ftccmap.c (FTC_CMapCache_Lookup): Ditto. - * src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP): Ditto. - Also the type of the internal variable `_idx' is changed to - FT_PtrDist from FT_UFast for better pointer calculation. - -2010-10-24 suzuki toshiya - - [cache] Hide internal macros incompatible with LLP64. - - `FT_POINTER_TO_ULONG', `FTC_FACE_ID_HASH', and - `FTC_IMAGE_TYPE_HASH' are enclosed by - FT_CONFIG_OPTION_OLD_INTERNALS and hidden from - normal clients. - - For the history of these macros, see the investigation: - http://lists.gnu.org/archive/html/freetype/2010-10/msg00022.html - -2010-10-24 suzuki toshiya - - Change the type of `FT_MEM_VAL' from FT_ULong to FT_PtrDist. - - On LLP64 platforms (e.g. Win64), unsigned long (32-bit) - cannot cover the memory address (64-bit). `FT_MEM_VAL' is - used for hashing only and not dereferred, so using signed - type FT_PtrDist is safe. - - * src/base/ftdbgmem.c (FT_MEM_VAL): Change the type of the - return value from FT_ULong to FT_PtrDist. - (ft_mem_table_resize): The type of hash is changed to - FT_PtrDist. (ft_mem_table_get_nodep): Ditto. - -2010-10-24 suzuki toshiya - - Replace "%lx" for memory address by "%p", LLP64 platforms. - - On LLP64 platforms (e.g. Win64), long (32-bit) cannot cover - the memory address (64-bit). Also the casts from the pointer - type to long int should be removed to preserve the address - correctly. - - * src/raster/ftraster.c (New_Profile): Replace "%lx" by "%p". - (End_Profile) Ditto. - * src/truetype/ttinterp.c (Init_Context): Ditto. - -2010-10-15 Alexei Podtelezhnikov - - Fix thinko in spline flattening. - - FT_MAX_CURVE_DEVIATION is dependent on the value of ONE_PIXEL. - - * src/smooth/ftgrays.c (FT_MAX_CURVE_DEVIATION): Remove it and - replace it everywhere with ONE_PIXEL/8. - -2010-10-13 suzuki toshiya - - [raccess] Skip unrequired resource access rules by Darwin VFS. - - When a resource fork access rule by Darwin VFS could open the - resource fork but no font is found in it, the rest of rules - by Darwin VFS are skipped. It reduces the warnings of the - deprecated resource fork access method by recent Darwin kernel. - Fix MacPorts ticket #18859: - http://trac.macports.org/ticket/18859 - - * src/base/ftobjs.c (load_face_in_embedded_rfork): - When `FT_Stream_New' returns FT_Err_Cannot_Open_Stream, it - means that the file is possible to be `fopen'-ed but zero-sized. - Also there is a case that the resource fork is not zero-sized, - but no supported font exists in it. If a rule by Darwin VFS - falls into such cases, there is no need to try other Darwin VFS - rules anymore. Such cases are marked by vfs_rfork_has_no_font. - If it is TRUE, the Darwin VFS rules are skipped. - -2010-10-13 suzuki toshiya - - [raccess] Grouping resource access rules based on Darwin VFS. - - MacOS X/Darwin kernel supports a few tricky methods to access - a resource fork via ANSI C or POSIX interface. Current resource - fork accessor tries all possible methods to support all kernels. - But if a method could open a resource fork but no font is found, - there is no need to try other methods older than tested method. - To determine whether the rule index is for Darwin VFS, a local - function `ftrfork.c::raccess_rule_by_darwin_vfs' is introduced. - To use this function in ftobjs.c etc but it should be inlined, - it is exposed by ftbase.h. - - * src/base/ftrfork.c (FT_RFork_Rule): New enum type to identify - the rules to access the resource fork. - (raccess_guess_rec): New structure to bind the rule function and - rule enum type. - (FT_Raccess_Guess): The list of the rule functions is replaced by - (raccess_guess_table): This. This is exposed to be used by other - intra module functions. - (raccess_rule_by_darwin_vfs): A function to return a boolean - if the rule specified by the rule index is based on Darwin VFS. - -2010-10-13 suzuki toshiya - - Prevent to open a FT_Stream for zero-sized file on non-Unix. - - builds/unix/ftsystem.c prevents to open an useless stream from - zero-sized file and returns FT_Err_Cannot_Open_Stream, but the - stream drivers for ANSI C, Amiga and VMS return useless streams. - For cross-platform consistency, all stream drivers should act - same. - - * src/base/ftsystem.c (FT_Stream_Open): If the size of the opened - file is zero, FT_Err_Cannot_Open_Stream is returned. - * builds/amiga/src/base/ftsystem.c (FT_Stream_Open): Ditto. - * src/vms/ftsystem.c (FT_Stream_Open): Ditto. - -2010-10-12 Werner Lemberg - - [truetype] Fix Savannah bug #31310. - - * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Protect against - invalid `runcnt' values. - -2010-10-08 Chris Liddell - - [sfnt] Fix Savannah bug #31275. - - * src/sfnt/ttpost.c: Include FT_INTERNAL_DEBUG_H. - -2010-10-06 Werner Lemberg - - [truetype] Improve error handling of `SHZ' bytecode instruction. - Problem reported by Chris Evans . - - * src/truetype/ttinterp.c (Ins_SHZ): Check `last_point'. - -2010-10-05 Werner Lemberg - - Fix Savannah bug #31253. - Patch submitted by an anonymous reporter. - - * configure: Use `awk' instead of `sed' to manipulate output of `ls - -id'. - -2010-10-03 Werner Lemberg - - * Version 2.4.3 released. - ========================= - - - Tag sources with `VER-2-4-3'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.3 - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.2/2.4.3/, s/242/243/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3. - - * builds/unix/configure.raw (version_info): Set to 12:1:6. - -2010-10-03 Werner Lemberg - - Avoid `configure' issues with symbolic links. - Based on a patch from Alexander Stohr . - - * configure: Compare directories using `ls -id'. - Check existence of `reference' subdirectory before creating it. - -2010-10-02 Werner Lemberg - - [sfnt] Fix Savannah bug #31088 (sort of). - - * src/sfnt/ttload.c (tt_face_load_maxp): Always allocate at least 64 - function entries. - -2010-10-02 Werner Lemberg - - [smooth] Fix splitting of cubics for negative values. - - Reported by Róbert Márki ; see - http://lists.gnu.org/archive/html/freetype/2010-09/msg00019.html. - - * src/smooth/ftgrays.c (gray_render_cubic): Fix thinko. - -2010-10-01 suzuki toshiya - - [truetype] Fix Savannah bug #31040. - - * src/truetype/ttinterp.c (free_buffer_in_size): Remove. - (TT_RunIns): Updated. - -2010-09-20 suzuki toshiya - - [sfnt] Make error message filling NULL names less verbose. - - * src/sfnt/ttpost.c (load_format_20): Showing 1 summary message - when we fill `post' names by NULL, instead of per-entry message. - -2010-09-20 Graham Asher - David Bevan - - [smooth] Fix and improve spline flattening. - - This fixes the flattening of cubic, S-shaped curves and speeds up - the handling of both the conic and cubic arcs. - - See the discussions on the freetype-devel mailing list in late - August and September 2010 for details. - - * src/smooth/ftgrays.c (FT_MAX_CURVE_DEVIATION): New macro. - (TWorker): Remove `conic_level' and `cubic_level' elements. - (gray_render_conic): Simplify algorithm. - (gray_render_cubic): New algorithm; details are given in the code - comments. - (gray_convert_glyph): Remove heuristics. - -2010-09-19 Werner Lemberg - - Minor fixes. - - * src/cff/cffload.c (cff_charset_compute_cids): `charset->sids[i]' - is `FT_UShort'. - (cff_index_access_element): Don't use additions in comparison. - * src/sfnt/ttpost.c (load_format_20): Make `post_limit' of type - `FT_Long'. - Don't use additions in comparison. - Improve tracing messages. - (load_format_25, load_post_names): Make `post_limit' of type - `FT_Long'. - -2010-09-19 suzuki toshiya - - [cff] Truncate the element length at the end of the stream. - See Savannah bug #30975. - - * src/cff/cffload.c (cff_index_access_element): `off2', the offset - to the next element is truncated at the end of the stream to prevent - invalid I/O. As `off1', the offset to the requested element has - been checked by `FT_STREAM_SEEK', `off2' should be checked - similarly. - -2010-09-19 suzuki toshiya - - [cff] Ignore CID > 0xFFFFU. - See Savannah bug #30975. - - * src/cff/cffload.c (cff_charset_compute_cids): Ignore CID if - greater than 0xFFFFU. CFF font spec does not mention maximum CID in - the font, but PostScript and PDF spec define that maximum CID is - 0xFFFFU. - -2010-09-19 suzuki toshiya - - [cff] Make trace message in` cff_charset_load' verbose. - See Savannah bug #30975. - - * src/cff/cffload.c (cff_charset_load): Report the original `nleft' - and truncated `nleft'. - -2010-09-19 suzuki toshiya - - [cff] Correct `max_cid' from CID array length to max CID. - See Savannah bug #30975. - - * src/cff/cffload.c (cff_charset_compute_cids): Don't increment - max_cid after detecting max CID. The array CFF_Charset->cids is - allocated by max_cid + 1. - (cff_charset_cid_to_gindex): Permit CID is less than or equal to - CFF_Charset->max_cid. - * src/cff/cffobjs.c (cff_face_init): FT_Face->num_glyphs is - calculated as CFF_Charset->max_cid + 1. - -2010-09-19 suzuki toshiya - - [truetype] Sanitize the broken offsets in `loca'. - See Savannah bug #31040. - - * src/truetype/ttpload.c (tt_face_get_location): If `pos1', the - offset to the requested entry in `glyf' exceeds the end of the - table, return offset=0, length=0. If `pos2', the offset to the next - entry in `glyf' exceeds the end of the table, truncate the entry - length at the end of `glyf' table. - -2010-09-19 suzuki toshiya - - [sfnt] Prevent overrunning in `post' table parser. - See Savannah bug #31040. - - * src/sfnt/ttpost.c (load_post_names): Get the length of `post' - table and pass the limit of `post' table to `load_format_20' and - `load_format_25'. - (load_format_20): Stop the parsing when we reached at the limit of - `post' table. If more glyph names are required, they are filled by - NULL names. - -2010-09-17 suzuki toshiya - - [truetype] Don't duplicate size->twilight structure to be freed. - See Savannah bug #31040 for detail. - - * src/truetype/ttinterp.c (free_buffer_in_size): Don't duplicate - FT_GlyphZoneRec size->twilight to be freed. If duplicated, - `FT_FREE' erases the duplicated pointers only and leave original - pointers. They can cause the double-free crash when the burst - errors occur in TrueType interpreter and `free_buffer_in_size' is - invoked repeatedly. - -2010-09-15 Werner Lemberg - - Make bytecode debugging with FontForge work again. - - * src/truetype/ttinterp.c (TT_RunIns): Don't call - `free_buffer_in_size' in case of error if a debugger is active. - -2010-09-14 Werner Lemberg - - Improve tracing messages. - - * src/truetype/ttinterp.c (TT_RunIns): Improve wording of tracing - message. - * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Add - tracing message. - * src/truetype/ttgload.c (tt_loader_init): Add tracing message. - * src/cache/ftcsbits.c (ftc_snode_load): Emit tracing message if - glyph doesn't fit into a small bitmap container. - -2010-09-13 Werner Lemberg - - Fix minor issues reported by . - - * src/autofit/aflatin.c (af_latin_compute_stem_width): Remove - redundant conditional check. - * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Ditto. - * src/cff/cffload.c (cff_encoding_load): Remove conditional check - which always evaluates to `true'. - * src/pshinter/pshalgo.c (ps_glyph_interpolate_strong_points): - Ditto. - * src/truetype/ttinterp.c (Ins_IUP): Ditto. - * src/cid/cidgload.c (cid_slot_load_glyph): Don't check for NULL if - value is already dereferenced. - * src/winfonts/winfnt.c (FNT_Load_Glyph): Fix check of `face'. - -2010-08-31 suzuki toshiya - - Ignore the environmental setting of LIBTOOL. - Patch is suggested by Adrian Bunk, to prevent unexpected - reflection of environmental LIBTOOL. See: - http://savannah.nongnu.org/patch/?7290 - - * builds/unix/unix-cc.in: LIBTOOL is unconditionally set to - $(FT_LIBTOOL_DIR)/libtool. FT_LIBTOOL_DIR is set to $(BUILD_DIR) - by default. - * configure: When configured for the building out of source tee, - FT_LIBTOOL_DIR is set to $(OBJ_DIR). - -2010-08-31 suzuki toshiya - - [truetype] Decrease the trace level catching the interpreter error. - - * src/truetype/ttinterp.c (TT_RunIns): Decrease the trace level - showing the error when the interpreter returns with an error, - from` FT_TRACE7' to `FT_TRACE1'. - -2010-08-30 suzuki toshiya - - [truetype] Prevent bytecode reuse after the interpretation error. - - * src/truetype/ttinterp.c (free_buffer_in_size): New function to - free the buffer allocated during the interpretation of this glyph. - (TT_RunIns): Unset FT_Face->size->{cvt_ready,bytecode_ready} if - an error occurs in the bytecode interpretation. The interpretation - of invalid bytecode may break the function definitions and referring - them in later interpretation is danger. By unsetting these flags, - `fpgm' and `prep' tables are executed again in next interpretation. - - This fixes Savannah bug #30798, reported by Robert Święcki. - -2010-08-29 Werner Lemberg - - [ftraster] Pacify compiler. - - * src/raster/ftraster.c (ft_black_new) [_STANDALONE_]: `memory' is - not used. - -2010-08-29 Werner Lemberg - - [cff] Allow SIDs >= 65000. - - * src/cff/cffload.c (cff_charset_load): Fix change from 2009-03-20: - The threshold for SIDs is not applicable here. I misinterpreted the - `SID values 65000 and above are available for implementation use' - sentence in the CFF specification. - - Problem reported by Ivan Ninčić . - -2010-08-28 suzuki toshiya - - Force hinting when the font lacks its familyname. - - In Type42 or Type11 font embedded in PostScript & PDF, TrueType sfnt - stream may lack `name' table because they are not required. Hinting - for nameless fonts is safer for PDFs including embedded Chinese - fonts. Written by David Bevan, see: - - http://lists.gnu.org/archive/html/freetype-devel/2010-08/msg00021.html - http://lists.freedesktop.org/archives/poppler/2010-August/006310.html - - * src/truetype/ttobjs.c (tt_check_trickyness): If a NULL pointer by - nameless font is given, TRUE is returned to enable hinting. - -2010-08-28 suzuki toshiya - - Register yet another tricky TrueType font. - - * src/truetype/ttobjs.c (tt_check_trickyness): Add `HuaTianKaiTi?', - a Kaishu typeface paired with `HuaTianSongTi?' by Huatian - Information Industry. - -2010-08-17 Teijo Kinnunen - - [cache] Fix Savannah bug #30788. - - * src/cache/ftccache.c (FTC_Cache_Clear): Check `cache->buckets' for - NULL too. - -2010-08-10 Werner Lemberg - - Try to fix Savannah bug #30717 (and probably #30719 too). - - * src/smooth/ftsmooth.c (ft_smooth_render_generic): Add another - overflow test for `width' and `height'. - -2010-08-06 Werner Lemberg - - * Version 2.4.2 released. - ========================= - - - Tag sources with `VER-2-4-2'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.2 - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.1/2.4.2/, s/241/242/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2. - - * builds/unix/configure.raw (version_info): Set to 12:0:6. - -2010-08-06 suzuki toshiya - - Fix Savannah bug #30648. - - * src/base/ftobjs.c (FT_Done_Library): Specify the order of font - drivers during the face closing process. Type42 faces should be - closed before TrueType faces, because a Type42 face refers to - another internal TrueType face which is created from sfnt[] array on - the memory. - -2010-08-06 Yuriy Kaminskiy - - [raster] Fix valgrind warning. - - * src/raster/ftraster.c (Decompose_Curve) : Access point[0] - only if we don't hit `limit'. - -2010-08-06 suzuki toshiya - - Fix Savannah bug #30658. - - * src/base/ftobjs.c (Mac_Read_POST_Resource): Check that the total - length of collected POST segments does not overrun the allocated - buffer. - -2010-08-06 Yuriy Kaminskiy - - Fix conditional usage of FT_MulFix_i386. - With -ansi flag, gcc does not define `i386', only `__i386__'. - - * include/freetype/config/ftconfig.h, builds/unix/ftconfig.in: - s/i386/__i386__/. - -2010-08-05 Werner Lemberg - - [truetype] Fix Savannah bug #30657. - - * src/truetype/ttinterp.c (BOUNDSL): New macro. - Change `BOUNDS' to `BOUNDSL' where appropriate. - - * src/truetype/ttinterp.h (TT_ExecContextRec): Fix type of - `cvtSize'. - -2010-08-05 Werner Lemberg - - [type42] Fix Savannah bug #30656. - - * src/type42/t42parse.c (t42_parse_sfnts): Protect against negative - string_size. - Fix comparison. - -2010-08-05 suzuki toshiya - - [cff] Don't use any values in decoder after parsing error. - - * src/cff/cffgload.c (cff_slot_load): Skip the evaluations - of the values in decoder, if `cff_decoder_parse_charstrings' - returns any error. - -2010-08-04 Werner Lemberg - - Fix Savannah bug #30644. - - * src/base/ftstream.c (FT_Stream_EnterFrame): Fix comparison. - -2010-08-04 Werner Lemberg - - `make devel' fails if FT_CONFIG_OPTION_OLD_INTERNALS is set. - - * devel/ftoption.h: Synchronize with - include/freetype/config/ftoption.h. - -2010-08-04 suzuki toshiya - - [cff] Improve stack overflow test. - - * src/cff/cffgload.c (cff_decoder_parse_charstrings): Check stack - after execution of operations too. - -2010-07-18 Werner Lemberg - - Add reference counters and to FT_Library and FT_Face objects. - - * include/freetype/freetype.h (FT_Reference_Face): New function. - * include/freetype/ftmodapi.h (FT_Rererence_Library): New function. - - * include/freetype/internal/ftobjs.h (FT_Face_InternalRec, - FT_LibraryRec): New field `refcount'. - - * src/base/ftobjs.c (FT_Open_Face, FT_New_Library): Handle - `refcount'. - (FT_Reference_Face, FT_Reference_Library): Implement new functions. - (FT_Done_Face, FT_Done_Library): Handle `refcount'. - - * docs/CHANGES: Updated. - -2010-07-18 Werner Lemberg - - * Version 2.4.1 released. - ========================= - - - Tag sources with `VER-2-4-1'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.1. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.4.0/2.4.1/, s/240/241/. - - * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1. - - * builds/unix/configure.raw (version_info): Set to 11:1:5. - -2010-07-17 Werner Lemberg - - [cff] Final try to fix `hintmask' and `cntrmask' limit check. - - Problem reported by Tobias Wolf . - - * src/cff/cffgload.c (cff_decoder_parse_charstrings) - : Sigh. I'm apparently too silly to fix this - correctly in less than three tries. - -2010-07-12 Werner Lemberg - - * Version 2.4.0 released. - ========================= - - - Tag sources with `VER-2-4-0'. - - * docs/CHANGES: Updated. - - * docs/VERSION.DLL: Update documentation and bump version number to - 2.4.0. - - * README, Jamfile (RefDoc), - builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html, - builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html, - builds/win32/visualc/freetype.dsp, - builds/win32/visualc/freetype.vcproj, - builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp, - builds/win32/visualce/freetype.vcproj, - builds/win32/visualce/index.html, - builds/wince/vc2005-ce/freetype.vcproj, - builds/wince/vc2005-ce/index.html, - builds/wince/vc2008-ce/freetype.vcproj, - builds/wince/vc2008-ce/index.html: s/2.3.12/2.4.0/, s/2312/240/. - - * include/freetype/freetype.h (FREETYPE_MINOR): Set to 4. - (FREETYPE_PATCH): Set to 0. - - * builds/unix/configure.raw (version_info): Set to 11:0:5. - -2010-07-12 Werner Lemberg - - Remove C++ warnings. - - */*: Initialize pointers where necessary to make g++ happy. - -2010-07-12 malc - Richard Henderson - - Fix type-punning issues with C++. - - * include/freetype/internal/ftmemory.h (FT_ASSIGNP) [__cplusplus]: - Emulate a `typeof' operator with an inline template which uses - `static_cast'. - -2010-07-11 Werner Lemberg - - Fix C++ compilation issue. - - * src/tools/apinames.c (names_dump) : Fix - type of `dot' variable. - -2010-07-10 suzuki toshiya - - Fix another case reported in Savannah bug #30373. - Permit a face for Type1, Type42 and CFF without charmap, - patch by Tor Andersson. - - * src/type1/t1objs.c (T1_Face_Init): Reset the error if it - is FT_Err_No_Unicode_Glyph_Name. - * src/type42/t42objs.c (T42_Face_Init): Ditto. - * src/cff/cffobjs.c (cff_face_init): Ditto. - -2010-07-09 suzuki toshiya - - Use defined macros to set {platform,encoding}_id. - - * src/bdf/bdfdrivr.c: Include ttnameid.h and use macros to - set charmap.{platfom,encoding}_id. - * src/pcf/pcfdrivr.c: Ditto. - * src/winfonts/winfnt.c: Ditto. - * src/type1/t1objs.c: Ditto. - * src/type42/t42objs.c: Ditto. - * src/cff/cffobjs.c: Ditto. - * src/pfr/pfrobjs.c: Ditto. - -2010-07-09 suzuki toshiya - - Fix Savannah bug #30373. - Too serious check of errors by `FT_CMap_New' since 2010-07-04 - is fixed. Reported by Tor Andersson. - - * include/freetype/fterrdef.h - (PSnames_Err_No_Unicode_Glyph_Name): New error code to - indicate the Unicode charmap synthesis failed because - no Unicode glyph name is found. - - * src/psnames/psmodule.c (ps_unicodes_init): Return - PSnames_Err_No_Unicode_Glyph_Name when no Unicode glyph name - is found in the font. - * src/cff/cffcmap.c (cff_cmap_unicode_init): Return - CFF_Err_No_Unicode_Glyph_Name when no SID is available. - - * src/type1/t1objs.c (T1_Face_Init): Proceed if `FT_CMap_New' - is failed by the lack of Unicode glyph name. - * src/type42/t42objs.c (T42_Face_Init): Ditto. - * src/cff/cffobjs.c (cff_face_init): Ditto. - -2010-07-09 Ken Sharp - - Make ftraster.c compile in stand-alone mode with MSVC compiler. - - * src/raster/ftmisc.h (FT_Int64) [_WIN32, _WIN64]: Fix typedef - since there is no `inttypes.h' for MSVC. - -2010-07-08 Werner Lemberg - - [truetype] Fix Savannah bug #30361. - - * src/truetype/ttinterp.c (Ins_IUP): Fix bounds check. - -2010-07-06 Werner Lemberg - - Pacify compiler. - - * src/cff/cffload.c (cff_index_get_pointers): Initialize - `new_bytes'. - -2010-07-05 Eugene A. Shatokhin - - Fix Savannah bug #27648. - - * src/base/ftobjs.c (ft_remove_renderer, FT_Add_Module): Call - `raster_done' only if we have an outline glyph format. - -2010-07-05 Werner Lemberg - - Fix Savannah bug #30030. - - * builds/win32/*/freetype.vcproj: Add ftxf86.c. - -2010-07-05 Werner Lemberg - - [cff] Next try to fix `hintmask' and `cntrmask' limit check. - - Problem reported by malc . - - * src/cff/cffgload.c (cff_decoder_parse_charstrings) - : It is possible that there is just a single byte - after the `hintmask' or `cntrmask', e.g., a `return' instruction. - -2010-07-04 suzuki toshiya - - Restrict the number of the charmaps in a rogue-compatible mode. - Fix for Savannah bug #30059. - - * src/cache/ftccmap.c (FTC_CMapCache_Lookup): Replace `16' the - minimum character code passed by a legacy rogue client by... - * include/freetype/config/ftoption.h (FT_MAX_CHARMAP_CACHEABLE): - This. It is undefined when FT_CONFIG_OPTION_OLD_INTERNALS is - undefined (thus the rogue client compatibility is not required). - - * src/cff/cffobjs.c (cff_face_init): Abort the automatic - selection or synthesis of Unicode cmap subtable when the charmap - index exceeds FT_MAX_CHARMAP_CACHEABLE. - * src/sfnt/ttcmap.c (tt_face_build_cmaps): Issue error message - when the charmap index exceeds FT_MAX_CHARMAP_CACHEABLE. - - * src/base/ftobjs.c (find_unicode_charmap): When Unicode charmap - is found after FT_MAX_CHARMAP_CACHEABLE, ignore it and search - earlier one. - (find_variant_selector_charmap): When UVS charmap is found after - FT_MAX_CHARMAP_CACHEABLE, ignore it and search earlier one. - (FT_Select_Charmap): When a charmap matching with requested - encoding but after FT_MAX_CHARMAP_CACHEABLE, ignore and search - earlier one. - (FT_Set_Charmap): When a charmap matching with requested - charmap but after FT_MAX_CHARMAP_CACHEABLE, ignore and search - earlier one. - (FT_Get_Charmap_Index): When a requested charmap is found - after FT_MAX_CHARMAP_CACHEABLE, return the inverted charmap - index. - -2010-07-04 Werner Lemberg - - TrueType hinting is no longer patented. - - * include/freetype/config/ftoption.h, devel/ftoption.h - (TT_CONFIG_OPTION_BYTECODE_INTERPRETER): Define. - (TT_CONFIG_OPTION_UNPATENTED_HINTING): Undefine. - - * docs/CHANGES, docs/INSTALL, include/freetype/freetype.h: Updated. - * docs/TRUETYPE, docs/PATENTS: Removed. - -2010-07-04 suzuki toshiya - - Check error value by `FT_CMap_New'. - - * src/cff/cffobjs.c (cff_face_init): Check error value by - `FT_CMap_New'. - * src/pfr/pfrobjs.c (pfr_face_init): Ditto. - * src/type1/t1jobjs.c (T1_Face_Init): Ditto. - * src/type42/t42jobjs.c (T42_Face_Init): Ditto. - -2010-07-03 Werner Lemberg - - Make ftgrays.c compile stand-alone again. - - * src/smooth/ftgrays.c [_STANDALONE_]: Include `stddef.h'. - (FT_INT_MAX, FT_PtrDist)[_STANDALONE_]: Define. - -2010-07-02 suzuki toshiya - - Additional fix for Savannah bug #30306. - - * src/base/ftobjs.c (Mac_Read_POST_Resource): If the type of the - POST fragment is 0, the segment is completely ignored. The declared - length of the segment is not cared at all. According to Adobe - Technical Note 5040, type 0 segment is a comment only and should not - be loaded for the interpreter. Reported by Robert Święcki. - -2010-07-01 Werner Lemberg - - [truetype] Protect against code range underflow. - - * src/truetype/ttinterp.c (DO_JROT, DO_JMPR, DO_JROF): Don't allow - negative IP values. - -2010-07-01 Werner Lemberg - - [truetype] Add rudimentary tracing for bytecode instructions. - - * src/truetype/ttinterp.c (opcode_name) [FT_DEBUG_LEVEL_TRACE]: New - array. - (TT_RunIns): Trace opcodes. - -2010-06-30 Werner Lemberg - - [smooth] Fix Savannah bug #30263. - - * src/smooth/ftgrays.c (gray_render_span): Use cast to `unsigned - int' to avoid integer overflow. - - * src/smooth/ftsmooth.c (ft_smooth_render_generic): Use smaller - threshold values for `width' and `height'. This is not directly - related to the bug fix but makes sense anyway. - -2010-07-01 suzuki toshiya - - Initial fix for Savannah bug #30306. - - * src/base/ftobjs.c (Mac_Read_POST_Resource): Check `rlen', the - length of fragment declared in the POST fragment header, and prevent - an underflow in length calculation. Some fonts set the length to - zero in spite of the existence of a following 16bit `type'. - Reported by Robert Święcki. - -2010-07-01 suzuki toshiya - - Additional fix for Savannah bug #30248 and #30249. - - * src/base/ftobjs.c (Mac_Read_POST_Resource): Check the buffer size - during gathering PFB fragments embedded in LaserWriter PS font for - Macintosh. Reported by Robert Święcki. - -2010-06-30 Alexei Podtelezhnikov - - Minor optimizations by avoiding divisions. - - * src/sfnt/ttkern.c (tt_face_load_kern, tt_face_get_kerning): - Replace divisions with multiplication in comparisons. - -2010-06-29 Werner Lemberg - - Fix minor tracing issues. - - * src/cff/cffgload.c, src/truetype/ttgload.c: Adjust tracing levels. - -2010-06-27 Werner Lemberg - - [cff] Really fix `hintmask' and `cntrmask' limit check. - - * src/cff/cffgload.c (cff_decoder_parse_charstrings) - : Fix thinko and handle tracing also. - -2010-06-27 Werner Lemberg - - Fix valgrind warning. - - * src/base/ftoutln.c (FT_Outline_Get_Orientation): Initialize - `result' array. - -2010-06-27 Werner Lemberg - - [cff] Fix memory leak. - - * src/cff/cffgload.c (cff_operator_seac): Free charstrings even in - case of errors. - -2010-06-27 Werner Lemberg - - [cff] Protect against invalid `hintmask' and `cntrmask' operators. - - * src/cff/cffgload.c (cff_decoder_parse_charstrings) - : Ensure that we don't exceed `limit' while parsing - the bit masks of the `hintmask' and `cntrmask' operators. - -2010-06-26 Werner Lemberg - - Fix PFR change 2010-06-24. - - * src/pfr/pfrgload.c (pfr_glyph_load_simple): Really protect against - invalid indices. - -2010-06-26 Werner Lemberg - - Improve PFR tracing messages. - - * src/pfr/pfrgload.c (pfr_glyph_load_rec): Emit tracing messages for - simple and compound glyph offsets. - -2010-06-26 Werner Lemberg - - Fix last PFR change. - - * src/pfr/pfrobjs.c (pfr_face_init): Fix rejection logic. - -2010-06-26 Werner Lemberg - - [sfnt] Fix Savannah bug #30262. - - * src/sfnt/ttload.c (tt_face_load_maxp): Limit `maxComponentDepth' - arbitrarily to 100 to avoid stack exhaustion. - -2010-06-26 Werner Lemberg - - Add some memory checks (mainly for debugging). - - * src/base/ftstream.c (FT_Stream_EnterFrame): Exit with error - if the frame size is larger than the stream size. - - * src/base/ftsystem.c (ft_ansi_stream_io): Exit with error if - seeking a position larger than the stream size. - -2010-06-25 Werner Lemberg - - [pfr] Fix Savannah bug #30261. - - * src/pfr/pfrobjs.c (pfr_face_init): Reject fonts which contain - neither outline nor bitmap glyphs. - -2010-06-25 Werner Lemberg - - [cff] Fix Savannah bug #30254. - - * src/cff/cffload.c (cff_index_get_pointers): Do sanity check for - first offset also. - -2010-06-25 suzuki toshiya - - Initial fix for Savannah bug #30248 and #30249. - - * src/base/ftobjs.c (Mac_Read_POST_Resource): Check the error during - reading a PFB fragment embedded in LaserWriter PS font for Macintosh. - Reported by Robert Święcki. - -2010-06-24 Werner Lemberg - - [pcf] Fix Savannah bug #30247. - - * src/pcf/pcfread.c (pcf_get_metrics): Disallow (invalid) fonts with - zero metrics. - -2010-06-24 Graham Asher - - * src/smooth/ftgrays.c (gray_render_cubic): Fix algorithm. - The previous version was too aggressive, as demonstrated in - http://lists.gnu.org/archive/html/freetype-devel/2010-06/msg00020.html. - -2010-06-24 Werner Lemberg - - */*: Use module specific error names where appropriate. - -2010-06-24 Werner Lemberg - - [sfnt] Fix Savannah bug #30236. - - * src/sfnt/ttcmap.c (tt_face_build_cmaps): Improve check for pointer - to `cmap_table'. - -2010-06-24 Werner Lemberg - - [pfr] Fix Savannah bug #30235. - - * src/pfr/pfrgload.c (pfr_glyph_load_simple): Protect against - invalid indices if there aren't any coordinates for indexing. - -2010-06-24 Werner Lemberg - - [bdf]: Font properties are optional. - - * src/bdf/bdflib.c (_bdf_readstream): Use special error code to - indicate a redo operation. - (_bdf_parse_start): Handle `CHARS' keyword here too and pass current - input line to `_bdf_parse_glyph'. - -2010-06-23 Werner Lemberg - - [bdf] Fix Savannah bug #30220. - - * include/freetype/fterrdef.h - (BDF_Err_Missing_Fontboundingbox_Field): New error code. - - * src/bdf/bdflib.c (_bdf_parse_start): Check for missing - `FONTBOUNDINGBOX' field. - Avoid memory leak if there are multiple `FONT' lines (which is - invalid but doesn't hurt). - -2010-06-21 Werner Lemberg - - [pfr] Fix Savannah bug #30168. - - * src/pfr/pfrgload.c (pfr_glyph_load_compound): Limit the number of - subglyphs to avoid endless recursion. - -2010-06-20 Werner Lemberg - - [psaux] Fix Savannah bug #30145. - - * src/psaux/psobjs.c (t1_builder_add_contour): Protect against - `outline == NULL' which might happen in invalid fonts. - -2010-06-19 Werner Lemberg - - [bdf] Fix Savannah bug #30135. - - * src/bdf/bdflib.c (_bdf_list_join): Don't modify value in static - string `empty'. - (_bdf_parse_glyph): Avoid memory leak in case of error. - -2010-06-15 Werner Lemberg - - [autofit] Fix Savannah bug #30108. - - * src/autofit/afglobal.c (af_face_globals_compute_script_coverage): - Properly mask AF_DIGIT bit in comparison. - -2010-06-11 Werner Lemberg - - [pshinter] Fix Savannah bug #30106. - - Point numbers for FreeType's implementation of hinting masks are - collected before the final number of points of a glyph has been - determined; in particular, the code for handling the `endchar' - opcode can reduce the number of points. - - * src/pshinter/pshalgo.c (psh_glyph_find_strong_points): Assure that - `end_point' is not larger than `glyph->num_points'. - -2010-06-11 Werner Lemberg - - [cff]: Improve debugging output. - - * src/cff/cffgload.c (cff_decoder_parse_charstrings) - : Implement it. - -2010-06-10 Graham Asher - - ftgrays: Speed up rendering of small cubic splines. - - * src/smooth/ftgrays.c (gray_render_cubic): Implement new, - simplified algorithm to find out whether the spline can be replaced - with two straight lines. See this thread for more: - - http://lists.gnu.org/archive/html/freetype-devel/2010-06/msg00000.html - -2010-06-09 Werner Lemberg - - [cff] Fix Savannah bug #30082. - - * src/cff/cffgload.c (cff_decoder_parse_charstrings) - : Protect against stack underflow. - -2010-06-08 Werner Lemberg - - [cff] Fix Savannah bug #30053. - - * src/cff/cffparse.c (cff_parse_real): Handle border case where - `fraction_length' has value 10. - -2010-06-07 Werner Lemberg - - Fix Savannah bug #30052. - This bug has been introduced with commit 2415cbf3. - - * src/base/ftobjs.c (FT_Get_First_Char, FT_Get_Next_Char): Protect - against endless loop in case of corrupted font header data. - -2010-05-26 Werner Lemberg - - Remove unused variable. - Found by Graham. - - * src/autofit/afhints.c (af_glyph_hints_reload): Remove unused - variable `first' in first block. - -2010-05-22 Werner Lemberg - - Fix various memory problems found by linuxtesting.org. - - * src/base/ftgxval.c (FT_TrueTypeGX_Free, FT_ClassicKern_Free), - src/base/ftotval.c (FT_OpenType_Free), src/base/ftpfr.c - (ft_pfr_check): Check `face'. - - * src/base/ftobjs.c (FT_Get_Charmap_Index): Check `charmap' and - `charmap->face'. - (FT_Render_Glyph): Check `slot->face'. - (FT_Get_SubGlyph_Info): Check `glyph->subglyphs'. - -2010-05-22 Werner Lemberg - - autofit: Remove dead code. - Suggested by Graham. - - * src/autofit/afhints.c (af_glyph_hints_compute_inflections): - Removed. - (af_glyph_hints_reload): Remove third argument. - Update all callers. - -2010-05-21 Bram Tassyns - - [cff] Fix Savannah bug #27987. - - * src/cff/cffobjs.c (remove_subset_prefix): New function. - (cff_face_init): Use it to adjust `cffface->family_name'. - -2010-05-20 Werner Lemberg - - TrueType: Make FreeType ignore maxSizeOfInstructions in `maxp'. - - Acroread does the same. - - * src/truetype/ttgload.c (TT_Process_Composite_Glyph): Call - `Update_Max' to adjust size of instructions array if necessary and - add a rough safety check. - - (load_truetype_glyph): Save `loader->byte_len' before recursive - call. - - * src/truetype/ttinterp.h, src/truetype/ttinterp.c (Update_Max): - Declare it as FT_LOCAL. - -2010-05-18 Hongbo Ni - - Apply Savannah patch #7196. - - * src/cff/cffgload.c (cff_slot_load): Prevent crash if CFF subfont - index is out of range. - -2010-05-11 Werner Lemberg - - * docs/formats.txt: Give pointer to PCF documentation. - Information provided by Alan Coopersmith - . - -2010-05-10 Ken Sharp - - [psaux] Fix Savannah bug #29846. - - Previously we discovered fonts which used `setcurrentpoint' to set - the initial point of a contour to 0,0. This caused FreeType to - raise an error, because the `setcurrentpoint' operator is only - supposed to be used with the results from an OtherSubr subroutine. - - This was fixed by simply ignoring the error and carrying on. - - Now we have found a font which uses setcurrentpoint to actually - establish a non-zero point for a contour during the course of a - glyph program. FWIW, these files may be produced by an application - called `Intaglio' on the Mac, when converting TrueType fonts to - Type 1. - - The fix allows the new invalid behaviour, the old invalid behaviour - and real proper usage of the operator to work the same way as Adobe - interpreters apparently do. - - * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Make - `setcurrentpoint' use the top two elements of the stack to establish - unconditionally the current x and y coordinates. - - Make the `flex' subroutine handling (OtherSubr 0) put the current - x,y coordinates onto the stack, instead of two dummy uninitialised - values. - -2010-04-14 Ken Sharp - - [psaux] Fix Savannah bug #29444. - - * src/psaux/psobjs.c (t1_builder_start_point): Accept (invalid) - `lineto' immediately after `hsbw', in accordance with Acrobat, GS, - and others. - -2010-04-14 Michał Cichoń - - [psaux] Fix Savannah bug #27999. - - * src/cache/ftcmanag.c (FTC_Manager_RemoveFaceID): Only remove - selected entry, not all. - -2010-04-06 Jonathan Kew - - [truetype] Add overflow check to `fvar' table. - - * src/truetype/ttgxvar.c (TT_Get_MM_Var): Check axis and instance - count. - -2010-04-05 Ken Sharp - - [raster] Fix Savannah bug #29335. - - * src/raster/ftraster.c (Line_Up): Use slow multiplication to - prevent overflow. This shouldn't have any serious impact on speed, - however. - -2010-04-05 Werner Lemberg - - Add new function `FT_Library_SetLcdFilterWeights'. - - This is based on code written by Lifter - . It fixes - FreeDesktop bug #27386. - - * src/base/ftlcdfil.c (FT_Library_SetLcdFilterWeights): New - function. - - * include/freetype/ftlcdfil.h: Updated. - - * docs/CHANGES: Updated. - -2010-04-01 John Tytgat - - [truetype] Fix Savannah bug #29404. - - * src/truetype/ttgload.c: Revert change 2752bd1a (check on bit 1 - of `head' table of TrueType fonts). - -2010-03-14 suzuki toshiya - - Fix `multi build' for Tytgat's CFF driver improvement. - - * src/base/cffload.h (cff_index_get_name): Added. - -2010-03-12 suzuki toshiya - - Remove duplicated inclusion of `FT_OUTLINE_H' in ftobjs.c. - - * src/base/ftobjs.c: Remove 2nd inclusion of `FT_OUTLINE_H'. - -2010-03-11 Chris Liddell - - [raster] Fix Savannah bug #27442. - - * src/raster/ftraster.c (ft_black_reset): Fix `buffer_size'. - -2010-03-09 Werner Lemberg - - [cff] Remove unused variable. - Reported by Graham. - - * src/cff/cffparse.c (cff_parse_real): Remove `rest'. - -2010-03-02 John Tytgat - - [cff] Improve CFF string (especially glyphname) lookup performance. - - We do this by avoiding memory allocation and file I/O. This is - Savannah patch #7104. - - * src/cff/cfftypes.h: Include PS cmaps service and - FT_INTERNAL_POSTSCRIPT_HINTS_H. - (CFF_SubFontRec): Remove `num_local_subrs'. - (CFF_FontRec): Add `num_strings', `strings', and `string_pool' - fields. - Remove `string_index' and `num_global_subrs' fields. - Use real types instead of `void' for `pshinter' and `psnames' fields. - - * src/cff/cffload.c: Don't include PS cmaps service. - (cff_index_get_pointers): Add `pool' parameter which allows to - insert an extra NUL character for each String INDEX entry. - (cff_index_get_name): Make it a local function. - (cff_index_get_string): New function. - (cff_subfont_load): Updated. - (cff_font_load): Initialize `num_strings', `strings', and - `string_pool' fields in the `CFF_FontRec' structure. - (cff_index_get_sid_string): Use `cff_index_get_string' instead of - `cff_index_get_name'. - (cff_font_done): Updated. - - * src/cff/cffload.h: Don't include PS cmaps service. - (cff_index_get_string): Added. - (cff_index_get_sid_string): Updated. - - * src/cff/cffobjs.c: Don't include PS cmaps service and - FT_INTERNAL_POSTSCRIPT_HINTS_H. - (cff_size_get_globals_funcs, cff_slot_init): Updated. - (cff_face_init): Follow `cff_index_get_name', - `cff_index_get_string', and `cff_index_get_sid_string' changes. - - * src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed. - (cff_sid_to_glyph_name): Use `cff_index_get_cid_string'. - (cff_cmap_unicode_init): Updated. - - * src/cff/cffdrivr.c: Don't include PS cmap service. - (cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS - service. - (cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API - `cff_index_get_sid_string' change. - (cff_get_name_index): Use `cff_index_get_string' instead of - `cff_index_get_name'. - - * src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H. - (cff_decoder_init, cff_decoder_prepare): Updated. - -2010-02-27 Werner Lemberg - - Simplify code. - Suggested by Behdad. - - * src/base/ftobjs.c (FT_Get_First_Char): Don't use a loop since we - call FT_Get_Next_Char anyway if necessary. - -2010-02-26 Behdad Esfahbod - - Improve handling of invalid glyph indices in char->index functions. - - * src/base/ftobjs.c (FT_Get_First_Char, FT_Get_Next_Char): Use a - loop. - -2010-02-18 Chris Liddell - - [truetype] Fix Savannah bug #28905. - - Initialize phantom points before calling the incremental interface - to update glyph metrics. - - * src/truetype/ttgload.c (tt_get_metrics_incr_overrides) - [FT_CONFIG_OPTION_INCREMENTAL]: New function, split off from... - (tt_get_metrics): This. - Updated. - (load_truetype_glyph): Use tt_get_metrics_incr_overrides. - ---------------------------------------------------------------------------- -Copyright 2010-2013 by +Copyright 2013-2014 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, diff --git a/reactos/lib/3rdparty/freetype/README b/reactos/lib/3rdparty/freetype/README index c660cd1c27e..9a793cd881d 100644 --- a/reactos/lib/3rdparty/freetype/README +++ b/reactos/lib/3rdparty/freetype/README @@ -1,4 +1,4 @@ - FreeType 2.5.2 + FreeType 2.5.3 ============== Homepage: http://www.freetype.org @@ -16,7 +16,7 @@ the file `docs/LICENSE.TXT' for the available licenses. The FreeType 2 API reference is located in `docs/reference'; use the - file `ft2-doc.html' as the top entry point. Additional + file `ft2-toc.html' as the top entry point. Additional documentation is available as a separate package from our sites. Go to @@ -24,9 +24,9 @@ and download one of the following files. - freetype-doc-2.5.2.tar.bz2 - freetype-doc-2.5.2.tar.gz - ftdoc252.zip + freetype-doc-2.5.3.tar.bz2 + freetype-doc-2.5.3.tar.gz + ftdoc253.zip To view the documentation online, go to @@ -70,7 +70,7 @@ ---------------------------------------------------------------------- -Copyright 2006-2013 by +Copyright 2006-2014 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/reactos/lib/3rdparty/freetype/devel/ftoption.h b/reactos/lib/3rdparty/freetype/devel/ftoption.h index 27d1bd9a5d7..d7b6a630109 100644 --- a/reactos/lib/3rdparty/freetype/devel/ftoption.h +++ b/reactos/lib/3rdparty/freetype/devel/ftoption.h @@ -217,6 +217,19 @@ FT_BEGIN_HEADER #define FT_CONFIG_OPTION_USE_PNG + /*************************************************************************/ + /* */ + /* HarfBuzz support. */ + /* */ + /* FreeType uses the HarfBuzz library to improve auto-hinting of */ + /* OpenType fonts. If available, many glyphs not directly addressable */ + /* by a font's character map will be hinted also. */ + /* */ + /* Define this macro if you want to enable this `feature'. */ + /* */ +#define FT_CONFIG_OPTION_USE_HARFBUZZ + + /*************************************************************************/ /* */ /* Define to disable the use of file stream functions and types, FILE, */ diff --git a/reactos/lib/3rdparty/freetype/include/config/ftconfig.h b/reactos/lib/3rdparty/freetype/include/config/ftconfig.h index 0770e787883..d98a3116bb0 100644 --- a/reactos/lib/3rdparty/freetype/include/config/ftconfig.h +++ b/reactos/lib/3rdparty/freetype/include/config/ftconfig.h @@ -4,7 +4,7 @@ /* */ /* ANSI-specific configuration file (specification only). */ /* */ -/* Copyright 1996-2004, 2006-2008, 2010-2011, 2013 by */ +/* Copyright 1996-2004, 2006-2008, 2010-2011, 2013, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -386,7 +386,7 @@ FT_BEGIN_HEADER __asm__ __volatile__ ( "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */ "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */ -#ifdef __clang__ +#if defined( __clang__ ) && defined( __thumb2__ ) "add.w %0, %0, #0x8000\n\t" /* %0 += 0x8000 */ #else "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */ diff --git a/reactos/lib/3rdparty/freetype/include/config/ftoption.h b/reactos/lib/3rdparty/freetype/include/config/ftoption.h index fe2ba15b48c..5b11f0e0305 100644 --- a/reactos/lib/3rdparty/freetype/include/config/ftoption.h +++ b/reactos/lib/3rdparty/freetype/include/config/ftoption.h @@ -228,6 +228,19 @@ FT_BEGIN_HEADER /* #define FT_CONFIG_OPTION_USE_PNG */ + /*************************************************************************/ + /* */ + /* HarfBuzz support. */ + /* */ + /* FreeType uses the HarfBuzz library to improve auto-hinting of */ + /* OpenType fonts. If available, many glyphs not directly addressable */ + /* by a font's character map will be hinted also. */ + /* */ + /* Define this macro if you want to enable this `feature'. */ + /* */ +/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */ + + /*************************************************************************/ /* */ /* DLL export compilation */ diff --git a/reactos/lib/3rdparty/freetype/include/freetype.h b/reactos/lib/3rdparty/freetype/include/freetype.h index 39a18af89e9..fb62b625fe8 100644 --- a/reactos/lib/3rdparty/freetype/include/freetype.h +++ b/reactos/lib/3rdparty/freetype/include/freetype.h @@ -4,7 +4,7 @@ /* */ /* FreeType high-level API and common types (specification only). */ /* */ -/* Copyright 1996-2013 by */ +/* Copyright 1996-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -39,6 +39,38 @@ FT_BEGIN_HEADER + /*************************************************************************/ + /* */ + /*
*/ + /* header_inclusion */ + /* */ + /* */ + /* FreeType's header inclusion scheme */ + /* */ + /* <Abstract> */ + /* How client applications should include FreeType header files. */ + /* */ + /* <Description> */ + /* To be as flexible as possible (and for historical reasons), */ + /* FreeType uses a very special inclusion scheme to load header */ + /* files, for example */ + /* */ + /* { */ + /* #include <ft2build.h> */ + /* */ + /* #include FT_FREETYPE_H */ + /* #include FT_OUTLINE_H */ + /* } */ + /* */ + /* A compiler and its preprocessor only needs an include path to find */ + /* the file `ft2build.h'; the exact locations and names of the other */ + /* FreeType header files are hidden by preprocessor macro names, */ + /* loaded by `ft2build.h'. The API documentation always gives the */ + /* header macro name needed for a particular function. */ + /* */ + /*************************************************************************/ + + /*************************************************************************/ /* */ /* <Section> */ @@ -2273,6 +2305,8 @@ FT_BEGIN_HEADER /* glyph relative to this size. For more information refer to */ /* `http://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html' */ /* */ + /* Don't use this function if you are using the FreeType cache API. */ + /* */ FT_EXPORT( FT_Error ) FT_Request_Size( FT_Face face, FT_Size_Request req ); @@ -2347,6 +2381,8 @@ FT_BEGIN_HEADER /* constrained, to this pixel size. Refer to @FT_Request_Size to */ /* understand how requested sizes relate to actual sizes. */ /* */ + /* Don't use this function if you are using the FreeType cache API. */ + /* */ FT_EXPORT( FT_Error ) FT_Set_Pixel_Sizes( FT_Face face, FT_UInt pixel_width, @@ -2839,6 +2875,10 @@ FT_BEGIN_HEADER /* <Return> */ /* FreeType error code. 0~means success. */ /* */ + /* <Note> */ + /* To get meaningful results, font scaling values must be set with */ + /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */ + /* */ FT_EXPORT( FT_Error ) FT_Render_Glyph( FT_GlyphSlot slot, FT_Render_Mode render_mode ); @@ -3925,7 +3965,7 @@ FT_BEGIN_HEADER */ #define FREETYPE_MAJOR 2 #define FREETYPE_MINOR 5 -#define FREETYPE_PATCH 2 +#define FREETYPE_PATCH 3 /*************************************************************************/ diff --git a/reactos/lib/3rdparty/freetype/include/ftautoh.h b/reactos/lib/3rdparty/freetype/include/ftautoh.h index bf97b3f2404..936791e7263 100644 --- a/reactos/lib/3rdparty/freetype/include/ftautoh.h +++ b/reactos/lib/3rdparty/freetype/include/ftautoh.h @@ -287,7 +287,52 @@ FT_BEGIN_HEADER * face-specific property like @glyph-to-script-map, or by auto-hinting * any glyph from that face. In particular, if you have already created * an @FT_Face structure but not loaded any glyph (using the - * auto-hinter), a change of the fallback glyph will affect this face. + * auto-hinter), a change of the fallback script will affect this face. + * + */ + + + /************************************************************************** + * + * @property: + * default-script + * + * @description: + * *Experimental* *only* + * + * If Freetype gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make + * the HarfBuzz library access OpenType features for getting better + * glyph coverages, this property sets the (auto-fitter) script to be + * used for the default (OpenType) script data of a font's GSUB table. + * Features for the default script are intended for all scripts not + * explicitly handled in GSUB; an example is a `dlig' feature, + * containing the combination of the characters `T', `E', and `L' to + * form a `TEL' ligature. + * + * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the + * `default-script' property, this default value can be changed. + * + * { + * FT_Library library; + * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "default-script", &default_script ); + * } + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * It's important to use the right timing for changing this value: The + * creation of the glyph-to-script map that eventually uses the + * default script value gets triggered either by setting or reading a + * face-specific property like @glyph-to-script-map, or by auto-hinting + * any glyph from that face. In particular, if you have already created + * an @FT_Face structure but not loaded any glyph (using the + * auto-hinter), a change of the default script will affect this face. * */ diff --git a/reactos/lib/3rdparty/freetype/include/ftbdf.h b/reactos/lib/3rdparty/freetype/include/ftbdf.h index 4f8baf84017..8b3c41115cb 100644 --- a/reactos/lib/3rdparty/freetype/include/ftbdf.h +++ b/reactos/lib/3rdparty/freetype/include/ftbdf.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing BDF-specific strings (specification). */ /* */ -/* Copyright 2002, 2003, 2004, 2006, 2009 by */ +/* Copyright 2002-2004, 2006, 2009, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -106,7 +106,8 @@ FT_BEGIN_HEADER * The property type. * * u.atom :: - * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. + * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be + * NULL, indicating an empty string. * * u.integer :: * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER. diff --git a/reactos/lib/3rdparty/freetype/include/ftchapters.h b/reactos/lib/3rdparty/freetype/include/ftchapters.h index 4b1059a8592..d333761c81b 100644 --- a/reactos/lib/3rdparty/freetype/include/ftchapters.h +++ b/reactos/lib/3rdparty/freetype/include/ftchapters.h @@ -15,6 +15,7 @@ /* General Remarks */ /* */ /* <Sections> */ +/* header_inclusion */ /* user_allocation */ /* */ /***************************************************************************/ diff --git a/reactos/lib/3rdparty/freetype/include/ftoutln.h b/reactos/lib/3rdparty/freetype/include/ftoutln.h index 8c7c57d99eb..6c6d3f94be6 100644 --- a/reactos/lib/3rdparty/freetype/include/ftoutln.h +++ b/reactos/lib/3rdparty/freetype/include/ftoutln.h @@ -5,7 +5,7 @@ /* Support for the FT_Outline type used to store glyph shapes of */ /* most scalable font formats (specification). */ /* */ -/* Copyright 1996-2003, 2005-2013 by */ +/* Copyright 1996-2003, 2005-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -355,6 +355,9 @@ FT_BEGIN_HEADER /* FT_Outline_Embolden( &face->slot->outline, strength ); */ /* } */ /* */ + /* To get meaningful results, font scaling values must be set with */ + /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */ + /* */ FT_EXPORT( FT_Error ) FT_Outline_Embolden( FT_Outline* outline, FT_Pos strength ); diff --git a/reactos/lib/3rdparty/freetype/include/internal/ftrfork.h b/reactos/lib/3rdparty/freetype/include/internal/ftrfork.h index 6307f2d0c5a..d750cbefd83 100644 --- a/reactos/lib/3rdparty/freetype/include/internal/ftrfork.h +++ b/reactos/lib/3rdparty/freetype/include/internal/ftrfork.h @@ -4,7 +4,7 @@ /* */ /* Embedded resource forks accessor (specification). */ /* */ -/* Copyright 2004, 2006, 2007, 2012 by */ +/* Copyright 2004, 2006, 2007, 2012, 2013 by */ /* Masatake YAMATO and Redhat K.K. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -94,7 +94,7 @@ FT_BEGIN_HEADER /* this array is a function in PIC mode, so no ; is needed in END */ #define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \ void \ - FT_Init_ ## name( type* storage ) \ + FT_Init_Table_ ## name( type* storage ) \ { \ type* local = storage; \ \ @@ -224,6 +224,13 @@ FT_BEGIN_HEADER /* tag :: */ /* The resource tag. */ /* */ + /* sort_by_res_id :: */ + /* A Boolean to sort the fragmented resource by their ids. */ + /* The fragmented resources for `POST' resource should be sorted */ + /* to restore Type1 font properly. For `snft' resources, sorting */ + /* may induce a different order of the faces in comparison to that */ + /* by QuickDraw API. */ + /* */ /* <Output> */ /* offsets :: */ /* The stream offsets for the resource data specified by `tag'. */ @@ -246,6 +253,7 @@ FT_BEGIN_HEADER FT_Long map_offset, FT_Long rdata_pos, FT_Long tag, + FT_Bool sort_by_res_id, FT_Long **offsets, FT_Long *count ); diff --git a/reactos/lib/3rdparty/freetype/include/internal/fttrace.h b/reactos/lib/3rdparty/freetype/include/internal/fttrace.h index a9d98b60aa5..d5253db78a3 100644 --- a/reactos/lib/3rdparty/freetype/include/internal/fttrace.h +++ b/reactos/lib/3rdparty/freetype/include/internal/fttrace.h @@ -4,7 +4,7 @@ /* */ /* Tracing handling (specification only). */ /* */ -/* Copyright 2002, 2004-2007, 2009, 2011-2013 by */ +/* Copyright 2002, 2004-2007, 2009, 2011-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -148,5 +148,7 @@ FT_TRACE_DEF( afcjk ) FT_TRACE_DEF( aflatin ) FT_TRACE_DEF( aflatin2 ) FT_TRACE_DEF( afwarp ) +FT_TRACE_DEF( afharfbuzz ) +FT_TRACE_DEF( afglobal ) /* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afblue.c b/reactos/lib/3rdparty/freetype/src/autofit/afblue.c index 22ef6d5a87e..6e214c87280 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afblue.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afblue.c @@ -108,7 +108,7 @@ }; - /* stringsets are specific to scripts */ + /* stringsets are specific to styles */ FT_LOCAL_ARRAY_DEF( AF_Blue_StringRec ) af_blue_stringsets[] = { diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afblue.cin b/reactos/lib/3rdparty/freetype/src/autofit/afblue.cin index c693d89f701..c6762bec307 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afblue.cin +++ b/reactos/lib/3rdparty/freetype/src/autofit/afblue.cin @@ -27,7 +27,7 @@ }; - /* stringsets are specific to scripts */ + /* stringsets are specific to styles */ FT_LOCAL_ARRAY_DEF( AF_Blue_StringRec ) af_blue_stringsets[] = { diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afblue.h b/reactos/lib/3rdparty/freetype/src/autofit/afblue.h index 86a36491faf..6f336abc0d9 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afblue.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afblue.h @@ -103,13 +103,13 @@ FT_BEGIN_HEADER AF_BLUE_STRING_CJK_LEFT_UNFILL = af_blue_1_1_1 + 77, AF_BLUE_STRING_CJK_RIGHT_FILL = af_blue_1_1_1 + 153, AF_BLUE_STRING_CJK_RIGHT_UNFILL = af_blue_1_1_1 + 229, - af_blue_1_2_1 = af_blue_1_1_1 + 304, + af_blue_1_1_2 = af_blue_1_1_1 + 304, #else - af_blue_1_2_1 = af_blue_1_1_1 + 0, + af_blue_1_1_2 = af_blue_1_1_1 + 0, #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ - af_blue_1_2 = af_blue_1_2_1 + 0, + af_blue_1_2 = af_blue_1_1_2 + 0, #else - af_blue_1_2 = af_blue_1_2_1 + 0, + af_blue_1_2 = af_blue_1_1 + 0, #endif /* AF_CONFIG_OPTION_CJK */ @@ -130,7 +130,7 @@ FT_BEGIN_HEADER /*************************************************************************/ /*************************************************************************/ - /* The next level is to group blue strings into script-specific sets. */ + /* The next level is to group blue strings into style-specific sets. */ /* Properties are specific to a writing system. We assume that a given */ @@ -162,13 +162,13 @@ FT_BEGIN_HEADER AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0, af_blue_2_1_1 = af_blue_2_1 + 4, #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT - af_blue_2_2_1 = af_blue_2_1_1 + 4, + af_blue_2_1_2 = af_blue_2_1_1 + 4, #else - af_blue_2_2_1 = af_blue_2_1_1 + 0, + af_blue_2_1_2 = af_blue_2_1_1 + 0, #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ - af_blue_2_2 = af_blue_2_2_1 + 1, + af_blue_2_2 = af_blue_2_1_2 + 1, #else - af_blue_2_2 = af_blue_2_2_1 + 0, + af_blue_2_2 = af_blue_2_1 + 0, #endif /* AF_CONFIG_OPTION_CJK */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afblue.hin b/reactos/lib/3rdparty/freetype/src/autofit/afblue.hin index 00282c3bad9..4fc99175580 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afblue.hin +++ b/reactos/lib/3rdparty/freetype/src/autofit/afblue.hin @@ -90,7 +90,7 @@ FT_BEGIN_HEADER /*************************************************************************/ /*************************************************************************/ - /* The next level is to group blue strings into script-specific sets. */ + /* The next level is to group blue strings into style-specific sets. */ /* Properties are specific to a writing system. We assume that a given */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afcjk.c b/reactos/lib/3rdparty/freetype/src/autofit/afcjk.c index 7a6f835516c..3a65fc561ca 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afcjk.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afcjk.c @@ -2,7 +2,7 @@ /* */ /* afcjk.c */ /* */ -/* Auto-fitter hinting routines for CJK script (body). */ +/* Auto-fitter hinting routines for CJK writing system (body). */ /* */ /* Copyright 2006-2013 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ @@ -27,6 +27,7 @@ #include FT_INTERNAL_DEBUG_H #include "afglobal.h" +#include "afpic.h" #include "aflatin.h" @@ -74,10 +75,10 @@ FT_TRACE5(( "\n" - "cjk standard widths computation (script `%s')\n" - "===============================================\n" + "cjk standard widths computation (style `%s')\n" + "===================================================\n" "\n", - af_script_names[metrics->root.script_class->script] )); + af_style_names[metrics->root.style_class->style] )); af_glyph_hints_init( hints, face->memory ); @@ -86,20 +87,59 @@ { FT_Error error; - FT_UInt glyph_index; + FT_ULong glyph_index; + FT_Long y_offset; int dim; AF_CJKMetricsRec dummy[1]; AF_Scaler scaler = &dummy->root.scaler; +#ifdef FT_CONFIG_OPTION_PIC + AF_FaceGlobals globals = metrics->root.globals; +#endif - glyph_index = FT_Get_Char_Index( - face, - metrics->root.script_class->standard_char ); - if ( glyph_index == 0 ) - goto Exit; + AF_StyleClass style_class = metrics->root.style_class; + AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET + [style_class->script]; + + FT_UInt32 standard_char; + + + standard_char = script_class->standard_char1; + af_get_char_index( &metrics->root, + standard_char, + &glyph_index, + &y_offset ); + if ( !glyph_index ) + { + if ( script_class->standard_char2 ) + { + standard_char = script_class->standard_char2; + af_get_char_index( &metrics->root, + standard_char, + &glyph_index, + &y_offset ); + if ( !glyph_index ) + { + if ( script_class->standard_char3 ) + { + standard_char = script_class->standard_char3; + af_get_char_index( &metrics->root, + standard_char, + &glyph_index, + &y_offset ); + if ( !glyph_index ) + goto Exit; + } + else + goto Exit; + } + } + else + goto Exit; + } FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n", - metrics->root.script_class->standard_char, glyph_index )); + standard_char, glyph_index )); error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE ); if ( error || face->glyph->outline.n_points <= 0 ) @@ -118,7 +158,7 @@ scaler->render_mode = FT_RENDER_MODE_NORMAL; scaler->flags = 0; - af_glyph_hints_rescale( hints, (AF_ScriptMetrics)dummy ); + af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy ); error = af_glyph_hints_reload( hints, &face->glyph->outline ); if ( error ) @@ -226,7 +266,9 @@ AF_CJKAxis axis; FT_Outline outline; - AF_Blue_Stringset bss = metrics->root.script_class->blue_stringset; + AF_StyleClass sc = metrics->root.style_class; + + AF_Blue_Stringset bss = sc->blue_stringset; const AF_Blue_StringRec* bs = &af_blue_stringsets[bss]; #ifdef FT_DEBUG_LEVEL_TRACE @@ -246,9 +288,9 @@ #endif - /* we walk over the blue character strings as specified in the */ - /* script's entry in the `af_blue_stringset' array, computing its */ - /* extremum points (depending on the string properties) */ + /* we walk over the blue character strings as specified in the */ + /* style's entry in the `af_blue_stringset' array, computing its */ + /* extremum points (depending on the string properties) */ FT_TRACE5(( "cjk blue zones computation\n" "==========================\n" @@ -279,7 +321,8 @@ while ( *p ) { FT_ULong ch; - FT_UInt glyph_index; + FT_ULong glyph_index; + FT_Long y_offset; FT_Pos best_pos; /* same as points.y or points.x, resp. */ FT_Int best_point; FT_Vector* points; @@ -288,7 +331,7 @@ GET_UTF8_CHAR( ch, p ); /* load the character in the face -- skip unknown or empty ones */ - glyph_index = FT_Get_Char_Index( face, ch ); + af_get_char_index( &metrics->root, ch, &glyph_index, &y_offset ); if ( glyph_index == 0 ) { FT_TRACE5(( " U+%04lX unavailable\n", ch )); @@ -467,10 +510,11 @@ /* digit `0' is 0x30 in all supported charmaps */ for ( i = 0x30; i <= 0x39; i++ ) { - FT_UInt glyph_index; + FT_ULong glyph_index; + FT_Long y_offset; - glyph_index = FT_Get_Char_Index( face, i ); + af_get_char_index( &metrics->root, i, &glyph_index, &y_offset ); if ( glyph_index == 0 ) continue; @@ -1234,7 +1278,7 @@ FT_UInt32 scaler_flags, other_flags; - af_glyph_hints_rescale( hints, (AF_ScriptMetrics)metrics ); + af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics ); /* * correct x_scale and y_scale when needed, since they may have @@ -1665,9 +1709,9 @@ #endif - FT_TRACE5(( "cjk %s edge hinting (script `%s')\n", + FT_TRACE5(( "cjk %s edge hinting (style `%s')\n", dim == AF_DIMENSION_VERT ? "horizontal" : "vertical", - af_script_names[hints->metrics->script_class->script] )); + af_style_names[hints->metrics->style_class->style] )); /* we begin by aligning all stems relative to the blue zone */ @@ -2210,60 +2254,18 @@ sizeof ( AF_CJKMetricsRec ), - (AF_Script_InitMetricsFunc) af_cjk_metrics_init, - (AF_Script_ScaleMetricsFunc)af_cjk_metrics_scale, - (AF_Script_DoneMetricsFunc) NULL, + (AF_WritingSystem_InitMetricsFunc) af_cjk_metrics_init, + (AF_WritingSystem_ScaleMetricsFunc)af_cjk_metrics_scale, + (AF_WritingSystem_DoneMetricsFunc) NULL, - (AF_Script_InitHintsFunc) af_cjk_hints_init, - (AF_Script_ApplyHintsFunc) af_cjk_hints_apply + (AF_WritingSystem_InitHintsFunc) af_cjk_hints_init, + (AF_WritingSystem_ApplyHintsFunc) af_cjk_hints_apply ) - /* this corresponds to Unicode 6.0 */ - - /* XXX: this should probably fine tuned to differentiate better between */ - /* scripts... */ - - static const AF_Script_UniRangeRec af_hani_uniranges[] = - { - AF_UNIRANGE_REC( 0x1100UL, 0x11FFUL ), /* Hangul Jamo */ - AF_UNIRANGE_REC( 0x2E80UL, 0x2EFFUL ), /* CJK Radicals Supplement */ - AF_UNIRANGE_REC( 0x2F00UL, 0x2FDFUL ), /* Kangxi Radicals */ - AF_UNIRANGE_REC( 0x2FF0UL, 0x2FFFUL ), /* Ideographic Description Characters */ - AF_UNIRANGE_REC( 0x3000UL, 0x303FUL ), /* CJK Symbols and Punctuation */ - AF_UNIRANGE_REC( 0x3040UL, 0x309FUL ), /* Hiragana */ - AF_UNIRANGE_REC( 0x30A0UL, 0x30FFUL ), /* Katakana */ - AF_UNIRANGE_REC( 0x3100UL, 0x312FUL ), /* Bopomofo */ - AF_UNIRANGE_REC( 0x3130UL, 0x318FUL ), /* Hangul Compatibility Jamo */ - AF_UNIRANGE_REC( 0x3190UL, 0x319FUL ), /* Kanbun */ - AF_UNIRANGE_REC( 0x31A0UL, 0x31BFUL ), /* Bopomofo Extended */ - AF_UNIRANGE_REC( 0x31C0UL, 0x31EFUL ), /* CJK Strokes */ - AF_UNIRANGE_REC( 0x31F0UL, 0x31FFUL ), /* Katakana Phonetic Extensions */ - AF_UNIRANGE_REC( 0x3200UL, 0x32FFUL ), /* Enclosed CJK Letters and Months */ - AF_UNIRANGE_REC( 0x3300UL, 0x33FFUL ), /* CJK Compatibility */ - AF_UNIRANGE_REC( 0x3400UL, 0x4DBFUL ), /* CJK Unified Ideographs Extension A */ - AF_UNIRANGE_REC( 0x4DC0UL, 0x4DFFUL ), /* Yijing Hexagram Symbols */ - AF_UNIRANGE_REC( 0x4E00UL, 0x9FFFUL ), /* CJK Unified Ideographs */ - AF_UNIRANGE_REC( 0xA960UL, 0xA97FUL ), /* Hangul Jamo Extended-A */ - AF_UNIRANGE_REC( 0xAC00UL, 0xD7AFUL ), /* Hangul Syllables */ - AF_UNIRANGE_REC( 0xD7B0UL, 0xD7FFUL ), /* Hangul Jamo Extended-B */ - AF_UNIRANGE_REC( 0xF900UL, 0xFAFFUL ), /* CJK Compatibility Ideographs */ - AF_UNIRANGE_REC( 0xFE10UL, 0xFE1FUL ), /* Vertical forms */ - AF_UNIRANGE_REC( 0xFE30UL, 0xFE4FUL ), /* CJK Compatibility Forms */ - AF_UNIRANGE_REC( 0xFF00UL, 0xFFEFUL ), /* Halfwidth and Fullwidth Forms */ - AF_UNIRANGE_REC( 0x1B000UL, 0x1B0FFUL ), /* Kana Supplement */ - AF_UNIRANGE_REC( 0x1D300UL, 0x1D35FUL ), /* Tai Xuan Hing Symbols */ - AF_UNIRANGE_REC( 0x1F200UL, 0x1F2FFUL ), /* Enclosed Ideographic Supplement */ - AF_UNIRANGE_REC( 0x20000UL, 0x2A6DFUL ), /* CJK Unified Ideographs Extension B */ - AF_UNIRANGE_REC( 0x2A700UL, 0x2B73FUL ), /* CJK Unified Ideographs Extension C */ - AF_UNIRANGE_REC( 0x2B740UL, 0x2B81FUL ), /* CJK Unified Ideographs Extension D */ - AF_UNIRANGE_REC( 0x2F800UL, 0x2FA1FUL ), /* CJK Compatibility Ideographs Supplement */ - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - - #else /* !AF_CONFIG_OPTION_CJK */ + AF_DEFINE_WRITING_SYSTEM_CLASS( af_cjk_writing_system_class, @@ -2271,33 +2273,16 @@ sizeof ( AF_CJKMetricsRec ), - (AF_Script_InitMetricsFunc) NULL, - (AF_Script_ScaleMetricsFunc)NULL, - (AF_Script_DoneMetricsFunc) NULL, + (AF_WritingSystem_InitMetricsFunc) NULL, + (AF_WritingSystem_ScaleMetricsFunc)NULL, + (AF_WritingSystem_DoneMetricsFunc) NULL, - (AF_Script_InitHintsFunc) NULL, - (AF_Script_ApplyHintsFunc) NULL + (AF_WritingSystem_InitHintsFunc) NULL, + (AF_WritingSystem_ApplyHintsFunc) NULL ) - static const AF_Script_UniRangeRec af_hani_uniranges[] = - { - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - #endif /* !AF_CONFIG_OPTION_CJK */ - AF_DEFINE_SCRIPT_CLASS( - af_hani_script_class, - - AF_SCRIPT_HANI, - AF_BLUE_STRINGSET_HANI, - AF_WRITING_SYSTEM_CJK, - - af_hani_uniranges, - 0x7530 /* 田 */ - ) - - /* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afcjk.h b/reactos/lib/3rdparty/freetype/src/autofit/afcjk.h index 6f5bdc53d99..a260b091150 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afcjk.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afcjk.h @@ -2,7 +2,7 @@ /* */ /* afcjk.h */ /* */ -/* Auto-fitter hinting routines for CJK script (specification). */ +/* Auto-fitter hinting routines for CJK writing system (specification). */ /* */ /* Copyright 2006, 2007, 2011-2013 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ @@ -31,11 +31,6 @@ FT_BEGIN_HEADER AF_DECLARE_WRITING_SYSTEM_CLASS( af_cjk_writing_system_class ) - /* the CJK-specific script classes */ - - AF_DECLARE_SCRIPT_CLASS( af_hani_script_class ) - - /*************************************************************************/ /*************************************************************************/ /***** *****/ @@ -105,9 +100,9 @@ FT_BEGIN_HEADER typedef struct AF_CJKMetricsRec_ { - AF_ScriptMetricsRec root; - FT_UInt units_per_em; - AF_CJKAxisRec axis[AF_DIMENSION_MAX]; + AF_StyleMetricsRec root; + FT_UInt units_per_em; + AF_CJKAxisRec axis[AF_DIMENSION_MAX]; } AF_CJKMetricsRec, *AF_CJKMetrics; diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afcover.h b/reactos/lib/3rdparty/freetype/src/autofit/afcover.h new file mode 100644 index 00000000000..d5ac96944a3 --- /dev/null +++ b/reactos/lib/3rdparty/freetype/src/autofit/afcover.h @@ -0,0 +1,105 @@ +/***************************************************************************/ +/* */ +/* afcover.h */ +/* */ +/* Auto-fitter coverages (specification only). */ +/* */ +/* Copyright 2013, 2014 by */ +/* David Turner, Robert Wilhelm, and Werner Lemberg. */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + + + /* This header file can be included multiple times. */ + /* Define `COVERAGE' as needed. */ + + + /* Add new coverages here. The first and second arguments are the */ + /* coverage name in lowercase and uppercase, respectively, followed */ + /* by a description string. The last four arguments are the four */ + /* characters defining the corresponding OpenType feature. */ + +#if 0 + /* XXX: It's not possible to define blue zone characters in advance. */ + COVERAGE( alternative_fractions, ALTERNATIVE_FRACTIONS, + "alternative fractions", + 'a', 'f', 'r', 'c' ) +#endif + + COVERAGE( petite_capitals_from_capitals, PETITE_CAPITALS_FROM_CAPITALS, + "petite capitals from capitals", + 'c', '2', 'c', 'p' ) + + COVERAGE( small_capitals_from_capitals, SMALL_CAPITALS_FROM_CAPITALS, + "small capitals from capitals", + 'c', '2', 's', 'c' ) + +#if 0 + /* XXX: Only digits are in this coverage, however, both normal style */ + /* and oldstyle representation forms are possible. */ + COVERAGE( denominators, DENOMINATORS, + "denominators", + 'd', 'n', 'o', 'm' ) +#endif + +#if 0 + /* XXX: It's not possible to define blue zone characters in advance. */ + COVERAGE( fractions, FRACTIONS, + "fractions", + 'f', 'r', 'a', 'c' ) +#endif + +#if 0 + /* XXX: Only digits are in this coverage, however, both normal style */ + /* and oldstyle representation forms are possible. */ + COVERAGE( numerators, NUMERATORS, + "numerators", + 'n', 'u', 'm', 'r' ) +#endif + + COVERAGE( ordinals, ORDINALS, + "ordinals", + 'o', 'r', 'd', 'n' ) + + COVERAGE( petite_capitals, PETITE_CAPITALS, + "petite capitals", + 'p', 'c', 'a', 'p' ) + + COVERAGE( ruby, RUBY, + "ruby", + 'r', 'u', 'b', 'y' ) + + COVERAGE( scientific_inferiors, SCIENTIFIC_INFERIORS, + "scientific inferiors", + 's', 'i', 'n', 'f' ) + + COVERAGE( small_capitals, SMALL_CAPITALS, + "small capitals", + 's', 'm', 'c', 'p' ) + + COVERAGE( subscript, SUBSCRIPT, + "subscript", + 's', 'u', 'b', 's' ) + + COVERAGE( superscript, SUPERSCRIPT, + "superscript", + 's', 'u', 'p', 's' ) + + COVERAGE( titling, TITLING, + "titling", + 't', 'i', 't', 'l' ) + +#if 0 + /* to be always excluded */ + COVERAGE(nalt, 'n', 'a', 'l', 't'); /* Alternate Annotation Forms (?) */ + COVERAGE(ornm, 'o', 'r', 'n', 'm'); /* Ornaments (?) */ +#endif + + +/* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afdummy.c b/reactos/lib/3rdparty/freetype/src/autofit/afdummy.c index aaa034d9f92..f8702a109e0 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afdummy.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afdummy.c @@ -23,8 +23,8 @@ static FT_Error - af_dummy_hints_init( AF_GlyphHints hints, - AF_ScriptMetrics metrics ) + af_dummy_hints_init( AF_GlyphHints hints, + AF_StyleMetrics metrics ) { af_glyph_hints_rescale( hints, metrics ); @@ -57,26 +57,14 @@ AF_WRITING_SYSTEM_DUMMY, - sizeof ( AF_ScriptMetricsRec ), + sizeof ( AF_StyleMetricsRec ), - (AF_Script_InitMetricsFunc) NULL, - (AF_Script_ScaleMetricsFunc)NULL, - (AF_Script_DoneMetricsFunc) NULL, + (AF_WritingSystem_InitMetricsFunc) NULL, + (AF_WritingSystem_ScaleMetricsFunc)NULL, + (AF_WritingSystem_DoneMetricsFunc) NULL, - (AF_Script_InitHintsFunc) af_dummy_hints_init, - (AF_Script_ApplyHintsFunc) af_dummy_hints_apply - ) - - - AF_DEFINE_SCRIPT_CLASS( - af_dflt_script_class, - - AF_SCRIPT_DFLT, - (AF_Blue_Stringset)0, - AF_WRITING_SYSTEM_DUMMY, - - NULL, - '\0' + (AF_WritingSystem_InitHintsFunc) af_dummy_hints_init, + (AF_WritingSystem_ApplyHintsFunc) af_dummy_hints_apply ) diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afdummy.h b/reactos/lib/3rdparty/freetype/src/autofit/afdummy.h index bc34dddaf90..ad1b0d3abba 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afdummy.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afdummy.h @@ -25,14 +25,10 @@ FT_BEGIN_HEADER - /* A dummy writing system and script class used when no hinting should be - * performed. - */ + /* A dummy writing system used when no hinting should be performed. */ AF_DECLARE_WRITING_SYSTEM_CLASS( af_dummy_writing_system_class ) - AF_DECLARE_SCRIPT_CLASS( af_dflt_script_class ) - /* */ FT_END_HEADER diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afglobal.c b/reactos/lib/3rdparty/freetype/src/autofit/afglobal.c index dc62bd7a1f5..7aa2e110201 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afglobal.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afglobal.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter routines to compute global hinting values (body). */ /* */ -/* Copyright 2003-2013 by */ +/* Copyright 2003-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -17,6 +17,20 @@ #include "afglobal.h" +#include "afranges.h" +#include "hbshim.h" +#include FT_INTERNAL_DEBUG_H + + + /*************************************************************************/ + /* */ + /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ + /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ + /* messages during execution. */ + /* */ +#undef FT_COMPONENT +#define FT_COMPONENT trace_afglobal + /* get writing system specific header files */ #undef WRITING_SYSTEM @@ -27,6 +41,30 @@ #include "afpic.h" +#undef SCRIPT +#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \ + AF_DEFINE_SCRIPT_CLASS( \ + af_ ## s ## _script_class, \ + AF_SCRIPT_ ## S, \ + af_ ## s ## _uniranges, \ + sc1, sc2, sc3 ) + +#include "afscript.h" + + +#undef STYLE +#define STYLE( s, S, d, ws, sc, ss, c ) \ + AF_DEFINE_STYLE_CLASS( \ + af_ ## s ## _style_class, \ + AF_STYLE_ ## S, \ + ws, \ + sc, \ + ss, \ + c ) + +#include "afstyles.h" + + #ifndef FT_CONFIG_OPTION_PIC #undef WRITING_SYSTEM @@ -44,7 +82,7 @@ #undef SCRIPT -#define SCRIPT( s, S, d ) \ +#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \ &af_ ## s ## _script_class, FT_LOCAL_ARRAY_DEF( AF_ScriptClass ) @@ -56,58 +94,76 @@ NULL /* do not remove */ }; + +#undef STYLE +#define STYLE( s, S, d, ws, sc, ss, c ) \ + &af_ ## s ## _style_class, + + FT_LOCAL_ARRAY_DEF( AF_StyleClass ) + af_style_classes[] = + { + +#include "afstyles.h" + + NULL /* do not remove */ + }; + #endif /* !FT_CONFIG_OPTION_PIC */ #ifdef FT_DEBUG_LEVEL_TRACE -#undef SCRIPT -#define SCRIPT( s, S, d ) #s, +#undef STYLE +#define STYLE( s, S, d, ws, sc, ss, c ) #s, FT_LOCAL_ARRAY_DEF( char* ) - af_script_names[] = + af_style_names[] = { -#include "afscript.h" +#include "afstyles.h" }; #endif /* FT_DEBUG_LEVEL_TRACE */ - /* Compute the script index of each glyph within a given face. */ + /* Compute the style index of each glyph within a given face. */ static FT_Error - af_face_globals_compute_script_coverage( AF_FaceGlobals globals ) + af_face_globals_compute_style_coverage( AF_FaceGlobals globals ) { FT_Error error; FT_Face face = globals->face; FT_CharMap old_charmap = face->charmap; - FT_Byte* gscripts = globals->glyph_scripts; + FT_Byte* gstyles = globals->glyph_styles; FT_UInt ss; FT_UInt i; + FT_UInt dflt = -1; - /* the value AF_SCRIPT_NONE means `uncovered glyph' */ - FT_MEM_SET( globals->glyph_scripts, - AF_SCRIPT_NONE, + /* the value AF_STYLE_UNASSIGNED means `uncovered glyph' */ + FT_MEM_SET( globals->glyph_styles, + AF_STYLE_UNASSIGNED, globals->glyph_count ); error = FT_Select_Charmap( face, FT_ENCODING_UNICODE ); if ( error ) { - /* - * Ignore this error; we simply use the fallback script. - * XXX: Shouldn't we rather disable hinting? - */ + /* + * Ignore this error; we simply use the fallback style. + * XXX: Shouldn't we rather disable hinting? + */ error = FT_Err_Ok; goto Exit; } - /* scan each script in a Unicode charmap */ - for ( ss = 0; AF_SCRIPT_CLASSES_GET[ss]; ss++ ) + /* scan each style in a Unicode charmap */ + for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ ) { - AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET[ss]; + AF_StyleClass style_class = + AF_STYLE_CLASSES_GET[ss]; + AF_ScriptClass script_class = + AF_SCRIPT_CLASSES_GET[style_class->script]; AF_Script_UniRange range; @@ -116,35 +172,59 @@ /* * Scan all Unicode points in the range and set the corresponding - * glyph script index. + * glyph style index. */ - for ( range = script_class->script_uni_ranges; - range->first != 0; - range++ ) + if ( style_class->coverage == AF_COVERAGE_DEFAULT ) { - FT_ULong charcode = range->first; - FT_UInt gindex; + if ( style_class->script == globals->module->default_script ) + dflt = ss; - - gindex = FT_Get_Char_Index( face, charcode ); - - if ( gindex != 0 && - gindex < (FT_ULong)globals->glyph_count && - gscripts[gindex] == AF_SCRIPT_NONE ) - gscripts[gindex] = (FT_Byte)ss; - - for (;;) + for ( range = script_class->script_uni_ranges; + range->first != 0; + range++ ) { - charcode = FT_Get_Next_Char( face, charcode, &gindex ); + FT_ULong charcode = range->first; + FT_UInt gindex; - if ( gindex == 0 || charcode > range->last ) - break; - if ( gindex < (FT_ULong)globals->glyph_count && - gscripts[gindex] == AF_SCRIPT_NONE ) - gscripts[gindex] = (FT_Byte)ss; + gindex = FT_Get_Char_Index( face, charcode ); + + if ( gindex != 0 && + gindex < (FT_ULong)globals->glyph_count && + gstyles[gindex] == AF_STYLE_UNASSIGNED ) + gstyles[gindex] = (FT_Byte)ss; + + for (;;) + { + charcode = FT_Get_Next_Char( face, charcode, &gindex ); + + if ( gindex == 0 || charcode > range->last ) + break; + + if ( gindex < (FT_ULong)globals->glyph_count && + gstyles[gindex] == AF_STYLE_UNASSIGNED ) + gstyles[gindex] = (FT_Byte)ss; + } } } + else + { + /* get glyphs not directly addressable by cmap */ + af_get_coverage( globals, style_class, gstyles ); + } + } + + /* handle the default OpenType features of the default script ... */ + af_get_coverage( globals, AF_STYLE_CLASSES_GET[dflt], gstyles ); + + /* ... and the remaining default OpenType features */ + for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ ) + { + AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss]; + + + if ( ss != dflt && style_class->coverage == AF_COVERAGE_DEFAULT ) + af_get_coverage( globals, style_class, gstyles ); } /* mark ASCII digits */ @@ -154,29 +234,68 @@ if ( gindex != 0 && gindex < (FT_ULong)globals->glyph_count ) - gscripts[gindex] |= AF_DIGIT; + gstyles[gindex] |= AF_DIGIT; } Exit: /* - * By default, all uncovered glyphs are set to the fallback script. + * By default, all uncovered glyphs are set to the fallback style. * XXX: Shouldn't we disable hinting or do something similar? */ - if ( globals->module->fallback_script != AF_SCRIPT_NONE ) + if ( globals->module->fallback_style != AF_STYLE_UNASSIGNED ) { FT_Long nn; for ( nn = 0; nn < globals->glyph_count; nn++ ) { - if ( ( gscripts[nn] & ~AF_DIGIT ) == AF_SCRIPT_NONE ) + if ( ( gstyles[nn] & ~AF_DIGIT ) == AF_STYLE_UNASSIGNED ) { - gscripts[nn] &= ~AF_SCRIPT_NONE; - gscripts[nn] |= globals->module->fallback_script; + gstyles[nn] &= ~AF_STYLE_UNASSIGNED; + gstyles[nn] |= globals->module->fallback_style; } } } +#ifdef FT_DEBUG_LEVEL_TRACE + + FT_TRACE4(( "\n" + "style coverage\n" + "==============\n" + "\n" )); + + for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ ) + { + AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss]; + FT_UInt count = 0; + FT_Long idx; + + + FT_TRACE4(( "%s:\n", af_style_names[style_class->style] )); + + for ( idx = 0; idx < globals->glyph_count; idx++ ) + { + if ( ( gstyles[idx] & ~AF_DIGIT ) == style_class->style ) + { + if ( !( count % 10 ) ) + FT_TRACE4(( " " )); + + FT_TRACE4(( " %d", idx )); + count++; + + if ( !( count % 10 ) ) + FT_TRACE4(( "\n" )); + } + } + + if ( !count ) + FT_TRACE4(( " (none)\n" )); + if ( count % 10 ) + FT_TRACE4(( "\n" )); + } + +#endif /* FT_DEBUG_LEVEL_TRACE */ + FT_Set_Charmap( face, old_charmap ); return error; } @@ -198,12 +317,16 @@ face->num_glyphs * sizeof ( FT_Byte ) ) ) goto Exit; - globals->face = face; - globals->glyph_count = face->num_glyphs; - globals->glyph_scripts = (FT_Byte*)( globals + 1 ); - globals->module = module; + globals->face = face; + globals->glyph_count = face->num_glyphs; + globals->glyph_styles = (FT_Byte*)( globals + 1 ); + globals->module = module; - error = af_face_globals_compute_script_coverage( globals ); +#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ + globals->hb_font = hb_ft_font_create( face, NULL ); +#endif + + error = af_face_globals_compute_style_coverage( globals ); if ( error ) { af_face_globals_free( globals ); @@ -227,26 +350,31 @@ FT_UInt nn; - for ( nn = 0; nn < AF_SCRIPT_MAX; nn++ ) + for ( nn = 0; nn < AF_STYLE_MAX; nn++ ) { if ( globals->metrics[nn] ) { - AF_ScriptClass script_class = - AF_SCRIPT_CLASSES_GET[nn]; + AF_StyleClass style_class = + AF_STYLE_CLASSES_GET[nn]; AF_WritingSystemClass writing_system_class = - AF_WRITING_SYSTEM_CLASSES_GET[script_class->writing_system]; + AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system]; - if ( writing_system_class->script_metrics_done ) - writing_system_class->script_metrics_done( globals->metrics[nn] ); + if ( writing_system_class->style_metrics_done ) + writing_system_class->style_metrics_done( globals->metrics[nn] ); FT_FREE( globals->metrics[nn] ); } } - globals->glyph_count = 0; - globals->glyph_scripts = NULL; /* no need to free this one! */ - globals->face = NULL; +#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ + hb_font_destroy( globals->hb_font ); + globals->hb_font = NULL; +#endif + + globals->glyph_count = 0; + globals->glyph_styles = NULL; /* no need to free this one! */ + globals->face = NULL; FT_FREE( globals ); } @@ -254,16 +382,16 @@ FT_LOCAL_DEF( FT_Error ) - af_face_globals_get_metrics( AF_FaceGlobals globals, - FT_UInt gindex, - FT_UInt options, - AF_ScriptMetrics *ametrics ) + af_face_globals_get_metrics( AF_FaceGlobals globals, + FT_UInt gindex, + FT_UInt options, + AF_StyleMetrics *ametrics ) { - AF_ScriptMetrics metrics = NULL; + AF_StyleMetrics metrics = NULL; - AF_Script script = (AF_Script)( options & 15 ); + AF_Style style = (AF_Style)options; AF_WritingSystemClass writing_system_class; - AF_ScriptClass script_class; + AF_StyleClass style_class; FT_Error error = FT_Err_Ok; @@ -274,43 +402,44 @@ goto Exit; } - /* if we have a forced script (via `options'), use it, */ - /* otherwise look into `glyph_scripts' array */ - if ( script == AF_SCRIPT_DFLT || script + 1 >= AF_SCRIPT_MAX ) - script = (AF_Script)( globals->glyph_scripts[gindex] & AF_SCRIPT_NONE ); + /* if we have a forced style (via `options'), use it, */ + /* otherwise look into `glyph_styles' array */ + if ( style == AF_STYLE_NONE_DFLT || style + 1 >= AF_STYLE_MAX ) + style = (AF_Style)( globals->glyph_styles[gindex] & + AF_STYLE_UNASSIGNED ); - script_class = AF_SCRIPT_CLASSES_GET[script]; + style_class = AF_STYLE_CLASSES_GET[style]; writing_system_class = AF_WRITING_SYSTEM_CLASSES_GET - [script_class->writing_system]; + [style_class->writing_system]; - metrics = globals->metrics[script]; + metrics = globals->metrics[style]; if ( metrics == NULL ) { /* create the global metrics object if necessary */ FT_Memory memory = globals->face->memory; - if ( FT_ALLOC( metrics, writing_system_class->script_metrics_size ) ) + if ( FT_ALLOC( metrics, writing_system_class->style_metrics_size ) ) goto Exit; - metrics->script_class = script_class; - metrics->globals = globals; + metrics->style_class = style_class; + metrics->globals = globals; - if ( writing_system_class->script_metrics_init ) + if ( writing_system_class->style_metrics_init ) { - error = writing_system_class->script_metrics_init( metrics, - globals->face ); + error = writing_system_class->style_metrics_init( metrics, + globals->face ); if ( error ) { - if ( writing_system_class->script_metrics_done ) - writing_system_class->script_metrics_done( metrics ); + if ( writing_system_class->style_metrics_done ) + writing_system_class->style_metrics_done( metrics ); FT_FREE( metrics ); goto Exit; } } - globals->metrics[script] = metrics; + globals->metrics[style] = metrics; } Exit: @@ -325,7 +454,7 @@ FT_UInt gindex ) { if ( gindex < (FT_ULong)globals->glyph_count ) - return (FT_Bool)( globals->glyph_scripts[gindex] & AF_DIGIT ); + return (FT_Bool)( globals->glyph_styles[gindex] & AF_DIGIT ); return (FT_Bool)0; } diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afglobal.h b/reactos/lib/3rdparty/freetype/src/autofit/afglobal.h index 227eee752ad..d2da40e3cf5 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afglobal.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afglobal.h @@ -5,7 +5,7 @@ /* Auto-fitter routines to compute global hinting values */ /* (specification). */ /* */ -/* Copyright 2003-2005, 2007, 2009, 2011-2013 by */ +/* Copyright 2003-2005, 2007, 2009, 2011-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -23,6 +23,7 @@ #include "aftypes.h" #include "afmodule.h" +#include "hbshim.h" FT_BEGIN_HEADER @@ -31,29 +32,50 @@ FT_BEGIN_HEADER FT_LOCAL_ARRAY( AF_WritingSystemClass ) af_writing_system_classes[]; + +#undef SCRIPT +#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \ + AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class ) + +#include "afscript.h" + FT_LOCAL_ARRAY( AF_ScriptClass ) af_script_classes[]; + +#undef STYLE +#define STYLE( s, S, d, ws, sc, ss, c ) \ + AF_DECLARE_STYLE_CLASS( af_ ## s ## _style_class ) + +#include "afstyles.h" + + FT_LOCAL_ARRAY( AF_StyleClass ) + af_style_classes[]; + + #ifdef FT_DEBUG_LEVEL_TRACE FT_LOCAL_ARRAY( char* ) - af_script_names[]; + af_style_names[]; #endif + /* * Default values and flags for both autofitter globals (found in * AF_ModuleRec) and face globals (in AF_FaceGlobalsRec). */ - /* index of fallback script in `af_script_classes' */ + /* index of fallback style in `af_style_classes' */ #ifdef AF_CONFIG_OPTION_CJK -#define AF_SCRIPT_FALLBACK AF_SCRIPT_HANI +#define AF_STYLE_FALLBACK AF_STYLE_HANI_DFLT #else -#define AF_SCRIPT_FALLBACK AF_SCRIPT_DFLT +#define AF_STYLE_FALLBACK AF_STYLE_NONE_DFLT #endif + /* default script for OpenType; ignored if HarfBuzz isn't used */ +#define AF_SCRIPT_DEFAULT AF_SCRIPT_LATN /* a bit mask indicating an uncovered glyph */ -#define AF_SCRIPT_NONE 0x7F +#define AF_STYLE_UNASSIGNED 0x7F /* if this flag is set, we have an ASCII digit */ -#define AF_DIGIT 0x80 +#define AF_DIGIT 0x80 /* `increase-x-height' property */ #define AF_PROP_INCREASE_X_HEIGHT_MIN 6 @@ -70,29 +92,33 @@ FT_BEGIN_HEADER /* - * Note that glyph_scripts[] maps each glyph to an index into the - * `af_script_classes' array. + * Note that glyph_styles[] maps each glyph to an index into the + * `af_style_classes' array. * */ typedef struct AF_FaceGlobalsRec_ { - FT_Face face; - FT_Long glyph_count; /* same as face->num_glyphs */ - FT_Byte* glyph_scripts; + FT_Face face; + FT_Long glyph_count; /* same as face->num_glyphs */ + FT_Byte* glyph_styles; + +#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ + hb_font_t* hb_font; +#endif /* per-face auto-hinter properties */ - FT_UInt increase_x_height; + FT_UInt increase_x_height; - AF_ScriptMetrics metrics[AF_SCRIPT_MAX]; + AF_StyleMetrics metrics[AF_STYLE_MAX]; - AF_Module module; /* to access global properties */ + AF_Module module; /* to access global properties */ } AF_FaceGlobalsRec; /* * model the global hints data for a given face, decomposed into - * script-specific items + * style-specific items */ FT_LOCAL( FT_Error ) @@ -101,10 +127,10 @@ FT_BEGIN_HEADER AF_Module module ); FT_LOCAL( FT_Error ) - af_face_globals_get_metrics( AF_FaceGlobals globals, - FT_UInt gindex, - FT_UInt options, - AF_ScriptMetrics *ametrics ); + af_face_globals_get_metrics( AF_FaceGlobals globals, + FT_UInt gindex, + FT_UInt options, + AF_StyleMetrics *ametrics ); FT_LOCAL( void ) af_face_globals_free( AF_FaceGlobals globals ); diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afhints.c b/reactos/lib/3rdparty/freetype/src/autofit/afhints.c index ce504cccac2..270a06bcaa9 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afhints.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afhints.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter hinting routines (body). */ /* */ -/* Copyright 2003-2007, 2009-2013 by */ +/* Copyright 2003-2007, 2009-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -345,7 +345,9 @@ af_glyph_hints_get_segment_offset( AF_GlyphHints hints, FT_Int dimension, FT_Int idx, - FT_Pos* offset ) + FT_Pos *offset, + FT_Bool *is_blue, + FT_Pos *blue_offset ) { AF_Dimension dim; AF_AxisHints axis; @@ -362,9 +364,18 @@ if ( idx < 0 || idx >= axis->num_segments ) return FT_THROW( Invalid_Argument ); - seg = &axis->segments[idx]; - *offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->ox - : seg->first->oy; + seg = &axis->segments[idx]; + *offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->ox + : seg->first->oy; + if ( seg->edge ) + *is_blue = (FT_Bool)( seg->edge->blue_edge != 0 ); + else + *is_blue = FALSE; + + if ( *is_blue ) + *blue_offset = seg->edge->blue_edge->cur; + else + *blue_offset = 0; return FT_Err_Ok; } @@ -533,8 +544,8 @@ /* Reset metrics. */ FT_LOCAL_DEF( void ) - af_glyph_hints_rescale( AF_GlyphHints hints, - AF_ScriptMetrics metrics ) + af_glyph_hints_rescale( AF_GlyphHints hints, + AF_StyleMetrics metrics ) { hints->metrics = metrics; hints->scaler_flags = metrics->scaler.flags; @@ -810,7 +821,6 @@ in_x = out_x; in_y = out_y; - prev = point; } } } @@ -1224,8 +1234,6 @@ } } - point = points; - for ( ; contour < contour_limit; contour++ ) { AF_Point first_touched, last_touched; @@ -1248,7 +1256,6 @@ } first_touched = point; - last_touched = point; for (;;) { diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afhints.h b/reactos/lib/3rdparty/freetype/src/autofit/afhints.h index ce5232545cc..5f1507f8061 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afhints.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afhints.h @@ -27,7 +27,7 @@ FT_BEGIN_HEADER /* * The definition of outline glyph hints. These are shared by all - * script analysis routines (until now). + * writing system analysis routines (until now). */ typedef enum AF_Dimension_ @@ -343,31 +343,31 @@ FT_BEGIN_HEADER typedef struct AF_GlyphHintsRec_ { - FT_Memory memory; + FT_Memory memory; - FT_Fixed x_scale; - FT_Pos x_delta; + FT_Fixed x_scale; + FT_Pos x_delta; - FT_Fixed y_scale; - FT_Pos y_delta; + FT_Fixed y_scale; + FT_Pos y_delta; - FT_Int max_points; /* number of allocated points */ - FT_Int num_points; /* number of used points */ - AF_Point points; /* points array */ + FT_Int max_points; /* number of allocated points */ + FT_Int num_points; /* number of used points */ + AF_Point points; /* points array */ - FT_Int max_contours; /* number of allocated contours */ - FT_Int num_contours; /* number of used contours */ - AF_Point* contours; /* contours array */ + FT_Int max_contours; /* number of allocated contours */ + FT_Int num_contours; /* number of used contours */ + AF_Point* contours; /* contours array */ - AF_AxisHintsRec axis[AF_DIMENSION_MAX]; + AF_AxisHintsRec axis[AF_DIMENSION_MAX]; - FT_UInt32 scaler_flags; /* copy of scaler flags */ - FT_UInt32 other_flags; /* free for script-specific */ - /* implementations */ - AF_ScriptMetrics metrics; + FT_UInt32 scaler_flags; /* copy of scaler flags */ + FT_UInt32 other_flags; /* free for style-specific */ + /* implementations */ + AF_StyleMetrics metrics; - FT_Pos xmin_delta; /* used for warping */ - FT_Pos xmax_delta; + FT_Pos xmin_delta; /* used for warping */ + FT_Pos xmax_delta; } AF_GlyphHintsRec; @@ -429,8 +429,8 @@ FT_BEGIN_HEADER FT_Memory memory ); FT_LOCAL( void ) - af_glyph_hints_rescale( AF_GlyphHints hints, - AF_ScriptMetrics metrics ); + af_glyph_hints_rescale( AF_GlyphHints hints, + AF_StyleMetrics metrics ); FT_LOCAL( FT_Error ) af_glyph_hints_reload( AF_GlyphHints hints, diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afindic.c b/reactos/lib/3rdparty/freetype/src/autofit/afindic.c index ef8299f89df..197881b6145 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afindic.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afindic.c @@ -2,7 +2,7 @@ /* */ /* afindic.c */ /* */ -/* Auto-fitter hinting routines for Indic scripts (body). */ +/* Auto-fitter hinting routines for Indic writing system (body). */ /* */ /* Copyright 2007, 2011-2013 by */ /* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */ @@ -104,32 +104,18 @@ sizeof ( AF_CJKMetricsRec ), - (AF_Script_InitMetricsFunc) af_indic_metrics_init, - (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale, - (AF_Script_DoneMetricsFunc) NULL, + (AF_WritingSystem_InitMetricsFunc) af_indic_metrics_init, + (AF_WritingSystem_ScaleMetricsFunc)af_indic_metrics_scale, + (AF_WritingSystem_DoneMetricsFunc) NULL, - (AF_Script_InitHintsFunc) af_indic_hints_init, - (AF_Script_ApplyHintsFunc) af_indic_hints_apply + (AF_WritingSystem_InitHintsFunc) af_indic_hints_init, + (AF_WritingSystem_ApplyHintsFunc) af_indic_hints_apply ) - /* XXX: this should probably fine tuned to differentiate better between */ - /* scripts... */ - - static const AF_Script_UniRangeRec af_deva_uniranges[] = - { - AF_UNIRANGE_REC( 0x0900UL, 0x0DFFUL ), /* Indic Range */ - AF_UNIRANGE_REC( 0x0F00UL, 0x0FFFUL ), /* Tibetan */ - AF_UNIRANGE_REC( 0x1900UL, 0x194FUL ), /* Limbu */ - AF_UNIRANGE_REC( 0x1B80UL, 0x1BBFUL ), /* Sundanese */ - AF_UNIRANGE_REC( 0x1C80UL, 0x1CDFUL ), /* Meetei Mayak */ - AF_UNIRANGE_REC( 0xA800UL, 0xA82FUL ), /* Syloti Nagri */ - AF_UNIRANGE_REC( 0x11800UL, 0x118DFUL ), /* Sharada */ - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - #else /* !AF_CONFIG_OPTION_INDIC */ + AF_DEFINE_WRITING_SYSTEM_CLASS( af_indic_writing_system_class, @@ -137,33 +123,16 @@ sizeof ( AF_CJKMetricsRec ), - (AF_Script_InitMetricsFunc) NULL, - (AF_Script_ScaleMetricsFunc)NULL, - (AF_Script_DoneMetricsFunc) NULL, + (AF_WritingSystem_InitMetricsFunc) NULL, + (AF_WritingSystem_ScaleMetricsFunc)NULL, + (AF_WritingSystem_DoneMetricsFunc) NULL, - (AF_Script_InitHintsFunc) NULL, - (AF_Script_ApplyHintsFunc) NULL + (AF_WritingSystem_InitHintsFunc) NULL, + (AF_WritingSystem_ApplyHintsFunc) NULL ) - static const AF_Script_UniRangeRec af_deva_uniranges[] = - { - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - #endif /* !AF_CONFIG_OPTION_INDIC */ - AF_DEFINE_SCRIPT_CLASS( - af_deva_script_class, - - AF_SCRIPT_DEVA, - (AF_Blue_Stringset)0, /* XXX */ - AF_WRITING_SYSTEM_INDIC, - - af_deva_uniranges, - 'o' /* XXX */ - ) - - /* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afindic.h b/reactos/lib/3rdparty/freetype/src/autofit/afindic.h index db38e9674f4..9e13cf7e3fb 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afindic.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afindic.h @@ -2,7 +2,8 @@ /* */ /* afindic.h */ /* */ -/* Auto-fitter hinting routines for Indic scripts (specification). */ +/* Auto-fitter hinting routines for Indic writing system */ +/* (specification). */ /* */ /* Copyright 2007, 2012, 2013 by */ /* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */ @@ -30,11 +31,6 @@ FT_BEGIN_HEADER AF_DECLARE_WRITING_SYSTEM_CLASS( af_indic_writing_system_class ) - /* the indic-specific script classes */ - - AF_DECLARE_SCRIPT_CLASS( af_deva_script_class ) - - /* */ FT_END_HEADER diff --git a/reactos/lib/3rdparty/freetype/src/autofit/aflatin.c b/reactos/lib/3rdparty/freetype/src/autofit/aflatin.c index 15a241e523a..e3a7742f47d 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/aflatin.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/aflatin.c @@ -2,9 +2,9 @@ /* */ /* aflatin.c */ /* */ -/* Auto-fitter hinting routines for latin script (body). */ +/* Auto-fitter hinting routines for latin writing system (body). */ /* */ -/* Copyright 2003-2013 by */ +/* Copyright 2003-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -21,6 +21,7 @@ #include FT_INTERNAL_DEBUG_H #include "afglobal.h" +#include "afpic.h" #include "aflatin.h" #include "aferrors.h" @@ -61,10 +62,10 @@ FT_TRACE5(( "\n" - "latin standard widths computation (script `%s')\n" - "=================================================\n" + "latin standard widths computation (style `%s')\n" + "=====================================================\n" "\n", - af_script_names[metrics->root.script_class->script] )); + af_style_names[metrics->root.style_class->style] )); af_glyph_hints_init( hints, face->memory ); @@ -73,20 +74,66 @@ { FT_Error error; - FT_UInt glyph_index; + FT_ULong glyph_index; + FT_Long y_offset; int dim; AF_LatinMetricsRec dummy[1]; AF_Scaler scaler = &dummy->root.scaler; +#ifdef FT_CONFIG_OPTION_PIC + AF_FaceGlobals globals = metrics->root.globals; +#endif - glyph_index = FT_Get_Char_Index( - face, - metrics->root.script_class->standard_char ); - if ( glyph_index == 0 ) - goto Exit; + AF_StyleClass style_class = metrics->root.style_class; + AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET + [style_class->script]; + + FT_UInt32 standard_char; + + + /* + * We check more than a single standard character to catch features + * like `c2sc' (small caps from caps) that don't contain lowercase + * letters by definition, or other features that mainly operate on + * numerals. + */ + + standard_char = script_class->standard_char1; + af_get_char_index( &metrics->root, + standard_char, + &glyph_index, + &y_offset ); + if ( !glyph_index ) + { + if ( script_class->standard_char2 ) + { + standard_char = script_class->standard_char2; + af_get_char_index( &metrics->root, + standard_char, + &glyph_index, + &y_offset ); + if ( !glyph_index ) + { + if ( script_class->standard_char3 ) + { + standard_char = script_class->standard_char3; + af_get_char_index( &metrics->root, + standard_char, + &glyph_index, + &y_offset ); + if ( !glyph_index ) + goto Exit; + } + else + goto Exit; + } + } + else + goto Exit; + } FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n", - metrics->root.script_class->standard_char, glyph_index )); + standard_char, glyph_index )); error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE ); if ( error || face->glyph->outline.n_points <= 0 ) @@ -105,7 +152,7 @@ scaler->render_mode = FT_RENDER_MODE_NORMAL; scaler->flags = 0; - af_glyph_hints_rescale( hints, (AF_ScriptMetrics)dummy ); + af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy ); error = af_glyph_hints_reload( hints, &face->glyph->outline ); if ( error ) @@ -214,12 +261,14 @@ AF_LatinAxis axis = &metrics->axis[AF_DIMENSION_VERT]; FT_Outline outline; - AF_Blue_Stringset bss = metrics->root.script_class->blue_stringset; + AF_StyleClass sc = metrics->root.style_class; + + AF_Blue_Stringset bss = sc->blue_stringset; const AF_Blue_StringRec* bs = &af_blue_stringsets[bss]; - /* we walk over the blue character strings as specified in the */ - /* script's entry in the `af_blue_stringset' array */ + /* we walk over the blue character strings as specified in the */ + /* style's entry in the `af_blue_stringset' array */ FT_TRACE5(( "latin blue zones computation\n" "============================\n" @@ -277,7 +326,8 @@ while ( *p ) { FT_ULong ch; - FT_UInt glyph_index; + FT_ULong glyph_index; + FT_Long y_offset; FT_Pos best_y; /* same as points.y */ FT_Int best_point, best_contour_first, best_contour_last; FT_Vector* points; @@ -287,7 +337,7 @@ GET_UTF8_CHAR( ch, p ); /* load the character in the face -- skip unknown or empty ones */ - glyph_index = FT_Get_Char_Index( face, ch ); + af_get_char_index( &metrics->root, ch, &glyph_index, &y_offset ); if ( glyph_index == 0 ) { FT_TRACE5(( " U+%04lX unavailable\n", ch )); @@ -575,7 +625,10 @@ if ( FT_ABS( points[next].x - points[first].x ) <= 20 * dist ) { - last--; + if ( last > best_contour_first ) + last--; + else + last = best_contour_last; break; } @@ -606,6 +659,12 @@ } } + /* for computing blue zones, we add the y offset as returned */ + /* by the currently used OpenType feature -- for example, */ + /* superscript glyphs might be identical to subscript glyphs */ + /* with a vertical shift */ + best_y += y_offset; + FT_TRACE5(( " U+%04lX: best_y = %5ld", ch, best_y )); /* now set the `round' flag depending on the segment's kind: */ @@ -733,10 +792,11 @@ /* digit `0' is 0x30 in all supported charmaps */ for ( i = 0x30; i <= 0x39; i++ ) { - FT_UInt glyph_index; + FT_ULong glyph_index; + FT_Long y_offset; - glyph_index = FT_Get_Char_Index( face, i ); + af_get_char_index( &metrics->root, i, &glyph_index, &y_offset ); if ( glyph_index == 0 ) continue; @@ -879,11 +939,11 @@ FT_TRACE5(( "af_latin_metrics_scale_dim:" - " x height alignment (script `%s'):\n" + " x height alignment (style `%s'):\n" " " " vertical scaling changed from %.4f to %.4f (by %d%%)\n" "\n", - af_script_names[metrics->root.script_class->script], + af_style_names[metrics->root.style_class->style], axis->org_scale / 65536.0, scale / 65536.0, ( fitted - scaled ) * 100 / scaled )); @@ -906,9 +966,9 @@ metrics->root.scaler.y_delta = delta; } - FT_TRACE5(( "%s widths (script `%s')\n", + FT_TRACE5(( "%s widths (style `%s')\n", dim == AF_DIMENSION_HORZ ? "horizontal" : "vertical", - af_script_names[metrics->root.script_class->script] )); + af_style_names[metrics->root.style_class->style] )); /* scale the widths */ for ( nn = 0; nn < axis->width_count; nn++ ) @@ -933,15 +993,15 @@ #ifdef FT_DEBUG_LEVEL_TRACE if ( axis->extra_light ) - FT_TRACE5(( "`%s' script is extra light (at current resolution)\n" + FT_TRACE5(( "`%s' style is extra light (at current resolution)\n" "\n", - af_script_names[metrics->root.script_class->script] )); + af_style_names[metrics->root.style_class->style] )); #endif if ( dim == AF_DIMENSION_VERT ) { - FT_TRACE5(( "blue zones (script `%s')\n", - af_script_names[metrics->root.script_class->script] )); + FT_TRACE5(( "blue zones (style `%s')\n", + af_style_names[metrics->root.style_class->style] )); /* scale the blue zones */ for ( nn = 0; nn < axis->blue_count; nn++ ) @@ -1797,7 +1857,7 @@ FT_Face face = metrics->root.scaler.face; - af_glyph_hints_rescale( hints, (AF_ScriptMetrics)metrics ); + af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics ); /* * correct x_scale and y_scale if needed, since they may have @@ -2148,9 +2208,9 @@ #endif - FT_TRACE5(( "latin %s edge hinting (script `%s')\n", + FT_TRACE5(( "latin %s edge hinting (style `%s')\n", dim == AF_DIMENSION_VERT ? "horizontal" : "vertical", - af_script_names[hints->metrics->script_class->script] )); + af_style_names[hints->metrics->style_class->style] )); /* we begin by aligning all stems relative to the blue zone */ /* if needed -- that's only for horizontal edges */ @@ -2709,111 +2769,12 @@ sizeof ( AF_LatinMetricsRec ), - (AF_Script_InitMetricsFunc) af_latin_metrics_init, - (AF_Script_ScaleMetricsFunc)af_latin_metrics_scale, - (AF_Script_DoneMetricsFunc) NULL, + (AF_WritingSystem_InitMetricsFunc) af_latin_metrics_init, + (AF_WritingSystem_ScaleMetricsFunc)af_latin_metrics_scale, + (AF_WritingSystem_DoneMetricsFunc) NULL, - (AF_Script_InitHintsFunc) af_latin_hints_init, - (AF_Script_ApplyHintsFunc) af_latin_hints_apply - ) - - - /* XXX: this should probably fine tuned to differentiate better between */ - /* scripts... */ - - static const AF_Script_UniRangeRec af_latn_uniranges[] = - { - AF_UNIRANGE_REC( 0x0020UL, 0x007FUL ), /* Basic Latin (no control chars) */ - AF_UNIRANGE_REC( 0x00A0UL, 0x00FFUL ), /* Latin-1 Supplement (no control chars) */ - AF_UNIRANGE_REC( 0x0100UL, 0x017FUL ), /* Latin Extended-A */ - AF_UNIRANGE_REC( 0x0180UL, 0x024FUL ), /* Latin Extended-B */ - AF_UNIRANGE_REC( 0x0250UL, 0x02AFUL ), /* IPA Extensions */ - AF_UNIRANGE_REC( 0x02B0UL, 0x02FFUL ), /* Spacing Modifier Letters */ - AF_UNIRANGE_REC( 0x0300UL, 0x036FUL ), /* Combining Diacritical Marks */ - AF_UNIRANGE_REC( 0x1D00UL, 0x1D7FUL ), /* Phonetic Extensions */ - AF_UNIRANGE_REC( 0x1D80UL, 0x1DBFUL ), /* Phonetic Extensions Supplement */ - AF_UNIRANGE_REC( 0x1DC0UL, 0x1DFFUL ), /* Combining Diacritical Marks Supplement */ - AF_UNIRANGE_REC( 0x1E00UL, 0x1EFFUL ), /* Latin Extended Additional */ - AF_UNIRANGE_REC( 0x2000UL, 0x206FUL ), /* General Punctuation */ - AF_UNIRANGE_REC( 0x2070UL, 0x209FUL ), /* Superscripts and Subscripts */ - AF_UNIRANGE_REC( 0x20A0UL, 0x20CFUL ), /* Currency Symbols */ - AF_UNIRANGE_REC( 0x2150UL, 0x218FUL ), /* Number Forms */ - AF_UNIRANGE_REC( 0x2460UL, 0x24FFUL ), /* Enclosed Alphanumerics */ - AF_UNIRANGE_REC( 0x2C60UL, 0x2C7FUL ), /* Latin Extended-C */ - AF_UNIRANGE_REC( 0x2E00UL, 0x2E7FUL ), /* Supplemental Punctuation */ - AF_UNIRANGE_REC( 0xA720UL, 0xA7FFUL ), /* Latin Extended-D */ - AF_UNIRANGE_REC( 0xFB00UL, 0xFB06UL ), /* Alphab. Present. Forms (Latin Ligs) */ - AF_UNIRANGE_REC( 0x1D400UL, 0x1D7FFUL ), /* Mathematical Alphanumeric Symbols */ - AF_UNIRANGE_REC( 0x1F100UL, 0x1F1FFUL ), /* Enclosed Alphanumeric Supplement */ - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - - static const AF_Script_UniRangeRec af_grek_uniranges[] = - { - AF_UNIRANGE_REC( 0x0370UL, 0x03FFUL ), /* Greek and Coptic */ - AF_UNIRANGE_REC( 0x1F00UL, 0x1FFFUL ), /* Greek Extended */ - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - - static const AF_Script_UniRangeRec af_cyrl_uniranges[] = - { - AF_UNIRANGE_REC( 0x0400UL, 0x04FFUL ), /* Cyrillic */ - AF_UNIRANGE_REC( 0x0500UL, 0x052FUL ), /* Cyrillic Supplement */ - AF_UNIRANGE_REC( 0x2DE0UL, 0x2DFFUL ), /* Cyrillic Extended-A */ - AF_UNIRANGE_REC( 0xA640UL, 0xA69FUL ), /* Cyrillic Extended-B */ - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - - static const AF_Script_UniRangeRec af_hebr_uniranges[] = - { - AF_UNIRANGE_REC( 0x0590UL, 0x05FFUL ), /* Hebrew */ - AF_UNIRANGE_REC( 0xFB1DUL, 0xFB4FUL ), /* Alphab. Present. Forms (Hebrew) */ - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - - - AF_DEFINE_SCRIPT_CLASS( - af_latn_script_class, - - AF_SCRIPT_LATN, - AF_BLUE_STRINGSET_LATN, - AF_WRITING_SYSTEM_LATIN, - - af_latn_uniranges, - 'o' - ) - - AF_DEFINE_SCRIPT_CLASS( - af_grek_script_class, - - AF_SCRIPT_GREK, - AF_BLUE_STRINGSET_GREK, - AF_WRITING_SYSTEM_LATIN, - - af_grek_uniranges, - 0x3BF /* ο */ - ) - - AF_DEFINE_SCRIPT_CLASS( - af_cyrl_script_class, - - AF_SCRIPT_CYRL, - AF_BLUE_STRINGSET_CYRL, - AF_WRITING_SYSTEM_LATIN, - - af_cyrl_uniranges, - 0x43E /* о */ - ) - - AF_DEFINE_SCRIPT_CLASS( - af_hebr_script_class, - - AF_SCRIPT_HEBR, - AF_BLUE_STRINGSET_HEBR, - AF_WRITING_SYSTEM_LATIN, - - af_hebr_uniranges, - 0x5DD /* ם */ + (AF_WritingSystem_InitHintsFunc) af_latin_hints_init, + (AF_WritingSystem_ApplyHintsFunc) af_latin_hints_apply ) diff --git a/reactos/lib/3rdparty/freetype/src/autofit/aflatin.h b/reactos/lib/3rdparty/freetype/src/autofit/aflatin.h index c06cbd9a6af..a958af36ac7 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/aflatin.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/aflatin.h @@ -2,7 +2,8 @@ /* */ /* aflatin.h */ /* */ -/* Auto-fitter hinting routines for latin script (specification). */ +/* Auto-fitter hinting routines for latin writing system */ +/* (specification). */ /* */ /* Copyright 2003-2007, 2009, 2011-2013 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ @@ -29,17 +30,6 @@ FT_BEGIN_HEADER AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin_writing_system_class ) - /* the latin-specific script classes */ - - AF_DECLARE_SCRIPT_CLASS( af_cyrl_script_class ) - AF_DECLARE_SCRIPT_CLASS( af_grek_script_class ) - AF_DECLARE_SCRIPT_CLASS( af_latn_script_class ) - AF_DECLARE_SCRIPT_CLASS( af_hebr_script_class ) -#if 0 - AF_DECLARE_SCRIPT_CLASS( af_armn_script_class ) -#endif - - /* constants are given with units_per_em == 2048 in mind */ #define AF_LATIN_CONSTANT( metrics, c ) \ ( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 ) @@ -56,8 +46,8 @@ FT_BEGIN_HEADER /* * The following declarations could be embedded in the file `aflatin.c'; - * they have been made semi-public to allow alternate script hinters to - * re-use some of them. + * they have been made semi-public to allow alternate writing system + * hinters to re-use some of them. */ @@ -113,9 +103,9 @@ FT_BEGIN_HEADER typedef struct AF_LatinMetricsRec_ { - AF_ScriptMetricsRec root; - FT_UInt units_per_em; - AF_LatinAxisRec axis[AF_DIMENSION_MAX]; + AF_StyleMetricsRec root; + FT_UInt units_per_em; + AF_LatinAxisRec axis[AF_DIMENSION_MAX]; } AF_LatinMetricsRec, *AF_LatinMetrics; @@ -171,7 +161,7 @@ FT_BEGIN_HEADER /* * The next functions shouldn't normally be exported. However, other - * scripts might like to use these functions as-is. + * writing systems might like to use these functions as-is. */ FT_LOCAL( FT_Error ) af_latin_hints_compute_segments( AF_GlyphHints hints, diff --git a/reactos/lib/3rdparty/freetype/src/autofit/aflatin2.c b/reactos/lib/3rdparty/freetype/src/autofit/aflatin2.c index a6d564a28f5..930fa98340f 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/aflatin2.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/aflatin2.c @@ -2,7 +2,7 @@ /* */ /* aflatin2.c */ /* */ -/* Auto-fitter hinting routines for latin script (body). */ +/* Auto-fitter hinting routines for latin writing system (body). */ /* */ /* Copyright 2003-2013 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ @@ -78,7 +78,7 @@ glyph_index = FT_Get_Char_Index( face, - metrics->root.script_class->standard_char ); + metrics->root.style_class->standard_char ); if ( glyph_index == 0 ) goto Exit; @@ -95,7 +95,7 @@ scaler->render_mode = FT_RENDER_MODE_NORMAL; scaler->flags = 0; - af_glyph_hints_rescale( hints, (AF_ScriptMetrics)dummy ); + af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy ); error = af_glyph_hints_reload( hints, &face->glyph->outline ); if ( error ) @@ -1501,7 +1501,7 @@ FT_Face face = metrics->root.scaler.face; - af_glyph_hints_rescale( hints, (AF_ScriptMetrics)metrics ); + af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics ); /* * correct x_scale and y_scale if needed, since they may have @@ -2387,61 +2387,12 @@ sizeof ( AF_LatinMetricsRec ), - (AF_Script_InitMetricsFunc) af_latin2_metrics_init, - (AF_Script_ScaleMetricsFunc)af_latin2_metrics_scale, - (AF_Script_DoneMetricsFunc) NULL, + (AF_WritingSystem_InitMetricsFunc) af_latin2_metrics_init, + (AF_WritingSystem_ScaleMetricsFunc)af_latin2_metrics_scale, + (AF_WritingSystem_DoneMetricsFunc) NULL, - (AF_Script_InitHintsFunc) af_latin2_hints_init, - (AF_Script_ApplyHintsFunc) af_latin2_hints_apply - ) - - - /* XXX: this should probably fine tuned to differentiate better between */ - /* scripts... */ - - static const AF_Script_UniRangeRec af_ltn2_uniranges[] = - { - AF_UNIRANGE_REC( 0x0020UL, 0x007FUL ), /* Basic Latin (no control chars) */ - AF_UNIRANGE_REC( 0x00A0UL, 0x00FFUL ), /* Latin-1 Supplement (no control chars) */ - AF_UNIRANGE_REC( 0x0100UL, 0x017FUL ), /* Latin Extended-A */ - AF_UNIRANGE_REC( 0x0180UL, 0x024FUL ), /* Latin Extended-B */ - AF_UNIRANGE_REC( 0x0250UL, 0x02AFUL ), /* IPA Extensions */ - AF_UNIRANGE_REC( 0x02B0UL, 0x02FFUL ), /* Spacing Modifier Letters */ - AF_UNIRANGE_REC( 0x0300UL, 0x036FUL ), /* Combining Diacritical Marks */ - AF_UNIRANGE_REC( 0x0370UL, 0x03FFUL ), /* Greek and Coptic */ - AF_UNIRANGE_REC( 0x0400UL, 0x04FFUL ), /* Cyrillic */ - AF_UNIRANGE_REC( 0x0500UL, 0x052FUL ), /* Cyrillic Supplement */ - AF_UNIRANGE_REC( 0x1D00UL, 0x1D7FUL ), /* Phonetic Extensions */ - AF_UNIRANGE_REC( 0x1D80UL, 0x1DBFUL ), /* Phonetic Extensions Supplement */ - AF_UNIRANGE_REC( 0x1DC0UL, 0x1DFFUL ), /* Combining Diacritical Marks Supplement */ - AF_UNIRANGE_REC( 0x1E00UL, 0x1EFFUL ), /* Latin Extended Additional */ - AF_UNIRANGE_REC( 0x1F00UL, 0x1FFFUL ), /* Greek Extended */ - AF_UNIRANGE_REC( 0x2000UL, 0x206FUL ), /* General Punctuation */ - AF_UNIRANGE_REC( 0x2070UL, 0x209FUL ), /* Superscripts and Subscripts */ - AF_UNIRANGE_REC( 0x20A0UL, 0x20CFUL ), /* Currency Symbols */ - AF_UNIRANGE_REC( 0x2150UL, 0x218FUL ), /* Number Forms */ - AF_UNIRANGE_REC( 0x2460UL, 0x24FFUL ), /* Enclosed Alphanumerics */ - AF_UNIRANGE_REC( 0x2C60UL, 0x2C7FUL ), /* Latin Extended-C */ - AF_UNIRANGE_REC( 0x2DE0UL, 0x2DFFUL ), /* Cyrillic Extended-A */ - AF_UNIRANGE_REC( 0x2E00UL, 0x2E7FUL ), /* Supplemental Punctuation */ - AF_UNIRANGE_REC( 0xA640UL, 0xA69FUL ), /* Cyrillic Extended-B */ - AF_UNIRANGE_REC( 0xA720UL, 0xA7FFUL ), /* Latin Extended-D */ - AF_UNIRANGE_REC( 0xFB00UL, 0xFB06UL ), /* Alphab. Present. Forms (Latin Ligs) */ - AF_UNIRANGE_REC( 0x1D400UL, 0x1D7FFUL ), /* Mathematical Alphanumeric Symbols */ - AF_UNIRANGE_REC( 0x1F100UL, 0x1F1FFUL ), /* Enclosed Alphanumeric Supplement */ - AF_UNIRANGE_REC( 0UL, 0UL ) - }; - - - AF_DEFINE_SCRIPT_CLASS( - af_ltn2_script_class, - - AF_SCRIPT_LTN2, - AF_BLUE_STRINGSET_LATN, - AF_WRITING_SYSTEM_LATIN2, - - af_ltn2_uniranges, - 'o' + (AF_WritingSystem_InitHintsFunc) af_latin2_hints_init, + (AF_WritingSystem_ApplyHintsFunc) af_latin2_hints_apply ) diff --git a/reactos/lib/3rdparty/freetype/src/autofit/aflatin2.h b/reactos/lib/3rdparty/freetype/src/autofit/aflatin2.h index f7f6d8d7c57..b5d252a91ba 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/aflatin2.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/aflatin2.h @@ -2,7 +2,8 @@ /* */ /* aflatin2.h */ /* */ -/* Auto-fitter hinting routines for latin script (specification). */ +/* Auto-fitter hinting routines for latin writing system */ +/* (specification). */ /* */ /* Copyright 2003-2007, 2012, 2013 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ @@ -30,17 +31,6 @@ FT_BEGIN_HEADER AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin2_writing_system_class ) - /* the latin-specific script classes */ - - AF_DECLARE_SCRIPT_CLASS( af_ltn2_script_class ) /* XXX */ -#if 0 - AF_DECLARE_SCRIPT_CLASS( af_arm2_script_class ) - AF_DECLARE_SCRIPT_CLASS( af_cyr2_script_class ) - AF_DECLARE_SCRIPT_CLASS( af_grk2_script_class ) - AF_DECLARE_SCRIPT_CLASS( af_hbr2_script_class ) -#endif - - /* */ FT_END_HEADER diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afloader.c b/reactos/lib/3rdparty/freetype/src/autofit/afloader.c index b49f8c096ae..0fa3c12788a 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afloader.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afloader.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter glyph loading routines (body). */ /* */ -/* Copyright 2003-2009, 2011-2013 by */ +/* Copyright 2003-2009, 2011-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -109,7 +109,7 @@ FT_Error error; FT_Face face = loader->face; FT_GlyphLoader gloader = loader->gloader; - AF_ScriptMetrics metrics = loader->metrics; + AF_StyleMetrics metrics = loader->metrics; AF_GlyphHints hints = &loader->hints; FT_GlyphSlot slot = face->glyph; FT_Slot_Internal internal = slot->internal; @@ -183,17 +183,17 @@ /* automatic hinting process */ { #ifdef FT_CONFIG_OPTION_PIC - AF_FaceGlobals globals = loader->globals; + AF_FaceGlobals globals = loader->globals; #endif + AF_StyleClass style_class = metrics->style_class; AF_WritingSystemClass writing_system_class = - AF_WRITING_SYSTEM_CLASSES_GET - [metrics->script_class->writing_system]; + AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system]; - if ( writing_system_class->script_hints_apply ) - writing_system_class->script_hints_apply( hints, - &gloader->current.outline, - metrics ); + if ( writing_system_class->style_hints_apply ) + writing_system_class->style_hints_apply( hints, + &gloader->current.outline, + metrics ); } /* we now need to adjust the metrics according to the change in */ @@ -318,12 +318,7 @@ /* recompute subglyph pointer */ subglyph = gloader->base.subglyphs + num_base_subgs + nn; - if ( subglyph->flags & FT_SUBGLYPH_FLAG_USE_MY_METRICS ) - { - pp1 = loader->pp1; - pp2 = loader->pp2; - } - else + if ( !( subglyph->flags & FT_SUBGLYPH_FLAG_USE_MY_METRICS ) ) { loader->pp1 = pp1; loader->pp2 = pp2; @@ -529,14 +524,14 @@ error = af_loader_reset( module, face ); if ( !error ) { - AF_ScriptMetrics metrics; - FT_UInt options = AF_SCRIPT_DFLT; + AF_StyleMetrics metrics; + FT_UInt options = AF_STYLE_NONE_DFLT; #ifdef FT_OPTION_AUTOFIT2 /* XXX: undocumented hook to activate the latin2 writing system */ if ( load_flags & ( 1UL << 20 ) ) - options = AF_SCRIPT_LTN2; + options = AF_STYLE_LTN2_DFLT; #endif error = af_face_globals_get_metrics( loader->globals, gindex, @@ -544,27 +539,27 @@ if ( !error ) { #ifdef FT_CONFIG_OPTION_PIC - AF_FaceGlobals globals = loader->globals; + AF_FaceGlobals globals = loader->globals; #endif + AF_StyleClass style_class = metrics->style_class; AF_WritingSystemClass writing_system_class = - AF_WRITING_SYSTEM_CLASSES_GET - [metrics->script_class->writing_system]; + AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system]; loader->metrics = metrics; - if ( writing_system_class->script_metrics_scale ) - writing_system_class->script_metrics_scale( metrics, &scaler ); + if ( writing_system_class->style_metrics_scale ) + writing_system_class->style_metrics_scale( metrics, &scaler ); else metrics->scaler = scaler; load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_TRANSFORM; load_flags &= ~FT_LOAD_RENDER; - if ( writing_system_class->script_hints_init ) + if ( writing_system_class->style_hints_init ) { - error = writing_system_class->script_hints_init( &loader->hints, - metrics ); + error = writing_system_class->style_hints_init( &loader->hints, + metrics ); if ( error ) goto Exit; } diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afloader.h b/reactos/lib/3rdparty/freetype/src/autofit/afloader.h index 1f34d17cce0..9601e24fce8 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afloader.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afloader.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter glyph loading routines (specification). */ /* */ -/* Copyright 2003-2005, 2011-2012 by */ +/* Copyright 2003-2005, 2011-2013 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -44,7 +44,7 @@ FT_BEGIN_HEADER /* current glyph data */ FT_GlyphLoader gloader; AF_GlyphHintsRec hints; - AF_ScriptMetrics metrics; + AF_StyleMetrics metrics; FT_Bool transformed; FT_Matrix trans_matrix; FT_Vector trans_delta; diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afmodule.c b/reactos/lib/3rdparty/freetype/src/autofit/afmodule.c index b1bb5ee0ed5..73bf832b11a 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afmodule.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afmodule.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter module implementation (body). */ /* */ -/* Copyright 2003-2006, 2009, 2011-2013 by */ +/* Copyright 2003-2006, 2009, 2011-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -45,7 +45,7 @@ #define FT_COMPONENT trace_afmodule - FT_Error + static FT_Error af_property_get_face_globals( FT_Face face, AF_FaceGlobals* aglobals, AF_Module module ) @@ -60,8 +60,8 @@ globals = (AF_FaceGlobals)face->autohint.data; if ( !globals ) { - /* trigger computation of the global script data */ - /* in case it hasn't been done yet */ + /* trigger computation of the global style data */ + /* in case it hasn't been done yet */ error = af_face_globals_new( face, &globals, module ); if ( !error ) { @@ -79,7 +79,7 @@ } - FT_Error + static FT_Error af_property_set( FT_Module ft_module, const char* property_name, const void* value ) @@ -92,8 +92,40 @@ { FT_UInt* fallback_script = (FT_UInt*)value; + FT_UInt ss; - module->fallback_script = *fallback_script; + + /* We translate the fallback script to a fallback style that uses */ + /* `fallback-script' as its script and `AF_COVERAGE_NONE' as its */ + /* coverage value. */ + for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ ) + { + AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss]; + + + if ( style_class->script == *fallback_script && + style_class->coverage == AF_COVERAGE_DEFAULT ) + { + module->fallback_style = ss; + break; + } + } + + if ( !AF_STYLE_CLASSES_GET[ss] ) + { + FT_TRACE0(( "af_property_set: Invalid value %d for property `%s'\n", + fallback_script, property_name )); + return FT_THROW( Invalid_Argument ); + } + + return error; + } + else if ( !ft_strcmp( property_name, "default-script" ) ) + { + FT_UInt* default_script = (FT_UInt*)value; + + + module->default_script = *default_script; return error; } @@ -116,14 +148,15 @@ } - FT_Error + static FT_Error af_property_get( FT_Module ft_module, const char* property_name, void* value ) { - FT_Error error = FT_Err_Ok; - AF_Module module = (AF_Module)ft_module; - FT_UInt fallback_script = module->fallback_script; + FT_Error error = FT_Err_Ok; + AF_Module module = (AF_Module)ft_module; + FT_UInt fallback_style = module->fallback_style; + FT_UInt default_script = module->default_script; if ( !ft_strcmp( property_name, "glyph-to-script-map" ) ) @@ -134,7 +167,7 @@ error = af_property_get_face_globals( prop->face, &globals, module ); if ( !error ) - prop->map = globals->glyph_scripts; + prop->map = globals->glyph_styles; return error; } @@ -142,8 +175,19 @@ { FT_UInt* val = (FT_UInt*)value; + AF_StyleClass style_class = AF_STYLE_CLASSES_GET[fallback_style]; - *val = fallback_script; + + *val = style_class->script; + + return error; + } + else if ( !ft_strcmp( property_name, "default-script" ) ) + { + FT_UInt* val = (FT_UInt*)value; + + + *val = default_script; return error; } @@ -206,7 +250,8 @@ AF_Module module = (AF_Module)ft_module; - module->fallback_script = AF_SCRIPT_FALLBACK; + module->fallback_style = AF_STYLE_FALLBACK; + module->default_script = AF_SCRIPT_DEFAULT; return af_loader_init( module ); } diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afmodule.h b/reactos/lib/3rdparty/freetype/src/autofit/afmodule.h index c4e8f8f66ad..20b7b9f6654 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afmodule.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afmodule.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter module implementation (specification). */ /* */ -/* Copyright 2003, 2004, 2005 by */ +/* Copyright 2003-2005, 2009, 2012, 2013 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -40,7 +40,8 @@ FT_BEGIN_HEADER { FT_ModuleRec root; - FT_UInt fallback_script; + FT_UInt fallback_style; + FT_UInt default_script; AF_LoaderRec loader[1]; diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afpic.c b/reactos/lib/3rdparty/freetype/src/autofit/afpic.c index 92d696d296d..cb29fd79fed 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afpic.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/afpic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for autofit module. */ /* */ -/* Copyright 2009-2013 by */ +/* Copyright 2009-2014 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -20,6 +20,7 @@ #include FT_FREETYPE_H #include FT_INTERNAL_OBJECTS_H #include "afpic.h" +#include "afglobal.h" #include "aferrors.h" @@ -42,7 +43,7 @@ FT_AutoHinter_InterfaceRec* clazz ); - /* forward declaration of PIC init functions from script classes */ + /* forward declaration of PIC init functions from writing system classes */ #undef WRITING_SYSTEM #define WRITING_SYSTEM( ws, WS ) /* empty */ @@ -97,15 +98,20 @@ FT_Init_Class_af_service_properties( &container->af_service_properties ); - for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX - 1; ss++ ) + for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX; ss++ ) container->af_writing_system_classes[ss] = &container->af_writing_system_classes_rec[ss]; - container->af_writing_system_classes[AF_WRITING_SYSTEM_MAX - 1] = NULL; + container->af_writing_system_classes[AF_WRITING_SYSTEM_MAX] = NULL; - for ( ss = 0; ss < AF_SCRIPT_MAX - 1; ss++ ) + for ( ss = 0; ss < AF_SCRIPT_MAX; ss++ ) container->af_script_classes[ss] = &container->af_script_classes_rec[ss]; - container->af_script_classes[AF_SCRIPT_MAX - 1] = NULL; + container->af_script_classes[AF_SCRIPT_MAX] = NULL; + + for ( ss = 0; ss < AF_STYLE_MAX; ss++ ) + container->af_style_classes[ss] = + &container->af_style_classes_rec[ss]; + container->af_style_classes[AF_STYLE_MAX] = NULL; #undef WRITING_SYSTEM #define WRITING_SYSTEM( ws, WS ) \ @@ -116,13 +122,21 @@ #include "afwrtsys.h" #undef SCRIPT -#define SCRIPT( s, S, d ) \ +#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \ FT_Init_Class_af_ ## s ## _script_class( \ &container->af_script_classes_rec[ss++] ); ss = 0; #include "afscript.h" +#undef STYLE +#define STYLE( s, S, d, ws, sc, bss, c ) \ + FT_Init_Class_af_ ## s ## _style_class( \ + &container->af_style_classes_rec[ss++] ); + + ss = 0; +#include "afstyles.h" + FT_Init_Class_af_autofitter_interface( library, &container->af_autofitter_interface ); diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afpic.h b/reactos/lib/3rdparty/freetype/src/autofit/afpic.h index 09f8258a2e8..9a68b4a5a29 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afpic.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afpic.h @@ -32,6 +32,7 @@ FT_BEGIN_HEADER #define AF_WRITING_SYSTEM_CLASSES_GET af_writing_system_classes #define AF_SCRIPT_CLASSES_GET af_script_classes +#define AF_STYLE_CLASSES_GET af_style_classes #define AF_INTERFACE_GET af_autofitter_interface #else /* FT_CONFIG_OPTION_PIC */ @@ -48,14 +49,19 @@ FT_BEGIN_HEADER FT_Service_PropertiesRec af_service_properties; AF_WritingSystemClass af_writing_system_classes - [AF_WRITING_SYSTEM_MAX]; + [AF_WRITING_SYSTEM_MAX + 1]; AF_WritingSystemClassRec af_writing_system_classes_rec - [AF_WRITING_SYSTEM_MAX - 1]; + [AF_WRITING_SYSTEM_MAX]; AF_ScriptClass af_script_classes - [AF_SCRIPT_MAX]; + [AF_SCRIPT_MAX + 1]; AF_ScriptClassRec af_script_classes_rec - [AF_SCRIPT_MAX - 1]; + [AF_SCRIPT_MAX]; + + AF_StyleClass af_style_classes + [AF_STYLE_MAX + 1]; + AF_StyleClassRec af_style_classes_rec + [AF_STYLE_MAX]; FT_AutoHinter_InterfaceRec af_autofitter_interface; @@ -74,6 +80,8 @@ FT_BEGIN_HEADER ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_writing_system_classes ) #define AF_SCRIPT_CLASSES_GET \ ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_script_classes ) +#define AF_STYLE_CLASSES_GET \ + ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_style_classes ) #define AF_INTERFACE_GET \ ( GET_PIC( library )->af_autofitter_interface ) diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afranges.c b/reactos/lib/3rdparty/freetype/src/autofit/afranges.c new file mode 100644 index 00000000000..3d919b5a4da --- /dev/null +++ b/reactos/lib/3rdparty/freetype/src/autofit/afranges.c @@ -0,0 +1,208 @@ +/***************************************************************************/ +/* */ +/* afranges.c */ +/* */ +/* Auto-fitter Unicode script ranges (body). */ +/* */ +/* Copyright 2013, 2014 by */ +/* David Turner, Robert Wilhelm, and Werner Lemberg. */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + + +#include "afranges.h" + + + const AF_Script_UniRangeRec af_cyrl_uniranges[] = + { + AF_UNIRANGE_REC( 0x0400UL, 0x04FFUL ), /* Cyrillic */ + AF_UNIRANGE_REC( 0x0500UL, 0x052FUL ), /* Cyrillic Supplement */ + AF_UNIRANGE_REC( 0x2DE0UL, 0x2DFFUL ), /* Cyrillic Extended-A */ + AF_UNIRANGE_REC( 0xA640UL, 0xA69FUL ), /* Cyrillic Extended-B */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_grek_uniranges[] = + { + AF_UNIRANGE_REC( 0x0370UL, 0x03FFUL ), /* Greek and Coptic */ + AF_UNIRANGE_REC( 0x1F00UL, 0x1FFFUL ), /* Greek Extended */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_hebr_uniranges[] = + { + AF_UNIRANGE_REC( 0x0590UL, 0x05FFUL ), /* Hebrew */ + AF_UNIRANGE_REC( 0xFB1DUL, 0xFB4FUL ), /* Alphab. Present. Forms (Hebrew) */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_latn_uniranges[] = + { + AF_UNIRANGE_REC( 0x0020UL, 0x007FUL ), /* Basic Latin (no control chars) */ + AF_UNIRANGE_REC( 0x00A0UL, 0x00FFUL ), /* Latin-1 Supplement (no control chars) */ + AF_UNIRANGE_REC( 0x0100UL, 0x017FUL ), /* Latin Extended-A */ + AF_UNIRANGE_REC( 0x0180UL, 0x024FUL ), /* Latin Extended-B */ + AF_UNIRANGE_REC( 0x0250UL, 0x02AFUL ), /* IPA Extensions */ + AF_UNIRANGE_REC( 0x02B0UL, 0x02FFUL ), /* Spacing Modifier Letters */ + AF_UNIRANGE_REC( 0x0300UL, 0x036FUL ), /* Combining Diacritical Marks */ + AF_UNIRANGE_REC( 0x1D00UL, 0x1D7FUL ), /* Phonetic Extensions */ + AF_UNIRANGE_REC( 0x1D80UL, 0x1DBFUL ), /* Phonetic Extensions Supplement */ + AF_UNIRANGE_REC( 0x1DC0UL, 0x1DFFUL ), /* Combining Diacritical Marks Supplement */ + AF_UNIRANGE_REC( 0x1E00UL, 0x1EFFUL ), /* Latin Extended Additional */ + AF_UNIRANGE_REC( 0x2000UL, 0x206FUL ), /* General Punctuation */ + AF_UNIRANGE_REC( 0x2070UL, 0x209FUL ), /* Superscripts and Subscripts */ + AF_UNIRANGE_REC( 0x20A0UL, 0x20CFUL ), /* Currency Symbols */ + AF_UNIRANGE_REC( 0x2150UL, 0x218FUL ), /* Number Forms */ + AF_UNIRANGE_REC( 0x2460UL, 0x24FFUL ), /* Enclosed Alphanumerics */ + AF_UNIRANGE_REC( 0x2C60UL, 0x2C7FUL ), /* Latin Extended-C */ + AF_UNIRANGE_REC( 0x2E00UL, 0x2E7FUL ), /* Supplemental Punctuation */ + AF_UNIRANGE_REC( 0xA720UL, 0xA7FFUL ), /* Latin Extended-D */ + AF_UNIRANGE_REC( 0xFB00UL, 0xFB06UL ), /* Alphab. Present. Forms (Latin Ligs) */ + AF_UNIRANGE_REC( 0x1D400UL, 0x1D7FFUL ), /* Mathematical Alphanumeric Symbols */ + AF_UNIRANGE_REC( 0x1F100UL, 0x1F1FFUL ), /* Enclosed Alphanumeric Supplement */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_none_uniranges[] = + { + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + +#ifdef AF_CONFIG_OPTION_INDIC + + const AF_Script_UniRangeRec af_beng_uniranges[] = + { + AF_UNIRANGE_REC( 0x0980UL, 0x09FFUL ), /* Bengali */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_deva_uniranges[] = + { + AF_UNIRANGE_REC( 0x0900UL, 0x097FUL ), /* Devanagari */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_gujr_uniranges[] = + { + AF_UNIRANGE_REC( 0x0A80UL, 0x0AFFUL ), /* Gujarati */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_guru_uniranges[] = + { + AF_UNIRANGE_REC( 0x0A00UL, 0x0A7FUL ), /* Gurmukhi */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_knda_uniranges[] = + { + AF_UNIRANGE_REC( 0x0C80UL, 0x0CFFUL ), /* Kannada */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_limb_uniranges[] = + { + AF_UNIRANGE_REC( 0x1900UL, 0x194FUL ), /* Limbu */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_mlym_uniranges[] = + { + AF_UNIRANGE_REC( 0x0D00UL, 0x0D7FUL ), /* Malayalam */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_orya_uniranges[] = + { + AF_UNIRANGE_REC( 0x0B00UL, 0x0B7FUL ), /* Oriya */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_sinh_uniranges[] = + { + AF_UNIRANGE_REC( 0x0D80UL, 0x0DFFUL ), /* Sinhala */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_sund_uniranges[] = + { + AF_UNIRANGE_REC( 0x1B80UL, 0x1BBFUL ), /* Sundanese */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_sylo_uniranges[] = + { + AF_UNIRANGE_REC( 0xA800UL, 0xA82FUL ), /* Syloti Nagri */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_taml_uniranges[] = + { + AF_UNIRANGE_REC( 0x0B80UL, 0x0BFFUL ), /* Tamil */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_telu_uniranges[] = + { + AF_UNIRANGE_REC( 0x0C00UL, 0x0C7FUL ), /* Telugu */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + + const AF_Script_UniRangeRec af_tibt_uniranges[] = + { + AF_UNIRANGE_REC( 0x0F00UL, 0x0FFFUL ), /* Tibetan */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + +#endif /* !AF_CONFIG_OPTION_INDIC */ + +#ifdef AF_CONFIG_OPTION_CJK + + /* this corresponds to Unicode 6.0 */ + + const AF_Script_UniRangeRec af_hani_uniranges[] = + { + AF_UNIRANGE_REC( 0x1100UL, 0x11FFUL ), /* Hangul Jamo */ + AF_UNIRANGE_REC( 0x2E80UL, 0x2EFFUL ), /* CJK Radicals Supplement */ + AF_UNIRANGE_REC( 0x2F00UL, 0x2FDFUL ), /* Kangxi Radicals */ + AF_UNIRANGE_REC( 0x2FF0UL, 0x2FFFUL ), /* Ideographic Description Characters */ + AF_UNIRANGE_REC( 0x3000UL, 0x303FUL ), /* CJK Symbols and Punctuation */ + AF_UNIRANGE_REC( 0x3040UL, 0x309FUL ), /* Hiragana */ + AF_UNIRANGE_REC( 0x30A0UL, 0x30FFUL ), /* Katakana */ + AF_UNIRANGE_REC( 0x3100UL, 0x312FUL ), /* Bopomofo */ + AF_UNIRANGE_REC( 0x3130UL, 0x318FUL ), /* Hangul Compatibility Jamo */ + AF_UNIRANGE_REC( 0x3190UL, 0x319FUL ), /* Kanbun */ + AF_UNIRANGE_REC( 0x31A0UL, 0x31BFUL ), /* Bopomofo Extended */ + AF_UNIRANGE_REC( 0x31C0UL, 0x31EFUL ), /* CJK Strokes */ + AF_UNIRANGE_REC( 0x31F0UL, 0x31FFUL ), /* Katakana Phonetic Extensions */ + AF_UNIRANGE_REC( 0x3200UL, 0x32FFUL ), /* Enclosed CJK Letters and Months */ + AF_UNIRANGE_REC( 0x3300UL, 0x33FFUL ), /* CJK Compatibility */ + AF_UNIRANGE_REC( 0x3400UL, 0x4DBFUL ), /* CJK Unified Ideographs Extension A */ + AF_UNIRANGE_REC( 0x4DC0UL, 0x4DFFUL ), /* Yijing Hexagram Symbols */ + AF_UNIRANGE_REC( 0x4E00UL, 0x9FFFUL ), /* CJK Unified Ideographs */ + AF_UNIRANGE_REC( 0xA960UL, 0xA97FUL ), /* Hangul Jamo Extended-A */ + AF_UNIRANGE_REC( 0xAC00UL, 0xD7AFUL ), /* Hangul Syllables */ + AF_UNIRANGE_REC( 0xD7B0UL, 0xD7FFUL ), /* Hangul Jamo Extended-B */ + AF_UNIRANGE_REC( 0xF900UL, 0xFAFFUL ), /* CJK Compatibility Ideographs */ + AF_UNIRANGE_REC( 0xFE10UL, 0xFE1FUL ), /* Vertical forms */ + AF_UNIRANGE_REC( 0xFE30UL, 0xFE4FUL ), /* CJK Compatibility Forms */ + AF_UNIRANGE_REC( 0xFF00UL, 0xFFEFUL ), /* Halfwidth and Fullwidth Forms */ + AF_UNIRANGE_REC( 0x1B000UL, 0x1B0FFUL ), /* Kana Supplement */ + AF_UNIRANGE_REC( 0x1D300UL, 0x1D35FUL ), /* Tai Xuan Hing Symbols */ + AF_UNIRANGE_REC( 0x1F200UL, 0x1F2FFUL ), /* Enclosed Ideographic Supplement */ + AF_UNIRANGE_REC( 0x20000UL, 0x2A6DFUL ), /* CJK Unified Ideographs Extension B */ + AF_UNIRANGE_REC( 0x2A700UL, 0x2B73FUL ), /* CJK Unified Ideographs Extension C */ + AF_UNIRANGE_REC( 0x2B740UL, 0x2B81FUL ), /* CJK Unified Ideographs Extension D */ + AF_UNIRANGE_REC( 0x2F800UL, 0x2FA1FUL ), /* CJK Compatibility Ideographs Supplement */ + AF_UNIRANGE_REC( 0UL, 0UL ) + }; + +#endif /* !AF_CONFIG_OPTION_CJK */ + +/* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afranges.h b/reactos/lib/3rdparty/freetype/src/autofit/afranges.h new file mode 100644 index 00000000000..fe5b2aa7c15 --- /dev/null +++ b/reactos/lib/3rdparty/freetype/src/autofit/afranges.h @@ -0,0 +1,41 @@ +/***************************************************************************/ +/* */ +/* afranges.h */ +/* */ +/* Auto-fitter Unicode script ranges (specification). */ +/* */ +/* Copyright 2013, 2014 by */ +/* David Turner, Robert Wilhelm, and Werner Lemberg. */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + + +#ifndef __AFRANGES_H__ +#define __AFRANGES_H__ + + +#include "aftypes.h" + + +FT_BEGIN_HEADER + +#undef SCRIPT +#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \ + extern const AF_Script_UniRangeRec af_ ## s ## _uniranges[]; + +#include "afscript.h" + + /* */ + +FT_END_HEADER + +#endif /* __AFRANGES_H__ */ + + +/* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afscript.h b/reactos/lib/3rdparty/freetype/src/autofit/afscript.h index be0169a83cb..ae209322e67 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afscript.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afscript.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter scripts (specification only). */ /* */ -/* Copyright 2013 by */ +/* Copyright 2013, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -20,18 +20,119 @@ /* Define `SCRIPT' as needed. */ - /* Add new scripts here. */ + /* Add new scripts here. The first and second arguments are the */ + /* script name in lowercase and uppercase, respectively, followed */ + /* by a description string. Then comes the corresponding HarfBuzz */ + /* script name tag, followed by a string of standard characters (to */ + /* derive the standard width and height of stems). */ - SCRIPT( cyrl, CYRL, "Cyrillic" ) - SCRIPT( deva, DEVA, "Indic scripts" ) - SCRIPT( dflt, DFLT, "no script" ) - SCRIPT( grek, GREK, "Greek" ) - SCRIPT( hani, HANI, "CJKV ideographs" ) - SCRIPT( hebr, HEBR, "Hebrew" ) - SCRIPT( latn, LATN, "Latin" ) -#ifdef FT_OPTION_AUTOFIT2 - SCRIPT( ltn2, LTN2, "Latin 2" ) -#endif + SCRIPT( cyrl, CYRL, + "Cyrillic", + HB_SCRIPT_CYRILLIC, + 0x43E, 0x41E, 0x0 ) /* оО */ + + SCRIPT( grek, GREK, + "Greek", + HB_SCRIPT_GREEK, + 0x3BF, 0x39F, 0x0 ) /* οΟ */ + + SCRIPT( hebr, HEBR, + "Hebrew", + HB_SCRIPT_HEBREW, + 0x5DD, 0x0, 0x0 ) /* ם */ + + SCRIPT( latn, LATN, + "Latin", + HB_SCRIPT_LATIN, + 'o', 'O', '0' ) + + SCRIPT( none, NONE, + "no script", + HB_SCRIPT_INVALID, + 0x0, 0x0, 0x0 ) + +#ifdef AF_CONFIG_OPTION_INDIC + + SCRIPT( beng, BENG, + "Bengali", + HB_SCRIPT_BENGALI, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( deva, DEVA, + "Devanagari", + HB_SCRIPT_DEVANAGARI, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( gujr, GUJR, + "Gujarati", + HB_SCRIPT_GUJARATI, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( guru, GURU, + "Gurmukhi", + HB_SCRIPT_GURMUKHI, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( knda, KNDA, + "Kannada", + HB_SCRIPT_KANNADA, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( limb, LIMB, + "Limbu", + HB_SCRIPT_LIMBU, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( mlym, MLYM, + "Malayalam", + HB_SCRIPT_MALAYALAM, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( orya, ORYA, + "Oriya", + HB_SCRIPT_ORIYA, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( sinh, SINH, + "Sinhala", + HB_SCRIPT_SINHALA, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( sund, SUND, + "Sundanese", + HB_SCRIPT_SUNDANESE, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( sylo, SYLO, + "Syloti Nagri", + HB_SCRIPT_SYLOTI_NAGRI, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( taml, TAML, + "Tamil", + HB_SCRIPT_TAMIL, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( telu, TELU, + "Telugu", + HB_SCRIPT_TELUGU, + 'o', 0x0, 0x0 ) /* XXX */ + + SCRIPT( tibt, TIBT, + "Tibetan", + HB_SCRIPT_TIBETAN, + 'o', 0x0, 0x0 ) /* XXX */ + +#endif /* AF_CONFIG_OPTION_INDIC */ + +#ifdef AF_CONFIG_OPTION_CJK + + SCRIPT( hani, HANI, + "CJKV ideographs", + HB_SCRIPT_HAN, + 0x7530, 0x56D7, 0x0 ) /* 田囗 */ + +#endif /* AF_CONFIG_OPTION_CJK */ /* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afstyles.h b/reactos/lib/3rdparty/freetype/src/autofit/afstyles.h new file mode 100644 index 00000000000..429da7664ac --- /dev/null +++ b/reactos/lib/3rdparty/freetype/src/autofit/afstyles.h @@ -0,0 +1,150 @@ +/***************************************************************************/ +/* */ +/* afstyles.h */ +/* */ +/* Auto-fitter styles (specification only). */ +/* */ +/* Copyright 2013, 2014 by */ +/* David Turner, Robert Wilhelm, and Werner Lemberg. */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + + + /* The following part can be included multiple times. */ + /* Define `STYLE' as needed. */ + + + /* Add new styles here. The first and second arguments are the */ + /* style name in lowercase and uppercase, respectively, followed */ + /* by a description string. The next arguments are the */ + /* corresponding writing system, script, blue stringset, and */ + /* coverage. */ + /* */ + /* Note that styles using `AF_COVERAGE_DEFAULT' should always */ + /* come after styles with other coverages. */ + /* */ + /* Example: */ + /* */ + /* STYLE( cyrl_dflt, CYRL_DFLT, */ + /* "Cyrillic default style", */ + /* AF_WRITING_SYSTEM_LATIN, */ + /* AF_SCRIPT_CYRL, */ + /* AF_BLUE_STRINGSET_CYRL, */ + /* AF_COVERAGE_DEFAULT ) */ + +#undef STYLE_LATIN +#define STYLE_LATIN( s, S, f, F, ds, df, C ) \ + STYLE( s ## _ ## f, S ## _ ## F, \ + ds " " df " style", \ + AF_WRITING_SYSTEM_LATIN, \ + AF_SCRIPT_ ## S, \ + AF_BLUE_STRINGSET_ ## S, \ + AF_COVERAGE_ ## C ) + +#undef META_STYLE_LATIN +#define META_STYLE_LATIN( s, S, ds ) \ + STYLE_LATIN( s, S, c2cp, C2CP, ds, \ + "petite capticals from capitals", \ + PETITE_CAPITALS_FROM_CAPITALS ) \ + STYLE_LATIN( s, S, c2sc, C2SC, ds, \ + "small capticals from capitals", \ + SMALL_CAPITALS_FROM_CAPITALS ) \ + STYLE_LATIN( s, S, ordn, ORDN, ds, \ + "ordinals", \ + ORDINALS ) \ + STYLE_LATIN( s, S, pcap, PCAP, ds, \ + "petite capitals", \ + PETITE_CAPITALS ) \ + STYLE_LATIN( s, S, sinf, SINF, ds, \ + "scientific inferiors", \ + SCIENTIFIC_INFERIORS ) \ + STYLE_LATIN( s, S, smcp, SMCP, ds, \ + "small capitals", \ + SMALL_CAPITALS ) \ + STYLE_LATIN( s, S, subs, SUBS, ds, \ + "subscript", \ + SUBSCRIPT ) \ + STYLE_LATIN( s, S, sups, SUPS, ds, \ + "superscript", \ + SUPERSCRIPT ) \ + STYLE_LATIN( s, S, titl, TITL, ds, \ + "titling", \ + TITLING ) \ + STYLE_LATIN( s, S, dflt, DFLT, ds, \ + "default", \ + DEFAULT ) + + META_STYLE_LATIN( cyrl, CYRL, "Cyrillic" ) + META_STYLE_LATIN( grek, GREK, "Greek" ) + STYLE( hebr_dflt, HEBR_DFLT, + "Hebrew default style", + AF_WRITING_SYSTEM_LATIN, + AF_SCRIPT_HEBR, + AF_BLUE_STRINGSET_HEBR, + AF_COVERAGE_DEFAULT ) + META_STYLE_LATIN( latn, LATN, "Latin" ) + +#ifdef FT_OPTION_AUTOFIT2 + STYLE( ltn2_dflt, LTN2_DFLT, + "Latin 2 default style", + AF_WRITING_SYSTEM_LATIN2, + AF_SCRIPT_LATN, + AF_BLUE_STRINGSET_LATN, + AF_COVERAGE_DEFAULT ) +#endif + + STYLE( none_dflt, NONE_DFLT, + "no style", + AF_WRITING_SYSTEM_DUMMY, + AF_SCRIPT_NONE, + (AF_Blue_Stringset)0, + AF_COVERAGE_DEFAULT ) + +#ifdef AF_CONFIG_OPTION_INDIC + + /* no blue stringset support for the Indic writing system yet */ +#undef STYLE_DEFAULT_INDIC +#define STYLE_DEFAULT_INDIC( s, S, d ) \ + STYLE( s ## _dflt, S ## _DFLT, \ + d " default style", \ + AF_WRITING_SYSTEM_INDIC, \ + AF_SCRIPT_ ## S, \ + (AF_Blue_Stringset)0, \ + AF_COVERAGE_DEFAULT ) + + STYLE_DEFAULT_INDIC( beng, BENG, "Bengali" ) + STYLE_DEFAULT_INDIC( deva, DEVA, "Devanagari" ) + STYLE_DEFAULT_INDIC( gujr, GUJR, "Gujarati" ) + STYLE_DEFAULT_INDIC( guru, GURU, "Gurmukhi" ) + STYLE_DEFAULT_INDIC( knda, KNDA, "Kannada" ) + STYLE_DEFAULT_INDIC( limb, LIMB, "Limbu" ) + STYLE_DEFAULT_INDIC( mlym, MLYM, "Malayalam" ) + STYLE_DEFAULT_INDIC( orya, ORYA, "Oriya" ) + STYLE_DEFAULT_INDIC( sinh, SINH, "Sinhala" ) + STYLE_DEFAULT_INDIC( sund, SUND, "Sundanese" ) + STYLE_DEFAULT_INDIC( sylo, SYLO, "Syloti Nagri" ) + STYLE_DEFAULT_INDIC( taml, TAML, "Tamil" ) + STYLE_DEFAULT_INDIC( telu, TELU, "Telugu" ) + STYLE_DEFAULT_INDIC( tibt, TIBT, "Tibetan" ) + +#endif /* AF_CONFIG_OPTION_INDIC */ + +#ifdef AF_CONFIG_OPTION_CJK + + STYLE( hani_dflt, HANI_DFLT, + "CJKV ideographs default style", + AF_WRITING_SYSTEM_CJK, + AF_SCRIPT_HANI, + AF_BLUE_STRINGSET_HANI, + AF_COVERAGE_DEFAULT ) + +#endif /* AF_CONFIG_OPTION_CJK */ + + +/* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/aftypes.h b/reactos/lib/3rdparty/freetype/src/autofit/aftypes.h index cda1f896595..61badd1b8d0 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/aftypes.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/aftypes.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter types (specification only). */ /* */ -/* Copyright 2003-2009, 2011-2013 by */ +/* Copyright 2003-2009, 2011-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -20,7 +20,7 @@ * * The auto-fitter is a complete rewrite of the old auto-hinter. * Its main feature is the ability to differentiate between different - * writing systems in order to apply script-specific rules. + * writing systems and scripts in order to apply specific rules. * * The code has also been compartmentized into several entities that * should make algorithmic experimentation easier than with the old @@ -197,55 +197,31 @@ extern void* _af_debug_hints; (a)->y_delta == (b)->y_delta ) - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** S C R I P T M E T R I C S *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* This is the main structure which combines writing systems and script */ - /* data (for a given face object, see below). */ - - typedef struct AF_WritingSystemClassRec_ const* AF_WritingSystemClass; - typedef struct AF_ScriptClassRec_ const* AF_ScriptClass; - typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals; - - typedef struct AF_ScriptMetricsRec_ - { - AF_ScriptClass script_class; - AF_ScalerRec scaler; - FT_Bool digits_have_same_width; - - AF_FaceGlobals globals; /* to access properties */ - - } AF_ScriptMetricsRec, *AF_ScriptMetrics; - + typedef struct AF_StyleMetricsRec_* AF_StyleMetrics; /* This function parses an FT_Face to compute global metrics for - * a specific script. + * a specific style. */ typedef FT_Error - (*AF_Script_InitMetricsFunc)( AF_ScriptMetrics metrics, - FT_Face face ); + (*AF_WritingSystem_InitMetricsFunc)( AF_StyleMetrics metrics, + FT_Face face ); typedef void - (*AF_Script_ScaleMetricsFunc)( AF_ScriptMetrics metrics, - AF_Scaler scaler ); + (*AF_WritingSystem_ScaleMetricsFunc)( AF_StyleMetrics metrics, + AF_Scaler scaler ); typedef void - (*AF_Script_DoneMetricsFunc)( AF_ScriptMetrics metrics ); + (*AF_WritingSystem_DoneMetricsFunc)( AF_StyleMetrics metrics ); typedef FT_Error - (*AF_Script_InitHintsFunc)( AF_GlyphHints hints, - AF_ScriptMetrics metrics ); + (*AF_WritingSystem_InitHintsFunc)( AF_GlyphHints hints, + AF_StyleMetrics metrics ); typedef void - (*AF_Script_ApplyHintsFunc)( AF_GlyphHints hints, - FT_Outline* outline, - AF_ScriptMetrics metrics ); + (*AF_WritingSystem_ApplyHintsFunc)( AF_GlyphHints hints, + FT_Outline* outline, + AF_StyleMetrics metrics ); /*************************************************************************/ @@ -257,14 +233,14 @@ extern void* _af_debug_hints; /*************************************************************************/ /* - * In FreeType, a writing system consists of multiple scripts which can - * be handled similarly *in a typographical way*; the relationship is not - * based on history. For example, both the Greek and the unrelated + * For the auto-hinter, a writing system consists of multiple scripts that + * can be handled similarly *in a typographical way*; the relationship is + * not based on history. For example, both the Greek and the unrelated * Armenian scripts share the same features like ascender, descender, * x-height, etc. Essentially, a writing system is covered by a * submodule of the auto-fitter; it contains * - * - a specific global analyzer which computes global metrics specific to + * - a specific global analyzer that computes global metrics specific to * the script (based on script-specific characters to identify ascender * height, x-height, etc.), * @@ -297,16 +273,18 @@ extern void* _af_debug_hints; { AF_WritingSystem writing_system; - FT_Offset script_metrics_size; - AF_Script_InitMetricsFunc script_metrics_init; - AF_Script_ScaleMetricsFunc script_metrics_scale; - AF_Script_DoneMetricsFunc script_metrics_done; + FT_Offset style_metrics_size; + AF_WritingSystem_InitMetricsFunc style_metrics_init; + AF_WritingSystem_ScaleMetricsFunc style_metrics_scale; + AF_WritingSystem_DoneMetricsFunc style_metrics_done; - AF_Script_InitHintsFunc script_hints_init; - AF_Script_ApplyHintsFunc script_hints_apply; + AF_WritingSystem_InitHintsFunc style_hints_init; + AF_WritingSystem_ApplyHintsFunc style_hints_apply; } AF_WritingSystemClassRec; + typedef const AF_WritingSystemClassRec* AF_WritingSystemClass; + /*************************************************************************/ /*************************************************************************/ @@ -317,15 +295,15 @@ extern void* _af_debug_hints; /*************************************************************************/ /* - * Each script is associated with a set of Unicode ranges which gets used - * to test whether the font face supports the script. It also references - * the writing system it belongs to. + * Each script is associated with a set of Unicode ranges that gets used + * to test whether the font face supports the script. * - * We use four-letter script tags from the OpenType specification. + * We use four-letter script tags from the OpenType specification, + * extended by `NONE', which indicates `no script'. */ #undef SCRIPT -#define SCRIPT( s, S, d ) \ +#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \ AF_SCRIPT_ ## S, /* The list of known scripts. */ @@ -353,15 +331,147 @@ extern void* _af_debug_hints; typedef struct AF_ScriptClassRec_ { - AF_Script script; - AF_Blue_Stringset blue_stringset; - AF_WritingSystem writing_system; + AF_Script script; AF_Script_UniRange script_uni_ranges; /* last must be { 0, 0 } */ - FT_UInt32 standard_char; /* for default width and height */ + + FT_UInt32 standard_char1; /* for default width and height */ + FT_UInt32 standard_char2; /* ditto */ + FT_UInt32 standard_char3; /* ditto */ } AF_ScriptClassRec; + typedef const AF_ScriptClassRec* AF_ScriptClass; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** C O V E R A G E S *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* + * Usually, a font contains more glyphs than can be addressed by its + * character map. + * + * In the PostScript font world, encoding vectors specific to a given + * task are used to select such glyphs, and these glyphs can be often + * recognized by having a suffix in its glyph names. For example, a + * superscript glyph `A' might be called `A.sup'. Unfortunately, this + * naming scheme is not standardized and thus unusable for us. + * + * In the OpenType world, a better solution was invented, namely + * `features', which cleanly separate a character's input encoding from + * the corresponding glyph's appearance, and which don't use glyph names + * at all. For our purposes, and slightly generalized, an OpenType + * feature is a name of a mapping that maps character codes to + * non-standard glyph indices (features get used for other things also). + * For example, the `sups' feature provides superscript glyphs, thus + * mapping character codes like `A' or `B' to superscript glyph + * representation forms. How this mapping happens is completely + * uninteresting to us. + * + * For the auto-hinter, a `coverage' represents all glyphs of an OpenType + * feature collected in a set (as listed below) that can be hinted + * together. To continue the above example, superscript glyphs must not + * be hinted together with normal glyphs because the blue zones + * completely differ. + * + * Note that FreeType itself doesn't compute coverages; it only provides + * the glyphs addressable by the default Unicode character map. Instead, + * we use the HarfBuzz library (if available), which has many functions + * exactly for this purpose. + * + * AF_COVERAGE_DEFAULT is special: It should cover everything that isn't + * listed separately (including the glyphs addressable by the character + * map). In case HarfBuzz isn't available, it exactly covers the glyphs + * addressable by the character map. + * + */ + +#undef COVERAGE +#define COVERAGE( name, NAME, description, \ + tag1, tag2, tag3, tag4 ) \ + AF_COVERAGE_ ## NAME, + + + typedef enum AF_Coverage_ + { +#include "afcover.h" + + AF_COVERAGE_DEFAULT + + } AF_Coverage; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** S T Y L E S *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* + * The topmost structure for modelling the auto-hinter glyph input data + * is a `style class', grouping everything together. + */ + +#undef STYLE +#define STYLE( s, S, d, ws, sc, ss, c ) \ + AF_STYLE_ ## S, + + /* The list of known styles. */ + typedef enum AF_Style_ + { + +#include "afstyles.h" + + AF_STYLE_MAX /* do not remove */ + + } AF_Style; + + + typedef struct AF_StyleClassRec_ + { + AF_Style style; + + AF_WritingSystem writing_system; + AF_Script script; + AF_Blue_Stringset blue_stringset; + AF_Coverage coverage; + + } AF_StyleClassRec; + + typedef const AF_StyleClassRec* AF_StyleClass; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** S T Y L E M E T R I C S *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals; + + /* This is the main structure that combines everything. Autofit modules */ + /* specific to writing systems derive their structures from it, for */ + /* example `AF_LatinMetrics'. */ + + typedef struct AF_StyleMetricsRec_ + { + AF_StyleClass style_class; + AF_ScalerRec scaler; + FT_Bool digits_have_same_width; + + AF_FaceGlobals globals; /* to access properties */ + + } AF_StyleMetricsRec; + /* Declare and define vtables for classes */ #ifndef FT_CONFIG_OPTION_PIC @@ -401,19 +511,41 @@ extern void* _af_debug_hints; #define AF_DEFINE_SCRIPT_CLASS( \ script_class, \ - script_, \ - blue_stringset_, \ - writing_system_, \ + script, \ ranges, \ - std_char ) \ + std_char1, \ + std_char2, \ + std_char3 ) \ FT_CALLBACK_TABLE_DEF \ const AF_ScriptClassRec script_class = \ { \ - script_, \ - blue_stringset_, \ - writing_system_, \ + script, \ ranges, \ - std_char \ + std_char1, \ + std_char2, \ + std_char3 \ + }; + + +#define AF_DECLARE_STYLE_CLASS( style_class ) \ + FT_CALLBACK_TABLE const AF_StyleClassRec \ + style_class; + +#define AF_DEFINE_STYLE_CLASS( \ + style_class, \ + style, \ + writing_system, \ + script, \ + blue_stringset, \ + coverage ) \ + FT_CALLBACK_TABLE_DEF \ + const AF_StyleClassRec style_class = \ + { \ + style, \ + writing_system, \ + script, \ + blue_stringset, \ + coverage \ }; #else /* FT_CONFIG_OPTION_PIC */ @@ -434,16 +566,16 @@ extern void* _af_debug_hints; FT_LOCAL_DEF( void ) \ FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec* ac ) \ { \ - ac->writing_system = system; \ + ac->writing_system = system; \ \ - ac->script_metrics_size = m_size; \ + ac->style_metrics_size = m_size; \ \ - ac->script_metrics_init = m_init; \ - ac->script_metrics_scale = m_scale; \ - ac->script_metrics_done = m_done; \ + ac->style_metrics_init = m_init; \ + ac->style_metrics_scale = m_scale; \ + ac->style_metrics_done = m_done; \ \ - ac->script_hints_init = h_init; \ - ac->script_hints_apply = h_apply; \ + ac->style_hints_init = h_init; \ + ac->style_hints_apply = h_apply; \ } @@ -454,18 +586,40 @@ extern void* _af_debug_hints; #define AF_DEFINE_SCRIPT_CLASS( \ script_class, \ script_, \ - blue_string_set_, \ - writing_system_, \ ranges, \ - std_char ) \ + std_char1, \ + std_char2, \ + std_char3 ) \ FT_LOCAL_DEF( void ) \ FT_Init_Class_ ## script_class( AF_ScriptClassRec* ac ) \ { \ ac->script = script_; \ - ac->blue_stringset = blue_stringset_; \ - ac->writing_system = writing_system_; \ ac->script_uni_ranges = ranges; \ - ac->standard_char = std_char; \ + ac->standard_char1 = std_char1; \ + ac->standard_char2 = std_char2; \ + ac->standard_char3 = std_char3; \ + } + + +#define AF_DECLARE_STYLE_CLASS( style_class ) \ + FT_LOCAL( void ) \ + FT_Init_Class_ ## style_class( AF_StyleClassRec* ac ); + +#define AF_DEFINE_STYLE_CLASS( \ + style_class, \ + style_, \ + writing_system_, \ + script_, \ + blue_stringset_, \ + coverage_ ) \ + FT_LOCAL_DEF( void ) \ + FT_Init_Class_ ## style_class( AF_StyleClassRec* ac ) \ + { \ + ac->style = style_; \ + ac->writing_system = writing_system_; \ + ac->script = script_; \ + ac->blue_stringset = blue_stringset_; \ + ac->coverage = coverage_; \ } #endif /* FT_CONFIG_OPTION_PIC */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/afwrtsys.h b/reactos/lib/3rdparty/freetype/src/autofit/afwrtsys.h index 602c558842e..8aa2ed9e6b8 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/afwrtsys.h +++ b/reactos/lib/3rdparty/freetype/src/autofit/afwrtsys.h @@ -37,7 +37,8 @@ /* Define `WRITING_SYSTEM' as needed. */ - /* Add new writing systems here. */ + /* Add new writing systems here. The arguments are the writing system */ + /* name in lowercase and uppercase, respectively. */ WRITING_SYSTEM( dummy, DUMMY ) WRITING_SYSTEM( latin, LATIN ) diff --git a/reactos/lib/3rdparty/freetype/src/autofit/autofit.c b/reactos/lib/3rdparty/freetype/src/autofit/autofit.c index b23374a23a1..e2b9934e4bb 100644 --- a/reactos/lib/3rdparty/freetype/src/autofit/autofit.c +++ b/reactos/lib/3rdparty/freetype/src/autofit/autofit.c @@ -24,6 +24,8 @@ #include "afglobal.c" #include "afhints.c" +#include "afranges.c" + #include "afdummy.c" #include "aflatin.c" #ifdef FT_OPTION_AUTOFIT2 @@ -32,6 +34,8 @@ #include "afcjk.c" #include "afindic.c" +#include "hbshim.c" + #include "afloader.c" #include "afmodule.c" diff --git a/reactos/lib/3rdparty/freetype/src/autofit/hbshim.c b/reactos/lib/3rdparty/freetype/src/autofit/hbshim.c new file mode 100644 index 00000000000..11fb743e8be --- /dev/null +++ b/reactos/lib/3rdparty/freetype/src/autofit/hbshim.c @@ -0,0 +1,531 @@ +/***************************************************************************/ +/* */ +/* hbshim.c */ +/* */ +/* HarfBuzz interface for accessing OpenType features (body). */ +/* */ +/* Copyright 2013, 2014 by */ +/* David Turner, Robert Wilhelm, and Werner Lemberg. */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + + +#include <ft2build.h> +#include FT_FREETYPE_H +#include "afglobal.h" +#include "aftypes.h" +#include "hbshim.h" + +#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ + + + /*************************************************************************/ + /* */ + /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ + /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ + /* messages during execution. */ + /* */ +#undef FT_COMPONENT +#define FT_COMPONENT trace_afharfbuzz + + + /* + * We use `sets' (in the HarfBuzz sense, which comes quite near to the + * usual mathematical meaning) to manage both lookups and glyph indices. + * + * 1. For each coverage, collect lookup IDs in a set. Note that an + * auto-hinter `coverage' is represented by one `feature', and a + * feature consists of an arbitrary number of (font specific) `lookup's + * that actually do the mapping job. Please check the OpenType + * specification for more details on features and lookups. + * + * 2. Create glyph ID sets from the corresponding lookup sets. + * + * 3. The glyph set corresponding to AF_COVERAGE_DEFAULT is computed + * with all lookups specific to the OpenType script activated. It + * relies on the order of AF_DEFINE_STYLE_CLASS entries so that + * special coverages (like `oldstyle figures') don't get overwritten. + * + */ + + + /* load coverage tags */ +#undef COVERAGE +#define COVERAGE( name, NAME, description, \ + tag1, tag2, tag3, tag4 ) \ + static const hb_tag_t name ## _coverage[] = \ + { \ + HB_TAG( tag1, tag2, tag3, tag4 ), \ + HB_TAG_NONE \ + }; + + +#include "afcover.h" + + + /* define mapping between coverage tags and AF_Coverage */ +#undef COVERAGE +#define COVERAGE( name, NAME, description, \ + tag1, tag2, tag3, tag4 ) \ + name ## _coverage, + + + static const hb_tag_t* coverages[] = + { +#include "afcover.h" + + NULL /* AF_COVERAGE_DEFAULT */ + }; + + + /* load HarfBuzz script tags */ +#undef SCRIPT +#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) h, + + + static const hb_script_t scripts[] = + { +#include "afscript.h" + }; + + + FT_Error + af_get_coverage( AF_FaceGlobals globals, + AF_StyleClass style_class, + FT_Byte* gstyles ) + { + hb_face_t* face; + + hb_set_t* gsub_lookups; /* GSUB lookups for a given script */ + hb_set_t* gsub_glyphs; /* glyphs covered by GSUB lookups */ + hb_set_t* gpos_lookups; /* GPOS lookups for a given script */ + hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */ + + hb_script_t script; + const hb_tag_t* coverage_tags; + hb_tag_t script_tags[] = { HB_TAG_NONE, + HB_TAG_NONE, + HB_TAG_NONE, + HB_TAG_NONE }; + + hb_codepoint_t idx; +#ifdef FT_DEBUG_LEVEL_TRACE + int count; +#endif + + + if ( !globals || !style_class || !gstyles ) + return FT_THROW( Invalid_Argument ); + + face = hb_font_get_face( globals->hb_font ); + + gsub_lookups = hb_set_create(); + gsub_glyphs = hb_set_create(); + gpos_lookups = hb_set_create(); + gpos_glyphs = hb_set_create(); + + coverage_tags = coverages[style_class->coverage]; + script = scripts[style_class->script]; + + /* Convert a HarfBuzz script tag into the corresponding OpenType */ + /* tag or tags -- some Indic scripts like Devanagari have an old */ + /* and a new set of features. */ + hb_ot_tags_from_script( script, + &script_tags[0], + &script_tags[1] ); + + /* `hb_ot_tags_from_script' usually returns HB_OT_TAG_DEFAULT_SCRIPT */ + /* as the second tag. We change that to HB_TAG_NONE except for the */ + /* default script. */ + if ( style_class->script == globals->module->default_script && + style_class->coverage == AF_COVERAGE_DEFAULT ) + { + if ( script_tags[0] == HB_TAG_NONE ) + script_tags[0] = HB_OT_TAG_DEFAULT_SCRIPT; + else + { + if ( script_tags[1] == HB_TAG_NONE ) + script_tags[1] = HB_OT_TAG_DEFAULT_SCRIPT; + else if ( script_tags[1] != HB_OT_TAG_DEFAULT_SCRIPT ) + script_tags[2] = HB_OT_TAG_DEFAULT_SCRIPT; + } + } + else + { + if ( script_tags[1] == HB_OT_TAG_DEFAULT_SCRIPT ) + script_tags[1] = HB_TAG_NONE; + } + + hb_ot_layout_collect_lookups( face, + HB_OT_TAG_GSUB, + script_tags, + NULL, + coverage_tags, + gsub_lookups ); + + if ( hb_set_is_empty( gsub_lookups ) ) + goto Exit; /* nothing to do */ + + hb_ot_layout_collect_lookups( face, + HB_OT_TAG_GPOS, + script_tags, + NULL, + coverage_tags, + gpos_lookups ); + + FT_TRACE4(( "GSUB lookups (style `%s'):\n" + " ", + af_style_names[style_class->style] )); + +#ifdef FT_DEBUG_LEVEL_TRACE + count = 0; +#endif + + for ( idx = -1; hb_set_next( gsub_lookups, &idx ); ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE4(( " %d", idx )); + count++; +#endif + + /* get output coverage of GSUB feature */ + hb_ot_layout_lookup_collect_glyphs( face, + HB_OT_TAG_GSUB, + idx, + NULL, + NULL, + NULL, + gsub_glyphs ); + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !count ) + FT_TRACE4(( " (none)" )); + FT_TRACE4(( "\n\n" )); +#endif + + FT_TRACE4(( "GPOS lookups (style `%s'):\n" + " ", + af_style_names[style_class->style] )); + +#ifdef FT_DEBUG_LEVEL_TRACE + count = 0; +#endif + + for ( idx = -1; hb_set_next( gpos_lookups, &idx ); ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE4(( " %d", idx )); + count++; +#endif + + /* get input coverage of GPOS feature */ + hb_ot_layout_lookup_collect_glyphs( face, + HB_OT_TAG_GPOS, + idx, + NULL, + gpos_glyphs, + NULL, + NULL ); + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !count ) + FT_TRACE4(( " (none)" )); + FT_TRACE4(( "\n\n" )); +#endif + + /* + * We now check whether we can construct blue zones, using glyphs + * covered by the feature only. In case there is not a single zone + * (this is, not a single character is covered), we skip this coverage. + * + */ + { + AF_Blue_Stringset bss = style_class->blue_stringset; + const AF_Blue_StringRec* bs = &af_blue_stringsets[bss]; + + FT_Bool found = 0; + + + for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ ) + { + const char* p = &af_blue_strings[bs->string]; + + + while ( *p ) + { + hb_codepoint_t ch; + + + GET_UTF8_CHAR( ch, p ); + + for ( idx = -1; hb_set_next( gsub_lookups, &idx ); ) + { + hb_codepoint_t gidx = FT_Get_Char_Index( globals->face, ch ); + + + if ( hb_ot_layout_lookup_would_substitute( face, idx, + &gidx, 1, 1 ) ) + { + found = 1; + break; + } + } + } + } + + if ( !found ) + { + FT_TRACE4(( " no blue characters found; style skipped\n" )); + goto Exit; + } + } + + /* + * Various OpenType features might use the same glyphs at different + * vertical positions; for example, superscript and subscript glyphs + * could be the same. However, the auto-hinter is completely + * agnostic of OpenType features after the feature analysis has been + * completed: The engine then simply receives a glyph index and returns a + * hinted and usually rendered glyph. + * + * Consider the superscript feature of font `pala.ttf': Some of the + * glyphs are `real', this is, they have a zero vertical offset, but + * most of them are small caps glyphs shifted up to the superscript + * position (this is, the `sups' feature is present in both the GSUB and + * GPOS tables). The code for blue zones computation actually uses a + * feature's y offset so that the `real' glyphs get correct hints. But + * later on it is impossible to decide whether a glyph index belongs to, + * say, the small caps or superscript feature. + * + * For this reason, we don't assign a style to a glyph if the current + * feature covers the glyph in both the GSUB and the GPOS tables. This + * is quite a broad condition, assuming that + * + * (a) glyphs that get used in multiple features are present in a + * feature without vertical shift, + * + * and + * + * (b) a feature's GPOS data really moves the glyph vertically. + * + * Not fulfilling condition (a) makes a font larger; it would also + * reduce the number of glyphs that could be addressed directly without + * using OpenType features, so this assumption is rather strong. + * + * Condition (b) is much weaker, and there might be glyphs which get + * missed. However, the OpenType features we are going to handle are + * primarily located in GSUB, and HarfBuzz doesn't provide an API to + * directly get the necessary information from the GPOS table. A + * possible solution might be to directly parse the GPOS table to find + * out whether a glyph gets shifted vertically, but this is something I + * would like to avoid if not really necessary. + * + */ + hb_set_subtract( gsub_glyphs, gpos_glyphs ); + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE4(( " glyphs without GPOS data (`*' means already assigned)" )); + count = 0; +#endif + + for ( idx = -1; hb_set_next( gsub_glyphs, &idx ); ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !( count % 10 ) ) + FT_TRACE4(( "\n" + " " )); + + FT_TRACE4(( " %d", idx )); + count++; +#endif + + if ( gstyles[idx] == AF_STYLE_UNASSIGNED ) + gstyles[idx] = (FT_Byte)style_class->style; +#ifdef FT_DEBUG_LEVEL_TRACE + else + FT_TRACE4(( "*" )); +#endif + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !count ) + FT_TRACE4(( "\n" + " (none)" )); + FT_TRACE4(( "\n\n" )); +#endif + + Exit: + hb_set_destroy( gsub_lookups ); + hb_set_destroy( gsub_glyphs ); + hb_set_destroy( gpos_lookups ); + hb_set_destroy( gpos_glyphs ); + + return FT_Err_Ok; + } + + + /* construct HarfBuzz features */ +#undef COVERAGE +#define COVERAGE( name, NAME, description, \ + tag1, tag2, tag3, tag4 ) \ + static const hb_feature_t name ## _feature[] = \ + { \ + { \ + HB_TAG( tag1, tag2, tag3, tag4 ), \ + 1, 0, (unsigned int)-1 \ + } \ + }; + + +#include "afcover.h" + + + /* define mapping between HarfBuzz features and AF_Coverage */ +#undef COVERAGE +#define COVERAGE( name, NAME, description, \ + tag1, tag2, tag3, tag4 ) \ + name ## _feature, + + + static const hb_feature_t* features[] = + { +#include "afcover.h" + + NULL /* AF_COVERAGE_DEFAULT */ + }; + + + FT_Error + af_get_char_index( AF_StyleMetrics metrics, + FT_ULong charcode, + FT_ULong *codepoint, + FT_Long *y_offset ) + { + AF_StyleClass style_class; + + const hb_feature_t* feature; + + FT_ULong in_idx, out_idx; + + + if ( !metrics ) + return FT_THROW( Invalid_Argument ); + + in_idx = FT_Get_Char_Index( metrics->globals->face, charcode ); + + style_class = metrics->style_class; + + feature = features[style_class->coverage]; + + if ( feature ) + { + FT_UInt upem = metrics->globals->face->units_per_EM; + + hb_font_t* font = metrics->globals->hb_font; + hb_buffer_t* buf = hb_buffer_create(); + + uint32_t c = (uint32_t)charcode; + + hb_glyph_info_t* ginfo; + hb_glyph_position_t* gpos; + unsigned int gcount; + + + /* we shape at a size of units per EM; this means font units */ + hb_font_set_scale( font, upem, upem ); + + /* XXX: is this sufficient for a single character of any script? */ + hb_buffer_set_direction( buf, HB_DIRECTION_LTR ); + hb_buffer_set_script( buf, scripts[style_class->script] ); + + /* we add one character to `buf' ... */ + hb_buffer_add_utf32( buf, &c, 1, 0, 1 ); + + /* ... and apply one feature */ + hb_shape( font, buf, feature, 1 ); + + ginfo = hb_buffer_get_glyph_infos( buf, &gcount ); + gpos = hb_buffer_get_glyph_positions( buf, &gcount ); + + out_idx = ginfo[0].codepoint; + + /* getting the same index indicates no substitution, */ + /* which means that the glyph isn't available in the feature */ + if ( in_idx == out_idx ) + { + *codepoint = 0; + *y_offset = 0; + } + else + { + *codepoint = out_idx; + *y_offset = gpos[0].y_offset; + } + + hb_buffer_destroy( buf ); + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( gcount > 1 ) + FT_TRACE1(( "af_get_char_index:" + " input character mapped to multiple glyphs\n" )); +#endif + } + else + { + *codepoint = in_idx; + *y_offset = 0; + } + + return FT_Err_Ok; + } + + +#else /* !FT_CONFIG_OPTION_USE_HARFBUZZ */ + + + FT_Error + af_get_coverage( AF_FaceGlobals globals, + AF_StyleClass style_class, + FT_Byte* gstyles ) + { + FT_UNUSED( globals ); + FT_UNUSED( style_class ); + FT_UNUSED( gstyles ); + + return FT_Err_Ok; + } + + + FT_Error + af_get_char_index( AF_StyleMetrics metrics, + FT_ULong charcode, + FT_ULong *codepoint, + FT_Long *y_offset ) + { + FT_Face face; + + + if ( !metrics ) + return FT_THROW( Invalid_Argument ); + + face = metrics->globals->face; + + *codepoint = FT_Get_Char_Index( face, charcode ); + *y_offset = 0; + + return FT_Err_Ok; + } + + +#endif /* !FT_CONFIG_OPTION_USE_HARFBUZZ */ + + +/* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/hbshim.h b/reactos/lib/3rdparty/freetype/src/autofit/hbshim.h new file mode 100644 index 00000000000..02f1513f67d --- /dev/null +++ b/reactos/lib/3rdparty/freetype/src/autofit/hbshim.h @@ -0,0 +1,56 @@ +/***************************************************************************/ +/* */ +/* hbshim.h */ +/* */ +/* HarfBuzz interface for accessing OpenType features (specification). */ +/* */ +/* Copyright 2013 by */ +/* David Turner, Robert Wilhelm, and Werner Lemberg. */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + + +#ifndef __HBSHIM_H__ +#define __HBSHIM_H__ + + +#include <ft2build.h> +#include FT_FREETYPE_H + + +#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ + +#include <hb.h> +#include <hb-ot.h> +#include <hb-ft.h> + +#endif + + +FT_BEGIN_HEADER + + FT_Error + af_get_coverage( AF_FaceGlobals globals, + AF_StyleClass style_class, + FT_Byte* gstyles ); + + FT_Error + af_get_char_index( AF_StyleMetrics metrics, + FT_ULong charcode, + FT_ULong *codepoint, + FT_Long *y_offset ); + + /* */ + +FT_END_HEADER + +#endif /* __HBSHIM_H__ */ + + +/* END */ diff --git a/reactos/lib/3rdparty/freetype/src/autofit/module.mk b/reactos/lib/3rdparty/freetype/src/autofit/module.mk deleted file mode 100644 index 6ec60912ab7..00000000000 --- a/reactos/lib/3rdparty/freetype/src/autofit/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 auto-fitter module definition -# - - -# Copyright 2003, 2004, 2005, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += AUTOFIT_MODULE - -define AUTOFIT_MODULE -$(OPEN_DRIVER) FT_Module_Class, autofit_module_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)autofit $(ECHO_DRIVER_DESC)automatic hinting module$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/autofit/rules.mk b/reactos/lib/3rdparty/freetype/src/autofit/rules.mk deleted file mode 100644 index 745adab25d7..00000000000 --- a/reactos/lib/3rdparty/freetype/src/autofit/rules.mk +++ /dev/null @@ -1,82 +0,0 @@ -# -# FreeType 2 auto-fitter module configuration rules -# - - -# Copyright 2003-2007, 2011, 2013 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# AUTOF driver directory -# -AUTOF_DIR := $(SRC_DIR)/autofit - - -# compilation flags for the driver -# -AUTOF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(AUTOF_DIR)) - - -# AUTOF driver sources (i.e., C files) -# -AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.c \ - $(AUTOF_DIR)/afblue.c \ - $(AUTOF_DIR)/afcjk.c \ - $(AUTOF_DIR)/afdummy.c \ - $(AUTOF_DIR)/afglobal.c \ - $(AUTOF_DIR)/afhints.c \ - $(AUTOF_DIR)/afindic.c \ - $(AUTOF_DIR)/aflatin.c \ - $(AUTOF_DIR)/afloader.c \ - $(AUTOF_DIR)/afmodule.c \ - $(AUTOF_DIR)/afpic.c \ - $(AUTOF_DIR)/afwarp.c - -# AUTOF driver headers -# -AUTOF_DRV_H := $(AUTOF_DRV_SRC:%c=%h) \ - $(AUTOF_DIR)/aferrors.h \ - $(AUTOF_DIR)/afscript.h \ - $(AUTOF_DIR)/aftypes.h \ - $(AUTOF_DIR)/afwrtsys.h - - -# AUTOF driver object(s) -# -# AUTOF_DRV_OBJ_M is used during `multi' builds. -# AUTOF_DRV_OBJ_S is used during `single' builds. -# -AUTOF_DRV_OBJ_M := $(AUTOF_DRV_SRC:$(AUTOF_DIR)/%.c=$(OBJ_DIR)/%.$O) -AUTOF_DRV_OBJ_S := $(OBJ_DIR)/autofit.$O - -# AUTOF driver source file for single build -# -AUTOF_DRV_SRC_S := $(AUTOF_DIR)/autofit.c - - -# AUTOF driver - single object -# -$(AUTOF_DRV_OBJ_S): $(AUTOF_DRV_SRC_S) $(AUTOF_DRV_SRC) \ - $(FREETYPE_H) $(AUTOF_DRV_H) - $(AUTOF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(AUTOF_DRV_SRC_S)) - - -# AUTOF driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(AUTOF_DIR)/%.c $(FREETYPE_H) $(AUTOF_DRV_H) - $(AUTOF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(AUTOF_DRV_OBJ_S) -DRV_OBJS_M += $(AUTOF_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/base/basepic.c b/reactos/lib/3rdparty/freetype/src/base/basepic.c index 0af770ebc29..aeb6fd57770 100644 --- a/reactos/lib/3rdparty/freetype/src/base/basepic.c +++ b/reactos/lib/3rdparty/freetype/src/base/basepic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for base. */ /* */ -/* Copyright 2009, 2012 by */ +/* Copyright 2009, 2012, 2013 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -35,7 +35,7 @@ /* forward declaration of PIC init function from ftrfork.c */ /* (not modularized) */ void - FT_Init_Table_raccess_guess_table( ft_raccess_guess_rec* record ); + FT_Init_Table_ft_raccess_guess_table( ft_raccess_guess_rec* record ); #endif /* forward declaration of PIC init functions from ftinit.c */ @@ -92,7 +92,7 @@ FT_Init_Class_ft_bitmap_glyph_class( &container->ft_bitmap_glyph_class ); #ifdef FT_CONFIG_OPTION_MAC_FONTS - FT_Init_Table_raccess_guess_table( + FT_Init_Table_ft_raccess_guess_table( (ft_raccess_guess_rec*)&container->ft_raccess_guess_table ); #endif diff --git a/reactos/lib/3rdparty/freetype/src/base/ftbitmap.c b/reactos/lib/3rdparty/freetype/src/base/ftbitmap.c index ad8a10044f2..a7460439f33 100644 --- a/reactos/lib/3rdparty/freetype/src/base/ftbitmap.c +++ b/reactos/lib/3rdparty/freetype/src/base/ftbitmap.c @@ -4,7 +4,7 @@ /* */ /* FreeType utility functions for bitmaps (body). */ /* */ -/* Copyright 2004-2009, 2011, 2013 by */ +/* Copyright 2004-2009, 2011, 2013, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -375,7 +375,7 @@ } - FT_Byte + static FT_Byte ft_gray_for_premultiplied_srgb_bgra( const FT_Byte* bgra ) { FT_Long a = bgra[3]; diff --git a/reactos/lib/3rdparty/freetype/src/base/ftcalc.c b/reactos/lib/3rdparty/freetype/src/base/ftcalc.c index b23b4d44a46..6e655832f7b 100644 --- a/reactos/lib/3rdparty/freetype/src/base/ftcalc.c +++ b/reactos/lib/3rdparty/freetype/src/base/ftcalc.c @@ -4,7 +4,7 @@ /* */ /* Arithmetic computations (body). */ /* */ -/* Copyright 1996-2006, 2008, 2012-2013 by */ +/* Copyright 1996-2006, 2008, 2012-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -128,7 +128,7 @@ } if ( z >= ( 1L << 1 ) ) { - z >>= 1; + /* z >>= 1; */ shift += 1; } diff --git a/reactos/lib/3rdparty/freetype/src/base/ftobjs.c b/reactos/lib/3rdparty/freetype/src/base/ftobjs.c index bd0c66e4a95..6f323362a64 100644 --- a/reactos/lib/3rdparty/freetype/src/base/ftobjs.c +++ b/reactos/lib/3rdparty/freetype/src/base/ftobjs.c @@ -4,7 +4,7 @@ /* */ /* The FreeType private base classes (body). */ /* */ -/* Copyright 1996-2013 by */ +/* Copyright 1996-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -1801,9 +1801,10 @@ if ( error ) return error; + /* POST resources must be sorted to concatenate properly */ error = FT_Raccess_Get_DataOffsets( library, stream, map_offset, rdara_pos, - TTAG_POST, + TTAG_POST, TRUE, &data_offsets, &count ); if ( !error ) { @@ -1816,9 +1817,11 @@ return error; } + /* sfnt resources should not be sorted to preserve the face order by + QuickDraw API */ error = FT_Raccess_Get_DataOffsets( library, stream, map_offset, rdara_pos, - TTAG_sfnt, + TTAG_sfnt, FALSE, &data_offsets, &count ); if ( !error ) { @@ -3357,6 +3360,7 @@ FT_UInt gindex = 0; + /* only do something if we have a charmap, and we have glyphs at all */ if ( face && face->charmap && face->num_glyphs ) { gindex = FT_Get_Char_Index( face, 0 ); @@ -3943,11 +3947,17 @@ static void ft_remove_renderer( FT_Module module ) { - FT_Library library = module->library; - FT_Memory memory = library->memory; + FT_Library library; + FT_Memory memory; FT_ListNode node; + library = module->library; + if ( !library ) + return; + + memory = library->memory; + node = FT_List_Find( &library->renderers, module ); if ( node ) { @@ -4463,7 +4473,7 @@ } - FT_Error + static FT_Error ft_property_do( FT_Library library, const FT_String* module_name, const FT_String* property_name, diff --git a/reactos/lib/3rdparty/freetype/src/base/ftoutln.c b/reactos/lib/3rdparty/freetype/src/base/ftoutln.c index 35df0cd821b..4a39dcd7c07 100644 --- a/reactos/lib/3rdparty/freetype/src/base/ftoutln.c +++ b/reactos/lib/3rdparty/freetype/src/base/ftoutln.c @@ -4,7 +4,7 @@ /* */ /* FreeType outline management (body). */ /* */ -/* Copyright 1996-2008, 2010, 2012-2013 by */ +/* Copyright 1996-2008, 2010, 2012-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -128,7 +128,7 @@ v_start.x = ( v_start.x + v_last.x ) / 2; v_start.y = ( v_start.y + v_last.y ) / 2; - v_last = v_start; + /* v_last = v_start; */ } point--; tags--; diff --git a/reactos/lib/3rdparty/freetype/src/base/ftrfork.c b/reactos/lib/3rdparty/freetype/src/base/ftrfork.c index 804911721dd..5352970389a 100644 --- a/reactos/lib/3rdparty/freetype/src/base/ftrfork.c +++ b/reactos/lib/3rdparty/freetype/src/base/ftrfork.c @@ -4,7 +4,7 @@ /* */ /* Embedded resource forks accessor (body). */ /* */ -/* Copyright 2004-2010, 2013 by */ +/* Copyright 2004-2010, 2013, 2014 by */ /* Masatake YAMATO and Redhat K.K. */ /* */ /* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are */ @@ -29,6 +29,7 @@ #include FT_INTERNAL_STREAM_H #include FT_INTERNAL_RFORK_H #include "basepic.h" +#include "ftbase.h" #undef FT_COMPONENT #define FT_COMPONENT trace_raccess @@ -151,6 +152,7 @@ FT_Long map_offset, FT_Long rdata_pos, FT_Long tag, + FT_Bool sort_by_res_id, FT_Long **offsets, FT_Long *count ) { @@ -163,6 +165,7 @@ FT_RFork_Ref *ref = NULL; + FT_TRACE3(( "\n" )); error = FT_Stream_Seek( stream, map_offset ); if ( error ) return error; @@ -183,6 +186,8 @@ (char)( 0xff & ( tag_internal >> 16 ) ), (char)( 0xff & ( tag_internal >> 8 ) ), (char)( 0xff & ( tag_internal >> 0 ) ) )); + FT_TRACE3(( " : subcount=%d, suboffset=0x%04x\n", + subcnt, rpos )); if ( tag_internal == tag ) { @@ -208,11 +213,24 @@ goto Exit; ref[j].offset = temp & 0xFFFFFFL; + FT_TRACE3(( " [%d]:" + " resource_id=0x%04x, offset=0x%08x\n", + j, ref[j].res_id, ref[j].offset )); } - ft_qsort( ref, *count, sizeof ( FT_RFork_Ref ), - ( int(*)(const void*, const void*) ) - ft_raccess_sort_ref_by_id ); + if (sort_by_res_id) + { + ft_qsort( ref, *count, sizeof ( FT_RFork_Ref ), + ( int(*)(const void*, const void*) ) + ft_raccess_sort_ref_by_id ); + + FT_TRACE3(( " -- sort resources by their ids --\n" )); + for ( j = 0; j < *count; ++ j ) { + FT_TRACE3(( " [%d]:" + " resource_id=0x%04x, offset=0x%08x\n", + j, ref[j].res_id, ref[j].offset )); + } + } if ( FT_NEW_ARRAY( offsets_internal, *count ) ) goto Exit; diff --git a/reactos/lib/3rdparty/freetype/src/base/rules.mk b/reactos/lib/3rdparty/freetype/src/base/rules.mk deleted file mode 100644 index 874533754fa..00000000000 --- a/reactos/lib/3rdparty/freetype/src/base/rules.mk +++ /dev/null @@ -1,99 +0,0 @@ -# -# FreeType 2 base layer configuration rules -# - - -# Copyright 1996-2000, 2002-2009, 2013 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# It sets the following variables which are used by the master Makefile -# after the call: -# -# BASE_OBJ_S: The single-object base layer. -# BASE_OBJ_M: A list of all objects for a multiple-objects build. -# BASE_EXT_OBJ: A list of base layer extensions, i.e., components found -# in `src/base' which are not compiled within the base -# layer proper. - - -BASE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SRC_DIR)/base) - - -# Base layer sources -# -# ftsystem, ftinit, and ftdebug are handled by freetype.mk -# -# All files listed here should be included in `ftbase.c' (for a `single' -# build). -# -BASE_SRC := $(BASE_DIR)/ftadvanc.c \ - $(BASE_DIR)/ftcalc.c \ - $(BASE_DIR)/ftdbgmem.c \ - $(BASE_DIR)/ftgloadr.c \ - $(BASE_DIR)/ftobjs.c \ - $(BASE_DIR)/ftoutln.c \ - $(BASE_DIR)/ftrfork.c \ - $(BASE_DIR)/ftsnames.c \ - $(BASE_DIR)/ftstream.c \ - $(BASE_DIR)/fttrigon.c \ - $(BASE_DIR)/ftutil.c - - -ifneq ($(ftmac_c),) - BASE_SRC += $(BASE_DIR)/$(ftmac_c) -endif - -# for simplicity, we also handle `md5.c' (which gets included by `ftobjs.h') -BASE_H := $(BASE_DIR)/ftbase.h \ - $(BASE_DIR)/md5.c \ - $(BASE_DIR)/md5.h - -# Base layer `extensions' sources -# -# An extension is added to the library file as a separate object. It is -# then linked to the final executable only if one of its symbols is used by -# the application. -# -BASE_EXT_SRC := $(patsubst %,$(BASE_DIR)/%,$(BASE_EXTENSIONS)) - -# Default extensions objects -# -BASE_EXT_OBJ := $(BASE_EXT_SRC:$(BASE_DIR)/%.c=$(OBJ_DIR)/%.$O) - - -# Base layer object(s) -# -# BASE_OBJ_M is used during `multi' builds (each base source file compiles -# to a single object file). -# -# BASE_OBJ_S is used during `single' builds (the whole base layer is -# compiled as a single object file using ftbase.c). -# -BASE_OBJ_M := $(BASE_SRC:$(BASE_DIR)/%.c=$(OBJ_DIR)/%.$O) -BASE_OBJ_S := $(OBJ_DIR)/ftbase.$O - -# Base layer root source file for single build -# -BASE_SRC_S := $(BASE_DIR)/ftbase.c - - -# Base layer - single object build -# -$(BASE_OBJ_S): $(BASE_SRC_S) $(BASE_SRC) $(FREETYPE_H) $(BASE_H) - $(BASE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(BASE_SRC_S)) - - -# Multiple objects build + extensions -# -$(OBJ_DIR)/%.$O: $(BASE_DIR)/%.c $(FREETYPE_H) $(BASE_H) - $(BASE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/bdf/bdfdrivr.c b/reactos/lib/3rdparty/freetype/src/bdf/bdfdrivr.c index caa142b5ef4..5a1c296fd25 100644 --- a/reactos/lib/3rdparty/freetype/src/bdf/bdfdrivr.c +++ b/reactos/lib/3rdparty/freetype/src/bdf/bdfdrivr.c @@ -2,7 +2,7 @@ FreeType font driver for bdf files - Copyright (C) 2001-2008, 2011, 2013 by + Copyright (C) 2001-2008, 2011, 2013, 2014 by Francesco Zappa Nardelli Permission is hereby granted, free of charge, to any person obtaining a copy @@ -243,8 +243,6 @@ THE SOFTWARE. !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) ) strings[0] = (char *)(prop->value.atom); - len = 0; - for ( len = 0, nn = 0; nn < 4; nn++ ) { lengths[nn] = 0; @@ -400,9 +398,10 @@ THE SOFTWARE. bdfface->num_faces = 1; bdfface->face_index = 0; - bdfface->face_flags = FT_FACE_FLAG_FIXED_SIZES | - FT_FACE_FLAG_HORIZONTAL | - FT_FACE_FLAG_FAST_GLYPHS; + + bdfface->face_flags |= FT_FACE_FLAG_FIXED_SIZES | + FT_FACE_FLAG_HORIZONTAL | + FT_FACE_FLAG_FAST_GLYPHS; prop = bdf_get_font_property( font, "SPACING" ); if ( prop && prop->format == BDF_ATOM && diff --git a/reactos/lib/3rdparty/freetype/src/bdf/bdflib.c b/reactos/lib/3rdparty/freetype/src/bdf/bdflib.c index 0b8412d9eb5..2eda11cd9bc 100644 --- a/reactos/lib/3rdparty/freetype/src/bdf/bdflib.c +++ b/reactos/lib/3rdparty/freetype/src/bdf/bdflib.c @@ -1,6 +1,6 @@ /* * Copyright 2000 Computing Research Labs, New Mexico State University - * Copyright 2001-2013 + * Copyright 2001-2014 * Francesco Zappa Nardelli * * Permission is hereby granted, free of charge, to any person obtaining a @@ -691,7 +691,6 @@ lineno = 1; buf[0] = 0; start = 0; - end = 0; avail = 0; cursor = 0; refill = 1; @@ -1409,7 +1408,7 @@ /* If the property happens to be a comment, then it doesn't need */ /* to be added to the internal hash table. */ - if ( ft_memcmp( name, "COMMENT", 7 ) != 0 ) + if ( ft_strncmp( name, "COMMENT", 7 ) != 0 ) { /* Add the property to the font property table. */ error = hash_insert( fp->name, @@ -1427,13 +1426,13 @@ /* FONT_ASCENT and FONT_DESCENT need to be assigned if they are */ /* present, and the SPACING property should override the default */ /* spacing. */ - if ( ft_memcmp( name, "DEFAULT_CHAR", 12 ) == 0 ) + if ( ft_strncmp( name, "DEFAULT_CHAR", 12 ) == 0 ) font->default_char = fp->value.l; - else if ( ft_memcmp( name, "FONT_ASCENT", 11 ) == 0 ) + else if ( ft_strncmp( name, "FONT_ASCENT", 11 ) == 0 ) font->font_ascent = fp->value.l; - else if ( ft_memcmp( name, "FONT_DESCENT", 12 ) == 0 ) + else if ( ft_strncmp( name, "FONT_DESCENT", 12 ) == 0 ) font->font_descent = fp->value.l; - else if ( ft_memcmp( name, "SPACING", 7 ) == 0 ) + else if ( ft_strncmp( name, "SPACING", 7 ) == 0 ) { if ( !fp->value.atom ) { @@ -1491,7 +1490,7 @@ memory = font->memory; /* Check for a comment. */ - if ( ft_memcmp( line, "COMMENT", 7 ) == 0 ) + if ( ft_strncmp( line, "COMMENT", 7 ) == 0 ) { linelen -= 7; @@ -1508,7 +1507,7 @@ /* The very first thing expected is the number of glyphs. */ if ( !( p->flags & _BDF_GLYPHS ) ) { - if ( ft_memcmp( line, "CHARS", 5 ) != 0 ) + if ( ft_strncmp( line, "CHARS", 5 ) != 0 ) { FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "CHARS" )); error = FT_THROW( Missing_Chars_Field ); @@ -1542,7 +1541,7 @@ } /* Check for the ENDFONT field. */ - if ( ft_memcmp( line, "ENDFONT", 7 ) == 0 ) + if ( ft_strncmp( line, "ENDFONT", 7 ) == 0 ) { /* Sort the glyphs by encoding. */ ft_qsort( (char *)font->glyphs, @@ -1556,7 +1555,7 @@ } /* Check for the ENDCHAR field. */ - if ( ft_memcmp( line, "ENDCHAR", 7 ) == 0 ) + if ( ft_strncmp( line, "ENDCHAR", 7 ) == 0 ) { p->glyph_enc = 0; p->flags &= ~_BDF_GLYPH_BITS; @@ -1572,7 +1571,7 @@ goto Exit; /* Check for the STARTCHAR field. */ - if ( ft_memcmp( line, "STARTCHAR", 9 ) == 0 ) + if ( ft_strncmp( line, "STARTCHAR", 9 ) == 0 ) { /* Set the character name in the parse info first until the */ /* encoding can be checked for an unencoded character. */ @@ -1606,7 +1605,7 @@ } /* Check for the ENCODING field. */ - if ( ft_memcmp( line, "ENCODING", 8 ) == 0 ) + if ( ft_strncmp( line, "ENCODING", 8 ) == 0 ) { if ( !( p->flags & _BDF_GLYPH ) ) { @@ -1792,7 +1791,7 @@ } /* Expect the SWIDTH (scalable width) field next. */ - if ( ft_memcmp( line, "SWIDTH", 6 ) == 0 ) + if ( ft_strncmp( line, "SWIDTH", 6 ) == 0 ) { if ( !( p->flags & _BDF_ENCODING ) ) goto Missing_Encoding; @@ -1808,7 +1807,7 @@ } /* Expect the DWIDTH (scalable width) field next. */ - if ( ft_memcmp( line, "DWIDTH", 6 ) == 0 ) + if ( ft_strncmp( line, "DWIDTH", 6 ) == 0 ) { if ( !( p->flags & _BDF_ENCODING ) ) goto Missing_Encoding; @@ -1836,7 +1835,7 @@ } /* Expect the BBX field next. */ - if ( ft_memcmp( line, "BBX", 3 ) == 0 ) + if ( ft_strncmp( line, "BBX", 3 ) == 0 ) { if ( !( p->flags & _BDF_ENCODING ) ) goto Missing_Encoding; @@ -1904,7 +1903,7 @@ } /* And finally, gather up the bitmap. */ - if ( ft_memcmp( line, "BITMAP", 6 ) == 0 ) + if ( ft_strncmp( line, "BITMAP", 6 ) == 0 ) { unsigned long bitmap_size; @@ -1979,7 +1978,7 @@ p = (_bdf_parse_t *) client_data; /* Check for the end of the properties. */ - if ( ft_memcmp( line, "ENDPROPERTIES", 13 ) == 0 ) + if ( ft_strncmp( line, "ENDPROPERTIES", 13 ) == 0 ) { /* If the FONT_ASCENT or FONT_DESCENT properties have not been */ /* encountered yet, then make sure they are added as properties and */ @@ -2020,12 +2019,12 @@ } /* Ignore the _XFREE86_GLYPH_RANGES properties. */ - if ( ft_memcmp( line, "_XFREE86_GLYPH_RANGES", 21 ) == 0 ) + if ( ft_strncmp( line, "_XFREE86_GLYPH_RANGES", 21 ) == 0 ) goto Exit; /* Handle COMMENT fields and properties in a special way to preserve */ /* the spacing. */ - if ( ft_memcmp( line, "COMMENT", 7 ) == 0 ) + if ( ft_strncmp( line, "COMMENT", 7 ) == 0 ) { name = value = line; value += 7; @@ -2089,7 +2088,7 @@ /* Check for a comment. This is done to handle those fonts that have */ /* comments before the STARTFONT line for some reason. */ - if ( ft_memcmp( line, "COMMENT", 7 ) == 0 ) + if ( ft_strncmp( line, "COMMENT", 7 ) == 0 ) { if ( p->opts->keep_comments != 0 && p->font != 0 ) { @@ -2115,7 +2114,7 @@ { memory = p->memory; - if ( ft_memcmp( line, "STARTFONT", 9 ) != 0 ) + if ( ft_strncmp( line, "STARTFONT", 9 ) != 0 ) { /* we don't emit an error message since this code gets */ /* explicitly caught one level higher */ @@ -2163,7 +2162,7 @@ } /* Check for the start of the properties. */ - if ( ft_memcmp( line, "STARTPROPERTIES", 15 ) == 0 ) + if ( ft_strncmp( line, "STARTPROPERTIES", 15 ) == 0 ) { if ( !( p->flags & _BDF_FONT_BBX ) ) { @@ -2192,7 +2191,7 @@ } /* Check for the FONTBOUNDINGBOX field. */ - if ( ft_memcmp( line, "FONTBOUNDINGBOX", 15 ) == 0 ) + if ( ft_strncmp( line, "FONTBOUNDINGBOX", 15 ) == 0 ) { if ( !( p->flags & _BDF_SIZE ) ) { @@ -2223,7 +2222,7 @@ } /* The next thing to check for is the FONT field. */ - if ( ft_memcmp( line, "FONT", 4 ) == 0 ) + if ( ft_strncmp( line, "FONT", 4 ) == 0 ) { error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); if ( error ) @@ -2258,7 +2257,7 @@ } /* Check for the SIZE field. */ - if ( ft_memcmp( line, "SIZE", 4 ) == 0 ) + if ( ft_strncmp( line, "SIZE", 4 ) == 0 ) { if ( !( p->flags & _BDF_FONT_NAME ) ) { @@ -2312,7 +2311,7 @@ } /* Check for the CHARS field -- font properties are optional */ - if ( ft_memcmp( line, "CHARS", 5 ) == 0 ) + if ( ft_strncmp( line, "CHARS", 5 ) == 0 ) { char nbuf[128]; @@ -2376,8 +2375,8 @@ unsigned long lineno = 0; /* make compiler happy */ _bdf_parse_t *p = NULL; - FT_Memory memory = extmemory; - FT_Error error = FT_Err_Ok; + FT_Memory memory = extmemory; /* needed for FT_NEW */ + FT_Error error = FT_Err_Ok; if ( FT_NEW( p ) ) @@ -2399,7 +2398,6 @@ { /* If the font is not proportional, set the font's monowidth */ /* field to the width of the font bounding box. */ - memory = p->font->memory; if ( p->font->spacing != BDF_PROPORTIONAL ) p->font->monowidth = p->font->bbx.width; diff --git a/reactos/lib/3rdparty/freetype/src/bdf/module.mk b/reactos/lib/3rdparty/freetype/src/bdf/module.mk deleted file mode 100644 index fe06ae8e064..00000000000 --- a/reactos/lib/3rdparty/freetype/src/bdf/module.mk +++ /dev/null @@ -1,34 +0,0 @@ -# -# FreeType 2 BDF module definition -# - -# Copyright 2001, 2002, 2006 by -# Francesco Zappa Nardelli -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - - -FTMODULE_H_COMMANDS += BDF_DRIVER - -define BDF_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, bdf_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)bdf $(ECHO_DRIVER_DESC)bdf bitmap fonts$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/bdf/rules.mk b/reactos/lib/3rdparty/freetype/src/bdf/rules.mk deleted file mode 100644 index 6ff1614ddec..00000000000 --- a/reactos/lib/3rdparty/freetype/src/bdf/rules.mk +++ /dev/null @@ -1,81 +0,0 @@ -# -# FreeType 2 bdf driver configuration rules -# - - -# Copyright (C) 2001, 2002, 2003, 2008 by -# Francesco Zappa Nardelli -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - - - - -# bdf driver directory -# -BDF_DIR := $(SRC_DIR)/bdf - - -BDF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(BDF_DIR)) - - -# bdf driver sources (i.e., C files) -# -BDF_DRV_SRC := $(BDF_DIR)/bdflib.c \ - $(BDF_DIR)/bdfdrivr.c - - -# bdf driver headers -# -BDF_DRV_H := $(BDF_DIR)/bdf.h \ - $(BDF_DIR)/bdfdrivr.h \ - $(BDF_DIR)/bdferror.h - -# bdf driver object(s) -# -# BDF_DRV_OBJ_M is used during `multi' builds -# BDF_DRV_OBJ_S is used during `single' builds -# -BDF_DRV_OBJ_M := $(BDF_DRV_SRC:$(BDF_DIR)/%.c=$(OBJ_DIR)/%.$O) -BDF_DRV_OBJ_S := $(OBJ_DIR)/bdf.$O - -# bdf driver source file for single build -# -BDF_DRV_SRC_S := $(BDF_DIR)/bdf.c - - -# bdf driver - single object -# -$(BDF_DRV_OBJ_S): $(BDF_DRV_SRC_S) $(BDF_DRV_SRC) $(FREETYPE_H) $(BDF_DRV_H) - $(BDF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(BDF_DRV_SRC_S)) - - -# bdf driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(BDF_DIR)/%.c $(FREETYPE_H) $(BDF_DRV_H) - $(BDF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(BDF_DRV_OBJ_S) -DRV_OBJS_M += $(BDF_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/bzip2/rules.mk b/reactos/lib/3rdparty/freetype/src/bzip2/rules.mk deleted file mode 100644 index 0ff2628b4a1..00000000000 --- a/reactos/lib/3rdparty/freetype/src/bzip2/rules.mk +++ /dev/null @@ -1,63 +0,0 @@ -# -# FreeType 2 BZIP2 support configuration rules -# - -# Copyright 2010 by -# Joel Klinghed. -# -# Based on src/lzw/rules.mk, Copyright 2004-2006 by -# Albert Chin-A-Young. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# BZIP2 driver directory -# -BZIP2_DIR := $(SRC_DIR)/bzip2 - - -# compilation flags for the driver -# -BZIP2_COMPILE := $(FT_COMPILE) - - -# BZIP2 support sources (i.e., C files) -# -BZIP2_DRV_SRC := $(BZIP2_DIR)/ftbzip2.c - -# BZIP2 driver object(s) -# -# BZIP2_DRV_OBJ_M is used during `multi' builds -# BZIP2_DRV_OBJ_S is used during `single' builds -# -BZIP2_DRV_OBJ_M := $(OBJ_DIR)/ftbzip2.$O -BZIP2_DRV_OBJ_S := $(OBJ_DIR)/ftbzip2.$O - -# BZIP2 support source file for single build -# -BZIP2_DRV_SRC_S := $(BZIP2_DIR)/ftbzip2.c - - -# BZIP2 support - single object -# -$(BZIP2_DRV_OBJ_S): $(BZIP2_DRV_SRC_S) $(BZIP2_DRV_SRC) $(FREETYPE_H) $(BZIP2_DRV_H) - $(BZIP2_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(BZIP2_DRV_SRC_S)) - - -# BZIP2 support - multiple objects -# -$(OBJ_DIR)/%.$O: $(BZIP2_DIR)/%.c $(FREETYPE_H) $(BZIP2_DRV_H) - $(BZIP2_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(BZIP2_DRV_OBJ_S) -DRV_OBJS_M += $(BZIP2_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/cache/rules.mk b/reactos/lib/3rdparty/freetype/src/cache/rules.mk deleted file mode 100644 index ed75a6a91fd..00000000000 --- a/reactos/lib/3rdparty/freetype/src/cache/rules.mk +++ /dev/null @@ -1,80 +0,0 @@ -# -# FreeType 2 Cache configuration rules -# - - -# Copyright 2000, 2001, 2003, 2004, 2006, 2008 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# Cache driver directory -# -CACHE_DIR := $(SRC_DIR)/cache - -# compilation flags for the driver -# -CACHE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CACHE_DIR)) - - -# Cache driver sources (i.e., C files) -# -CACHE_DRV_SRC := $(CACHE_DIR)/ftcbasic.c \ - $(CACHE_DIR)/ftccache.c \ - $(CACHE_DIR)/ftccmap.c \ - $(CACHE_DIR)/ftcglyph.c \ - $(CACHE_DIR)/ftcimage.c \ - $(CACHE_DIR)/ftcmanag.c \ - $(CACHE_DIR)/ftcmru.c \ - $(CACHE_DIR)/ftcsbits.c - -# Cache driver headers -# -CACHE_DRV_H := $(CACHE_DIR)/ftccache.h \ - $(CACHE_DIR)/ftccback.h \ - $(CACHE_DIR)/ftcerror.h \ - $(CACHE_DIR)/ftcglyph.h \ - $(CACHE_DIR)/ftcimage.h \ - $(CACHE_DIR)/ftcmanag.h \ - $(CACHE_DIR)/ftcmru.h \ - $(CACHE_DIR)/ftcsbits.h - - -# Cache driver object(s) -# -# CACHE_DRV_OBJ_M is used during `multi' builds. -# CACHE_DRV_OBJ_S is used during `single' builds. -# -CACHE_DRV_OBJ_M := $(CACHE_DRV_SRC:$(CACHE_DIR)/%.c=$(OBJ_DIR)/%.$O) -CACHE_DRV_OBJ_S := $(OBJ_DIR)/ftcache.$O - -# Cache driver source file for single build -# -CACHE_DRV_SRC_S := $(CACHE_DIR)/ftcache.c - - -# Cache driver - single object -# -$(CACHE_DRV_OBJ_S): $(CACHE_DRV_SRC_S) $(CACHE_DRV_SRC) \ - $(FREETYPE_H) $(CACHE_DRV_H) - $(CACHE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(CACHE_DRV_SRC_S)) - - -# Cache driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(CACHE_DIR)/%.c $(FREETYPE_H) $(CACHE_DRV_H) - $(CACHE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(CACHE_DRV_OBJ_S) -DRV_OBJS_M += $(CACHE_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/cff/cf2blues.c b/reactos/lib/3rdparty/freetype/src/cff/cf2blues.c index eec589ef036..250f89e0df4 100644 --- a/reactos/lib/3rdparty/freetype/src/cff/cf2blues.c +++ b/reactos/lib/3rdparty/freetype/src/cff/cf2blues.c @@ -4,7 +4,7 @@ /* */ /* Adobe's code for handling Blue Zones (body). */ /* */ -/* Copyright 2009-2013 Adobe Systems Incorporated. */ +/* Copyright 2009-2014 Adobe Systems Incorporated. */ /* */ /* This software, and all works of authorship, whether in source or */ /* object code form as indicated by the copyright notice(s) included */ @@ -408,11 +408,10 @@ /* Note: constant changed from 0.5 to 0.6 to avoid a problem with */ /* 10ppem Arial */ - blues->boost = FT_MulFix( - cf2_floatToFixed( .6 ), - ( cf2_intToFixed( 1 ) - - FT_DivFix( blues->scale, - blues->blueScale ) ) ); + blues->boost = cf2_floatToFixed( .6 ) - + FT_MulDiv( cf2_floatToFixed ( .6 ), + blues->scale, + blues->blueScale ); if ( blues->boost > 0x7FFF ) { /* boost must remain less than 0.5, or baseline could go negative */ diff --git a/reactos/lib/3rdparty/freetype/src/cff/cf2font.c b/reactos/lib/3rdparty/freetype/src/cff/cf2font.c index 718d1e27ec1..6e99dc2f065 100644 --- a/reactos/lib/3rdparty/freetype/src/cff/cf2font.c +++ b/reactos/lib/3rdparty/freetype/src/cff/cf2font.c @@ -4,7 +4,7 @@ /* */ /* Adobe's code for font instances (body). */ /* */ -/* Copyright 2007-2013 Adobe Systems Incorporated. */ +/* Copyright 2007-2014 Adobe Systems Incorporated. */ /* */ /* This software, and all works of authorship, whether in source or */ /* object code form as indicated by the copyright notice(s) included */ @@ -167,7 +167,7 @@ if ( !xdelta ) goto Try_x3; - *darkenAmount = FT_MulFix( x, FT_DivFix( ydelta, xdelta ) ) + + *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) + FT_DivFix( cf2_intToFixed( y1 ), ppem ); } @@ -184,7 +184,7 @@ if ( !xdelta ) goto Try_x4; - *darkenAmount = FT_MulFix( x, FT_DivFix( ydelta, xdelta ) ) + + *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) + FT_DivFix( cf2_intToFixed( y2 ), ppem ); } } @@ -202,7 +202,7 @@ if ( !xdelta ) goto Use_y4; - *darkenAmount = FT_MulFix( x, FT_DivFix( ydelta, xdelta ) ) + + *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) + FT_DivFix( cf2_intToFixed( y3 ), ppem ); } } @@ -233,13 +233,14 @@ /* pointer to parsed font object */ CFF_Decoder* decoder = font->decoder; - FT_Bool needExtraSetup; + FT_Bool needExtraSetup = FALSE; /* character space units */ CF2_Fixed boldenX = font->syntheticEmboldeningAmountX; CF2_Fixed boldenY = font->syntheticEmboldeningAmountY; - CF2_Fixed ppem; + CFF_SubFont subFont; + CF2_Fixed ppem; /* clear previous error */ @@ -247,8 +248,12 @@ /* if a CID fontDict has changed, we need to recompute some cached */ /* data */ - needExtraSetup = - (FT_Bool)( font->lastSubfont != cf2_getSubfont( decoder ) ); + subFont = cf2_getSubfont( decoder ); + if ( font->lastSubfont != subFont ) + { + font->lastSubfont = subFont; + needExtraSetup = TRUE; + } /* if ppem has changed, we need to recompute some cached data */ /* note: because of CID font matrix concatenation, ppem and transform */ diff --git a/reactos/lib/3rdparty/freetype/src/cff/cf2ft.c b/reactos/lib/3rdparty/freetype/src/cff/cf2ft.c index 4abbc9d798d..cb8d31c53ac 100644 --- a/reactos/lib/3rdparty/freetype/src/cff/cf2ft.c +++ b/reactos/lib/3rdparty/freetype/src/cff/cf2ft.c @@ -4,7 +4,7 @@ /* */ /* FreeType Glue Component to Adobe's Interpreter (body). */ /* */ -/* Copyright 2013 Adobe Systems Incorporated. */ +/* Copyright 2013-2014 Adobe Systems Incorporated. */ /* */ /* This software, and all works of authorship, whether in source or */ /* object code form as indicated by the copyright notice(s) included */ @@ -61,7 +61,9 @@ FT_ASSERT( unitsPerEm > 0 ); - FT_ASSERT( transform->a > 0 && transform->d > 0 ); + if ( transform->a <= 0 || transform->d <= 0 ) + return FT_THROW( Invalid_Size_Handle ); + FT_ASSERT( transform->b == 0 && transform->c == 0 ); FT_ASSERT( transform->tx == 0 && transform->ty == 0 ); @@ -236,10 +238,8 @@ if ( *hinted ) { - *x_scale = FT_DivFix( decoder->builder.glyph->x_scale, - cf2_intToFixed( 64 ) ); - *y_scale = FT_DivFix( decoder->builder.glyph->y_scale, - cf2_intToFixed( 64 ) ); + *x_scale = ( decoder->builder.glyph->x_scale + 32 ) / 64; + *y_scale = ( decoder->builder.glyph->y_scale + 32 ) / 64; } else { @@ -357,9 +357,12 @@ /* also get units per em to validate scale */ font->unitsPerEm = (CF2_Int)cf2_getUnitsPerEm( decoder ); - error2 = cf2_checkTransform( &transform, font->unitsPerEm ); - if ( error2 ) - return error2; + if ( scaled ) + { + error2 = cf2_checkTransform( &transform, font->unitsPerEm ); + if ( error2 ) + return error2; + } error2 = cf2_getGlyphOutline( font, &buf, &transform, &glyphWidth ); if ( error2 ) @@ -389,8 +392,16 @@ FT_ASSERT( decoder && decoder->builder.face && decoder->builder.face->root.size ); - FT_ASSERT( decoder->builder.face->root.size->metrics.y_ppem ); + /* + * Note that `y_ppem' can be zero if there wasn't a call to + * `FT_Set_Char_Size' or something similar. However, this isn't a + * problem since we come to this place in the code only if + * FT_LOAD_NO_SCALE is set (the other case gets caught by + * `cf2_checkTransform'). The ppem value is needed to compute the stem + * darkening, which is disabled for getting the unscaled outline. + * + */ return cf2_intToFixed( decoder->builder.face->root.size->metrics.y_ppem ); } @@ -508,7 +519,7 @@ CF2_UInt idx, CF2_Buffer buf ) { - FT_ASSERT( decoder && decoder->globals ); + FT_ASSERT( decoder ); FT_ZERO( buf ); @@ -516,6 +527,8 @@ if ( idx >= decoder->num_globals ) return TRUE; /* error */ + FT_ASSERT( decoder->globals ); + buf->start = buf->ptr = decoder->globals[idx]; buf->end = decoder->globals[idx + 1]; @@ -581,7 +594,7 @@ CF2_UInt idx, CF2_Buffer buf ) { - FT_ASSERT( decoder && decoder->locals ); + FT_ASSERT( decoder ); FT_ZERO( buf ); @@ -589,6 +602,8 @@ if ( idx >= decoder->num_locals ) return TRUE; /* error */ + FT_ASSERT( decoder->locals ); + buf->start = buf->ptr = decoder->locals[idx]; buf->end = decoder->locals[idx + 1]; diff --git a/reactos/lib/3rdparty/freetype/src/cff/cf2hints.c b/reactos/lib/3rdparty/freetype/src/cff/cf2hints.c index 5f441616866..5853d775851 100644 --- a/reactos/lib/3rdparty/freetype/src/cff/cf2hints.c +++ b/reactos/lib/3rdparty/freetype/src/cff/cf2hints.c @@ -4,7 +4,7 @@ /* */ /* Adobe's code for handling CFF hints (body). */ /* */ -/* Copyright 2007-2013 Adobe Systems Incorporated. */ +/* Copyright 2007-2014 Adobe Systems Incorporated. */ /* */ /* This software, and all works of authorship, whether in source or */ /* object code form as indicated by the copyright notice(s) included */ @@ -781,6 +781,8 @@ cf2_hintmask_setAll( hintMask, cf2_arrstack_size( hStemHintArray ) + cf2_arrstack_size( vStemHintArray ) ); + if ( !cf2_hintmask_isValid( hintMask ) ) + return; /* too many stem hints */ } /* begin by clearing the map */ diff --git a/reactos/lib/3rdparty/freetype/src/cff/cffload.c b/reactos/lib/3rdparty/freetype/src/cff/cffload.c index ff271f3d583..d9bec5966b1 100644 --- a/reactos/lib/3rdparty/freetype/src/cff/cffload.c +++ b/reactos/lib/3rdparty/freetype/src/cff/cffload.c @@ -4,7 +4,7 @@ /* */ /* OpenType and CFF data/program tables loader (body). */ /* */ -/* Copyright 1996-2013 by */ +/* Copyright 1996-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -689,6 +689,13 @@ if ( FT_READ_USHORT( num_ranges ) ) goto Exit; + if ( !num_ranges ) + { + FT_TRACE0(( "CFF_Load_FD_Select: empty FDSelect array\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + fdselect->data_size = num_ranges * 3 + 2; Load_Data: @@ -719,7 +726,7 @@ break; case 3: - /* first, compare to cache */ + /* first, compare to the cache */ if ( (FT_UInt)( glyph_index - fdselect->cache_first ) < fdselect->cache_count ) { @@ -727,7 +734,7 @@ break; } - /* then, lookup the ranges array */ + /* then, look up the ranges array */ { FT_Byte* p = fdselect->data; FT_Byte* p_limit = p + fdselect->data_size; @@ -750,7 +757,7 @@ /* update cache */ fdselect->cache_first = first; - fdselect->cache_count = limit-first; + fdselect->cache_count = limit - first; fdselect->cache_fd = fd2; break; } diff --git a/reactos/lib/3rdparty/freetype/src/cff/cffobjs.c b/reactos/lib/3rdparty/freetype/src/cff/cffobjs.c index 29c36915084..cac4ac2bd4b 100644 --- a/reactos/lib/3rdparty/freetype/src/cff/cffobjs.c +++ b/reactos/lib/3rdparty/freetype/src/cff/cffobjs.c @@ -866,7 +866,7 @@ flags |= FT_FACE_FLAG_KERNING; #endif - cffface->face_flags = flags; + cffface->face_flags |= flags; /*******************************************************************/ /* */ diff --git a/reactos/lib/3rdparty/freetype/src/cff/cffparse.c b/reactos/lib/3rdparty/freetype/src/cff/cffparse.c index 96222120b01..91bd5326c3e 100644 --- a/reactos/lib/3rdparty/freetype/src/cff/cffparse.c +++ b/reactos/lib/3rdparty/freetype/src/cff/cffparse.c @@ -4,7 +4,7 @@ /* */ /* CFF token stream parser (body) */ /* */ -/* Copyright 1996-2004, 2007-2013 by */ +/* Copyright 1996-2004, 2007-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -66,7 +66,6 @@ goto Bad; val = (FT_Short)( ( (FT_UShort)p[0] << 8 ) | p[1] ); - p += 2; } else if ( v == 29 ) { @@ -77,7 +76,6 @@ ( (FT_ULong)p[1] << 16 ) | ( (FT_ULong)p[2] << 8 ) | (FT_ULong)p[3] ); - p += 4; } else if ( v < 247 ) { @@ -89,7 +87,6 @@ goto Bad; val = ( v - 247 ) * 256 + p[0] + 108; - p++; } else { @@ -97,7 +94,6 @@ goto Bad; val = -( v - 251 ) * 256 - p[0] - 108; - p++; } Exit: diff --git a/reactos/lib/3rdparty/freetype/src/cff/module.mk b/reactos/lib/3rdparty/freetype/src/cff/module.mk deleted file mode 100644 index ef1391c279b..00000000000 --- a/reactos/lib/3rdparty/freetype/src/cff/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 CFF module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += CFF_DRIVER - -define CFF_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, cff_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)cff $(ECHO_DRIVER_DESC)OpenType fonts with extension *.otf$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/cff/rules.mk b/reactos/lib/3rdparty/freetype/src/cff/rules.mk deleted file mode 100644 index 13115c25509..00000000000 --- a/reactos/lib/3rdparty/freetype/src/cff/rules.mk +++ /dev/null @@ -1,86 +0,0 @@ -# -# FreeType 2 OpenType/CFF driver configuration rules -# - - -# Copyright 1996-2001, 2003, 2011, 2013 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# OpenType driver directory -# -CFF_DIR := $(SRC_DIR)/cff - - -CFF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CFF_DIR)) - - -# CFF driver sources (i.e., C files) -# -CFF_DRV_SRC := $(CFF_DIR)/cffcmap.c \ - $(CFF_DIR)/cffdrivr.c \ - $(CFF_DIR)/cffgload.c \ - $(CFF_DIR)/cffload.c \ - $(CFF_DIR)/cffobjs.c \ - $(CFF_DIR)/cffparse.c \ - $(CFF_DIR)/cffpic.c \ - $(CFF_DIR)/cf2arrst.c \ - $(CFF_DIR)/cf2blues.c \ - $(CFF_DIR)/cf2error.c \ - $(CFF_DIR)/cf2font.c \ - $(CFF_DIR)/cf2ft.c \ - $(CFF_DIR)/cf2hints.c \ - $(CFF_DIR)/cf2intrp.c \ - $(CFF_DIR)/cf2read.c \ - $(CFF_DIR)/cf2stack.c - - -# CFF driver headers -# -CFF_DRV_H := $(CFF_DRV_SRC:%.c=%.h) \ - $(CFF_DIR)/cfferrs.h \ - $(CFF_DIR)/cfftoken.h \ - $(CFF_DIR)/cfftypes.h \ - $(CFF_DIR)/cf2fixed.h \ - $(CFF_DIR)/cf2glue.h \ - $(CFF_DIR)/cf2types.h - - -# CFF driver object(s) -# -# CFF_DRV_OBJ_M is used during `multi' builds -# CFF_DRV_OBJ_S is used during `single' builds -# -CFF_DRV_OBJ_M := $(CFF_DRV_SRC:$(CFF_DIR)/%.c=$(OBJ_DIR)/%.$O) -CFF_DRV_OBJ_S := $(OBJ_DIR)/cff.$O - -# CFF driver source file for single build -# -CFF_DRV_SRC_S := $(CFF_DIR)/cff.c - - -# CFF driver - single object -# -$(CFF_DRV_OBJ_S): $(CFF_DRV_SRC_S) $(CFF_DRV_SRC) $(FREETYPE_H) $(CFF_DRV_H) - $(CFF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(CFF_DRV_SRC_S)) - - -# CFF driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(CFF_DIR)/%.c $(FREETYPE_H) $(CFF_DRV_H) - $(CFF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(CFF_DRV_OBJ_S) -DRV_OBJS_M += $(CFF_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/cid/cidload.c b/reactos/lib/3rdparty/freetype/src/cid/cidload.c index 46def71b79e..1cda0eee7ad 100644 --- a/reactos/lib/3rdparty/freetype/src/cid/cidload.c +++ b/reactos/lib/3rdparty/freetype/src/cid/cidload.c @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 font loader (body). */ /* */ -/* Copyright 1996-2006, 2009, 2011-2013 by */ +/* Copyright 1996-2006, 2009, 2011-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -160,16 +160,26 @@ { FT_Matrix* matrix; FT_Vector* offset; + FT_Int result; dict = face->cid.font_dicts + parser->num_dict; matrix = &dict->font_matrix; offset = &dict->font_offset; - (void)cid_parser_to_fixed_array( parser, 6, temp, 3 ); + result = cid_parser_to_fixed_array( parser, 6, temp, 3 ); + + if ( result < 6 ) + return FT_THROW( Invalid_File_Format ); temp_scale = FT_ABS( temp[3] ); + if ( temp_scale == 0 ) + { + FT_ERROR(( "cid_parse_font_matrix: invalid font matrix\n" )); + return FT_THROW( Invalid_File_Format ); + } + /* Set Units per EM based on FontMatrix values. We set the value to */ /* 1000 / temp_scale, because temp_scale was already multiplied by */ /* 1000 (in t1_tofixed, from psobjs.c). */ @@ -184,7 +194,7 @@ temp[2] = FT_DivFix( temp[2], temp_scale ); temp[4] = FT_DivFix( temp[4], temp_scale ); temp[5] = FT_DivFix( temp[5], temp_scale ); - temp[3] = 0x10000L; + temp[3] = temp[3] < 0 ? -0x10000L : 0x10000L; } matrix->xx = temp[0]; @@ -197,8 +207,7 @@ offset->y = temp[5] >> 16; } - return FT_Err_Ok; /* this is a callback function; */ - /* we must return an error code */ + return FT_Err_Ok; } diff --git a/reactos/lib/3rdparty/freetype/src/cid/cidobjs.c b/reactos/lib/3rdparty/freetype/src/cid/cidobjs.c index 46555e2dc85..5932ffa9730 100644 --- a/reactos/lib/3rdparty/freetype/src/cid/cidobjs.c +++ b/reactos/lib/3rdparty/freetype/src/cid/cidobjs.c @@ -355,9 +355,10 @@ cidface->num_charmaps = 0; cidface->face_index = face_index; - cidface->face_flags = FT_FACE_FLAG_SCALABLE | /* scalable outlines */ - FT_FACE_FLAG_HORIZONTAL | /* horizontal data */ - FT_FACE_FLAG_HINTER; /* has native hinter */ + + cidface->face_flags |= FT_FACE_FLAG_SCALABLE | /* scalable outlines */ + FT_FACE_FLAG_HORIZONTAL | /* horizontal data */ + FT_FACE_FLAG_HINTER; /* has native hinter */ if ( info->is_fixed_pitch ) cidface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; diff --git a/reactos/lib/3rdparty/freetype/src/cid/cidparse.c b/reactos/lib/3rdparty/freetype/src/cid/cidparse.c index 53df3155d11..d8476cdae89 100644 --- a/reactos/lib/3rdparty/freetype/src/cid/cidparse.c +++ b/reactos/lib/3rdparty/freetype/src/cid/cidparse.c @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 parser (body). */ /* */ -/* Copyright 1996-2007, 2009, 2013 by */ +/* Copyright 1996-2007, 2009, 2013, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -178,8 +178,6 @@ if ( ft_strncmp( (char*)arg1, "(Hex)", 5 ) == 0 ) parser->binary_length = ft_atol( (const char *)arg2 ); - limit = parser->root.limit; - cur = parser->root.cursor; goto Exit; } else if ( cur[1] == 's' && ft_strncmp( (char*)cur, "/sfnts", 6 ) == 0 ) diff --git a/reactos/lib/3rdparty/freetype/src/cid/cidparse.h b/reactos/lib/3rdparty/freetype/src/cid/cidparse.h index ca37deab936..f27be65a600 100644 --- a/reactos/lib/3rdparty/freetype/src/cid/cidparse.h +++ b/reactos/lib/3rdparty/freetype/src/cid/cidparse.h @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 parser (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004 by */ +/* Copyright 1996-2004, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -92,26 +92,26 @@ FT_BEGIN_HEADER /* */ /*************************************************************************/ -#define cid_parser_skip_spaces( p ) \ +#define cid_parser_skip_spaces( p ) \ (p)->root.funcs.skip_spaces( &(p)->root ) -#define cid_parser_skip_PS_token( p ) \ +#define cid_parser_skip_PS_token( p ) \ (p)->root.funcs.skip_PS_token( &(p)->root ) -#define cid_parser_to_int( p ) (p)->root.funcs.to_int( &(p)->root ) -#define cid_parser_to_fixed( p, t ) (p)->root.funcs.to_fixed( &(p)->root, t ) +#define cid_parser_to_int( p ) (p)->root.funcs.to_int( &(p)->root ) +#define cid_parser_to_fixed( p, t ) (p)->root.funcs.to_fixed( &(p)->root, t ) -#define cid_parser_to_coord_array( p, m, c ) \ +#define cid_parser_to_coord_array( p, m, c ) \ (p)->root.funcs.to_coord_array( &(p)->root, m, c ) -#define cid_parser_to_fixed_array( p, m, f, t ) \ +#define cid_parser_to_fixed_array( p, m, f, t ) \ (p)->root.funcs.to_fixed_array( &(p)->root, m, f, t ) -#define cid_parser_to_token( p, t ) \ +#define cid_parser_to_token( p, t ) \ (p)->root.funcs.to_token( &(p)->root, t ) -#define cid_parser_to_token_array( p, t, m, c ) \ +#define cid_parser_to_token_array( p, t, m, c ) \ (p)->root.funcs.to_token_array( &(p)->root, t, m, c ) -#define cid_parser_load_field( p, f, o ) \ +#define cid_parser_load_field( p, f, o ) \ (p)->root.funcs.load_field( &(p)->root, f, o, 0, 0 ) -#define cid_parser_load_field_table( p, f, o ) \ +#define cid_parser_load_field_table( p, f, o ) \ (p)->root.funcs.load_field_table( &(p)->root, f, o, 0, 0 ) diff --git a/reactos/lib/3rdparty/freetype/src/cid/module.mk b/reactos/lib/3rdparty/freetype/src/cid/module.mk deleted file mode 100644 index ce30bfd7ae4..00000000000 --- a/reactos/lib/3rdparty/freetype/src/cid/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 CID module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += TYPE1CID_DRIVER - -define TYPE1CID_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, t1cid_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)cid $(ECHO_DRIVER_DESC)Postscript CID-keyed fonts, no known extension$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/cid/rules.mk b/reactos/lib/3rdparty/freetype/src/cid/rules.mk deleted file mode 100644 index f3627446126..00000000000 --- a/reactos/lib/3rdparty/freetype/src/cid/rules.mk +++ /dev/null @@ -1,70 +0,0 @@ -# -# FreeType 2 CID driver configuration rules -# - - -# Copyright 1996-2000, 2001, 2003 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# CID driver directory -# -CID_DIR := $(SRC_DIR)/cid - - -CID_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CID_DIR)) - - -# CID driver sources (i.e., C files) -# -CID_DRV_SRC := $(CID_DIR)/cidparse.c \ - $(CID_DIR)/cidload.c \ - $(CID_DIR)/cidriver.c \ - $(CID_DIR)/cidgload.c \ - $(CID_DIR)/cidobjs.c - -# CID driver headers -# -CID_DRV_H := $(CID_DRV_SRC:%.c=%.h) \ - $(CID_DIR)/cidtoken.h \ - $(CID_DIR)/ciderrs.h - - -# CID driver object(s) -# -# CID_DRV_OBJ_M is used during `multi' builds -# CID_DRV_OBJ_S is used during `single' builds -# -CID_DRV_OBJ_M := $(CID_DRV_SRC:$(CID_DIR)/%.c=$(OBJ_DIR)/%.$O) -CID_DRV_OBJ_S := $(OBJ_DIR)/type1cid.$O - -# CID driver source file for single build -# -CID_DRV_SRC_S := $(CID_DIR)/type1cid.c - - -# CID driver - single object -# -$(CID_DRV_OBJ_S): $(CID_DRV_SRC_S) $(CID_DRV_SRC) $(FREETYPE_H) $(CID_DRV_H) - $(CID_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(CID_DRV_SRC_S)) - - -# CID driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(CID_DIR)/%.c $(FREETYPE_H) $(CID_DRV_H) - $(CID_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(CID_DRV_OBJ_S) -DRV_OBJS_M += $(CID_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/gxvalid/module.mk b/reactos/lib/3rdparty/freetype/src/gxvalid/module.mk deleted file mode 100644 index 9fd098e2c5e..00000000000 --- a/reactos/lib/3rdparty/freetype/src/gxvalid/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 gxvalid module definition -# - -# Copyright 2004, 2005, 2006 -# by suzuki toshiya, Masatake YAMATO, Red Hat K.K., -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += GXVALID_MODULE - -define GXVALID_MODULE -$(OPEN_DRIVER) FT_Module_Class, gxv_module_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)gxvalid $(ECHO_DRIVER_DESC)TrueTypeGX/AAT validation module$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/gxvalid/rules.mk b/reactos/lib/3rdparty/freetype/src/gxvalid/rules.mk deleted file mode 100644 index 57bc0823db7..00000000000 --- a/reactos/lib/3rdparty/freetype/src/gxvalid/rules.mk +++ /dev/null @@ -1,94 +0,0 @@ -# -# FreeType 2 TrueTypeGX/AAT validation driver configuration rules -# - - -# Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# GXV driver directory -# -GXV_DIR := $(SRC_DIR)/gxvalid - - -# compilation flags for the driver -# -GXV_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(GXV_DIR)) - - -# GXV driver sources (i.e., C files) -# -GXV_DRV_SRC := $(GXV_DIR)/gxvcommn.c \ - $(GXV_DIR)/gxvfeat.c \ - $(GXV_DIR)/gxvbsln.c \ - $(GXV_DIR)/gxvtrak.c \ - $(GXV_DIR)/gxvopbd.c \ - $(GXV_DIR)/gxvprop.c \ - $(GXV_DIR)/gxvjust.c \ - $(GXV_DIR)/gxvmort.c \ - $(GXV_DIR)/gxvmort0.c \ - $(GXV_DIR)/gxvmort1.c \ - $(GXV_DIR)/gxvmort2.c \ - $(GXV_DIR)/gxvmort4.c \ - $(GXV_DIR)/gxvmort5.c \ - $(GXV_DIR)/gxvmorx.c \ - $(GXV_DIR)/gxvmorx0.c \ - $(GXV_DIR)/gxvmorx1.c \ - $(GXV_DIR)/gxvmorx2.c \ - $(GXV_DIR)/gxvmorx4.c \ - $(GXV_DIR)/gxvmorx5.c \ - $(GXV_DIR)/gxvlcar.c \ - $(GXV_DIR)/gxvkern.c \ - $(GXV_DIR)/gxvmod.c - -# GXV driver headers -# -GXV_DRV_H := $(GXV_DIR)/gxvalid.h \ - $(GXV_DIR)/gxverror.h \ - $(GXV_DIR)/gxvcommn.h \ - $(GXV_DIR)/gxvfeat.h \ - $(GXV_DIR)/gxvmod.h \ - $(GXV_DIR)/gxvmort.h \ - $(GXV_DIR)/gxvmorx.h - - -# GXV driver object(s) -# -# GXV_DRV_OBJ_M is used during `multi' builds. -# GXV_DRV_OBJ_S is used during `single' builds. -# -GXV_DRV_OBJ_M := $(GXV_DRV_SRC:$(GXV_DIR)/%.c=$(OBJ_DIR)/%.$O) -GXV_DRV_OBJ_S := $(OBJ_DIR)/gxvalid.$O - -# GXV driver source file for single build -# -GXV_DRV_SRC_S := $(GXV_DIR)/gxvalid.c - - -# GXV driver - single object -# -$(GXV_DRV_OBJ_S): $(GXV_DRV_SRC_S) $(GXV_DRV_SRC) \ - $(FREETYPE_H) $(GXV_DRV_H) - $(GXV_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(GXV_DRV_SRC_S)) - - -# GXV driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(GXV_DIR)/%.c $(FREETYPE_H) $(GXV_DRV_H) - $(GXV_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(GXV_DRV_OBJ_S) -DRV_OBJS_M += $(GXV_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/gzip/rules.mk b/reactos/lib/3rdparty/freetype/src/gzip/rules.mk deleted file mode 100644 index 37cd9917653..00000000000 --- a/reactos/lib/3rdparty/freetype/src/gzip/rules.mk +++ /dev/null @@ -1,78 +0,0 @@ -# -# FreeType 2 GZip support configuration rules -# - - -# Copyright 2002, 2003, 2013 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# gzip driver directory -# -GZIP_DIR := $(SRC_DIR)/gzip - - -# compilation flags for the driver -# -ifeq ($(SYSTEM_ZLIB),) - GZIP_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(GZIP_DIR)) -else - GZIP_COMPILE := $(FT_COMPILE) -endif - - -# gzip support sources -# -# All source and header files get loaded by `ftgzip.c' only if SYTEM_ZLIB is -# not defined (regardless whether we have a `single' or a `multi' build). -# However, it doesn't harm if we add everything as a dependency -# unconditionally. -# -GZIP_DRV_SRCS := $(GZIP_DIR)/adler32.c \ - $(GZIP_DIR)/infblock.c \ - $(GZIP_DIR)/infblock.h \ - $(GZIP_DIR)/infcodes.c \ - $(GZIP_DIR)/infcodes.h \ - $(GZIP_DIR)/inffixed.h \ - $(GZIP_DIR)/inflate.c \ - $(GZIP_DIR)/inftrees.c \ - $(GZIP_DIR)/inftrees.h \ - $(GZIP_DIR)/infutil.c \ - $(GZIP_DIR)/infutil.h \ - $(GZIP_DIR)/zconf.h \ - $(GZIP_DIR)/zlib.h \ - $(GZIP_DIR)/zutil.c \ - $(GZIP_DIR)/zutil.h - - -# gzip driver object(s) -# -# GZIP_DRV_OBJ is used during both `single' and `multi' builds -# -GZIP_DRV_OBJ := $(OBJ_DIR)/ftgzip.$O - - -# gzip main source file -# -GZIP_DRV_SRC := $(GZIP_DIR)/ftgzip.c - - -# gzip support - object -# -$(GZIP_DRV_OBJ): $(GZIP_DRV_SRC) $(GZIP_DRV_SRCS) $(FREETYPE_H) - $(GZIP_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(GZIP_DRV_SRC)) - - -# update main driver object lists -# -DRV_OBJS_S += $(GZIP_DRV_OBJ) -DRV_OBJS_M += $(GZIP_DRV_OBJ) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/lzw/rules.mk b/reactos/lib/3rdparty/freetype/src/lzw/rules.mk deleted file mode 100644 index 5550a48d64b..00000000000 --- a/reactos/lib/3rdparty/freetype/src/lzw/rules.mk +++ /dev/null @@ -1,70 +0,0 @@ -# -# FreeType 2 LZW support configuration rules -# - - -# Copyright 2004, 2005, 2006 by -# Albert Chin-A-Young. -# -# Based on src/lzw/rules.mk, Copyright 2002 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# LZW driver directory -# -LZW_DIR := $(SRC_DIR)/lzw - - -# compilation flags for the driver -# -LZW_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(LZW_DIR)) - - -# LZW support sources (i.e., C files) -# -LZW_DRV_SRC := $(LZW_DIR)/ftlzw.c - -# LZW support headers -# -LZW_DRV_H := $(LZW_DIR)/ftzopen.h \ - $(LZW_DIR)/ftzopen.c - - -# LZW driver object(s) -# -# LZW_DRV_OBJ_M is used during `multi' builds -# LZW_DRV_OBJ_S is used during `single' builds -# -LZW_DRV_OBJ_M := $(OBJ_DIR)/ftlzw.$O -LZW_DRV_OBJ_S := $(OBJ_DIR)/ftlzw.$O - -# LZW support source file for single build -# -LZW_DRV_SRC_S := $(LZW_DIR)/ftlzw.c - - -# LZW support - single object -# -$(LZW_DRV_OBJ_S): $(LZW_DRV_SRC_S) $(LZW_DRV_SRC) $(FREETYPE_H) $(LZW_DRV_H) - $(LZW_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(LZW_DRV_SRC_S)) - - -# LZW support - multiple objects -# -$(OBJ_DIR)/%.$O: $(LZW_DIR)/%.c $(FREETYPE_H) $(LZW_DRV_H) - $(LZW_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(LZW_DRV_OBJ_S) -DRV_OBJS_M += $(LZW_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/otvalid/module.mk b/reactos/lib/3rdparty/freetype/src/otvalid/module.mk deleted file mode 100644 index 9cadde55e46..00000000000 --- a/reactos/lib/3rdparty/freetype/src/otvalid/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 otvalid module definition -# - - -# Copyright 2004, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += OTVALID_MODULE - -define OTVALID_MODULE -$(OPEN_DRIVER) FT_Module_Class, otv_module_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)otvalid $(ECHO_DRIVER_DESC)OpenType validation module$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/otvalid/rules.mk b/reactos/lib/3rdparty/freetype/src/otvalid/rules.mk deleted file mode 100644 index 53bd41e5e7d..00000000000 --- a/reactos/lib/3rdparty/freetype/src/otvalid/rules.mk +++ /dev/null @@ -1,78 +0,0 @@ -# -# FreeType 2 OpenType validation driver configuration rules -# - - -# Copyright 2004, 2007 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# OTV driver directory -# -OTV_DIR := $(SRC_DIR)/otvalid - - -# compilation flags for the driver -# -OTV_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(OTV_DIR)) - - -# OTV driver sources (i.e., C files) -# -OTV_DRV_SRC := $(OTV_DIR)/otvbase.c \ - $(OTV_DIR)/otvcommn.c \ - $(OTV_DIR)/otvgdef.c \ - $(OTV_DIR)/otvgpos.c \ - $(OTV_DIR)/otvgsub.c \ - $(OTV_DIR)/otvjstf.c \ - $(OTV_DIR)/otvmath.c \ - $(OTV_DIR)/otvmod.c - -# OTV driver headers -# -OTV_DRV_H := $(OTV_DIR)/otvalid.h \ - $(OTV_DIR)/otvcommn.h \ - $(OTV_DIR)/otverror.h \ - $(OTV_DIR)/otvgpos.h \ - $(OTV_DIR)/otvmod.h - - -# OTV driver object(s) -# -# OTV_DRV_OBJ_M is used during `multi' builds. -# OTV_DRV_OBJ_S is used during `single' builds. -# -OTV_DRV_OBJ_M := $(OTV_DRV_SRC:$(OTV_DIR)/%.c=$(OBJ_DIR)/%.$O) -OTV_DRV_OBJ_S := $(OBJ_DIR)/otvalid.$O - -# OTV driver source file for single build -# -OTV_DRV_SRC_S := $(OTV_DIR)/otvalid.c - - -# OTV driver - single object -# -$(OTV_DRV_OBJ_S): $(OTV_DRV_SRC_S) $(OTV_DRV_SRC) \ - $(FREETYPE_H) $(OTV_DRV_H) - $(OTV_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(OTV_DRV_SRC_S)) - - -# OTV driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(OTV_DIR)/%.c $(FREETYPE_H) $(OTV_DRV_H) - $(OTV_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(OTV_DRV_OBJ_S) -DRV_OBJS_M += $(OTV_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/pcf/module.mk b/reactos/lib/3rdparty/freetype/src/pcf/module.mk deleted file mode 100644 index df383ff0fbe..00000000000 --- a/reactos/lib/3rdparty/freetype/src/pcf/module.mk +++ /dev/null @@ -1,34 +0,0 @@ -# -# FreeType 2 PCF module definition -# - -# Copyright 2000, 2006 by -# Francesco Zappa Nardelli -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - - -FTMODULE_H_COMMANDS += PCF_DRIVER - -define PCF_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, pcf_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)pcf $(ECHO_DRIVER_DESC)pcf bitmap fonts$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/pcf/pcfread.c b/reactos/lib/3rdparty/freetype/src/pcf/pcfread.c index ee41c5df3ae..d936c58051e 100644 --- a/reactos/lib/3rdparty/freetype/src/pcf/pcfread.c +++ b/reactos/lib/3rdparty/freetype/src/pcf/pcfread.c @@ -1153,9 +1153,10 @@ THE SOFTWARE. root->num_faces = 1; root->face_index = 0; - root->face_flags = FT_FACE_FLAG_FIXED_SIZES | - FT_FACE_FLAG_HORIZONTAL | - FT_FACE_FLAG_FAST_GLYPHS; + + root->face_flags |= FT_FACE_FLAG_FIXED_SIZES | + FT_FACE_FLAG_HORIZONTAL | + FT_FACE_FLAG_FAST_GLYPHS; if ( face->accel.constantWidth ) root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; diff --git a/reactos/lib/3rdparty/freetype/src/pcf/rules.mk b/reactos/lib/3rdparty/freetype/src/pcf/rules.mk deleted file mode 100644 index 78641528fab..00000000000 --- a/reactos/lib/3rdparty/freetype/src/pcf/rules.mk +++ /dev/null @@ -1,79 +0,0 @@ -# -# FreeType 2 pcf driver configuration rules -# - - -# Copyright (C) 2000, 2001, 2003, 2008 by -# Francesco Zappa Nardelli -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - - -# pcf driver directory -# -PCF_DIR := $(SRC_DIR)/pcf - - -PCF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PCF_DIR)) - - -# pcf driver sources (i.e., C files) -# -PCF_DRV_SRC := $(PCF_DIR)/pcfdrivr.c \ - $(PCF_DIR)/pcfread.c \ - $(PCF_DIR)/pcfutil.c - -# pcf driver headers -# -PCF_DRV_H := $(PCF_DRV_SRC:%.c=%.h) \ - $(PCF_DIR)/pcf.h \ - $(PCF_DIR)/pcferror.h - -# pcf driver object(s) -# -# PCF_DRV_OBJ_M is used during `multi' builds -# PCF_DRV_OBJ_S is used during `single' builds -# -PCF_DRV_OBJ_M := $(PCF_DRV_SRC:$(PCF_DIR)/%.c=$(OBJ_DIR)/%.$O) -PCF_DRV_OBJ_S := $(OBJ_DIR)/pcf.$O - -# pcf driver source file for single build -# -PCF_DRV_SRC_S := $(PCF_DIR)/pcf.c - - -# pcf driver - single object -# -$(PCF_DRV_OBJ_S): $(PCF_DRV_SRC_S) $(PCF_DRV_SRC) $(FREETYPE_H) $(PCF_DRV_H) - $(PCF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PCF_DRV_SRC_S)) - - -# pcf driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(PCF_DIR)/%.c $(FREETYPE_H) $(PCF_DRV_H) - $(PCF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(PCF_DRV_OBJ_S) -DRV_OBJS_M += $(PCF_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/pfr/module.mk b/reactos/lib/3rdparty/freetype/src/pfr/module.mk deleted file mode 100644 index 8d1d28a9d23..00000000000 --- a/reactos/lib/3rdparty/freetype/src/pfr/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 PFR module definition -# - - -# Copyright 2002, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += PFR_DRIVER - -define PFR_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, pfr_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)pfr $(ECHO_DRIVER_DESC)PFR/TrueDoc font files with extension *.pfr$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/pfr/pfrload.c b/reactos/lib/3rdparty/freetype/src/pfr/pfrload.c index c19fceb1eef..97c130aad1c 100644 --- a/reactos/lib/3rdparty/freetype/src/pfr/pfrload.c +++ b/reactos/lib/3rdparty/freetype/src/pfr/pfrload.c @@ -4,7 +4,7 @@ /* */ /* FreeType PFR loader (body). */ /* */ -/* Copyright 2002-2005, 2007, 2009, 2010, 2013 by */ +/* Copyright 2002-2005, 2007, 2009, 2010, 2013, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -813,7 +813,6 @@ phy_font->ascent = PFR_NEXT_SHORT( q ); phy_font->descent = PFR_NEXT_SHORT( q ); phy_font->leading = PFR_NEXT_SHORT( q ); - q += 16; break; case 3: diff --git a/reactos/lib/3rdparty/freetype/src/pfr/pfrobjs.c b/reactos/lib/3rdparty/freetype/src/pfr/pfrobjs.c index 8d3cd2920b9..194d2df2d69 100644 --- a/reactos/lib/3rdparty/freetype/src/pfr/pfrobjs.c +++ b/reactos/lib/3rdparty/freetype/src/pfr/pfrobjs.c @@ -137,7 +137,8 @@ pfrface->face_index = face_index; pfrface->num_glyphs = phy_font->num_chars + 1; - pfrface->face_flags = FT_FACE_FLAG_SCALABLE; + + pfrface->face_flags |= FT_FACE_FLAG_SCALABLE; /* if all characters point to the same gps_offset 0, we */ /* assume that the font only contains bitmaps */ diff --git a/reactos/lib/3rdparty/freetype/src/pfr/rules.mk b/reactos/lib/3rdparty/freetype/src/pfr/rules.mk deleted file mode 100644 index 60b96c74154..00000000000 --- a/reactos/lib/3rdparty/freetype/src/pfr/rules.mk +++ /dev/null @@ -1,73 +0,0 @@ -# -# FreeType 2 PFR driver configuration rules -# - - -# Copyright 2002, 2003 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# pfr driver directory -# -PFR_DIR := $(SRC_DIR)/pfr - - -# compilation flags for the driver -# -PFR_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PFR_DIR)) - - -# pfr driver sources (i.e., C files) -# -PFR_DRV_SRC := $(PFR_DIR)/pfrload.c \ - $(PFR_DIR)/pfrgload.c \ - $(PFR_DIR)/pfrcmap.c \ - $(PFR_DIR)/pfrdrivr.c \ - $(PFR_DIR)/pfrsbit.c \ - $(PFR_DIR)/pfrobjs.c - -# pfr driver headers -# -PFR_DRV_H := $(PFR_DRV_SRC:%.c=%.h) \ - $(PFR_DIR)/pfrerror.h \ - $(PFR_DIR)/pfrtypes.h - - -# Pfr driver object(s) -# -# PFR_DRV_OBJ_M is used during `multi' builds -# PFR_DRV_OBJ_S is used during `single' builds -# -PFR_DRV_OBJ_M := $(PFR_DRV_SRC:$(PFR_DIR)/%.c=$(OBJ_DIR)/%.$O) -PFR_DRV_OBJ_S := $(OBJ_DIR)/pfr.$O - -# pfr driver source file for single build -# -PFR_DRV_SRC_S := $(PFR_DIR)/pfr.c - - -# pfr driver - single object -# -$(PFR_DRV_OBJ_S): $(PFR_DRV_SRC_S) $(PFR_DRV_SRC) $(FREETYPE_H) $(PFR_DRV_H) - $(PFR_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PFR_DRV_SRC_S)) - - -# pfr driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(PFR_DIR)/%.c $(FREETYPE_H) $(PFR_DRV_H) - $(PFR_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(PFR_DRV_OBJ_S) -DRV_OBJS_M += $(PFR_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/psaux/module.mk b/reactos/lib/3rdparty/freetype/src/psaux/module.mk deleted file mode 100644 index 42bf6f51999..00000000000 --- a/reactos/lib/3rdparty/freetype/src/psaux/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 PSaux module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += PSAUX_MODULE - -define PSAUX_MODULE -$(OPEN_DRIVER) FT_Module_Class, psaux_module_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)psaux $(ECHO_DRIVER_DESC)Postscript Type 1 & Type 2 helper module$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/psaux/psobjs.c b/reactos/lib/3rdparty/freetype/src/psaux/psobjs.c index dd976d3a96b..b4b7d45c334 100644 --- a/reactos/lib/3rdparty/freetype/src/psaux/psobjs.c +++ b/reactos/lib/3rdparty/freetype/src/psaux/psobjs.c @@ -4,7 +4,7 @@ /* */ /* Auxiliary functions for PostScript fonts (body). */ /* */ -/* Copyright 1996-2013 by */ +/* Copyright 1996-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -847,6 +847,8 @@ /* first character must be a delimiter or a part of a number */ /* NB: `values' can be NULL if we just want to skip the */ /* array; in this case we ignore `max_values' */ + /* */ + /* return number of successfully parsed values */ static FT_Int ps_tofixedarray( FT_Byte* *acur, @@ -1200,7 +1202,7 @@ result = ps_tofixedarray( &cur, limit, 4, temp, 0 ); - if ( result < 0 ) + if ( result < 4 ) { FT_ERROR(( "ps_parser_load_field:" " expected four integers in bounding box\n" )); @@ -1230,7 +1232,7 @@ { result = ps_tofixedarray( &cur, limit, max_objects, temp + i * max_objects, 0 ); - if ( result < 0 ) + if ( result < 0 || (FT_UInt)result < max_objects ) { FT_ERROR(( "ps_parser_load_field:" " expected %d integers in the %s subarray\n" diff --git a/reactos/lib/3rdparty/freetype/src/psaux/rules.mk b/reactos/lib/3rdparty/freetype/src/psaux/rules.mk deleted file mode 100644 index 7a1be37b692..00000000000 --- a/reactos/lib/3rdparty/freetype/src/psaux/rules.mk +++ /dev/null @@ -1,73 +0,0 @@ -# -# FreeType 2 PSaux driver configuration rules -# - - -# Copyright 1996-2000, 2002, 2003, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# PSAUX driver directory -# -PSAUX_DIR := $(SRC_DIR)/psaux - - -# compilation flags for the driver -# -PSAUX_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSAUX_DIR)) - - -# PSAUX driver sources (i.e., C files) -# -PSAUX_DRV_SRC := $(PSAUX_DIR)/psobjs.c \ - $(PSAUX_DIR)/t1decode.c \ - $(PSAUX_DIR)/t1cmap.c \ - $(PSAUX_DIR)/afmparse.c \ - $(PSAUX_DIR)/psconv.c \ - $(PSAUX_DIR)/psauxmod.c - -# PSAUX driver headers -# -PSAUX_DRV_H := $(PSAUX_DRV_SRC:%c=%h) \ - $(PSAUX_DIR)/psauxerr.h - - -# PSAUX driver object(s) -# -# PSAUX_DRV_OBJ_M is used during `multi' builds. -# PSAUX_DRV_OBJ_S is used during `single' builds. -# -PSAUX_DRV_OBJ_M := $(PSAUX_DRV_SRC:$(PSAUX_DIR)/%.c=$(OBJ_DIR)/%.$O) -PSAUX_DRV_OBJ_S := $(OBJ_DIR)/psaux.$O - -# PSAUX driver source file for single build -# -PSAUX_DRV_SRC_S := $(PSAUX_DIR)/psaux.c - - -# PSAUX driver - single object -# -$(PSAUX_DRV_OBJ_S): $(PSAUX_DRV_SRC_S) $(PSAUX_DRV_SRC) \ - $(FREETYPE_H) $(PSAUX_DRV_H) - $(PSAUX_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PSAUX_DRV_SRC_S)) - - -# PSAUX driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(PSAUX_DIR)/%.c $(FREETYPE_H) $(PSAUX_DRV_H) - $(PSAUX_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(PSAUX_DRV_OBJ_S) -DRV_OBJS_M += $(PSAUX_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/pshinter/module.mk b/reactos/lib/3rdparty/freetype/src/pshinter/module.mk deleted file mode 100644 index ed24eb7fa89..00000000000 --- a/reactos/lib/3rdparty/freetype/src/pshinter/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 PSHinter module definition -# - - -# Copyright 1996-2001, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += PSHINTER_MODULE - -define PSHINTER_MODULE -$(OPEN_DRIVER) FT_Module_Class, pshinter_module_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)pshinter $(ECHO_DRIVER_DESC)Postscript hinter module$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/pshinter/pshalgo.c b/reactos/lib/3rdparty/freetype/src/pshinter/pshalgo.c index 343472ddb38..644c76d1017 100644 --- a/reactos/lib/3rdparty/freetype/src/pshinter/pshalgo.c +++ b/reactos/lib/3rdparty/freetype/src/pshinter/pshalgo.c @@ -4,7 +4,7 @@ /* */ /* PostScript hinting algorithm (body). */ /* */ -/* Copyright 2001-2010, 2012, 2013 by */ +/* Copyright 2001-2010, 2012-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used */ @@ -1406,7 +1406,6 @@ point = first; before = point; - after = point; do { @@ -2079,8 +2078,6 @@ start = first; do { - point = first; - /* skip consecutive fitted points */ for (;;) { diff --git a/reactos/lib/3rdparty/freetype/src/pshinter/rules.mk b/reactos/lib/3rdparty/freetype/src/pshinter/rules.mk deleted file mode 100644 index 888ece10589..00000000000 --- a/reactos/lib/3rdparty/freetype/src/pshinter/rules.mk +++ /dev/null @@ -1,73 +0,0 @@ -# -# FreeType 2 PSHinter driver configuration rules -# - - -# Copyright 2001, 2003, 2011 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# PSHINTER driver directory -# -PSHINTER_DIR := $(SRC_DIR)/pshinter - - -# compilation flags for the driver -# -PSHINTER_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSHINTER_DIR)) - - -# PSHINTER driver sources (i.e., C files) -# -PSHINTER_DRV_SRC := $(PSHINTER_DIR)/pshalgo.c \ - $(PSHINTER_DIR)/pshglob.c \ - $(PSHINTER_DIR)/pshmod.c \ - $(PSHINTER_DIR)/pshpic.c \ - $(PSHINTER_DIR)/pshrec.c - - -# PSHINTER driver headers -# -PSHINTER_DRV_H := $(PSHINTER_DRV_SRC:%c=%h) \ - $(PSHINTER_DIR)/pshnterr.h - - -# PSHINTER driver object(s) -# -# PSHINTER_DRV_OBJ_M is used during `multi' builds. -# PSHINTER_DRV_OBJ_S is used during `single' builds. -# -PSHINTER_DRV_OBJ_M := $(PSHINTER_DRV_SRC:$(PSHINTER_DIR)/%.c=$(OBJ_DIR)/%.$O) -PSHINTER_DRV_OBJ_S := $(OBJ_DIR)/pshinter.$O - -# PSHINTER driver source file for single build -# -PSHINTER_DRV_SRC_S := $(PSHINTER_DIR)/pshinter.c - - -# PSHINTER driver - single object -# -$(PSHINTER_DRV_OBJ_S): $(PSHINTER_DRV_SRC_S) $(PSHINTER_DRV_SRC) \ - $(FREETYPE_H) $(PSHINTER_DRV_H) - $(PSHINTER_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PSHINTER_DRV_SRC_S)) - - -# PSHINTER driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(PSHINTER_DIR)/%.c $(FREETYPE_H) $(PSHINTER_DRV_H) - $(PSHINTER_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(PSHINTER_DRV_OBJ_S) -DRV_OBJS_M += $(PSHINTER_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/psnames/module.mk b/reactos/lib/3rdparty/freetype/src/psnames/module.mk deleted file mode 100644 index a6e908257cb..00000000000 --- a/reactos/lib/3rdparty/freetype/src/psnames/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 PSnames module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += PSNAMES_MODULE - -define PSNAMES_MODULE -$(OPEN_DRIVER) FT_Module_Class, psnames_module_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)psnames $(ECHO_DRIVER_DESC)Postscript & Unicode Glyph name handling$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/psnames/rules.mk b/reactos/lib/3rdparty/freetype/src/psnames/rules.mk deleted file mode 100644 index 4cd39a8ccf1..00000000000 --- a/reactos/lib/3rdparty/freetype/src/psnames/rules.mk +++ /dev/null @@ -1,71 +0,0 @@ -# -# FreeType 2 PSNames driver configuration rules -# - - -# Copyright 1996-2000, 2001, 2003, 2011 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# PSNames driver directory -# -PSNAMES_DIR := $(SRC_DIR)/psnames - - -# compilation flags for the driver -# -PSNAMES_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSNAMES_DIR)) - - -# PSNames driver sources (i.e., C files) -# -PSNAMES_DRV_SRC := $(PSNAMES_DIR)/psmodule.c \ - $(PSNAMES_DIR)/pspic.c - - -# PSNames driver headers -# -PSNAMES_DRV_H := $(PSNAMES_DRV_SRC:%.c=%.h) \ - $(PSNAMES_DIR)/psnamerr.h \ - $(PSNAMES_DIR)/pstables.h - - -# PSNames driver object(s) -# -# PSNAMES_DRV_OBJ_M is used during `multi' builds -# PSNAMES_DRV_OBJ_S is used during `single' builds -# -PSNAMES_DRV_OBJ_M := $(PSNAMES_DRV_SRC:$(PSNAMES_DIR)/%.c=$(OBJ_DIR)/%.$O) -PSNAMES_DRV_OBJ_S := $(OBJ_DIR)/psnames.$O - -# PSNames driver source file for single build -# -PSNAMES_DRV_SRC_S := $(PSNAMES_DIR)/psmodule.c - - -# PSNames driver - single object -# -$(PSNAMES_DRV_OBJ_S): $(PSNAMES_DRV_SRC_S) $(PSNAMES_DRV_SRC) \ - $(FREETYPE_H) $(PSNAMES_DRV_H) - $(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PSNAMES_DRV_SRC_S)) - - -# PSNames driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(PSNAMES_DIR)/%.c $(FREETYPE_H) $(PSNAMES_DRV_H) - $(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(PSNAMES_DRV_OBJ_S) -DRV_OBJS_M += $(PSNAMES_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/raster/ftraster.c b/reactos/lib/3rdparty/freetype/src/raster/ftraster.c index 8aa11133ab8..ddecc809cc2 100644 --- a/reactos/lib/3rdparty/freetype/src/raster/ftraster.c +++ b/reactos/lib/3rdparty/freetype/src/raster/ftraster.c @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph rasterizer (body). */ /* */ -/* Copyright 1996-2003, 2005, 2007-2013 by */ +/* Copyright 1996-2003, 2005, 2007-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -1874,7 +1874,7 @@ v_start.x = ( v_start.x + v_last.x ) / 2; v_start.y = ( v_start.y + v_last.y ) / 2; - v_last = v_start; + /* v_last = v_start; */ } point--; tags--; diff --git a/reactos/lib/3rdparty/freetype/src/raster/module.mk b/reactos/lib/3rdparty/freetype/src/raster/module.mk deleted file mode 100644 index cbff5df96ea..00000000000 --- a/reactos/lib/3rdparty/freetype/src/raster/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 renderer module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += RASTER_MODULE - -define RASTER_MODULE -$(OPEN_DRIVER) FT_Renderer_Class, ft_raster1_renderer_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)raster $(ECHO_DRIVER_DESC)monochrome bitmap renderer$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/raster/rules.mk b/reactos/lib/3rdparty/freetype/src/raster/rules.mk deleted file mode 100644 index 0e0b5e4ebd6..00000000000 --- a/reactos/lib/3rdparty/freetype/src/raster/rules.mk +++ /dev/null @@ -1,70 +0,0 @@ -# -# FreeType 2 renderer module build rules -# - - -# Copyright 1996-2000, 2001, 2003, 2008, 2009, 2011 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# raster driver directory -# -RASTER_DIR := $(SRC_DIR)/raster - -# compilation flags for the driver -# -RASTER_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(RASTER_DIR)) - - -# raster driver sources (i.e., C files) -# -RASTER_DRV_SRC := $(RASTER_DIR)/ftraster.c \ - $(RASTER_DIR)/ftrend1.c \ - $(RASTER_DIR)/rastpic.c - - -# raster driver headers -# -RASTER_DRV_H := $(RASTER_DRV_SRC:%.c=%.h) \ - $(RASTER_DIR)/rasterrs.h - - -# raster driver object(s) -# -# RASTER_DRV_OBJ_M is used during `multi' builds. -# RASTER_DRV_OBJ_S is used during `single' builds. -# -RASTER_DRV_OBJ_M := $(RASTER_DRV_SRC:$(RASTER_DIR)/%.c=$(OBJ_DIR)/%.$O) -RASTER_DRV_OBJ_S := $(OBJ_DIR)/raster.$O - -# raster driver source file for single build -# -RASTER_DRV_SRC_S := $(RASTER_DIR)/raster.c - - -# raster driver - single object -# -$(RASTER_DRV_OBJ_S): $(RASTER_DRV_SRC_S) $(RASTER_DRV_SRC) \ - $(FREETYPE_H) $(RASTER_DRV_H) - $(RASTER_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(RASTER_DRV_SRC_S)) - - -# raster driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(RASTER_DIR)/%.c $(FREETYPE_H) $(RASTER_DRV_H) - $(RASTER_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(RASTER_DRV_OBJ_S) -DRV_OBJS_M += $(RASTER_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/sfnt/module.mk b/reactos/lib/3rdparty/freetype/src/sfnt/module.mk deleted file mode 100644 index 95fd6a31437..00000000000 --- a/reactos/lib/3rdparty/freetype/src/sfnt/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 SFNT module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += SFNT_MODULE - -define SFNT_MODULE -$(OPEN_DRIVER) FT_Module_Class, sfnt_module_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)sfnt $(ECHO_DRIVER_DESC)helper module for TrueType & OpenType formats$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/sfnt/rules.mk b/reactos/lib/3rdparty/freetype/src/sfnt/rules.mk deleted file mode 100644 index a6c956ab657..00000000000 --- a/reactos/lib/3rdparty/freetype/src/sfnt/rules.mk +++ /dev/null @@ -1,78 +0,0 @@ -# -# FreeType 2 SFNT driver configuration rules -# - - -# Copyright 1996-2000, 2002-2007, 2009, 2011, 2013 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# SFNT driver directory -# -SFNT_DIR := $(SRC_DIR)/sfnt - - -# compilation flags for the driver -# -SFNT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SFNT_DIR)) - - -# SFNT driver sources (i.e., C files) -# -SFNT_DRV_SRC := $(SFNT_DIR)/ttload.c \ - $(SFNT_DIR)/ttmtx.c \ - $(SFNT_DIR)/ttcmap.c \ - $(SFNT_DIR)/ttsbit.c \ - $(SFNT_DIR)/ttpost.c \ - $(SFNT_DIR)/ttkern.c \ - $(SFNT_DIR)/ttbdf.c \ - $(SFNT_DIR)/sfobjs.c \ - $(SFNT_DIR)/sfdriver.c \ - $(SFNT_DIR)/sfntpic.c \ - $(SFNT_DIR)/pngshim.c - -# SFNT driver headers -# -SFNT_DRV_H := $(SFNT_DRV_SRC:%c=%h) \ - $(SFNT_DIR)/sferrors.h - - -# SFNT driver object(s) -# -# SFNT_DRV_OBJ_M is used during `multi' builds. -# SFNT_DRV_OBJ_S is used during `single' builds. -# -SFNT_DRV_OBJ_M := $(SFNT_DRV_SRC:$(SFNT_DIR)/%.c=$(OBJ_DIR)/%.$O) -SFNT_DRV_OBJ_S := $(OBJ_DIR)/sfnt.$O - -# SFNT driver source file for single build -# -SFNT_DRV_SRC_S := $(SFNT_DIR)/sfnt.c - - -# SFNT driver - single object -# -$(SFNT_DRV_OBJ_S): $(SFNT_DRV_SRC_S) $(SFNT_DRV_SRC) \ - $(FREETYPE_H) $(SFNT_DRV_H) - $(SFNT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(SFNT_DRV_SRC_S)) - - -# SFNT driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(SFNT_DIR)/%.c $(FREETYPE_H) $(SFNT_DRV_H) - $(SFNT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(SFNT_DRV_OBJ_S) -DRV_OBJS_M += $(SFNT_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/sfnt/sfdriver.c b/reactos/lib/3rdparty/freetype/src/sfnt/sfdriver.c index e0132c920cc..e4fcda5ec4a 100644 --- a/reactos/lib/3rdparty/freetype/src/sfnt/sfdriver.c +++ b/reactos/lib/3rdparty/freetype/src/sfnt/sfdriver.c @@ -4,7 +4,7 @@ /* */ /* High-level SFNT driver interface (body). */ /* */ -/* Copyright 1996-2007, 2009-2013 by */ +/* Copyright 1996-2007, 2009-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -266,7 +266,7 @@ { FT_Stream stream = face->name_table.stream; FT_String* r = (FT_String*)result; - FT_Byte* p = (FT_Byte*)name->string; + FT_Byte* p; if ( FT_STREAM_SEEK( name->stringOffset ) || diff --git a/reactos/lib/3rdparty/freetype/src/sfnt/ttcmap.c b/reactos/lib/3rdparty/freetype/src/sfnt/ttcmap.c index 9b7856ba589..c717f5ffcbe 100644 --- a/reactos/lib/3rdparty/freetype/src/sfnt/ttcmap.c +++ b/reactos/lib/3rdparty/freetype/src/sfnt/ttcmap.c @@ -4,7 +4,7 @@ /* */ /* TrueType character mapping table (cmap) support (body). */ /* */ -/* Copyright 2002-2010, 2012, 2013 by */ +/* Copyright 2002-2010, 2012-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -88,10 +88,16 @@ tt_cmap0_validate( FT_Byte* table, FT_Validator valid ) { - FT_Byte* p = table + 2; - FT_UInt length = TT_NEXT_USHORT( p ); + FT_Byte* p; + FT_UInt length; + if ( table + 2 + 2 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; /* skip format */ + length = TT_NEXT_USHORT( p ); + if ( table + length > valid->limit || length < 262 ) FT_INVALID_TOO_SHORT; @@ -279,13 +285,20 @@ tt_cmap2_validate( FT_Byte* table, FT_Validator valid ) { - FT_Byte* p = table + 2; /* skip format */ - FT_UInt length = TT_PEEK_USHORT( p ); - FT_UInt n, max_subs; - FT_Byte* keys; /* keys table */ - FT_Byte* subs; /* sub-headers */ - FT_Byte* glyph_ids; /* glyph ID array */ + FT_Byte* p; + FT_UInt length; + FT_UInt n, max_subs; + FT_Byte* keys; /* keys table */ + FT_Byte* subs; /* sub-headers */ + FT_Byte* glyph_ids; /* glyph ID array */ + + + if ( table + 2 + 2 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; /* skip format */ + length = TT_NEXT_USHORT( p ); if ( table + length > valid->limit || length < 6 + 512 ) FT_INVALID_TOO_SHORT; @@ -818,13 +831,20 @@ tt_cmap4_validate( FT_Byte* table, FT_Validator valid ) { - FT_Byte* p = table + 2; /* skip format */ - FT_UInt length = TT_NEXT_USHORT( p ); + FT_Byte* p; + FT_UInt length; + FT_Byte *ends, *starts, *offsets, *deltas, *glyph_ids; FT_UInt num_segs; FT_Error error = FT_Err_Ok; + if ( table + 2 + 2 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; /* skip format */ + length = TT_NEXT_USHORT( p ); + if ( length < 16 ) FT_INVALID_TOO_SHORT; @@ -2044,9 +2064,9 @@ tt_cmap12_validate( FT_Byte* table, FT_Validator valid ) { - FT_Byte* p; - FT_ULong length; - FT_ULong num_groups; + FT_Byte* p; + FT_ULong length; + FT_ULong num_groups; if ( table + 16 > valid->limit ) @@ -2110,8 +2130,6 @@ char_code = cmap->cur_charcode + 1; - n = cmap->cur_group; - for ( n = cmap->cur_group; n < cmap->num_groups; n++ ) { p = cmap->cmap.data + 16 + 12 * n; @@ -2434,8 +2452,6 @@ char_code = cmap->cur_charcode + 1; - n = cmap->cur_group; - for ( n = cmap->cur_group; n < cmap->num_groups; n++ ) { p = cmap->cmap.data + 16 + 12 * n; @@ -2758,11 +2774,18 @@ tt_cmap14_validate( FT_Byte* table, FT_Validator valid ) { - FT_Byte* p = table + 2; - FT_ULong length = TT_NEXT_ULONG( p ); - FT_ULong num_selectors = TT_NEXT_ULONG( p ); + FT_Byte* p; + FT_ULong length; + FT_ULong num_selectors; + if ( table + 2 + 4 + 4 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; + length = TT_NEXT_ULONG( p ); + num_selectors = TT_NEXT_ULONG( p ); + if ( length > (FT_ULong)( valid->limit - table ) || length < 10 + 11 * num_selectors ) FT_INVALID_TOO_SHORT; diff --git a/reactos/lib/3rdparty/freetype/src/sfnt/ttsbit.c b/reactos/lib/3rdparty/freetype/src/sfnt/ttsbit.c index 7469ff1ecbc..8ff7b9d6ad8 100644 --- a/reactos/lib/3rdparty/freetype/src/sfnt/ttsbit.c +++ b/reactos/lib/3rdparty/freetype/src/sfnt/ttsbit.c @@ -4,7 +4,7 @@ /* */ /* TrueType and OpenType embedded bitmap support (body). */ /* */ -/* Copyright 2005-2009, 2013 by */ +/* Copyright 2005-2009, 2013, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* Copyright 2013 by Google, Inc. */ @@ -967,7 +967,6 @@ break; case 2: - case 5: case 7: { /* Don't trust `glyph_format'. For example, Apple's main Korean */ @@ -997,6 +996,10 @@ } break; + case 5: + loader = tt_sbit_decoder_load_bit_aligned; + break; + case 8: if ( p + 1 > p_limit ) goto Fail; @@ -1013,10 +1016,11 @@ case 19: /* metrics in EBLC, PNG image data */ #ifdef FT_CONFIG_OPTION_USE_PNG loader = tt_sbit_decoder_load_png; + break; #else error = FT_THROW( Unimplemented_Feature ); + goto Fail; #endif /* FT_CONFIG_OPTION_USE_PNG */ - break; default: error = FT_THROW( Invalid_Table ); @@ -1243,11 +1247,11 @@ FT_Bitmap *map, TT_SBit_MetricsRec *metrics ) { - FT_UInt sbix_pos, strike_offset, glyph_start, glyph_end; - FT_ULong table_size, data_size; - FT_Int originOffsetX, originOffsetY; - FT_Tag graphicType; - FT_Int recurse_depth = 0; + FT_UInt sbix_pos, strike_offset, glyph_start, glyph_end; + FT_ULong table_size; + FT_Int originOffsetX, originOffsetY; + FT_Tag graphicType; + FT_Int recurse_depth = 0; FT_Error error; FT_Byte* p; @@ -1298,7 +1302,6 @@ originOffsetY = FT_GET_SHORT(); graphicType = FT_GET_TAG4(); - data_size = glyph_end - glyph_start - 8; switch ( graphicType ) { @@ -1322,7 +1325,7 @@ metrics, stream->memory, stream->cursor, - data_size, + glyph_end - glyph_start - 8, TRUE ); #else error = FT_THROW( Unimplemented_Feature ); diff --git a/reactos/lib/3rdparty/freetype/src/smooth/ftgrays.c b/reactos/lib/3rdparty/freetype/src/smooth/ftgrays.c index 2c51e9f6ebf..425911a964f 100644 --- a/reactos/lib/3rdparty/freetype/src/smooth/ftgrays.c +++ b/reactos/lib/3rdparty/freetype/src/smooth/ftgrays.c @@ -4,7 +4,7 @@ /* */ /* A new `perfect' anti-aliasing renderer (body). */ /* */ -/* Copyright 2000-2003, 2005-2013 by */ +/* Copyright 2000-2003, 2005-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -1364,7 +1364,6 @@ typedef ptrdiff_t FT_PtrDist; ras.num_gray_spans = 0; ras.span_y = (int)y; - count = 0; span = ras.gray_spans; } else diff --git a/reactos/lib/3rdparty/freetype/src/smooth/module.mk b/reactos/lib/3rdparty/freetype/src/smooth/module.mk deleted file mode 100644 index 47f6c040764..00000000000 --- a/reactos/lib/3rdparty/freetype/src/smooth/module.mk +++ /dev/null @@ -1,27 +0,0 @@ -# -# FreeType 2 smooth renderer module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += SMOOTH_RENDERER - -define SMOOTH_RENDERER -$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_renderer_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer$(ECHO_DRIVER_DONE) -$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_lcd_renderer_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer for LCDs$(ECHO_DRIVER_DONE) -$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_lcdv_renderer_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer for vertical LCDs$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/smooth/rules.mk b/reactos/lib/3rdparty/freetype/src/smooth/rules.mk deleted file mode 100644 index 88d0aa53ac2..00000000000 --- a/reactos/lib/3rdparty/freetype/src/smooth/rules.mk +++ /dev/null @@ -1,70 +0,0 @@ -# -# FreeType 2 smooth renderer module build rules -# - - -# Copyright 1996-2000, 2001, 2003, 2011 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# smooth driver directory -# -SMOOTH_DIR := $(SRC_DIR)/smooth - -# compilation flags for the driver -# -SMOOTH_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SMOOTH_DIR)) - - -# smooth driver sources (i.e., C files) -# -SMOOTH_DRV_SRC := $(SMOOTH_DIR)/ftgrays.c \ - $(SMOOTH_DIR)/ftsmooth.c \ - $(SMOOTH_DIR)/ftspic.c - - -# smooth driver headers -# -SMOOTH_DRV_H := $(SMOOTH_DRV_SRC:%c=%h) \ - $(SMOOTH_DIR)/ftsmerrs.h - - -# smooth driver object(s) -# -# SMOOTH_DRV_OBJ_M is used during `multi' builds. -# SMOOTH_DRV_OBJ_S is used during `single' builds. -# -SMOOTH_DRV_OBJ_M := $(SMOOTH_DRV_SRC:$(SMOOTH_DIR)/%.c=$(OBJ_DIR)/%.$O) -SMOOTH_DRV_OBJ_S := $(OBJ_DIR)/smooth.$O - -# smooth driver source file for single build -# -SMOOTH_DRV_SRC_S := $(SMOOTH_DIR)/smooth.c - - -# smooth driver - single object -# -$(SMOOTH_DRV_OBJ_S): $(SMOOTH_DRV_SRC_S) $(SMOOTH_DRV_SRC) \ - $(FREETYPE_H) $(SMOOTH_DRV_H) - $(SMOOTH_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(SMOOTH_DRV_SRC_S)) - - -# smooth driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(SMOOTH_DIR)/%.c $(FREETYPE_H) $(SMOOTH_DRV_H) - $(SMOOTH_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(SMOOTH_DRV_OBJ_S) -DRV_OBJS_M += $(SMOOTH_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/tools/afblue.pl b/reactos/lib/3rdparty/freetype/src/tools/afblue.pl index 774438f84a7..58aa2a0555d 100644 --- a/reactos/lib/3rdparty/freetype/src/tools/afblue.pl +++ b/reactos/lib/3rdparty/freetype/src/tools/afblue.pl @@ -5,7 +5,7 @@ # # Process a blue zone character data file. # -# Copyright 2013 by +# Copyright 2013, 2014 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, @@ -17,7 +17,7 @@ use strict; use warnings; use English '-no_match_vars'; -use open ':std', ':locale'; +use open ':std', ':encoding(UTF-8)'; my $prog = $PROGRAM_NAME; @@ -71,7 +71,7 @@ my $whitespace_only_re = qr/ ^ \s* $ /x; # [<ws>] '"' <string> '"' [<ws>] '\n' (<string> doesn't contain newlines) my $string_re = qr/ ^ \s* - " ( (?: [^"\\]++ | \\. )*+ ) " + " ( (?> (?: (?> [^"\\]+ ) | \\. )* ) ) " \s* $ /x; # [<ws>] '{' <block> '}' [<ws>] '\n' (<block> can contain newlines) @@ -194,7 +194,7 @@ sub convert_literal sub aux_name { - return "af_blue_" . $num_sections. "_" . join('_', reverse @name_stack); + return "af_blue_" . $num_sections. "_" . join('_', @name_stack); } @@ -210,7 +210,7 @@ sub aux_name_next sub enum_val_string { - # Build string which holds code to save the current offset in an + # Build string that holds code to save the current offset in an # enumeration element. my $aux = shift; @@ -288,7 +288,7 @@ while (<DATA>) { # Having preprocessor conditionals complicates the computation of # correct offset values. We have to introduce auxiliary enumeration - # elements with the name `af_blue_<s>_<n1>_<n2>_...' which store + # elements with the name `af_blue_<s>_<n1>_<n2>_...' that store # offsets to be used in conditional clauses. `<s>' is the number of # sections seen so far, `<n1>' is the number of `#if' and `#endif' # conditionals seen so far in the topmost level, `<n2>' the number of @@ -344,24 +344,27 @@ while (<DATA>) $curr_offset = 0; } - elsif (/ ^ \# \s* endif /x) + elsif (/ ^ (\# \s*) endif /x) { my $prev_else = pop @else_stack; Die("unbalanced #endif") unless defined($prev_else); pop @name_stack; - $name_stack[$#name_stack]++; # If there is no else-clause for an if-clause, we add one. This is # necessary to have correct offsets. if (!$prev_else) { - push @{$diversions{$curr_enum}}, enum_val_string(aux_name()) - . "#else\n"; + # Use amount of whitespace from `endif'. + push @{$diversions{$curr_enum}}, enum_val_string(aux_name_next()) + . $1 . "else\n"; + $last_aux = aux_name(); $curr_offset = 0; } + $name_stack[$#name_stack]++; + push @{$diversions{$curr_enum}}, enum_val_string(aux_name()); $last_aux = aux_name(); diff --git a/reactos/lib/3rdparty/freetype/src/truetype/module.mk b/reactos/lib/3rdparty/freetype/src/truetype/module.mk deleted file mode 100644 index baee81a7730..00000000000 --- a/reactos/lib/3rdparty/freetype/src/truetype/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 TrueType module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += TRUETYPE_DRIVER - -define TRUETYPE_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, tt_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)truetype $(ECHO_DRIVER_DESC)Windows/Mac font files with extension *.ttf or *.ttc$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/truetype/rules.mk b/reactos/lib/3rdparty/freetype/src/truetype/rules.mk deleted file mode 100644 index d4b69f578be..00000000000 --- a/reactos/lib/3rdparty/freetype/src/truetype/rules.mk +++ /dev/null @@ -1,74 +0,0 @@ -# -# FreeType 2 TrueType driver configuration rules -# - - -# Copyright 1996-2001, 2003-2004, 2011-2012 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# TrueType driver directory -# -TT_DIR := $(SRC_DIR)/truetype - - -# compilation flags for the driver -# -TT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(TT_DIR)) - - -# TrueType driver sources (i.e., C files) -# -TT_DRV_SRC := $(TT_DIR)/ttdriver.c \ - $(TT_DIR)/ttgload.c \ - $(TT_DIR)/ttgxvar.c \ - $(TT_DIR)/ttinterp.c \ - $(TT_DIR)/ttobjs.c \ - $(TT_DIR)/ttpic.c \ - $(TT_DIR)/ttpload.c \ - $(TT_DIR)/ttsubpix.c - -# TrueType driver headers -# -TT_DRV_H := $(TT_DRV_SRC:%.c=%.h) \ - $(TT_DIR)/tterrors.h - - -# TrueType driver object(s) -# -# TT_DRV_OBJ_M is used during `multi' builds -# TT_DRV_OBJ_S is used during `single' builds -# -TT_DRV_OBJ_M := $(TT_DRV_SRC:$(TT_DIR)/%.c=$(OBJ_DIR)/%.$O) -TT_DRV_OBJ_S := $(OBJ_DIR)/truetype.$O - -# TrueType driver source file for single build -# -TT_DRV_SRC_S := $(TT_DIR)/truetype.c - - -# TrueType driver - single object -# -$(TT_DRV_OBJ_S): $(TT_DRV_SRC_S) $(TT_DRV_SRC) $(FREETYPE_H) $(TT_DRV_H) - $(TT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(TT_DRV_SRC_S)) - - -# driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(TT_DIR)/%.c $(FREETYPE_H) $(TT_DRV_H) - $(TT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(TT_DRV_OBJ_S) -DRV_OBJS_M += $(TT_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/truetype/ttgload.c b/reactos/lib/3rdparty/freetype/src/truetype/ttgload.c index 0d74248b80f..5f676a2ef01 100644 --- a/reactos/lib/3rdparty/freetype/src/truetype/ttgload.c +++ b/reactos/lib/3rdparty/freetype/src/truetype/ttgload.c @@ -738,7 +738,6 @@ #endif TT_GlyphZone zone = &loader->zone; - FT_Pos origin; #ifdef TT_USE_BYTECODE_INTERPRETER FT_UInt n_ins; @@ -755,14 +754,7 @@ loader->glyph->control_len )); } n_ins = (FT_UInt)( loader->glyph->control_len ); -#endif - origin = zone->cur[zone->n_points - 4].x; - origin = FT_PIX_ROUND( origin ) - origin; - if ( origin ) - translate_array( zone->n_points, zone->cur, origin, 0 ); - -#ifdef TT_USE_BYTECODE_INTERPRETER /* save original point position in org */ if ( n_ins > 0 ) FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points ); @@ -1083,9 +1075,9 @@ if ( !x && !y ) return FT_Err_Ok; - /* Use a default value dependent on */ - /* TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED. This is useful for old TT */ - /* fonts which don't set the xxx_COMPONENT_OFFSET bit. */ + /* Use a default value dependent on */ + /* TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED. This is useful for old */ + /* TT fonts which don't set the xxx_COMPONENT_OFFSET bit. */ if ( have_scale && #ifdef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED @@ -1097,10 +1089,10 @@ #if 0 - /*************************************************************************/ - /* */ - /* This algorithm is what Apple documents. But it doesn't work. */ - /* */ + /*******************************************************************/ + /* */ + /* This algorithm is what Apple documents. But it doesn't work. */ + /* */ int a = subglyph->transform.xx > 0 ? subglyph->transform.xx : -subglyph->transform.xx; int b = subglyph->transform.yx > 0 ? subglyph->transform.yx @@ -1120,12 +1112,12 @@ x = FT_MulFix( x, m ); y = FT_MulFix( y, n ); -#else /* 0 */ +#else /* 1 */ - /*************************************************************************/ - /* */ - /* This algorithm is a guess and works much better than the above. */ - /* */ + /*******************************************************************/ + /* */ + /* This algorithm is a guess and works much better than the above. */ + /* */ FT_Fixed mac_xscale = FT_Hypot( subglyph->transform.xx, subglyph->transform.xy ); FT_Fixed mac_yscale = FT_Hypot( subglyph->transform.yy, @@ -1135,7 +1127,7 @@ x = FT_MulFix( x, mac_xscale ); y = FT_MulFix( y, mac_yscale ); -#endif /* 0 */ +#endif /* 1 */ } @@ -1286,8 +1278,8 @@ * pp1 = (round(xmin - lsb), 0) , * pp2 = (round(pp1 + aw), 0) . * - * Note that the rounding to the grid is not documented currently in the - * specification. + * Note that the rounding to the grid (in the device space) is not + * documented currently in the specification. * * However, the specification lacks the precise definition of vertical * phantom points. Greg Hitchcock provided the following explanation. @@ -1360,12 +1352,10 @@ #define TT_LOADER_SET_PP( loader ) \ do \ { \ - FT_Bool subpixel_ = loader->exec \ - ? loader->exec->subpixel_hinting \ - : 0; \ - FT_Bool grayscale_ = loader->exec \ - ? loader->exec->grayscale_hinting \ - : 0; \ + FT_Bool subpixel_ = loader->exec ? loader->exec->subpixel \ + : 0; \ + FT_Bool grayscale_ = loader->exec ? loader->exec->grayscale \ + : 0; \ FT_Bool use_aw_2_ = (FT_Bool)( subpixel_ && grayscale_ ); \ \ \ @@ -1373,6 +1363,7 @@ (loader)->pp1.y = 0; \ (loader)->pp2.x = (loader)->pp1.x + (loader)->advance; \ (loader)->pp2.y = 0; \ + \ (loader)->pp3.x = use_aw_2_ ? (loader)->advance / 2 : 0; \ (loader)->pp3.y = (loader)->bbox.yMax + (loader)->top_bearing; \ (loader)->pp4.x = use_aw_2_ ? (loader)->advance / 2 : 0; \ @@ -1388,6 +1379,7 @@ (loader)->pp1.y = 0; \ (loader)->pp2.x = (loader)->pp1.x + (loader)->advance; \ (loader)->pp2.y = 0; \ + \ (loader)->pp3.x = 0; \ (loader)->pp3.y = (loader)->bbox.yMax + (loader)->top_bearing; \ (loader)->pp4.x = 0; \ @@ -1567,21 +1559,32 @@ if ( error ) goto Exit; - loader->pp1.x += deltas[0].x; loader->pp1.y += deltas[0].y; - loader->pp2.x += deltas[1].x; loader->pp2.y += deltas[1].y; - loader->pp3.x += deltas[2].x; loader->pp3.y += deltas[2].y; - loader->pp4.x += deltas[3].x; loader->pp4.y += deltas[3].y; + loader->pp1.x += deltas[0].x; + loader->pp1.y += deltas[0].y; + loader->pp2.x += deltas[1].x; + loader->pp2.y += deltas[1].y; + + loader->pp3.x += deltas[2].x; + loader->pp3.y += deltas[2].y; + loader->pp4.x += deltas[3].x; + loader->pp4.y += deltas[3].y; FT_FREE( deltas ); } -#endif +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + /* scale phantom points, if necessary; */ + /* they get rounded in `TT_Hint_Glyph' */ if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ) { loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale ); loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale ); + /* pp1.y and pp2.y are always zero */ + + loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale ); loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale ); + loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale ); loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale ); } @@ -1589,8 +1592,8 @@ goto Exit; } - /* must initialize points before (possibly) overriding */ - /* glyph metrics from the incremental interface */ + /* must initialize phantom points before (possibly) overriding */ + /* glyph metrics from the incremental interface */ TT_LOADER_SET_PP( loader ); #ifdef FT_CONFIG_OPTION_INCREMENTAL @@ -1663,7 +1666,7 @@ face, glyph_index, &deltas, - gloader->current.num_subglyphs + 4 )) != 0 ) + gloader->current.num_subglyphs + 4 ) ) != 0 ) goto Exit; subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs; @@ -1681,21 +1684,32 @@ } } - loader->pp1.x += deltas[i + 0].x; loader->pp1.y += deltas[i + 0].y; - loader->pp2.x += deltas[i + 1].x; loader->pp2.y += deltas[i + 1].y; - loader->pp3.x += deltas[i + 2].x; loader->pp3.y += deltas[i + 2].y; - loader->pp4.x += deltas[i + 3].x; loader->pp4.y += deltas[i + 3].y; + loader->pp1.x += deltas[i + 0].x; + loader->pp1.y += deltas[i + 0].y; + loader->pp2.x += deltas[i + 1].x; + loader->pp2.y += deltas[i + 1].y; + + loader->pp3.x += deltas[i + 2].x; + loader->pp3.y += deltas[i + 2].y; + loader->pp4.x += deltas[i + 3].x; + loader->pp4.y += deltas[i + 3].y; FT_FREE( deltas ); } #endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + /* scale phantom points, if necessary; */ + /* they get rounded in `TT_Hint_Glyph' */ if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ) { loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale ); loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale ); + /* pp1.y and pp2.y are always zero */ + + loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale ); loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale ); + loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale ); loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale ); } @@ -1755,6 +1769,7 @@ /* restore subglyph pointer */ subglyph = gloader->base.subglyphs + num_base_subgs + n; + /* restore phantom points if necessary */ if ( !( subglyph->flags & USE_MY_METRICS ) ) { loader->pp1 = pp[0]; @@ -2091,8 +2106,7 @@ #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face ); - FT_Bool subpixel_hinting = FALSE; - FT_Bool grayscale_hinting = TRUE; + FT_Bool subpixel = FALSE; #if 0 /* not used yet */ @@ -2125,24 +2139,24 @@ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 ) { - subpixel_hinting = FT_BOOL( ( FT_LOAD_TARGET_MODE( load_flags ) - != FT_RENDER_MODE_MONO ) && - SPH_OPTION_SET_SUBPIXEL ); + subpixel = FT_BOOL( ( FT_LOAD_TARGET_MODE( load_flags ) != + FT_RENDER_MODE_MONO ) && + SPH_OPTION_SET_SUBPIXEL ); - if ( subpixel_hinting ) - grayscale = grayscale_hinting = FALSE; + if ( subpixel ) + grayscale = FALSE; else if ( SPH_OPTION_SET_GRAYSCALE ) { - grayscale = grayscale_hinting = TRUE; - subpixel_hinting = FALSE; + grayscale = TRUE; + subpixel = FALSE; } else - grayscale = grayscale_hinting = FALSE; + grayscale = FALSE; if ( FT_IS_TRICKY( glyph->face ) ) - subpixel_hinting = grayscale_hinting = FALSE; + subpixel = FALSE; - exec->ignore_x_mode = subpixel_hinting || grayscale_hinting; + exec->ignore_x_mode = subpixel || grayscale; exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION; if ( exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 ) exec->rasterizer_version = TT_INTERPRETER_VERSION_35; @@ -2185,24 +2199,24 @@ { /* a change from mono to subpixel rendering (and vice versa) */ /* requires a re-execution of the CVT program */ - if ( subpixel_hinting != exec->subpixel_hinting ) + if ( subpixel != exec->subpixel ) { FT_TRACE4(( "tt_loader_init: subpixel hinting change," " re-executing `prep' table\n" )); - exec->subpixel_hinting = subpixel_hinting; - reexecute = TRUE; + exec->subpixel = subpixel; + reexecute = TRUE; } /* a change from mono to grayscale rendering (and vice versa) */ /* requires a re-execution of the CVT program */ - if ( grayscale != exec->grayscale_hinting ) + if ( grayscale != exec->grayscale ) { FT_TRACE4(( "tt_loader_init: grayscale hinting change," " re-executing `prep' table\n" )); - exec->grayscale_hinting = grayscale_hinting; - reexecute = TRUE; + exec->grayscale = grayscale; + reexecute = TRUE; } } else @@ -2332,8 +2346,6 @@ TT_LoaderRec loader; - error = FT_Err_Ok; - FT_TRACE1(( "TT_Load_Glyph: glyph index %d\n", glyph_index )); #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS diff --git a/reactos/lib/3rdparty/freetype/src/truetype/ttinterp.c b/reactos/lib/3rdparty/freetype/src/truetype/ttinterp.c index 92e6d43b693..56e8fa7e22c 100644 --- a/reactos/lib/3rdparty/freetype/src/truetype/ttinterp.c +++ b/reactos/lib/3rdparty/freetype/src/truetype/ttinterp.c @@ -4,7 +4,7 @@ /* */ /* TrueType bytecode interpreter (body). */ /* */ -/* Copyright 1996-2013 */ +/* Copyright 1996-2014 */ /* by David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -796,16 +796,13 @@ FT_EXPORT_DEF( TT_ExecContext ) TT_New_Context( TT_Driver driver ) { - TT_ExecContext exec; - FT_Memory memory; + FT_Memory memory = driver->root.root.memory; - memory = driver->root.root.memory; - exec = driver->context; - if ( !driver->context ) { - FT_Error error; + FT_Error error; + TT_ExecContext exec; /* allocate object */ @@ -1470,7 +1467,7 @@ __asm__ __volatile__ ( "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */ "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */ -#ifdef __clang__ +#if defined( __clang__ ) && defined( __thumb2__ ) "add.w %0, %0, #0x2000\n\t" /* %0 += 0x2000 */ #else "add %0, %0, #0x2000\n\t" /* %0 += 0x2000 */ @@ -7169,7 +7166,7 @@ org_dist = CUR_fast_dualproj( &vec ); } - cur_dist = CUR_Func_project ( &CUR.zp2.cur[point], cur_base ); + cur_dist = CUR_Func_project( &CUR.zp2.cur[point], cur_base ); if ( org_dist ) { @@ -7180,14 +7177,20 @@ /* This is the same as what MS does for the invalid case: */ /* */ /* delta = (Original_Pt - Original_RP1) - */ - /* (Current_Pt - Current_RP1) */ + /* (Current_Pt - Current_RP1) ; */ /* */ /* In FreeType speak: */ /* */ - /* new_dist = cur_dist - */ - /* org_dist - cur_dist; */ + /* delta = org_dist - cur_dist . */ + /* */ + /* We move `point' by `new_dist - cur_dist' after leaving */ + /* this block, thus we have */ + /* */ + /* new_dist - cur_dist = delta , */ + /* new_dist - cur_dist = org_dist - cur_dist , */ + /* new_dist = org_dist . */ - new_dist = -org_dist; + new_dist = org_dist; } } else @@ -7820,13 +7823,6 @@ CUR.ignore_x_mode && CUR.rasterizer_version >= TT_INTERPRETER_VERSION_35 ) { - /********************************/ - /* HINTING FOR GRAYSCALE */ - /* Selector Bit: 5 */ - /* Return Bit(s): 12 */ - /* */ - if ( ( args[0] & 32 ) != 0 && CUR.grayscale_hinting ) - K |= 1 << 12; if ( CUR.rasterizer_version >= 37 ) { @@ -7835,7 +7831,7 @@ /* Selector Bit: 6 */ /* Return Bit(s): 13 */ /* */ - if ( ( args[0] & 64 ) != 0 && CUR.subpixel_hinting ) + if ( ( args[0] & 64 ) != 0 && CUR.subpixel ) K |= 1 << 13; /********************************/ diff --git a/reactos/lib/3rdparty/freetype/src/truetype/ttinterp.h b/reactos/lib/3rdparty/freetype/src/truetype/ttinterp.h index b3916acb699..1d8825d3b00 100644 --- a/reactos/lib/3rdparty/freetype/src/truetype/ttinterp.h +++ b/reactos/lib/3rdparty/freetype/src/truetype/ttinterp.h @@ -263,12 +263,10 @@ FT_BEGIN_HEADER #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING TT_Round_Func func_round_sphn; /* subpixel rounding function */ - FT_Bool grayscale_hinting; /* Using grayscale hinting? */ - FT_Bool subpixel_hinting; /* Using subpixel hinting? */ - FT_Bool native_hinting; /* Using native hinting? */ + FT_Bool subpixel; /* Using subpixel hinting? */ FT_Bool ignore_x_mode; /* Standard rendering mode for */ /* subpixel hinting. On if gray */ - /* or subpixel hinting is on ) */ + /* or subpixel hinting is on. */ /* The following 4 aren't fully implemented but here for MS rasterizer */ /* compatibility. */ diff --git a/reactos/lib/3rdparty/freetype/src/type1/module.mk b/reactos/lib/3rdparty/freetype/src/type1/module.mk deleted file mode 100644 index ade0210d76c..00000000000 --- a/reactos/lib/3rdparty/freetype/src/type1/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 Type1 module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += TYPE1_DRIVER - -define TYPE1_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, t1_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)type1 $(ECHO_DRIVER_DESC)Postscript font files with extension *.pfa or *.pfb$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/type1/rules.mk b/reactos/lib/3rdparty/freetype/src/type1/rules.mk deleted file mode 100644 index 15087b03044..00000000000 --- a/reactos/lib/3rdparty/freetype/src/type1/rules.mk +++ /dev/null @@ -1,73 +0,0 @@ -# -# FreeType 2 Type1 driver configuration rules -# - - -# Copyright 1996-2000, 2001, 2003 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# Type1 driver directory -# -T1_DIR := $(SRC_DIR)/type1 - - -# compilation flags for the driver -# -T1_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(T1_DIR)) - - -# Type1 driver sources (i.e., C files) -# -T1_DRV_SRC := $(T1_DIR)/t1parse.c \ - $(T1_DIR)/t1load.c \ - $(T1_DIR)/t1driver.c \ - $(T1_DIR)/t1afm.c \ - $(T1_DIR)/t1gload.c \ - $(T1_DIR)/t1objs.c - -# Type1 driver headers -# -T1_DRV_H := $(T1_DRV_SRC:%.c=%.h) \ - $(T1_DIR)/t1tokens.h \ - $(T1_DIR)/t1errors.h - - -# Type1 driver object(s) -# -# T1_DRV_OBJ_M is used during `multi' builds -# T1_DRV_OBJ_S is used during `single' builds -# -T1_DRV_OBJ_M := $(T1_DRV_SRC:$(T1_DIR)/%.c=$(OBJ_DIR)/%.$O) -T1_DRV_OBJ_S := $(OBJ_DIR)/type1.$O - -# Type1 driver source file for single build -# -T1_DRV_SRC_S := $(T1_DIR)/type1.c - - -# Type1 driver - single object -# -$(T1_DRV_OBJ_S): $(T1_DRV_SRC_S) $(T1_DRV_SRC) $(FREETYPE_H) $(T1_DRV_H) - $(T1_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(T1_DRV_SRC_S)) - - -# Type1 driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(T1_DIR)/%.c $(FREETYPE_H) $(T1_DRV_H) - $(T1_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(T1_DRV_OBJ_S) -DRV_OBJS_M += $(T1_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/type1/t1gload.c b/reactos/lib/3rdparty/freetype/src/type1/t1gload.c index 35f5b5795d9..af102fd85e3 100644 --- a/reactos/lib/3rdparty/freetype/src/type1/t1gload.c +++ b/reactos/lib/3rdparty/freetype/src/type1/t1gload.c @@ -4,7 +4,7 @@ /* */ /* Type 1 Glyph Loader (body). */ /* */ -/* Copyright 1996-2006, 2008-2010, 2013 by */ +/* Copyright 1996-2006, 2008-2010, 2013, 2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -194,7 +194,7 @@ for ( glyph_index = 0; glyph_index < type1->num_glyphs; glyph_index++ ) { /* now get load the unscaled outline */ - error = T1_Parse_Glyph( &decoder, glyph_index ); + (void)T1_Parse_Glyph( &decoder, glyph_index ); if ( glyph_index == 0 || decoder.builder.advance.x > *max_advance ) *max_advance = decoder.builder.advance.x; diff --git a/reactos/lib/3rdparty/freetype/src/type1/t1load.c b/reactos/lib/3rdparty/freetype/src/type1/t1load.c index 4b5026bfccf..fd06432b5de 100644 --- a/reactos/lib/3rdparty/freetype/src/type1/t1load.c +++ b/reactos/lib/3rdparty/freetype/src/type1/t1load.c @@ -4,7 +4,7 @@ /* */ /* Type 1 font loader (body). */ /* */ -/* Copyright 1996-2013 by */ +/* Copyright 1996-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -377,8 +377,6 @@ if ( blend && blend->num_axis == num_coords ) { /* recompute the weight vector from the blend coordinates */ - error = FT_Err_Ok; - for ( n = 0; n < blend->num_designs; n++ ) { FT_Fixed result = 0x10000L; /* 1.0 fixed */ @@ -1107,7 +1105,7 @@ result = T1_ToFixedArray( parser, 6, temp, 3 ); - if ( result < 0 ) + if ( result < 6 ) { parser->root.error = FT_THROW( Invalid_File_Format ); return; @@ -1274,6 +1272,13 @@ { charcode = (FT_Int)T1_ToInt( parser ); T1_Skip_Spaces( parser ); + + /* protect against invalid charcode */ + if ( cur == parser->root.cursor ) + { + parser->root.error = FT_THROW( Unknown_File_Format ); + return; + } } cur = parser->root.cursor; diff --git a/reactos/lib/3rdparty/freetype/src/type1/t1objs.c b/reactos/lib/3rdparty/freetype/src/type1/t1objs.c index 837b7911d4b..e11770feefc 100644 --- a/reactos/lib/3rdparty/freetype/src/type1/t1objs.c +++ b/reactos/lib/3rdparty/freetype/src/type1/t1objs.c @@ -364,10 +364,10 @@ root->num_glyphs = type1->num_glyphs; root->face_index = 0; - root->face_flags = FT_FACE_FLAG_SCALABLE | - FT_FACE_FLAG_HORIZONTAL | - FT_FACE_FLAG_GLYPH_NAMES | - FT_FACE_FLAG_HINTER; + root->face_flags |= FT_FACE_FLAG_SCALABLE | + FT_FACE_FLAG_HORIZONTAL | + FT_FACE_FLAG_GLYPH_NAMES | + FT_FACE_FLAG_HINTER; if ( info->is_fixed_pitch ) root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; diff --git a/reactos/lib/3rdparty/freetype/src/type1/t1parse.c b/reactos/lib/3rdparty/freetype/src/type1/t1parse.c index 106e4e7ecd1..ccf9f4cc560 100644 --- a/reactos/lib/3rdparty/freetype/src/type1/t1parse.c +++ b/reactos/lib/3rdparty/freetype/src/type1/t1parse.c @@ -4,7 +4,7 @@ /* */ /* Type 1 parser (body). */ /* */ -/* Copyright 1996-2005, 2008, 2009, 2012, 2013 by */ +/* Copyright 1996-2005, 2008, 2009, 2012-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -332,9 +332,11 @@ /* dictionary block in the heap. */ /* first of all, look at the `eexec' keyword */ - FT_Byte* cur = parser->base_dict; - FT_Byte* limit = cur + parser->base_len; - FT_Byte c; + FT_Byte* cur = parser->base_dict; + FT_Byte* limit = cur + parser->base_len; + FT_Byte c; + FT_Pointer pos_lf; + FT_Bool test_cr; Again: @@ -400,15 +402,24 @@ cur = parser->root.cursor; limit = parser->root.limit; - /* according to the Type1 spec, the first cipher byte must not be */ + /* According to the Type 1 spec, the first cipher byte must not be */ /* an ASCII whitespace character code (blank, tab, carriage return */ /* or line feed). We have seen Type 1 fonts with two line feed */ /* characters... So skip now all whitespace character codes. */ - while ( cur < limit && - ( *cur == ' ' || - *cur == '\t' || - *cur == '\r' || - *cur == '\n' ) ) + /* */ + /* On the other hand, Adobe's Type 1 parser handles fonts just */ + /* fine that are violating this limitation, so we add a heuristic */ + /* test to stop at \r only if it is not used for EOL. */ + + pos_lf = ft_memchr( cur, '\n', limit - cur ); + test_cr = FT_BOOL( !pos_lf || + pos_lf > ft_memchr( cur, '\r', limit - cur ) ); + + while ( cur < limit && + ( *cur == ' ' || + *cur == '\t' || + (test_cr && *cur == '\r' ) || + *cur == '\n' ) ) ++cur; if ( cur >= limit ) { diff --git a/reactos/lib/3rdparty/freetype/src/type42/module.mk b/reactos/lib/3rdparty/freetype/src/type42/module.mk deleted file mode 100644 index b3f10a8d3c8..00000000000 --- a/reactos/lib/3rdparty/freetype/src/type42/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 Type42 module definition -# - - -# Copyright 2002, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += TYPE42_DRIVER - -define TYPE42_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, t42_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)type42 $(ECHO_DRIVER_DESC)Type 42 font files with no known extension$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/type42/rules.mk b/reactos/lib/3rdparty/freetype/src/type42/rules.mk deleted file mode 100644 index eac1081eb1f..00000000000 --- a/reactos/lib/3rdparty/freetype/src/type42/rules.mk +++ /dev/null @@ -1,70 +0,0 @@ -# -# FreeType 2 Type42 driver configuration rules -# - - -# Copyright 2002, 2003, 2008 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# Type42 driver directory -# -T42_DIR := $(SRC_DIR)/type42 - - -# compilation flags for the driver -# -T42_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(T42_DIR)) - - -# Type42 driver source -# -T42_DRV_SRC := $(T42_DIR)/t42objs.c \ - $(T42_DIR)/t42parse.c \ - $(T42_DIR)/t42drivr.c - -# Type42 driver headers -# -T42_DRV_H := $(T42_DRV_SRC:%.c=%.h) \ - $(T42_DIR)/t42error.h \ - $(T42_DIR)/t42types.h - - -# Type42 driver object(s) -# -# T42_DRV_OBJ_M is used during `multi' builds -# T42_DRV_OBJ_S is used during `single' builds -# -T42_DRV_OBJ_M := $(T42_DRV_SRC:$(T42_DIR)/%.c=$(OBJ_DIR)/%.$O) -T42_DRV_OBJ_S := $(OBJ_DIR)/type42.$O - -# Type42 driver source file for single build -# -T42_DRV_SRC_S := $(T42_DIR)/type42.c - - -# Type42 driver - single object -# -$(T42_DRV_OBJ_S): $(T42_DRV_SRC_S) $(T42_DRV_SRC) $(FREETYPE_H) $(T42_DRV_H) - $(T42_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(T42_DRV_SRC_S)) - - -# Type42 driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(T42_DIR)/%.c $(FREETYPE_H) $(T42_DRV_H) - $(T42_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(T42_DRV_OBJ_S) -DRV_OBJS_M += $(T42_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/type42/t42objs.c b/reactos/lib/3rdparty/freetype/src/type42/t42objs.c index f5aa2caf2c0..798ebdbc5a4 100644 --- a/reactos/lib/3rdparty/freetype/src/type42/t42objs.c +++ b/reactos/lib/3rdparty/freetype/src/type42/t42objs.c @@ -218,9 +218,9 @@ root->num_charmaps = 0; root->face_index = 0; - root->face_flags = FT_FACE_FLAG_SCALABLE | - FT_FACE_FLAG_HORIZONTAL | - FT_FACE_FLAG_GLYPH_NAMES; + root->face_flags |= FT_FACE_FLAG_SCALABLE | + FT_FACE_FLAG_HORIZONTAL | + FT_FACE_FLAG_GLYPH_NAMES; if ( info->is_fixed_pitch ) root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; diff --git a/reactos/lib/3rdparty/freetype/src/type42/t42parse.c b/reactos/lib/3rdparty/freetype/src/type42/t42parse.c index 3cdd8a1acf2..9b668889b02 100644 --- a/reactos/lib/3rdparty/freetype/src/type42/t42parse.c +++ b/reactos/lib/3rdparty/freetype/src/type42/t42parse.c @@ -4,7 +4,7 @@ /* */ /* Type 42 font parser (body). */ /* */ -/* Copyright 2002-2013 by */ +/* Copyright 2002-2014 by */ /* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -255,12 +255,26 @@ FT_Face root = (FT_Face)&face->root; FT_Fixed temp[6]; FT_Fixed temp_scale; + FT_Int result; - (void)T1_ToFixedArray( parser, 6, temp, 3 ); + result = T1_ToFixedArray( parser, 6, temp, 3 ); + + if ( result < 6 ) + { + parser->root.error = FT_THROW( Invalid_File_Format ); + return; + } temp_scale = FT_ABS( temp[3] ); + if ( temp_scale == 0 ) + { + FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" )); + parser->root.error = FT_THROW( Invalid_File_Format ); + return; + } + /* Set Units per EM based on FontMatrix values. We set the value to */ /* 1000 / temp_scale, because temp_scale was already multiplied by */ /* 1000 (in t1_tofixed, from psobjs.c). */ @@ -275,7 +289,7 @@ temp[2] = FT_DivFix( temp[2], temp_scale ); temp[4] = FT_DivFix( temp[4], temp_scale ); temp[5] = FT_DivFix( temp[5], temp_scale ); - temp[3] = 0x10000L; + temp[3] = temp[3] < 0 ? -0x10000L : 0x10000L; } matrix->xx = temp[0]; @@ -314,7 +328,7 @@ if ( ft_isdigit( *cur ) || *cur == '[' ) { T1_Encoding encode = &face->type1.encoding; - FT_UInt count, n; + FT_Int count, n; PS_Table char_table = &loader->encoding_table; FT_Memory memory = parser->root.memory; FT_Error error; @@ -329,7 +343,7 @@ parser->root.cursor++; } else - count = (FT_UInt)T1_ToInt( parser ); + count = (FT_Int)T1_ToInt( parser ); T1_Skip_Spaces( parser ); if ( parser->root.cursor >= limit ) @@ -417,7 +431,7 @@ cur = parser->root.cursor; - if ( *cur == '/' && cur + 2 < limit && n < count ) + if ( cur + 2 < limit && *cur == '/' && n < count ) { FT_PtrDist len; @@ -426,6 +440,8 @@ parser->root.cursor = cur; T1_Skip_PS_Token( parser ); + if ( parser->root.cursor >= limit ) + return; if ( parser->root.error ) return; @@ -439,6 +455,19 @@ n++; } + else if ( only_immediates ) + { + /* Since the current position is not updated for */ + /* immediates-only mode we would get an infinite loop if */ + /* we don't do anything here. */ + /* */ + /* This encoding array is not valid according to the type1 */ + /* specification (it might be an encoding for a CID type1 */ + /* font, however), so we conclude that this font is NOT a */ + /* type1 font. */ + parser->root.error = FT_THROW( Unknown_File_Format ); + return; + } } else { @@ -450,8 +479,8 @@ T1_Skip_Spaces( parser ); } - face->type1.encoding_type = T1_ENCODING_TYPE_ARRAY; - parser->root.cursor = cur; + face->type1.encoding_type = T1_ENCODING_TYPE_ARRAY; + parser->root.cursor = cur; } /* Otherwise, we should have either `StandardEncoding', */ @@ -471,10 +500,7 @@ face->type1.encoding_type = T1_ENCODING_TYPE_ISOLATIN1; else - { - FT_ERROR(( "t42_parse_encoding: invalid token\n" )); - parser->root.error = FT_THROW( Invalid_File_Format ); - } + parser->root.error = FT_THROW( Ignore ); } } diff --git a/reactos/lib/3rdparty/freetype/src/winfonts/module.mk b/reactos/lib/3rdparty/freetype/src/winfonts/module.mk deleted file mode 100644 index b44d7f0570a..00000000000 --- a/reactos/lib/3rdparty/freetype/src/winfonts/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 Windows FNT/FON module definition -# - - -# Copyright 1996-2000, 2006 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += WINDOWS_DRIVER - -define WINDOWS_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, winfnt_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)winfnt $(ECHO_DRIVER_DESC)Windows bitmap fonts with extension *.fnt or *.fon$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/winfonts/rules.mk b/reactos/lib/3rdparty/freetype/src/winfonts/rules.mk deleted file mode 100644 index 71a7df2d8ab..00000000000 --- a/reactos/lib/3rdparty/freetype/src/winfonts/rules.mk +++ /dev/null @@ -1,65 +0,0 @@ -# -# FreeType 2 Windows FNT/FON driver configuration rules -# - - -# Copyright 1996-2000, 2001, 2003 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# Windows driver directory -# -FNT_DIR := $(SRC_DIR)/winfonts - - -FNT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(FNT_DIR)) - - -# Windows driver sources (i.e., C files) -# -FNT_DRV_SRC := $(FNT_DIR)/winfnt.c - -# Windows driver headers -# -FNT_DRV_H := $(FNT_DRV_SRC:%.c=%.h) \ - $(FNT_DIR)/fnterrs.h - - -# Windows driver object(s) -# -# FNT_DRV_OBJ_M is used during `multi' builds -# FNT_DRV_OBJ_S is used during `single' builds -# -FNT_DRV_OBJ_M := $(FNT_DRV_SRC:$(FNT_DIR)/%.c=$(OBJ_DIR)/%.$O) -FNT_DRV_OBJ_S := $(OBJ_DIR)/winfnt.$O - -# Windows driver source file for single build -# -FNT_DRV_SRC_S := $(FNT_DIR)/winfnt.c - - -# Windows driver - single object -# -$(FNT_DRV_OBJ_S): $(FNT_DRV_SRC_S) $(FNT_DRV_SRC) $(FREETYPE_H) $(FNT_DRV_H) - $(FNT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(FNT_DRV_SRC_S)) - - -# Windows driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(FNT_DIR)/%.c $(FREETYPE_H) $(FNT_DRV_H) - $(FNT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(FNT_DRV_OBJ_S) -DRV_OBJS_M += $(FNT_DRV_OBJ_M) - - -# EOF diff --git a/reactos/lib/3rdparty/freetype/src/winfonts/winfnt.c b/reactos/lib/3rdparty/freetype/src/winfonts/winfnt.c index 68432438bfb..e9c1a9b5fda 100644 --- a/reactos/lib/3rdparty/freetype/src/winfonts/winfnt.c +++ b/reactos/lib/3rdparty/freetype/src/winfonts/winfnt.c @@ -4,7 +4,7 @@ /* */ /* FreeType font driver for Windows FNT/FON files */ /* */ -/* Copyright 1996-2004, 2006-2013 by */ +/* Copyright 1996-2004, 2006-2014 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* Copyright 2003 Huw D M Davies for Codeweavers */ /* Copyright 2007 Dmitry Timoshkov for Codeweavers */ @@ -743,8 +743,8 @@ root->face_index = face_index; - root->face_flags = FT_FACE_FLAG_FIXED_SIZES | - FT_FACE_FLAG_HORIZONTAL; + root->face_flags |= FT_FACE_FLAG_FIXED_SIZES | + FT_FACE_FLAG_HORIZONTAL; if ( font->header.avg_width == font->header.max_width ) root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; @@ -977,7 +977,7 @@ font = face->font; - if ( !font || + if ( !font || glyph_index >= (FT_UInt)( FT_FACE( face )->num_glyphs ) ) { error = FT_THROW( Invalid_Argument ); @@ -989,16 +989,26 @@ if ( glyph_index > 0 ) glyph_index--; /* revert to real index */ else - glyph_index = font->header.default_char; /* the .notdef glyph */ + glyph_index = font->header.default_char; /* the `.notdef' glyph */ new_format = FT_BOOL( font->header.version == 0x300 ); len = new_format ? 6 : 4; - /* jump to glyph entry */ - p = font->fnt_frame + ( new_format ? 148 : 118 ) + len * glyph_index; + /* get glyph width and offset */ + offset = ( new_format ? 148 : 118 ) + len * glyph_index; + + if ( offset >= font->header.file_size - 2 - ( new_format ? 4 : 2 ) ) + { + FT_TRACE2(( "invalid FNT offset\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + p = font->fnt_frame + offset; bitmap->width = FT_NEXT_SHORT_LE( p ); + /* jump to glyph entry */ if ( new_format ) offset = FT_NEXT_ULONG_LE( p ); else diff --git a/reactos/media/doc/3rd Party Files.txt b/reactos/media/doc/3rd Party Files.txt index 80fa7795c3c..af7379e8b77 100644 --- a/reactos/media/doc/3rd Party Files.txt +++ b/reactos/media/doc/3rd Party Files.txt @@ -15,7 +15,7 @@ Used Version: 1.1 Website: http://www.geocities.com/dborca/opengl/tc.html Title: FreeType -Used Version: 2.5.2 +Used Version: 2.5.3 Website: http://www.freetype.org Title: Mesa3D From bef68d6f6ccc843d391cf196d0b733d2d4d8d65a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer <timo.kreuzer@reactos.org> Date: Sat, 17 May 2014 20:34:11 +0000 Subject: [PATCH 45/81] [NTOSKRNL] Modify the VAD node code to return a TABLE_SEARCH_RESULT instead of an NTSTATUS, this allows us to avoid a 2nd tree iteration when inserting VADs. Fix several bugs in MiFindEmptyAddressRangeDownBasedTree. This code now contains a compatibility hack, that emulates a bug in the Windows 2003 kernel. Note that this bug is also present in MiFindEmptyAddressRangeDownTree on Windows 2003, but will not be exposed to the user, since it only affects the region above the top-most VAD, which will always be occupied by the PEB or TEB. Implement MEM_TOPDOWN in NtAllocateVirtualMemory. See CORE-6392 svn path=/trunk/; revision=63336 --- reactos/ntoskrnl/mm/ARM3/miarm.h | 7 +- reactos/ntoskrnl/mm/ARM3/procsup.c | 2 +- reactos/ntoskrnl/mm/ARM3/section.c | 31 ++-- reactos/ntoskrnl/mm/ARM3/vadnode.c | 225 +++++++++++++++++------------ reactos/ntoskrnl/mm/ARM3/virtual.c | 74 +++++++--- 5 files changed, 206 insertions(+), 133 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index d04bf8a498b..00566877b05 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -2093,12 +2093,13 @@ MiLocateAddress( IN PVOID VirtualAddress ); -PMMADDRESS_NODE +TABLE_SEARCH_RESULT NTAPI MiCheckForConflictingNode( IN ULONG_PTR StartVpn, IN ULONG_PTR EndVpn, - IN PMM_AVL_TABLE Table + IN PMM_AVL_TABLE Table, + OUT PMMADDRESS_NODE *NodeOrParent ); TABLE_SEARCH_RESULT @@ -2122,7 +2123,7 @@ MiFindEmptyAddressRangeDownBasedTree( OUT PULONG_PTR Base ); -NTSTATUS +TABLE_SEARCH_RESULT NTAPI MiFindEmptyAddressRangeInTree( IN SIZE_T Length, diff --git a/reactos/ntoskrnl/mm/ARM3/procsup.c b/reactos/ntoskrnl/mm/ARM3/procsup.c index 2e90165b049..f32dce0d8d1 100644 --- a/reactos/ntoskrnl/mm/ARM3/procsup.c +++ b/reactos/ntoskrnl/mm/ARM3/procsup.c @@ -110,7 +110,7 @@ MiCreatePebOrTeb(IN PEPROCESS Process, { /* For TEBs, or if a PEB location couldn't be found, scan the VAD root */ Result = MiFindEmptyAddressRangeDownTree(ROUND_TO_PAGES(Size), - (ULONG_PTR)MM_HIGHEST_VAD_ADDRESS + 1, + (ULONG_PTR)MM_HIGHEST_VAD_ADDRESS, PAGE_SIZE, &Process->VadRoot, Base, diff --git a/reactos/ntoskrnl/mm/ARM3/section.c b/reactos/ntoskrnl/mm/ARM3/section.c index d21be5f922d..c69efc605ac 100644 --- a/reactos/ntoskrnl/mm/ARM3/section.c +++ b/reactos/ntoskrnl/mm/ARM3/section.c @@ -1214,6 +1214,8 @@ MiMapViewOfDataSection(IN PCONTROL_AREA ControlArea, ULONG QuotaCharge = 0, QuotaExcess = 0; PMMPTE PointerPte, LastPte; MMPTE TempPte; + PMMADDRESS_NODE Parent; + TABLE_SEARCH_RESULT Result; /* Get the segment for this section */ Segment = ControlArea->Segment; @@ -1302,23 +1304,29 @@ MiMapViewOfDataSection(IN PCONTROL_AREA ControlArea, if (AllocationType & MEM_TOP_DOWN) { /* No, find an address top-down */ - Status = MiFindEmptyAddressRangeDownTree(*ViewSize, + Result = MiFindEmptyAddressRangeDownTree(*ViewSize, (ULONG_PTR)MM_HIGHEST_VAD_ADDRESS, _64K, &Process->VadRoot, &StartAddress, - (PMMADDRESS_NODE*)&Process->VadFreeHint); - ASSERT(NT_SUCCESS(Status)); + &Parent); } else { /* No, find an address bottom-up */ - Status = MiFindEmptyAddressRangeInTree(*ViewSize, + Result = MiFindEmptyAddressRangeInTree(*ViewSize, _64K, &Process->VadRoot, - (PMMADDRESS_NODE*)&Process->VadFreeHint, + &Parent, &StartAddress); - ASSERT(NT_SUCCESS(Status)); + } + + /* Check if we found a suitable location */ + if (Result == TableFoundNode) + { + DPRINT1("Not enough free space to insert this section!\n"); + MiDereferenceControlArea(ControlArea); + return STATUS_CONFLICTING_ADDRESSES; } /* Get the ending address, which is the last piece we need for the VAD */ @@ -1343,9 +1351,11 @@ MiMapViewOfDataSection(IN PCONTROL_AREA ControlArea, EndingAddress = (StartAddress + *ViewSize - 1) | (PAGE_SIZE - 1); /* Make sure it doesn't conflict with an existing allocation */ - if (MiCheckForConflictingNode(StartAddress >> PAGE_SHIFT, - EndingAddress >> PAGE_SHIFT, - &Process->VadRoot)) + Result = MiCheckForConflictingNode(StartAddress >> PAGE_SHIFT, + EndingAddress >> PAGE_SHIFT, + &Process->VadRoot, + &Parent); + if (Result == TableFoundNode) { DPRINT1("Conflict with SEC_BASED or manually based section!\n"); MiDereferenceControlArea(ControlArea); @@ -1395,7 +1405,8 @@ MiMapViewOfDataSection(IN PCONTROL_AREA ControlArea, MiLockProcessWorkingSetUnsafe(Process, Thread); /* Insert the VAD */ - MiInsertVad((PMMVAD)Vad, Process); + Process->VadRoot.NodeHint = Vad; + MiInsertNode(&Process->VadRoot, (PVOID)Vad, Parent, Result); /* Release the working set */ MiUnlockProcessWorkingSetUnsafe(Process, Thread); diff --git a/reactos/ntoskrnl/mm/ARM3/vadnode.c b/reactos/ntoskrnl/mm/ARM3/vadnode.c index 402b4c69f48..4ef12d54384 100644 --- a/reactos/ntoskrnl/mm/ARM3/vadnode.c +++ b/reactos/ntoskrnl/mm/ARM3/vadnode.c @@ -73,22 +73,25 @@ MiLocateAddress(IN PVOID VirtualAddress) return FoundVad; } -PMMADDRESS_NODE +TABLE_SEARCH_RESULT NTAPI MiCheckForConflictingNode(IN ULONG_PTR StartVpn, IN ULONG_PTR EndVpn, - IN PMM_AVL_TABLE Table) + IN PMM_AVL_TABLE Table, + OUT PMMADDRESS_NODE *NodeOrParent) { - PMMADDRESS_NODE CurrentNode; + PMMADDRESS_NODE ParentNode, CurrentNode; /* If the tree is empty, there is no conflict */ - if (!Table->NumberGenericTableElements) return NULL; + if (Table->NumberGenericTableElements == 0) return TableEmptyTree; - /* Start looping from the right */ + /* Start looping from the root node */ CurrentNode = RtlRightChildAvl(&Table->BalancedRoot); ASSERT(CurrentNode != NULL); while (CurrentNode) { + ParentNode = CurrentNode; + /* This address comes after */ if (StartVpn > CurrentNode->EndingVpn) { @@ -103,12 +106,21 @@ MiCheckForConflictingNode(IN ULONG_PTR StartVpn, else { /* This address is part of this node, return it */ - break; + *NodeOrParent = ParentNode; + return TableFoundNode; } } - /* Return either the conflicting node, or no node at all */ - return CurrentNode; + /* There is no more child, save the current node as parent */ + *NodeOrParent = ParentNode; + if (StartVpn > ParentNode->EndingVpn) + { + return TableInsertAsRight; + } + else + { + return TableInsertAsLeft; + } } VOID @@ -338,7 +350,7 @@ MiGetNextNode(IN PMMADDRESS_NODE Node) return NULL; } -NTSTATUS +TABLE_SEARCH_RESULT NTAPI MiFindEmptyAddressRangeInTree(IN SIZE_T Length, IN ULONG_PTR Alignment, @@ -346,67 +358,78 @@ MiFindEmptyAddressRangeInTree(IN SIZE_T Length, OUT PMMADDRESS_NODE *PreviousVad, OUT PULONG_PTR Base) { - PMMADDRESS_NODE Node; - PMMADDRESS_NODE NextNode; - ULONG_PTR StartingVpn, HighestVpn, AlignmentVpn, LengthVpn, LowVpn; + PMMADDRESS_NODE Node, PreviousNode; + ULONG_PTR PageCount, AlignmentVpn, LowVpn, HighVpn; ASSERT(Length != 0); - /* Precompute page numbers for the length, alignment, and starting address */ - LengthVpn = (Length + (PAGE_SIZE - 1)) >> PAGE_SHIFT; + /* Calculate page numbers for the length, alignment, and starting address */ + PageCount = BYTES_TO_PAGES(Length); AlignmentVpn = Alignment >> PAGE_SHIFT; - StartingVpn = ROUND_UP((ULONG_PTR)MM_LOWEST_USER_ADDRESS >> PAGE_SHIFT, - AlignmentVpn); + LowVpn = ALIGN_UP_BY((ULONG_PTR)MM_LOWEST_USER_ADDRESS >> PAGE_SHIFT, AlignmentVpn); - /* Check if the table is free, so the lowest possible address is available */ - if (!Table->NumberGenericTableElements) goto FoundAtBottom; + /* Check if the table is empty */ + if (Table->NumberGenericTableElements == 0) + { + /* Tree is empty, the candidate address is already the best one */ + *Base = LowVpn << PAGE_SHIFT; + return TableEmptyTree; + } /* Otherwise, follow the leftmost child of the right root node's child */ Node = RtlRightChildAvl(&Table->BalancedRoot); while (RtlLeftChildAvl(Node)) Node = RtlLeftChildAvl(Node); - /* This is the node for the remaining gap at the bottom, can it be used? */ - if ((Node->StartingVpn > StartingVpn) && - (LengthVpn < Node->StartingVpn - StartingVpn)) + /* Start a search to find a gap */ + PreviousNode = NULL; + while (Node != NULL) { -FoundAtBottom: - /* Use this VAD to store the allocation */ - *PreviousVad = NULL; - *Base = StartingVpn << PAGE_SHIFT; - return STATUS_SUCCESS; - } - - /* Otherwise, we start a search to find a gap */ - while (TRUE) - { - /* The last aligned page number in this entry */ - LowVpn = ROUND_UP(Node->EndingVpn + 1, AlignmentVpn); - - /* Keep going as long as there's still a next node */ - NextNode = MiGetNextNode(Node); - if (!NextNode) break; - - /* Can this allocation fit in this node? */ - if ((LengthVpn <= (NextNode->StartingVpn - LowVpn)) && - (NextNode->StartingVpn > LowVpn)) + /* Check if the gap below the current node is suitable */ + if (Node->StartingVpn >= LowVpn + PageCount) { -Found: - /* Yes! Use this VAD to store the allocation */ - *PreviousVad = Node; - *Base = ROUND_UP((Node->EndingVpn << PAGE_SHIFT) | (PAGE_SIZE - 1), - Alignment); - return STATUS_SUCCESS; + /* There is enough space to add our node */ + *Base = LowVpn << PAGE_SHIFT; + + /* Can we use the current node as parent? */ + if (RtlLeftChildAvl(Node) == NULL) + { + /* Node has no left child, so use it as parent */ + *PreviousVad = Node; + return TableInsertAsLeft; + } + else + { + /* Node has a left child, this means that the previous node is + the right-most child of it's left child and can be used as + the parent. In case we use the space before the left-most + node, it's left child must be NULL. */ + ASSERT(PreviousNode != NULL); + ASSERT(RtlRightChildAvl(PreviousNode) == NULL); + *PreviousVad = PreviousNode; + return TableInsertAsRight; + } } - /* Try the next node */ - Node = NextNode; + /* The next candidate is above the current node */ + if (Node->EndingVpn >= LowVpn) + LowVpn = ALIGN_UP_BY(Node->EndingVpn + 1, AlignmentVpn); + + /* Remember the current node and go to the next node */ + PreviousNode = Node; + Node = MiGetNextNode(Node); } - /* We're down to the last (top) VAD, will this allocation fit inside it? */ - HighestVpn = ((ULONG_PTR)MM_HIGHEST_VAD_ADDRESS + 1) >> PAGE_SHIFT; - if ((HighestVpn > LowVpn) && (LengthVpn <= HighestVpn - LowVpn)) goto Found; + /* We're up to the highest VAD, will this allocation fit above it? */ + HighVpn = ((ULONG_PTR)MM_HIGHEST_VAD_ADDRESS + 1) / PAGE_SIZE; + if (HighVpn >= LowVpn + PageCount) + { + /* Yes! Use this VAD to store the allocation */ + *PreviousVad = PreviousNode; + *Base = LowVpn << PAGE_SHIFT; + return TableInsertAsRight; + } /* Nyet, there's no free address space for this allocation, so we'll fail */ - return STATUS_NO_MEMORY; + return TableFoundNode; } TABLE_SEARCH_RESULT @@ -418,55 +441,59 @@ MiFindEmptyAddressRangeDownTree(IN SIZE_T Length, OUT PULONG_PTR Base, OUT PMMADDRESS_NODE *Parent) { - PMMADDRESS_NODE Node, LowestNode, Child; - ULONG_PTR LowVpn, HighVpn; + PMMADDRESS_NODE Node, OldNode, Child; + ULONG_PTR LowVpn, HighVpn, AlignmentVpn; PFN_NUMBER PageCount; /* Sanity checks */ ASSERT(BoundaryAddress); - ASSERT(BoundaryAddress <= ((ULONG_PTR)MM_HIGHEST_VAD_ADDRESS + 1)); + ASSERT(BoundaryAddress <= ((ULONG_PTR)MM_HIGHEST_VAD_ADDRESS)); + ASSERT((Alignment & (PAGE_SIZE - 1)) == 0); - /* Compute page length, make sure the boundary address is valid */ + /* Calculate page numbers for the length and alignment */ Length = ROUND_TO_PAGES(Length); PageCount = Length >> PAGE_SHIFT; - if ((BoundaryAddress + 1) < Length) return TableFoundNode; + AlignmentVpn = Alignment / PAGE_SIZE; + + /* Check if there is enough space below the boundary */ + if ((ALIGN_UP_BY((ULONG_PTR)MM_LOWEST_USER_ADDRESS, Alignment) + Length) > + (BoundaryAddress + 1)) + { + return TableFoundNode; + } /* Check if the table is empty */ if (Table->NumberGenericTableElements == 0) { /* Tree is empty, the candidate address is already the best one */ - *Base = ROUND_UP(BoundaryAddress + 1 - Length, Alignment); + *Base = ALIGN_DOWN_BY(BoundaryAddress + 1 - Length, Alignment); return TableEmptyTree; } /* Calculate the initial upper margin */ - HighVpn = BoundaryAddress >> PAGE_SHIFT; + HighVpn = (BoundaryAddress + 1) >> PAGE_SHIFT; - /* Starting from the root, go down until the right-most child - * which is just behind the boundary*/ - LowestNode = Node = RtlRightChildAvl(&Table->BalancedRoot); - while (((Child = RtlRightChildAvl(Node)) != 0 ) - && (Node->EndingVpn < HighVpn )) Node = Child; + /* Starting from the root, follow the right children until we found a node + that ends above the boundary */ + Node = RtlRightChildAvl(&Table->BalancedRoot); + while ((Node->EndingVpn < HighVpn) && + ((Child = RtlRightChildAvl(Node)) != NULL)) Node = Child; /* Now loop the Vad nodes */ while (Node) { - /* Keep track of the lowest node */ - LowestNode = Node; - /* Calculate the lower margin */ - LowVpn = ROUND_UP(Node->EndingVpn + 1, Alignment >> PAGE_SHIFT); + LowVpn = ALIGN_UP_BY(Node->EndingVpn + 1, AlignmentVpn); /* Check if the current bounds are suitable */ if ((HighVpn > LowVpn) && ((HighVpn - LowVpn) >= PageCount)) { /* There is enough space to add our node */ - LowVpn = HighVpn - PageCount; + LowVpn = ALIGN_DOWN_BY(HighVpn - PageCount, AlignmentVpn); *Base = LowVpn << PAGE_SHIFT; /* Can we use the current node as parent? */ - Child = RtlRightChildAvl(Node); - if (!Child) + if (!RtlRightChildAvl(Node)) { /* Node has no right child, so use it as parent */ *Parent = Node; @@ -474,29 +501,29 @@ MiFindEmptyAddressRangeDownTree(IN SIZE_T Length, } else { - /* Node has a right child, find most left grand child */ - Node = Child; - while ((Child = RtlLeftChildAvl(Node))) Node = Child; - *Parent = Node; + /* Node has a right child, the node we had before is the most + left grandchild of that right child, use it as parent. */ + *Parent = OldNode; return TableInsertAsLeft; } } - /* Update the upper margin if neccessary */ + /* Update the upper margin if necessary */ if (Node->StartingVpn < HighVpn) HighVpn = Node->StartingVpn; - /* Go to the next lower node */ + /* Remember the current node and go to the previous node */ + OldNode = Node; Node = MiGetPreviousNode(Node); } /* Check if there's enough space before the lowest Vad */ - LowVpn = ROUND_UP((ULONG_PTR)MI_LOWEST_VAD_ADDRESS, Alignment) >> PAGE_SHIFT; + LowVpn = ALIGN_UP_BY((ULONG_PTR)MI_LOWEST_VAD_ADDRESS, Alignment) / PAGE_SIZE; if ((HighVpn > LowVpn) && ((HighVpn - LowVpn) >= PageCount)) { /* There is enough space to add our address */ - LowVpn = HighVpn - PageCount; + LowVpn = ALIGN_DOWN_BY(HighVpn - PageCount, Alignment >> PAGE_SHIFT); *Base = LowVpn << PAGE_SHIFT; - *Parent = LowestNode; + *Parent = OldNode; return TableInsertAsLeft; } @@ -527,7 +554,7 @@ MiFindEmptyAddressRangeDownBasedTree(IN SIZE_T Length, if ((BoundaryAddress + 1) < Length) return STATUS_NO_MEMORY; /* Check if the table is empty */ - BestVpn = ROUND_UP(BoundaryAddress + 1 - Length, Alignment); + BestVpn = ROUND_DOWN(BoundaryAddress + 1 - Length, Alignment); if (Table->NumberGenericTableElements == 0) { /* Tree is empty, the candidate address is already the best one */ @@ -540,11 +567,18 @@ MiFindEmptyAddressRangeDownBasedTree(IN SIZE_T Length, while (RtlRightChildAvl(Node)) Node = RtlRightChildAvl(Node); /* Check if we can fit in here */ - LowVpn = ROUND_UP(Node->EndingVpn, Alignment); - if ((LowVpn < BoundaryAddress) && (Length < (BoundaryAddress - LowVpn))) + LowVpn = ROUND_UP(Node->EndingVpn + 1, Alignment); + if ((LowVpn < BoundaryAddress) && (Length <= (BoundaryAddress - LowVpn))) { - /* Return the address */ - *Base = ROUND_UP(BoundaryAddress - Length, Alignment); +#if (NTDDI_VERSION >= NTDDI_VISTA) + /* Return the address. */ + *Base = BestVpn; +#else + /* Note: this is a compatibility hack that mimics a bug in the 2k3 + kernel. It will can waste up to Alignment bytes of memory above + the allocation. This bug was fixed in Windows Vista */ + *Base = ROUND_DOWN(BoundaryAddress - Length, Alignment); +#endif return STATUS_SUCCESS; } @@ -558,22 +592,20 @@ MiFindEmptyAddressRangeDownBasedTree(IN SIZE_T Length, /* Check if this node could contain the requested address */ LowVpn = ROUND_UP(LowestNode->EndingVpn + 1, Alignment); if ((LowestNode->EndingVpn < BestVpn) && + (LowVpn < Node->StartingVpn) && (Length <= (Node->StartingVpn - LowVpn))) { - /* Check if it fits in perfectly */ - if ((BestVpn > LowestNode->EndingVpn) && - (BoundaryAddress < Node->StartingVpn)) + /* Check if we need to take BoundaryAddress into account */ + if (BoundaryAddress < Node->StartingVpn) { /* Return the optimal VPN address */ *Base = BestVpn; return STATUS_SUCCESS; } - - /* It doesn't, check if it can partly fit */ - if (Node->StartingVpn > LowVpn) + else { - /* Return an aligned base address within this node */ - *Base = ROUND_UP(Node->StartingVpn - Length, Alignment); + /* The upper margin is given by the Node's starting address */ + *Base = ROUND_DOWN(Node->StartingVpn - Length, Alignment); return STATUS_SUCCESS; } } @@ -584,7 +616,7 @@ MiFindEmptyAddressRangeDownBasedTree(IN SIZE_T Length, /* Check if there's enough space before the lowest Vad */ if ((Node->StartingVpn > (ULONG_PTR)MI_LOWEST_VAD_ADDRESS) && - ((Node->StartingVpn - (ULONG_PTR)MI_LOWEST_VAD_ADDRESS) > Length)) + ((Node->StartingVpn - (ULONG_PTR)MI_LOWEST_VAD_ADDRESS) >= Length)) { /* Check if it fits in perfectly */ if (BoundaryAddress < Node->StartingVpn) @@ -595,7 +627,7 @@ MiFindEmptyAddressRangeDownBasedTree(IN SIZE_T Length, } /* Return an aligned base address within this node */ - *Base = ROUND_UP(Node->StartingVpn - Length, Alignment); + *Base = ROUND_DOWN(Node->StartingVpn - Length, Alignment); return STATUS_SUCCESS; } @@ -669,3 +701,4 @@ MiCheckSecuredVad(IN PMMVAD Vad, } /* EOF */ + diff --git a/reactos/ntoskrnl/mm/ARM3/virtual.c b/reactos/ntoskrnl/mm/ARM3/virtual.c index 0dc0196da34..a2871f7ce97 100644 --- a/reactos/ntoskrnl/mm/ARM3/virtual.c +++ b/reactos/ntoskrnl/mm/ARM3/virtual.c @@ -1903,6 +1903,7 @@ MiProtectVirtualMemory(IN PEPROCESS Process, BOOLEAN Committed; NTSTATUS Status = STATUS_SUCCESS; PETHREAD Thread = PsGetCurrentThread(); + TABLE_SEARCH_RESULT Result; /* Calculate base address for the VAD */ StartingAddress = (ULONG_PTR)PAGE_ALIGN((*BaseAddress)); @@ -1939,10 +1940,11 @@ MiProtectVirtualMemory(IN PEPROCESS Process, } /* Get the VAD for this address range, and make sure it exists */ - Vad = (PMMVAD)MiCheckForConflictingNode(StartingAddress >> PAGE_SHIFT, - EndingAddress >> PAGE_SHIFT, - &Process->VadRoot); - if (!Vad) + Result = MiCheckForConflictingNode(StartingAddress >> PAGE_SHIFT, + EndingAddress >> PAGE_SHIFT, + &Process->VadRoot, + (PMMADDRESS_NODE*)&Vad); + if (Result != TableFoundNode) { DPRINT("Could not find a VAD for this allocation\n"); Status = STATUS_CONFLICTING_ADDRESSES; @@ -4099,6 +4101,8 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, BOOLEAN Attached = FALSE, ChangeProtection = FALSE; MMPTE TempPte; PMMPTE PointerPte, PointerPde, LastPte; + TABLE_SEARCH_RESULT Result; + PMMADDRESS_NODE Parent; PAGED_CODE(); /* Check for valid Zero bits */ @@ -4384,12 +4388,28 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // if (!PBaseAddress) { - Status = MiFindEmptyAddressRangeInTree(PRegionSize, - _64K, - &Process->VadRoot, - (PMMADDRESS_NODE*)&Process->VadFreeHint, - &StartingAddress); - if (!NT_SUCCESS(Status)) goto FailPath; + /* Which way should we search? */ + if (AllocationType & MEM_TOP_DOWN) + { + /* Find an address top-down */ + Result = MiFindEmptyAddressRangeDownTree(PRegionSize, + (ULONG_PTR)MM_HIGHEST_VAD_ADDRESS, + _64K, + &Process->VadRoot, + &StartingAddress, + &Parent); + } + else + { + /* Find an address bottom-up */ + Result = MiFindEmptyAddressRangeInTree(PRegionSize, + _64K, + &Process->VadRoot, + &Parent, + &StartingAddress); + } + + if (Result == TableFoundNode) goto FailPath; // // Now we know where the allocation ends. Make sure it doesn't end up @@ -4402,15 +4422,21 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, goto FailPath; } } - else if (MiCheckForConflictingNode(StartingAddress >> PAGE_SHIFT, - EndingAddress >> PAGE_SHIFT, - &Process->VadRoot)) + else { - // - // The address specified is in conflict! - // - Status = STATUS_CONFLICTING_ADDRESSES; - goto FailPath; + /* Make sure it doesn't conflict with an existing allocation */ + Result = MiCheckForConflictingNode(StartingAddress >> PAGE_SHIFT, + EndingAddress >> PAGE_SHIFT, + &Process->VadRoot, + &Parent); + if (Result == TableFoundNode) + { + // + // The address specified is in conflict! + // + Status = STATUS_CONFLICTING_ADDRESSES; + goto FailPath; + } } // @@ -4429,7 +4455,8 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // MiLockProcessWorkingSetUnsafe(Process, CurrentThread); Vad->ControlArea = NULL; // For Memory-Area hack - MiInsertVad(Vad, Process); + Process->VadRoot.NodeHint = Vad; + MiInsertNode(&Process->VadRoot, (PVOID)Vad, Parent, Result); MiUnlockProcessWorkingSetUnsafe(Process, CurrentThread); // @@ -4495,10 +4522,11 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // // Get the VAD for this address range, and make sure it exists // - FoundVad = (PMMVAD)MiCheckForConflictingNode(StartingAddress >> PAGE_SHIFT, - EndingAddress >> PAGE_SHIFT, - &Process->VadRoot); - if (!FoundVad) + Result = MiCheckForConflictingNode(StartingAddress >> PAGE_SHIFT, + EndingAddress >> PAGE_SHIFT, + &Process->VadRoot, + (PMMADDRESS_NODE*)&FoundVad); + if (Result != TableFoundNode) { DPRINT1("Could not find a VAD for this allocation\n"); Status = STATUS_CONFLICTING_ADDRESSES; From 22679f9a7c02423b6ac098f228a3ccb75bb553ab Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic <aandrejevic@reactos.org> Date: Sat, 17 May 2014 22:26:37 +0000 Subject: [PATCH 46/81] [NTVDM][KERNEL32][BASESRV] Modify BaseSrvFillCommandInfo to always return the correct lengths of the parameters. In BaseSrvGetNextVDMCommand, check if BaseSrvFillCommandInfo failed. In CommandThreadProc, expand the size of the environment if necessary. Add a useful DPRINT1 in BiosKbdBufferPush. Finish implementing BaseCreateVDMEnvironment. In GetNextVDMCommand, return the correct lengths of parameters if BaseSrvGetNextVDMCommand failed. svn path=/trunk/; revision=63337 --- reactos/dll/win32/kernel32/client/vdm.c | 84 +++++++++++++++++-- .../subsystems/ntvdm/bios/bios32/kbdbios32.c | 6 +- reactos/subsystems/ntvdm/ntvdm.c | 22 ++++- reactos/subsystems/win/basesrv/vdm.c | 77 +++++++++++------ 4 files changed, 151 insertions(+), 38 deletions(-) diff --git a/reactos/dll/win32/kernel32/client/vdm.c b/reactos/dll/win32/kernel32/client/vdm.c index c37a3cf3589..e6fa9c3a04b 100644 --- a/reactos/dll/win32/kernel32/client/vdm.c +++ b/reactos/dll/win32/kernel32/client/vdm.c @@ -662,7 +662,8 @@ BaseCreateVDMEnvironment(IN PWCHAR lpEnvironment, { BOOL Result; ULONG RegionSize, EnvironmentSize = 0; - PWCHAR p, Environment, NewEnvironment = NULL; + PWCHAR SourcePtr, DestPtr, Environment, NewEnvironment = NULL; + WCHAR PathBuffer[MAX_PATH]; NTSTATUS Status; /* Make sure we have both strings */ @@ -695,8 +696,8 @@ BaseCreateVDMEnvironment(IN PWCHAR lpEnvironment, } /* Count how much space the whole environment takes */ - p = Environment; - while ((*p++ != UNICODE_NULL) && (*p != UNICODE_NULL)) EnvironmentSize++; + SourcePtr = Environment; + while ((*SourcePtr++ != UNICODE_NULL) && (*SourcePtr != UNICODE_NULL)) EnvironmentSize++; EnvironmentSize += sizeof(UNICODE_NULL); /* Allocate a new copy */ @@ -715,16 +716,73 @@ BaseCreateVDMEnvironment(IN PWCHAR lpEnvironment, } /* Begin parsing the new environment */ - p = NewEnvironment; + SourcePtr = Environment; + DestPtr = NewEnvironment; - /* FIXME: Code here */ - DPRINT1("BaseCreateVDMEnvironment is half-plemented!\n"); + while (*SourcePtr != UNICODE_NULL) + { + while (*SourcePtr != UNICODE_NULL) + { + if (*SourcePtr == L'=') + { + /* Store the '=' sign */ + *DestPtr++ = *SourcePtr++; + + /* Check if this is likely a full path */ + if (isalphaW(SourcePtr[0]) + && (SourcePtr[1] == L':') + && ((SourcePtr[2] == '\\') || (SourcePtr[2] == '/'))) + { + PWCHAR Delimiter = wcschr(SourcePtr, L';'); + ULONG NumChars; + + if (Delimiter != NULL) + { + wcsncpy(PathBuffer, + SourcePtr, + min(Delimiter - SourcePtr, MAX_PATH)); + + /* Seek to the part after the delimiter */ + SourcePtr = Delimiter + 1; + } + else + { + wcsncpy(PathBuffer, SourcePtr, MAX_PATH); + + /* Seek to the end of the string */ + SourcePtr = wcschr(SourcePtr, UNICODE_NULL); + } + + /* Convert the path into a short path */ + NumChars = GetShortPathNameW(PathBuffer, + DestPtr, + EnvironmentSize - (DestPtr - NewEnvironment)); + if (NumChars) + { + /* + * If it failed, this block won't be executed, so it + * will continue from the character after the '=' sign. + */ + DestPtr += NumChars; + + /* Append the delimiter */ + if (Delimiter != NULL) *DestPtr++ = L';'; + } + } + } + else if (islowerW(*SourcePtr)) *DestPtr++ = toupperW(*SourcePtr++); + else *DestPtr++ = *SourcePtr++; + } + + /* Copy the terminating NULL character */ + *DestPtr++ = *SourcePtr++; + } /* Terminate it */ - *p++ = UNICODE_NULL; + *DestPtr++ = UNICODE_NULL; /* Initialize the unicode string to hold it */ - EnvironmentSize = (p - NewEnvironment) * sizeof(WCHAR); + EnvironmentSize = (DestPtr - NewEnvironment) * sizeof(WCHAR); RtlInitEmptyUnicodeString(UnicodeEnv, NewEnvironment, (USHORT)EnvironmentSize); UnicodeEnv->Length = (USHORT)EnvironmentSize; @@ -1267,6 +1325,16 @@ GetNextVDMCommand(PVDM_COMMAND_INFO CommandData) if (!NT_SUCCESS(Status)) { + /* Store the correct lengths */ + CommandData->CmdLen = GetNextVdmCommand->CmdLen; + CommandData->AppLen = GetNextVdmCommand->AppLen; + CommandData->PifLen = GetNextVdmCommand->PifLen; + CommandData->CurDirectoryLen = GetNextVdmCommand->CurDirectoryLen; + CommandData->EnvLen = GetNextVdmCommand->EnvLen; + CommandData->DesktopLen = GetNextVdmCommand->DesktopLen; + CommandData->TitleLen = GetNextVdmCommand->TitleLen; + CommandData->ReservedLen = GetNextVdmCommand->ReservedLen; + BaseSetLastNTError(Status); goto Cleanup; } diff --git a/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c b/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c index d3a4ad8b3e0..11cbd28b735 100644 --- a/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c +++ b/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c @@ -35,7 +35,11 @@ static BOOLEAN BiosKbdBufferPush(WORD Data) if (NextElement >= Bda->KeybdBufferEnd) NextElement = Bda->KeybdBufferStart; /* If it's full, fail */ - if (NextElement == Bda->KeybdBufferHead) return FALSE; + if (NextElement == Bda->KeybdBufferHead) + { + DPRINT1("BIOS keyboard buffer full.\n"); + return FALSE; + } /* Put the value in the queue */ *((LPWORD)((ULONG_PTR)Bda + Bda->KeybdBufferTail)) = Data; diff --git a/reactos/subsystems/ntvdm/ntvdm.c b/reactos/subsystems/ntvdm/ntvdm.c index 1239defc765..300c34fb9cc 100644 --- a/reactos/subsystems/ntvdm/ntvdm.c +++ b/reactos/subsystems/ntvdm/ntvdm.c @@ -401,9 +401,11 @@ CommandThreadProc(LPVOID Parameter) CHAR PifFile[MAX_PATH]; CHAR Desktop[MAX_PATH]; CHAR Title[MAX_PATH]; - CHAR Env[MAX_PATH]; + ULONG EnvSize = 256; + PVOID Env = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, EnvSize); UNREFERENCED_PARAMETER(Parameter); + ASSERT(Env != NULL); do { @@ -424,12 +426,23 @@ CommandThreadProc(LPVOID Parameter) CommandInfo.Title = Title; CommandInfo.TitleLen = sizeof(Title); CommandInfo.Env = Env; - CommandInfo.EnvLen = sizeof(Env); + CommandInfo.EnvLen = EnvSize; if (First) CommandInfo.VDMState |= VDM_FLAG_FIRST_TASK; - /* Wait for the next available VDM */ - if (!GetNextVDMCommand(&CommandInfo)) break; + if (!GetNextVDMCommand(&CommandInfo)) + { + if (CommandInfo.EnvLen > EnvSize) + { + /* Expand the environment size */ + EnvSize = CommandInfo.EnvLen; + Env = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, Env, EnvSize); + + continue; + } + + break; + } /* Start the process from the command line */ DPRINT1("Starting '%s' ('%s')...\n", AppName, CmdLine); @@ -445,6 +458,7 @@ CommandThreadProc(LPVOID Parameter) } while (AcceptCommands); + HeapFree(GetProcessHeap(), 0, Env); return 0; } #endif diff --git a/reactos/subsystems/win/basesrv/vdm.c b/reactos/subsystems/win/basesrv/vdm.c index 782918c48ce..81873a138c2 100644 --- a/reactos/subsystems/win/basesrv/vdm.c +++ b/reactos/subsystems/win/basesrv/vdm.c @@ -436,6 +436,8 @@ Cleanup: NTSTATUS NTAPI BaseSrvFillCommandInfo(PVDM_COMMAND_INFO CommandInfo, PBASE_GET_NEXT_VDM_COMMAND Message) { + NTSTATUS Status = STATUS_SUCCESS; + /* Copy the data */ Message->iTask = CommandInfo->TaskId; Message->StdIn = CommandInfo->StdIn; @@ -450,46 +452,61 @@ NTSTATUS NTAPI BaseSrvFillCommandInfo(PVDM_COMMAND_INFO CommandInfo, if (CommandInfo->CmdLen && Message->CmdLen) { - if (Message->CmdLen < CommandInfo->CmdLen) return STATUS_BUFFER_TOO_SMALL; + if (Message->CmdLen >= CommandInfo->CmdLen) + { + /* Copy the command line */ + RtlMoveMemory(Message->CmdLine, CommandInfo->CmdLine, CommandInfo->CmdLen); + } + else Status = STATUS_BUFFER_TOO_SMALL; - /* Copy the command line */ - RtlMoveMemory(Message->CmdLine, CommandInfo->CmdLine, CommandInfo->CmdLen); Message->CmdLen = CommandInfo->CmdLen; } if (CommandInfo->AppLen && Message->AppLen) { - if (Message->AppLen < CommandInfo->CmdLen) return STATUS_BUFFER_TOO_SMALL; + if (Message->AppLen >= CommandInfo->AppLen) + { + /* Copy the application name */ + RtlMoveMemory(Message->AppName, CommandInfo->AppName, CommandInfo->AppLen); + } + else Status = STATUS_BUFFER_TOO_SMALL; - /* Copy the application name */ - RtlMoveMemory(Message->AppName, CommandInfo->AppName, CommandInfo->AppLen); Message->AppLen = CommandInfo->AppLen; } if (CommandInfo->PifLen && Message->PifLen) { - if (Message->PifLen < CommandInfo->PifLen) return STATUS_BUFFER_TOO_SMALL; + if (Message->PifLen >= CommandInfo->PifLen) + { + /* Copy the PIF file name */ + RtlMoveMemory(Message->PifFile, CommandInfo->PifFile, CommandInfo->PifLen); + } + else Status = STATUS_BUFFER_TOO_SMALL; - /* Copy the PIF file name */ - RtlMoveMemory(Message->PifFile, CommandInfo->PifFile, CommandInfo->PifLen); Message->PifLen = CommandInfo->PifLen; } if (CommandInfo->CurDirectoryLen && Message->CurDirectoryLen) { - if (Message->CurDirectoryLen < CommandInfo->CurDirectoryLen) return STATUS_BUFFER_TOO_SMALL; + if (Message->CurDirectoryLen >= CommandInfo->CurDirectoryLen) + { + /* Copy the current directory */ + RtlMoveMemory(Message->CurDirectory, CommandInfo->CurDirectory, CommandInfo->CurDirectoryLen); + } + else Status = STATUS_BUFFER_TOO_SMALL; - /* Copy the current directory */ - RtlMoveMemory(Message->CurDirectory, CommandInfo->CurDirectory, CommandInfo->CurDirectoryLen); Message->CurDirectoryLen = CommandInfo->CurDirectoryLen; } if (CommandInfo->EnvLen && Message->EnvLen) { - if (Message->EnvLen < CommandInfo->EnvLen) return STATUS_BUFFER_TOO_SMALL; + if (Message->EnvLen >= CommandInfo->EnvLen) + { + /* Copy the environment */ + RtlMoveMemory(Message->Env, CommandInfo->Env, CommandInfo->EnvLen); + } + else Status = STATUS_BUFFER_TOO_SMALL; - /* Copy the environment */ - RtlMoveMemory(Message->Env, CommandInfo->Env, CommandInfo->EnvLen); Message->EnvLen = CommandInfo->EnvLen; } @@ -500,32 +517,41 @@ NTSTATUS NTAPI BaseSrvFillCommandInfo(PVDM_COMMAND_INFO CommandInfo, if (CommandInfo->DesktopLen && Message->DesktopLen) { - if (Message->DesktopLen < CommandInfo->DesktopLen) return STATUS_BUFFER_TOO_SMALL; + if (Message->DesktopLen >= CommandInfo->DesktopLen) + { + /* Copy the desktop name */ + RtlMoveMemory(Message->Desktop, CommandInfo->Desktop, CommandInfo->DesktopLen); + } + else Status = STATUS_BUFFER_TOO_SMALL; - /* Copy the desktop name */ - RtlMoveMemory(Message->Desktop, CommandInfo->Desktop, CommandInfo->DesktopLen); Message->DesktopLen = CommandInfo->DesktopLen; } if (CommandInfo->TitleLen && Message->TitleLen) { - if (Message->TitleLen < CommandInfo->TitleLen) return STATUS_BUFFER_TOO_SMALL; + if (Message->TitleLen >= CommandInfo->TitleLen) + { + /* Copy the title */ + RtlMoveMemory(Message->Title, CommandInfo->Title, CommandInfo->TitleLen); + } + else Status = STATUS_BUFFER_TOO_SMALL; - /* Copy the title */ - RtlMoveMemory(Message->Title, CommandInfo->Title, CommandInfo->TitleLen); Message->TitleLen = CommandInfo->TitleLen; } if (CommandInfo->ReservedLen && Message->ReservedLen) { - if (Message->ReservedLen < CommandInfo->ReservedLen) return STATUS_BUFFER_TOO_SMALL; + if (Message->ReservedLen >= CommandInfo->ReservedLen) + { + /* Copy the reserved parameter */ + RtlMoveMemory(Message->Reserved, CommandInfo->Reserved, CommandInfo->ReservedLen); + } + else Status = STATUS_BUFFER_TOO_SMALL; - /* Copy the reserved parameter */ - RtlMoveMemory(Message->Reserved, CommandInfo->Reserved, CommandInfo->ReservedLen); Message->ReservedLen = CommandInfo->ReservedLen; } - return STATUS_SUCCESS; + return Status; } VOID NTAPI BaseInitializeVDM(VOID) @@ -1017,6 +1043,7 @@ CSR_API(BaseSrvGetNextVDMCommand) { /* Fill the command information */ Status = BaseSrvFillCommandInfo(DosRecord->CommandInfo, GetNextVdmCommandRequest); + if (!NT_SUCCESS(Status)) goto Cleanup; /* Free the command information, it's no longer needed */ BaseSrvFreeVDMInfo(DosRecord->CommandInfo); From 5e5f4c1d144936c21f4d2b80d46e821dead64f07 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer <timo.kreuzer@reactos.org> Date: Sat, 17 May 2014 22:30:43 +0000 Subject: [PATCH 47/81] [NTOSKRNL] Fix Mm svn path=/trunk/; revision=63338 --- reactos/ntoskrnl/mm/ARM3/virtual.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/virtual.c b/reactos/ntoskrnl/mm/ARM3/virtual.c index a2871f7ce97..ea2f09405a4 100644 --- a/reactos/ntoskrnl/mm/ARM3/virtual.c +++ b/reactos/ntoskrnl/mm/ARM3/virtual.c @@ -4409,13 +4409,18 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, &StartingAddress); } - if (Result == TableFoundNode) goto FailPath; + if (Result == TableFoundNode) + { + Status = STATUS_NO_MEMORY; + goto FailPath; + } // // Now we know where the allocation ends. Make sure it doesn't end up // somewhere in kernel mode. // - EndingAddress = ((ULONG_PTR)StartingAddress + PRegionSize - 1) | (PAGE_SIZE - 1); + NT_ASSERT(StartingAddress != 0); + EndingAddress = (StartingAddress + PRegionSize - 1) | (PAGE_SIZE - 1); if ((PVOID)EndingAddress > MM_HIGHEST_VAD_ADDRESS) { Status = STATUS_NO_MEMORY; From 1a918ac33b6d0aa07d1e5293d9b41b54c85fe61c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer <timo.kreuzer@reactos.org> Date: Sat, 17 May 2014 22:33:42 +0000 Subject: [PATCH 48/81] [WIN32K] Revert r56462. Should fix some win32k crashes. See CORE-7965 svn path=/trunk/; revision=63339 --- reactos/win32ss/gdi/ntgdi/bitmaps.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/reactos/win32ss/gdi/ntgdi/bitmaps.c b/reactos/win32ss/gdi/ntgdi/bitmaps.c index 584dde5dbf1..ec44b9f8b9a 100644 --- a/reactos/win32ss/gdi/ntgdi/bitmaps.c +++ b/reactos/win32ss/gdi/ntgdi/bitmaps.c @@ -142,7 +142,7 @@ NtGdiCreateBitmap( IN OPTIONAL LPBYTE pUnsafeBits) { HBITMAP hbmp; - ULONG cRealBpp, cjWidthBytes, iFormat, fjBitmap; + ULONG cRealBpp, cjWidthBytes, iFormat; ULONGLONG cjSize; PSURFACE psurf; @@ -164,15 +164,12 @@ NtGdiCreateBitmap( return NULL; } - /* Allocations larger than PAGE_SIZE go into user mem */ - fjBitmap = (cjSize > PAGE_SIZE) ? BMF_USERMEM : 0; - /* Allocate the surface (but don't set the bits) */ psurf = SURFACE_AllocSurface(STYPE_BITMAP, nWidth, nHeight, iFormat, - fjBitmap, + 0, 0, NULL); if (!psurf) From 34ea0a3ea7fc5a3611d676fb3ed174f0a615de72 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer <timo.kreuzer@reactos.org> Date: Sat, 17 May 2014 22:55:22 +0000 Subject: [PATCH 49/81] [VGA_NEW] Improve order of check against NULL and assignement. Patch by Victor Martinez. CORE-8121 #resolve #comment Committed in r63340, thanks svn path=/trunk/; revision=63340 --- reactos/win32ss/drivers/miniport/vga_new/vbemodes.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/win32ss/drivers/miniport/vga_new/vbemodes.c b/reactos/win32ss/drivers/miniport/vga_new/vbemodes.c index 68462d65db2..dfd2f8dcca4 100644 --- a/reactos/win32ss/drivers/miniport/vga_new/vbemodes.c +++ b/reactos/win32ss/drivers/miniport/vga_new/vbemodes.c @@ -213,9 +213,10 @@ InitializeModeTable(IN PHW_DEVICE_EXTENSION VgaExtension) &Length); if (Status != NO_ERROR) return; VbeInfo = VideoPortAllocatePool(VgaExtension, 1, sizeof(VBE_INFO), ' agV'); - VbeModeInfo = &VbeInfo->Modes; if (!VbeInfo) return; + VbeModeInfo = &VbeInfo->Modes; + /* Init VBE data and write to card buffer */ VideoDebugPrint((0, "have int10 data\n")); VbeInfo->ModeArray[128] = 0xFFFF; From 7c2c3d6d1f35c2429fbe62d39f45041301e40358 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer <timo.kreuzer@reactos.org> Date: Sat, 17 May 2014 23:00:34 +0000 Subject: [PATCH 50/81] [USER32] Fix sizeof(WCHAR) vs sizeof(CHAR) problem. Patch by Victor Martinez. CORE-8166 #resolve #comment Committed in r63341, thanks. svn path=/trunk/; revision=63341 --- reactos/win32ss/user/user32/misc/dllmain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/win32ss/user/user32/misc/dllmain.c b/reactos/win32ss/user/user32/misc/dllmain.c index 5072b1bc3f7..b344aefb052 100644 --- a/reactos/win32ss/user/user32/misc/dllmain.c +++ b/reactos/win32ss/user/user32/misc/dllmain.c @@ -131,7 +131,7 @@ LoadAppInitDlls() LPWSTR ptr; size_t i; - RtlCopyMemory(buffer, szAppInit, KEY_LENGTH); + RtlCopyMemory(buffer, szAppInit, KEY_LENGTH * sizeof(WCHAR) ); for (i = 0; i < KEY_LENGTH; ++ i) { From ad69b4a3c0807f646dbf0cf8359e9a0aa659262a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Sat, 17 May 2014 23:49:35 +0000 Subject: [PATCH 51/81] [NTVDM] Add a memory dump facility. svn path=/trunk/; revision=63342 --- reactos/subsystems/ntvdm/emulator.c | 81 ++++++++++++++++++++++++++ reactos/subsystems/ntvdm/emulator.h | 2 + reactos/subsystems/ntvdm/lang/cs-CZ.rc | 3 +- reactos/subsystems/ntvdm/lang/de-DE.rc | 3 +- reactos/subsystems/ntvdm/lang/en-US.rc | 3 +- reactos/subsystems/ntvdm/lang/es-ES.rc | 3 +- reactos/subsystems/ntvdm/lang/fr-FR.rc | 3 +- reactos/subsystems/ntvdm/lang/it-IT.rc | 3 +- reactos/subsystems/ntvdm/lang/pl-PL.rc | 3 +- reactos/subsystems/ntvdm/ntvdm.c | 7 ++- reactos/subsystems/ntvdm/resource.h | 9 ++- 11 files changed, 110 insertions(+), 10 deletions(-) diff --git a/reactos/subsystems/ntvdm/emulator.c b/reactos/subsystems/ntvdm/emulator.c index 094d156df7d..6503a0183a9 100644 --- a/reactos/subsystems/ntvdm/emulator.c +++ b/reactos/subsystems/ntvdm/emulator.c @@ -337,6 +337,87 @@ static VOID WINAPI PitChan2Out(LPVOID Param, BOOLEAN State) /* PUBLIC FUNCTIONS ***********************************************************/ +VOID DumpMemory(VOID) +{ + static ULONG DumpNumber = 0; + + HANDLE hFile; + WCHAR FileName[MAX_PATH]; + +#define LINE_SIZE 75 + 2 + ULONG i; + PBYTE Ptr1, Ptr2; + CHAR LineBuffer[LINE_SIZE]; + PCHAR Line; + SIZE_T LineSize; + + /* Build a suitable file name */ + _snwprintf(FileName, MAX_PATH, L"memdump%lu.txt", DumpNumber); + ++DumpNumber; + + /* Always create the dump file */ + hFile = CreateFileW(FileName, + GENERIC_WRITE, + 0, + NULL, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + DPRINT1("Error when creating '%S' for memory dumping, GetLastError() = %u\n", + FileName, GetLastError()); + return; + } + + /* Dump the VM memory */ + SetFilePointer(hFile, 0, NULL, FILE_BEGIN); + Ptr1 = Ptr2 = REAL_TO_PHYS(NULL); + while (MAX_ADDRESS - (ULONG_PTR)PHYS_TO_REAL(Ptr1) > 0) + { + Ptr1 = Ptr2; + Line = LineBuffer; + + /* Print the address */ + Line += snprintf(Line, LINE_SIZE + LineBuffer - Line, "%08x ", PHYS_TO_REAL(Ptr1)); + + /* Print up to 16 bytes... */ + + /* ... in hexadecimal form first... */ + i = 0; + while (i++ <= 0x0F && (MAX_ADDRESS - (ULONG_PTR)PHYS_TO_REAL(Ptr1) > 0)) + { + Line += snprintf(Line, LINE_SIZE + LineBuffer - Line, " %02x", *Ptr1); + ++Ptr1; + } + + /* ... align with spaces if needed... */ + RtlFillMemory(Line, 0x0F + 4 - i, ' '); + Line += 0x0F + 4 - i; + + /* ... then in character form. */ + i = 0; + while (i++ <= 0x0F && (MAX_ADDRESS - (ULONG_PTR)PHYS_TO_REAL(Ptr2) > 0)) + { + Line += snprintf(Line, LINE_SIZE + LineBuffer - Line, "%c", + (*Ptr2 >= 0x20 && *Ptr2 <= 0x7E) || (*Ptr2 >= 0x80 && *Ptr2 < 0xFF) ? *Ptr2 : '.'); + ++Ptr2; + } + + /* Newline */ + *Line++ = '\r'; + *Line++ = '\n'; + + /* Finally write the line to the file */ + LineSize = Line - LineBuffer; + WriteFile(hFile, LineBuffer, LineSize, &LineSize, NULL); + } + + /* Close the file */ + CloseHandle(hFile); +} + DWORD WINAPI PumpConsoleInput(LPVOID Parameter); BOOLEAN EmulatorInitialize(HANDLE ConsoleInput, HANDLE ConsoleOutput) diff --git a/reactos/subsystems/ntvdm/emulator.h b/reactos/subsystems/ntvdm/emulator.h index 1b1337f3726..38450ecbd0e 100644 --- a/reactos/subsystems/ntvdm/emulator.h +++ b/reactos/subsystems/ntvdm/emulator.h @@ -98,6 +98,8 @@ extern BOOLEAN VdmRunning; /* FUNCTIONS ******************************************************************/ +VOID DumpMemory(VOID); + VOID WINAPI EmulatorReadMemory ( PFAST486_STATE State, diff --git a/reactos/subsystems/ntvdm/lang/cs-CZ.rc b/reactos/subsystems/ntvdm/lang/cs-CZ.rc index b620634924c..20d62ec5197 100644 --- a/reactos/subsystems/ntvdm/lang/cs-CZ.rc +++ b/reactos/subsystems/ntvdm/lang/cs-CZ.rc @@ -15,5 +15,6 @@ END STRINGTABLE BEGIN - IDS_VDM_QUIT, "&Ukončit ReactOS VDM" + IDS_VDM_DUMPMEM, "Dump &Memory" + IDS_VDM_QUIT , "&Ukončit ReactOS VDM" END diff --git a/reactos/subsystems/ntvdm/lang/de-DE.rc b/reactos/subsystems/ntvdm/lang/de-DE.rc index 1f56de3559c..b6ee81afa1b 100644 --- a/reactos/subsystems/ntvdm/lang/de-DE.rc +++ b/reactos/subsystems/ntvdm/lang/de-DE.rc @@ -9,5 +9,6 @@ END STRINGTABLE BEGIN - IDS_VDM_QUIT, "ReactOS VDM b&eenden" + IDS_VDM_DUMPMEM, "Dump &Memory" + IDS_VDM_QUIT , "ReactOS VDM b&eenden" END diff --git a/reactos/subsystems/ntvdm/lang/en-US.rc b/reactos/subsystems/ntvdm/lang/en-US.rc index 4ec9d710cbb..a6373b8e908 100644 --- a/reactos/subsystems/ntvdm/lang/en-US.rc +++ b/reactos/subsystems/ntvdm/lang/en-US.rc @@ -9,5 +9,6 @@ END STRINGTABLE BEGIN - IDS_VDM_QUIT, "&Quit the ReactOS VDM" + IDS_VDM_DUMPMEM, "Dump &Memory" + IDS_VDM_QUIT , "&Quit the ReactOS VDM" END diff --git a/reactos/subsystems/ntvdm/lang/es-ES.rc b/reactos/subsystems/ntvdm/lang/es-ES.rc index 19d0591e7b8..00f69091b92 100644 --- a/reactos/subsystems/ntvdm/lang/es-ES.rc +++ b/reactos/subsystems/ntvdm/lang/es-ES.rc @@ -9,5 +9,6 @@ END STRINGTABLE BEGIN - IDS_VDM_QUIT, "&Salir de ReactOS VDM" + IDS_VDM_DUMPMEM, "Dump &Memory" + IDS_VDM_QUIT , "&Salir de ReactOS VDM" END diff --git a/reactos/subsystems/ntvdm/lang/fr-FR.rc b/reactos/subsystems/ntvdm/lang/fr-FR.rc index 853aa5271a9..01a1d525f16 100644 --- a/reactos/subsystems/ntvdm/lang/fr-FR.rc +++ b/reactos/subsystems/ntvdm/lang/fr-FR.rc @@ -9,5 +9,6 @@ END STRINGTABLE BEGIN - IDS_VDM_QUIT, "&Quitter la ReactOS VDM" + IDS_VDM_DUMPMEM, "Vidage &Mémoire" + IDS_VDM_QUIT , "&Quitter la ReactOS VDM" END diff --git a/reactos/subsystems/ntvdm/lang/it-IT.rc b/reactos/subsystems/ntvdm/lang/it-IT.rc index ff3a0960de5..9bce376dbac 100644 --- a/reactos/subsystems/ntvdm/lang/it-IT.rc +++ b/reactos/subsystems/ntvdm/lang/it-IT.rc @@ -9,5 +9,6 @@ END STRINGTABLE BEGIN - IDS_VDM_QUIT, "&Esci da ReactOS VDM" + IDS_VDM_DUMPMEM, "Dump &Memory" + IDS_VDM_QUIT , "&Esci da ReactOS VDM" END diff --git a/reactos/subsystems/ntvdm/lang/pl-PL.rc b/reactos/subsystems/ntvdm/lang/pl-PL.rc index e23ee40e887..84701cf04ee 100644 --- a/reactos/subsystems/ntvdm/lang/pl-PL.rc +++ b/reactos/subsystems/ntvdm/lang/pl-PL.rc @@ -11,5 +11,6 @@ END STRINGTABLE BEGIN - IDS_VDM_QUIT, "&Wyjdź z ReactOS VDM" + IDS_VDM_DUMPMEM, "Dump &Memory" + IDS_VDM_QUIT , "&Wyjdź z ReactOS VDM" END diff --git a/reactos/subsystems/ntvdm/ntvdm.c b/reactos/subsystems/ntvdm/ntvdm.c index 300c34fb9cc..d0e1293cec7 100644 --- a/reactos/subsystems/ntvdm/ntvdm.c +++ b/reactos/subsystems/ntvdm/ntvdm.c @@ -51,7 +51,8 @@ typedef struct _VDM_MENUITEM static const VDM_MENUITEM VdmMenuItems[] = { - { IDS_VDM_QUIT, NULL, ID_VDM_QUIT }, + { IDS_VDM_DUMPMEM, NULL, ID_VDM_DUMPMEM }, + { IDS_VDM_QUIT , NULL, ID_VDM_QUIT }, { 0, NULL, 0 } /* End of list */ }; @@ -368,6 +369,10 @@ PumpConsoleInput(LPVOID Parameter) ShowPointer = !ShowPointer; break; + case ID_VDM_DUMPMEM: + DumpMemory(); + break; + case ID_VDM_QUIT: /* Stop the VDM */ EmulatorTerminate(); diff --git a/reactos/subsystems/ntvdm/resource.h b/reactos/subsystems/ntvdm/resource.h index f7a6f3c2a1b..2534ff9b80d 100644 --- a/reactos/subsystems/ntvdm/resource.h +++ b/reactos/subsystems/ntvdm/resource.h @@ -1,14 +1,19 @@ #pragma once +/* Menu IDs */ #define ID_SHOWHIDE_MOUSE 1000 -#define ID_VDM_QUIT 1001 +#define ID_VDM_DUMPMEM 1001 +#define ID_VDM_QUIT 1002 +/* String IDs */ #define IDS_HIDE_MOUSE 100 #define IDS_SHOW_MOUSE 101 #define IDS_VDM_MENU 102 -#define IDS_VDM_QUIT 200 +#define IDS_VDM_DUMPMEM 200 +#define IDS_VDM_QUIT 201 +/* Icon */ #define IDI_APPICON 1 /* EOF */ From 2736ab0dcae9128dd78c085dea8d6f54b27f01c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Sat, 17 May 2014 23:55:14 +0000 Subject: [PATCH 52/81] [NTVDM]: Improve the dumper a bit. svn path=/trunk/; revision=63343 --- reactos/subsystems/ntvdm/emulator.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/reactos/subsystems/ntvdm/emulator.c b/reactos/subsystems/ntvdm/emulator.c index 6503a0183a9..3bc60c0d3bb 100644 --- a/reactos/subsystems/ntvdm/emulator.c +++ b/reactos/subsystems/ntvdm/emulator.c @@ -400,8 +400,7 @@ VOID DumpMemory(VOID) i = 0; while (i++ <= 0x0F && (MAX_ADDRESS - (ULONG_PTR)PHYS_TO_REAL(Ptr2) > 0)) { - Line += snprintf(Line, LINE_SIZE + LineBuffer - Line, "%c", - (*Ptr2 >= 0x20 && *Ptr2 <= 0x7E) || (*Ptr2 >= 0x80 && *Ptr2 < 0xFF) ? *Ptr2 : '.'); + *Line++ = ((*Ptr2 >= 0x20 && *Ptr2 <= 0x7E) || (*Ptr2 >= 0x80 && *Ptr2 < 0xFF) ? *Ptr2 : '.'); ++Ptr2; } From 689159fedc6cefecaaa8b72571cf04e0b1ef4232 Mon Sep 17 00:00:00 2001 From: Cameron Gutman <aicommander@gmail.com> Date: Sun, 18 May 2014 05:52:09 +0000 Subject: [PATCH 53/81] [ACPI] - Fix a buffer overrun that caused a BSOD with ACPI enabled on Hyper-V - Dynamically allocate the hardware ID buffer to prevent another HID overrun - Switched sprintf to snprintf to prevent this from happening to another ID svn path=/trunk/; revision=63344 --- reactos/drivers/bus/acpi/busmgr/bus.c | 45 ++++++++++++--------- reactos/drivers/bus/acpi/include/acpi_bus.h | 6 +-- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/reactos/drivers/bus/acpi/busmgr/bus.c b/reactos/drivers/bus/acpi/busmgr/bus.c index 77b822d2149..ebdb3a62c1b 100644 --- a/reactos/drivers/bus/acpi/busmgr/bus.c +++ b/reactos/drivers/bus/acpi/busmgr/bus.c @@ -1142,7 +1142,7 @@ acpi_bus_add ( char *uid = NULL; ACPI_PNP_DEVICE_ID_LIST *cid_list = NULL; int i = 0; - char static_uid_buffer[5]; + acpi_unique_id static_uid_buffer; if (!child) return_VALUE(AE_BAD_PARAMETER); @@ -1165,15 +1165,15 @@ acpi_bus_add ( */ switch (type) { case ACPI_BUS_TYPE_SYSTEM: - sprintf(device->pnp.bus_id, "%s", "ACPI"); + snprintf(device->pnp.bus_id, sizeof(device->pnp.bus_id), "%s", "ACPI"); break; case ACPI_BUS_TYPE_POWER_BUTTONF: case ACPI_BUS_TYPE_POWER_BUTTON: - sprintf(device->pnp.bus_id, "%s", "PWRF"); + snprintf(device->pnp.bus_id, sizeof(device->pnp.bus_id), "%s", "PWRF"); break; case ACPI_BUS_TYPE_SLEEP_BUTTONF: case ACPI_BUS_TYPE_SLEEP_BUTTON: - sprintf(device->pnp.bus_id, "%s", "SLPF"); + snprintf(device->pnp.bus_id, sizeof(device->pnp.bus_id), "%s", "SLPF"); break; default: buffer.Length = sizeof(bus_id); @@ -1188,7 +1188,7 @@ acpi_bus_add ( else break; } - sprintf(device->pnp.bus_id, "%s", bus_id); + snprintf(device->pnp.bus_id, sizeof(device->pnp.bus_id), "%s", bus_id); buffer.Pointer = NULL; /* HACK: Skip HPET */ @@ -1277,12 +1277,12 @@ acpi_bus_add ( case ACPI_BUS_TYPE_POWER: hid = ACPI_POWER_HID; uid = static_uid_buffer; - sprintf(uid, "%d", (PowerDeviceCount++)); + snprintf(uid, sizeof(static_uid_buffer), "%d", (PowerDeviceCount++)); break; case ACPI_BUS_TYPE_PROCESSOR: hid = ACPI_PROCESSOR_HID; uid = static_uid_buffer; - sprintf(uid, "_%d", (ProcessorCount++)); + snprintf(uid, sizeof(static_uid_buffer), "_%d", (ProcessorCount++)); break; case ACPI_BUS_TYPE_SYSTEM: hid = ACPI_SYSTEM_HID; @@ -1290,27 +1290,27 @@ acpi_bus_add ( case ACPI_BUS_TYPE_THERMAL: hid = ACPI_THERMAL_HID; uid = static_uid_buffer; - sprintf(uid, "%d", (ThermalZoneCount++)); + snprintf(uid, sizeof(static_uid_buffer), "%d", (ThermalZoneCount++)); break; case ACPI_BUS_TYPE_POWER_BUTTON: hid = ACPI_BUTTON_HID_POWER; uid = static_uid_buffer; - sprintf(uid, "%d", (PowerButtonCount++)); + snprintf(uid, sizeof(static_uid_buffer), "%d", (PowerButtonCount++)); break; case ACPI_BUS_TYPE_POWER_BUTTONF: hid = ACPI_BUTTON_HID_POWERF; uid = static_uid_buffer; - sprintf(uid, "%d", (FixedPowerButtonCount++)); + snprintf(uid, sizeof(static_uid_buffer), "%d", (FixedPowerButtonCount++)); break; case ACPI_BUS_TYPE_SLEEP_BUTTON: hid = ACPI_BUTTON_HID_SLEEP; uid = static_uid_buffer; - sprintf(uid, "%d", (SleepButtonCount++)); + snprintf(uid, sizeof(static_uid_buffer), "%d", (SleepButtonCount++)); break; case ACPI_BUS_TYPE_SLEEP_BUTTONF: hid = ACPI_BUTTON_HID_SLEEPF; uid = static_uid_buffer; - sprintf(uid, "%d", (FixedSleepButtonCount++)); + snprintf(uid, sizeof(static_uid_buffer), "%d", (FixedSleepButtonCount++)); break; } @@ -1321,16 +1321,19 @@ acpi_bus_add ( */ if (((ACPI_HANDLE)parent == ACPI_ROOT_OBJECT) && (type == ACPI_BUS_TYPE_DEVICE)) { hid = ACPI_BUS_HID; - sprintf(device->pnp.device_name, "%s", ACPI_BUS_DEVICE_NAME); - sprintf(device->pnp.device_class, "%s", ACPI_BUS_CLASS); + snprintf(device->pnp.device_name, sizeof(device->pnp.device_name), "%s", ACPI_BUS_DEVICE_NAME); + snprintf(device->pnp.device_class, sizeof(device->pnp.device_class), "%s", ACPI_BUS_CLASS); } if (hid) { - sprintf(device->pnp.hardware_id, "%s", hid); - device->flags.hardware_id = 1; + device->pnp.hardware_id = ExAllocatePoolWithTag(NonPagedPool, strlen(hid) + 1, 'IPCA'); + if (device->pnp.hardware_id) { + snprintf(device->pnp.hardware_id, strlen(hid) + 1, "%s", hid); + device->flags.hardware_id = 1; + } } if (uid) { - sprintf(device->pnp.unique_id, "%s", uid); + snprintf(device->pnp.unique_id, sizeof(device->pnp.unique_id), "%s", uid); device->flags.unique_id = 1; } @@ -1434,6 +1437,9 @@ end: if (device->pnp.cid_list) { ExFreePoolWithTag(device->pnp.cid_list, 'IPCA'); } + if (device->pnp.hardware_id) { + ExFreePoolWithTag(device->pnp.hardware_id, 'IPCA'); + } ExFreePoolWithTag(device, 'IPCA'); return_VALUE(result); } @@ -1454,9 +1460,12 @@ acpi_bus_remove ( acpi_device_unregister(device); - if (device && device->pnp.cid_list) + if (device->pnp.cid_list) ExFreePoolWithTag(device->pnp.cid_list, 'IPCA'); + if (device->pnp.hardware_id) + ExFreePoolWithTag(device->pnp.hardware_id, 'IPCA'); + if (device) ExFreePoolWithTag(device, 'IPCA'); diff --git a/reactos/drivers/bus/acpi/include/acpi_bus.h b/reactos/drivers/bus/acpi/include/acpi_bus.h index 4320f63a1dd..148373f6608 100644 --- a/reactos/drivers/bus/acpi/include/acpi_bus.h +++ b/reactos/drivers/bus/acpi/include/acpi_bus.h @@ -164,10 +164,10 @@ struct acpi_device_flags { /* Plug and Play */ -typedef char acpi_bus_id[20]; +typedef char acpi_bus_id[8]; typedef unsigned long acpi_bus_address; -typedef char acpi_hardware_id[20]; -typedef char acpi_unique_id[20]; +typedef char *acpi_hardware_id; +typedef char acpi_unique_id[9]; typedef char acpi_device_name[40]; typedef char acpi_device_class[20]; From ae4a8102df76eabf46f5785e6aab745565ec1930 Mon Sep 17 00:00:00 2001 From: Cameron Gutman <aicommander@gmail.com> Date: Sun, 18 May 2014 06:19:05 +0000 Subject: [PATCH 54/81] [ACPI] - Start reporting compatible IDs for ACPI-enumerated devices other than processors - Not sure how this was overlooked for so long... svn path=/trunk/; revision=63345 --- reactos/drivers/bus/acpi/buspdo.c | 71 +++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 18 deletions(-) diff --git a/reactos/drivers/bus/acpi/buspdo.c b/reactos/drivers/bus/acpi/buspdo.c index cb5965f5072..a50fa173650 100644 --- a/reactos/drivers/bus/acpi/buspdo.c +++ b/reactos/drivers/bus/acpi/buspdo.c @@ -400,7 +400,7 @@ Bus_PDO_QueryDeviceId( PIO_STACK_LOCATION stack; PWCHAR buffer, src; WCHAR temp[256]; - ULONG length; + ULONG length, i; NTSTATUS status = STATUS_SUCCESS; struct acpi_device *Device; @@ -490,11 +490,18 @@ Bus_PDO_QueryDeviceId( /* This is a REG_MULTI_SZ value */ length = 0; + status = STATUS_NOT_SUPPORTED; /* See comment in BusQueryDeviceID case */ if (DeviceData->AcpiHandle) { acpi_bus_get_device(DeviceData->AcpiHandle, &Device); + + if (!Device->flags.hardware_id) + { + /* We don't have the ID to satisfy this request */ + break; + } DPRINT("Device name: %s\n", Device->pnp.device_name); DPRINT("Hardware ID: %s\n", Device->pnp.hardware_id); @@ -557,11 +564,17 @@ Bus_PDO_QueryDeviceId( { acpi_bus_get_device(DeviceData->AcpiHandle, &Device); + if (!Device->flags.hardware_id) + { + /* We don't have the ID to satisfy this request */ + break; + } + + DPRINT("Device name: %s\n", Device->pnp.device_name); + DPRINT("Hardware ID: %s\n", Device->pnp.hardware_id); + if (strcmp(Device->pnp.hardware_id, "Processor") == 0) { - DPRINT("Device name: %s\n", Device->pnp.device_name); - DPRINT("Hardware ID: %s\n", Device->pnp.hardware_id); - length += swprintf(&temp[length], L"ACPI\\%hs", Device->pnp.hardware_id); @@ -572,21 +585,43 @@ Bus_PDO_QueryDeviceId( Device->pnp.hardware_id); temp[length++] = UNICODE_NULL; temp[length++] = UNICODE_NULL; - - NT_ASSERT(length * sizeof(WCHAR) <= sizeof(temp)); - - buffer = ExAllocatePoolWithTag (PagedPool, length * sizeof(WCHAR), 'IPCA'); - if (!buffer) - { - status = STATUS_INSUFFICIENT_RESOURCES; - break; - } - - RtlCopyMemory (buffer, temp, length * sizeof(WCHAR)); - Irp->IoStatus.Information = (ULONG_PTR) buffer; - DPRINT("BusQueryHardwareIDs: %ls\n",buffer); - status = STATUS_SUCCESS; } + else if (Device->flags.compatible_ids) + { + for (i = 0; i < Device->pnp.cid_list->Count; i++) + { + length += swprintf(&temp[length], + L"ACPI\\%hs", + Device->pnp.cid_list->Ids[i].String); + temp[length++] = UNICODE_NULL; + + length += swprintf(&temp[length], + L"*%hs", + Device->pnp.cid_list->Ids[i].String); + temp[length++] = UNICODE_NULL; + } + + temp[length++] = UNICODE_NULL; + } + else + { + /* No compatible IDs */ + break; + } + + NT_ASSERT(length * sizeof(WCHAR) <= sizeof(temp)); + + buffer = ExAllocatePoolWithTag (PagedPool, length * sizeof(WCHAR), 'IPCA'); + if (!buffer) + { + status = STATUS_INSUFFICIENT_RESOURCES; + break; + } + + RtlCopyMemory (buffer, temp, length * sizeof(WCHAR)); + Irp->IoStatus.Information = (ULONG_PTR) buffer; + DPRINT("BusQueryCompatibleIDs: %ls\n",buffer); + status = STATUS_SUCCESS; } break; From a59063a064f594255a531e39081981b40141577f Mon Sep 17 00:00:00 2001 From: Cameron Gutman <aicommander@gmail.com> Date: Sun, 18 May 2014 06:58:51 +0000 Subject: [PATCH 55/81] [ACPI] - Fix 2nd stage boot svn path=/trunk/; revision=63346 --- reactos/drivers/bus/acpi/buspdo.c | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/drivers/bus/acpi/buspdo.c b/reactos/drivers/bus/acpi/buspdo.c index a50fa173650..3c09e521723 100644 --- a/reactos/drivers/bus/acpi/buspdo.c +++ b/reactos/drivers/bus/acpi/buspdo.c @@ -551,6 +551,7 @@ Bus_PDO_QueryDeviceId( RtlCopyMemory (buffer, src, length * sizeof(WCHAR)); Irp->IoStatus.Information = (ULONG_PTR) buffer; DPRINT("BusQueryHardwareIDs: %ls\n",buffer); + status = STATUS_SUCCESS; break; case BusQueryCompatibleIDs: From 9c10a292db781d5a24293546939aad7cb805225f Mon Sep 17 00:00:00 2001 From: Cameron Gutman <aicommander@gmail.com> Date: Sun, 18 May 2014 07:21:58 +0000 Subject: [PATCH 56/81] [HIVESYS] - Add PS/2 input devices to the critical device database svn path=/trunk/; revision=63347 --- reactos/boot/bootdata/hivesys.inf | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/reactos/boot/bootdata/hivesys.inf b/reactos/boot/bootdata/hivesys.inf index 8433438a741..feba91ffcfb 100644 --- a/reactos/boot/bootdata/hivesys.inf +++ b/reactos/boot/bootdata/hivesys.inf @@ -74,6 +74,29 @@ HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0300","Clas HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0301","Service",0x00000000,"VBE" HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0301","ClassGUID",0x00000000,"{4D36E968-E325-11CE-BFC1-08002BE10318}" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0303","Service",0x00000000,"i8042prt" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0303","ClassGUID",0x00000000,"{4D36E96B-E325-11CE-BFC1-08002BE10318}" + +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F0E","Service",0x00000000,"i8042prt" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F0E","ClassGUID",0x00000000,"{4D36E96F-E325-11CE-BFC1-08002BE10318}" + +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F19","Service",0x00000000,"i8042prt" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F19","ClassGUID",0x00000000,"{4D36E96F-E325-11CE-BFC1-08002BE10318}" + +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PS2_MOUSE","Service",0x00000000,"i8042prt" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PS2_MOUSE","ClassGUID",0x00000000,"{4D36E96F-E325-11CE-BFC1-08002BE10318}" + +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F13","Service",0x00000000,"i8042prt" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F13","ClassGUID",0x00000000,"{4D36E96F-E325-11CE-BFC1-08002BE10318}" + +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*IBM3780","Service",0x00000000,"i8042prt" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*IBM3780","ClassGUID",0x00000000,"{4D36E96F-E325-11CE-BFC1-08002BE10318}" + +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F12","Service",0x00000000,"i8042prt" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F12","ClassGUID",0x00000000,"{4D36E96F-E325-11CE-BFC1-08002BE10318}" + +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F03","Service",0x00000000,"i8042prt" +HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0F03","ClassGUID",0x00000000,"{4D36E96F-E325-11CE-BFC1-08002BE10318}" HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot","AlternateShell",2,"cmd.exe" From 0a83347ad4e9c42530420dd410a9d1b116200034 Mon Sep 17 00:00:00 2001 From: Cameron Gutman <aicommander@gmail.com> Date: Sun, 18 May 2014 08:43:31 +0000 Subject: [PATCH 57/81] [NDIS] - Restore the pending NDIS request before calling the completion routine - Fixes crash with Broadcom 57xx drivers (link detection still not working) svn path=/trunk/; revision=63348 --- reactos/drivers/network/ndis/ndis/miniport.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reactos/drivers/network/ndis/ndis/miniport.c b/reactos/drivers/network/ndis/ndis/miniport.c index 3119e6f9295..f84df4e9ea3 100644 --- a/reactos/drivers/network/ndis/ndis/miniport.c +++ b/reactos/drivers/network/ndis/ndis/miniport.c @@ -1317,10 +1317,11 @@ MiniportWorker(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context) if (NdisStatus == NDIS_STATUS_PENDING) break; + Adapter->NdisMiniportBlock.PendingRequest = (PNDIS_REQUEST)WorkItemContext; switch (((PNDIS_REQUEST)WorkItemContext)->RequestType) { case NdisRequestQueryInformation: - NdisMQueryInformationComplete((NDIS_HANDLE)Adapter, NdisStatus); + NdisMQueryInformationComplete((NDIS_HANDLE)Adapter, NdisStatus); break; case NdisRequestSetInformation: @@ -1331,6 +1332,7 @@ MiniportWorker(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context) NDIS_DbgPrint(MIN_TRACE, ("Unknown NDIS request type.\n")); break; } + Adapter->NdisMiniportBlock.PendingRequest = NULL; break; default: From abcd5483083fecfaf60c4caf2740b9df9e225b1c Mon Sep 17 00:00:00 2001 From: Cameron Gutman <aicommander@gmail.com> Date: Sun, 18 May 2014 08:54:32 +0000 Subject: [PATCH 58/81] [ACPI] - Handle IRP_MN_CANCEL_REMOVE_DEVICE, IRP_MN_QUERY_REMOVE_DEVICE, and IRP_MN_REMOVE_DEVICE for child devices - Fixes issues loading new drivers for ACPI-enumerated devices svn path=/trunk/; revision=63349 --- reactos/drivers/bus/acpi/buspdo.c | 36 ++++++++++++++++++++++ reactos/drivers/bus/acpi/include/acpisys.h | 1 + 2 files changed, 37 insertions(+) diff --git a/reactos/drivers/bus/acpi/buspdo.c b/reactos/drivers/bus/acpi/buspdo.c index 3c09e521723..0f70facb580 100644 --- a/reactos/drivers/bus/acpi/buspdo.c +++ b/reactos/drivers/bus/acpi/buspdo.c @@ -165,6 +165,42 @@ Bus_PDO_PnP ( } status = STATUS_SUCCESS;// We must not fail this IRP. break; + + case IRP_MN_REMOVE_DEVICE: + // + // We handle REMOVE_DEVICE just like STOP_DEVICE. This is because + // the device is still physically present (or at least we don't know any better) + // so we have to retain the PDO after stopping and removing power from it. + // + if (DeviceData->InterfaceName.Length != 0) + IoSetDeviceInterfaceState(&DeviceData->InterfaceName, FALSE); + + if (DeviceData->AcpiHandle && acpi_bus_power_manageable(DeviceData->AcpiHandle) && + !ACPI_SUCCESS(acpi_bus_set_power(DeviceData->AcpiHandle, ACPI_STATE_D3))) + { + DPRINT1("Device %x failed to enter D3!\n", DeviceData->AcpiHandle); + state.DeviceState = PowerDeviceD3; + PoSetPowerState(DeviceData->Common.Self, DevicePowerState, state); + DeviceData->Common.DevicePowerState = PowerDeviceD3; + } + + SET_NEW_PNP_STATE(DeviceData->Common, Stopped); + status = STATUS_SUCCESS; + break; + + case IRP_MN_QUERY_REMOVE_DEVICE: + SET_NEW_PNP_STATE(DeviceData->Common, RemovalPending); + status = STATUS_SUCCESS; + break; + + case IRP_MN_CANCEL_REMOVE_DEVICE: + if (RemovalPending == DeviceData->Common.DevicePnPState) + { + RESTORE_PREVIOUS_PNP_STATE(DeviceData->Common); + } + status = STATUS_SUCCESS; + break; + case IRP_MN_QUERY_CAPABILITIES: // diff --git a/reactos/drivers/bus/acpi/include/acpisys.h b/reactos/drivers/bus/acpi/include/acpisys.h index e1f8fa555df..71646859e3d 100644 --- a/reactos/drivers/bus/acpi/include/acpisys.h +++ b/reactos/drivers/bus/acpi/include/acpisys.h @@ -13,6 +13,7 @@ typedef enum _DEVICE_PNP_STATE { Started, // Device has received the START_DEVICE IRP StopPending, // Device has received the QUERY_STOP IRP Stopped, // Device has received the STOP_DEVICE IRP + RemovalPending, // Device has received the QUERY_REMOVE IRP UnKnown // Unknown state } DEVICE_PNP_STATE; From ac454fae845059586c940695e4eca109162a96cb Mon Sep 17 00:00:00 2001 From: Amine Khaldi <amine.khaldi@reactos.org> Date: Sun, 18 May 2014 14:39:03 +0000 Subject: [PATCH 59/81] [CMAKE/MSVC] * Define _ALLOW_KEYWORD_MACROS to get the news MSVC toolchain to allow us to redefine inline (it became a keyword). Reported by David Quintana. svn path=/trunk/; revision=63353 --- reactos/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reactos/CMakeLists.txt b/reactos/CMakeLists.txt index a6a48ac077b..894af650fb2 100644 --- a/reactos/CMakeLists.txt +++ b/reactos/CMakeLists.txt @@ -63,6 +63,9 @@ if(NOT CMAKE_CROSSCOMPILING) if(ARCH STREQUAL "i386") add_definitions(/D_X86_ /DWIN32 /D_WINDOWS) endif() + if(MSVC_VERSION GREATER 1799) + add_definitions(/D_ALLOW_KEYWORD_MACROS) + endif() add_definitions(/Dinline=__inline) else() add_compile_flags("-fshort-wchar -Wno-multichar") From 9e6083e5c2c6aa8ce0529ab3097760c5595c132a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer <timo.kreuzer@reactos.org> Date: Sun, 18 May 2014 14:59:31 +0000 Subject: [PATCH 60/81] [NTOSKRNL] - Do not ASSERT that a page fault im MmArmAccessFault happens on an invalid page. Instead handle write-on-readonly-PTE faults (Copy-on-write still unhandled). This ASSERT was not triggered so far, since ARM3 mapped all pages as read/write regardless of protection! So all (page file backed) sections mapped into user space were writable and could be happily modified from user mode! - Fix MI_MAKE_HARDWARE_PTE_USER, so that it respects the actual protection. svn path=/trunk/; revision=63354 --- reactos/ntoskrnl/mm/ARM3/miarm.h | 3 ++- reactos/ntoskrnl/mm/ARM3/pagfault.c | 32 +++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index 00566877b05..1a86f7e40fc 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -887,9 +887,10 @@ MI_MAKE_HARDWARE_PTE_USER(IN PMMPTE NewPte, ASSERT(MappingPte <= MiHighestUserPte); /* Start fresh */ - *NewPte = ValidKernelPte; + NewPte->u.Long = 0; /* Set the protection and page */ + NewPte->u.Hard.Valid = TRUE; NewPte->u.Hard.Owner = TRUE; NewPte->u.Hard.PageFrameNumber = PageFrameNumber; NewPte->u.Long |= MmProtectToPteMask[ProtectionMask]; diff --git a/reactos/ntoskrnl/mm/ARM3/pagfault.c b/reactos/ntoskrnl/mm/ARM3/pagfault.c index d8516bff64c..662d1ea9702 100644 --- a/reactos/ntoskrnl/mm/ARM3/pagfault.c +++ b/reactos/ntoskrnl/mm/ARM3/pagfault.c @@ -1835,9 +1835,37 @@ UserFault: ASSERT(MI_IS_PAGE_LARGE(PointerPde) == FALSE); } - /* Now capture the PTE. Ignore virtual faults for now */ + /* Now capture the PTE. */ TempPte = *PointerPte; - ASSERT(TempPte.u.Hard.Valid == 0); + + /* Check if the PTE is valid */ + if (TempPte.u.Hard.Valid) + { + /* Check if this is a write on a readonly PTE */ + if (StoreInstruction) + { + /* Is this a copy on write PTE? */ + if (TempPte.u.Hard.CopyOnWrite) + { + /* Not supported yet */ + ASSERT(FALSE); + } + + /* Is this a read-only PTE? */ + if (!TempPte.u.Hard.Write) + { + /* Return the status */ + MiUnlockProcessWorkingSet(CurrentProcess, CurrentThread); + return STATUS_ACCESS_VIOLATION; + } + } + + /* FIXME: Execution is ignored for now, since we don't have no-execute pages yet */ + + /* The fault has already been resolved by a different thread */ + MiUnlockProcessWorkingSet(CurrentProcess, CurrentThread); + return STATUS_SUCCESS; + } /* Quick check for demand-zero */ if (TempPte.u.Long == (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)) From 005d881ce1cc678d98b660a39cca6d447a98e289 Mon Sep 17 00:00:00 2001 From: Eric Kohl <eric.kohl@reactos.org> Date: Sun, 18 May 2014 15:14:24 +0000 Subject: [PATCH 61/81] [USETUP] First part of the partition management code rewrite. This part fixes the handling of primary partitions. Extended partitions and logical drives are not handled yet. Safety checks and warnings are still missing! Partitions created by the new code are accepted by gparted and Windows. svn path=/trunk/; revision=63355 --- reactos/base/setup/usetup/bootsup.c | 8 +- reactos/base/setup/usetup/interface/usetup.c | 251 ++- reactos/base/setup/usetup/partlist.c | 1888 ++++++++---------- reactos/base/setup/usetup/partlist.h | 50 +- 4 files changed, 953 insertions(+), 1244 deletions(-) diff --git a/reactos/base/setup/usetup/bootsup.c b/reactos/base/setup/usetup/bootsup.c index 74d5ad3ffff..183641cfca0 100644 --- a/reactos/base/setup/usetup/bootsup.c +++ b/reactos/base/setup/usetup/bootsup.c @@ -1444,7 +1444,6 @@ InstallFat16BootCodeToDisk( NTSTATUS Status; PFAT_BOOTSECTOR OrigBootSector; PFAT_BOOTSECTOR NewBootSector; - PARTITION_INFORMATION *PartInfo; /* Allocate buffer for original bootsector */ OrigBootSector = RtlAllocateHeap(ProcessHeap, 0, SECTORSIZE); @@ -1543,8 +1542,7 @@ InstallFat16BootCodeToDisk( FIELD_OFFSET(FAT_BOOTSECTOR, BootCodeAndData) - FIELD_OFFSET(FAT_BOOTSECTOR, OemName)); - PartInfo = &PartitionList->CurrentPartition->PartInfo[PartitionList->CurrentPartitionNumber]; - NewBootSector->HiddenSectors = PartInfo->HiddenSectors; + NewBootSector->HiddenSectors = PartitionList->CurrentDisk->SectorsPerTrack; /* Free the original boot sector */ RtlFreeHeap(ProcessHeap, 0, OrigBootSector); @@ -1606,7 +1604,6 @@ InstallFat32BootCodeToDisk( PFAT32_BOOTSECTOR NewBootSector; LARGE_INTEGER FileOffset; USHORT BackupBootSector; - PARTITION_INFORMATION *PartInfo; /* Allocate buffer for original bootsector */ OrigBootSector = RtlAllocateHeap(ProcessHeap, 0, SECTORSIZE); @@ -1704,8 +1701,7 @@ InstallFat32BootCodeToDisk( FIELD_OFFSET(FAT32_BOOTSECTOR, BootCodeAndData) - FIELD_OFFSET(FAT32_BOOTSECTOR, OemName)); - PartInfo = &PartitionList->CurrentPartition->PartInfo[PartitionList->CurrentPartitionNumber]; - NewBootSector->HiddenSectors = PartInfo->HiddenSectors; + NewBootSector->HiddenSectors = PartitionList->CurrentDisk->SectorsPerTrack; /* Get the location of the backup boot sector */ BackupBootSector = OrigBootSector->BackupBootSector; diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c index 8ba4d858be9..c0c597e617c 100644 --- a/reactos/base/setup/usetup/interface/usetup.c +++ b/reactos/base/setup/usetup/interface/usetup.c @@ -1428,6 +1428,7 @@ LayoutSettingsPage(PINPUT_RECORD Ir) } +#if 0 static BOOL IsDiskSizeValid(PPARTENTRY PartEntry) { @@ -1456,6 +1457,7 @@ IsDiskSizeValid(PPARTENTRY PartEntry) return TRUE; } } +#endif static PAGE_NUMBER @@ -1512,32 +1514,32 @@ SelectPartitionPage(PINPUT_RECORD Ir) { if (AutoPartition) { - PPARTENTRY PartEntry = PartitionList->CurrentPartition; - ULONG MaxSize = (PartEntry->UnpartitionedLength + (1 << 19)) >> 20; /* in MBytes (rounded) */ - if(!IsDiskSizeValid(PartitionList->CurrentPartition)) +#if 0 + if (!IsDiskSizeValid(PartitionList->CurrentPartition)) { MUIDisplayError(ERROR_INSUFFICIENT_DISKSPACE, Ir, POPUP_WAIT_ANY_KEY); return SELECT_PARTITION_PAGE; /* let the user select another partition */ } - +#endif CreateNewPartition(PartitionList, - MaxSize, + PartitionList->CurrentPartition->SectorCount.QuadPart, TRUE); - DestinationDriveLetter = (WCHAR)PartitionList->CurrentPartition->DriveLetter[0]; + DestinationDriveLetter = (WCHAR)PartitionList->CurrentPartition->DriveLetter; return SELECT_FILE_SYSTEM_PAGE; } } else { - if(!IsDiskSizeValid(PartitionList->CurrentPartition)) +#if 0 + if (!IsDiskSizeValid(PartitionList->CurrentPartition)) { MUIDisplayError(ERROR_INSUFFICIENT_DISKSPACE, Ir, POPUP_WAIT_ANY_KEY); return SELECT_PARTITION_PAGE; /* let the user select another partition */ } - - DestinationDriveLetter = (WCHAR)PartitionList->CurrentPartition->DriveLetter[0]; +#endif + DestinationDriveLetter = (WCHAR)PartitionList->CurrentPartition->DriveLetter; return SELECT_FILE_SYSTEM_PAGE; } @@ -1547,7 +1549,7 @@ SelectPartitionPage(PINPUT_RECORD Ir) { /* Update status text */ if (PartitionList->CurrentPartition == NULL || - PartitionList->CurrentPartition->Unpartitioned == TRUE) + PartitionList->CurrentPartition->IsPartitioned == FALSE) { CONSOLE_SetStatusText(MUIGetString(STRING_INSTALLCREATEPARTITION)); } @@ -1582,26 +1584,28 @@ SelectPartitionPage(PINPUT_RECORD Ir) } else if (Ir->Event.KeyEvent.wVirtualKeyCode == VK_RETURN) /* ENTER */ { - if(!IsDiskSizeValid(PartitionList->CurrentPartition)) +#if 0 + if (!IsDiskSizeValid(PartitionList->CurrentPartition)) { MUIDisplayError(ERROR_INSUFFICIENT_DISKSPACE, Ir, POPUP_WAIT_ANY_KEY); return SELECT_PARTITION_PAGE; /* let the user select another partition */ } +#endif if (PartitionList->CurrentPartition == NULL || - PartitionList->CurrentPartition->Unpartitioned == TRUE) + PartitionList->CurrentPartition->IsPartitioned == FALSE) { CreateNewPartition(PartitionList, 0ULL, TRUE); } - DestinationDriveLetter = (WCHAR)PartitionList->CurrentPartition->DriveLetter[0]; + DestinationDriveLetter = (WCHAR)PartitionList->CurrentPartition->DriveLetter; return SELECT_FILE_SYSTEM_PAGE; } else if (Ir->Event.KeyEvent.wVirtualKeyCode == 'C') /* C */ { - if (PartitionList->CurrentPartition->Unpartitioned == FALSE) + if (PartitionList->CurrentPartition->IsPartitioned == TRUE) { MUIDisplayError(ERROR_NEW_PARTITION, Ir, POPUP_WAIT_ANY_KEY); return SELECT_PARTITION_PAGE; @@ -1611,7 +1615,7 @@ SelectPartitionPage(PINPUT_RECORD Ir) } else if (Ir->Event.KeyEvent.wVirtualKeyCode == 'D') /* D */ { - if (PartitionList->CurrentPartition->Unpartitioned == TRUE) + if (PartitionList->CurrentPartition->IsPartitioned == FALSE) { MUIDisplayError(ERROR_DELETE_SPACE, Ir, POPUP_WAIT_ANY_KEY); return SELECT_PARTITION_PAGE; @@ -1779,6 +1783,7 @@ CreatePartitionPage(PINPUT_RECORD Ir) ULONG MaxSize; ULONGLONG PartSize; ULONGLONG DiskSize; + ULONGLONG SectorCount; PCHAR Unit; if (PartitionList == NULL || @@ -1796,17 +1801,17 @@ CreatePartitionPage(PINPUT_RECORD Ir) CONSOLE_SetTextXY(6, 8, MUIGetString(STRING_CHOOSENEWPARTITION)); + DiskSize = DiskEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; #if 0 - if (DiskEntry->DiskSize >= 0x280000000ULL) /* 10 GB */ + if (DiskSize >= 10737418240) /* 10 GB */ { - DiskSize = (DiskEntry->DiskSize + (1 << 29)) >> 30; + DiskSize = DiskSize / 1073741824; Unit = MUIGetString(STRING_GB); } else #endif { - DiskSize = (DiskEntry->DiskSize + (1 << 19)) >> 20; - + DiskSize = DiskSize / 1048576; if (DiskSize == 0) DiskSize = 1; @@ -1841,7 +1846,7 @@ CreatePartitionPage(PINPUT_RECORD Ir) #if 0 CONSOLE_PrintTextXY(8, 10, "Maximum size of the new partition is %I64u MB", - PartitionList->CurrentPartition->UnpartitionedLength / (1024*1024)); + PartitionList->CurrentPartition->SectorCount * DiskEntry->BytesPerSector / 1048576); #endif CONSOLE_SetStatusText(MUIGetString(STRING_CREATEPARTITION)); @@ -1849,9 +1854,10 @@ CreatePartitionPage(PINPUT_RECORD Ir) PartEntry = PartitionList->CurrentPartition; while (TRUE) { - MaxSize = (PartEntry->UnpartitionedLength + (1 << 19)) >> 20; /* in MBytes (rounded) */ + MaxSize = (PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector) / 1048576; /* in MBytes (rounded) */ - if (MaxSize > PARTITION_MAXSIZE) MaxSize = PARTITION_MAXSIZE; + if (MaxSize > PARTITION_MAXSIZE) + MaxSize = PARTITION_MAXSIZE; ShowPartitionSizeInputBox(12, 14, xScreen - 12, 17, /* left, top, right, bottom */ MaxSize, InputBuffer, &Quit, &Cancel); @@ -1887,23 +1893,22 @@ CreatePartitionPage(PINPUT_RECORD Ir) if (PartSize == MaxSize) { /* Use all of the unpartitioned disk space */ - PartSize = PartEntry->UnpartitionedLength; + SectorCount = PartEntry->SectorCount.QuadPart; } else { - /* Round-up by cylinder size */ - PartSize = (PartSize * 1024 * 1024 + DiskEntry->CylinderSize - 1) / - DiskEntry->CylinderSize * DiskEntry->CylinderSize; + /* Calculate the sector count from the size in MB */ + SectorCount = PartSize * 1048576 / DiskEntry->BytesPerSector; /* But never get larger than the unpartitioned disk space */ - if (PartSize > PartEntry->UnpartitionedLength) - PartSize = PartEntry->UnpartitionedLength; + if (SectorCount > PartEntry->SectorCount.QuadPart) + SectorCount = PartEntry->SectorCount.QuadPart; } DPRINT ("Partition size: %I64u bytes\n", PartSize); CreateNewPartition(PartitionList, - PartSize, + SectorCount, FALSE); return SELECT_PARTITION_PAGE; @@ -1923,7 +1928,6 @@ DeletePartitionPage(PINPUT_RECORD Ir) ULONGLONG PartSize; PCHAR Unit; PCHAR PartType; - UCHAR PartNumber; if (PartitionList == NULL || PartitionList->CurrentDisk == NULL || @@ -1935,7 +1939,6 @@ DeletePartitionPage(PINPUT_RECORD Ir) DiskEntry = PartitionList->CurrentDisk; PartEntry = PartitionList->CurrentPartition; - PartNumber = PartitionList->CurrentPartitionNumber; MUIDisplayPage(DELETE_PARTITION_PAGE); @@ -1945,46 +1948,47 @@ DeletePartitionPage(PINPUT_RECORD Ir) { PartType = MUIGetString(STRING_UNFORMATTED); } - else if (PartEntry->Unpartitioned == FALSE) + else if (PartEntry->IsPartitioned == TRUE) { - if ((PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT_12) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT_16) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_HUGE) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_XINT13)) + if ((PartEntry->PartitionType == PARTITION_FAT_12) || + (PartEntry->PartitionType == PARTITION_FAT_16) || + (PartEntry->PartitionType == PARTITION_HUGE) || + (PartEntry->PartitionType == PARTITION_XINT13)) { PartType = "FAT"; } - else if ((PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT32) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT32_XINT13)) + else if ((PartEntry->PartitionType == PARTITION_FAT32) || + (PartEntry->PartitionType == PARTITION_FAT32_XINT13)) { PartType = "FAT32"; } - else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_EXT2) + else if (PartEntry->PartitionType == PARTITION_EXT2) { PartType = "EXT2"; } - else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_IFS) + else if (PartEntry->PartitionType == PARTITION_IFS) { PartType = "NTFS"; /* FIXME: Not quite correct! */ } } + PartSize = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; #if 0 - if (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart >= 0x280000000LL) /* 10 GB */ + if (PartSize >= 10737418240) /* 10 GB */ { - PartSize = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 29)) >> 30; + PartSize = PartSize / 1073741824; Unit = MUIGetString(STRING_GB); } else #endif - if (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart >= 0xA00000LL) /* 10 MB */ + if (PartSize >= 10485760) /* 10 MB */ { - PartSize = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 19)) >> 20; + PartSize = PartSize / 1048576; Unit = MUIGetString(STRING_MB); } else { - PartSize = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 9)) >> 10; + PartSize = PartSize / 1024; Unit = MUIGetString(STRING_KB); } @@ -1992,9 +1996,9 @@ DeletePartitionPage(PINPUT_RECORD Ir) { CONSOLE_PrintTextXY(6, 10, MUIGetString(STRING_HDDINFOUNK2), - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : PartEntry->DriveLetter[PartNumber], - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : ':', - PartEntry->PartInfo[PartNumber].PartitionType, + (PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter, + (PartEntry->DriveLetter == 0) ? '-' : ':', + PartEntry->PartitionType, PartSize, Unit); } @@ -2002,24 +2006,24 @@ DeletePartitionPage(PINPUT_RECORD Ir) { CONSOLE_PrintTextXY(6, 10, " %c%c %s %I64u %s", - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : PartEntry->DriveLetter[PartNumber], - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : ':', + (PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter, + (PartEntry->DriveLetter == 0) ? '-' : ':', PartType, PartSize, Unit); } + DiskSize = DiskEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; #if 0 - if (DiskEntry->DiskSize >= 0x280000000ULL) /* 10 GB */ + if (DiskSize >= 10737418240) /* 10 GB */ { - DiskSize = (DiskEntry->DiskSize + (1 << 29)) >> 30; + DiskSize = DiskSize / 1073741824; Unit = MUIGetString(STRING_GB); } else #endif { - DiskSize = (DiskEntry->DiskSize + (1 << 19)) >> 20; - + DiskSize = DiskSize / 1048576; if (DiskSize == 0) DiskSize = 1; @@ -2085,7 +2089,6 @@ SelectFileSystemPage(PINPUT_RECORD Ir) { PDISKENTRY DiskEntry; PPARTENTRY PartEntry; - UCHAR PartNumber; ULONGLONG DiskSize; ULONGLONG PartSize; PCHAR DiskUnit; @@ -2102,54 +2105,55 @@ SelectFileSystemPage(PINPUT_RECORD Ir) DiskEntry = PartitionList->CurrentDisk; PartEntry = PartitionList->CurrentPartition; - PartNumber = PartitionList->CurrentPartitionNumber; /* adjust disk size */ - if (DiskEntry->DiskSize >= 0x280000000ULL) /* 10 GB */ + DiskSize = DiskEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; + if (DiskSize >= 10737418240) /* 10 GB */ { - DiskSize = (DiskEntry->DiskSize + (1 << 29)) >> 30; + DiskSize = DiskSize / 1073741824; DiskUnit = MUIGetString(STRING_GB); } else { - DiskSize = (DiskEntry->DiskSize + (1 << 19)) >> 20; + DiskSize = DiskSize / 1048576; DiskUnit = MUIGetString(STRING_MB); } /* adjust partition size */ - if (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart >= 0x280000000LL) /* 10 GB */ + PartSize = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; + if (PartSize >= 10737418240) /* 10 GB */ { - PartSize = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 29)) >> 30; + PartSize = PartSize / 1073741824; PartUnit = MUIGetString(STRING_GB); } else { - PartSize = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 19)) >> 20; + PartSize = PartSize / 1048576; PartUnit = MUIGetString(STRING_MB); } /* adjust partition type */ - if ((PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT_12) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT_16) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_HUGE) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_XINT13)) + if ((PartEntry->PartitionType == PARTITION_FAT_12) || + (PartEntry->PartitionType == PARTITION_FAT_16) || + (PartEntry->PartitionType == PARTITION_HUGE) || + (PartEntry->PartitionType == PARTITION_XINT13)) { PartType = "FAT"; } - else if ((PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT32) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT32_XINT13)) + else if ((PartEntry->PartitionType == PARTITION_FAT32) || + (PartEntry->PartitionType == PARTITION_FAT32_XINT13)) { PartType = "FAT32"; } - else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_EXT2) + else if (PartEntry->PartitionType == PARTITION_EXT2) { PartType = "EXT2"; } - else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_IFS) + else if (PartEntry->PartitionType == PARTITION_IFS) { PartType = "NTFS"; /* FIXME: Not quite correct! */ } - else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_ENTRY_UNUSED) + else if (PartEntry->PartitionType == PARTITION_ENTRY_UNUSED) { PartType = MUIGetString(STRING_FORMATUNUSED); } @@ -2164,7 +2168,7 @@ SelectFileSystemPage(PINPUT_RECORD Ir) #if 0 CONSOLE_PrintTextXY(8, 10, "Partition %lu (%I64u %s) %s of", - PartEntry->PartInfo[PartNumber].PartitionNumber, + PartEntry->PartitionNumber, PartSize, PartUnit, PartType); @@ -2197,9 +2201,9 @@ SelectFileSystemPage(PINPUT_RECORD Ir) { CONSOLE_PrintTextXY(8, 10, MUIGetString(STRING_HDDINFOUNK4), - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : PartEntry->DriveLetter[PartNumber], - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : ':', - PartEntry->PartInfo[PartNumber].PartitionType, + (PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter, + (PartEntry->DriveLetter == 0) ? '-' : ':', + PartEntry->PartitionType, PartSize, PartUnit); } @@ -2207,8 +2211,8 @@ SelectFileSystemPage(PINPUT_RECORD Ir) { CONSOLE_PrintTextXY(8, 10, "%c%c %s %I64u %s", - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : PartEntry->DriveLetter[PartNumber], - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : ':', + (PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter, + (PartEntry->DriveLetter == 0) ? '-' : ':', PartType, PartSize, PartUnit); @@ -2237,6 +2241,7 @@ SelectFileSystemPage(PINPUT_RECORD Ir) /* FIXME: Add file systems to list */ } + DrawFileSystemList(FileSystemList); if (RepairUpdateFlag) @@ -2305,12 +2310,11 @@ static ULONG FormatPartitionPage(PINPUT_RECORD Ir) { WCHAR PathBuffer[MAX_PATH]; + PDISKENTRY DiskEntry; PPARTENTRY PartEntry; - UCHAR PartNum; NTSTATUS Status; #ifndef NDEBUG - PDISKENTRY DiskEntry; ULONG Line; ULONG i; PLIST_ENTRY Entry; @@ -2326,11 +2330,8 @@ FormatPartitionPage(PINPUT_RECORD Ir) return QUIT_PAGE; } -#ifndef NDEBUG DiskEntry = PartitionList->CurrentDisk; -#endif PartEntry = PartitionList->CurrentPartition; - PartNum = PartitionList->CurrentPartitionNumber; while (TRUE) { @@ -2355,50 +2356,55 @@ FormatPartitionPage(PINPUT_RECORD Ir) if (wcscmp(FileSystemList->Selected->FileSystem, L"FAT") == 0) { - if (PartEntry->PartInfo[PartNum].PartitionLength.QuadPart < (4200LL * 1024LL)) + if (PartEntry->SectorCount.QuadPart < 8192) { /* FAT12 CHS partition (disk is smaller than 4.1MB) */ - PartEntry->PartInfo[PartNum].PartitionType = PARTITION_FAT_12; + PartEntry->PartitionType = PARTITION_FAT_12; } - else if (PartEntry->PartInfo[PartNum].StartingOffset.QuadPart < (1024LL * 255LL * 63LL * 512LL)) + else if (PartEntry->StartSector.QuadPart < 1450560) { /* Partition starts below the 8.4GB boundary ==> CHS partition */ - if (PartEntry->PartInfo[PartNum].PartitionLength.QuadPart < (32LL * 1024LL * 1024LL)) + if (PartEntry->SectorCount.QuadPart < 65536) { /* FAT16 CHS partition (partiton size < 32MB) */ - PartEntry->PartInfo[PartNum].PartitionType = PARTITION_FAT_16; + PartEntry->PartitionType = PARTITION_FAT_16; } - else if (PartEntry->PartInfo[PartNum].PartitionLength.QuadPart < (512LL * 1024LL * 1024LL)) + else if (PartEntry->SectorCount.QuadPart < 1048576) { /* FAT16 CHS partition (partition size < 512MB) */ - PartEntry->PartInfo[PartNum].PartitionType = PARTITION_HUGE; + PartEntry->PartitionType = PARTITION_HUGE; } else { /* FAT32 CHS partition (partition size >= 512MB) */ - PartEntry->PartInfo[PartNum].PartitionType = PARTITION_FAT32; + PartEntry->PartitionType = PARTITION_FAT32; } } else { /* Partition starts above the 8.4GB boundary ==> LBA partition */ - if (PartEntry->PartInfo[PartNum].PartitionLength.QuadPart < (512LL * 1024LL * 1024LL)) + if (PartEntry->SectorCount.QuadPart < 1048576) { /* FAT16 LBA partition (partition size < 512MB) */ - PartEntry->PartInfo[PartNum].PartitionType = PARTITION_XINT13; + PartEntry->PartitionType = PARTITION_XINT13; } else { /* FAT32 LBA partition (partition size >= 512MB) */ - PartEntry->PartInfo[PartNum].PartitionType = PARTITION_FAT32_XINT13; + PartEntry->PartitionType = PARTITION_FAT32_XINT13; } } + + DiskEntry->LayoutBuffer->PartitionEntry[PartEntry->PartitionIndex].PartitionType = PartEntry->PartitionType; } #if 0 else if (wcscmp(FileSystemList->Selected->FileSystem, L"EXT2") == 0) + { PartEntry->PartInfo[PartNum].PartitionType = PARTITION_EXT2; + DiskEntry->LayoutBuffer->PartitionEntry[PartEntry->PartitionIndex].PartitionType = PartEntry->PartitionType; + } #endif else if (!FileSystemList->Selected->FormatFunc) return QUIT_PAGE; @@ -2414,27 +2420,21 @@ FormatPartitionPage(PINPUT_RECORD Ir) DiskEntry = PartitionList->CurrentDisk; Entry = DiskEntry->PartListHead.Flink; - while (Entry != &DiskEntry->PartListHead) + while (Entry != &DiskEntry->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); - if (PartEntry->Unpartitioned == FALSE) + if (PartEntry->IsPartitioned == TRUE) { - for (i = 0; i < 4; i++) - { - CONSOLE_PrintTextXY(6, Line, - "%2u: %2u %c %12I64u %12I64u %2u %c", - i, - PartEntry->PartInfo[i].PartitionNumber, - PartEntry->PartInfo[i].BootIndicator ? 'A' : '-', - PartEntry->PartInfo[i].StartingOffset.QuadPart, - PartEntry->PartInfo[i].PartitionLength.QuadPart, - PartEntry->PartInfo[i].PartitionType, - PartEntry->PartInfo[i].RewritePartition ? '*' : ' '); - - Line++; - } - + CONSOLE_PrintTextXY(6, Line, + "%2u: %2u %c %12I64u %12I64u %2u %c", + i, + PartEntry->PartitionNumber, + PartEntry->BootIndicator ? 'A' : '-', + PartEntry->StartSector.QuadPart, + PartEntry->SectorCount.QuadPart, + PartEntry->PartitionType, + PartEntry->Dirty ? '*' : ' '); Line++; } @@ -2445,6 +2445,8 @@ FormatPartitionPage(PINPUT_RECORD Ir) PartEntry = PartitionList->CurrentPartition; #endif + CheckActiveBootPartition(PartitionList); + if (WritePartitionsToDisk(PartitionList) == FALSE) { DPRINT("WritePartitionsToDisk() failed\n"); @@ -2457,7 +2459,7 @@ FormatPartitionPage(PINPUT_RECORD Ir) swprintf(PathBuffer, L"\\Device\\Harddisk%lu\\Partition%lu", PartitionList->CurrentDisk->DiskNumber, - PartitionList->CurrentPartition->PartInfo[PartNum].PartitionNumber); + PartitionList->CurrentPartition->PartitionNumber); RtlCreateUnicodeString(&DestinationRootPath, PathBuffer); DPRINT("DestinationRootPath: %wZ\n", &DestinationRootPath); @@ -2475,7 +2477,6 @@ FormatPartitionPage(PINPUT_RECORD Ir) PartEntry->New = FALSE; - CheckActiveBootPartition(PartitionList); } #ifndef NDEBUG @@ -2500,7 +2501,6 @@ CheckFileSystemPage(PINPUT_RECORD Ir) WCHAR PathBuffer[MAX_PATH]; CHAR Buffer[MAX_PATH]; NTSTATUS Status; - UCHAR PartNum = PartitionList->CurrentPartitionNumber; /* FIXME: code duplicated in FormatPartitionPage */ /* Set DestinationRootPath */ @@ -2508,7 +2508,7 @@ CheckFileSystemPage(PINPUT_RECORD Ir) swprintf(PathBuffer, L"\\Device\\Harddisk%lu\\Partition%lu", PartitionList->CurrentDisk->DiskNumber, - PartitionList->CurrentPartition->PartInfo[PartNum].PartitionNumber); + PartitionList->CurrentPartition->PartitionNumber); RtlCreateUnicodeString(&DestinationRootPath, PathBuffer); DPRINT("DestinationRootPath: %wZ\n", &DestinationRootPath); @@ -2574,8 +2574,7 @@ CheckFileSystemPage(PINPUT_RECORD Ir) static PAGE_NUMBER InstallDirectoryPage1(PWCHAR InstallDir, PDISKENTRY DiskEntry, - PPARTENTRY PartEntry, - UCHAR PartNum) + PPARTENTRY PartEntry) { WCHAR PathBuffer[MAX_PATH]; @@ -2599,7 +2598,7 @@ InstallDirectoryPage1(PWCHAR InstallDir, swprintf(PathBuffer, L"multi(0)disk(0)rdisk(%lu)partition(%lu)", DiskEntry->BiosDiskNumber, - PartEntry->PartInfo[PartNum].PartitionNumber); + PartEntry->PartitionNumber); if (InstallDir[0] != L'\\') wcscat(PathBuffer, L"\\"); @@ -2643,8 +2642,7 @@ InstallDirectoryPage(PINPUT_RECORD Ir) { return InstallDirectoryPage1(InstallDir, DiskEntry, - PartEntry, - PartitionList->CurrentPartitionNumber); + PartEntry); } while (TRUE) @@ -2663,8 +2661,7 @@ InstallDirectoryPage(PINPUT_RECORD Ir) { return InstallDirectoryPage1(InstallDir, DiskEntry, - PartEntry, - PartitionList->CurrentPartitionNumber); + PartEntry); } else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x08) /* BACKSPACE */ { @@ -3382,14 +3379,12 @@ BootLoaderPage(PINPUT_RECORD Ir) swprintf(PathBuffer, L"\\Device\\Harddisk%lu\\Partition%lu", PartitionList->ActiveBootDisk->DiskNumber, - PartitionList->ActiveBootPartition-> - PartInfo[PartitionList->ActiveBootPartitionNumber].PartitionNumber); + PartitionList->ActiveBootPartition->PartitionNumber); RtlCreateUnicodeString(&SystemRootPath, PathBuffer); DPRINT("SystemRootPath: %wZ\n", &SystemRootPath); - PartitionType = PartitionList->ActiveBootPartition-> - PartInfo[PartitionList->ActiveBootPartitionNumber].PartitionType; + PartitionType = PartitionList->ActiveBootPartition->PartitionType; if (IsUnattendedSetup) { @@ -3573,8 +3568,7 @@ BootLoaderHarddiskVbrPage(PINPUT_RECORD Ir) UCHAR PartitionType; NTSTATUS Status; - PartitionType = PartitionList->ActiveBootPartition-> - PartInfo[PartitionList->ActiveBootPartitionNumber].PartitionType; + PartitionType = PartitionList->ActiveBootPartition->PartitionType; Status = InstallVBRToPartition(&SystemRootPath, &SourceRootPath, @@ -3598,8 +3592,7 @@ BootLoaderHarddiskMbrPage(PINPUT_RECORD Ir) WCHAR SourceMbrPathBuffer[MAX_PATH]; /* Step 1: Write the VBR */ - PartitionType = PartitionList->ActiveBootPartition-> - PartInfo[PartitionList->ActiveBootPartitionNumber].PartitionType; + PartitionType = PartitionList->ActiveBootPartition->PartitionType; Status = InstallVBRToPartition(&SystemRootPath, &SourceRootPath, diff --git a/reactos/base/setup/usetup/partlist.c b/reactos/base/setup/usetup/partlist.c index c81ce910581..3312e217c76 100644 --- a/reactos/base/setup/usetup/partlist.c +++ b/reactos/base/setup/usetup/partlist.c @@ -31,8 +31,58 @@ #define NDEBUG #include <debug.h> +#define DUMP_PARTITION_TABLE + /* FUNCTIONS ****************************************************************/ +#ifdef DUMP_PARTITION_TABLE +static +VOID +DumpPartitionTable( + PDISKENTRY DiskEntry) +{ + PPARTITION_INFORMATION PartitionInfo; + ULONG i; + + for (i = 0; i < DiskEntry->LayoutBuffer->PartitionCount; i++) + { + PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[i]; + DbgPrint("%lu: %12I64u %12I64u %10lu %2lu %2x %c %c\n", + i, + PartitionInfo->StartingOffset.QuadPart, + PartitionInfo->PartitionLength.QuadPart, + PartitionInfo->HiddenSectors, + PartitionInfo->PartitionNumber, + PartitionInfo->PartitionType, + PartitionInfo->BootIndicator ? '*': ' ', + PartitionInfo->RewritePartition ? 'Y': 'N'); + } +} +#endif + + +ULONGLONG +Align( + IN ULONGLONG Value, + IN ULONG Alignment) +{ + ULONGLONG Temp; + + Temp = Value / Alignment; + + return Temp * Alignment; +} + + +ULONGLONG +RoundingDivide( + IN ULONGLONG Dividend, + IN ULONGLONG Divisor) +{ + return (Dividend + Divisor / 2) / Divisor; +} + + static VOID GetDriverName( @@ -70,15 +120,14 @@ GetDriverName( static VOID -AssignDriverLetters( +AssignDriveLetters( PPARTLIST List) { PDISKENTRY DiskEntry; PPARTENTRY PartEntry; PLIST_ENTRY Entry1; - //PLIST_ENTRY Entry2; + PLIST_ENTRY Entry2; CHAR Letter; - UCHAR i; Letter = 'C'; @@ -88,34 +137,29 @@ AssignDriverLetters( { DiskEntry = CONTAINING_RECORD(Entry1, DISKENTRY, ListEntry); - if (!IsListEmpty(&DiskEntry->PartListHead)) + Entry2 = DiskEntry->PrimaryPartListHead.Flink; + while (Entry2 != &DiskEntry->PrimaryPartListHead) { - PartEntry = CONTAINING_RECORD(DiskEntry->PartListHead.Flink, - PARTENTRY, - ListEntry); + PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); - for (i = 0; i < 4; i++) - PartEntry->DriveLetter[i] = 0; + PartEntry->DriveLetter = 0; - if (PartEntry->Unpartitioned == FALSE) + if (PartEntry->IsPartitioned && + !IsContainerPartition(PartEntry->PartitionType)) { - for (i = 0; i < 4; i++) + if (IsRecognizedPartition(PartEntry->PartitionType) || + (PartEntry->PartitionType == PARTITION_ENTRY_UNUSED && + PartEntry->SectorCount.QuadPart != 0LL)) { - if (IsContainerPartition(PartEntry->PartInfo[i].PartitionType)) - continue; - - if (IsRecognizedPartition(PartEntry->PartInfo[i].PartitionType) || - (PartEntry->PartInfo[i].PartitionType == PARTITION_ENTRY_UNUSED && - PartEntry->PartInfo[i].PartitionLength.QuadPart != 0LL)) + if (Letter <= 'Z') { - if (Letter <= 'Z') - { - PartEntry->DriveLetter[i] = Letter; - Letter++; - } + PartEntry->DriveLetter = Letter; + Letter++; } } } + + Entry2 = Entry2->Flink; } Entry1 = Entry1->Flink; @@ -172,43 +216,38 @@ UpdatePartitionNumbers( { PPARTENTRY PartEntry; PLIST_ENTRY Entry; - ULONG PartNumber; - ULONG i; +// ULONG PartitionNumber = 1; + ULONG PartitionIndex = 0; - PartNumber = 1; - Entry = DiskEntry->PartListHead.Flink; - while (Entry != &DiskEntry->PartListHead) + Entry = DiskEntry->PrimaryPartListHead.Flink; + while (Entry != &DiskEntry->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); - if (PartEntry->Unpartitioned == TRUE) + if (PartEntry->IsPartitioned == FALSE) { - for (i = 0; i < 4; i++) - { - PartEntry->PartInfo[i].PartitionNumber = 0; - } +// PartEntry->PartitionNumber = 0; + PartEntry->PartitionIndex = (ULONG)-1; } else { - for (i = 0; i < 4; i++) + if (IsContainerPartition(PartEntry->PartitionType)) { - if (IsContainerPartition(PartEntry->PartInfo[i].PartitionType)) - { - PartEntry->PartInfo[i].PartitionNumber = 0; - } - else if (PartEntry->PartInfo[i].PartitionType == PARTITION_ENTRY_UNUSED && - PartEntry->PartInfo[i].PartitionLength.QuadPart == 0ULL) - { - PartEntry->PartInfo[i].PartitionNumber = 0; - } - else - { - PartEntry->PartInfo[i].PartitionNumber = PartNumber; - PartNumber++; - } +// PartEntry->PartitionNumber = 0; } + else if (PartEntry->PartitionType == PARTITION_ENTRY_UNUSED && + PartEntry->SectorCount.QuadPart == 0ULL) + { +// PartEntry->PartitionNumber = 0; + } + else + { +// PartEntry->PartitionNumber = PartitionNumber++; + } + + PartEntry->PartitionIndex = PartitionIndex++; } Entry = Entry->Flink; @@ -216,247 +255,6 @@ UpdatePartitionNumbers( } -static -VOID -AddPartitionToList( - ULONG DiskNumber, - PDISKENTRY DiskEntry, - DRIVE_LAYOUT_INFORMATION *LayoutBuffer) -{ - PPARTENTRY PartEntry; - ULONG i; - ULONG j; - - for (i = 0; i < LayoutBuffer->PartitionCount; i += 4) - { - for (j = 0; j < 4; j++) - { - if (LayoutBuffer->PartitionEntry[i+j].PartitionType != PARTITION_ENTRY_UNUSED || - LayoutBuffer->PartitionEntry[i+j].PartitionLength.QuadPart != 0ULL) - { - break; - } - } - - if (j >= 4) - { - continue; - } - - PartEntry = (PPARTENTRY)RtlAllocateHeap(ProcessHeap, - 0, - sizeof(PARTENTRY)); - if (PartEntry == NULL) - { - return; - } - - RtlZeroMemory(PartEntry, - sizeof(PARTENTRY)); - - PartEntry->Unpartitioned = FALSE; - - for (j = 0; j < 4; j++) - { - RtlCopyMemory(&PartEntry->PartInfo[j], - &LayoutBuffer->PartitionEntry[i+j], - sizeof(PARTITION_INFORMATION)); - } - - if (IsContainerPartition(PartEntry->PartInfo[0].PartitionType)) - { - PartEntry->FormatState = Unformatted; - } - else if ((PartEntry->PartInfo[0].PartitionType == PARTITION_FAT_12) || - (PartEntry->PartInfo[0].PartitionType == PARTITION_FAT_16) || - (PartEntry->PartInfo[0].PartitionType == PARTITION_HUGE) || - (PartEntry->PartInfo[0].PartitionType == PARTITION_XINT13) || - (PartEntry->PartInfo[0].PartitionType == PARTITION_FAT32) || - (PartEntry->PartInfo[0].PartitionType == PARTITION_FAT32_XINT13)) - { -#if 0 - if (CheckFatFormat()) - { - PartEntry->FormatState = Preformatted; - } - else - { - PartEntry->FormatState = Unformatted; - } -#endif - PartEntry->FormatState = Preformatted; - } - else if (PartEntry->PartInfo[0].PartitionType == PARTITION_EXT2) - { -#if 0 - if (CheckExt2Format()) - { - PartEntry->FormatState = Preformatted; - } - else - { - PartEntry->FormatState = Unformatted; - } -#endif - PartEntry->FormatState = Preformatted; - } - else if (PartEntry->PartInfo[0].PartitionType == PARTITION_IFS) - { -#if 0 - if (CheckNtfsFormat()) - { - PartEntry->FormatState = Preformatted; - } - else if (CheckHpfsFormat()) - { - PartEntry->FormatState = Preformatted; - } - else - { - PartEntry->FormatState = Unformatted; - } -#endif - PartEntry->FormatState = Preformatted; - } - else - { - PartEntry->FormatState = UnknownFormat; - } - - InsertTailList(&DiskEntry->PartListHead, - &PartEntry->ListEntry); - } -} - - -static -VOID -ScanForUnpartitionedDiskSpace( - PDISKENTRY DiskEntry) -{ - ULONGLONG LastStartingOffset; - ULONGLONG LastPartitionLength; - ULONGLONG LastUnusedPartitionLength; - PPARTENTRY PartEntry; - PPARTENTRY NewPartEntry; - PLIST_ENTRY Entry; - ULONG i; - ULONG j; - - if (IsListEmpty (&DiskEntry->PartListHead)) - { - /* Create a partition table that represents the empty disk */ - PartEntry = (PPARTENTRY)RtlAllocateHeap(ProcessHeap, - 0, - sizeof(PARTENTRY)); - if (PartEntry == NULL) - return; - - RtlZeroMemory(PartEntry, - sizeof(PARTENTRY)); - - PartEntry->Unpartitioned = TRUE; - PartEntry->UnpartitionedOffset = 0ULL; - PartEntry->UnpartitionedLength = DiskEntry->DiskSize; - - PartEntry->FormatState = Unformatted; - - InsertTailList(&DiskEntry->PartListHead, - &PartEntry->ListEntry); - } - else - { - /* Start partition at head 1, cylinder 0 */ - LastStartingOffset = DiskEntry->TrackSize; - LastPartitionLength = 0ULL; - LastUnusedPartitionLength = 0ULL; - - i = 0; - Entry = DiskEntry->PartListHead.Flink; - while (Entry != &DiskEntry->PartListHead) - { - PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); - - for (j = 0; j < 4; j++) - { - if ((!IsContainerPartition (PartEntry->PartInfo[j].PartitionType)) && - (PartEntry->PartInfo[j].PartitionType != PARTITION_ENTRY_UNUSED || - PartEntry->PartInfo[j].PartitionLength.QuadPart != 0LL)) - { - LastUnusedPartitionLength = - PartEntry->PartInfo[j].StartingOffset.QuadPart - - (LastStartingOffset + LastPartitionLength); - - if (PartEntry->PartInfo[j].StartingOffset.QuadPart > (LastStartingOffset + LastPartitionLength) && - LastUnusedPartitionLength >= DiskEntry->CylinderSize) - { - DPRINT("Unpartitioned disk space %I64u\n", LastUnusedPartitionLength); - - NewPartEntry = (PPARTENTRY)RtlAllocateHeap(ProcessHeap, - 0, - sizeof(PARTENTRY)); - if (NewPartEntry == NULL) - return; - - RtlZeroMemory(NewPartEntry, - sizeof(PARTENTRY)); - - NewPartEntry->Unpartitioned = TRUE; - NewPartEntry->UnpartitionedOffset = LastStartingOffset + LastPartitionLength; - NewPartEntry->UnpartitionedLength = LastUnusedPartitionLength; - if (j == 0) - NewPartEntry->UnpartitionedLength -= DiskEntry->TrackSize; - - NewPartEntry->FormatState = Unformatted; - - /* Insert the table into the list */ - InsertTailList(&PartEntry->ListEntry, - &NewPartEntry->ListEntry); - } - - LastStartingOffset = PartEntry->PartInfo[j].StartingOffset.QuadPart; - LastPartitionLength = PartEntry->PartInfo[j].PartitionLength.QuadPart; - } - } - - i += 4; - Entry = Entry->Flink; - } - - /* Check for trailing unpartitioned disk space */ - if (DiskEntry->DiskSize > (LastStartingOffset + LastPartitionLength)) - { - /* Round-down to cylinder size */ - LastUnusedPartitionLength = - (DiskEntry->DiskSize - (LastStartingOffset + LastPartitionLength)) - & ~(DiskEntry->CylinderSize - 1); - - if (LastUnusedPartitionLength >= DiskEntry->CylinderSize) - { - DPRINT("Unpartitioned disk space %I64u\n", LastUnusedPartitionLength); - - NewPartEntry = (PPARTENTRY)RtlAllocateHeap(ProcessHeap, - 0, - sizeof(PARTENTRY)); - if (NewPartEntry == NULL) - return; - - RtlZeroMemory(NewPartEntry, - sizeof(PARTENTRY)); - - NewPartEntry->Unpartitioned = TRUE; - NewPartEntry->UnpartitionedOffset = LastStartingOffset + LastPartitionLength; - NewPartEntry->UnpartitionedLength = LastUnusedPartitionLength; - - /* Append the table to the list */ - InsertTailList(&DiskEntry->PartListHead, - &NewPartEntry->ListEntry); - } - } - } -} - - NTSTATUS NTAPI DiskIdentifierQueryRoutine( @@ -720,6 +518,311 @@ EnumerateBiosDiskEntries( } +static +VOID +AddPrimaryPartitionToDisk( + ULONG DiskNumber, + PDISKENTRY DiskEntry, + ULONG PartitionIndex) +{ + PPARTITION_INFORMATION PartitionInfo; + PPARTENTRY PartEntry; + + PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[PartitionIndex]; + + PartEntry = RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(PARTENTRY)); + if (PartEntry == NULL) + { + return; + } + + PartEntry->StartSector.QuadPart = (ULONGLONG)PartitionInfo->StartingOffset.QuadPart / DiskEntry->BytesPerSector; + PartEntry->SectorCount.QuadPart = (ULONGLONG)PartitionInfo->PartitionLength.QuadPart / DiskEntry->BytesPerSector; + + PartEntry->BootIndicator = PartitionInfo->BootIndicator; + PartEntry->PartitionType = PartitionInfo->PartitionType; + PartEntry->HiddenSectors = PartitionInfo->HiddenSectors; + + PartEntry->IsPartitioned = TRUE; + PartEntry->PartitionNumber = PartitionInfo->PartitionNumber; + PartEntry->PartitionIndex = PartitionIndex; + + if (IsContainerPartition(PartEntry->PartitionType)) + { + PartEntry->FormatState = Unformatted; + } + else if ((PartEntry->PartitionType == PARTITION_FAT_12) || + (PartEntry->PartitionType == PARTITION_FAT_16) || + (PartEntry->PartitionType == PARTITION_HUGE) || + (PartEntry->PartitionType == PARTITION_XINT13) || + (PartEntry->PartitionType == PARTITION_FAT32) || + (PartEntry->PartitionType == PARTITION_FAT32_XINT13)) + { +#if 0 + if (CheckFatFormat()) + { + PartEntry->FormatState = Preformatted; + } + else + { + PartEntry->FormatState = Unformatted; + } +#endif + PartEntry->FormatState = Preformatted; + } + else if (PartEntry->PartitionType == PARTITION_EXT2) + { +#if 0 + if (CheckExt2Format()) + { + PartEntry->FormatState = Preformatted; + } + else + { + PartEntry->FormatState = Unformatted; + } +#endif + PartEntry->FormatState = Preformatted; + } + else if (PartEntry->PartitionType == PARTITION_IFS) + { +#if 0 + if (CheckNtfsFormat()) + { + PartEntry->FormatState = Preformatted; + } + else if (CheckHpfsFormat()) + { + PartEntry->FormatState = Preformatted; + } + else + { + PartEntry->FormatState = Unformatted; + } +#endif + PartEntry->FormatState = Preformatted; + } + else + { + PartEntry->FormatState = UnknownFormat; + } + + InsertTailList(&DiskEntry->PrimaryPartListHead, + &PartEntry->ListEntry); +} + + +static +VOID +ScanForUnpartitionedDiskSpace( + PDISKENTRY DiskEntry) +{ + ULONGLONG LastStartSector; + ULONGLONG LastSectorCount; + ULONGLONG LastUnusedSectorCount; + PPARTENTRY PartEntry; + PPARTENTRY NewPartEntry; + PLIST_ENTRY Entry; + + DPRINT1("ScanForUnpartitionedDiskSpace()\n"); + + if (IsListEmpty(&DiskEntry->PrimaryPartListHead)) + { + DPRINT1("No primary partition!\n"); + + /* Create a partition table that represents the empty disk */ + NewPartEntry = RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(PARTENTRY)); + if (NewPartEntry == NULL) + return; + + NewPartEntry->DiskEntry = DiskEntry; + + NewPartEntry->IsPartitioned = FALSE; + NewPartEntry->StartSector.QuadPart = (ULONGLONG)DiskEntry->SectorsPerTrack; + NewPartEntry->SectorCount.QuadPart = Align(DiskEntry->SectorCount.QuadPart, DiskEntry->SectorAlignment) - + DiskEntry->SectorsPerTrack; +DPRINT1("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart); +DPRINT1("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1); +DPRINT1("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart); + + NewPartEntry->FormatState = Unformatted; + + InsertTailList(&DiskEntry->PrimaryPartListHead, + &NewPartEntry->ListEntry); + + return; + } + + /* Start partition at head 1, cylinder 0 */ + LastStartSector = DiskEntry->SectorsPerTrack; + LastSectorCount = 0ULL; + LastUnusedSectorCount = 0ULL; + + Entry = DiskEntry->PrimaryPartListHead.Flink; + while (Entry != &DiskEntry->PrimaryPartListHead) + { + PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); + + if (PartEntry->PartitionType != PARTITION_ENTRY_UNUSED || + PartEntry->SectorCount.QuadPart != 0ULL) + { + LastUnusedSectorCount = + PartEntry->StartSector.QuadPart - (LastStartSector + LastSectorCount); + + if (PartEntry->StartSector.QuadPart > (LastStartSector + LastSectorCount) && + LastUnusedSectorCount >= (ULONGLONG)DiskEntry->SectorAlignment) + { + DPRINT("Unpartitioned disk space %I64u sectors\n", LastUnusedSectorCount); + + NewPartEntry = RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(PARTENTRY)); + if (NewPartEntry == NULL) + return; + + NewPartEntry->DiskEntry = DiskEntry; + + NewPartEntry->IsPartitioned = FALSE; + NewPartEntry->StartSector.QuadPart = LastStartSector + LastSectorCount; + NewPartEntry->SectorCount.QuadPart = Align(NewPartEntry->StartSector.QuadPart + LastUnusedSectorCount, DiskEntry->SectorAlignment) - + NewPartEntry->StartSector.QuadPart; +DPRINT1("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart); +DPRINT1("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1); +DPRINT1("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart); + + NewPartEntry->FormatState = Unformatted; + + /* Insert the table into the list */ + InsertTailList(&PartEntry->ListEntry, + &NewPartEntry->ListEntry); + } + + LastStartSector = PartEntry->StartSector.QuadPart; + LastSectorCount = PartEntry->SectorCount.QuadPart; + } + + Entry = Entry->Flink; + } + + /* Check for trailing unpartitioned disk space */ + if ((LastStartSector + LastSectorCount) < DiskEntry->SectorCount.QuadPart) + { + LastUnusedSectorCount = Align(DiskEntry->SectorCount.QuadPart - (LastStartSector + LastSectorCount), DiskEntry->SectorAlignment); + + if (LastUnusedSectorCount >= (ULONGLONG)DiskEntry->SectorAlignment) + { + DPRINT("Unpartitioned disk space: %I64u sectors\n", LastUnusedSectorCount); + + NewPartEntry = RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(PARTENTRY)); + if (NewPartEntry == NULL) + return; + + NewPartEntry->DiskEntry = DiskEntry; + + NewPartEntry->IsPartitioned = FALSE; + NewPartEntry->StartSector.QuadPart = LastStartSector + LastSectorCount; + NewPartEntry->SectorCount.QuadPart = Align(NewPartEntry->StartSector.QuadPart + LastUnusedSectorCount, DiskEntry->SectorAlignment) - + NewPartEntry->StartSector.QuadPart; +DPRINT1("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart); +DPRINT1("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1); +DPRINT1("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart); + + NewPartEntry->FormatState = Unformatted; + + /* Append the table to the list */ + InsertTailList(&DiskEntry->PrimaryPartListHead, + &NewPartEntry->ListEntry); + } + } + + DPRINT1("ScanForUnpartitionedDiskSpace() done\n"); +} + + +static +VOID +SetDiskSignature( + IN PPARTLIST List, + IN PDISKENTRY DiskEntry) +{ + LARGE_INTEGER SystemTime; + TIME_FIELDS TimeFields; + PLIST_ENTRY Entry2; + PDISKENTRY DiskEntry2; + PUCHAR Buffer; + + Buffer = (PUCHAR)&DiskEntry->LayoutBuffer->Signature; + + while (1) + { + NtQuerySystemTime(&SystemTime); + RtlTimeToTimeFields(&SystemTime, &TimeFields); + + Buffer[0] = (UCHAR)(TimeFields.Year & 0xFF) + (UCHAR)(TimeFields.Hour & 0xFF); + Buffer[1] = (UCHAR)(TimeFields.Year >> 8) + (UCHAR)(TimeFields.Minute & 0xFF); + Buffer[2] = (UCHAR)(TimeFields.Month & 0xFF) + (UCHAR)(TimeFields.Second & 0xFF); + Buffer[3] = (UCHAR)(TimeFields.Day & 0xFF) + (UCHAR)(TimeFields.Milliseconds & 0xFF); + + if (DiskEntry->LayoutBuffer->Signature == 0) + { + continue; + } + + /* check if the signature already exist */ + /* FIXME: + * Check also signatures from disks, which are + * not visible (bootable) by the bios. + */ + Entry2 = List->DiskListHead.Flink; + while (Entry2 != &List->DiskListHead) + { + DiskEntry2 = CONTAINING_RECORD(Entry2, DISKENTRY, ListEntry); + + if (DiskEntry != DiskEntry2 && + DiskEntry->LayoutBuffer->Signature == DiskEntry2->LayoutBuffer->Signature) + break; + + Entry2 = Entry2->Flink; + } + + if (Entry2 == &List->DiskListHead) + break; + } +} + + +static +VOID +UpdateDiskSignatures( + PPARTLIST List) +{ + PLIST_ENTRY Entry; + PDISKENTRY DiskEntry; + + /* Print partition lines*/ + Entry = List->DiskListHead.Flink; + while (Entry != &List->DiskListHead) + { + DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry); + + if (DiskEntry->LayoutBuffer && + DiskEntry->LayoutBuffer->Signature == 0) + { + SetDiskSignature(List, DiskEntry); + DiskEntry->LayoutBuffer->PartitionEntry[0].RewritePartition = TRUE; + } + + Entry = Entry->Flink; + } +} + + static VOID AddDiskToList( @@ -727,7 +830,6 @@ AddDiskToList( ULONG DiskNumber, PPARTLIST List) { - DRIVE_LAYOUT_INFORMATION *LayoutBuffer; DISK_GEOMETRY DiskGeometry; SCSI_ADDRESS ScsiAddress; PDISKENTRY DiskEntry; @@ -820,21 +922,16 @@ AddDiskToList( swprintf(Identifier, L"%08x-%08x-A", Checksum, Signature); DPRINT("Identifier: %S\n", Identifier); - DiskEntry = (PDISKENTRY)RtlAllocateHeap(ProcessHeap, - 0, - sizeof(DISKENTRY)); + DiskEntry = RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(DISKENTRY)); if (DiskEntry == NULL) { return; } - DiskEntry->Checksum = Checksum; - DiskEntry->Signature = Signature; - if (Signature == 0) - { - /* If we have no signature, set the disk to dirty. WritePartitionsToDisk creates a new signature */ - DiskEntry->Modified = TRUE; - } +// DiskEntry->Checksum = Checksum; +// DiskEntry->Signature = Signature; DiskEntry->BiosFound = FALSE; /* Check if this disk has a valid MBR */ @@ -885,27 +982,27 @@ AddDiskToList( #endif } - InitializeListHead(&DiskEntry->PartListHead); + InitializeListHead(&DiskEntry->PrimaryPartListHead); + InitializeListHead(&DiskEntry->ExtendedPartListHead); DiskEntry->Cylinders = DiskGeometry.Cylinders.QuadPart; DiskEntry->TracksPerCylinder = DiskGeometry.TracksPerCylinder; DiskEntry->SectorsPerTrack = DiskGeometry.SectorsPerTrack; DiskEntry->BytesPerSector = DiskGeometry.BytesPerSector; - DPRINT ("Cylinders %I64u\n", DiskEntry->Cylinders); - DPRINT ("TracksPerCylinder %I64u\n", DiskEntry->TracksPerCylinder); - DPRINT ("SectorsPerTrack %I64u\n", DiskEntry->SectorsPerTrack); - DPRINT ("BytesPerSector %I64u\n", DiskEntry->BytesPerSector); + DPRINT("Cylinders %I64u\n", DiskEntry->Cylinders); + DPRINT("TracksPerCylinder %I64u\n", DiskEntry->TracksPerCylinder); + DPRINT("SectorsPerTrack %I64u\n", DiskEntry->SectorsPerTrack); + DPRINT("BytesPerSector %I64u\n", DiskEntry->BytesPerSector); - DiskEntry->TrackSize = - (ULONGLONG)DiskGeometry.SectorsPerTrack * - (ULONGLONG)DiskGeometry.BytesPerSector; - DiskEntry->CylinderSize = - (ULONGLONG)DiskGeometry.TracksPerCylinder * - DiskEntry->TrackSize; - DiskEntry->DiskSize = - DiskGeometry.Cylinders.QuadPart * - DiskEntry->CylinderSize; + DiskEntry->SectorCount.QuadPart = DiskGeometry.Cylinders.QuadPart * + (ULONGLONG)DiskGeometry.TracksPerCylinder * + (ULONGLONG)DiskGeometry.SectorsPerTrack; + + DiskEntry->SectorAlignment = DiskGeometry.SectorsPerTrack; + + DPRINT("SectorCount %I64u\n", DiskEntry->SectorCount); + DPRINT("SectorAlignment %lu\n", DiskEntry->SectorAlignment); DiskEntry->DiskNumber = DiskNumber; DiskEntry->Port = ScsiAddress.PortNumber; @@ -922,10 +1019,10 @@ AddDiskToList( */ LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) + ((56 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION)); - LayoutBuffer = (DRIVE_LAYOUT_INFORMATION*)RtlAllocateHeap(ProcessHeap, - 0, - LayoutBufferSize); - if (LayoutBuffer == NULL) + DiskEntry->LayoutBuffer = RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + LayoutBufferSize); + if (DiskEntry->LayoutBuffer == NULL) { return; } @@ -938,25 +1035,49 @@ AddDiskToList( IOCTL_DISK_GET_DRIVE_LAYOUT, NULL, 0, - LayoutBuffer, + DiskEntry->LayoutBuffer, LayoutBufferSize); if (NT_SUCCESS(Status)) { - if (LayoutBuffer->PartitionCount == 0) +#ifdef DUMP_PARTITION_TABLE + DumpPartitionTable(DiskEntry); +#endif + + if (DiskEntry->LayoutBuffer->PartitionCount == 0) { DiskEntry->NewDisk = TRUE; + DiskEntry->LayoutBuffer->PartitionCount = 4; + + for (i = 0; i < 4; i++) + DiskEntry->LayoutBuffer->PartitionEntry[i].RewritePartition = TRUE; } + else + { + for (i = 0; i < 4; i++) + { + if (DiskEntry->LayoutBuffer->PartitionEntry[i].PartitionType != 0) + { + AddPrimaryPartitionToDisk(DiskNumber, + DiskEntry, + i); + } + } - AddPartitionToList(DiskNumber, - DiskEntry, - LayoutBuffer); - - ScanForUnpartitionedDiskSpace(DiskEntry); + for (i = 4; i < DiskEntry->LayoutBuffer->PartitionCount; i++) + { + if (DiskEntry->LayoutBuffer->PartitionEntry[i].PartitionType != 0) + { +#if 0 + AddExtendedPartitionToDisk(DiskNumber, + DiskEntry, + i); +#endif + } + } + } } - RtlFreeHeap(ProcessHeap, - 0, - LayoutBuffer); + ScanForUnpartitionedDiskSpace(DiskEntry); } @@ -997,7 +1118,6 @@ CreatePartitionList( List->CurrentDisk = NULL; List->CurrentPartition = NULL; - List->CurrentPartitionNumber = 0; InitializeListHead(&List->DiskListHead); InitializeListHead(&List->BiosDiskListHead); @@ -1044,7 +1164,9 @@ CreatePartitionList( } } - AssignDriverLetters(List); + UpdateDiskSignatures(List); + + AssignDriveLetters(List); List->TopDisk = 0; List->TopPartition = 0; @@ -1054,7 +1176,6 @@ CreatePartitionList( { List->CurrentDisk = NULL; List->CurrentPartition = NULL; - List->CurrentPartitionNumber = 0; } else { @@ -1062,17 +1183,15 @@ CreatePartitionList( DISKENTRY, ListEntry); - if (IsListEmpty(&List->CurrentDisk->PartListHead)) + if (IsListEmpty(&List->CurrentDisk->PrimaryPartListHead)) { List->CurrentPartition = 0; - List->CurrentPartitionNumber = 0; } else { - List->CurrentPartition = CONTAINING_RECORD(List->CurrentDisk->PartListHead.Flink, + List->CurrentPartition = CONTAINING_RECORD(List->CurrentDisk->PrimaryPartListHead.Flink, PARTENTRY, ListEntry); - List->CurrentPartitionNumber = 0; } } @@ -1098,17 +1217,29 @@ DestroyPartitionList( /* Release driver name */ RtlFreeUnicodeString(&DiskEntry->DriverName); - /* Release partition array */ - while (!IsListEmpty(&DiskEntry->PartListHead)) + /* Release primary partition list */ + while (!IsListEmpty(&DiskEntry->PrimaryPartListHead)) { - Entry = RemoveHeadList(&DiskEntry->PartListHead); + Entry = RemoveHeadList(&DiskEntry->PrimaryPartListHead); PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); - RtlFreeHeap(ProcessHeap, - 0, - PartEntry); + RtlFreeHeap(ProcessHeap, 0, PartEntry); } + /* Release extended partition list */ + while (!IsListEmpty(&DiskEntry->ExtendedPartListHead)) + { + Entry = RemoveHeadList(&DiskEntry->ExtendedPartListHead); + PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); + + RtlFreeHeap(ProcessHeap, 0, PartEntry); + } + + /* Release layout buffer */ + if (DiskEntry->LayoutBuffer != NULL) + RtlFreeHeap(ProcessHeap, 0, DiskEntry->LayoutBuffer); + + /* Release disk entry */ RtlFreeHeap(ProcessHeap, 0, DiskEntry); } @@ -1167,8 +1298,7 @@ VOID PrintPartitionData( PPARTLIST List, PDISKENTRY DiskEntry, - PPARTENTRY PartEntry, - ULONG PartNumber) + PPARTENTRY PartEntry) { CHAR LineBuffer[128]; COORD coPos; @@ -1186,24 +1316,25 @@ PrintPartitionData( coPos.X = List->Left + 1; coPos.Y = List->Top + 1 + List->Line; - if (PartEntry->Unpartitioned == TRUE) + if (PartEntry->IsPartitioned == FALSE) { + PartSize.QuadPart = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; #if 0 - if (PartEntry->UnpartitionledLength >= 0x280000000ULL) /* 10 GB */ + if (PartSize.QuadPart >= 10737418240) /* 10 GB */ { - PartSize.QuadPart = (PartEntry->UnpartitionedLength + (1 << 29)) >> 30; + PartSize.QuadPart = RoundingDivide(PartSize.QuadPart, 1073741824); Unit = MUIGetString(STRING_GB); } else #endif - if (PartEntry->UnpartitionedLength >= 0xA00000ULL) /* 10 MB */ + if (PartSize.QuadPart >= 10485760) /* 10 MB */ { - PartSize.QuadPart = (PartEntry->UnpartitionedLength + (1 << 19)) >> 20; + PartSize.QuadPart = RoundingDivide(PartSize.QuadPart, 1048576); Unit = MUIGetString(STRING_MB); } else { - PartSize.QuadPart = (PartEntry->UnpartitionedLength + (1 << 9)) >> 10; + PartSize.QuadPart = RoundingDivide(PartSize.QuadPart, 1024); Unit = MUIGetString(STRING_KB); } @@ -1220,46 +1351,47 @@ PrintPartitionData( { PartType = MUIGetString(STRING_UNFORMATTED); } - else if (PartEntry->Unpartitioned == FALSE) + else if (PartEntry->IsPartitioned == TRUE) { - if ((PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT_12) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT_16) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_HUGE) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_XINT13)) + if ((PartEntry->PartitionType == PARTITION_FAT_12) || + (PartEntry->PartitionType == PARTITION_FAT_16) || + (PartEntry->PartitionType == PARTITION_HUGE) || + (PartEntry->PartitionType == PARTITION_XINT13)) { PartType = "FAT"; } - else if ((PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT32) || - (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT32_XINT13)) + else if ((PartEntry->PartitionType == PARTITION_FAT32) || + (PartEntry->PartitionType == PARTITION_FAT32_XINT13)) { PartType = "FAT32"; } - else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_EXT2) + else if (PartEntry->PartitionType == PARTITION_EXT2) { PartType = "EXT2"; } - else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_IFS) + else if (PartEntry->PartitionType == PARTITION_IFS) { PartType = "NTFS"; /* FIXME: Not quite correct! */ } } + PartSize.QuadPart = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; #if 0 - if (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart >= 0x280000000LL) /* 10 GB */ + if (PartSize.QuadPart >= 10737418240) /* 10 GB */ { - PartSize.QuadPart = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 29)) >> 30; + PartSize.QuadPart = RoundingDivide(PartSize.QuadPart, 1073741824); Unit = MUIGetString(STRING_GB); } else #endif - if (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart >= 0xA00000LL) /* 10 MB */ + if (PartSize.QuadPart >= 10485760) /* 10 MB */ { - PartSize.QuadPart = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 19)) >> 20; + PartSize.QuadPart = RoundingDivide(PartSize.QuadPart, 1048576); Unit = MUIGetString(STRING_MB); } else { - PartSize.QuadPart = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 9)) >> 10; + PartSize.QuadPart = RoundingDivide(PartSize.QuadPart, 1024); Unit = MUIGetString(STRING_KB); } @@ -1267,9 +1399,9 @@ PrintPartitionData( { sprintf(LineBuffer, MUIGetString(STRING_HDDINFOUNK5), - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : PartEntry->DriveLetter[PartNumber], - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : ':', - PartEntry->PartInfo[PartNumber].PartitionType, + (PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter, + (PartEntry->DriveLetter == 0) ? '-' : ':', + PartEntry->PartitionType, PartSize.u.LowPart, Unit); } @@ -1277,8 +1409,8 @@ PrintPartitionData( { sprintf(LineBuffer, "%c%c %-24s %6lu %s", - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : PartEntry->DriveLetter[PartNumber], - (PartEntry->DriveLetter[PartNumber] == 0) ? '-' : ':', + (PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter, + (PartEntry->DriveLetter == 0) ? '-' : ':', PartType, PartSize.u.LowPart, Unit); @@ -1286,8 +1418,7 @@ PrintPartitionData( } Attribute = (List->CurrentDisk == DiskEntry && - List->CurrentPartition == PartEntry && - List->CurrentPartitionNumber == PartNumber) ? + List->CurrentPartition == PartEntry) ? FOREGROUND_BLUE | BACKGROUND_WHITE : FOREGROUND_WHITE | BACKGROUND_BLUE; @@ -1339,7 +1470,6 @@ PrintDiskData( USHORT Height; ULARGE_INTEGER DiskSize; PCHAR Unit; - ULONG i; Width = List->Right - List->Left - 1; Height = List->Bottom - List->Top - 2; @@ -1347,16 +1477,15 @@ PrintDiskData( coPos.X = List->Left + 1; coPos.Y = List->Top + 1 + List->Line; -#if 0 - if (DiskEntry->DiskSize >= 0x280000000ULL) /* 10 GB */ + DiskSize.QuadPart = DiskEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; + if (DiskSize.QuadPart >= 10737418240) /* 10 GB */ { - DiskSize.QuadPart = (DiskEntry->DiskSize + (1 << 29)) >> 30; + DiskSize.QuadPart = RoundingDivide(DiskSize.QuadPart, 1073741824); Unit = MUIGetString(STRING_GB); } else -#endif { - DiskSize.QuadPart = (DiskEntry->DiskSize + (1 << 19)) >> 20; + DiskSize.QuadPart = RoundingDivide(DiskSize.QuadPart, 1048576); if (DiskSize.QuadPart == 0) DiskSize.QuadPart = 1; Unit = MUIGetString(STRING_MB); @@ -1417,32 +1546,14 @@ PrintDiskData( PrintEmptyLine(List); /* Print partition lines*/ - Entry = DiskEntry->PartListHead.Flink; - while (Entry != &DiskEntry->PartListHead) + Entry = DiskEntry->PrimaryPartListHead.Flink; + while (Entry != &DiskEntry->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); - /* Print disk entry */ - for (i = 0; i < 4; i++) - { - if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED || - PartEntry->PartInfo[i].PartitionLength.QuadPart != 0ULL) - { - PrintPartitionData(List, - DiskEntry, - PartEntry, - i); - } - } - - /* Print unpartitioned entry */ - if (PartEntry->Unpartitioned) - { - PrintPartitionData(List, - DiskEntry, - PartEntry, - 0); - } + PrintPartitionData(List, + DiskEntry, + PartEntry); Entry = Entry->Flink; } @@ -1484,8 +1595,8 @@ DrawPartitionList( CurrentPartLine += 2; } - Entry2 = DiskEntry->PartListHead.Flink; - while (Entry2 != &DiskEntry->PartListHead) + Entry2 = DiskEntry->PrimaryPartListHead.Flink; + while (Entry2 != &DiskEntry->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); if (PartEntry == List->CurrentPartition) @@ -1685,7 +1796,6 @@ SelectPartition( PPARTENTRY PartEntry; PLIST_ENTRY Entry1; PLIST_ENTRY Entry2; - UCHAR i; /* Check for empty disks */ if (IsListEmpty(&List->DiskListHead)) @@ -1699,21 +1809,17 @@ SelectPartition( if (DiskEntry->DiskNumber == DiskNumber) { - Entry2 = DiskEntry->PartListHead.Flink; - while (Entry2 != &DiskEntry->PartListHead) + Entry2 = DiskEntry->PrimaryPartListHead.Flink; + while (Entry2 != &DiskEntry->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); - for (i = 0; i < 4; i++) + if (PartEntry->PartitionNumber == PartitionNumber) { - if (PartEntry->PartInfo[i].PartitionNumber == PartitionNumber) - { - List->CurrentDisk = DiskEntry; - List->CurrentPartition = PartEntry; - List->CurrentPartitionNumber = i; - DrawPartitionList(List); - return TRUE; - } + List->CurrentDisk = DiskEntry; + List->CurrentPartition = PartEntry; + DrawPartitionList(List); + return TRUE; } Entry2 = Entry2->Flink; @@ -1733,11 +1839,10 @@ VOID ScrollDownPartitionList( PPARTLIST List) { - PDISKENTRY DiskEntry; +// PDISKENTRY DiskEntry; PPARTENTRY PartEntry; - PLIST_ENTRY Entry1; +// PLIST_ENTRY Entry1; PLIST_ENTRY Entry2; - UCHAR i; /* Check for empty disks */ if (IsListEmpty(&List->DiskListHead)) @@ -1746,46 +1851,18 @@ ScrollDownPartitionList( /* Check for next usable entry on current disk */ if (List->CurrentPartition != NULL) { - Entry2 = &List->CurrentPartition->ListEntry; - PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); - - /* Check if we can move inside primary partitions */ - for (i = List->CurrentPartitionNumber + 1; i < 4; i++) - { - if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED) - break; - } - - if (i == 4) - { - /* We're out of partitions in the current partition table. - Try to move to the next one if possible. */ - Entry2 = Entry2->Flink; - } - else - { - /* Just advance to the next partition */ - List->CurrentPartitionNumber = i; - DrawPartitionList(List); - return; - } - - while (Entry2 != &List->CurrentDisk->PartListHead) + Entry2 = List->CurrentPartition->ListEntry.Flink; + if (Entry2 != &List->CurrentDisk->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); -// if (PartEntry->HidePartEntry == FALSE) - { - List->CurrentPartition = PartEntry; - List->CurrentPartitionNumber = 0; - DrawPartitionList(List); - return; - } - - Entry2 = Entry2->Flink; + List->CurrentPartition = PartEntry; + DrawPartitionList(List); + return; } } +#if 0 /* Check for first usable entry on next disk */ if (List->CurrentDisk != NULL) { @@ -1795,25 +1872,20 @@ ScrollDownPartitionList( DiskEntry = CONTAINING_RECORD(Entry1, DISKENTRY, ListEntry); Entry2 = DiskEntry->PartListHead.Flink; - while (Entry2 != &DiskEntry->PartListHead) + if (Entry2 != &DiskEntry->PartListHead) { PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); -// if (PartEntry->HidePartEntry == FALSE) - { - List->CurrentDisk = DiskEntry; - List->CurrentPartition = PartEntry; - List->CurrentPartitionNumber = 0; - DrawPartitionList(List); - return; - } - - Entry2 = Entry2->Flink; + List->CurrentDisk = DiskEntry; + List->CurrentPartition = PartEntry; + DrawPartitionList(List); + return; } Entry1 = Entry1->Flink; } } +#endif } @@ -1821,11 +1893,10 @@ VOID ScrollUpPartitionList( PPARTLIST List) { - PDISKENTRY DiskEntry; +// PDISKENTRY DiskEntry; PPARTENTRY PartEntry; - PLIST_ENTRY Entry1; +// PLIST_ENTRY Entry1; PLIST_ENTRY Entry2; - UCHAR i; /* Check for empty disks */ if (IsListEmpty(&List->DiskListHead)) @@ -1834,56 +1905,20 @@ ScrollUpPartitionList( /* check for previous usable entry on current disk */ if (List->CurrentPartition != NULL) { - Entry2 = &List->CurrentPartition->ListEntry; - PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); - - /* Check if we can move inside primary partitions */ - if (List->CurrentPartitionNumber > 0) - { - /* Find a previous partition */ - for (i = List->CurrentPartitionNumber - 1; i > 0; i--) - { - if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED) - break; - } - - /* Move to it and return */ - List->CurrentPartitionNumber = i; - DrawPartitionList(List); - return; - } - - /* Move to the previous entry */ - Entry2 = Entry2->Blink; - - while (Entry2 != &List->CurrentDisk->PartListHead) + Entry2 = List->CurrentPartition->ListEntry.Blink; + if (Entry2 != &List->CurrentDisk->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); -// if (PartEntry->HidePartEntry == FALSE) - { - List->CurrentPartition = PartEntry; + List->CurrentPartition = PartEntry; - /* Find last existing partition in the table */ - for (i = 3; i > 0; i--) - { - if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED) - break; - } - - /* Move to it */ - List->CurrentPartitionNumber = i; - - /* Draw partition list and return */ - DrawPartitionList(List); - return; - } - - Entry2 = Entry2->Blink; + /* Draw partition list and return */ + DrawPartitionList(List); + return; } } - +#if 0 /* check for last usable entry on previous disk */ if (List->CurrentDisk != NULL) { @@ -1892,93 +1927,128 @@ ScrollUpPartitionList( { DiskEntry = CONTAINING_RECORD(Entry1, DISKENTRY, ListEntry); - Entry2 = DiskEntry->PartListHead.Blink; - while (Entry2 != &DiskEntry->PartListHead) + Entry2 = DiskEntry->PrimaryPartListHead.Blink; + if (Entry2 != &DiskEntry->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); -// if (PartEntry->HidePartEntry == FALSE) - { - List->CurrentDisk = DiskEntry; - List->CurrentPartition = PartEntry; + List->CurrentDisk = DiskEntry; + List->CurrentPartition = PartEntry; - /* Find last existing partition in the table */ - for (i = 3; i > 0; i--) - { - if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED) - break; - } - - /* Move to it */ - List->CurrentPartitionNumber = i; - - /* Draw partition list and return */ - DrawPartitionList(List); - return; - } - - Entry2 = Entry2->Blink; + /* Draw partition list and return */ + DrawPartitionList(List); + return; } Entry1 = Entry1->Blink; } } +#endif } static -PPARTENTRY -GetPrevPartitionedEntry( - PDISKENTRY DiskEntry, - PPARTENTRY CurrentEntry) +BOOLEAN +IsEmptyLayoutEntry( + PPARTITION_INFORMATION PartitionInfo) { - PPARTENTRY PrevEntry; - PLIST_ENTRY Entry; + if (PartitionInfo->StartingOffset.QuadPart == 0 && + PartitionInfo->PartitionLength.QuadPart == 0) +// PartitionInfo->PartitionType == 0) + return TRUE; - if (CurrentEntry->ListEntry.Blink == &DiskEntry->PartListHead) - return NULL; - - Entry = CurrentEntry->ListEntry.Blink; - while (Entry != &DiskEntry->PartListHead) - { - PrevEntry = CONTAINING_RECORD(Entry, - PARTENTRY, - ListEntry); - if (PrevEntry->Unpartitioned == FALSE) - return PrevEntry; - - Entry = Entry->Blink; - } - - return NULL; + return FALSE; } static -PPARTENTRY -GetNextPartitionedEntry( - PDISKENTRY DiskEntry, - PPARTENTRY CurrentEntry) +BOOLEAN +IsSamePrimaryLayoutEntry( + IN PPARTITION_INFORMATION PartitionInfo, + IN PDISKENTRY DiskEntry, + IN PPARTENTRY PartEntry) { - PPARTENTRY NextEntry; - PLIST_ENTRY Entry; + if (PartitionInfo->StartingOffset.QuadPart == PartEntry->StartSector.QuadPart * DiskEntry->BytesPerSector && + PartitionInfo->PartitionLength.QuadPart == PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector) +// PartitionInfo->PartitionNumber = PartEntry->PartitionNumber && +// PartitionInfo->PartitionType == PartEntry->PartitionType + return TRUE; - if (CurrentEntry->ListEntry.Flink == &DiskEntry->PartListHead) - return NULL; + return FALSE; +} - Entry = CurrentEntry->ListEntry.Flink; - while (Entry != &DiskEntry->PartListHead) + +static +VOID +UpdateDiskLayout( + IN PDISKENTRY DiskEntry) +{ + PPARTITION_INFORMATION PartitionInfo; + PLIST_ENTRY ListEntry; + PPARTENTRY PartEntry; + ULONG Index = 0; + ULONG PartitionNumber = 1; + +DPRINT1("UpdateDiskLayout()\n"); + + ListEntry = DiskEntry->PrimaryPartListHead.Flink; + while (ListEntry != &DiskEntry->PrimaryPartListHead) { - NextEntry = CONTAINING_RECORD(Entry, - PARTENTRY, - ListEntry); - if (NextEntry->Unpartitioned == FALSE) - return NextEntry; + PartEntry = CONTAINING_RECORD(ListEntry, PARTENTRY, ListEntry); - Entry = Entry->Flink; + if (PartEntry->IsPartitioned == TRUE) + { + PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[Index]; + + if (!IsSamePrimaryLayoutEntry(PartitionInfo, DiskEntry, PartEntry)) + { +DPRINT1("Updating partition entry %lu\n", Index); + PartitionInfo->StartingOffset.QuadPart = PartEntry->StartSector.QuadPart * DiskEntry->BytesPerSector; + PartitionInfo->PartitionLength.QuadPart = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector; + PartitionInfo->HiddenSectors = 0; + PartitionInfo->PartitionNumber = (!IsContainerPartition(PartEntry->PartitionType)) ? PartitionNumber : 0; + PartitionInfo->PartitionType = PartEntry->PartitionType; + PartitionInfo->BootIndicator = PartEntry->BootIndicator; + PartitionInfo->RecognizedPartition = FALSE; + PartitionInfo->RewritePartition = TRUE; + + PartEntry->PartitionNumber = PartitionNumber; + PartEntry->PartitionIndex = Index; + + PartitionNumber++; + } + else if (!IsEmptyLayoutEntry(PartitionInfo)) + { + PartitionNumber++; + } + + Index++; + } + + ListEntry = ListEntry->Flink; } - return NULL; + for (;Index < 4; Index++) + { + PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[Index]; + + if (!IsEmptyLayoutEntry(PartitionInfo)) + { +DPRINT1("Wiping partition entry %lu\n", Index); + PartitionInfo->StartingOffset.QuadPart = 0; + PartitionInfo->PartitionLength.QuadPart = 0; + PartitionInfo->HiddenSectors = 0; + PartitionInfo->PartitionNumber = 0; + PartitionInfo->PartitionType = 0; + PartitionInfo->BootIndicator = FALSE; + PartitionInfo->RecognizedPartition = FALSE; + PartitionInfo->RewritePartition = TRUE; + } + } + +#ifdef DUMP_PARTITION_TABLE + DumpPartitionTable(DiskEntry); +#endif } @@ -1990,12 +2060,12 @@ GetPrevUnpartitionedEntry( { PPARTENTRY PrevPartEntry; - if (PartEntry->ListEntry.Blink != &DiskEntry->PartListHead) + if (PartEntry->ListEntry.Blink != &DiskEntry->PrimaryPartListHead) { PrevPartEntry = CONTAINING_RECORD(PartEntry->ListEntry.Blink, PARTENTRY, ListEntry); - if (PrevPartEntry->Unpartitioned == TRUE) + if (PrevPartEntry->IsPartitioned == FALSE) return PrevPartEntry; } @@ -2011,12 +2081,12 @@ GetNextUnpartitionedEntry( { PPARTENTRY NextPartEntry; - if (PartEntry->ListEntry.Flink != &DiskEntry->PartListHead) + if (PartEntry->ListEntry.Flink != &DiskEntry->PrimaryPartListHead) { NextPartEntry = CONTAINING_RECORD(PartEntry->ListEntry.Flink, PARTENTRY, ListEntry); - if (NextPartEntry->Unpartitioned == TRUE) + if (NextPartEntry->IsPartitioned == FALSE) return NextPartEntry; } @@ -2027,19 +2097,19 @@ GetNextUnpartitionedEntry( VOID CreateNewPartition( PPARTLIST List, - ULONGLONG PartitionSize, + ULONGLONG SectorCount, BOOLEAN AutoCreate) { PDISKENTRY DiskEntry; PPARTENTRY PartEntry; - PPARTENTRY PrevPartEntry; - PPARTENTRY NextPartEntry; PPARTENTRY NewPartEntry; + DPRINT1("CreateNewPartition(%I64u)\n", SectorCount); + if (List == NULL || List->CurrentDisk == NULL || List->CurrentPartition == NULL || - List->CurrentPartition->Unpartitioned == FALSE) + List->CurrentPartition->IsPartitioned == TRUE) { return; } @@ -2047,227 +2117,66 @@ CreateNewPartition( DiskEntry = List->CurrentDisk; PartEntry = List->CurrentPartition; +DPRINT1("Current partition sector count: %I64u\n", PartEntry->SectorCount.QuadPart); + if (AutoCreate == TRUE || - PartitionSize == PartEntry->UnpartitionedLength) + Align(PartEntry->StartSector.QuadPart + SectorCount, DiskEntry->SectorAlignment) - PartEntry->StartSector.QuadPart == PartEntry->SectorCount.QuadPart) { +DPRINT1("Convert existing partition entry\n"); /* Convert current entry to 'new (unformatted)' */ + PartEntry->IsPartitioned = TRUE; + PartEntry->PartitionType = PARTITION_ENTRY_UNUSED; PartEntry->FormatState = Unformatted; - PartEntry->PartInfo[0].StartingOffset.QuadPart = - PartEntry->UnpartitionedOffset + DiskEntry->TrackSize; - PartEntry->PartInfo[0].HiddenSectors = - (ULONG)(PartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector); - PartEntry->PartInfo[0].PartitionLength.QuadPart = - PartEntry->UnpartitionedLength - DiskEntry->TrackSize; - PartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED; - PartEntry->PartInfo[0].BootIndicator = FALSE; /* FIXME */ - PartEntry->PartInfo[0].RewritePartition = TRUE; - PartEntry->PartInfo[1].RewritePartition = TRUE; - PartEntry->PartInfo[2].RewritePartition = TRUE; - PartEntry->PartInfo[3].RewritePartition = TRUE; - - /* Get previous and next partition entries */ - PrevPartEntry = GetPrevPartitionedEntry(DiskEntry, - PartEntry); - NextPartEntry = GetNextPartitionedEntry(DiskEntry, - PartEntry); - - if (PrevPartEntry != NULL && NextPartEntry != NULL) - { - /* Current entry is in the middle of the list */ - - /* Copy previous container partition data to current entry */ - RtlCopyMemory(&PartEntry->PartInfo[1], - &PrevPartEntry->PartInfo[1], - sizeof(PARTITION_INFORMATION)); - PartEntry->PartInfo[1].RewritePartition = TRUE; - - /* Update previous container partition data */ - - PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = - PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; - PrevPartEntry->PartInfo[1].HiddenSectors = - (ULONG)(PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector); - - if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) - { - /* Special case - previous partition is first partition */ - PrevPartEntry->PartInfo[1].PartitionLength.QuadPart = - DiskEntry->DiskSize - PrevPartEntry->PartInfo[1].StartingOffset.QuadPart; - } - else - { - PrevPartEntry->PartInfo[1].PartitionLength.QuadPart = - PartEntry->PartInfo[0].PartitionLength.QuadPart + DiskEntry->TrackSize; - } - - PrevPartEntry->PartInfo[1].RewritePartition = TRUE; - } - else if (PrevPartEntry == NULL && NextPartEntry != NULL) - { - /* Current entry is the first entry */ - return; - } - else if (PrevPartEntry != NULL && NextPartEntry == NULL) - { - /* Current entry is the last entry */ - - PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = - PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; - PrevPartEntry->PartInfo[1].HiddenSectors = - (ULONG)(PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector); - - if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) - { - /* Special case - previous partition is first partition */ - PrevPartEntry->PartInfo[1].PartitionLength.QuadPart = - DiskEntry->DiskSize - PrevPartEntry->PartInfo[1].StartingOffset.QuadPart; - } - else - { - PrevPartEntry->PartInfo[1].PartitionLength.QuadPart = - PartEntry->PartInfo[0].PartitionLength.QuadPart + DiskEntry->TrackSize; - } - - if ((PartEntry->PartInfo[1].StartingOffset.QuadPart + - PartEntry->PartInfo[1].PartitionLength.QuadPart) < - (1024LL * 255LL * 63LL * 512LL)) - { - PrevPartEntry->PartInfo[1].PartitionType = PARTITION_EXTENDED; - } - else - { - PrevPartEntry->PartInfo[1].PartitionType = PARTITION_XINT13_EXTENDED; - } - - PrevPartEntry->PartInfo[1].BootIndicator = FALSE; - PrevPartEntry->PartInfo[1].RewritePartition = TRUE; - } - PartEntry->AutoCreate = AutoCreate; PartEntry->New = TRUE; - PartEntry->Unpartitioned = FALSE; - PartEntry->UnpartitionedOffset = 0ULL; - PartEntry->UnpartitionedLength = 0ULL; + PartEntry->BootIndicator = FALSE; /* FIXME */ + +DPRINT1("First Sector: %I64u\n", PartEntry->StartSector.QuadPart); +DPRINT1("Last Sector: %I64u\n", PartEntry->StartSector.QuadPart + PartEntry->SectorCount.QuadPart - 1); +DPRINT1("Total Sectors: %I64u\n", PartEntry->SectorCount.QuadPart); } else { - /* Insert an initialize a new partition entry */ - NewPartEntry = (PPARTENTRY)RtlAllocateHeap(ProcessHeap, - 0, - sizeof(PARTENTRY)); +DPRINT1("Add new partition entry\n"); + + /* Insert and initialize a new partition entry */ + NewPartEntry = RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(PARTENTRY)); if (NewPartEntry == NULL) return; - RtlZeroMemory(NewPartEntry, - sizeof(PARTENTRY)); - /* Insert the new entry into the list */ InsertTailList(&PartEntry->ListEntry, &NewPartEntry->ListEntry); + NewPartEntry->DiskEntry = DiskEntry; + + NewPartEntry->IsPartitioned = TRUE; + NewPartEntry->StartSector.QuadPart = PartEntry->StartSector.QuadPart; + NewPartEntry->SectorCount.QuadPart = Align(NewPartEntry->StartSector.QuadPart + SectorCount, DiskEntry->SectorAlignment) - + NewPartEntry->StartSector.QuadPart; + NewPartEntry->PartitionType = PARTITION_ENTRY_UNUSED; + +DPRINT1("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart); +DPRINT1("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1); +DPRINT1("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart); + NewPartEntry->New = TRUE; - NewPartEntry->FormatState = Unformatted; - NewPartEntry->PartInfo[0].StartingOffset.QuadPart = - PartEntry->UnpartitionedOffset + DiskEntry->TrackSize; - NewPartEntry->PartInfo[0].HiddenSectors = - (ULONG)(NewPartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector); - NewPartEntry->PartInfo[0].PartitionLength.QuadPart = - PartitionSize - DiskEntry->TrackSize; - NewPartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED; - NewPartEntry->PartInfo[0].BootIndicator = FALSE; /* FIXME */ - NewPartEntry->PartInfo[0].RewritePartition = TRUE; - NewPartEntry->PartInfo[1].RewritePartition = TRUE; - NewPartEntry->PartInfo[2].RewritePartition = TRUE; - NewPartEntry->PartInfo[3].RewritePartition = TRUE; + NewPartEntry->BootIndicator = FALSE; /* FIXME */ - /* Get previous and next partition entries */ - PrevPartEntry = GetPrevPartitionedEntry(DiskEntry, - NewPartEntry); - NextPartEntry = GetNextPartitionedEntry(DiskEntry, - NewPartEntry); - - if (PrevPartEntry != NULL && NextPartEntry != NULL) - { - /* Current entry is in the middle of the list */ - - /* Copy previous container partition data to current entry */ - RtlCopyMemory(&NewPartEntry->PartInfo[1], - &PrevPartEntry->PartInfo[1], - sizeof(PARTITION_INFORMATION)); - NewPartEntry->PartInfo[1].RewritePartition = TRUE; - - /* Update previous container partition data */ - PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = - NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; - PrevPartEntry->PartInfo[1].HiddenSectors = - (ULONG)(PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector); - - if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) - { - /* Special case - previous partition is first partition */ - PrevPartEntry->PartInfo[1].PartitionLength.QuadPart = - DiskEntry->DiskSize - PrevPartEntry->PartInfo[1].StartingOffset.QuadPart; - } - else - { - PrevPartEntry->PartInfo[1].PartitionLength.QuadPart = - NewPartEntry->PartInfo[0].PartitionLength.QuadPart + DiskEntry->TrackSize; - } - - PrevPartEntry->PartInfo[1].RewritePartition = TRUE; - } - else if (PrevPartEntry == NULL && NextPartEntry != NULL) - { - /* Current entry is the first entry */ - return; - } - else if (PrevPartEntry != NULL && NextPartEntry == NULL) - { - /* Current entry is the last entry */ - - PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = - NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; - PrevPartEntry->PartInfo[1].HiddenSectors = - (ULONG)(PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector); - - if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) - { - /* Special case - previous partition is first partition */ - PrevPartEntry->PartInfo[1].PartitionLength.QuadPart = - DiskEntry->DiskSize - PrevPartEntry->PartInfo[1].StartingOffset.QuadPart; - } - else - { - PrevPartEntry->PartInfo[1].PartitionLength.QuadPart = - NewPartEntry->PartInfo[0].PartitionLength.QuadPart + DiskEntry->TrackSize; - } - - if ((PartEntry->PartInfo[1].StartingOffset.QuadPart + - PartEntry->PartInfo[1].PartitionLength.QuadPart) < - (1024LL * 255LL * 63LL * 512LL)) - { - PrevPartEntry->PartInfo[1].PartitionType = PARTITION_EXTENDED; - } - else - { - PrevPartEntry->PartInfo[1].PartitionType = PARTITION_XINT13_EXTENDED; - } - - PrevPartEntry->PartInfo[1].BootIndicator = FALSE; - PrevPartEntry->PartInfo[1].RewritePartition = TRUE; - } - - /* Update offset and size of the remaining unpartitioned disk space */ - PartEntry->UnpartitionedOffset += PartitionSize; - PartEntry->UnpartitionedLength -= PartitionSize; + PartEntry->StartSector.QuadPart = NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart; + PartEntry->SectorCount.QuadPart -= (PartEntry->StartSector.QuadPart - NewPartEntry->StartSector.QuadPart); } - DiskEntry->Modified = TRUE; + UpdateDiskLayout(DiskEntry); + + DiskEntry->Dirty = TRUE; UpdatePartitionNumbers(DiskEntry); - AssignDriverLetters(List); + AssignDriveLetters(List); } @@ -2283,7 +2192,7 @@ DeleteCurrentPartition( if (List == NULL || List->CurrentDisk == NULL || List->CurrentPartition == NULL || - List->CurrentPartition->Unpartitioned == TRUE) + List->CurrentPartition->IsPartitioned == FALSE) { return; } @@ -2291,48 +2200,6 @@ DeleteCurrentPartition( DiskEntry = List->CurrentDisk; PartEntry = List->CurrentPartition; - /* Adjust container partition entries */ - - /* Get previous and next partition entries */ - PrevPartEntry = GetPrevPartitionedEntry(DiskEntry, - PartEntry); - NextPartEntry = GetNextPartitionedEntry(DiskEntry, - PartEntry); - - if (PrevPartEntry != NULL && NextPartEntry != NULL) - { - /* Current entry is in the middle of the list */ - - /* - * The first extended partition can not be deleted - * as long as other extended partitions are present. - */ - if (PrevPartEntry->ListEntry.Blink == &DiskEntry->PartListHead) - return; - - /* Copy previous container partition data to current entry */ - RtlCopyMemory(&PrevPartEntry->PartInfo[1], - &PartEntry->PartInfo[1], - sizeof(PARTITION_INFORMATION)); - PrevPartEntry->PartInfo[1].RewritePartition = TRUE; - } - else if (PrevPartEntry == NULL && NextPartEntry != NULL) - { - /* - * A primary partition can not be deleted as long as - * extended partitions are present. - */ - return; - } - else if (PrevPartEntry != NULL && NextPartEntry == NULL) - { - /* Current entry is the last entry */ - RtlZeroMemory(&PrevPartEntry->PartInfo[1], - sizeof(PARTITION_INFORMATION)); - PrevPartEntry->PartInfo[1].RewritePartition = TRUE; - } - - /* Adjust unpartitioned disk space entries */ /* Get pointer to previous and next unpartitioned entries */ @@ -2347,21 +2214,15 @@ DeleteCurrentPartition( /* Merge previous, current and next unpartitioned entry */ /* Adjust the previous entries length */ - PrevPartEntry->UnpartitionedLength += - (PartEntry->PartInfo[0].PartitionLength.QuadPart + DiskEntry->TrackSize + - NextPartEntry->UnpartitionedLength); + PrevPartEntry->SectorCount.QuadPart += (PartEntry->SectorCount.QuadPart + NextPartEntry->SectorCount.QuadPart); /* Remove the current entry */ RemoveEntryList(&PartEntry->ListEntry); - RtlFreeHeap(ProcessHeap, - 0, - PartEntry); + RtlFreeHeap(ProcessHeap, 0, PartEntry); /* Remove the next entry */ RemoveEntryList (&NextPartEntry->ListEntry); - RtlFreeHeap(ProcessHeap, - 0, - NextPartEntry); + RtlFreeHeap(ProcessHeap, 0, NextPartEntry); /* Update current partition */ List->CurrentPartition = PrevPartEntry; @@ -2371,14 +2232,11 @@ DeleteCurrentPartition( /* Merge current and previous unpartitioned entry */ /* Adjust the previous entries length */ - PrevPartEntry->UnpartitionedLength += - (PartEntry->PartInfo[0].PartitionLength.QuadPart + DiskEntry->TrackSize); + PrevPartEntry->SectorCount.QuadPart += PartEntry->SectorCount.QuadPart; /* Remove the current entry */ RemoveEntryList(&PartEntry->ListEntry); - RtlFreeHeap(ProcessHeap, - 0, - PartEntry); + RtlFreeHeap(ProcessHeap, 0, PartEntry); /* Update current partition */ List->CurrentPartition = PrevPartEntry; @@ -2388,16 +2246,12 @@ DeleteCurrentPartition( /* Merge current and next unpartitioned entry */ /* Adjust the next entries offset and length */ - NextPartEntry->UnpartitionedOffset = - PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; - NextPartEntry->UnpartitionedLength += - (PartEntry->PartInfo[0].PartitionLength.QuadPart + DiskEntry->TrackSize); + NextPartEntry->StartSector.QuadPart = PartEntry->StartSector.QuadPart; + NextPartEntry->SectorCount.QuadPart += PartEntry->SectorCount.QuadPart; /* Remove the current entry */ RemoveEntryList(&PartEntry->ListEntry); - RtlFreeHeap(ProcessHeap, - 0, - PartEntry); + RtlFreeHeap(ProcessHeap, 0, PartEntry); /* Update current partition */ List->CurrentPartition = NextPartEntry; @@ -2405,23 +2259,18 @@ DeleteCurrentPartition( else { /* Nothing to merge but change current entry */ - PartEntry->New = FALSE; - PartEntry->Unpartitioned = TRUE; - PartEntry->UnpartitionedOffset = - PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; - PartEntry->UnpartitionedLength = - PartEntry->PartInfo[0].PartitionLength.QuadPart + DiskEntry->TrackSize; - - /* Wipe the partition table */ - RtlZeroMemory(&PartEntry->PartInfo, - sizeof(PartEntry->PartInfo)); + PartEntry->IsPartitioned = FALSE; + PartEntry->FormatState = Unformatted; + PartEntry->DriveLetter = 0; } - DiskEntry->Modified = TRUE; + UpdateDiskLayout(DiskEntry); + + DiskEntry->Dirty = TRUE; UpdatePartitionNumbers(DiskEntry); - AssignDriverLetters(List); + AssignDriveLetters(List); } @@ -2432,14 +2281,12 @@ CheckActiveBootPartition( PDISKENTRY DiskEntry; PPARTENTRY PartEntry; PLIST_ENTRY ListEntry; - UCHAR i; /* Check for empty disk list */ if (IsListEmpty (&List->DiskListHead)) { List->ActiveBootDisk = NULL; List->ActiveBootPartition = NULL; - List->ActiveBootPartitionNumber = 0; return; } @@ -2456,33 +2303,29 @@ CheckActiveBootPartition( DiskEntry = List->CurrentDisk; /* Check for empty partition list */ - if (IsListEmpty (&DiskEntry->PartListHead)) + if (IsListEmpty (&DiskEntry->PrimaryPartListHead)) { List->ActiveBootDisk = NULL; List->ActiveBootPartition = NULL; - List->ActiveBootPartitionNumber = 0; return; } - PartEntry = CONTAINING_RECORD(DiskEntry->PartListHead.Flink, + PartEntry = CONTAINING_RECORD(DiskEntry->PrimaryPartListHead.Flink, PARTENTRY, ListEntry); /* Set active boot partition */ if ((DiskEntry->NewDisk == TRUE) || - (PartEntry->PartInfo[0].BootIndicator == FALSE && - PartEntry->PartInfo[1].BootIndicator == FALSE && - PartEntry->PartInfo[2].BootIndicator == FALSE && - PartEntry->PartInfo[3].BootIndicator == FALSE)) + (PartEntry->BootIndicator == FALSE)) { - PartEntry->PartInfo[0].BootIndicator = TRUE; - PartEntry->PartInfo[0].RewritePartition = TRUE; - DiskEntry->Modified = TRUE; + PartEntry->BootIndicator = TRUE; + DiskEntry->LayoutBuffer->PartitionEntry[PartEntry->PartitionIndex].BootIndicator = TRUE; + DiskEntry->LayoutBuffer->PartitionEntry[PartEntry->PartitionIndex].RewritePartition = TRUE; + DiskEntry->Dirty = TRUE; /* FIXME: Might be incorrect if partitions were created by Linux FDISK */ List->ActiveBootDisk = DiskEntry; List->ActiveBootPartition = PartEntry; - List->ActiveBootPartitionNumber = 0; return; } @@ -2490,34 +2333,27 @@ CheckActiveBootPartition( /* Disk is not new, scan all partitions to find a bootable one */ List->ActiveBootDisk = NULL; List->ActiveBootPartition = NULL; - List->ActiveBootPartitionNumber = 0; - ListEntry = DiskEntry->PartListHead.Flink; - while (ListEntry != &DiskEntry->PartListHead) + ListEntry = DiskEntry->PrimaryPartListHead.Flink; + while (ListEntry != &DiskEntry->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(ListEntry, PARTENTRY, ListEntry); - /* Check if it's partitioned */ - if (!PartEntry->Unpartitioned) + /* Check if it is partitioned */ + if (PartEntry->IsPartitioned) { - /* Go through all of its 4 partitions */ - for (i = 0; i < 4; i++) + if (PartEntry->PartitionType != PARTITION_ENTRY_UNUSED && + PartEntry->BootIndicator) { - if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED && - PartEntry->PartInfo[i].BootIndicator) - { - /* Yes, we found it */ - List->ActiveBootDisk = DiskEntry; - List->ActiveBootPartition = PartEntry; - List->ActiveBootPartitionNumber = i; + /* Yes, we found it */ + List->ActiveBootDisk = DiskEntry; + List->ActiveBootPartition = PartEntry; - DPRINT("Found bootable partition disk %d, drive letter %c\n", - DiskEntry->DiskNumber, PartEntry->DriveLetter[i]); - - break; - } + DPRINT("Found bootable partition disk %d, drive letter %c\n", + DiskEntry->DiskNumber, PartEntry->DriveLetter); + break; } } @@ -2531,6 +2367,7 @@ BOOLEAN CheckForLinuxFdiskPartitions( PPARTLIST List) { +#if 0 PDISKENTRY DiskEntry; PPARTENTRY PartEntry; PLIST_ENTRY Entry1; @@ -2576,217 +2413,100 @@ CheckForLinuxFdiskPartitions( Entry1 = Entry1->Flink; } +#endif return FALSE; } +static +NTSTATUS +WritePartitons( + IN PPARTLIST List, + IN PDISKENTRY DiskEntry) +{ + WCHAR DstPath[MAX_PATH]; + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK Iosb; + UNICODE_STRING Name; + ULONG BufferSize; + HANDLE FileHandle = NULL; + NTSTATUS Status; + + DPRINT("WritePartitions() Disk: %lu\n", DiskEntry->DiskNumber); + + swprintf(DstPath, + L"\\Device\\Harddisk%d\\Partition0", + DiskEntry->DiskNumber); + RtlInitUnicodeString(&Name, + DstPath); + InitializeObjectAttributes(&ObjectAttributes, + &Name, + 0, + NULL, + NULL); + + Status = NtOpenFile(&FileHandle, + GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, + &ObjectAttributes, + &Iosb, + 0, + FILE_SYNCHRONOUS_IO_NONALERT); + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtOpenFile() failed (Status %lx)\n", Status); + return Status; + } + +#ifdef DUMP_PARTITION_TABLE + DumpPartitionTable(DiskEntry); +#endif + + BufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) + + ((DiskEntry->LayoutBuffer->PartitionCount - 1) * sizeof(PARTITION_INFORMATION)); + Status = NtDeviceIoControlFile(FileHandle, + NULL, + NULL, + NULL, + &Iosb, + IOCTL_DISK_SET_DRIVE_LAYOUT, + DiskEntry->LayoutBuffer, + BufferSize, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + DPRINT1("IOCTL_DISK_SET_DRIVE_LAYOUT failed (Status 0x%08lx)\n", Status); + } + + if (FileHandle != NULL) + NtClose(FileHandle); + + return Status; +} + + BOOLEAN WritePartitionsToDisk( PPARTLIST List) { - PDRIVE_LAYOUT_INFORMATION DriveLayout; - OBJECT_ATTRIBUTES ObjectAttributes; - IO_STATUS_BLOCK Iosb; - WCHAR DstPath[MAX_PATH]; - UNICODE_STRING Name; - HANDLE FileHandle; - PDISKENTRY DiskEntry1; - PDISKENTRY DiskEntry2; - PPARTENTRY PartEntry; - PLIST_ENTRY Entry1; - PLIST_ENTRY Entry2; - ULONG PartitionCount; - ULONG DriveLayoutSize; - ULONG Index; - NTSTATUS Status; + PLIST_ENTRY Entry; + PDISKENTRY DiskEntry; if (List == NULL) - { return TRUE; - } - Entry1 = List->DiskListHead.Flink; - while (Entry1 != &List->DiskListHead) + Entry = List->DiskListHead.Flink; + while (Entry != &List->DiskListHead) { - DiskEntry1 = CONTAINING_RECORD(Entry1, - DISKENTRY, - ListEntry); + DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry); - if (DiskEntry1->Modified == TRUE) + if (DiskEntry->Dirty == TRUE) { - /* Count partitioned entries */ - PartitionCount = 0; - - Entry2 = DiskEntry1->PartListHead.Flink; - while (Entry2 != &DiskEntry1->PartListHead) - { - PartEntry = CONTAINING_RECORD(Entry2, - PARTENTRY, - ListEntry); - if (PartEntry->Unpartitioned == FALSE) - { - PartitionCount += 4; - } - - Entry2 = Entry2->Flink; - } - - if (PartitionCount == 0) - { - DriveLayoutSize = sizeof (DRIVE_LAYOUT_INFORMATION) + - ((4 - 1) * sizeof (PARTITION_INFORMATION)); - } - else - { - DriveLayoutSize = sizeof (DRIVE_LAYOUT_INFORMATION) + - ((PartitionCount - 1) * sizeof (PARTITION_INFORMATION)); - } - - DriveLayout = (PDRIVE_LAYOUT_INFORMATION)RtlAllocateHeap(ProcessHeap, - 0, - DriveLayoutSize); - if (DriveLayout == NULL) - { - DPRINT1("RtlAllocateHeap() failed\n"); - return FALSE; - } - - RtlZeroMemory(DriveLayout, - DriveLayoutSize); - - if (PartitionCount == 0) - { - /* delete all partitions in the mbr */ - DriveLayout->PartitionCount = 4; - for (Index = 0; Index < 4; Index++) - { - DriveLayout->PartitionEntry[Index].RewritePartition = TRUE; - } - } - else - { - DriveLayout->PartitionCount = PartitionCount; - Index = 0; - - Entry2 = DiskEntry1->PartListHead.Flink; - while (Entry2 != &DiskEntry1->PartListHead) - { - PartEntry = CONTAINING_RECORD(Entry2, - PARTENTRY, - ListEntry); - if (PartEntry->Unpartitioned == FALSE) - { - RtlCopyMemory(&DriveLayout->PartitionEntry[Index], - &PartEntry->PartInfo[0], - 4 * sizeof (PARTITION_INFORMATION)); - Index += 4; - } - - Entry2 = Entry2->Flink; - } - } - - if (DiskEntry1->Signature == 0) - { - LARGE_INTEGER SystemTime; - TIME_FIELDS TimeFields; - PUCHAR Buffer; - Buffer = (PUCHAR)&DiskEntry1->Signature; - - while (1) - { - NtQuerySystemTime(&SystemTime); - RtlTimeToTimeFields(&SystemTime, &TimeFields); - - Buffer[0] = (UCHAR)(TimeFields.Year & 0xFF) + (UCHAR)(TimeFields.Hour & 0xFF); - Buffer[1] = (UCHAR)(TimeFields.Year >> 8) + (UCHAR)(TimeFields.Minute & 0xFF); - Buffer[2] = (UCHAR)(TimeFields.Month & 0xFF) + (UCHAR)(TimeFields.Second & 0xFF); - Buffer[3] = (UCHAR)(TimeFields.Day & 0xFF) + (UCHAR)(TimeFields.Milliseconds & 0xFF); - - if (DiskEntry1->Signature == 0) - { - continue; - } - - /* check if the signature already exist */ - /* FIXME: - * Check also signatures from disks, which are - * not visible (bootable) by the bios. - */ - Entry2 = List->DiskListHead.Flink; - while (Entry2 != &List->DiskListHead) - { - DiskEntry2 = CONTAINING_RECORD(Entry2, DISKENTRY, ListEntry); - if (DiskEntry1 != DiskEntry2 && - DiskEntry1->Signature == DiskEntry2->Signature) - { - break; - } - - Entry2 = Entry2->Flink; - } - - if (Entry2 == &List->DiskListHead) - { - break; - } - } - - /* set one partition entry to dirty, this will update the signature */ - DriveLayout->PartitionEntry[0].RewritePartition = TRUE; - } - - DriveLayout->Signature = DiskEntry1->Signature; - - swprintf(DstPath, - L"\\Device\\Harddisk%d\\Partition0", - DiskEntry1->DiskNumber); - RtlInitUnicodeString(&Name, - DstPath); - InitializeObjectAttributes(&ObjectAttributes, - &Name, - 0, - NULL, - NULL); - - Status = NtOpenFile(&FileHandle, - FILE_ALL_ACCESS, - &ObjectAttributes, - &Iosb, - 0, - FILE_SYNCHRONOUS_IO_NONALERT); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtOpenFile() failed (Status %lx)\n", Status); - return FALSE; - } - - Status = NtDeviceIoControlFile(FileHandle, - NULL, - NULL, - NULL, - &Iosb, - IOCTL_DISK_SET_DRIVE_LAYOUT, - DriveLayout, - DriveLayoutSize, - NULL, - 0); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtDeviceIoControlFile() failed (Status %lx)\n", Status); - NtClose(FileHandle); - return FALSE; - } - - RtlFreeHeap(ProcessHeap, - 0, - DriveLayout); - - NtClose(FileHandle); + WritePartitons(List, DiskEntry); } - Entry1 = Entry1->Flink; + Entry = Entry->Flink; } return TRUE; @@ -2800,7 +2520,7 @@ SetMountedDeviceValues( PLIST_ENTRY Entry1, Entry2; PDISKENTRY DiskEntry; PPARTENTRY PartEntry; - UCHAR i; + LARGE_INTEGER StartingOffset; if (List == NULL) { @@ -2814,22 +2534,20 @@ SetMountedDeviceValues( DISKENTRY, ListEntry); - Entry2 = DiskEntry->PartListHead.Flink; - while (Entry2 != &DiskEntry->PartListHead) + Entry2 = DiskEntry->PrimaryPartListHead.Flink; + while (Entry2 != &DiskEntry->PrimaryPartListHead) { PartEntry = CONTAINING_RECORD(Entry2, PARTENTRY, ListEntry); - if (!PartEntry->Unpartitioned) + if (PartEntry->IsPartitioned) { - for (i = 0; i < 4; i++) + if (PartEntry->DriveLetter) { - if (PartEntry->DriveLetter[i]) + StartingOffset.QuadPart = PartEntry->StartSector.QuadPart * DiskEntry->BytesPerSector; + if (!SetMountedDeviceValue(PartEntry->DriveLetter, + DiskEntry->LayoutBuffer->Signature, + StartingOffset)) { - if (!SetMountedDeviceValue(PartEntry->DriveLetter[i], - DiskEntry->Signature, - PartEntry->PartInfo[i].StartingOffset)) - { - return FALSE; - } + return FALSE; } } } diff --git a/reactos/base/setup/usetup/partlist.h b/reactos/base/setup/usetup/partlist.h index 81282f022fc..5cf1841602d 100644 --- a/reactos/base/setup/usetup/partlist.h +++ b/reactos/base/setup/usetup/partlist.h @@ -42,12 +42,23 @@ typedef struct _PARTENTRY { LIST_ENTRY ListEntry; - CHAR DriveLetter[4]; + struct _DISKENTRY *DiskEntry; + + ULARGE_INTEGER StartSector; + ULARGE_INTEGER SectorCount; + + BOOLEAN BootIndicator; + UCHAR PartitionType; + ULONG HiddenSectors; + ULONG PartitionNumber; + ULONG PartitionIndex; + + CHAR DriveLetter; CHAR VolumeLabel[17]; CHAR FileSystemName[9]; - /* Partition is unused disk space */ - BOOLEAN Unpartitioned; + /* Partition is partitioned disk space */ + BOOLEAN IsPartitioned; /* Partition is new. Table does not exist on disk yet */ BOOLEAN New; @@ -57,15 +68,6 @@ typedef struct _PARTENTRY FORMATSTATE FormatState; - /* - * Raw offset and length of the unpartitioned disk space. - * Includes the leading, not yet existing, partition table. - */ - ULONGLONG UnpartitionedOffset; - ULONGLONG UnpartitionedLength; - - PARTITION_INFORMATION PartInfo[4]; - } PARTENTRY, *PPARTENTRY; @@ -86,18 +88,17 @@ typedef struct _DISKENTRY LIST_ENTRY ListEntry; ULONGLONG Cylinders; - ULONGLONG TracksPerCylinder; - ULONGLONG SectorsPerTrack; - ULONGLONG BytesPerSector; + ULONG TracksPerCylinder; + ULONG SectorsPerTrack; + ULONG BytesPerSector; - ULONGLONG DiskSize; - ULONGLONG CylinderSize; - ULONGLONG TrackSize; + ULARGE_INTEGER SectorCount; + ULONG SectorAlignment; BOOLEAN BiosFound; ULONG BiosDiskNumber; - ULONG Signature; - ULONG Checksum; +// ULONG Signature; +// ULONG Checksum; ULONG DiskNumber; USHORT Port; @@ -105,14 +106,17 @@ typedef struct _DISKENTRY USHORT Id; /* Has the partition list been modified? */ - BOOLEAN Modified; + BOOLEAN Dirty; BOOLEAN NewDisk; BOOLEAN NoMbr; /* MBR is absent */ UNICODE_STRING DriverName; - LIST_ENTRY PartListHead; + PDRIVE_LAYOUT_INFORMATION LayoutBuffer; + + LIST_ENTRY PrimaryPartListHead; + LIST_ENTRY ExtendedPartListHead; } DISKENTRY, *PDISKENTRY; @@ -132,11 +136,9 @@ typedef struct _PARTLIST PDISKENTRY CurrentDisk; PPARTENTRY CurrentPartition; - UCHAR CurrentPartitionNumber; PDISKENTRY ActiveBootDisk; PPARTENTRY ActiveBootPartition; - UCHAR ActiveBootPartitionNumber; LIST_ENTRY DiskListHead; LIST_ENTRY BiosDiskListHead; From 8d02368e52d8188939939431512cc7cc7008a01e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer <timo.kreuzer@reactos.org> Date: Sun, 18 May 2014 16:25:40 +0000 Subject: [PATCH 62/81] [NTOSKRNL] - Fix a bug in MiQueryAddressState that prevented it from returning a valid protection - Add support for PAE and x64 to MiQueryAddressState - Acquire the working set lock in MiQueryMemoryBasicInformation before MiQueryAddressState - Fix RegionSize calculation in MiQueryMemoryBasicInformation - Handle ZeroBits and Process->VmTopDown in NtAllocateVirtualMemory - Fix a bug in calculating the ending address of a virtual allocation - Gracefully handle Vad allocation failure - Free Vad allocation on failure - Write values back to usermode only in case of success svn path=/trunk/; revision=63356 --- reactos/ntoskrnl/include/internal/amd64/mm.h | 5 +- reactos/ntoskrnl/mm/ARM3/miarm.h | 1 + reactos/ntoskrnl/mm/ARM3/virtual.c | 230 +++++++++++++------ 3 files changed, 170 insertions(+), 66 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index 09049141e51..661955c4e08 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -78,6 +78,7 @@ #define MI_ZERO_PTES (32) /* FIXME - different architectures have different cache line sizes... */ #define MM_CACHE_LINE_SIZE 32 +#define MI_MAX_ZERO_BITS 53 /* Helper macros */ #define PAGE_MASK(x) ((x)&(~0xfff)) @@ -143,11 +144,13 @@ //#define TEB_BASE 0x7FFDE000 -/* On x86, these two are the same */ +/* On x64, these are the same */ #define MMPDE MMPTE #define PMMPDE PMMPTE #define MMPPE MMPTE #define PMMPPE PMMPTE +#define MMPXE MMPTE +#define PMMPXE PMMPTE #define MI_WRITE_VALID_PPE MI_WRITE_VALID_PTE #define ValidKernelPpe ValidKernelPde diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index 1a86f7e40fc..d1cfbb4a24d 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -52,6 +52,7 @@ #define MI_LOWEST_VAD_ADDRESS (PVOID)MM_LOWEST_USER_ADDRESS #define MI_DEFAULT_SYSTEM_PTE_COUNT 50000 +#define MI_MAX_ZERO_BITS 21 #endif /* !_M_AMD64 */ diff --git a/reactos/ntoskrnl/mm/ARM3/virtual.c b/reactos/ntoskrnl/mm/ARM3/virtual.c index ea2f09405a4..935fc971dda 100644 --- a/reactos/ntoskrnl/mm/ARM3/virtual.c +++ b/reactos/ntoskrnl/mm/ARM3/virtual.c @@ -57,7 +57,7 @@ MiCalculatePageCommitment(IN ULONG_PTR StartingAddress, if (Vad->u.VadFlags.MemCommit == 1) { /* This is a committed VAD, so Assume the whole range is committed */ - CommittedPages = BYTES_TO_PAGES(EndingAddress - StartingAddress); + CommittedPages = (ULONG)BYTES_TO_PAGES(EndingAddress - StartingAddress); /* Is the PDE demand-zero? */ PointerPde = MiAddressToPte(PointerPte); @@ -1309,6 +1309,12 @@ MiQueryAddressState(IN PVOID Va, PMMPTE PointerPte, ProtoPte; PMMPDE PointerPde; +#if (_MI_PAGING_LEVELS >= 3) + PMMPPE PointerPpe; +#endif +#if (_MI_PAGING_LEVELS >= 4) + PMMPXE PointerPxe; +#endif MMPTE TempPte, TempProtoPte; BOOLEAN DemandZeroPte = TRUE, ValidPte = FALSE; ULONG State = MEM_RESERVE, Protect = 0; @@ -1321,27 +1327,70 @@ MiQueryAddressState(IN PVOID Va, /* Get the PDE and PTE for the address */ PointerPde = MiAddressToPde(Va); PointerPte = MiAddressToPte(Va); +#if (_MI_PAGING_LEVELS >= 3) + PointerPpe = MiAddressToPpe(Va); +#endif +#if (_MI_PAGING_LEVELS >= 4) + PointerPxe = MiAddressToPxe(Va); +#endif /* Return the next range */ *NextVa = (PVOID)((ULONG_PTR)Va + PAGE_SIZE); - /* Is the PDE demand-zero? */ - if (PointerPde->u.Long != 0) + do { - /* It is not. Is it valid? */ +#if (_MI_PAGING_LEVELS >= 4) + /* Does the PXE exist? */ + if (PointerPxe->u.Long == 0) + { + /* It does not, next range starts at the next PXE */ + *NextVa = MiPxeToAddress(PointerPxe + 1); + break; + } + + /* Is the PXE valid? */ + if (PointerPxe->u.Hard.Valid == 0) + { + /* Is isn't, fault it in (make the PPE accessible) */ + MiMakeSystemAddressValid(PointerPpe, TargetProcess); + } +#endif +#if (_MI_PAGING_LEVELS >= 3) + /* Does the PPE exist? */ + if (PointerPpe->u.Long == 0) + { + /* It does not, next range starts at the next PPE */ + *NextVa = MiPpeToAddress(PointerPpe + 1); + break; + } + + /* Is the PPE valid? */ + if (PointerPpe->u.Hard.Valid == 0) + { + /* Is isn't, fault it in (make the PDE accessible) */ + MiMakeSystemAddressValid(PointerPde, TargetProcess); + } +#endif + + /* Does the PDE exist? */ + if (PointerPde->u.Long == 0) + { + /* It does not, next range starts at the next PDE */ + *NextVa = MiPdeToAddress(PointerPde + 1); + break; + } + + /* Is the PDE valid? */ if (PointerPde->u.Hard.Valid == 0) { - /* Is isn't, fault it in */ - PointerPte = MiPteToAddress(PointerPde); + /* Is isn't, fault it in (make the PTE accessible) */ MiMakeSystemAddressValid(PointerPte, TargetProcess); - ValidPte = TRUE; } - } - else - { - /* It is, skip it and move to the next PDE */ - *NextVa = MiPdeToAddress(PointerPde + 1); - } + + /* We have a PTE that we can access now! */ + ValidPte = TRUE; + + } while (FALSE); /* Is it safe to try reading the PTE? */ if (ValidPte) @@ -1708,6 +1757,9 @@ MiQueryMemoryBasicInformation(IN HANDLE ProcessHandle, MemoryInfo.AllocationProtect = MmProtectToValue[Vad->u.VadFlags.Protection]; MemoryInfo.Type = MEM_PRIVATE; + /* Acquire the working set lock (shared is enough) */ + MiLockProcessWorkingSetShared(TargetProcess, PsGetCurrentThread()); + /* Find the largest chunk of memory which has the same state and protection mask */ MemoryInfo.State = MiQueryAddressState(Address, Vad, @@ -1723,6 +1775,16 @@ MiQueryMemoryBasicInformation(IN HANDLE ProcessHandle, Address = NextAddress; } + /* Release the working set lock */ + MiUnlockProcessWorkingSetShared(TargetProcess, PsGetCurrentThread()); + + /* Check if we went outside of the VAD */ + if (((ULONG_PTR)Address >> PAGE_SHIFT) > Vad->EndingVpn) + { + /* Set the end of the VAD as the end address */ + Address = (PVOID)((Vad->EndingVpn + 1) << PAGE_SHIFT); + } + /* Now that we know the last VA address, calculate the region size */ MemoryInfo.RegionSize = ((ULONG_PTR)Address - (ULONG_PTR)MemoryInfo.BaseAddress); } @@ -4088,11 +4150,11 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, PEPROCESS Process; PMEMORY_AREA MemoryArea; PFN_NUMBER PageCount; - PMMVAD Vad, FoundVad; + PMMVAD Vad = NULL, FoundVad; NTSTATUS Status; PMMSUPPORT AddressSpace; PVOID PBaseAddress; - ULONG_PTR PRegionSize, StartingAddress, EndingAddress; + ULONG_PTR PRegionSize, StartingAddress, EndingAddress, HighestAddress; PEPROCESS CurrentProcess = PsGetCurrentProcess(); KPROCESSOR_MODE PreviousMode = KeGetPreviousMode(); PETHREAD CurrentThread = PsGetCurrentThread(); @@ -4106,7 +4168,7 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, PAGED_CODE(); /* Check for valid Zero bits */ - if (ZeroBits > 21) + if (ZeroBits > MI_MAX_ZERO_BITS) { DPRINT1("Too many zero bits\n"); return STATUS_INVALID_PARAMETER_3; @@ -4114,7 +4176,7 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, /* Check for valid Allocation Types */ if ((AllocationType & ~(MEM_COMMIT | MEM_RESERVE | MEM_RESET | MEM_PHYSICAL | - MEM_TOP_DOWN | MEM_WRITE_WATCH))) + MEM_TOP_DOWN | MEM_WRITE_WATCH | MEM_LARGE_PAGES))) { DPRINT1("Invalid Allocation Type\n"); return STATUS_INVALID_PARAMETER_5; @@ -4159,16 +4221,16 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, return STATUS_INVALID_PARAMETER_5; } - /* MEM_PHYSICAL can only be used if MEM_RESERVE is also used */ - if ((AllocationType & MEM_PHYSICAL) && !(AllocationType & MEM_RESERVE)) - { - DPRINT1("MEM_WRITE_WATCH used without MEM_RESERVE\n"); - return STATUS_INVALID_PARAMETER_5; - } - /* Check for valid MEM_PHYSICAL usage */ if (AllocationType & MEM_PHYSICAL) { + /* MEM_PHYSICAL can only be used if MEM_RESERVE is also used */ + if (!(AllocationType & MEM_RESERVE)) + { + DPRINT1("MEM_PHYSICAL used without MEM_RESERVE\n"); + return STATUS_INVALID_PARAMETER_5; + } + /* Only these flags are allowed with MEM_PHYSIAL */ if (AllocationType & ~(MEM_RESERVE | MEM_TOP_DOWN | MEM_PHYSICAL)) { @@ -4200,7 +4262,7 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, { /* Make sure they are writable */ ProbeForWritePointer(UBaseAddress); - ProbeForWriteUlong(URegionSize); + ProbeForWriteSize_t(URegionSize); } /* Capture their values */ @@ -4215,7 +4277,7 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, _SEH2_END; /* Make sure the allocation isn't past the VAD area */ - if (PBaseAddress >= MM_HIGHEST_VAD_ADDRESS) + if (PBaseAddress > MM_HIGHEST_VAD_ADDRESS) { DPRINT1("Virtual allocation base above User Space\n"); return STATUS_INVALID_PARAMETER_2; @@ -4280,12 +4342,6 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // // Fail on the things we don't yet support // - if (ZeroBits != 0) - { - DPRINT1("Zero bits not supported\n"); - Status = STATUS_INVALID_PARAMETER; - goto FailPathNoLock; - } if ((AllocationType & MEM_LARGE_PAGES) == MEM_LARGE_PAGES) { DPRINT1("MEM_LARGE_PAGES not supported\n"); @@ -4304,18 +4360,6 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, Status = STATUS_INVALID_PARAMETER; goto FailPathNoLock; } - if ((AllocationType & MEM_TOP_DOWN) == MEM_TOP_DOWN) - { - DPRINT1("MEM_TOP_DOWN not supported\n"); - AllocationType &= ~MEM_TOP_DOWN; - } - - if (Process->VmTopDown == 1) - { - DPRINT1("VmTopDown not supported\n"); - Status = STATUS_INVALID_PARAMETER; - goto FailPathNoLock; - } // // Check if the caller is reserving memory, or committing memory and letting @@ -4326,7 +4370,7 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // // Do not allow COPY_ON_WRITE through this API // - if ((Protect & PAGE_WRITECOPY) || (Protect & PAGE_EXECUTE_WRITECOPY)) + if (Protect & (PAGE_WRITECOPY | PAGE_EXECUTE_WRITECOPY)) { DPRINT1("Copy on write not allowed through this path\n"); Status = STATUS_INVALID_PAGE_PROTECTION; @@ -4345,6 +4389,29 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, PageCount = BYTES_TO_PAGES(PRegionSize); EndingAddress = 0; StartingAddress = 0; + + // + // Check if ZeroBits were specified + // + if (ZeroBits != 0) + { + // + // Calculate the highest address and check if it's valid + // + HighestAddress = MAXULONG_PTR >> ZeroBits; + if (HighestAddress > (ULONG_PTR)MM_HIGHEST_VAD_ADDRESS) + { + Status = STATUS_INVALID_PARAMETER_3; + goto FailPathNoLock; + } + } + else + { + // + // Use the highest VAD address as maximum + // + HighestAddress = (ULONG_PTR)MM_HIGHEST_VAD_ADDRESS; + } } else { @@ -4353,8 +4420,8 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // expected 64KB granularity, and see where the ending address will // fall based on the aligned address and the passed in region size // - StartingAddress = ROUND_DOWN((ULONG_PTR)PBaseAddress, _64K); EndingAddress = ((ULONG_PTR)PBaseAddress + PRegionSize - 1) | (PAGE_SIZE - 1); + StartingAddress = ROUND_DOWN((ULONG_PTR)PBaseAddress, _64K); PageCount = BYTES_TO_PAGES(EndingAddress - StartingAddress); } @@ -4362,7 +4429,13 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // Allocate and initialize the VAD // Vad = ExAllocatePoolWithTag(NonPagedPool, sizeof(MMVAD_LONG), 'SdaV'); - ASSERT(Vad != NULL); + if (Vad == NULL) + { + DPRINT1("Failed to allocate a VAD!\n"); + Status = STATUS_INSUFFICIENT_RESOURCES; + goto FailPathNoLock; + } + Vad->u.LongFlags = 0; if (AllocationType & MEM_COMMIT) Vad->u.VadFlags.MemCommit = 1; Vad->u.VadFlags.Protection = ProtectionMask; @@ -4389,11 +4462,11 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, if (!PBaseAddress) { /* Which way should we search? */ - if (AllocationType & MEM_TOP_DOWN) + if ((AllocationType & MEM_TOP_DOWN) || Process->VmTopDown) { /* Find an address top-down */ Result = MiFindEmptyAddressRangeDownTree(PRegionSize, - (ULONG_PTR)MM_HIGHEST_VAD_ADDRESS, + HighestAddress, _64K, &Process->VadRoot, &StartingAddress, @@ -4419,9 +4492,11 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // Now we know where the allocation ends. Make sure it doesn't end up // somewhere in kernel mode. // - NT_ASSERT(StartingAddress != 0); + ASSERT(StartingAddress != 0); + ASSERT(StartingAddress < (ULONG_PTR)MM_HIGHEST_USER_ADDRESS); EndingAddress = (StartingAddress + PRegionSize - 1) | (PAGE_SIZE - 1); - if ((PVOID)EndingAddress > MM_HIGHEST_VAD_ADDRESS) + ASSERT(EndingAddress > StartingAddress); + if (EndingAddress > HighestAddress) { Status = STATUS_NO_MEMORY; goto FailPath; @@ -4447,8 +4522,8 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // // Write out the VAD fields for this allocation // - Vad->StartingVpn = (ULONG_PTR)StartingAddress >> PAGE_SHIFT; - Vad->EndingVpn = (ULONG_PTR)EndingAddress >> PAGE_SHIFT; + Vad->StartingVpn = StartingAddress >> PAGE_SHIFT; + Vad->EndingVpn = EndingAddress >> PAGE_SHIFT; // // FIXME: Should setup VAD bitmap @@ -4464,6 +4539,13 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, MiInsertNode(&Process->VadRoot, (PVOID)Vad, Parent, Result); MiUnlockProcessWorkingSetUnsafe(Process, CurrentThread); + // + // Make sure the actual region size is at least as big as the + // requested region size and update the value + // + ASSERT(PRegionSize <= (EndingAddress + 1 - StartingAddress)); + PRegionSize = (EndingAddress + 1 - StartingAddress); + // // Update the virtual size of the process, and if this is now the highest // virtual size we have ever seen, update the peak virtual size to reflect @@ -4497,6 +4579,9 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { + // + // Ignore exception! + // } _SEH2_END; return STATUS_SUCCESS; @@ -4814,6 +4899,14 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, FailPath: MmUnlockAddressSpace(AddressSpace); + if (!NT_SUCCESS(Status)) + { + if (Vad != NULL) + { + ExFreePoolWithTag(Vad, 'SdaV'); + } + } + // // Check if we need to update the protection // @@ -4838,21 +4931,28 @@ FailPathNoLock: if (ProcessHandle != NtCurrentProcess()) ObDereferenceObject(Process); // - // Use SEH to write back the base address and the region size. In the case - // of an exception, we strangely do return back the exception code, even - // though the memory *has* been allocated. This mimics Windows behavior and - // there is not much we can do about it. + // Only write back results on success // - _SEH2_TRY + if (NT_SUCCESS(Status)) { - *URegionSize = PRegionSize; - *UBaseAddress = (PVOID)StartingAddress; + // + // Use SEH to write back the base address and the region size. In the case + // of an exception, we strangely do return back the exception code, even + // though the memory *has* been allocated. This mimics Windows behavior and + // there is not much we can do about it. + // + _SEH2_TRY + { + *URegionSize = PRegionSize; + *UBaseAddress = (PVOID)StartingAddress; + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; + return Status; } From 8926b7a72ebeb5ef5efcb6b35990228de531a00f Mon Sep 17 00:00:00 2001 From: Amine Khaldi <amine.khaldi@reactos.org> Date: Sun, 18 May 2014 18:35:45 +0000 Subject: [PATCH 63/81] [CRT] * Import _isleadbyte_l(). * Import _mbtowc_l(). * Import mbtowc() instead of our own. * Fixes some msvcrt tests. CORE-8080 svn path=/trunk/; revision=63358 --- reactos/lib/sdk/crt/stdlib/mbtowc.c | 59 +++++++++++++++-------------- reactos/lib/sdk/crt/string/ctype.c | 9 +++++ 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/reactos/lib/sdk/crt/stdlib/mbtowc.c b/reactos/lib/sdk/crt/stdlib/mbtowc.c index 6830367dfc8..13366a0e567 100644 --- a/reactos/lib/sdk/crt/stdlib/mbtowc.c +++ b/reactos/lib/sdk/crt/stdlib/mbtowc.c @@ -10,36 +10,39 @@ #include <precomp.h> - -/* - * @implemented +/********************************************************************* + * _mbtowc_l(MSVCRT.@) */ - -int mbtowc (wchar_t *charptr, const char *address, size_t number) +int CDECL _mbtowc_l(wchar_t *dst, const char* str, size_t n, _locale_t locale) { - int bytes; + MSVCRT_pthreadlocinfo locinfo; + wchar_t tmpdst = '\0'; - if (address == 0) - return 0; + if(!locale) + locinfo = get_locinfo(); + else + locinfo = (MSVCRT_pthreadlocinfo)(locale->locinfo); - if ((bytes = mblen (address, number)) < 0) - return bytes; - - if (charptr) { - switch (bytes) { - case 0: - if (number > 0) - *charptr = (wchar_t) '\0'; - break; - case 1: - *charptr = (wchar_t) ((unsigned char) address[0]); - break; - case 2: - *charptr = (wchar_t) (((unsigned char) address[0] << 8) - | (unsigned char) address[1]); - break; - } - } - - return bytes; + if(n <= 0 || !str) + return 0; + if(!locinfo->lc_codepage) + tmpdst = (unsigned char)*str; + else if(!MultiByteToWideChar(locinfo->lc_codepage, 0, str, n, &tmpdst, 1)) + return -1; + if(dst) + *dst = tmpdst; + /* return the number of bytes from src that have been used */ + if(!*str) + return 0; + if(n >= 2 && _isleadbyte_l((unsigned char)*str, locale) && str[1]) + return 2; + return 1; +} + +/********************************************************************* + * mbtowc(MSVCRT.@) + */ +int CDECL mbtowc(wchar_t *dst, const char* str, size_t n) +{ + return _mbtowc_l(dst, str, n, NULL); } diff --git a/reactos/lib/sdk/crt/string/ctype.c b/reactos/lib/sdk/crt/string/ctype.c index 1dbbee453ac..bf5d1cda76f 100644 --- a/reactos/lib/sdk/crt/string/ctype.c +++ b/reactos/lib/sdk/crt/string/ctype.c @@ -614,6 +614,15 @@ int __cdecl _isctype (int c, int ctypeFlags) { return _isctype_l(c, ctypeFlags, NULL); } + +/********************************************************************* + * _isleadbyte_l (MSVCRT.@) + */ +int __cdecl _isleadbyte_l(int c, _locale_t locale) +{ + return _isctype_l( c, _LEADBYTE, locale ); +} + #endif /* _LIBCNT_ */ /* From 05f75e278b8618d3675c902c76a2d2cd9605858c Mon Sep 17 00:00:00 2001 From: Christoph von Wittich <christoph_vw@reactos.org> Date: Sun, 18 May 2014 18:40:02 +0000 Subject: [PATCH 64/81] [bootdata] add entries for optional broadcom 57xx drivers (used by the official ReactOS test laptop) svn path=/trunk/; revision=63359 --- reactos/boot/bootdata/packages/reactos.dff.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reactos/boot/bootdata/packages/reactos.dff.in b/reactos/boot/bootdata/packages/reactos.dff.in index 0986c54c8bb..78e13f332b8 100644 --- a/reactos/boot/bootdata/packages/reactos.dff.in +++ b/reactos/boot/bootdata/packages/reactos.dff.in @@ -46,6 +46,9 @@ Signature = "$ReactOS$" "modules/optional/netkvm2k.inf" 6 optional "modules/optional/netkvm2k.cat" 6 optional "modules/optional/netkvm.sys" 2 optional +"modules/optional/b57win32.inf" 6 optional +"modules/optional/b57win32.cat" 6 optional +"modules/optional/b57xp32.sys" 2 optional "modules/optional/alcxwdm.inf" 6 optional "modules/optional/alcxwdm.sys" 2 optional "modules/optional/mfc42.dll" 1 optional From 0e26222a74d18f915bb4dc6490e8ce971f12ebe3 Mon Sep 17 00:00:00 2001 From: Cameron Gutman <aicommander@gmail.com> Date: Sun, 18 May 2014 20:39:54 +0000 Subject: [PATCH 65/81] [NTOSKRNL] - Fail device initialization if a filter fails to load so the PnP manager can try again later - Fix some handle leaks - Reset device node flags after a remove IRP is sent [I8042PRT|MOUCLASS|KBDCLASS] - Implement proper support for PnP remove IRPs See issue #8238 for more details. svn path=/trunk/; revision=63360 --- reactos/drivers/input/i8042prt/pnp.c | 37 ++++++++++++++++++++ reactos/drivers/input/kbdclass/kbdclass.c | 14 ++++++-- reactos/drivers/input/mouclass/mouclass.c | 14 ++++++-- reactos/ntoskrnl/io/iomgr/driver.c | 41 +++++++++++++++++++---- reactos/ntoskrnl/io/pnpmgr/pnpinit.c | 22 ++++++++++-- reactos/ntoskrnl/io/pnpmgr/pnpmgr.c | 6 ++-- 6 files changed, 118 insertions(+), 16 deletions(-) diff --git a/reactos/drivers/input/i8042prt/pnp.c b/reactos/drivers/input/i8042prt/pnp.c index b0c67eccbed..fbc1753cbe0 100644 --- a/reactos/drivers/input/i8042prt/pnp.c +++ b/reactos/drivers/input/i8042prt/pnp.c @@ -644,6 +644,26 @@ i8042PnpStartDevice( return Status; } +static VOID +i8042RemoveDevice( + IN PDEVICE_OBJECT DeviceObject) +{ + PI8042_DRIVER_EXTENSION DriverExtension; + KIRQL OldIrql; + PFDO_DEVICE_EXTENSION DeviceExtension; + + DriverExtension = (PI8042_DRIVER_EXTENSION)IoGetDriverObjectExtension(DeviceObject->DriverObject, DeviceObject->DriverObject); + DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + + KeAcquireSpinLock(&DriverExtension->DeviceListLock, &OldIrql); + RemoveEntryList(&DeviceExtension->ListEntry); + KeReleaseSpinLock(&DriverExtension->DeviceListLock, OldIrql); + + IoDetachDevice(DeviceExtension->LowerDevice); + + IoDeleteDevice(DeviceObject); +} + NTSTATUS NTAPI i8042Pnp( IN PDEVICE_OBJECT DeviceObject, @@ -710,6 +730,23 @@ i8042Pnp( TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_PNP_DEVICE_STATE\n"); return ForwardIrpAndForget(DeviceObject, Irp); } + case IRP_MN_QUERY_REMOVE_DEVICE: + { + TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_REMOVE_DEVICE\n"); + return ForwardIrpAndForget(DeviceObject, Irp); + } + case IRP_MN_CANCEL_REMOVE_DEVICE: + { + TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_CANCEL_REMOVE_DEVICE\n"); + return ForwardIrpAndForget(DeviceObject, Irp); + } + case IRP_MN_REMOVE_DEVICE: + { + TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_REMOVE_DEVICE\n"); + Status = ForwardIrpAndForget(DeviceObject, Irp); + i8042RemoveDevice(DeviceObject); + return Status; + } default: { ERR_(I8042PRT, "IRP_MJ_PNP / unknown minor function 0x%x\n", MinorFunction); diff --git a/reactos/drivers/input/kbdclass/kbdclass.c b/reactos/drivers/input/kbdclass/kbdclass.c index 12ff89e3fec..09967b9f749 100644 --- a/reactos/drivers/input/kbdclass/kbdclass.c +++ b/reactos/drivers/input/kbdclass/kbdclass.c @@ -606,7 +606,7 @@ DestroyPortDriver( /* Remove from ClassDeviceExtension->ListHead list */ KeAcquireSpinLock(&ClassDeviceExtension->ListSpinLock, &OldIrql); - RemoveHeadList(DeviceExtension->ListEntry.Blink); + RemoveEntryList(&DeviceExtension->ListEntry); KeReleaseSpinLock(&ClassDeviceExtension->ListSpinLock, OldIrql); /* Remove entry from HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\[DeviceBaseName] */ @@ -865,7 +865,6 @@ ClassPnp( IoCompleteRequest(Irp, IO_NO_INCREMENT); return Status; - case IRP_MN_REMOVE_DEVICE: case IRP_MN_STOP_DEVICE: if (DeviceExtension->FileHandle) { @@ -874,6 +873,17 @@ ClassPnp( } Status = STATUS_SUCCESS; break; + + case IRP_MN_REMOVE_DEVICE: + if (DeviceExtension->FileHandle) + { + ZwClose(DeviceExtension->FileHandle); + DeviceExtension->FileHandle = NULL; + } + IoSkipCurrentIrpStackLocation(Irp); + Status = IoCallDriver(DeviceExtension->LowerDevice, Irp); + DestroyPortDriver(DeviceObject); + return Status; default: Status = Irp->IoStatus.Status; diff --git a/reactos/drivers/input/mouclass/mouclass.c b/reactos/drivers/input/mouclass/mouclass.c index 070dc5096e4..6fb47b38db6 100644 --- a/reactos/drivers/input/mouclass/mouclass.c +++ b/reactos/drivers/input/mouclass/mouclass.c @@ -582,7 +582,7 @@ DestroyPortDriver( /* Remove from ClassDeviceExtension->ListHead list */ KeAcquireSpinLock(&ClassDeviceExtension->ListSpinLock, &OldIrql); - RemoveHeadList(DeviceExtension->ListEntry.Blink); + RemoveEntryList(&DeviceExtension->ListEntry); KeReleaseSpinLock(&ClassDeviceExtension->ListSpinLock, OldIrql); /* Remove entry from HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\[DeviceBaseName] */ @@ -841,7 +841,6 @@ ClassPnp( IoCompleteRequest(Irp, IO_NO_INCREMENT); return Status; - case IRP_MN_REMOVE_DEVICE: case IRP_MN_STOP_DEVICE: if (DeviceExtension->FileHandle) { @@ -850,6 +849,17 @@ ClassPnp( } Status = STATUS_SUCCESS; break; + + case IRP_MN_REMOVE_DEVICE: + if (DeviceExtension->FileHandle) + { + ZwClose(DeviceExtension->FileHandle); + DeviceExtension->FileHandle = NULL; + } + IoSkipCurrentIrpStackLocation(Irp); + Status = IoCallDriver(DeviceExtension->LowerDevice, Irp); + DestroyPortDriver(DeviceObject); + return Status; default: Status = Irp->IoStatus.Status; diff --git a/reactos/ntoskrnl/io/iomgr/driver.c b/reactos/ntoskrnl/io/iomgr/driver.c index 4cdbbb51484..105e8cad767 100644 --- a/reactos/ntoskrnl/io/iomgr/driver.c +++ b/reactos/ntoskrnl/io/iomgr/driver.c @@ -558,6 +558,10 @@ IopAttachFilterDriversCallback( PLDR_DATA_TABLE_ENTRY ModuleObject; PDRIVER_OBJECT DriverObject; NTSTATUS Status; + + /* No filter value present */ + if (ValueType == REG_NONE) + return STATUS_SUCCESS; for (Filters = ValueData; ((ULONG_PTR)Filters - (ULONG_PTR)ValueData) < ValueLength && @@ -578,18 +582,21 @@ IopAttachFilterDriversCallback( /* Load and initialize the filter driver */ Status = IopLoadServiceModule(&ServiceName, &ModuleObject); if (!NT_SUCCESS(Status)) - continue; + return Status; Status = IopInitializeDriverModule(DeviceNode, ModuleObject, &ServiceName, FALSE, &DriverObject); if (!NT_SUCCESS(Status)) - continue; + return Status; } Status = IopInitializeDevice(DeviceNode, DriverObject); /* Remove extra reference */ ObDereferenceObject(DriverObject); + + if (!NT_SUCCESS(Status)) + return Status; } return STATUS_SUCCESS; @@ -645,14 +652,23 @@ IopAttachFilterDrivers( QueryTable[0].Name = L"LowerFilters"; else QueryTable[0].Name = L"UpperFilters"; - QueryTable[0].Flags = RTL_QUERY_REGISTRY_REQUIRED; + QueryTable[0].Flags = 0; + QueryTable[0].DefaultType = REG_NONE; - RtlQueryRegistryValues( + Status = RtlQueryRegistryValues( RTL_REGISTRY_HANDLE, (PWSTR)SubKey, QueryTable, DeviceNode, NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to load device %s filters: %08X\n", + Lower ? "lower" : "upper", Status); + ZwClose(SubKey); + ZwClose(EnumRootKey); + return Status; + } /* * Now get the class GUID @@ -696,9 +712,10 @@ IopAttachFilterDrivers( &Class, KEY_READ); if (!NT_SUCCESS(Status)) { + /* It's okay if there's no class key */ DPRINT1("ZwOpenKey() failed with Status %08X\n", Status); ZwClose(EnumRootKey); - return Status; + return STATUS_SUCCESS; } QueryTable[0].QueryRoutine = IopAttachFilterDriversCallback; @@ -707,9 +724,10 @@ IopAttachFilterDrivers( else QueryTable[0].Name = L"UpperFilters"; QueryTable[0].EntryContext = NULL; - QueryTable[0].Flags = RTL_QUERY_REGISTRY_REQUIRED; + QueryTable[0].Flags = 0; + QueryTable[0].DefaultType = REG_NONE; - RtlQueryRegistryValues( + Status = RtlQueryRegistryValues( RTL_REGISTRY_HANDLE, (PWSTR)SubKey, QueryTable, @@ -719,6 +737,15 @@ IopAttachFilterDrivers( /* Clean up */ ZwClose(SubKey); ZwClose(EnumRootKey); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to load class %s filters: %08X\n", + Lower ? "lower" : "upper", Status); + ZwClose(SubKey); + ZwClose(EnumRootKey); + return Status; + } } return STATUS_SUCCESS; diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpinit.c b/reactos/ntoskrnl/io/pnpmgr/pnpinit.c index 1684f92284c..30e20ca9e62 100644 --- a/reactos/ntoskrnl/io/pnpmgr/pnpinit.c +++ b/reactos/ntoskrnl/io/pnpmgr/pnpinit.c @@ -275,10 +275,10 @@ PipCallDriverAddDevice(IN PDEVICE_NODE DeviceNode, EnumRootKey, &DeviceNode->InstancePath, KEY_READ); + ZwClose(EnumRootKey); if (!NT_SUCCESS(Status)) { DPRINT1("IopOpenRegistryKeyEx() failed with Status %08X\n", Status); - ZwClose(EnumRootKey); return Status; } @@ -330,12 +330,17 @@ PipCallDriverAddDevice(IN PDEVICE_NODE DeviceNode, ClassKey, &Properties, KEY_READ); + ZwClose(ClassKey); if (!NT_SUCCESS(Status)) { /* No properties */ DPRINT("IopOpenRegistryKeyEx() failed with Status %08X\n", Status); PropertiesKey = NULL; } + else + { + ZwClose(PropertiesKey); + } } /* Free the registry data */ @@ -343,11 +348,22 @@ PipCallDriverAddDevice(IN PDEVICE_NODE DeviceNode, } /* Do ReactOS-style setup */ - IopAttachFilterDrivers(DeviceNode, TRUE); + Status = IopAttachFilterDrivers(DeviceNode, TRUE); + if (!NT_SUCCESS(Status)) + { + IopRemoveDevice(DeviceNode); + return Status; + } Status = IopInitializeDevice(DeviceNode, DriverObject); if (NT_SUCCESS(Status)) { - IopAttachFilterDrivers(DeviceNode, FALSE); + Status = IopAttachFilterDrivers(DeviceNode, FALSE); + if (!NT_SUCCESS(Status)) + { + IopRemoveDevice(DeviceNode); + return Status; + } + Status = IopStartDevice(DeviceNode); } diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c index 5c18437a6f6..ee036a78770 100644 --- a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c +++ b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c @@ -580,7 +580,11 @@ IopSendRemoveDevice(IN PDEVICE_OBJECT DeviceObject) { IO_STACK_LOCATION Stack; PVOID Dummy; + PDEVICE_NODE DeviceNode = IopGetDeviceNode(DeviceObject); + /* Drop all our state for this device in case it isn't really going away */ + DeviceNode->Flags &= DNF_ENUMERATED | DNF_PROCESSED; + RtlZeroMemory(&Stack, sizeof(IO_STACK_LOCATION)); Stack.MajorFunction = IRP_MJ_PNP; Stack.MinorFunction = IRP_MN_REMOVE_DEVICE; @@ -4537,8 +4541,6 @@ IopPrepareDeviceForRemoval(IN PDEVICE_OBJECT DeviceObject, BOOLEAN Force) return Status; } - DeviceNode->Flags |= DNF_WILL_BE_REMOVED; - DeviceNode->Problem = CM_PROB_WILL_BE_REMOVED; if (DeviceRelations) IopSendRemoveDeviceRelations(DeviceRelations); IopSendRemoveChildDevices(DeviceNode); From 6dead6f19cfac456dc0ec0467d04ce35fe7bc048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Sun, 18 May 2014 22:10:45 +0000 Subject: [PATCH 66/81] [KERNEL32] Usually the command line is made of the application name and its parameters. When launching a DOS program, BaseCheckVDM builds suitable ApplicationName and CommandLine strings "DOS-compatible". ApplicationName is left-trimmed for whitespace and then converted to short-path format, and CommandLine sees the application name part (its first token) removed. We didn't do it before, we do it now. Care is taken when quotes are present in ApplicationName. Finally DOS command lines usually receive a newline character, so we also add it there. This is how behave Windows: just put our ntvdm in Windows, and observe what it receives... svn path=/trunk/; revision=63361 --- reactos/dll/win32/kernel32/client/vdm.c | 125 ++++++++++++++++++++---- 1 file changed, 104 insertions(+), 21 deletions(-) diff --git a/reactos/dll/win32/kernel32/client/vdm.c b/reactos/dll/win32/kernel32/client/vdm.c index e6fa9c3a04b..ca683838b76 100644 --- a/reactos/dll/win32/kernel32/client/vdm.c +++ b/reactos/dll/win32/kernel32/client/vdm.c @@ -93,26 +93,25 @@ BaseCheckVDM(IN ULONG BinaryType, STARTUPINFOA AnsiStartupInfo; ULONG NumStrings = 5; - if (CurrentDirectory == NULL) + /* Parameters validation */ + if (ApplicationName == NULL || CommandLine == NULL) { - /* Allocate memory for the current directory path */ - Length = GetCurrentDirectoryW(0, NULL); - CurrentDir = (PWCHAR)RtlAllocateHeap(RtlGetProcessHeap(), - HEAP_ZERO_MEMORY, - Length * sizeof(WCHAR)); - if (CurrentDir == NULL) - { - Status = STATUS_NO_MEMORY; - goto Cleanup; - } - - /* Get the current directory */ - GetCurrentDirectoryW(Length, CurrentDir); - CurrentDirectory = CurrentDir; + return STATUS_INVALID_PARAMETER; } + DPRINT1("Before: ApplicationName = '%S' ; CommandLine = '%S'\n", ApplicationName, CommandLine); + + /* Trim leading whitespace from ApplicationName */ + while (*ApplicationName == L' ' || *ApplicationName == L'\t') + ++ApplicationName; + /* Calculate the size of the short application name */ Length = GetShortPathNameW(ApplicationName, NULL, 0); + if (Length == 0) + { + Status = STATUS_OBJECT_PATH_INVALID; + goto Cleanup; + } /* Allocate memory for the short application name */ ShortAppName = (PWCHAR)RtlAllocateHeap(RtlGetProcessHeap(), @@ -125,7 +124,7 @@ BaseCheckVDM(IN ULONG BinaryType, } /* Get the short application name */ - if (!GetShortPathNameW(ApplicationName, ShortAppName, Length)) + if (GetShortPathNameW(ApplicationName, ShortAppName, Length) == 0) { /* Try to determine which error occurred */ switch (GetLastError()) @@ -151,6 +150,83 @@ BaseCheckVDM(IN ULONG BinaryType, goto Cleanup; } + /* Trim leading whitespace from CommandLine */ + while (*CommandLine == L' ' || *CommandLine == L'\t') + ++CommandLine; + + /* + * CommandLine is usually formatted as: 'ApplicationName param0 ...'. + * So we want to strip the first token (ApplicationName) from it. + * Two cases are in fact possible: + * - either the first token is indeed ApplicationName, so we just skip it; + * - or the first token is not exactly ApplicationName, because it happened + * that somebody else already preprocessed CommandLine. Therefore we + * suppose that the first token corresponds to an application name and + * we skip it. Care should be taken when quotes are present in this token. + */ + + if (*CommandLine) + { + /* The first part of CommandLine should be the ApplicationName... */ + Length = wcslen(ApplicationName); + if (Length <= wcslen(CommandLine) && + _wcsnicmp(ApplicationName, CommandLine, Length) == 0) + { + /* Skip it */ + CommandLine += Length; + } + /* + * ... but it is not, however we still have a token. We suppose that + * it corresponds to some sort of application name, so we skip it too. + */ + else + { + /* Get rid of the first token. We stop when we see whitespace. */ + while (*CommandLine && !(*CommandLine == L' ' || *CommandLine == L'\t')) + { + if (*CommandLine == L'\"') + { + /* We enter a quoted part, skip it */ + ++CommandLine; + while (*CommandLine && *CommandLine++ != L'\"') ; + } + else + { + /* Go to the next character */ + ++CommandLine; + } + } + } + } + + /* + * Trim remaining whitespace from CommandLine that may be + * present between the application name and the parameters. + */ + while (*CommandLine == L' ' || *CommandLine == L'\t') + ++CommandLine; + + DPRINT1("After: ApplicationName = '%S' ; CommandLine = '%S'\n", ApplicationName, CommandLine); + + /* Get the current directory */ + if (CurrentDirectory == NULL) + { + /* Allocate memory for the current directory path */ + Length = GetCurrentDirectoryW(0, NULL); + CurrentDir = (PWCHAR)RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + Length * sizeof(WCHAR)); + if (CurrentDir == NULL) + { + Status = STATUS_NO_MEMORY; + goto Cleanup; + } + + /* Get the current directory */ + GetCurrentDirectoryW(Length, CurrentDir); + CurrentDirectory = CurrentDir; + } + /* Calculate the size of the short current directory path */ Length = GetShortPathNameW(CurrentDirectory, NULL, 0); @@ -214,7 +290,9 @@ BaseCheckVDM(IN ULONG BinaryType, } /* Allocate memory for the ANSI strings */ - AnsiCmdLine = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->CmdLen); + + /* For the command line we need to add two characters needed for newline '\r\n' */ + AnsiCmdLine = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->CmdLen + 2); AnsiAppName = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->AppLen); AnsiCurDirectory = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->CurDirectoryLen); if (StartupInfo->lpDesktop) AnsiDesktop = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), @@ -247,6 +325,11 @@ BaseCheckVDM(IN ULONG BinaryType, CheckVdm->CmdLen, NULL, NULL); + /* Add a needed newline '\r\n' */ + CheckVdm->CmdLen--; // FIXME.... + AnsiCmdLine[CheckVdm->CmdLen ] = '\r'; + AnsiCmdLine[CheckVdm->CmdLen + 1] = '\n'; + CheckVdm->CmdLen += 2; /* Convert the short application name into an ANSI string */ WideCharToMultiByte(CP_ACP, @@ -417,13 +500,13 @@ Cleanup: /* Free the capture buffer */ CsrFreeCaptureBuffer(CaptureBuffer); - /* Free the short paths */ - if (ShortAppName) RtlFreeHeap(RtlGetProcessHeap(), 0, ShortAppName); + /* Free the current directory, if it was allocated here, and its short path */ if (ShortCurrentDir) RtlFreeHeap(RtlGetProcessHeap(), 0, ShortCurrentDir); - - /* Free the current directory, if it was allocated here */ if (CurrentDir) RtlFreeHeap(RtlGetProcessHeap(), 0, CurrentDir); + /* Free the short app name */ + if (ShortAppName) RtlFreeHeap(RtlGetProcessHeap(), 0, ShortAppName); + return Status; } From ab209b91b5b68b9535dca5e6948831adcd64e4b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Sun, 18 May 2014 23:12:24 +0000 Subject: [PATCH 67/81] [KERNEL32] Improve a dprint (needed when studying spaces in command lines). svn path=/trunk/; revision=63362 --- reactos/dll/win32/kernel32/client/proc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/kernel32/client/proc.c b/reactos/dll/win32/kernel32/client/proc.c index 84bcd6d2509..47bb1404509 100644 --- a/reactos/dll/win32/kernel32/client/proc.c +++ b/reactos/dll/win32/kernel32/client/proc.c @@ -2468,7 +2468,7 @@ CreateProcessInternalW(IN HANDLE hUserToken, PolicyPathPair.Nt = &SxsNtPolicyPath.String; #endif - DPRINT("CreateProcessInternalW: %S %S %lx\n", lpApplicationName, lpCommandLine, dwCreationFlags); + DPRINT("CreateProcessInternalW: '%S' '%S' %lx\n", lpApplicationName, lpCommandLine, dwCreationFlags); /* Finally, set our TEB and PEB */ Teb = NtCurrentTeb(); From 33840923385dcf909548678c0fffa34869263fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Sun, 18 May 2014 23:13:12 +0000 Subject: [PATCH 68/81] [KERNEL32]: Fix the newline adding (see r63361). svn path=/trunk/; revision=63363 --- reactos/dll/win32/kernel32/client/vdm.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/kernel32/client/vdm.c b/reactos/dll/win32/kernel32/client/vdm.c index ca683838b76..cb2ac243469 100644 --- a/reactos/dll/win32/kernel32/client/vdm.c +++ b/reactos/dll/win32/kernel32/client/vdm.c @@ -284,14 +284,13 @@ BaseCheckVDM(IN ULONG BinaryType, if (StartupInfo->dwFlags & STARTF_USESTDHANDLES) { /* Set the standard handles */ - CheckVdm->StdIn = StartupInfo->hStdInput; + CheckVdm->StdIn = StartupInfo->hStdInput; CheckVdm->StdOut = StartupInfo->hStdOutput; CheckVdm->StdErr = StartupInfo->hStdError; } /* Allocate memory for the ANSI strings */ - - /* For the command line we need to add two characters needed for newline '\r\n' */ + // We need to add the two newline characters '\r\n' to the command line AnsiCmdLine = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->CmdLen + 2); AnsiAppName = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->AppLen); AnsiCurDirectory = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->CurDirectoryLen); @@ -325,11 +324,11 @@ BaseCheckVDM(IN ULONG BinaryType, CheckVdm->CmdLen, NULL, NULL); - /* Add a needed newline '\r\n' */ - CheckVdm->CmdLen--; // FIXME.... - AnsiCmdLine[CheckVdm->CmdLen ] = '\r'; - AnsiCmdLine[CheckVdm->CmdLen + 1] = '\n'; - CheckVdm->CmdLen += 2; + /* Add a needed newline '\r\n' and NULL-terminate */ + CheckVdm->CmdLen--; // Rewind back to the NULL character + AnsiCmdLine[CheckVdm->CmdLen++] = '\r'; + AnsiCmdLine[CheckVdm->CmdLen++] = '\n'; + AnsiCmdLine[CheckVdm->CmdLen++] = 0; /* Convert the short application name into an ANSI string */ WideCharToMultiByte(CP_ACP, From 3e159aa702fb9acdd81538738ba2bde5c7599e0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Sun, 18 May 2014 23:17:25 +0000 Subject: [PATCH 69/81] [KERNEL32]: Remove temporary DPRINTs and fix comments. svn path=/trunk/; revision=63364 --- reactos/dll/win32/kernel32/client/vdm.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/kernel32/client/vdm.c b/reactos/dll/win32/kernel32/client/vdm.c index cb2ac243469..8b50319491f 100644 --- a/reactos/dll/win32/kernel32/client/vdm.c +++ b/reactos/dll/win32/kernel32/client/vdm.c @@ -99,8 +99,6 @@ BaseCheckVDM(IN ULONG BinaryType, return STATUS_INVALID_PARAMETER; } - DPRINT1("Before: ApplicationName = '%S' ; CommandLine = '%S'\n", ApplicationName, CommandLine); - /* Trim leading whitespace from ApplicationName */ while (*ApplicationName == L' ' || *ApplicationName == L'\t') ++ApplicationName; @@ -164,7 +162,6 @@ BaseCheckVDM(IN ULONG BinaryType, * suppose that the first token corresponds to an application name and * we skip it. Care should be taken when quotes are present in this token. */ - if (*CommandLine) { /* The first part of CommandLine should be the ApplicationName... */ @@ -206,8 +203,6 @@ BaseCheckVDM(IN ULONG BinaryType, while (*CommandLine == L' ' || *CommandLine == L'\t') ++CommandLine; - DPRINT1("After: ApplicationName = '%S' ; CommandLine = '%S'\n", ApplicationName, CommandLine); - /* Get the current directory */ if (CurrentDirectory == NULL) { @@ -290,7 +285,7 @@ BaseCheckVDM(IN ULONG BinaryType, } /* Allocate memory for the ANSI strings */ - // We need to add the two newline characters '\r\n' to the command line + // We need to add the newline characters '\r\n' to the command line AnsiCmdLine = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->CmdLen + 2); AnsiAppName = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->AppLen); AnsiCurDirectory = (PCHAR)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, CheckVdm->CurDirectoryLen); @@ -324,7 +319,7 @@ BaseCheckVDM(IN ULONG BinaryType, CheckVdm->CmdLen, NULL, NULL); - /* Add a needed newline '\r\n' and NULL-terminate */ + /* Add the needed newline and NULL-terminate */ CheckVdm->CmdLen--; // Rewind back to the NULL character AnsiCmdLine[CheckVdm->CmdLen++] = '\r'; AnsiCmdLine[CheckVdm->CmdLen++] = '\n'; From 65a58c440e177edec2777025d9d45c3229897f57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Sun, 18 May 2014 23:45:43 +0000 Subject: [PATCH 70/81] [NTVDM] Correctly NULL-terminate the command-lines when needed (and avoid buffer overruns). svn path=/trunk/; revision=63365 --- reactos/subsystems/ntvdm/dos/dem.c | 4 ++-- reactos/subsystems/ntvdm/dos/dos32krnl/dos.c | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/ntvdm/dos/dem.c b/reactos/subsystems/ntvdm/dos/dem.c index f0b251d2e03..a0b1a5baac6 100644 --- a/reactos/subsystems/ntvdm/dos/dem.c +++ b/reactos/subsystems/ntvdm/dos/dem.c @@ -119,8 +119,8 @@ static VOID WINAPI DosCmdInterpreterBop(LPWORD Stack) STARTUPINFOA StartupInfo; PROCESS_INFORMATION ProcessInformation; - /* NULL-terminate the command by removing the return carriage character */ - while (*CmdPtr != '\r') CmdPtr++; + /* NULL-terminate the command line by removing the return carriage character */ + while (*CmdPtr && *CmdPtr != '\r') CmdPtr++; *CmdPtr = '\0'; DPRINT1("CMD Run Command '%s'\n", Command); diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c index 6925c268ce8..353fa6d3c22 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c @@ -926,6 +926,10 @@ DWORD DosLoadExecutable(IN DOS_EXEC_TYPE LoadType, return ERROR_NOT_SUPPORTED; } + /* NULL-terminate the command line by removing the return carriage character */ + while (*CommandLine && *CommandLine != '\r') CommandLine++; + *(LPSTR)CommandLine = '\0'; + /* Open a handle to the executable */ FileHandle = CreateFileA(ExecutablePath, GENERIC_READ, From de36490031fc50d59ea0c93c10305ad0aa07c850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Mon, 19 May 2014 01:12:25 +0000 Subject: [PATCH 71/81] [NTVDM] Since the BIOS registers the whole range of possible interrupts, we register their stubs in an array-form so that the BIOS always registers INT n at the same place. We save 561 bytes of memory. svn path=/trunk/; revision=63366 --- reactos/subsystems/ntvdm/bios/bios32/bios32.c | 8 ++------ reactos/subsystems/ntvdm/bios/bios32/bios32p.h | 9 +++++---- reactos/subsystems/ntvdm/bop.c | 2 +- reactos/subsystems/ntvdm/callback.c | 10 ++++++---- reactos/subsystems/ntvdm/callback.h | 6 ++---- 5 files changed, 16 insertions(+), 19 deletions(-) diff --git a/reactos/subsystems/ntvdm/bios/bios32/bios32.c b/reactos/subsystems/ntvdm/bios/bios32/bios32.c index fc272826242..045e58c82bb 100644 --- a/reactos/subsystems/ntvdm/bios/bios32/bios32.c +++ b/reactos/subsystems/ntvdm/bios/bios32/bios32.c @@ -301,18 +301,14 @@ static VOID BiosHwSetup(VOID) static VOID InitializeBiosInt32(VOID) { USHORT i; - // USHORT Offset = 0; /* Initialize the callback context */ InitializeContext(&BiosContext, BIOS_SEGMENT, 0x0000); - /* Register the BIOS 32-bit Interrupts */ + /* Register the default BIOS 32-bit Interrupts */ for (i = 0x00; i <= 0xFF; i++) { - // Offset += RegisterInt32(MAKELONG(Offset, BIOS_SEGMENT), i, NULL, NULL); - BiosContext.NextOffset += RegisterInt32(MAKELONG(BiosContext.NextOffset, - BiosContext.Segment), - i, NULL, NULL); + RegisterBiosInt32(i, NULL); } /* Initialize the exception vector interrupts to a default Exception handler */ diff --git a/reactos/subsystems/ntvdm/bios/bios32/bios32p.h b/reactos/subsystems/ntvdm/bios/bios32/bios32p.h index 604fda30cc7..d74e04e7d4d 100644 --- a/reactos/subsystems/ntvdm/bios/bios32/bios32p.h +++ b/reactos/subsystems/ntvdm/bios/bios32/bios32p.h @@ -30,11 +30,12 @@ /* FUNCTIONS ******************************************************************/ extern CALLBACK16 BiosContext; -#define RegisterBiosInt32(IntNumber, IntHandler) \ +#define RegisterBiosInt32(IntNumber, IntHandler) \ do { \ - BiosContext.NextOffset += RegisterInt32(MAKELONG(BiosContext.NextOffset, \ - BiosContext.Segment), \ - (IntNumber), (IntHandler), NULL); \ + RegisterInt32(BiosContext.TrampolineFarPtr + \ + BiosContext.TrampolineSize + \ + (IntNumber) * Int16To32StubSize, \ + (IntNumber), (IntHandler), NULL); \ } while(0); VOID EnableHwIRQ(UCHAR hwirq, EMULATOR_INT32_PROC func); diff --git a/reactos/subsystems/ntvdm/bop.c b/reactos/subsystems/ntvdm/bop.c index 407004290b7..88a41dde9ef 100644 --- a/reactos/subsystems/ntvdm/bop.c +++ b/reactos/subsystems/ntvdm/bop.c @@ -19,7 +19,7 @@ /* * This is the list of registered BOP handlers. */ -EMULATOR_BOP_PROC BopProc[EMULATOR_MAX_BOP_NUM] = { NULL }; +static EMULATOR_BOP_PROC BopProc[EMULATOR_MAX_BOP_NUM] = { NULL }; /* PUBLIC FUNCTIONS ***********************************************************/ diff --git a/reactos/subsystems/ntvdm/callback.c b/reactos/subsystems/ntvdm/callback.c index 7566a9437a7..d1ecaf3f436 100644 --- a/reactos/subsystems/ntvdm/callback.c +++ b/reactos/subsystems/ntvdm/callback.c @@ -22,7 +22,7 @@ /* * This is the list of registered 32-bit Interrupt handlers. */ -EMULATOR_INT32_PROC Int32Proc[EMULATOR_MAX_INT32_NUM] = { NULL }; +static EMULATOR_INT32_PROC Int32Proc[EMULATOR_MAX_INT32_NUM] = { NULL }; /* BOP Identifiers */ #define BOP_CONTROL 0xFF // Control BOP Handler @@ -50,7 +50,7 @@ do { \ // /* 16-bit generic interrupt code for calling a 32-bit interrupt handler */ -BYTE Int16To32[] = +static BYTE Int16To32[] = { 0xFA, // cli @@ -76,6 +76,7 @@ BYTE Int16To32[] = 0x44, 0x44, // inc sp, inc sp 0xCF, // iret }; +const ULONG Int16To32StubSize = sizeof(Int16To32); /* PUBLIC FUNCTIONS ***********************************************************/ @@ -85,9 +86,10 @@ InitializeContext(IN PCALLBACK16 Context, IN USHORT Offset) { Context->TrampolineFarPtr = MAKELONG(Offset, Segment); + Context->TrampolineSize = max(CALL16_TRAMPOLINE_SIZE, + INT16_TRAMPOLINE_SIZE); Context->Segment = Segment; - Context->NextOffset = Offset + max(CALL16_TRAMPOLINE_SIZE, - INT16_TRAMPOLINE_SIZE); + Context->NextOffset = Offset + Context->TrampolineSize; } VOID diff --git a/reactos/subsystems/ntvdm/callback.h b/reactos/subsystems/ntvdm/callback.h index c29ef9cb687..264e67fe6d0 100644 --- a/reactos/subsystems/ntvdm/callback.h +++ b/reactos/subsystems/ntvdm/callback.h @@ -15,17 +15,15 @@ /* 32-bit Interrupt Identifiers */ #define EMULATOR_MAX_INT32_NUM 0xFF + 1 -#define INT_HANDLER_OFFSET 0x1000 -#define COMMON_STUB_OFFSET 0x2000 - - typedef struct _CALLBACK16 { ULONG TrampolineFarPtr; // Where the trampoline zone is placed + ULONG TrampolineSize; // Size of the trampoline zone USHORT Segment; USHORT NextOffset; } CALLBACK16, *PCALLBACK16; +extern const ULONG Int16To32StubSize; /* FUNCTIONS ******************************************************************/ From 02bef19b583fbdc09d284e1a8bc853ff5f91f647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Mon, 19 May 2014 02:21:49 +0000 Subject: [PATCH 72/81] [NTVDM] - Initialize the BIOS Configuration Table, see http://www.ctyme.com/intr/rb-1594.htm for more information. - Implement INT 15h, AH=C0h "GET CONFIGURATION". svn path=/trunk/; revision=63367 --- reactos/subsystems/ntvdm/bios/bios.c | 7 +- reactos/subsystems/ntvdm/bios/bios.h | 24 ++++++- reactos/subsystems/ntvdm/bios/bios32/bios32.c | 69 ++++++++++++++----- 3 files changed, 78 insertions(+), 22 deletions(-) diff --git a/reactos/subsystems/ntvdm/bios/bios.c b/reactos/subsystems/ntvdm/bios/bios.c index 12066b53dd3..accd3f1cc5e 100644 --- a/reactos/subsystems/ntvdm/bios/bios.c +++ b/reactos/subsystems/ntvdm/bios/bios.c @@ -37,6 +37,7 @@ static BOOLEAN Bios32Loaded = FALSE; static CALLBACK16 __BiosContext; PBIOS_DATA_AREA Bda; +PBIOS_CONFIG_TABLE Bct; /* PRIVATE FUNCTIONS **********************************************************/ @@ -134,8 +135,10 @@ BiosInitialize(IN LPCSTR BiosFileName) /* Disable interrupts */ setIF(0); - /* Initialize the BDA pointer */ - Bda = (PBIOS_DATA_AREA)SEG_OFF_TO_PTR(BDA_SEGMENT, 0); + /* Initialize the BDA and the BCT pointers */ + Bda = (PBIOS_DATA_AREA)SEG_OFF_TO_PTR(BDA_SEGMENT, 0x0000); + // The BCT is found at F000:E6F5 for 100% compatible BIOSes. + Bct = (PBIOS_CONFIG_TABLE)SEG_OFF_TO_PTR(BIOS_SEGMENT, 0xE6F5); /* Register the BIOS support BOPs */ RegisterBop(BOP_BIOSINIT , BiosInitBop); diff --git a/reactos/subsystems/ntvdm/bios/bios.h b/reactos/subsystems/ntvdm/bios/bios.h index cc1bb94b803..9b47f163a0d 100644 --- a/reactos/subsystems/ntvdm/bios/bios.h +++ b/reactos/subsystems/ntvdm/bios/bios.h @@ -22,6 +22,8 @@ #define BIOS_EQUIPMENT_LIST 0x2C // HACK: Disable FPU for now +#pragma pack(push, 1) + /* * BIOS Data Area at 0040:XXXX * @@ -29,7 +31,6 @@ * and: http://www.bioscentral.com/misc/bda.htm * for more information. */ -#pragma pack(push, 1) typedef struct { WORD SerialPorts[4]; // 0x00 @@ -96,13 +97,30 @@ typedef struct BYTE Reserved17[15]; // 0x121 BYTE Reserved18[3]; // 0x130 } BIOS_DATA_AREA, *PBIOS_DATA_AREA; -#pragma pack(pop) - C_ASSERT(sizeof(BIOS_DATA_AREA) == 0x133); +/* + * BIOS Configuration Table at F000:E6F5 for 100% compatible BIOSes. + * + * See: http://www.ctyme.com/intr/rb-1594.htm + * for more information. + */ +typedef struct _BIOS_CONFIG_TABLE +{ + WORD Length; // 0x00 + BYTE Model; // 0x02 + BYTE SubModel; // 0x03 + BYTE BiosRevision; // 0x04 + BYTE BiosFeature[5]; // 0x05 -- 0x09 + // Other BIOSes may extend this table. We don't. +} BIOS_CONFIG_TABLE, *PBIOS_CONFIG_TABLE; + +#pragma pack(pop) + /* FUNCTIONS ******************************************************************/ extern PBIOS_DATA_AREA Bda; +extern PBIOS_CONFIG_TABLE Bct; VOID WINAPI BiosEquipmentService(LPWORD Stack); VOID WINAPI BiosGetMemorySize(LPWORD Stack); diff --git a/reactos/subsystems/ntvdm/bios/bios32/bios32.c b/reactos/subsystems/ntvdm/bios/bios32/bios32.c index 045e58c82bb..6a4aaba2801 100644 --- a/reactos/subsystems/ntvdm/bios/bios32/bios32.c +++ b/reactos/subsystems/ntvdm/bios/bios32/bios32.c @@ -112,6 +112,20 @@ static VOID WINAPI BiosMiscService(LPWORD Stack) break; } + /* Get Configuration */ + case 0xC0: + { + /* Return the BIOS ROM Configuration Table address in ES:BX */ + setES(HIWORD(Bct)); + setBX(LOWORD(Bct)); + + /* Call successful; clear CF */ + setAH(0x00); + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + + break; + } + default: { DPRINT1("BIOS Function INT 15h, AH = 0x%02X NOT IMPLEMENTED\n", @@ -336,26 +350,23 @@ static VOID InitializeBiosInt32(VOID) ((PULONG)BaseAddress)[0x49] = (ULONG)NULL; } -/* PUBLIC FUNCTIONS ***********************************************************/ - -/* - * The BIOS POST (Power On-Self Test) - */ -BOOLEAN Bios32Initialize(VOID) +static VOID InitializeBiosInfo(VOID) +{ + Bct->Length = sizeof(*Bct); + Bct->Model = 0xFC; // PC-AT; see http://www.ctyme.com/intr/rb-1594.htm#Table515 + Bct->SubModel = 0x00; + Bct->BiosRevision = 0x01; + Bct->BiosFeature[0] = 0x64; // At the moment we don't support "INT 15/AH=4Fh called upon INT 09h" nor "wait for external event (INT 15/AH=41h) supported"; see http://www.ctyme.com/intr/rb-1594.htm#Table510 + Bct->BiosFeature[1] = 0x00; // We don't support anything from here; see http://www.ctyme.com/intr/rb-1594.htm#Table511 + Bct->BiosFeature[2] = 0x00; + Bct->BiosFeature[3] = 0x00; + Bct->BiosFeature[4] = 0x00; +} + +static VOID InitializeBiosData(VOID) { - BOOLEAN Success; UCHAR Low, High; - /* Initialize the stack */ - // That's what says IBM... (stack at 30:00FF going downwards) - // setSS(0x0000); - // setSP(0x0400); - setSS(0x0050); // Stack at 50:0400, going downwards - setSP(0x0400); - - /* Set data segment */ - setDS(BDA_SEGMENT); - /* Initialize the BDA contents */ Bda->EquipmentList = BIOS_EQUIPMENT_LIST; @@ -368,6 +379,30 @@ BOOLEAN Bios32Initialize(VOID) IOWriteB(CMOS_ADDRESS_PORT, CMOS_REG_BASE_MEMORY_HIGH); High = IOReadB(CMOS_DATA_PORT); Bda->MemorySize = MAKEWORD(Low, High); +} + +/* PUBLIC FUNCTIONS ***********************************************************/ + +/* + * The BIOS POST (Power On-Self Test) + */ +BOOLEAN Bios32Initialize(VOID) +{ + BOOLEAN Success; + + /* Initialize the stack */ + // That's what says IBM... (stack at 30:00FF going downwards) + // setSS(0x0000); + // setSP(0x0400); + setSS(0x0050); // Stack at 50:0400, going downwards + setSP(0x0400); + + /* Set data segment */ + setDS(BDA_SEGMENT); + + /* Initialize the BDA and the BIOS ROM Information */ + InitializeBiosData(); + InitializeBiosInfo(); /* Register the BIOS 32-bit Interrupts */ InitializeBiosInt32(); From ebb1a6ec867c334e99f5059e56dfb95d75dab12a Mon Sep 17 00:00:00 2001 From: Kamil Hornicek <kamil.hornicek@reactos.org> Date: Mon, 19 May 2014 09:58:26 +0000 Subject: [PATCH 73/81] [WINED3DCFG] - rewrite the wined3d config cpl to make it work with the current version of wined3d - add a "default" option so it's easier to revert changes done to the configuration - I apologize for the "lost" translations but there were too many changes svn path=/trunk/; revision=63368 --- reactos/dll/cpl/wined3dcfg/general.c | 223 ++++++++++++----------- reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc | 33 ++-- reactos/dll/cpl/wined3dcfg/lang/de-DE.rc | 35 ++-- reactos/dll/cpl/wined3dcfg/lang/en-US.rc | 33 ++-- reactos/dll/cpl/wined3dcfg/lang/he-IL.rc | 33 ++-- reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc | 35 ++-- reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc | 35 ++-- reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc | 35 ++-- reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc | 35 ++-- reactos/dll/cpl/wined3dcfg/resource.h | 19 +- reactos/dll/cpl/wined3dcfg/wined3dcfg.h | 30 +-- 11 files changed, 325 insertions(+), 221 deletions(-) diff --git a/reactos/dll/cpl/wined3dcfg/general.c b/reactos/dll/cpl/wined3dcfg/general.c index 104649487aa..4fef455222c 100644 --- a/reactos/dll/cpl/wined3dcfg/general.c +++ b/reactos/dll/cpl/wined3dcfg/general.c @@ -2,123 +2,142 @@ #include <winreg.h> -static LONG ReadSetting(HKEY hKey, PWCHAR szKey, PWCHAR szBuffer, DWORD dwSize) +WINED3D_SETTINGS gwd3dsShaderLvl[] = { - return RegQueryValueExW(hKey, szKey, NULL, NULL, (LPBYTE)szBuffer, &dwSize); -} + {VALUE_DEFAULT, REG_NONE, 0}, + {L"1.4", REG_DWORD, 1}, + {L"2", REG_DWORD, 2}, + {L"3", REG_DWORD, 3}, +}; -static VOID SaveSetting(HKEY hKey, PWCHAR szKey, PWCHAR szState) +WINED3D_SETTINGS gwd3dsDisable[] = { - RegSetValueExW(hKey, szKey, 0, REG_SZ, (LPBYTE)szState, (wcslen(szState) + 1) * sizeof(WCHAR)); + {VALUE_DEFAULT, REG_NONE, 0}, + {VALUE_DISABLED, REG_SZ, 0} +}; + +WINED3D_SETTINGS gwd3dsEnable[] = +{ + {VALUE_DEFAULT, REG_NONE, 0}, + {VALUE_ENABLED, REG_SZ, 0} +}; + +WINED3D_SETTINGS gwd3dsOffscreen[] = +{ + {VALUE_DEFAULT, REG_NONE, 0}, + {VALUE_BACKBUFFER, REG_SZ, 0}, + {VALUE_FBO, REG_SZ, 0} +}; + +WINED3D_SETTINGS gwd3dsVidMem[] = +{ + {VALUE_DEFAULT, REG_NONE, 0}, + {L"8", REG_SZ, 8}, + {L"16", REG_SZ, 16}, + {L"32", REG_SZ, 32}, + {L"64", REG_SZ, 64}, + {L"128", REG_SZ, 128}, + {L"256", REG_SZ, 256}, + {L"512", REG_SZ, 512}, +}; + +WINED3D_SETTINGS gwd3dsDdRender[] = +{ + {VALUE_DEFAULT, REG_NONE, 0}, + {VALUE_GDI, REG_SZ, 0} +}; + + +void InitControl(HWND hWndDlg, HKEY hKey, PWCHAR szKey, PWINED3D_SETTINGS pSettings, INT iControlId, INT iCount) +{ + WCHAR szBuffer[MAX_KEY_LENGTH]; + DWORD dwSize = MAX_KEY_LENGTH; + DWORD dwType = 0; + INT iCurrent; + INT iActive = 0; + + RegQueryValueExW(hKey, szKey, NULL, &dwType, (LPBYTE)szBuffer, &dwSize); + + for(iCurrent = 0; iCurrent < iCount; iCurrent++) + { + SendDlgItemMessageW(hWndDlg, iControlId, CB_ADDSTRING, 0, (LPARAM)pSettings[iCurrent].szValue); + + if(dwSize && ((dwType == REG_DWORD && *szBuffer == pSettings[iCurrent].iValue) || + (dwType == REG_SZ && !wcscmp(szBuffer, pSettings[iCurrent].szValue)))) + { + iActive = iCurrent; + } + } + + SendDlgItemMessageW(hWndDlg, iControlId, CB_SETCURSEL, iActive, 0); + } static VOID InitSettings(HWND hWndDlg) { HKEY hKey; - WCHAR szBuffer[MAX_KEY_LENGTH]; - DWORD dwSize = MAX_KEY_LENGTH; - if (RegOpenKeyExW(HKEY_CURRENT_USER, - KEY_WINE, - 0, - KEY_READ, - &hKey) != ERROR_SUCCESS) - { + if (RegCreateKeyExW(HKEY_CURRENT_USER, KEY_WINE, 0, NULL, 0, MAXIMUM_ALLOWED, NULL, &hKey, NULL) != ERROR_SUCCESS) return; - } - if(ReadSetting(hKey, KEY_GLSL, szBuffer, dwSize) == ERROR_SUCCESS) - CheckDlgButton(hWndDlg, IDC_GLSL, (wcscmp(VALUE_DISABLED, szBuffer) != 0) ? BST_CHECKED : BST_UNCHECKED); - - if(ReadSetting(hKey, KEY_MULTISAMPLING, szBuffer, dwSize) == ERROR_SUCCESS) - CheckDlgButton(hWndDlg, IDC_MULTISAMPLING, (wcscmp(VALUE_ENABLED, szBuffer) == 0) ? BST_CHECKED : BST_UNCHECKED); - - if(ReadSetting(hKey, KEY_PIXELSHADERS, szBuffer, dwSize) == ERROR_SUCCESS) - CheckDlgButton(hWndDlg, IDC_PIXELSHADERS, (wcscmp(VALUE_ENABLED, szBuffer) == 0) ? BST_CHECKED : BST_UNCHECKED); - - if(ReadSetting(hKey, KEY_STRICTDRAWORDERING, szBuffer, dwSize) == ERROR_SUCCESS) - CheckDlgButton(hWndDlg, IDC_STRICTDRAWORDERING, (wcscmp(VALUE_ENABLED, szBuffer) == 0) ? BST_CHECKED : BST_UNCHECKED); - - if(ReadSetting(hKey, KEY_VERTEXSHADERS, szBuffer, dwSize) == ERROR_SUCCESS) - CheckDlgButton(hWndDlg, IDC_VERTEXSHADERS, (wcscmp(VALUE_NONE, szBuffer) != 0) ? BST_CHECKED : BST_UNCHECKED); - - SendDlgItemMessageW(hWndDlg, IDC_OFFSCREEN, CB_ADDSTRING, 0, (LPARAM)VALUE_FBO); - SendDlgItemMessageW(hWndDlg, IDC_OFFSCREEN, CB_ADDSTRING, 0, (LPARAM)VALUE_BACKBUFFER); - - SendDlgItemMessageW(hWndDlg, IDC_OFFSCREEN, CB_SETITEMDATA, ITEM_FBO, (LPARAM)ITEM_FBO); - SendDlgItemMessageW(hWndDlg, IDC_OFFSCREEN, CB_SETITEMDATA, ITEM_BACKBUFFER, (LPARAM)ITEM_BACKBUFFER); - - if(ReadSetting(hKey, KEY_OFFSCREEN, szBuffer, dwSize) == ERROR_SUCCESS && !wcscmp(VALUE_BACKBUFFER, szBuffer)) - SendDlgItemMessageW(hWndDlg, IDC_OFFSCREEN, CB_SETCURSEL, 1, 0); - else - SendDlgItemMessageW(hWndDlg, IDC_OFFSCREEN, CB_SETCURSEL, 0, 0); - - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_ADDSTRING, 0, (LPARAM)VALUE_READTEX); - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_ADDSTRING, 0, (LPARAM)VALUE_READDRAW); - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_ADDSTRING, 0, (LPARAM)VALUE_DISABLED); - - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_SETITEMDATA, (WPARAM)ITEM_READTEX, (LPARAM)ITEM_READTEX); - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_SETITEMDATA, (WPARAM)ITEM_READDRAW, (LPARAM)ITEM_READDRAW); - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_SETITEMDATA, (WPARAM)ITEM_DISABLED, (LPARAM)ITEM_DISABLED); - - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_SETCURSEL, 0, 0); - - if(ReadSetting(hKey, KEY_LOCKING, szBuffer, dwSize) == ERROR_SUCCESS) - { - if(!wcscmp(VALUE_READDRAW, szBuffer)) - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_SETCURSEL, 1, 0); - else if(!wcscmp(VALUE_DISABLED, szBuffer)) - SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_SETCURSEL, 2, 0); - } + INIT_CONTROL(GLSL, gwd3dsDisable); + INIT_CONTROL(OFFSCREEN, gwd3dsOffscreen); + INIT_CONTROL(VIDMEMSIZE, gwd3dsVidMem); + INIT_CONTROL(MULTISAMPLING, gwd3dsDisable); + INIT_CONTROL(STRICTDRAWORDERING, gwd3dsEnable); + INIT_CONTROL(ALWAYSOFFSCREEN, gwd3dsEnable); + INIT_CONTROL(DDRENDERER, gwd3dsDdRender); + INIT_CONTROL(PSLEVEL, gwd3dsShaderLvl); + INIT_CONTROL(VSLEVEL, gwd3dsShaderLvl); + INIT_CONTROL(GSLEVEL, gwd3dsShaderLvl); RegCloseKey(hKey); } -static VOID WriteSettings(HWND hWndDlg) -{ - HKEY hKey; - INT iCurSel; - if (RegOpenKeyExW(HKEY_CURRENT_USER, - KEY_WINE, - 0, - KEY_WRITE, - &hKey) != ERROR_SUCCESS) +static VOID SaveSetting(HWND hWnd, HKEY hKey, PWCHAR szKey, PWINED3D_SETTINGS pCfg, INT iControlId, INT iCount) +{ + INT iSel = 0; + + iSel = (INT)SendDlgItemMessageW(hWnd, iControlId, CB_GETCURSEL, 0, 0); + + if(iSel < 0 || iSel > iCount) + return; + + if(pCfg[iSel].iType == REG_NONE) { + RegDeleteValueW(hKey, szKey); return; } - SaveSetting(hKey, KEY_GLSL, (IsDlgButtonChecked(hWndDlg, IDC_GLSL) == BST_CHECKED) ? VALUE_ENABLED : VALUE_DISABLED); - SaveSetting(hKey, KEY_MULTISAMPLING, (IsDlgButtonChecked(hWndDlg, IDC_MULTISAMPLING) == BST_CHECKED) ? VALUE_ENABLED : VALUE_DISABLED); - SaveSetting(hKey, KEY_PIXELSHADERS, (IsDlgButtonChecked(hWndDlg, IDC_PIXELSHADERS) == BST_CHECKED) ? VALUE_ENABLED : VALUE_DISABLED); - SaveSetting(hKey, KEY_STRICTDRAWORDERING, (IsDlgButtonChecked(hWndDlg, IDC_STRICTDRAWORDERING) == BST_CHECKED) ? VALUE_ENABLED : VALUE_DISABLED); - SaveSetting(hKey, KEY_VERTEXSHADERS, (IsDlgButtonChecked(hWndDlg, IDC_VERTEXSHADERS) == BST_CHECKED) ? VALUE_ENABLED : VALUE_NONE); - - iCurSel = (INT)SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_GETCURSEL, 0, 0); - - if(iCurSel != CB_ERR) + if(pCfg[iSel].iType == REG_DWORD) { - iCurSel = (INT)SendDlgItemMessageW(hWndDlg, IDC_LOCKING, CB_GETITEMDATA, (WPARAM)iCurSel, 0); - - if(iCurSel == ITEM_READDRAW) - SaveSetting(hKey, KEY_LOCKING, VALUE_READDRAW); - else if(iCurSel == ITEM_DISABLED) - SaveSetting(hKey, KEY_LOCKING, VALUE_DISABLED); - else - SaveSetting(hKey, KEY_LOCKING, VALUE_READTEX); - } - - iCurSel = (INT)SendDlgItemMessageW(hWndDlg, IDC_OFFSCREEN, CB_GETCURSEL, 0, 0); - - if(iCurSel != CB_ERR) + RegSetValueExW(hKey, szKey, 0, REG_DWORD, (LPBYTE)&pCfg[iSel].iValue, sizeof(pCfg[iSel].iValue)); + return; + } else if (pCfg[iSel].iType == REG_SZ) { - iCurSel = (INT)SendDlgItemMessageW(hWndDlg, IDC_OFFSCREEN, CB_GETITEMDATA, (WPARAM)iCurSel, 0); - - if(iCurSel == ITEM_BACKBUFFER) - SaveSetting(hKey, KEY_OFFSCREEN, VALUE_BACKBUFFER); - else - SaveSetting(hKey, KEY_OFFSCREEN, VALUE_FBO); + RegSetValueExW(hKey, szKey, 0, pCfg[iSel].iType, (LPBYTE)pCfg[iSel].szValue, (wcslen(pCfg[iSel].szValue) + 1) * sizeof(WCHAR)); } +} + + +static VOID WriteSettings(HWND hWndDlg) +{ + HKEY hKey; + + if (RegOpenKeyExW(HKEY_CURRENT_USER, KEY_WINE, 0, KEY_WRITE, &hKey) != ERROR_SUCCESS) + return; + + SAVE_CONTROL(GLSL, gwd3dsDisable); + SAVE_CONTROL(OFFSCREEN, gwd3dsOffscreen); + SAVE_CONTROL(VIDMEMSIZE, gwd3dsVidMem); + SAVE_CONTROL(MULTISAMPLING, gwd3dsDisable); + SAVE_CONTROL(STRICTDRAWORDERING, gwd3dsEnable); + SAVE_CONTROL(ALWAYSOFFSCREEN, gwd3dsEnable); + SAVE_CONTROL(DDRENDERER, gwd3dsDdRender); + SAVE_CONTROL(PSLEVEL, gwd3dsShaderLvl); + SAVE_CONTROL(VSLEVEL, gwd3dsShaderLvl); + SAVE_CONTROL(GSLEVEL, gwd3dsShaderLvl); RegCloseKey(hKey); } @@ -135,20 +154,8 @@ INT_PTR CALLBACK GeneralPageProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM return TRUE; case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDC_GLSL: - case IDC_LOCKING: - case IDC_MULTISAMPLING: - case IDC_OFFSCREEN: - case IDC_PIXELSHADERS: - case IDC_STRICTDRAWORDERING: - case IDC_VERTEXSHADERS: - PropSheet_Changed(GetParent(hWndDlg), hWndDlg); - break; - default: - break; - } + if (LOWORD(wParam) > IDC_MIN && LOWORD(wParam) < IDC_MAX) + PropSheet_Changed(GetParent(hWndDlg), hWndDlg); break; case WM_NOTIFY: diff --git a/reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc b/reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc index 04f380bed57..5aeef2cac91 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc @@ -10,18 +10,29 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Obecné" FONT 8, "MS Shell Dlg" BEGIN - ICON IDI_CPLICON, IDI_CPLICON, 8, 5, 21, 20 - GROUPBOX "Shadery", -1, 5, 35, 230, 65 - AUTOCHECKBOX "Zapnout &GLSL", IDC_GLSL, 15, 50, 150, 10 - AUTOCHECKBOX "Zapnout &pixel shadery", IDC_PIXELSHADERS, 15, 65, 150, 10 - AUTOCHECKBOX "Zapnout &vertex shadery", IDC_VERTEXSHADERS, 15, 80, 150, 10 - GROUPBOX "Renderování", -1, 5, 110, 230, 85 - AUTOCHECKBOX "Vynutit &multisampling", IDC_MULTISAMPLING, 15, 125, 150, 10 - AUTOCHECKBOX "Vynutit &strict draw ordering", IDC_STRICTDRAWORDERING, 15, 140, 150, 10 + ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 + GROUPBOX "Shaders", -1, 5, 25, 230, 80 + LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Rendering", -1, 5, 110, 230, 110 + LTEXT "Multisampling:", -1, 15, 127, 80, 10 + COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 - COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Render target locking:", -1, 15, 175, 72, 10, SS_LEFT - COMBOBOX IDC_LOCKING, 95, 173, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT + COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE diff --git a/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc b/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc index 30f5741b35b..675f15ffb97 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc @@ -5,18 +5,29 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Allgemein" FONT 8, "MS Shell Dlg" BEGIN - ICON IDI_CPLICON, IDI_CPLICON, 8, 5, 21, 20 - GROUPBOX "Shader", -1, 5, 35, 230, 65 - AUTOCHECKBOX "&GLSL aktivieren", IDC_GLSL, 15, 50, 150, 10 - AUTOCHECKBOX "&Pixel Shader aktivieren", IDC_PIXELSHADERS, 15, 65, 150, 10 - AUTOCHECKBOX "&Vertex Shader aktivieren", IDC_VERTEXSHADERS, 15, 80, 150, 10 - GROUPBOX "Rendering", -1, 5, 110, 230, 85 - AUTOCHECKBOX "&Multisampling erzwingen", IDC_MULTISAMPLING, 15, 125, 150, 10 - AUTOCHECKBOX "&Strikte Zeichenreihenfolge erzwingen", IDC_STRICTDRAWORDERING, 15, 140, 150, 10 - LTEXT "Offscreen Rendering:", -1, 15, 157, 80, 10 - COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Render Ziel festlegen:", -1, 15, 175, 72, 10, SS_LEFT - COMBOBOX IDC_LOCKING, 95, 173, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 + GROUPBOX "Shaders", -1, 5, 25, 230, 80 + LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Rendering", -1, 5, 110, 230, 110 + LTEXT "Multisampling:", -1, 15, 127, 80, 10 + COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 + COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT + COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE diff --git a/reactos/dll/cpl/wined3dcfg/lang/en-US.rc b/reactos/dll/cpl/wined3dcfg/lang/en-US.rc index 905477f3a68..1575e4d55e4 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/en-US.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/en-US.rc @@ -5,18 +5,29 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" FONT 8, "MS Shell Dlg" BEGIN - ICON IDI_CPLICON, IDI_CPLICON, 8, 5, 21, 20 - GROUPBOX "Shaders", -1, 5, 35, 230, 65 - AUTOCHECKBOX "Enable &GLSL", IDC_GLSL, 15, 50, 150, 10 - AUTOCHECKBOX "Enable &pixel shaders", IDC_PIXELSHADERS, 15, 65, 150, 10 - AUTOCHECKBOX "Enable &Vertex shaders", IDC_VERTEXSHADERS, 15, 80, 150, 10 - GROUPBOX "Rendering", -1, 5, 110, 230, 85 - AUTOCHECKBOX "Force &multisampling", IDC_MULTISAMPLING, 15, 125, 150, 10 - AUTOCHECKBOX "Force &strict draw ordering", IDC_STRICTDRAWORDERING, 15, 140, 150, 10 + ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 + GROUPBOX "Shaders", -1, 5, 25, 230, 80 + LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Rendering", -1, 5, 110, 230, 110 + LTEXT "Multisampling:", -1, 15, 127, 80, 10 + COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 - COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Render target locking:", -1, 15, 175, 72, 10, SS_LEFT - COMBOBOX IDC_LOCKING, 95, 173, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT + COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE diff --git a/reactos/dll/cpl/wined3dcfg/lang/he-IL.rc b/reactos/dll/cpl/wined3dcfg/lang/he-IL.rc index 70e2964e047..ebf6a64194b 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/he-IL.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/he-IL.rc @@ -5,18 +5,29 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "כללי" FONT 8, "MS Shell Dlg" BEGIN - ICON IDI_CPLICON, IDI_CPLICON, 8, 5, 21, 20 - GROUPBOX "Shaders", -1, 5, 35, 230, 65 - AUTOCHECKBOX "Enable &GLSL", IDC_GLSL, 15, 50, 150, 10 - AUTOCHECKBOX "Enable &pixel shaders", IDC_PIXELSHADERS, 15, 65, 150, 10 - AUTOCHECKBOX "Enable &Vertex shaders", IDC_VERTEXSHADERS, 15, 80, 150, 10 - GROUPBOX "Rendering", -1, 5, 110, 230, 85 - AUTOCHECKBOX "Force &multisampling", IDC_MULTISAMPLING, 15, 125, 150, 10 - AUTOCHECKBOX "Force &strict draw ordering", IDC_STRICTDRAWORDERING, 15, 140, 150, 10 + ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 + GROUPBOX "Shaders", -1, 5, 25, 230, 80 + LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Rendering", -1, 5, 110, 230, 110 + LTEXT "Multisampling:", -1, 15, 127, 80, 10 + COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 - COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Render target locking:", -1, 15, 175, 72, 10, SS_LEFT - COMBOBOX IDC_LOCKING, 95, 173, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT + COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE diff --git a/reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc b/reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc index a6fde23d1d7..3a6a5f39b1d 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc @@ -11,18 +11,29 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Ogólne" FONT 8, "MS Shell Dlg" BEGIN - ICON IDI_CPLICON, IDI_CPLICON, 8, 5, 21, 20 - GROUPBOX "Cieniowanie", -1, 5, 35, 230, 65 - AUTOCHECKBOX "Włącz &GLSL", IDC_GLSL, 15, 50, 150, 10 - AUTOCHECKBOX "Włącz cieniowanie &pikseli", IDC_PIXELSHADERS, 15, 65, 150, 10 - AUTOCHECKBOX "Włącz cieniowanie &werteksów", IDC_VERTEXSHADERS, 15, 80, 150, 10 - GROUPBOX "Renderowanie", -1, 5, 110, 230, 85 - AUTOCHECKBOX "Wymuś &multipróbkowanie", IDC_MULTISAMPLING, 15, 125, 150, 10 - AUTOCHECKBOX "Wymuś &strict draw ordering", IDC_STRICTDRAWORDERING, 15, 140, 150, 10 - LTEXT "Renderowanie pozaekranowe:", -1, 15, 157, 80, 10 - COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Blokowanie renderowanego obiektu:", -1, 15, 175, 72, 10, SS_LEFT - COMBOBOX IDC_LOCKING, 95, 173, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 + GROUPBOX "Shaders", -1, 5, 25, 230, 80 + LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Rendering", -1, 5, 110, 230, 110 + LTEXT "Multisampling:", -1, 15, 127, 80, 10 + COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 + COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT + COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE diff --git a/reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc b/reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc index 6847099c311..f778b43fdd4 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc @@ -7,18 +7,29 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Generale" FONT 8, "MS Shell Dlg" BEGIN - ICON IDI_CPLICON, IDI_CPLICON, 8, 5, 21, 20 - GROUPBOX "Shader", -1, 5, 35, 230, 65 - AUTOCHECKBOX "Activează &GLSL", IDC_GLSL, 15, 50, 150, 10 - AUTOCHECKBOX "Activează &Pixel shader", IDC_PIXELSHADERS, 15, 65, 150, 10 - AUTOCHECKBOX "Activează &Vertex shader", IDC_VERTEXSHADERS, 15, 80, 150, 10 - GROUPBOX "Redare", -1, 5, 110, 230, 85 - AUTOCHECKBOX "Impune &multisampling", IDC_MULTISAMPLING, 15, 125, 150, 10 - AUTOCHECKBOX "Impune &ordine strictă de desenare", IDC_STRICTDRAWORDERING, 15, 140, 150, 10 - LTEXT "Redă extra-ecran (offscreen):", -1, 15, 157, 100, 10 - COMBOBOX IDC_OFFSCREEN, 120, 155, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Redă fixarea țintei:", -1, 15, 175, 100, 10, SS_LEFT - COMBOBOX IDC_LOCKING, 120, 173, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 + GROUPBOX "Shaders", -1, 5, 25, 230, 80 + LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Rendering", -1, 5, 110, 230, 110 + LTEXT "Multisampling:", -1, 15, 127, 80, 10 + COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 + COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT + COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE diff --git a/reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc b/reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc index e09398b9603..7a91a0a9810 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc @@ -9,18 +9,29 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Përgjithshëm" FONT 8, "MS Shell Dlg" BEGIN - ICON IDI_CPLICON, IDI_CPLICON, 8, 5, 21, 20 - GROUPBOX "Strehë", -1, 5, 35, 230, 65 - AUTOCHECKBOX "Mundëso &GLSL", IDC_GLSL, 15, 50, 150, 10 - AUTOCHECKBOX "Mundëso &pixel Strehë", IDC_PIXELSHADERS, 15, 65, 150, 10 - AUTOCHECKBOX "Mundëso &Vertex Strehë", IDC_VERTEXSHADERS, 15, 80, 150, 10 - GROUPBOX "Përpunim", -1, 5, 110, 230, 85 - AUTOCHECKBOX "Detyro shumëshembuj", IDC_MULTISAMPLING, 15, 125, 150, 10 - AUTOCHECKBOX "Detyro urdhër vizatim i rreptë", IDC_STRICTDRAWORDERING, 15, 140, 150, 10 - LTEXT "Strehë jashekrani:", -1, 15, 157, 80, 10 - COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Streho mbylljen objektivit:", -1, 15, 175, 72, 10, SS_LEFT - COMBOBOX IDC_LOCKING, 95, 173, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 + GROUPBOX "Shaders", -1, 5, 25, 230, 80 + LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Rendering", -1, 5, 110, 230, 110 + LTEXT "Multisampling:", -1, 15, 127, 80, 10 + COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 + COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT + COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE diff --git a/reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc b/reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc index 8f70b5579c0..b5c4b1c0857 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc @@ -7,18 +7,29 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Umûmî" FONT 8, "MS Shell Dlg" BEGIN - ICON IDI_CPLICON, IDI_CPLICON, 8, 5, 21, 20 - GROUPBOX "Shaderler", -1, 5, 35, 230, 65 - AUTOCHECKBOX "&GLSL'yi Etkinleştir", IDC_GLSL, 15, 50, 150, 10 - AUTOCHECKBOX "&Nokta Shaderleri Etkinleştir", IDC_PIXELSHADERS, 15, 65, 150, 10 - AUTOCHECKBOX "&Doruk Shaderleri Etkinleştir", IDC_VERTEXSHADERS, 15, 80, 150, 10 - GROUPBOX "Renderleme", -1, 5, 110, 230, 85 - AUTOCHECKBOX "&Örtüşme Önlemeyi Zorla", IDC_MULTISAMPLING, 15, 125, 150, 10 - AUTOCHECKBOX "&Strict Draw Orderleme'yi Zorla", IDC_STRICTDRAWORDERING, 15, 140, 150, 10 - LTEXT "&Ekran Dışı Renderleme:", -1, 15, 157, 80, 10 - COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "&Render Hedef Kilitlenmesi:", -1, 15, 175, 72, 10, SS_LEFT - COMBOBOX IDC_LOCKING, 95, 173, 90, 50, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 + GROUPBOX "Shaders", -1, 5, 25, 230, 80 + LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Rendering", -1, 5, 110, 230, 110 + LTEXT "Multisampling:", -1, 15, 127, 80, 10 + COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 + COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT + COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE diff --git a/reactos/dll/cpl/wined3dcfg/resource.h b/reactos/dll/cpl/wined3dcfg/resource.h index 60cda8343f8..317db4339e6 100644 --- a/reactos/dll/cpl/wined3dcfg/resource.h +++ b/reactos/dll/cpl/wined3dcfg/resource.h @@ -7,13 +7,18 @@ #define IDD_PROPPAGEGENERAL 100 /* Controls */ -#define IDC_PIXELSHADERS 1001 -#define IDC_GLSL 1002 -#define IDC_VERTEXSHADERS 1003 -#define IDC_MULTISAMPLING 1004 -#define IDC_STRICTDRAWORDERING 1005 -#define IDC_OFFSCREEN 1006 -#define IDC_LOCKING 1007 +#define IDC_MIN 1000 +#define IDC_GLSL 1001 +#define IDC_GSLEVEL 1002 +#define IDC_PSLEVEL 1003 +#define IDC_VSLEVEL 1004 +#define IDC_MULTISAMPLING 1005 +#define IDC_STRICTDRAWORDERING 1006 +#define IDC_OFFSCREEN 1007 +#define IDC_VIDMEMSIZE 1008 +#define IDC_ALWAYSOFFSCREEN 1009 +#define IDC_DDRENDERER 1010 +#define IDC_MAX 1011 /* Strings */ #define IDS_CPLNAME 10000 diff --git a/reactos/dll/cpl/wined3dcfg/wined3dcfg.h b/reactos/dll/cpl/wined3dcfg/wined3dcfg.h index 5293d66ab98..350e34d3081 100644 --- a/reactos/dll/cpl/wined3dcfg/wined3dcfg.h +++ b/reactos/dll/cpl/wined3dcfg/wined3dcfg.h @@ -2,7 +2,6 @@ #define _WINED3DCFG_PCH_ #include <stdarg.h> - #define WIN32_NO_STATUS #include <windef.h> #include <winbase.h> @@ -13,31 +12,36 @@ #define MAX_KEY_LENGTH 256 -#define ITEM_FBO 0 -#define ITEM_BACKBUFFER 1 - -#define ITEM_READTEX 0 -#define ITEM_READDRAW 1 -#define ITEM_DISABLED 2 - -#define VALUE_READTEX L"readtex" -#define VALUE_READDRAW L"readdraw" +#define VALUE_GDI L"gdi" #define VALUE_ENABLED L"enabled" #define VALUE_DISABLED L"disabled" #define VALUE_NONE L"none" #define VALUE_BACKBUFFER L"backbuffer" #define VALUE_FBO L"fbo" +#define VALUE_DEFAULT L"default" #define KEY_WINE L"Software\\Wine\\Direct3D" #define KEY_GLSL L"UseGLSL" -#define KEY_VERTEXSHADERS L"VertexShaderMode" -#define KEY_PIXELSHADERS L"PixelShaderMode" +#define KEY_GSLEVEL L"MaxShaderModelGS" +#define KEY_VSLEVEL L"MaxShaderModelVS" +#define KEY_PSLEVEL L"MaxShaderModelPS" #define KEY_STRICTDRAWORDERING L"StrictDrawOrdering" #define KEY_OFFSCREEN L"OffscreenRenderingMode" #define KEY_MULTISAMPLING L"Multisampling" -#define KEY_LOCKING L"RenderTargetLockMode" +#define KEY_VIDMEMSIZE L"VideoMemorySize" +#define KEY_ALWAYSOFFSCREEN L"AlwaysOffscreen" +#define KEY_DDRENDERER L"DirectDrawRenderer" + +#define INIT_CONTROL(a, b) InitControl(hWndDlg, hKey, KEY_##a, b, IDC_##a, sizeof(b)/sizeof(WINED3D_SETTINGS)) +#define SAVE_CONTROL(a, b) SaveSetting(hWndDlg, hKey, KEY_##a, b, IDC_##a, sizeof(b)/sizeof(WINED3D_SETTINGS)) INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +typedef struct _WINED3D_SETTINGS{ + WCHAR szValue[24]; + INT iType; + INT iValue; +} WINED3D_SETTINGS, *PWINED3D_SETTINGS; + #endif /* _WINED3DCFG_PCH_ */ From db2a4e0e50475cf01fcb9fe440990a2874cf535d Mon Sep 17 00:00:00 2001 From: Daniel Reimer <reimer.daniel@freenet.de> Date: Mon, 19 May 2014 17:33:24 +0000 Subject: [PATCH 74/81] [WINED3DCFG] German translation by ... me. svn path=/trunk/; revision=63372 --- reactos/dll/cpl/wined3dcfg/lang/de-DE.rc | 20 ++++++++++---------- reactos/dll/cpl/wined3dcfg/lang/en-US.rc | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc b/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc index 675f15ffb97..c69db3f1e34 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc @@ -6,25 +6,25 @@ CAPTION "Allgemein" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 - GROUPBOX "Shaders", -1, 5, 25, 230, 80 - LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + GROUPBOX "Shader", -1, 5, 25, 230, 80 + LTEXT "GLSL aktivieren", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 + LTEXT "Maximaler GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + LTEXT "Maximaler PS Level:", -1, 15, 72, 80, 10 COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 + LTEXT "Maximaler VS Level:", -1, 15, 87, 80, 10 COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - GROUPBOX "Rendering", -1, 5, 110, 230, 110 + GROUPBOX "Darstellung", -1, 5, 110, 230, 110 LTEXT "Multisampling:", -1, 15, 127, 80, 10 COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Strict draw ordering:", -1, 15, 142, 80, 10 + LTEXT "Strikte Zeichenreihenfolge:", -1, 15, 142, 80, 10 COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Offscreen rendering:", -1, 15, 157, 80, 10 + LTEXT "Offscreen Rendering:", -1, 15, 157, 80, 10 COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Always offscreen:", -1, 15, 172, 72, 10, SS_LEFT + LTEXT "Immer Offscreen:", -1, 15, 172, 72, 10, SS_LEFT COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Video memory size:", -1, 15, 187, 72, 10, SS_LEFT + LTEXT "Videospeicher-Gre:", -1, 15, 187, 72, 10, SS_LEFT COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST diff --git a/reactos/dll/cpl/wined3dcfg/lang/en-US.rc b/reactos/dll/cpl/wined3dcfg/lang/en-US.rc index 1575e4d55e4..cbeccc3bf90 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/en-US.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/en-US.rc @@ -11,7 +11,7 @@ BEGIN COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + LTEXT "Maximum PS Level:", -1, 15, 72, 80, 10 COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST From c12f161a1ba7225965825752c69220259dd51f29 Mon Sep 17 00:00:00 2001 From: Daniel Reimer <reimer.daniel@freenet.de> Date: Mon, 19 May 2014 18:00:47 +0000 Subject: [PATCH 75/81] [TRANSLATION] Small improvement of Russian translation CORE-7994 #resolve #comment Committed, thanks for help. svn path=/trunk/; revision=63373 --- reactos/base/applications/cacls/lang/ru-RU.rc | 8 +- .../base/applications/dxdiag/lang/ru-RU.rc | 14 +- .../base/applications/fontview/lang/ru-RU.rc | 4 +- .../base/applications/mplay32/lang/ru-RU.rc | 10 +- .../base/applications/regedit/lang/ru-RU.rc | 148 +++++++++--------- .../base/applications/shutdown/lang/ru-RU.rc | 148 +++++++++--------- .../base/applications/sndrec32/lang/ru-RU.rc | 79 ++++++++++ reactos/base/applications/sndrec32/rsrc.rc | 3 + .../base/applications/sndvol32/lang/ru-RU.rc | 8 +- reactos/base/setup/reactos/lang/ru-RU.rc | 6 +- reactos/base/shell/explorer-new/lang/ru-RU.rc | 26 +-- reactos/dll/cpl/desk/lang/ru-RU.rc | 14 +- reactos/dll/cpl/mmsys/lang/ru-RU.rc | 2 +- reactos/dll/win32/aclui/lang/ru-RU.rc | 2 +- 14 files changed, 279 insertions(+), 193 deletions(-) create mode 100644 reactos/base/applications/sndrec32/lang/ru-RU.rc diff --git a/reactos/base/applications/cacls/lang/ru-RU.rc b/reactos/base/applications/cacls/lang/ru-RU.rc index 72f0fe7c48a..a52e892ff34 100644 --- a/reactos/base/applications/cacls/lang/ru-RU.rc +++ b/reactos/base/applications/cacls/lang/ru-RU.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE BEGIN - IDS_HELP "Отображает или изменяет списки доступа (ACLs) к файлам\n\n\ + IDS_HELP "Отображает или изменяет списки доступа (Access Control Lists, ACLs) к файлам\n\n\ CACLS имя_Файла [/T] [/E] [/C] [/G имя:право [...]] [/R имя [...]]\n\ [/P имя:право[...]] [/D имя [...]]\n\ имя_файла Вывод списков ACL.\n\ @@ -27,11 +27,11 @@ CACLS имя_Файла [/T] [/E] [/C] [/G имя:право [...]] [/R имя [ В команде можно использовать шаблоны для обработки более одного файла.\n\ В команде можно указывать более одного пользователя.\n\n\ Сокращения:\n\ - CI - Наследование контейнерами.\n\ + CI - Наследование контейнерами (Container Inherit).\n\ ACE будет унаследован папками.\n\ - OI - Наследование объектами.\n\ + OI - Наследование объектами (Object Inherit).\n\ ACE будет унаследован файлами.\n\ - IO - Только наследованное.\n\ + IO - Только наследованное (Inherit Only).\n\ ACE не будет применён к данному файлу/папке.\n" IDS_ABBR_CI "(CI)" IDS_ABBR_OI "(OI)" diff --git a/reactos/base/applications/dxdiag/lang/ru-RU.rc b/reactos/base/applications/dxdiag/lang/ru-RU.rc index 0f66564e786..a8aa8236f71 100644 --- a/reactos/base/applications/dxdiag/lang/ru-RU.rc +++ b/reactos/base/applications/dxdiag/lang/ru-RU.rc @@ -207,15 +207,15 @@ BEGIN IDS_REG_FAIL "Ошибка" IDS_DDTEST_ERROR "Сбой в проверке!" IDS_DDTEST_DESCRIPTION "Будет произведена проверка DirecDraw на этом устройстве. Продолжить?" - IDS_DDPRIMARY_DESCRIPTION "This test will use DirectDraw to draw on primary surface. Black and white rectangles should be drawn. Продолжить?" + IDS_DDPRIMARY_DESCRIPTION "В этом тесте будет проверена возможность рисования DirectDraw на основной поверхности экрана. Должны быть видны черные и белые прямоугольники. Продолжить?" IDS_DDPRIMARY_RESULT "Вы видели черные и белые прямоугольники?" - IDS_DDOFFSCREEN_DESCRIPTION "This test will use DirectDraw to draw in an offscreen buffer. Moving white rectangle should be drawn. Продолжить?" - IDS_DDOFFSCREEN_RESULT "Вы видели перемещающийся белый прямоугольник?" - IDS_DDFULLSCREEN_DESCRIPTION "This test will use DirectDraw to draw in a fullscreen mode. Moving white rectangle should be drawn. Продолжить?" - IDS_DDFULLSCREEN_RESULT "Вы видели белый перемешающийся прямоугольник в полноэкранном режиме?" + IDS_DDOFFSCREEN_DESCRIPTION "В этом тесте будет проверена возможность рисования DirectDraw на закадровой поверхности экрана. Должен быть виден двигающийся белый квадратик. Продолжить?" + IDS_DDOFFSCREEN_RESULT "Вы видели двигающийся белый квадратик?" + IDS_DDFULLSCREEN_DESCRIPTION "В этом тесте будет проверена возможность рисования DirectDraw в полноэкранном режиме. Должен быть виден двигающийся белый квадратик. Продолжить?" + IDS_DDFULLSCREEN_RESULT "Вы видели белый двигающийся квадратик в полноэкранном режиме?" IDS_FORMAT_ADAPTER_MEM "%u Мб" IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u бит)(%uГц)" IDS_OPTION_NO "Нет" - IDS_D3DTEST_DESCRIPTION "This will start Direct3D interface test. Continue?" - IDS_D3DTEST_D3Dx "This test will use hardware-accelerated Direct3D %u interface." + IDS_D3DTEST_DESCRIPTION "Будет произведена проверка Direct3D на этом устройстве. Продолжить?" + IDS_D3DTEST_D3Dx "Этот тест будет использовать интерфейс Direct3D %u с аппаратным ускорением." END diff --git a/reactos/base/applications/fontview/lang/ru-RU.rc b/reactos/base/applications/fontview/lang/ru-RU.rc index 6dd382f71f0..7cda19f3565 100644 --- a/reactos/base/applications/fontview/lang/ru-RU.rc +++ b/reactos/base/applications/fontview/lang/ru-RU.rc @@ -4,10 +4,10 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE BEGIN - IDS_INSTALL "Install" + IDS_INSTALL "Установить" IDS_PRINT "Печать" IDS_STRING "В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! 1234567890" - IDS_OPEN "Open Font..." + IDS_OPEN "Открыть шрифт..." IDS_ERROR "Ошибка" IDS_ERROR_NOMEM "Недостаточно памяти, чтобы завершить операцию." IDS_ERROR_NOFONT "%1 не является корректным файлом шрифта." diff --git a/reactos/base/applications/mplay32/lang/ru-RU.rc b/reactos/base/applications/mplay32/lang/ru-RU.rc index 260b738898b..b30e8ad8b4a 100644 --- a/reactos/base/applications/mplay32/lang/ru-RU.rc +++ b/reactos/base/applications/mplay32/lang/ru-RU.rc @@ -9,11 +9,11 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Выход", IDM_EXIT END - POPUP "&Device" + POPUP "&Устройство" BEGIN - MENUITEM "&Properties", IDM_DEVPROPS + MENUITEM "&Свойства", IDM_DEVPROPS MENUITEM SEPARATOR - MENUITEM "&Volume Control", IDM_VOLUMECTL + MENUITEM "&Громкость", IDM_VOLUMECTL END POPUP "&Помощь" BEGIN @@ -33,6 +33,6 @@ BEGIN IDS_TOOLTIP_FORWARD "Вперед" IDS_APPTITLE "Проигрыватель ReactOS" IDS_PLAY "Воспроизвести" - IDS_DEFAULTMCIERRMSG "No description is available for this error" - IDS_UNKNOWNFILEEXT "Cannot determine the device type from the given filename extension." + IDS_DEFAULTMCIERRMSG "Неизвестная ошибка." + IDS_UNKNOWNFILEEXT "Невозможно определить тип устройства мультимедиа для заданного расширения файла." END diff --git a/reactos/base/applications/regedit/lang/ru-RU.rc b/reactos/base/applications/regedit/lang/ru-RU.rc index 160d6444bd2..45ef7d80833 100644 --- a/reactos/base/applications/regedit/lang/ru-RU.rc +++ b/reactos/base/applications/regedit/lang/ru-RU.rc @@ -52,7 +52,7 @@ BEGIN MENUITEM "&Строковый параметр", ID_EDIT_NEW_STRINGVALUE MENUITEM "&Двоичный параметр", ID_EDIT_NEW_BINARYVALUE MENUITEM "&Параметр DWORD", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Мультистроковый параметр", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "&Многострочный параметр", ID_EDIT_NEW_MULTISTRINGVALUE MENUITEM "Рас&ширяемый строковый параметр", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END MENUITEM SEPARATOR @@ -106,8 +106,8 @@ BEGIN MENUITEM "&Строковый параметр", ID_EDIT_NEW_STRINGVALUE MENUITEM "&Двоичный параметр", ID_EDIT_NEW_BINARYVALUE MENUITEM "&Параметр DWORD", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "&Многострочный параметр", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Рас&ширяемый строковый параметр", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END END POPUP "" @@ -120,8 +120,8 @@ BEGIN MENUITEM "&Строковый параметр", ID_EDIT_NEW_STRINGVALUE MENUITEM "&Двоичный параметр", ID_EDIT_NEW_BINARYVALUE MENUITEM "&Параметр DWORD", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "&Многострочный параметр", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Рас&ширяемый строковый параметр", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END MENUITEM "&Найти", ID_EDIT_FIND MENUITEM SEPARATOR @@ -135,12 +135,12 @@ BEGIN END POPUP "" BEGIN - MENUITEM "C&ut", ID_HEXEDIT_CUT - MENUITEM "&Copy", ID_HEXEDIT_COPY - MENUITEM "&Paste", ID_HEXEDIT_PASTE - MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM "&Вырезать", ID_HEXEDIT_CUT + MENUITEM "&Копировать", ID_HEXEDIT_COPY + MENUITEM "Вст&авить", ID_HEXEDIT_PASTE + MENUITEM "&Удалить", ID_HEXEDIT_DELETE MENUITEM SEPARATOR - MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + MENUITEM "Вы&делить все", ID_HEXEDIT_SELECT_ALL END END @@ -204,50 +204,50 @@ END IDD_EDIT_RESOURCE_LIST DIALOGEX 32, 24, 170, 120 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Resource List" +CAPTION "Списки ресурсов" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_RESOURCE_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 10, 150, 75 DEFPUSHBUTTON "OK", IDOK, 27, 100, 50, 14 - PUSHBUTTON "Show...", IDC_SHOW_RESOURCE, 93, 100, 50, 14, WS_DISABLED + PUSHBUTTON "Показать...", IDC_SHOW_RESOURCE, 93, 100, 50, 14, WS_DISABLED END IDD_EDIT_RESOURCE DIALOGEX 6, 18, 281, 283 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Resources" +CAPTION "Ресурсы" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "DMA:", IDC_STATIC, 10, 5, 20, 8 + LTEXT "Канал DMA:", IDC_STATIC, 10, 5, 20, 8 CONTROL "", IDC_DMA_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 15, 261, 31 - LTEXT "Interrupt:", IDC_STATIC, 10, 48, 35, 8 + LTEXT "Прерывание:", IDC_STATIC, 10, 48, 35, 8 CONTROL "", IDC_IRQ_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 58, 261, 31 - LTEXT "Memory:", IDC_STATIC, 10, 91, 32, 8 + LTEXT "Память:", IDC_STATIC, 10, 91, 32, 8 CONTROL "", IDC_MEMORY_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 101, 261, 31 - LTEXT "Port:", IDC_STATIC, 10, 134, 38, 8 + LTEXT "Порт:", IDC_STATIC, 10, 134, 38, 8 CONTROL "", IDC_PORT_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 144, 261, 31 - LTEXT "Device specific data:", IDC_STATIC, 10, 177, 80, 8 + LTEXT "Даннные устройства:", IDC_STATIC, 10, 177, 80, 8 CONTROL "", IDC_DEVICE_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 188, 261, 31 - GROUPBOX "Usage", IDC_STATIC, 10, 219, 125, 39 - LTEXT "Undetermined", IDC_UNDETERMINED, 18, 230, 46, 8, WS_DISABLED - LTEXT "Shared", IDC_SHARED, 18, 240, 48, 8, WS_DISABLED - LTEXT "Device exclusive", IDC_DEVICE_EXCLUSIVE, 72, 230, 58, 8, WS_DISABLED - LTEXT "Driver exclusive", IDC_DRIVER_EXCLUSIVE, 72, 240, 54, 8, WS_DISABLED - RTEXT "Interface Type:", IDC_STATIC, 144, 220, 58, 8 + GROUPBOX "Назначение", IDC_STATIC, 10, 219, 125, 39 + LTEXT "Не определено", IDC_UNDETERMINED, 18, 230, 46, 8, WS_DISABLED + LTEXT "Общий ресурс", IDC_SHARED, 18, 240, 48, 8, WS_DISABLED + LTEXT "Для устройства", IDC_DEVICE_EXCLUSIVE, 72, 230, 58, 8, WS_DISABLED + LTEXT "Для драйвера", IDC_DRIVER_EXCLUSIVE, 72, 240, 54, 8, WS_DISABLED + RTEXT "Тип интерфейса:", IDC_STATIC, 144, 220, 58, 8 LTEXT "", IDC_INTERFACETYPE, 205, 220, 66, 8 - RTEXT "Bus Nummer:", IDC_STATIC, 151, 230, 51, 8 + RTEXT "Номер шины:", IDC_STATIC, 151, 230, 51, 8 LTEXT "", IDC_BUSNUMBER, 205, 230, 66, 8 - RTEXT "Version:", IDC_STATIC, 151, 240, 51, 8 + RTEXT "Версия:", IDC_STATIC, 151, 240, 51, 8 LTEXT "", IDC_VERSION, 205, 240, 66, 8 - RTEXT "Revision:", IDC_STATIC, 151, 250, 51, 8 + RTEXT "Редакция:", IDC_STATIC, 151, 250, 51, 8 LTEXT "", IDC_REVISION, 205, 250, 66, 8 DEFPUSHBUTTON "OK", IDOK, 92, 263, 40, 14 - PUSHBUTTON "&Data...", IDC_SHOW_RESOURCE_DATA, 148, 263, 40, 14, WS_DISABLED + PUSHBUTTON "&Данные...", IDC_SHOW_RESOURCE_DATA, 148, 263, 40, 14, WS_DISABLED END /* String Tables */ @@ -285,11 +285,11 @@ BEGIN ID_EDIT_NEW_DWORDVALUE "Добавляет новое DWORD-значение" ID_REGISTRY_IMPORTREGISTRYFILE "Импортирует текстовой файл в реестр" ID_REGISTRY_EXPORTREGISTRYFILE "Экспортирует весь реестр или его часть в текстовой файл" - ID_REGISTRY_LOADHIVE "Loads a hive file into the registry" - ID_REGISTRY_UNLOADHIVE "Unloads a hive from the registry" + ID_REGISTRY_LOADHIVE "Загрузить файл куста реестра в реестр" + ID_REGISTRY_UNLOADHIVE "Выгрузить куст реестра" ID_REGISTRY_CONNECTNETWORKREGISTRY "Подключается к реестру удалённого компьютера" ID_REGISTRY_DISCONNECTNETWORKREGISTRY "Отключается от реестра удалённого компьютера" - ID_REGISTRY_PRINT "Печатает весь реестр или ого часть" + ID_REGISTRY_PRINT "Печатает весь реестр или его часть" /* ID_HELP_HELPTOPICS "Открывает справку редактора реестра" */ ID_HELP_ABOUT "Отображает информацию о программе, номер версии и авторские права" END @@ -328,8 +328,8 @@ BEGIN IDS_ERR_DELETEVALUE "Невозможно удалить все указанные значения!" IDS_ERR_RENVAL_CAPTION "Ошибка переименования значения" IDS_ERR_RENVAL_TOEMPTY "Невозможно переименовать %s. Указанное значение не пустое. Введите другое значение и повторите попытку." - IDS_QUERY_IMPORT_HIVE_CAPTION "Confirm Key Restoration" - IDS_QUERY_IMPORT_HIVE_MSG "A key will be restored on top of the currently selected key.\nAll values and subkeys of this key will be deleted.\nDo you want to continue the operation?" + IDS_QUERY_IMPORT_HIVE_CAPTION "Подтвердите восстановление раздела" + IDS_QUERY_IMPORT_HIVE_MSG "Раздел будет восстановлен поверх текущего выбранного раздела.\nВсе параметры и подразделы будут удалены.\nПродолжить выполнение операции?" IDS_NEW_KEY "Новый ключ #%d" IDS_NEW_VALUE "Новое значение #%d" END @@ -343,8 +343,8 @@ BEGIN IDS_MY_COMPUTER "Мой компьютер" IDS_IMPORT_REG_FILE "Импортирование файла реестра" IDS_EXPORT_REG_FILE "Экспортирование файла реестра" - IDS_LOAD_HIVE "Load Hive" - IDS_UNLOAD_HIVE "Unload Hive" + IDS_LOAD_HIVE "Загрузить куст" + IDS_UNLOAD_HIVE "Выгрузить куст" IDS_INVALID_DWORD "(неправильное значение DWORD)" END @@ -353,7 +353,7 @@ BEGIN IDS_FLT_REGFILE "Файл реестра" IDS_FLT_REGFILES "Файлы реестра (*.reg)" IDS_FLT_REGFILES_FLT "*.reg" - IDS_FLT_HIVFILES "Registry Hive Files (*.*)" + IDS_FLT_HIVFILES "Файлы кустов реестра (*.*)" IDS_FLT_HIVFILES_FLT "*.*" IDS_FLT_REGEDIT4 "Файлы реестра Win9x/NT4 (REGEDIT4) (*.reg)" IDS_FLT_REGEDIT4_FLT "*.reg" @@ -394,48 +394,48 @@ END STRINGTABLE BEGIN - IDS_IMPORT_PROMPT "Adding information can unintentionally change or delete values and cause components to stop working correctly.\nIf you do not trust the source of this information in '%s', do not add it to registry.\n\nAre you sure you want to continue?" - IDS_IMPORT_OK "The keys and values contained in '%s' have been successfully added to the registry." - IDS_IMPORT_ERROR "Cannot import '%s': Error opening the file. There may be a disk, file system error or file may not exist." - IDS_EXPORT_ERROR "Cannot export '%s': Error creating or writing to the file. There may be a disk or file system error." + IDS_IMPORT_PROMPT "Вы уверены, что хотите добавить данные из файла '%s'?\n Добавление информации из непроверенных источников может непреднамеренно изменить или удалить некоторые значения и привести к нестабильной работе системы.\n Если вы не доверяете источнику этого файла, не добавляйте данные в реестр." + IDS_IMPORT_OK "Значения из файла '%s' были успешно добавлены в реестр." + IDS_IMPORT_ERROR "Не удается импортировать файл '%s': Ошибка при открытии файла." + IDS_EXPORT_ERROR "Не удается экспортировать данные в файл '%s': Ошибка при записи в файл." END STRINGTABLE BEGIN - IDS_BUSNUMBER "Bus Number" - IDS_INTERFACE "Interface" - IDS_DMA_CHANNEL "Channel" - IDS_DMA_PORT "Port" - IDS_INTERRUPT_VECTOR "Vector" - IDS_INTERRUPT_LEVEL "Level" - IDS_INTERRUPT_AFFINITY "Affinity" - IDS_INTERRUPT_TYPE "Type" - IDS_MEMORY_ADDRESS "Physical Address" - IDS_MEMORY_LENGTH "Length" - IDS_MEMORY_ACCESS "Access" - IDS_PORT_ADDRESS "Physical Address" - IDS_PORT_LENGTH "Length" - IDS_PORT_ACCESS "Access" - IDS_SPECIFIC_RESERVED1 "Reserved 1" - IDS_SPECIFIC_RESERVED2 "Reserved 2" - IDS_SPECIFIC_DATASIZE "Data Size" + IDS_BUSNUMBER "Номер шины" + IDS_INTERFACE "Интерфейс" + IDS_DMA_CHANNEL "Канал" + IDS_DMA_PORT "Порт" + IDS_INTERRUPT_VECTOR "Вектор" + IDS_INTERRUPT_LEVEL "Уровень" + IDS_INTERRUPT_AFFINITY "Родство" + IDS_INTERRUPT_TYPE "Тип" + IDS_MEMORY_ADDRESS "Физический адрес" + IDS_MEMORY_LENGTH "Длина" + IDS_MEMORY_ACCESS "Доступ" + IDS_PORT_ADDRESS "Физический адрес" + IDS_PORT_LENGTH "Длина" + IDS_PORT_ACCESS "Доступ" + IDS_SPECIFIC_RESERVED1 "Резерв1" + IDS_SPECIFIC_RESERVED2 "Резерв2" + IDS_SPECIFIC_DATASIZE "Объем данных" END STRINGTABLE BEGIN - IDS_PORT_PORT_IO "Port" - IDS_PORT_MEMORY_IO "Memory" - IDS_INTERRUPT_EDGE_SENSITIVE "Edge Sensitive" - IDS_INTERRUPT_LEVEL_SENSITIVE "Level Sensitive" - IDS_MEMORY_READ_ONLY "Read Only" - IDS_MEMORY_WRITE_ONLY "Write Only" - IDS_MEMORY_READ_WRITE "Read / Write" + IDS_PORT_PORT_IO "Порт" + IDS_PORT_MEMORY_IO "Память" + IDS_INTERRUPT_EDGE_SENSITIVE "С учетом задвижки" + IDS_INTERRUPT_LEVEL_SENSITIVE "С учетом уровня" + IDS_MEMORY_READ_ONLY "Только чтение" + IDS_MEMORY_WRITE_ONLY "Только запись" + IDS_MEMORY_READ_WRITE "Чтение и запись" END STRINGTABLE BEGIN - IDS_BUS_UNDEFINED "Undefined" - IDS_BUS_INTERNAL "Internal" + IDS_BUS_UNDEFINED "Неправильно" + IDS_BUS_INTERNAL "Внутренний" IDS_BUS_ISA "ISA" IDS_BUS_EISA "EISA" IDS_BUS_MICROCHANNEL "MicroChannel" @@ -447,11 +447,11 @@ BEGIN IDS_BUS_CBUS "C-Bus" IDS_BUS_MPIBUS "MPI-Bus" IDS_BUS_MPSABUS "MPSA-Bus" - IDS_BUS_PROCESSORINTERNAL "Processor Internal" - IDS_BUS_INTERNALPOWERBUS "Internal Power Bus" - IDS_BUS_PNPISABUS "PnP-ISA Bus" - IDS_BUS_PNPBUS "PnP Bus" - IDS_BUS_UNKNOWNTYPE "Unknown Interface Type" + IDS_BUS_PROCESSORINTERNAL "Внутренняя шина процессора" + IDS_BUS_INTERNALPOWERBUS "Внутренняя шина питания" + IDS_BUS_PNPISABUS "Шина PnP-ISA" + IDS_BUS_PNPBUS "Шина PnP" + IDS_BUS_UNKNOWNTYPE "Неизвестный тип интерфейса" END /*****************************************************************/ @@ -470,13 +470,13 @@ END IDD_LOADHIVE DIALOGEX 0, 0, 193, 34 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Load Hive" +CAPTION "Загрузить куст" FONT 8, "Ms Shell Dlg" BEGIN - LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT + LTEXT "&Значение:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13 DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 89, 17, 50, 14 END IDD_ADDFAVORITES DIALOGEX 0, 0, 187, 95 diff --git a/reactos/base/applications/shutdown/lang/ru-RU.rc b/reactos/base/applications/shutdown/lang/ru-RU.rc index bb944a716f9..2ec5dbc05e2 100644 --- a/reactos/base/applications/shutdown/lang/ru-RU.rc +++ b/reactos/base/applications/shutdown/lang/ru-RU.rc @@ -3,101 +3,105 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT /* Dialog */ IDD_GUI DIALOGEX 0, 0, 240, 255 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Remote Shutdown" +CAPTION "Удаленное завершение работы" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "&OK", IDC_OK, 125, 232, 50, 14 - PUSHBUTTON "&Cancel", IDC_CANCEL, 178, 232, 50, 14 - LTEXT "Co&mputers:", IDC_STATIC, 9, 9, 35, 36 + DEFPUSHBUTTON "&ОК", IDC_OK, 125, 232, 50, 14 + PUSHBUTTON "О&тмена", IDC_CANCEL, 178, 232, 50, 14 + LTEXT "&Компьютеры:", IDC_STATIC, 9, 9, 50, 8 LISTBOX IDC_COMPUTER_LIST, 8, 19, 162, 55 - PUSHBUTTON "&Add...", IDC_ADD_SYSTEM, 179, 19, 50, 14 - PUSHBUTTON "&Remove", IDC_REMOVE_SYSTEM, 179, 36, 50, 14, WS_DISABLED - PUSHBUTTON "&Browse...", IDC_BROWSE_SYSTEM, 179, 53, 50, 14 - LTEXT "Action", IDC_ACTION, 11, 81, 20, 14 + PUSHBUTTON "&Добавить...", IDC_ADD_SYSTEM, 179, 19, 50, 14 + PUSHBUTTON "&Удалить", IDC_REMOVE_SYSTEM, 179, 36, 50, 14, WS_DISABLED + PUSHBUTTON "&Обзор...", IDC_BROWSE_SYSTEM, 179, 53, 50, 14 + LTEXT "&Желаемое действие для компьютеров:", IDC_ACTION, 11, 81, 170, 14 COMBOBOX IDC_ACTION_TYPE, 37, 79, 129, 14, WS_TABSTOP | CBS_DROPDOWN - CHECKBOX "Warn users", IDC_WARN_USERS, 175, 79, 55, 14, BS_AUTOCHECKBOX | WS_TABSTOP - LTEXT "Display warning for", IDC_SHOW_WARN_ONE, 11, 99, 65, 14 + CHECKBOX "&Предупредить пользователей", IDC_WARN_USERS, 175, 79, 120, 14, BS_AUTOCHECKBOX | WS_TABSTOP + LTEXT "По&казывать предупреждение в течение: ", IDC_SHOW_WARN_ONE, 11, 99, 146, 14 EDITTEXT IDC_SHOW_WARN, 78, 97, 41, 14 - LTEXT "second(s)", IDC_SHOW_WARN_TWO, 124, 99, 32, 10 - GROUPBOX "Shutdown Event Tracker", IDC_STATIC, 5, 114, 224, 114 - LTEXT "Reason:", IDC_STATIC, 16, 130, 27, 8 - CHECKBOX "Planned", IDC_PLANNED, 175, 130, 40, 12, BS_AUTOCHECKBOX | WS_TABSTOP + LTEXT "сек.", IDC_SHOW_WARN_TWO, 124, 99, 32, 10 + GROUPBOX "Регистрация событий завершения работы", IDC_STATIC, 5, 114, 224, 114 + LTEXT "Причина:", IDC_STATIC, 16, 130, 27, 8 + CHECKBOX "Запланировано", IDC_PLANNED, 165, 125, 55, 12, BS_AUTOCHECKBOX | WS_TABSTOP COMBOBOX IDC_REASON_CODE, 17, 142, 198, 13, WS_TABSTOP | CBS_DROPDOWN - LTEXT "Comm&ent:", IDC_COMMENT_CAPTION, 16, 159, 38, 8 + LTEXT "Комме&нтарий:", IDC_COMMENT_CAPTION, 16, 159, 51, 8 EDITTEXT IDC_COMMENT_TEXT, 17, 171, 198, 50, WS_VSCROLL END /* Information and error messages */ STRINGTABLE BEGIN - IDS_USAGE "ReactOS Shutdown Utility\n\ + IDS_USAGE "Утилита выключения ReactOS\n\ \n\ -Usage: shutdown [/?] [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f]\n\ - [/m \\\\computer][/t xxx][/d [p|u:]xx:yy [/c ""comment""]]\n\ +Использование: shutdown [/?] [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f]\n\ + [/m \\\\<компьютер>][/t xxx][/d [p|u:]xx:yy [/c ""комментарий""]]\n\ \n\ - No arguments or /? Display this help.\n\ - /i Show the graphical user interface (GUI). This option must be the\n\ - first one.\n\ - /l Log off on the local system only. Cannot be used with /m or /d.\n\ - /s Shutdown the computer.\n\ - /r Restart the computer.\n\ - /g Restart the computer and restart all the registered applications.\n\ - /a Cancel a delayed shutdown. Can only be used during the delay\n\ - period.\n\ - /p Shutdown the local computer without any timeout or warning. Can be\n\ - used with /d or /f.\n\ - /h Hibernate the local computer. Usable with /f.\n\ - /e Document the reason for the unexpected computer shutdown.\n\ - /m \\\\computer Specify the target computer (UNC/IP address).\n\ - /t xxx Set the timeout period to xxx seconds before shutting down.\n\ - The valid range starts from 0 to 315360000 (10 years),\n\ - 30 being the default value.\n\ - /c ""comment"" Comment on the reason for shutdown or restart.\n\ - 512 characters maximum allowed.\n\ - /f Force running applications to close without warning users. If you\n\ - do not specify any other parameter, this option will also log off.\n\ - /d [p|u:]xx:yy Give the reason code for the shutdown or the restart.\n\ - p indicates that the shutdown or the restart is planned.\n\ - u indicates that the reason is defined by the user.\n\ - If neither p nor u are specified, the shutdown or the restart are\n\ - not planned.\n\ - xx is the major reason code (positive integer smaller than 256).\n\ - yy is the minor reason code (positive integer smaller than 65536).\n" + Без аргументов или /? Показывает эту справку.\n\ + /i Показать диалог удаленного выключения. Этот параметр должен\n\ + указываться первым.\n\ + /l Выход из системы. (не совместим с параметрами /m или /d.\n\ + /s Выключить комьпьютер.\n\ + /r Перезагрузить компьютер.\n\ + /g Перезагрузить компьютер и перезапустить все зарегистрированные\n\ + приложения.\ + /a Отменить отложенное выключение. Может использоваться только в\n\ + течение периода ожидания выключения.\ + /p Выключить локальный компьютер без всяких задержек или \n\ + предупреждений. Может использоваться с параметрами /d или /f.\n\ + /h Перевести локальный компьютер в режим гибернации (""спящий \n\ + режим""). Может использоваться с параметром /f.\n\ + /e Задокументировать причину неожиданного выключения компьютера.\n\ + /m \\\\<компьютер> Удаленный компьютер, на котором выполняется действие.\n\ + (UNC/IP адрес).\n\ + /t xxx Устанавливает время ожидания до xxx сек. до завершения работы.\n\ + Допустимые значения лежат в отрезке от 0 до 315360000 (10 лет),\n\ + По умолчанию значение равно 30.\n\ + /c ""комментарий"" Описание причины выключения или перезагрузки.\n\ + Не более 512 знаков.\n\ + /f Принудительное завершение открытых приложений без предварительного\n\ + уведомления. Если не указаны дополнительные параметры, то этот\n\ + параметр также приведет к выходу из системы.\n\ + /d [p|u:]xx:yy Задает код причины выключения или перезагрузки.\n\ + p - показывает, что выключение или перезагрузка запланирована.\n\ + u - показывает, что причина определена пользователем.\n\ + Если не указаны p или u, то выключение или перезагрузка системы не\n\ + запланирована.\ + xx - основной код причины (1 - 255).\n\ + yy - дополнительный код причины (1 - 65535).\n" - IDS_ERROR_SHUTDOWN_REBOOT "ERROR: Unable to shutdown and restart at the same time.\n" - IDS_ERROR_TIMEOUT "ERROR: Timeout value of %u is out of bounds (0-315360000).\n" - IDS_ERROR_ABORT "ERROR: Unable to abort the shutdown of the system.\n" - IDS_ERROR_LOGOFF "ERROR: Unable to logoff the system.\n" - IDS_ERROR_SHUTDOWN "ERROR: Unable to shutdown the system.\n" - IDS_ERROR_RESTART "ERROR: Unable to restart the system.\n" - IDS_ERROR_MAX_COMMENT_LENGTH "ERROR: Comment length exceeds maximum character limit set by the system.\n" - IDS_ERROR_HIBERNATE "ERROR: Unable to send system into hibernation mode.\n" - IDS_ERROR_HIBERNATE_LOCAL "ERROR: Hibernation mode cannot be started remotely.\n" - IDS_ERROR_HIBERNATE_ENABLED "ERROR: Hibernation mode is not enabled.\n" - IDS_ERROR_DIALOG_CAPTION "Remote Shutdown" - IDS_ERROR_DIALOG_INIT "Unable to display the graphical user interface." + IDS_ERROR_SHUTDOWN_REBOOT "ОШИБКА: Нельзя одновременно выключить и перезагрузить компьютер.\n" + IDS_ERROR_TIMEOUT "ОШИБКА: Время ожидания %u находится за границами диапазона (0-315360000).\n" + IDS_ERROR_ABORT "ОШИБКА: Невозможно отменить завершение системы.\n" + IDS_ERROR_LOGOFF "ОШИБКА: Невозможно совершить выход из системы.\n" + IDS_ERROR_SHUTDOWN "ОШИБКА: Невозможно выключить систему.\n" + IDS_ERROR_RESTART "ОШИБКА: Невозможно перезагрузить систему.\n" + IDS_ERROR_MAX_COMMENT_LENGTH "ОШИБКА: Длина коментария превысила максимальную длину сообщения.\n" + IDS_ERROR_HIBERNATE "ОШИБКА: Невозможно отправить систему в режим гибернации (""спящий режим"").\n" + IDS_ERROR_HIBERNATE_LOCAL "ОШИБКА: Спящий режим нельзя запустить на удаленном компьютере.\n" + IDS_ERROR_HIBERNATE_ENABLED "ОШИБКА: Спящий режим не включен.\n" + IDS_ERROR_DIALOG_CAPTION "Удаленное завершение работы" + IDS_ERROR_DIALOG_INIT "Не удается показать окно графического интерфейса." END /* Remote shutdown action strings */ STRINGTABLE BEGIN - IDS_ACTION_SHUTDOWN "Shutdown the system" - IDS_ACTION_RESTART "Restart the system" - IDS_ACTION_UNEXPECTED_SHUTDOWN "Annotate the unexpected shutdown" + IDS_ACTION_SHUTDOWN "Выключить систему" + IDS_ACTION_RESTART "Перезапустить систему" + IDS_ACTION_UNEXPECTED_SHUTDOWN "Описать неожиданное выключение" END /* Remote shutdown reason strings */ STRINGTABLE BEGIN - IDS_REASON_OTHER "Other" - IDS_REASON_HARDWARE_MAINTENANCE "Hardware: Maintenance" - IDS_REASON_HARDWARE_INSTALL "Hardware: Installation" - IDS_REASON_OS_RECOVER "Operating System: Recovery" - IDS_REASON_OS_RECONFIGURE "Operating System: Reconfigure" - IDS_REASON_APP_MAINTENANCE "Application: Maintenance" - IDS_REASON_APP_INSTALL "Application: Installation" - IDS_REASON_APP_UNRESPONSIVE "Application: Unresponsive" - IDS_REASON_APP_UNSTABLE "Application: Unstable" - IDS_REASON_SECURITY "Security Issue" - IDS_REASON_NETWORK "Loss of network connectivity" + IDS_REASON_OTHER "Другая" + IDS_REASON_HARDWARE_MAINTENANCE "Оборудование: Обслуживание" + IDS_REASON_HARDWARE_INSTALL "Оборудование: Установка" + IDS_REASON_OS_RECOVER "Операционная система: Восстановление" + IDS_REASON_OS_RECONFIGURE "Операционная система: Настройка" + IDS_REASON_APP_MAINTENANCE "Приложение: Обслуживание" + IDS_REASON_APP_INSTALL "Приложение: Установка" + IDS_REASON_APP_UNRESPONSIVE "Приложение: Не отвечает" + IDS_REASON_APP_UNSTABLE "Приложение: Нестабильная работа" + IDS_REASON_SECURITY "Проблема безопасности" + IDS_REASON_NETWORK "Потеря сетевого соединения" END diff --git a/reactos/base/applications/sndrec32/lang/ru-RU.rc b/reactos/base/applications/sndrec32/lang/ru-RU.rc new file mode 100644 index 00000000000..6f6e7f0d2e3 --- /dev/null +++ b/reactos/base/applications/sndrec32/lang/ru-RU.rc @@ -0,0 +1,79 @@ +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +IDC_REACTOS_SNDREC32 ACCELERATORS +BEGIN + "?", IDM_ABOUT, ASCII, ALT + "/", IDM_ABOUT, ASCII, ALT +END + +IDD_ABOUTBOX DIALOGEX 0, 0, 196, 75 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Информация о программе ""Звукозапись для ReactOS"" " +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + ICON IDI_SNDREC32, -1, 19, 14, 21, 20 + LTEXT "Звукозапись для ReactOS, версия 1.0", IDC_STATIC, 56, 16, 114, 8, SS_NOPREFIX + LTEXT "Copyright (C) 2009", IDC_STATIC, 56, 25, 114, 8 + DEFPUSHBUTTON "OK", IDOK, 139, 54, 50, 14, WS_GROUP +END + +IDR_MENU1 MENU +BEGIN + POPUP "&Файл" + BEGIN + MENUITEM "&Создать", ID_FILE_NEW + MENUITEM "&Открыть...", ID_FILE_OPEN + MENUITEM "&Сохранить", ID_FILE_SAVE, GRAYED + MENUITEM "Сохранить к&ак...", ID_FILE_SAVEAS, GRAYED + MENUITEM "&Восстановить...", ID_FILE_RESTORE, GRAYED + MENUITEM "Сво&йства", ID_FILE_PROPERTIES + MENUITEM SEPARATOR + MENUITEM "В&ыход", ID_FILE_EXIT + END + POPUP "&Правка" + BEGIN + MENUITEM "&Копировать", ID_EDIT_COPY + MENUITEM "&Вставить", ID_EDIT_PASTE, GRAYED + MENUITEM "Вставить и с&мешать", ID_EDIT_PASTEMIX, GRAYED + MENUITEM SEPARATOR + MENUITEM "Вставить &файл...", ID_EDIT_INSERTFILE + MENUITEM "Сме&шать с файлом...", ID_EDIT_MIXFILE + MENUITEM SEPARATOR + MENUITEM "&Удалить до текущей позиции", ID_EDIT_DELETEBEFORE, GRAYED + MENUITEM "Уда&лить после текущей позиции", ID_EDIT_DELETEAFTER, GRAYED + MENUITEM SEPARATOR + MENUITEM "Сво&йства аудио", ID_EDIT_AUDIOPROPS + END + POPUP "&Эффекты" + BEGIN + MENUITEM "&Увеличить громкость (на 25%)", ID_EFFECTS_INCVOL + MENUITEM "У&меньшить громкость", ID_EFFECTS_DECVOL + MENUITEM SEPARATOR + MENUITEM "У&величить скорость (на 100%)", ID_EFFECTS_INCSPD + MENUITEM "Ум&еньшить скорость", ID_EFFECTS_DECSPD + MENUITEM SEPARATOR + MENUITEM "Добавить &эхо", ID_EFFECTS_ECHO + MENUITEM "О&братить", ID_EFFECTS_REVERSE + END + POPUP "&?" + BEGIN + MENUITEM "&О программе...", ID_ABOUT + END +END + +STRINGTABLE +BEGIN + IDS_APP_TITLE "Звукозапись" + IDC_REACTOS_SNDREC32 "REACTOS_SNDREC32" +END + +STRINGTABLE +BEGIN + IDS_STRPOS "Позиция: %.2f с." + IDS_STRDUR "Длина: %.2f с." + IDS_STRBUF "Буфер: %.2f Кб" + IDS_STRFMT "%.1f кГц, %u бит" + IDS_STRMONO "моно" + IDS_STRSTEREO "стерео" + IDS_STRCHAN "%s" +END diff --git a/reactos/base/applications/sndrec32/rsrc.rc b/reactos/base/applications/sndrec32/rsrc.rc index 5132c80590c..24b89c32875 100644 --- a/reactos/base/applications/sndrec32/rsrc.rc +++ b/reactos/base/applications/sndrec32/rsrc.rc @@ -53,6 +53,9 @@ IDB_BITMAP2_STOP_DIS BITMAP "resources/but_stop_dis.bmp" #ifdef LANGUAGE_RO_RO #include "lang/ro-RO.rc" #endif +#ifdef LANGUAGE_RU_RU + #include "lang/ru-RU.rc" +#endif #ifdef LANGUAGE_SK_SK #include "lang/sk-SK.rc" #endif diff --git a/reactos/base/applications/sndvol32/lang/ru-RU.rc b/reactos/base/applications/sndvol32/lang/ru-RU.rc index 8290d70e3fd..7ed361747cd 100644 --- a/reactos/base/applications/sndvol32/lang/ru-RU.rc +++ b/reactos/base/applications/sndvol32/lang/ru-RU.rc @@ -47,12 +47,12 @@ IDD_VOLUME_CTRL DIALOG 0, 0, 90, 150 STYLE WS_POPUP | WS_BORDER FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Master", IDC_LINE_NAME, 4, 7, 100, 15 + LTEXT "Главная", IDC_LINE_NAME, 4, 7, 100, 15 CONTROL "", -1, "static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 4, 30, 82, 1 - LTEXT "Balance", -1, 4, 35, 80, 42 - LTEXT "Volume", -1, 4, 100, 77, 108 + LTEXT "Баланс", -1, 4, 35, 80, 42 + LTEXT "Громкость", -1, 4, 100, 77, 108 CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 25, 55, 85, 30 CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | TBS_AUTOTICKS | TBS_BOTH | TBS_DOWNISLEFT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 32, 115, 30, 70 - CHECKBOX "&Mute", IDC_LINE_SWITCH, 4, 190, 90, 12, BS_AUTOCHECKBOX + CHECKBOX "В&ыкл. все", IDC_LINE_SWITCH, 4, 190, 90, 12, BS_AUTOCHECKBOX CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 130, 7, 1, 200 END diff --git a/reactos/base/setup/reactos/lang/ru-RU.rc b/reactos/base/setup/reactos/lang/ru-RU.rc index 792b6250100..af3bb1e2cfb 100644 --- a/reactos/base/setup/reactos/lang/ru-RU.rc +++ b/reactos/base/setup/reactos/lang/ru-RU.rc @@ -7,7 +7,7 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "Вас приветствует программа установки ReactOS.", IDC_STARTTITLE, 115, 8, 195, 24 LTEXT "Установку ReactOS можно производить только загрузившись с этого диска! После перезапуска компьютера выберите загрузку с CD и начните установку ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Нажмите кнопку ""ЗавершитьW"" для выхода.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "Нажмите кнопку ""Завершить"" для выхода.", IDC_STATIC, 115, 169, 195, 17 END IDD_LANGSELPAGE DIALOGEX 0, 0, 317, 193 @@ -40,7 +40,7 @@ CAPTION "Установка ReactOS" FONT 8, "MS Shell Dlg" BEGIN CONTROL "Основные устройства", IDC_STATIC, "Button", BS_GROUPBOX, 10, 0, 297, 172 - LTEXT "Компьтер:", IDC_STATIC, 20, 15, 80, 10 + LTEXT "Компьютер:", IDC_STATIC, 20, 15, 80, 10 CONTROL "", IDC_COMPUTER, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 100, 15, 150, 80 LTEXT "Экран:", IDC_STATIC, 20, 35, 80, 10 CONTROL "", IDC_DISPLAY, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 100, 35, 150, 80 @@ -65,7 +65,7 @@ END IDD_PARTITION DIALOGEX 0, 0, 145, 90 STYLE WS_VISIBLE | WS_CAPTION -CAPTION "Create Partition" +CAPTION "Создать раздел на диске" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_UPDOWN1, "msctls_updown32", WS_VISIBLE, 104, 22, 9, 13 diff --git a/reactos/base/shell/explorer-new/lang/ru-RU.rc b/reactos/base/shell/explorer-new/lang/ru-RU.rc index b74e311e739..c6c9f6aebd6 100644 --- a/reactos/base/shell/explorer-new/lang/ru-RU.rc +++ b/reactos/base/shell/explorer-new/lang/ru-RU.rc @@ -7,19 +7,19 @@ BEGIN POPUP "" BEGIN MENUITEM SEPARATOR - MENUITEM "&Adjust Date/Time", ID_SHELL_CMD_ADJUST_DAT - MENUITEM "&Customize Notifications...", ID_SHELL_CMD_CUST_NOTIF + MENUITEM "&Настройка даты и времени", ID_SHELL_CMD_ADJUST_DAT + MENUITEM "&Настройка уведомлений...", ID_SHELL_CMD_CUST_NOTIF MENUITEM SEPARATOR - MENUITEM "Ca&scade Windows", ID_SHELL_CMD_CASCADE_WND - MENUITEM "Tile Windows &Horizontally", ID_SHELL_CMD_TILE_WND_H - MENUITEM "Tile Windows V&ertically", ID_SHELL_CMD_TILE_WND_V - MENUITEM "&Show the Desktop", ID_SHELL_CMD_SHOW_DESKTOP - MENUITEM "&Undo", ID_SHELL_CMD_UNDO_ACTION + MENUITEM "Расположить окна &каскадом", ID_SHELL_CMD_CASCADE_WND + MENUITEM "Расположить окна по &горизонтали", ID_SHELL_CMD_TILE_WND_H + MENUITEM "Расположить окна по &вертикали", ID_SHELL_CMD_TILE_WND_V + MENUITEM "Показать &рабочий стол", ID_SHELL_CMD_SHOW_DESKTOP + MENUITEM "&Отменить", ID_SHELL_CMD_UNDO_ACTION MENUITEM SEPARATOR - MENUITEM "Диспетчер задач", ID_SHELL_CMD_OPEN_TASKMGR + MENUITEM "Д&испетчер задач", ID_SHELL_CMD_OPEN_TASKMGR MENUITEM SEPARATOR MENUITEM "&Закрепить панель задач", ID_LOCKTASKBAR - MENUITEM "&Свойства", ID_SHELL_CMD_PROPERTIES + MENUITEM "Сво&йства", ID_SHELL_CMD_PROPERTIES END END @@ -123,11 +123,11 @@ END IDD_TASKBARPROP_ADVANCED DIALOGEX 0, 0, 252, 218 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Advanced" +CAPTION "Дополнительно" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - GROUPBOX "Advanced options", IDC_STATIC, 6, 6, 240, 121 - AUTOCHECKBOX "Show s&econds", IDC_TASKBARPROP_SECONDS, 13, 18, 200, 10 + GROUPBOX "Дополнительные настройки", IDC_STATIC, 6, 6, 240, 121 + AUTOCHECKBOX "Показывать с&екунды", IDC_TASKBARPROP_SECONDS, 13, 18, 200, 10 AUTOCHECKBOX "Отобра&жать образцы окон (эскизы)", IDC_TASKBARPROP_WNDPREV, 13, 31, 200, 10 END @@ -137,7 +137,7 @@ BEGIN IDS_PROPERTIES "&Свойства" IDS_OPEN_ALL_USERS "&Все пользователи" IDS_EXPLORE_ALL_USERS "&Обзор Всех пользователей" - IDS_STARTUP_ERROR "The system cannot start explorer because the registry is corrupted or unavailable." + IDS_STARTUP_ERROR "Система не может запустить Проводник, потому что данные реестра повреждены или недоступны." END STRINGTABLE diff --git a/reactos/dll/cpl/desk/lang/ru-RU.rc b/reactos/dll/cpl/desk/lang/ru-RU.rc index 9ad815d87ea..d1e1f9f7da5 100644 --- a/reactos/dll/cpl/desk/lang/ru-RU.rc +++ b/reactos/dll/cpl/desk/lang/ru-RU.rc @@ -43,17 +43,17 @@ CAPTION "Оформление" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass", WS_VISIBLE | WS_BORDER, 7, 7, 232, 120 - LTEXT "Visual Style", IDC_STATIC, 7, 130, 104, 9 + LTEXT "&Окна и кнопки:", IDC_STATIC, 7, 130, 104, 9 COMBOBOX IDC_APPEARANCE_VISUAL_STYLE, 7, 140, 134, 90, CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "Цветовая схема", IDC_STATIC, 7, 160, 104, 9 + LTEXT "&Цветовая схема:", IDC_STATIC, 7, 160, 104, 9 COMBOBOX IDC_APPEARANCE_COLORSCHEME, 7, 170, 134, 90, CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "Size", IDC_STATIC, 7, 190, 104, 9 + LTEXT "&Размер шрифта:", IDC_STATIC, 7, 190, 104, 9 COMBOBOX IDC_APPEARANCE_SIZE, 7, 200, 134, 90, CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&Эффекты...", IDC_APPEARANCE_EFFECTS, 182, 150, 56, 15 - PUSHBUTTON "Дополнительно", IDC_APPEARANCE_ADVANCED, 182, 170, 56, 15 + PUSHBUTTON "&Дополнительно", IDC_APPEARANCE_ADVANCED, 182, 170, 56, 15 END IDD_ADVAPPEARANCE DIALOGEX 0, 0, 250, 239 @@ -222,7 +222,7 @@ BEGIN IDS_MESSBOX "Окно сообщения" IDS_MESSTEXT "Сообщение" IDS_BUTTEXT "OK" - IDS_CLASSIC_THEME "Classic Theme" + IDS_CLASSIC_THEME "Классическая тема" END STRINGTABLE @@ -233,7 +233,7 @@ BEGIN IDS_ELEMENT_4 "Заголовок активных окон" IDS_ELEMENT_5 "Граница активных окон" IDS_ELEMENT_6 "Меню" - IDS_ELEMENT_7 "Выледенные элементы" + IDS_ELEMENT_7 "Выделенные элементы" IDS_ELEMENT_8 "Окна" IDS_ELEMENT_9 "Полоса прокрутки" IDS_ELEMENT_10 "Рельефные объекты" @@ -244,7 +244,7 @@ BEGIN IDS_ELEMENT_15 "Диалог" IDS_ELEMENT_16 "Полосы прокрутки" IDS_ELEMENT_17 "Рабочая область приложения" - IDS_ELEMENT_18 "Small captionbar" + IDS_ELEMENT_18 "Название панели" IDS_ELEMENT_19 "Интервал между значками (гор.)" IDS_ELEMENT_20 "Интервал между значками (верт.)" IDS_ELEMENT_21 "Всплывающая подсказка" diff --git a/reactos/dll/cpl/mmsys/lang/ru-RU.rc b/reactos/dll/cpl/mmsys/lang/ru-RU.rc index 1a35e37d6f2..5e197eb390c 100644 --- a/reactos/dll/cpl/mmsys/lang/ru-RU.rc +++ b/reactos/dll/cpl/mmsys/lang/ru-RU.rc @@ -233,7 +233,7 @@ BEGIN IDS_CPLNAME "Звук и аудиоустройства" IDS_CPLDESCRIPTION "Изменение звуковых схем вашего компьютера, настройка колонок и записывающих устройств." IDS_NO_SOUND "(Нет)" - IDS_NO_DEVICES "No Devices" + IDS_NO_DEVICES "Нет устройств" 5825 "Ошибка программы" 5826 "Закрыть программу" 5827 "Сигнал почти полной разрядки батарей" diff --git a/reactos/dll/win32/aclui/lang/ru-RU.rc b/reactos/dll/win32/aclui/lang/ru-RU.rc index 6663e137e0d..86af07471d6 100644 --- a/reactos/dll/win32/aclui/lang/ru-RU.rc +++ b/reactos/dll/win32/aclui/lang/ru-RU.rc @@ -7,7 +7,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "&Имя группы или пользователя:", -1, 7, 21, 105, 8 CONTROL "", IDC_PRINCIPALS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 31, 213, 52, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE - LTEXT "&Owner:", -1, 7, 7, 49, 8 + LTEXT "&Владелец:", -1, 7, 7, 49, 8 EDITTEXT IDC_OWNER, 63, 4, 156, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_READONLY PUSHBUTTON "До&бавить...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14 PUSHBUTTON "&Удалить", IDC_REMOVE_PRINCIPAL, 170, 87, 50, 14 From 25007a6e572b67d0cb4ed16316d7fc09f08486a0 Mon Sep 17 00:00:00 2001 From: Daniel Reimer <reimer.daniel@freenet.de> Date: Mon, 19 May 2014 18:14:30 +0000 Subject: [PATCH 76/81] [BROWSEUI] Russian Translation by Akhlamov Petr CORE-7981 #resolve #comment Committed after some build fixes, thx. P.S. Former commit was made by Alex Gorgurov svn path=/trunk/; revision=63374 --- reactos/dll/win32/browseui/browseui.rc | 3 + reactos/dll/win32/browseui/lang/ru-RU.rc | 256 +++++++++++++++++++++++ 2 files changed, 259 insertions(+) create mode 100644 reactos/dll/win32/browseui/lang/ru-RU.rc diff --git a/reactos/dll/win32/browseui/browseui.rc b/reactos/dll/win32/browseui/browseui.rc index 8e8b15aad20..cbb66703ce7 100644 --- a/reactos/dll/win32/browseui/browseui.rc +++ b/reactos/dll/win32/browseui/browseui.rc @@ -94,6 +94,9 @@ IDR_REGTREEOPTIONS REGISTRY "res/regtreeoptions.rgs" #ifdef LANGUAGE_RO_RO #include "lang/ro-RO.rc" #endif +#ifdef LANGUAGE_RU_RU + #include "lang/ru-RU.rc" +#endif #ifdef LANGUAGE_TR_TR #include "lang/tr-TR.rc" #endif diff --git a/reactos/dll/win32/browseui/lang/ru-RU.rc b/reactos/dll/win32/browseui/lang/ru-RU.rc new file mode 100644 index 00000000000..a798508c673 --- /dev/null +++ b/reactos/dll/win32/browseui/lang/ru-RU.rc @@ -0,0 +1,256 @@ +/* +* Copyright 2009 Andrew Hill +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version. +* +* This library 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +*/ + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +/* Menus */ + +IDM_CABINET_CONTEXTMENU MENUEX +BEGIN + POPUP "", 264,MFT_STRING,MFS_ENABLED + BEGIN + MENUITEM "&Обычные кнопки", IDM_TOOLBARS_STANDARDBUTTONS, MFT_STRING, MFS_ENABLED + MENUITEM "&Адресная строка", IDM_TOOLBARS_ADDRESSBAR, MFT_STRING, MFS_ENABLED + MENUITEM "&Ссылки", IDM_TOOLBARS_LINKSBAR, MFT_STRING, MFS_ENABLED + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "Закрепить панели инструментов", IDM_TOOLBARS_LOCKTOOLBARS, MFT_STRING, MFS_ENABLED + MENUITEM "&Настройка...", IDM_TOOLBARS_CUSTOMIZE, MFT_STRING, MFS_ENABLED + MENUITEM "&Text Labels", IDM_TOOLBARS_TEXTLABELS, MFT_STRING, MFS_ENABLED + MENUITEM "&Кнопка Переход", IDM_TOOLBARS_GOBUTTON, MFT_STRING, MFS_ENABLED + END +END + +IDM_CABINET_MAINMENU MENUEX +BEGIN + POPUP "&Файл", FCIDM_MENU_FILE + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "&Закрыть", IDM_FILE_CLOSE + END + POPUP "&Правка", FCIDM_MENU_EDIT + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + END + POPUP "&Вид", FCIDM_MENU_VIEW + BEGIN + POPUP "&Панели инструментов", IDM_VIEW_TOOLBARS + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + END + MENUITEM "Строка &состояния", IDM_VIEW_STATUSBAR + POPUP "&Панели обозревателя", IDM_VIEW_EXPLORERBAR + BEGIN + MENUITEM "&Поиск\tCtrl+E", IDM_EXPLORERBAR_SEARCH + MENUITEM "&Избранное\tCtrl+I", IDM_EXPLORERBAR_FAVORITES + MENUITEM "&Медиа", IDM_EXPLORERBAR_MEDIA + MENUITEM "&Журнал\tCtrl+H", IDM_EXPLORERBAR_HISTORY + MENUITEM "П&апки", IDM_EXPLORERBAR_FOLDERS + MENUITEM "", IDM_EXPLORERBAR_SEPARATOR + END + MENUITEM "", FCIDM_MENU_VIEW_SEP_OPTIONS, MFT_SEPARATOR + POPUP "П&ереход", FCIDM_MENU_EXPLORE + BEGIN + MENUITEM "&Назад\tAlt+Стрелка влево", IDM_GOTO_BACK + MENUITEM "&Вперед\tAlt+Стрелка вправо", IDM_GOTO_FORWARD + MENUITEM "&На один уровень вверх", IDM_GOTO_UPONELEVEL + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "&Домой\tAlt+Home", IDM_GOTO_HOMEPAGE + END + MENUITEM "&Обновить", IDM_VIEW_REFRESH + END + POPUP "И&збранное", FCIDM_MENU_FAVORITES + BEGIN + MENUITEM "&Добавить в избранное...", IDM_FAVORITES_ADDTOFAVORITES + MENUITEM "&Упорядочить избранное...", IDM_FAVORITES_ORGANIZEFAVORITES + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "(пусто)", IDM_FAVORITES_EMPTY + END + POPUP "&Сервис", FCIDM_MENU_TOOLS + BEGIN + MENUITEM "Подключить &сетевой диск...", IDM_TOOLS_MAPNETWORKDRIVE + MENUITEM "&Отключить сетевой диск...", IDM_TOOLS_DISCONNECTNETWORKDRIVE + MENUITEM "&Синхронизировать...", IDM_TOOLS_SYNCHRONIZE + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "&Свойства папки ...", IDM_TOOLS_FOLDEROPTIONS + END + POPUP "&Справка", FCIDM_MENU_HELP + BEGIN + MENUITEM "&Легальна ли эта копия ReactOS?", IDM_HELP_ISTHISCOPYLEGAL + MENUITEM "&О ReactOS", IDM_HELP_ABOUT + END +END + +/* Dialogs */ + +IDD_CUSTOMIZETOOLBAREX DIALOGEX 0, 0, 357, 33 +STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + LTEXT "Te&xt options:", -1, 4, 2, 48, 15 + COMBOBOX IDC_TEXTOPTIONS, 52, 0, 123, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Ico&n options:", -1, 4, 20, 48, 15 + COMBOBOX IDC_ICONOPTIONS, 52, 18, 123, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +/* Accelerators */ + +IDR_ACCELERATORS ACCELERATORS +BEGIN + VK_F5, IDM_VIEW_REFRESH, VIRTKEY, NOINVERT + VK_F5, IDM_VIEW_REFRESH, VIRTKEY, CONTROL, NOINVERT + "R", IDM_VIEW_REFRESH, VIRTKEY, CONTROL, NOINVERT + VK_HOME, IDM_GOTO_HOMEPAGE, VIRTKEY, ALT, NOINVERT + "D", IDM_FAVORITES_ADDTOFAVORITES, VIRTKEY, CONTROL, NOINVERT + "B", IDM_FAVORITES_ORGANIZEFAVORITES, VIRTKEY, CONTROL, NOINVERT + VK_LEFT, IDM_GOTO_BACK, VIRTKEY, ALT + VK_RIGHT, IDM_GOTO_FORWARD, VIRTKEY, ALT + "W", IDM_FILE_CLOSE, VIRTKEY, CONTROL, NOINVERT + "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT + "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT + "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT +END + +/* Strings */ + +STRINGTABLE +BEGIN + 800 "Contains commands for manipulating the selected items." +END + +STRINGTABLE +BEGIN + 864 "Contains edit commands." +END + +STRINGTABLE +BEGIN + 928 "Contains commands for manipulating the view." +END + +STRINGTABLE +BEGIN + 992 "Contains tools commands." +END + +STRINGTABLE +BEGIN + 1056 "Contains commands for displaying Help." +END + +STRINGTABLE +BEGIN + 9025 "Закрыть окно." + 9026 "Goes up one level." +END + +STRINGTABLE +BEGIN + 9121 "Подключить сетевой диск." + 9122 "Отключить сетевой диск." +END + +STRINGTABLE +BEGIN + 9250 "Displays program information, version number, and copyright." + 9252 "Displays information for debugging." +END + +STRINGTABLE +BEGIN + 9281 "Перейти на предыдущую страницу." + 9282 "Перейти на следующую страницу." + 9283 "Enables you to change settings." + 9285 "Перейти на домашнюю страницу." +END + +STRINGTABLE +BEGIN + 9362 "Открыть папку Избранное." + 9363 "Добавить в избранное." +END + +STRINGTABLE +BEGIN + 9505 "Показать или спрятать панели." + 9506 "Отобразить строку состояния." + 9508 "Отобразить обычные кнопки." + 9509 "Отобразить адресную строку." + 9510 "Displays the Quick Links bar." + 9516 "Закрепить панель инструментов." +END + +STRINGTABLE +BEGIN + 9533 "Настройка панели инструментов." +END + +STRINGTABLE +BEGIN + 9552 "Shows or hides an Explorer bar." + 9553 "Shows the Search bar." + 9554 "Shows the Favorites bar." + 9555 "Shows the History bar." + 9557 "Shows the Folders bar." + 9559 "Shows the Media Bar." +END + +STRINGTABLE +BEGIN + IDS_SMALLICONS "Мелкие значки" + IDS_LARGEICONS "Крупные значки" + IDS_SHOWTEXTLABELS "Текст кнопки" +END + +STRINGTABLE +BEGIN + IDS_NOTEXTLABELS "Без подписей к кнопкам" + IDS_SELECTIVETEXTONRIGHT "Выборочно текст справа" +END + +STRINGTABLE +BEGIN + IDS_GOBUTTONLABEL "|Переход||" + IDS_GOBUTTONTIPTEMPLATE "Перейти в ""%s""" +END + +STRINGTABLE +BEGIN + IDS_SEARCHLABEL "Поиск" + IDS_ADDRESSBANDLABEL "А&дрес" +END + +STRINGTABLE +BEGIN + IDS_FOLDERSLABEL "Папки" +END + +STRINGTABLE +BEGIN + IDS_HISTORYTEXT "&История\tCtrl+H" +END + +STRINGTABLE +BEGIN + IDS_UP "Вверх" +END + +STRINGTABLE +BEGIN + IDS_BACK "Назад" + IDS_FORWARD "Вперед" +END From ffbeaececb511ae37ab51790f1f4b8d531228c4e Mon Sep 17 00:00:00 2001 From: Daniel Reimer <reimer.daniel@freenet.de> Date: Mon, 19 May 2014 18:26:26 +0000 Subject: [PATCH 77/81] [WINED3DCFG] Fixed two errors in the RCs. Shortened a String of ... my ... translation. svn path=/trunk/; revision=63375 --- reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc | 4 ++-- reactos/dll/cpl/wined3dcfg/lang/de-DE.rc | 6 +++--- reactos/dll/cpl/wined3dcfg/lang/en-US.rc | 2 +- reactos/dll/cpl/wined3dcfg/lang/he-IL.rc | 4 ++-- reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc | 4 ++-- reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc | 4 ++-- reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc | 4 ++-- reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc b/reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc index 5aeef2cac91..547063e5f35 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/cs-CZ.rc @@ -12,11 +12,11 @@ FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Shaders", -1, 5, 25, 230, 80 - LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + LTEXT "Enable GLSL:", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + LTEXT "Maximum PS Level:", -1, 15, 72, 80, 10 COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST diff --git a/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc b/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc index c69db3f1e34..c6efbbb3684 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/de-DE.rc @@ -7,7 +7,7 @@ FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Shader", -1, 5, 25, 230, 80 - LTEXT "GLSL aktivieren", -1, 15, 42, 80, 10 + LTEXT "GLSL aktivieren:", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximaler GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST @@ -18,13 +18,13 @@ BEGIN GROUPBOX "Darstellung", -1, 5, 110, 230, 110 LTEXT "Multisampling:", -1, 15, 127, 80, 10 COMBOBOX IDC_MULTISAMPLING, 95, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Strikte Zeichenreihenfolge:", -1, 15, 142, 80, 10 + LTEXT "Strikte Zeichenfolge:", -1, 15, 142, 80, 10 COMBOBOX IDC_STRICTDRAWORDERING, 95, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Offscreen Rendering:", -1, 15, 157, 80, 10 COMBOBOX IDC_OFFSCREEN, 95, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Immer Offscreen:", -1, 15, 172, 72, 10, SS_LEFT COMBOBOX IDC_ALWAYSOFFSCREEN, 95, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Videospeicher-Gre:", -1, 15, 187, 72, 10, SS_LEFT + LTEXT "Videospeicher-Größe:", -1, 15, 187, 72, 10, SS_LEFT COMBOBOX IDC_VIDMEMSIZE, 95, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "DirectDraw Renderer:", -1, 15, 202, 72, 10, SS_LEFT COMBOBOX IDC_DDRENDERER, 95, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST diff --git a/reactos/dll/cpl/wined3dcfg/lang/en-US.rc b/reactos/dll/cpl/wined3dcfg/lang/en-US.rc index cbeccc3bf90..ba1ea497b00 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/en-US.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/en-US.rc @@ -7,7 +7,7 @@ FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Shaders", -1, 5, 25, 230, 80 - LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + LTEXT "Enable GLSL:", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST diff --git a/reactos/dll/cpl/wined3dcfg/lang/he-IL.rc b/reactos/dll/cpl/wined3dcfg/lang/he-IL.rc index ebf6a64194b..2b80ded98fc 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/he-IL.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/he-IL.rc @@ -7,11 +7,11 @@ FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Shaders", -1, 5, 25, 230, 80 - LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + LTEXT "Enable GLSL:", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + LTEXT "Maximum PS Level:", -1, 15, 72, 80, 10 COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST diff --git a/reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc b/reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc index 3a6a5f39b1d..c99c1e78e30 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/pl-PL.rc @@ -13,11 +13,11 @@ FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Shaders", -1, 5, 25, 230, 80 - LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + LTEXT "Enable GLSL:", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + LTEXT "Maximum PS Level:", -1, 15, 72, 80, 10 COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST diff --git a/reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc b/reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc index f778b43fdd4..8f89c1b0af0 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/ro-RO.rc @@ -9,11 +9,11 @@ FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Shaders", -1, 5, 25, 230, 80 - LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + LTEXT "Enable GLSL:", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + LTEXT "Maximum PS Level:", -1, 15, 72, 80, 10 COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST diff --git a/reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc b/reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc index 7a91a0a9810..3b77ad0faa8 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/sq-AL.rc @@ -11,11 +11,11 @@ FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Shaders", -1, 5, 25, 230, 80 - LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + LTEXT "Enable GLSL:", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + LTEXT "Maximum PS Level:", -1, 15, 72, 80, 10 COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST diff --git a/reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc b/reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc index b5c4b1c0857..4d4ac1c9af4 100644 --- a/reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc +++ b/reactos/dll/cpl/wined3dcfg/lang/tr-TR.rc @@ -9,11 +9,11 @@ FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Shaders", -1, 5, 25, 230, 80 - LTEXT "Enable GLSL", -1, 15, 42, 80, 10 + LTEXT "Enable GLSL:", -1, 15, 42, 80, 10 COMBOBOX IDC_GLSL, 95, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum GS Level:", -1, 15, 57, 80, 10 COMBOBOX IDC_GSLEVEL, 95, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Maximum PS level:", -1, 15, 72, 80, 10 + LTEXT "Maximum PS Level:", -1, 15, 72, 80, 10 COMBOBOX IDC_PSLEVEL, 95, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST LTEXT "Maximum VS Level:", -1, 15, 87, 80, 10 COMBOBOX IDC_VSLEVEL, 95, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST From 9e5dfae220bd67227368a086c035b02b9be9ecfc Mon Sep 17 00:00:00 2001 From: Kamil Hornicek <kamil.hornicek@reactos.org> Date: Mon, 19 May 2014 20:28:35 +0000 Subject: [PATCH 78/81] [CMAKE/MSVC] - define _ALLOW_KEYWORD_MACROS for VS11 too svn path=/trunk/; revision=63376 --- reactos/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/CMakeLists.txt b/reactos/CMakeLists.txt index 894af650fb2..d4736894667 100644 --- a/reactos/CMakeLists.txt +++ b/reactos/CMakeLists.txt @@ -63,7 +63,7 @@ if(NOT CMAKE_CROSSCOMPILING) if(ARCH STREQUAL "i386") add_definitions(/D_X86_ /DWIN32 /D_WINDOWS) endif() - if(MSVC_VERSION GREATER 1799) + if(MSVC_VERSION GREATER 1699) add_definitions(/D_ALLOW_KEYWORD_MACROS) endif() add_definitions(/Dinline=__inline) From 74f8d131acbe439b50a04c68ad59ccdf409bd655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= <hermes.belusca-maito@reactos.org> Date: Mon, 19 May 2014 21:12:35 +0000 Subject: [PATCH 79/81] [NTVDM]: Fix INT 15h, AH=C0h. svn path=/trunk/; revision=63377 --- reactos/subsystems/ntvdm/bios/bios32/bios32.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/ntvdm/bios/bios32/bios32.c b/reactos/subsystems/ntvdm/bios/bios32/bios32.c index 6a4aaba2801..34f6b61d6f3 100644 --- a/reactos/subsystems/ntvdm/bios/bios32/bios32.c +++ b/reactos/subsystems/ntvdm/bios/bios32/bios32.c @@ -116,8 +116,9 @@ static VOID WINAPI BiosMiscService(LPWORD Stack) case 0xC0: { /* Return the BIOS ROM Configuration Table address in ES:BX */ - setES(HIWORD(Bct)); - setBX(LOWORD(Bct)); + // The BCT is found at F000:E6F5 for 100% compatible BIOSes. + setES(BIOS_SEGMENT); + setBX(0xE6F5); /* Call successful; clear CF */ setAH(0x00); From a3fe90d0d0d5344e57c4719cef541201eccd7bce Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic <aandrejevic@reactos.org> Date: Mon, 19 May 2014 22:40:36 +0000 Subject: [PATCH 80/81] [NTVDM] Properly repeat the GetNextVDMCommand request. Using "continue" there will not work if the application has been started by a double click, since in that case AcceptCommands is FALSE. svn path=/trunk/; revision=63379 --- reactos/subsystems/ntvdm/ntvdm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reactos/subsystems/ntvdm/ntvdm.c b/reactos/subsystems/ntvdm/ntvdm.c index d0e1293cec7..9f630e18730 100644 --- a/reactos/subsystems/ntvdm/ntvdm.c +++ b/reactos/subsystems/ntvdm/ntvdm.c @@ -435,6 +435,7 @@ CommandThreadProc(LPVOID Parameter) if (First) CommandInfo.VDMState |= VDM_FLAG_FIRST_TASK; +Command: if (!GetNextVDMCommand(&CommandInfo)) { if (CommandInfo.EnvLen > EnvSize) @@ -443,7 +444,8 @@ CommandThreadProc(LPVOID Parameter) EnvSize = CommandInfo.EnvLen; Env = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, Env, EnvSize); - continue; + /* Repeat the request */ + goto Command; } break; From 8546e5f6459fdda1a219fe6bafd8f9ba9311f374 Mon Sep 17 00:00:00 2001 From: James Tabor <james.tabor@reactos.org> Date: Tue, 20 May 2014 03:40:42 +0000 Subject: [PATCH 81/81] [Win32k] - Fix load menu callback. Use it for loading system menus. - Sync in more wine code, fix sub-menu arrow drawing. See WinMerge. - Miscellaneous code changes. svn path=/trunk/; revision=63380 --- reactos/win32ss/include/callback.h | 1 + reactos/win32ss/user/ntuser/callback.c | 2 +- reactos/win32ss/user/ntuser/window.c | 34 +- reactos/win32ss/user/user32/windows/menu.c | 611 +++++++++++---------- 4 files changed, 342 insertions(+), 306 deletions(-) diff --git a/reactos/win32ss/include/callback.h b/reactos/win32ss/include/callback.h index 2f44a3ec2da..b193c277fcb 100644 --- a/reactos/win32ss/include/callback.h +++ b/reactos/win32ss/include/callback.h @@ -81,6 +81,7 @@ typedef struct _EVENTPROC_CALLBACK_ARGUMENTS typedef struct _LOADMENU_CALLBACK_ARGUMENTS { HINSTANCE hModule; + LPCWSTR InterSource; WCHAR MenuName[1]; } LOADMENU_CALLBACK_ARGUMENTS, *PLOADMENU_CALLBACK_ARGUMENTS; diff --git a/reactos/win32ss/user/ntuser/callback.c b/reactos/win32ss/user/ntuser/callback.c index 3ed610f8bb4..6bd8060c9d3 100644 --- a/reactos/win32ss/user/ntuser/callback.c +++ b/reactos/win32ss/user/ntuser/callback.c @@ -884,7 +884,7 @@ co_IntCallLoadMenu( HINSTANCE hModule, if (pMenuName->Length) RtlCopyMemory(&Common->MenuName, pMenuName->Buffer, pMenuName->Length); else - RtlCopyMemory(&Common->MenuName, &pMenuName->Buffer, sizeof(WCHAR)); + Common->InterSource = pMenuName->Buffer; ResultPointer = NULL; ResultLength = sizeof(LRESULT); diff --git a/reactos/win32ss/user/ntuser/window.c b/reactos/win32ss/user/ntuser/window.c index 6259742e623..b5386d76102 100644 --- a/reactos/win32ss/user/ntuser/window.c +++ b/reactos/win32ss/user/ntuser/window.c @@ -901,7 +901,9 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu) PMENU Menu, NewMenu = NULL, SysMenu = NULL, ret = NULL; PTHREADINFO W32Thread; HMENU hNewMenu, hSysMenu; + ROSMENUITEMINFO ItemInfoSet = {0}; ROSMENUITEMINFO ItemInfo = {0}; + UNICODE_STRING MenuName; if(bRevert) { @@ -952,14 +954,21 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu) } SysMenu->fFlags |= MNF_SYSDESKMN; SysMenu->hWnd = Window->head.h; - hNewMenu = co_IntLoadSysMenuTemplate(); + //hNewMenu = co_IntLoadSysMenuTemplate(); //if ( Window->ExStyle & WS_EX_MDICHILD ) - //hNewMenu = co_IntCallLoadMenu( NULL, L"SYSMENUMDI"); - // else - //hNewMenu = co_IntCallLoadMenu( NULL, L"SYSMENU"); - // Do the rest in here. + //{ + // RtlInitUnicodeString( &MenuName, L"SYSMENUMDI"); + // hNewMenu = co_IntCallLoadMenu( hModClient, &MenuName); + //} + //else + { + RtlInitUnicodeString( &MenuName, L"SYSMENU"); + hNewMenu = co_IntCallLoadMenu( hModClient, &MenuName); + //ERR("%wZ\n",&MenuName); + } if(!hNewMenu) { + ERR("No Menu!!\n"); IntReleaseMenuObject(SysMenu); UserDestroyMenu(hSysMenu); return NULL; @@ -972,6 +981,21 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu) return NULL; } + // Do the rest in here. + + Menu->fFlags |= MNS_CHECKORBMP | MNF_SYSDESKMN | MNF_POPUP; + + ItemInfoSet.cbSize = sizeof( MENUITEMINFOW); + ItemInfoSet.fMask = MIIM_BITMAP; + ItemInfoSet.hbmpItem = HBMMENU_POPUP_CLOSE; + IntMenuItemInfo(Menu, SC_CLOSE, FALSE, &ItemInfoSet, TRUE, NULL); + ItemInfoSet.hbmpItem = HBMMENU_POPUP_RESTORE; + IntMenuItemInfo(Menu, SC_RESTORE, FALSE, &ItemInfoSet, TRUE, NULL); + ItemInfoSet.hbmpItem = HBMMENU_POPUP_MAXIMIZE; + IntMenuItemInfo(Menu, SC_MAXIMIZE, FALSE, &ItemInfoSet, TRUE, NULL); + ItemInfoSet.hbmpItem = HBMMENU_POPUP_MINIMIZE; + IntMenuItemInfo(Menu, SC_MINIMIZE, FALSE, &ItemInfoSet, TRUE, NULL); + NewMenu = IntCloneMenu(Menu); if(NewMenu) { diff --git a/reactos/win32ss/user/user32/windows/menu.c b/reactos/win32ss/user/user32/windows/menu.c index 08e33325c31..5298c6c90ac 100644 --- a/reactos/win32ss/user/user32/windows/menu.c +++ b/reactos/win32ss/user/user32/windows/menu.c @@ -39,6 +39,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(menu); #define TPM_BUTTONDOWN 0x40000000 /* menu was clicked before tracking */ #define TPM_POPUPMENU 0x20000000 /* menu is a popup menu */ + /* Space between 2 columns */ +#define MENU_COL_SPACE 4 + /* top and bottom margins for popup menus */ #define MENU_TOP_MARGIN 3 #define MENU_BOTTOM_MARGIN 2 @@ -495,7 +498,7 @@ MenuGetRosMenuItemInfo(HMENU Menu, UINT Index, PROSMENUITEMINFO ItemInfo) ItemInfo->Rect.right = pItem->cxItem; // Do this for now...... ItemInfo->Rect.bottom = pItem->cyItem; ItemInfo->dxTab = pItem->dxTab; - ItemInfo->lpstr = pItem->lpstr.Buffer; + ItemInfo->lpstr = pItem->lpstr.Buffer ? DesktopPtrToUser(pItem->lpstr.Buffer) : NULL; ItemInfo->maxBmpSize.cx = pItem->cxBmp; ItemInfo->maxBmpSize.cy = pItem->cyBmp; @@ -870,42 +873,42 @@ static UINT FASTCALL MENU_FindItemByKey(HWND WndOwner, HMENU hmenu, TRACE("\tlooking for '%c' (0x%02x) in [%p]\n", (char)Key, Key, hmenu ); if (!IsMenu( hmenu )) hmenu = GetSubMenu( get_win_sys_menu(WndOwner), 0); - if (hmenu) - { - MENU *menu = MENU_GetMenu( hmenu ); - ITEM *item = menu->rgItems ? DesktopPtrToUser(menu->rgItems) : NULL; + if (hmenu) + { + MENU *menu = MENU_GetMenu( hmenu ); + ITEM *item = menu->rgItems ? DesktopPtrToUser(menu->rgItems) : NULL; - if( !ForceMenuChar ) - { - UINT i; - BOOL cjk = GetSystemMetrics( SM_DBCSENABLED ); + if ( !ForceMenuChar ) + { + UINT i; + BOOL cjk = GetSystemMetrics( SM_DBCSENABLED ); - for (i = 0; i < menu->cItems; i++, item++) - { - LPWSTR text = item->Xlpstr ? DesktopPtrToUser(item->Xlpstr) : NULL; - if( text) - { - const WCHAR *p = text - 2; - do - { - const WCHAR *q = p + 2; - p = strchrW (q, '&'); - if (!p && cjk) p = strchrW (q, '\036'); /* Japanese Win16 */ - } - while (p != NULL && p [1] == '&'); - if (p && (toupperW(p[1]) == toupperW(Key))) return i; - } - } - } + for (i = 0; i < menu->cItems; i++, item++) + { + LPWSTR text = item->Xlpstr ? DesktopPtrToUser(item->Xlpstr) : NULL; + if( text) + { + const WCHAR *p = text - 2; + do + { + const WCHAR *q = p + 2; + p = strchrW (q, '&'); + if (!p && cjk) p = strchrW (q, '\036'); /* Japanese Win16 */ + } + while (p != NULL && p [1] == '&'); + if (p && (toupperW(p[1]) == toupperW(Key))) return i; + } + } + } - Flags |= menu->fFlags & MNF_POPUP ? MF_POPUP : 0; - Flags |= menu->fFlags & MNF_SYSDESKMN ? MF_SYSMENU : 0; + Flags |= menu->fFlags & MNF_POPUP ? MF_POPUP : 0; + Flags |= menu->fFlags & MNF_SYSDESKMN ? MF_SYSMENU : 0; - MenuChar = SendMessageW(WndOwner, WM_MENUCHAR, + MenuChar = SendMessageW( WndOwner, WM_MENUCHAR, MAKEWPARAM(Key, Flags), (LPARAM) hmenu); - if (HIWORD(MenuChar) == MNC_EXECUTE) return LOWORD(MenuChar); - if (HIWORD(MenuChar) == MNC_CLOSE) return (UINT)(-2); - } + if (HIWORD(MenuChar) == MNC_EXECUTE) return LOWORD(MenuChar); + if (HIWORD(MenuChar) == MNC_CLOSE) return (UINT)(-2); + } return (UINT)(-1); } @@ -1205,20 +1208,20 @@ static void FASTCALL MenuCalcItemSize( HDC hdc, PROSMENUITEMINFO lpitem, PROSMEN hfontOld = SelectObject( hdc, hMenuFontBold ); } if (menuBar) { - txtheight = DrawTextW( hdc, lpitem->dwTypeData, -1, &rc, + txtheight = DrawTextW( hdc, lpitem->lpstr, -1, &rc, DT_SINGLELINE|DT_CALCRECT); lpitem->Rect.right += rc.right - rc.left; itemheight = max( max( itemheight, txtheight), GetSystemMetrics( SM_CYMENU) - 1); lpitem->Rect.right += 2 * MenuCharSize.cx; } else { - if ((p = strchrW( lpitem->dwTypeData, '\t' )) != NULL) { + if ((p = strchrW( lpitem->lpstr, '\t' )) != NULL) { RECT tmprc = rc; LONG tmpheight; - int n = (int)( p - lpitem->dwTypeData); + int n = (int)( p - lpitem->lpstr); /* Item contains a tab (only meaningful in popup menus) */ /* get text size before the tab */ - txtheight = DrawTextW( hdc, lpitem->dwTypeData, n, &rc, + txtheight = DrawTextW( hdc, lpitem->lpstr, n, &rc, DT_SINGLELINE|DT_CALCRECT); txtwidth = rc.right - rc.left; p += 1; /* advance past the Tab */ @@ -1230,7 +1233,7 @@ static void FASTCALL MenuCalcItemSize( HDC hdc, PROSMENUITEMINFO lpitem, PROSMEN txtwidth += MenuCharSize.cx + /* space for the tab */ tmprc.right - tmprc.left; /* space for the short cut */ } else { - txtheight = DrawTextW( hdc, lpitem->dwTypeData, -1, &rc, + txtheight = DrawTextW( hdc, lpitem->lpstr, -1, &rc, DT_SINGLELINE|DT_CALCRECT); txtwidth = rc.right - rc.left; lpitem->dxTab += txtwidth; @@ -1287,15 +1290,18 @@ static void FASTCALL MenuPopupMenuCalcSize(PROSMENUINFO MenuInfo, HWND WndOwner) MenuInfo->cxTextAlign = 0; MenuInitRosMenuItemInfo(&lpitem); + //MenuGetRosMenuItemInfo(MenuInfo->Self, start, &lpitem); while (start < MenuInfo->cItems) { + //lpitem = &lppop->items[start]; orgX = maxX; - orgY = 2; + //if( lpitem.fType & (MF_MENUBREAK | MF_MENUBARBREAK)) + // orgX += MENU_COL_SPACE; + orgY = 2;//MENU_TOP_MARGIN; maxTab = maxTabWidth = 0; - /* Parse items until column break or end of menu */ - for (i = start; i < MenuInfo->cItems; i++) + for (i = start; i < MenuInfo->cItems; i++)//, lpitem++) { if (! MenuGetRosMenuItemInfo(MenuInfo->Self, i, &lpitem)) { @@ -1306,7 +1312,6 @@ static void FASTCALL MenuPopupMenuCalcSize(PROSMENUINFO MenuInfo, HWND WndOwner) if (i != start && (lpitem.fType & (MF_MENUBREAK | MF_MENUBARBREAK))) break; - if( lpitem.lpstr && lpitem.hbmpItem) textandbmp = TRUE; MenuCalcItemSize(hdc, &lpitem, MenuInfo, WndOwner, orgX, orgY, FALSE, textandbmp); if (! MenuSetRosMenuItemInfo(MenuInfo->Self, i, &lpitem)) @@ -1315,36 +1320,33 @@ static void FASTCALL MenuPopupMenuCalcSize(PROSMENUINFO MenuInfo, HWND WndOwner) MenuSetRosMenuInfo(MenuInfo); return; } -// Not sure here,, The patch from wine removes this. -// if ((lpitem.fType & MF_MENUBARBREAK) != 0) -// { -// OrgX++; -// } + maxX = max(maxX, lpitem.Rect.right); orgY = lpitem.Rect.bottom; - if ((lpitem.lpstr) && lpitem.dxTab ) + if (IS_STRING_ITEM(lpitem.fType) && lpitem.dxTab ) { maxTab = max( maxTab, lpitem.dxTab ); maxTabWidth = max(maxTabWidth, lpitem.Rect.right - lpitem.dxTab); } - } + if( lpitem.lpstr && lpitem.hbmpItem) textandbmp = TRUE; + } /* Finish the column (set all items to the largest width found) */ - maxX = max( maxX, maxTab + maxTabWidth ); - while (start < i) - { - if (MenuGetRosMenuItemInfo(MenuInfo->Self, start, &lpitem)) - { - lpitem.Rect.right = maxX; - if ((lpitem.lpstr) && 0 != lpitem.dxTab) - { - lpitem.dxTab = maxTab; - } - MenuSetRosMenuItemInfo(MenuInfo->Self, start, &lpitem); - } - start++; - } - MenuInfo->cyMenu = max(MenuInfo->cyMenu, orgY); + maxX = max( maxX, maxTab + maxTabWidth ); + while (start < i) + { + if (MenuGetRosMenuItemInfo(MenuInfo->Self, start, &lpitem)) + { + lpitem.Rect.right = maxX; + if (IS_STRING_ITEM(lpitem.fType) && lpitem.dxTab) + { + lpitem.dxTab = maxTab; + } + MenuSetRosMenuItemInfo(MenuInfo->Self, start, &lpitem); + } + start++; + } + MenuInfo->cyMenu = max(MenuInfo->cyMenu, orgY); } MenuInfo->cxMenu = maxX; @@ -1447,7 +1449,7 @@ static void FASTCALL MenuMenuBarCalcSize( HDC hdc, LPRECT lprect, } /* FIXME: Is this really needed? */ /*NO! it is not needed, why make the -HBMMENU_MBAR_CLOSE, MINIMIZE & RESTORE, look the same size as the menu bar! */ + HBMMENU_MBAR_CLOSE, MINIMIZE & RESTORE, look the same size as the menu bar! */ #if 0 /* Finish the line (set all items to the largest height found) */ while (start < i) @@ -1480,30 +1482,21 @@ HBMMENU_MBAR_CLOSE, MINIMIZE & RESTORE, look the same size as the menu bar! */ orgY = ItemInfo.Rect.top; orgX = lprect->right; for (i = MenuInfo->cItems - 1; helpPos <= i; i--) - { - if (i < helpPos) - { - break; /* done */ - } - if (ItemInfo.Rect.top != orgY) - { - break; /* Other line */ - } - if (orgX <= ItemInfo.Rect.right) - { - break; /* Too far right already */ - } + { + if (i < helpPos) break; /* done */ + if (ItemInfo.Rect.top != orgY) break; /* Other line */ + if (orgX <= ItemInfo.Rect.right) break; /* Too far right already */ ItemInfo.Rect.left += orgX - ItemInfo.Rect.right; ItemInfo.Rect.right = orgX; orgX = ItemInfo.Rect.left; MenuSetRosMenuItemInfo(MenuInfo->Self, i, &ItemInfo); if (helpPos + 1 <= i && ! MenuGetRosMenuItemInfo(MenuInfo->Self, i - 1, &ItemInfo)) - { + { MenuCleanupRosMenuItemInfo(&ItemInfo); return; - } - } + } + } } MenuCleanupRosMenuItemInfo(&ItemInfo); @@ -1527,7 +1520,6 @@ MENU_DrawScrollArrows(PROSMENUINFO lppop, HDC hdc) arrow_bitmap_width = bmp.bmWidth; arrow_bitmap_height = bmp.bmHeight; - if (lppop->iTop) hOrigBitmap = SelectObject(hdcMem, get_up_arrow_bitmap()); else @@ -1553,6 +1545,26 @@ MENU_DrawScrollArrows(PROSMENUINFO lppop, HDC hdc) DeleteDC(hdcMem); } +/*********************************************************************** + * draw_popup_arrow + * + * Draws the popup-menu arrow. + */ +static void draw_popup_arrow( HDC hdc, RECT rect, UINT arrow_bitmap_width, + UINT arrow_bitmap_height) +{ + HDC hdcMem = CreateCompatibleDC( hdc ); + HBITMAP hOrigBitmap; + + hOrigBitmap = SelectObject( hdcMem, get_arrow_bitmap() ); + BitBlt( hdc, rect.right - arrow_bitmap_width - 1, + (rect.top + rect.bottom - arrow_bitmap_height) / 2, + arrow_bitmap_width, arrow_bitmap_height, + hdcMem, 0, 0, SRCCOPY ); + SelectObject( hdcMem, hOrigBitmap ); + DeleteDC( hdcMem ); +} + /*********************************************************************** * MenuDrawMenuItem * @@ -1565,11 +1577,19 @@ static void FASTCALL MenuDrawMenuItem(HWND hWnd, PROSMENUINFO MenuInfo, HWND Wnd PWCHAR Text; BOOL flat_menu = FALSE; int bkgnd; + UINT arrow_bitmap_width = 0, arrow_bitmap_height = 0; PWND Wnd = ValidateHwndNoErr(hWnd); if (!Wnd) return; + if (!menuBar) { + BITMAP bmp; + GetObjectW( get_arrow_bitmap(), sizeof(bmp), &bmp ); + arrow_bitmap_width = bmp.bmWidth; + arrow_bitmap_height = bmp.bmHeight; + } + if (lpitem->fType & MF_SYSMENU) { if ( (Wnd->style & WS_MINIMIZE)) @@ -1649,10 +1669,12 @@ static void FASTCALL MenuDrawMenuItem(HWND hWnd, PROSMENUINFO MenuInfo, HWND Wnd /* Draw the popup-menu arrow */ if (lpitem->hSubMenu) { - RECT rectTemp; + /* RECT rectTemp; CopyRect(&rectTemp, &rect); rectTemp.left = rectTemp.right - GetSystemMetrics(SM_CXMENUCHECK); DrawFrameControl(hdc, &rectTemp, DFC_MENU, DFCS_MENUARROW); + */ + draw_popup_arrow( hdc, rect, arrow_bitmap_width, arrow_bitmap_height); } return; } @@ -1687,7 +1709,7 @@ static void FASTCALL MenuDrawMenuItem(HWND hWnd, PROSMENUINFO MenuInfo, HWND Wnd HPEN oldPen; RECT rc = rect; - rc.left -= 3; + rc.left -= 3;//MENU_COL_SPACE / 2 + 1; rc.top = 3; rc.bottom = Height - 3; if (flat_menu) @@ -1764,15 +1786,22 @@ static void FASTCALL MenuDrawMenuItem(HWND hWnd, PROSMENUINFO MenuInfo, HWND Wnd else if (lpitem->fState & MF_CHECKED) /* standard bitmaps */ { RECT r; + //HBITMAP bm = CreateBitmap( check_bitmap_width, check_bitmap_height, 1, 1, NULL ); + //HDC hdcMem = CreateCompatibleDC( hdc ); + //SelectObject( hdcMem, bm ); + //SetRect( &r, 0, 0, check_bitmap_width, check_bitmap_height); CopyRect(&r, &rect); r.right = r.left + GetSystemMetrics(SM_CXMENUCHECK); DrawFrameControl( hdc, &r, DFC_MENU, (lpitem->fType & MFT_RADIOCHECK) ? DFCS_MENUBULLET : DFCS_MENUCHECK); + //BitBlt( hdc, rc.left, (y - r.bottom) / 2, r.right, r.bottom, hdcMem, 0, 0, SRCCOPY ); + //DeleteDC( hdcMem ); + //DeleteObject( bm ); checked = TRUE; } } - if ( lpitem->hbmpItem ) + if ( lpitem->hbmpItem )//&& !( checked && (MenuInfo->dwStyle & MNS_CHECKORBMP))) { RECT bmpRect; CopyRect(&bmpRect, &rect); @@ -1780,26 +1809,36 @@ static void FASTCALL MenuDrawMenuItem(HWND hWnd, PROSMENUINFO MenuInfo, HWND Wnd bmpRect.left += check_bitmap_width + 2; if (!(checked && (MenuInfo->dwStyle & MNS_CHECKORBMP))) { + //POINT origorg; bmpRect.right = bmpRect.left + lpitem->maxBmpSize.cx; + /* some applications make this assumption on the DC's origin */ + //SetViewportOrgEx( hdc, rect.left, rect.top, &origorg); MenuDrawBitmapItem(hdc, lpitem, &bmpRect, MenuInfo, WndOwner, odaction, menuBar); + //SetViewportOrgEx( hdc, origorg.x, origorg.y, NULL); } } /* Draw the popup-menu arrow */ if (lpitem->hSubMenu) { - RECT rectTemp; + /* RECT rectTemp; CopyRect(&rectTemp, &rect); rectTemp.left = rectTemp.right - GetSystemMetrics(SM_CXMENUCHECK); DrawFrameControl(hdc, &rectTemp, DFC_MENU, DFCS_MENUARROW); + */ + draw_popup_arrow( hdc, rect, arrow_bitmap_width, arrow_bitmap_height); } rect.left += 4; if( !(MenuInfo->dwStyle & MNS_NOCHECK)) rect.left += check_bitmap_width; - rect.right -= check_bitmap_width; + rect.right -= arrow_bitmap_width;//check_bitmap_width; } else if( lpitem->hbmpItem) { /* Draw the bitmap */ + //POINT origorg; + + //SetViewportOrgEx( hdc, rect.left, rect.top, &origorg); MenuDrawBitmapItem(hdc, lpitem, &rect, MenuInfo, WndOwner, odaction, menuBar); + //SetViewportOrgEx( hdc, origorg.x, origorg.y, NULL); } /* process text if present */ @@ -1807,7 +1846,6 @@ static void FASTCALL MenuDrawMenuItem(HWND hWnd, PROSMENUINFO MenuInfo, HWND Wnd { register int i = 0; HFONT hfontOld = 0; - UINT uFormat = menuBar ? DT_CENTER | DT_VCENTER | DT_SINGLELINE : DT_LEFT | DT_VCENTER | DT_SINGLELINE; @@ -1827,7 +1865,7 @@ static void FASTCALL MenuDrawMenuItem(HWND hWnd, PROSMENUINFO MenuInfo, HWND Wnd rect.right -= MENU_BAR_ITEMS_SPACE / 2; } - Text = (PWCHAR) lpitem->dwTypeData; + Text = lpitem->lpstr; if(Text) { for (i = 0; L'\0' != Text[i]; i++) @@ -1916,8 +1954,8 @@ static void FASTCALL MenuDrawPopupMenu(HWND hwnd, HDC hdc, HMENU hmenu ) else DrawEdge (hdc, &rect, EDGE_RAISED, BF_RECT); - /* draw menu items */ //TRACE("hmenu %p Style %08x\n", hmenu, menu->dwStyle); + /* draw menu items */ if (MenuGetRosMenuInfo(&MenuInfo, hmenu) && MenuInfo.cItems) { UINT u; @@ -1929,10 +1967,9 @@ static void FASTCALL MenuDrawPopupMenu(HWND hwnd, HDC hdc, HMENU hmenu ) { HWND WndOwner = MenuInfo.spwndNotify ? MenuInfo.spwndNotify->head.h : NULL; MenuDrawMenuItem(hwnd, &MenuInfo, WndOwner, hdc, &ItemInfo, - MenuInfo.cyMenu, FALSE, ODA_DRAWENTIRE); + MenuInfo.cyMenu, FALSE, ODA_DRAWENTIRE); } } - /* draw scroll arrows */ if (MenuInfo.dwArrowsOn) MENU_DrawScrollArrows(&MenuInfo, hdc); @@ -2185,7 +2222,6 @@ static void FASTCALL MenuSelectItem(HWND hwndOwner, PROSMENUINFO hmenu, UINT wIn ItemInfo.fState &= ~(MF_HILITE|MF_MOUSESELECT); MenuSetRosMenuItemInfo(hmenu->Self, hmenu->iItem, &ItemInfo); } - //MENU_EnsureMenuItemVisible(hmenu, &ItemInfo, hdc); MenuDrawMenuItem(hmenu->Wnd, hmenu, hwndOwner, hdc, &ItemInfo, hmenu->cyMenu, !(hmenu->fFlags & MNF_POPUP), ODA_SELECT); @@ -2203,9 +2239,9 @@ static void FASTCALL MenuSelectItem(HWND hwndOwner, PROSMENUINFO hmenu, UINT wIn ItemInfo.fMask |= MIIM_STATE; ItemInfo.fState |= MF_HILITE; MenuSetRosMenuItemInfo(hmenu->Self, hmenu->iItem, &ItemInfo); + MENU_EnsureMenuItemVisible(hmenu, &ItemInfo, hdc); MenuDrawMenuItem(hmenu->Wnd, hmenu, hwndOwner, hdc, - &ItemInfo, hmenu->cyMenu, !(hmenu->fFlags & MNF_POPUP), - ODA_SELECT); + &ItemInfo, hmenu->cyMenu, !(hmenu->fFlags & MNF_POPUP), ODA_SELECT); } if (sendMenuSelect) { @@ -2649,8 +2685,8 @@ static LPCSTR MENUEX_ParseResource(LPCSTR res, HMENU hMenu) TRACE("Menu item: [%08x,%08x,%04x,%04x,%S]\n", mii.fType, mii.fState, mii.wID, resinfo, mii.dwTypeData); - if (resinfo & 1) /* Pop-up? */ - { + if (resinfo & 1) /* Pop-up? */ + { /* DWORD helpid = GET_DWORD(res); FIXME: use this. */ res += sizeof(DWORD); mii.hSubMenu = CreatePopupMenu(); @@ -2670,6 +2706,8 @@ static LPCSTR MENUEX_ParseResource(LPCSTR res, HMENU hMenu) } else if (!mii.dwTypeData[0] && !(mii.fType & MF_SEPARATOR)) { + WARN("Converting NULL menu item %04x, type %04x to SEPARATOR\n", + mii.wID, mii.fType); mii.fType |= MF_SEPARATOR; } InsertMenuItemW(hMenu, -1, MF_BYPOSITION, &mii); @@ -2773,51 +2811,46 @@ MenuShowSubPopup(HWND WndOwner, PROSMENUINFO MenuInfo, BOOL SelectFirst, UINT Fl TRACE("owner=%x menu=%p 0x%04x\n", WndOwner, MenuInfo, SelectFirst); - if (NO_SELECTED_ITEM == MenuInfo->iItem) - { - return MenuInfo->Self; - } + if (MenuInfo->iItem == NO_SELECTED_ITEM) return MenuInfo->Self; MenuInitRosMenuItemInfo(&ItemInfo); if (! MenuGetRosMenuItemInfo(MenuInfo->Self, MenuInfo->iItem, &ItemInfo)) - { + { MenuCleanupRosMenuItemInfo(&ItemInfo); return MenuInfo->Self; - } - if (0 == (ItemInfo.hSubMenu) || 0 != (ItemInfo.fState & (MF_GRAYED | MF_DISABLED))) - { + } + + //item = &menu->rgItems[menu->iItem]; + if (!(ItemInfo.hSubMenu) || (ItemInfo.fState & (MF_GRAYED | MF_DISABLED))) + { MenuCleanupRosMenuItemInfo(&ItemInfo); return MenuInfo->Self; - } + } /* message must be sent before using item, because nearly everything may be changed by the application ! */ /* Send WM_INITMENUPOPUP message only if TPM_NONOTIFY flag is not specified */ - if (0 == (Flags & TPM_NONOTIFY)) - { + if (!(Flags & TPM_NONOTIFY)) + { SendMessageW(WndOwner, WM_INITMENUPOPUP, (WPARAM) ItemInfo.hSubMenu, MAKELPARAM(MenuInfo->iItem, IS_SYSTEM_MENU(MenuInfo))); - } + } if (! MenuGetRosMenuItemInfo(MenuInfo->Self, MenuInfo->iItem, &ItemInfo)) - { + { MenuCleanupRosMenuItemInfo(&ItemInfo); return MenuInfo->Self; - } + } + + //item = &menu->rgItems[menu->iItem]; Rect = ItemInfo.Rect; /* correct item if modified as a reaction to WM_INITMENUPOPUP message */ - if (0 == (ItemInfo.fState & MF_HILITE)) - { - if (0 != (MenuInfo->fFlags & MNF_POPUP)) - { - Dc = GetDC(MenuInfo->Wnd); - } - else - { - Dc = GetDCEx(MenuInfo->Wnd, 0, DCX_CACHE | DCX_WINDOW); - } + if (!(ItemInfo.fState & MF_HILITE)) + { + if (MenuInfo->fFlags & MNF_POPUP) Dc = GetDC(MenuInfo->Wnd); + else Dc = GetDCEx(MenuInfo->Wnd, 0, DCX_CACHE | DCX_WINDOW); SelectObject(Dc, hMenuFont); ItemInfo.fMask |= MIIM_STATE; @@ -2826,13 +2859,10 @@ MenuShowSubPopup(HWND WndOwner, PROSMENUINFO MenuInfo, BOOL SelectFirst, UINT Fl MenuDrawMenuItem(MenuInfo->Wnd, MenuInfo, WndOwner, Dc, &ItemInfo, MenuInfo->cyMenu, !(MenuInfo->fFlags & MNF_POPUP), ODA_DRAWENTIRE); ReleaseDC(MenuInfo->Wnd, Dc); - } + } - if (0 == ItemInfo.Rect.top && 0 == ItemInfo.Rect.left - && 0 == ItemInfo.Rect.bottom && 0 == ItemInfo.Rect.right) - { + if (!ItemInfo.Rect.top && !ItemInfo.Rect.left && !ItemInfo.Rect.bottom && !ItemInfo.Rect.right) ItemInfo.Rect = Rect; - } ItemInfo.fMask |= MIIM_STATE; ItemInfo.fState |= MF_MOUSESELECT; @@ -2840,11 +2870,12 @@ MenuShowSubPopup(HWND WndOwner, PROSMENUINFO MenuInfo, BOOL SelectFirst, UINT Fl if (IS_SYSTEM_MENU(MenuInfo)) { - ERR("Right click on window bar and Draw system menu!\n"); - MenuInitSysMenuPopup(ItemInfo.hSubMenu, GetWindowLongPtrW(MenuInfo->Wnd, GWL_STYLE), + MenuInitSysMenuPopup(ItemInfo.hSubMenu, + GetWindowLongPtrW(MenuInfo->Wnd, GWL_STYLE), GetClassLongPtrW(MenuInfo->Wnd, GCL_STYLE), HTSYSMENU); - if (Flags & TPM_LAYOUTRTL) Rect.left; + NcGetSysPopupPos(MenuInfo->Wnd, &Rect); + if (Flags & TPM_LAYOUTRTL) Rect.left = Rect.right; Rect.top = Rect.bottom; Rect.right = GetSystemMetrics(SM_CXSIZE); Rect.bottom = GetSystemMetrics(SM_CYSIZE); @@ -2852,16 +2883,18 @@ MenuShowSubPopup(HWND WndOwner, PROSMENUINFO MenuInfo, BOOL SelectFirst, UINT Fl else { GetWindowRect(MenuInfo->Wnd, &Rect); - if (0 != (MenuInfo->fFlags & MNF_POPUP)) + if (MenuInfo->fFlags & MNF_POPUP) { RECT rc = ItemInfo.Rect; MENU_AdjustMenuItemRect(MenuInfo, &rc); + /* The first item in the popup menu has to be at the + same y position as the focused menu item */ if(Flags & TPM_LAYOUTRTL) Rect.left += GetSystemMetrics(SM_CXBORDER); else - Rect.left += ItemInfo.Rect.right- GetSystemMetrics(SM_CXBORDER); + Rect.left += rc.right /*ItemInfo.Rect.right*/ - GetSystemMetrics(SM_CXBORDER); Rect.top += rc.top - MENU_TOP_MARGIN;//3; Rect.right = rc.left - rc.right + GetSystemMetrics(SM_CXBORDER); Rect.bottom = rc.top - rc.bottom - MENU_TOP_MARGIN - MENU_BOTTOM_MARGIN/*2*/ @@ -2926,13 +2959,14 @@ MenuHideSubPopups(HWND WndOwner, PROSMENUINFO MenuInfo, TRACE("owner=%x menu=%x 0x%04x\n", WndOwner, MenuInfo, SendMenuSelect); - if (NULL != MenuInfo && NULL != top_popup && NO_SELECTED_ITEM != MenuInfo->iItem) + if (MenuInfo && top_popup && NO_SELECTED_ITEM != MenuInfo->iItem) { + //item = &menu->rgItems[menu->iItem]; MenuInitRosMenuItemInfo(&ItemInfo); ItemInfo.fMask |= MIIM_FTYPE | MIIM_STATE; if (! MenuGetRosMenuItemInfo(MenuInfo->Self, MenuInfo->iItem, &ItemInfo) - || 0 == (ItemInfo.hSubMenu) - || 0 == (ItemInfo.fState & MF_MOUSESELECT)) + || !(ItemInfo.hSubMenu) + || !(ItemInfo.fState & MF_MOUSESELECT)) { MenuCleanupRosMenuItemInfo(&ItemInfo); return; @@ -2973,19 +3007,19 @@ MenuSwitchTracking(MTRACKER* Mt, PROSMENUINFO PtMenuInfo, UINT Index, UINT wFlag TRACE("%x menu=%x 0x%04x\n", Mt, PtMenuInfo->Self, Index); - if (MenuGetRosMenuInfo(&TopMenuInfo, Mt->TopMenu) && - Mt->TopMenu != PtMenuInfo->Self && - 0 == ((PtMenuInfo->fFlags | TopMenuInfo.fFlags) & MNF_POPUP)) - { + if ( MenuGetRosMenuInfo(&TopMenuInfo, Mt->TopMenu) && + Mt->TopMenu != PtMenuInfo->Self && + !((PtMenuInfo->fFlags | TopMenuInfo.fFlags) & MNF_POPUP) ) + { /* both are top level menus (system and menu-bar) */ MenuHideSubPopups(Mt->OwnerWnd, &TopMenuInfo, FALSE, wFlags); MenuSelectItem(Mt->OwnerWnd, &TopMenuInfo, NO_SELECTED_ITEM, FALSE, NULL); Mt->TopMenu = PtMenuInfo->Self; - } + } else - { + { MenuHideSubPopups(Mt->OwnerWnd, PtMenuInfo, FALSE, wFlags); - } + } MenuSelectItem(Mt->OwnerWnd, PtMenuInfo, Index, TRUE, NULL); } @@ -3009,35 +3043,35 @@ MenuExecFocusedItem(MTRACKER *Mt, PROSMENUINFO MenuInfo, UINT Flags) TRACE("%p menu=%p\n", Mt, MenuInfo); if (0 == MenuInfo->cItems || NO_SELECTED_ITEM == MenuInfo->iItem) - { + { return -1; - } + } MenuInitRosMenuItemInfo(&ItemInfo); if (! MenuGetRosMenuItemInfo(MenuInfo->Self, MenuInfo->iItem, &ItemInfo)) - { + { MenuCleanupRosMenuItemInfo(&ItemInfo); return -1; - } + } TRACE("%p %08x %p\n", MenuInfo, ItemInfo.wID, ItemInfo.hSubMenu); if (0 == (ItemInfo.hSubMenu)) - { + { if (0 == (ItemInfo.fState & (MF_GRAYED | MF_DISABLED)) && 0 == (ItemInfo.fType & MF_SEPARATOR)) - { + { /* If TPM_RETURNCMD is set you return the id, but do not send a message to the owner */ if (0 == (Flags & TPM_RETURNCMD)) - { + { if (0 != (MenuInfo->fFlags & MNF_SYSDESKMN)) - { + { PostMessageW(Mt->OwnerWnd, WM_SYSCOMMAND, ItemInfo.wID, MAKELPARAM((SHORT) Mt->Pt.x, (SHORT) Mt->Pt.y)); - } + } else - { + { ROSMENUINFO topmenuI; BOOL ret = MenuGetRosMenuInfo(&topmenuI, Mt->TopMenu); DWORD dwStyle = MenuInfo->dwStyle | (ret ? topmenuI.dwStyle : 0); @@ -3046,18 +3080,18 @@ MenuExecFocusedItem(MTRACKER *Mt, PROSMENUINFO MenuInfo, UINT Flags) PostMessageW(Mt->OwnerWnd, WM_MENUCOMMAND, MenuInfo->iItem, (LPARAM)MenuInfo->Self); else PostMessageW(Mt->OwnerWnd, WM_COMMAND, ItemInfo.wID, 0); - } - } + } + } wID = ItemInfo.wID; MenuCleanupRosMenuItemInfo(&ItemInfo); return wID; - } - } + } + } else - { + { Mt->CurrentMenu = MenuShowSubPopup(Mt->OwnerWnd, MenuInfo, TRUE, Flags); return -2; - } + } return -1; } @@ -3077,40 +3111,40 @@ MENU_ButtonDown(MTRACKER* Mt, HMENU PtMenu, UINT Flags) TRACE("%x PtMenu=%p\n", Mt, PtMenu); if (NULL != PtMenu) - { + { if (! MenuGetRosMenuInfo(&MenuInfo, PtMenu)) - { + { return FALSE; - } + } if (IS_SYSTEM_MENU(&MenuInfo)) - { + { Index = 0; - } + } else - { + { Index = NtUserMenuItemFromPoint(Mt->OwnerWnd, PtMenu, Mt->Pt.x, Mt->Pt.y); - } + } MenuInitRosMenuItemInfo(&Item); if (NO_SELECTED_ITEM == Index || ! MenuGetRosMenuItemInfo(PtMenu, Index, &Item)) - { + { MenuCleanupRosMenuItemInfo(&Item); return FALSE; - } + } if (!(Item.fType & MF_SEPARATOR) && !(Item.fState & (MFS_DISABLED | MFS_GRAYED)) ) - { + { if (MenuInfo.iItem != Index) - { + { MenuSwitchTracking(Mt, &MenuInfo, Index, Flags); - } + } /* If the popup menu is not already "popped" */ if (0 == (Item.fState & MF_MOUSESELECT)) - { + { Mt->CurrentMenu = MenuShowSubPopup(Mt->OwnerWnd, &MenuInfo, FALSE, Flags); - } - } + } + } MenuCleanupRosMenuItemInfo(&Item); @@ -3140,42 +3174,42 @@ MENU_ButtonUp(MTRACKER *Mt, HMENU PtMenu, UINT Flags) TRACE("%p hmenu=%x\n", Mt, PtMenu); if (NULL != PtMenu) - { + { Id = 0; if (! MenuGetRosMenuInfo(&MenuInfo, PtMenu)) - { + { return -1; - } + } if (! IS_SYSTEM_MENU(&MenuInfo)) - { + { Id = NtUserMenuItemFromPoint(Mt->OwnerWnd, MenuInfo.Self, Mt->Pt.x, Mt->Pt.y); - } + } MenuInitRosMenuItemInfo(&ItemInfo); if (0 <= Id && MenuGetRosMenuItemInfo(MenuInfo.Self, Id, &ItemInfo) && MenuInfo.iItem == Id) - { + { if (0 == (ItemInfo.hSubMenu)) - { + { INT ExecutedMenuId = MenuExecFocusedItem(Mt, &MenuInfo, Flags); MenuCleanupRosMenuItemInfo(&ItemInfo); return (ExecutedMenuId < 0) ? -1 : ExecutedMenuId; - } + } MenuCleanupRosMenuItemInfo(&ItemInfo); /* If we are dealing with the top-level menu */ /* and this is a click on an already "popped" item: */ /* Stop the menu tracking and close the opened submenus */ if (Mt->TopMenu == MenuInfo.Self && MenuInfo.TimeToHide) - { + { MenuCleanupRosMenuItemInfo(&ItemInfo); return 0; - } - } + } + } MenuCleanupRosMenuItemInfo(&ItemInfo); MenuInfo.TimeToHide = TRUE; MenuSetRosMenuInfo(&MenuInfo); - } + } return -1; } @@ -3236,46 +3270,46 @@ MenuMouseMove(MTRACKER *Mt, HMENU PtMenu, UINT Flags) ROSMENUITEMINFO ItemInfo; if (NULL != PtMenu) - { + { if (! MenuGetRosMenuInfo(&MenuInfo, PtMenu)) - { + { return TRUE; - } + } if (IS_SYSTEM_MENU(&MenuInfo)) - { + { Index = 0; - } + } else - { + { Index = NtUserMenuItemFromPoint(Mt->OwnerWnd, PtMenu, Mt->Pt.x, Mt->Pt.y); - } - } + } + } else - { + { Index = NO_SELECTED_ITEM; - } + } if (NO_SELECTED_ITEM == Index) - { + { if (Mt->CurrentMenu == MenuInfo.Self || MenuGetRosMenuInfo(&MenuInfo, Mt->CurrentMenu)) - { + { MenuSelectItem(Mt->OwnerWnd, &MenuInfo, NO_SELECTED_ITEM, TRUE, Mt->TopMenu); - } - } + } + } else if (MenuInfo.iItem != Index) - { + { MenuInitRosMenuItemInfo(&ItemInfo); if (MenuGetRosMenuItemInfo(MenuInfo.Self, Index, &ItemInfo) && - !(ItemInfo.fType & MF_SEPARATOR)) + !(ItemInfo.fType & MF_SEPARATOR)) { MenuSwitchTracking(Mt, &MenuInfo, Index, Flags); - if (!(ItemInfo.fState & (MFS_DISABLED | MFS_GRAYED))) + if (!(ItemInfo.fState & (MFS_DISABLED | MFS_GRAYED))) Mt->CurrentMenu = MenuShowSubPopup(Mt->OwnerWnd, &MenuInfo, FALSE, Flags); } MenuCleanupRosMenuItemInfo(&ItemInfo); - } + } return TRUE; } @@ -3318,13 +3352,13 @@ MenuDoNextMenu(MTRACKER* Mt, UINT Vk, UINT wFlags) ROSMENUINFO MenuInfo; if (! MenuGetRosMenuInfo(&TopMenuInfo, Mt->TopMenu)) - { + { return (LRESULT) FALSE; - } + } if ((VK_LEFT == Vk && 0 == TopMenuInfo.iItem) || (VK_RIGHT == Vk && TopMenuInfo.iItem == TopMenuInfo.cItems - 1)) - { + { MDINEXTMENU NextMenu; HMENU NewMenu; HWND NewWnd; @@ -3339,93 +3373,93 @@ MenuDoNextMenu(MTRACKER* Mt, UINT Vk, UINT wFlags) Mt->CurrentMenu, Mt->OwnerWnd, NextMenu.hmenuNext, NextMenu.hwndNext ); if (NULL == NextMenu.hmenuNext || NULL == NextMenu.hwndNext) - { + { DWORD Style = GetWindowLongPtrW(Mt->OwnerWnd, GWL_STYLE); NewWnd = Mt->OwnerWnd; if (IS_SYSTEM_MENU(&TopMenuInfo)) - { + { /* switch to the menu bar */ if (0 != (Style & WS_CHILD) || NULL == (NewMenu = GetMenu(NewWnd))) - { + { return FALSE; - } + } if (VK_LEFT == Vk) - { + { if (! MenuGetRosMenuInfo(&MenuInfo, NewMenu)) - { + { return FALSE; - } + } Id = MenuInfo.cItems - 1; - } - } + } + } else if (0 != (Style & WS_SYSMENU)) - { + { /* switch to the system menu */ NewMenu = NtUserGetSystemMenu(NewWnd, FALSE); - } + } else - { + { return FALSE; - } - } + } + } else /* application returned a new menu to switch to */ - { + { NewMenu = NextMenu.hmenuNext; NewWnd = NextMenu.hwndNext; if (IsMenu(NewMenu) && IsWindow(NewWnd)) - { + { DWORD Style = GetWindowLongPtrW(NewWnd, GWL_STYLE); if (0 != (Style & WS_SYSMENU) && GetSystemMenu(NewWnd, FALSE) == NewMenu) - { + { /* get the real system menu */ NewMenu = NtUserGetSystemMenu(NewWnd, FALSE); - } + } else if (0 != (Style & WS_CHILD) || GetMenu(NewWnd) != NewMenu) - { + { /* FIXME: Not sure what to do here; * perhaps try to track NewMenu as a popup? */ WARN(" -- got confused.\n"); return FALSE; - } - } + } + } else - { + { return FALSE; - } - } + } + } if (NewMenu != Mt->TopMenu) - { + { MenuSelectItem(Mt->OwnerWnd, &TopMenuInfo, NO_SELECTED_ITEM, FALSE, 0 ); if (Mt->CurrentMenu != Mt->TopMenu) - { + { MenuHideSubPopups(Mt->OwnerWnd, &TopMenuInfo, FALSE, wFlags); - } - } + } + } if (NewWnd != Mt->OwnerWnd) - { + { Mt->OwnerWnd = NewWnd; NtUserxSetGUIThreadHandle(MSQ_STATE_MENUOWNER, Mt->OwnerWnd); // 1 SetCapture(Mt->OwnerWnd); // 2 - } + } Mt->TopMenu = Mt->CurrentMenu = NewMenu; /* all subpopups are hidden */ if (MenuGetRosMenuInfo(&TopMenuInfo, Mt->TopMenu)) - { + { MenuSelectItem(Mt->OwnerWnd, &TopMenuInfo, Id, TRUE, 0); - } + } return TRUE; - } + } return FALSE; } @@ -3444,7 +3478,7 @@ MenuSuspendPopup(MTRACKER* Mt, UINT uMsg) msg.hwnd = Mt->OwnerWnd; PeekMessageW( &msg, 0, uMsg, uMsg, PM_NOYIELD | PM_REMOVE); // ported incorrectly since 8317 GvG -// Mt->TrackFlags |= TF_SKIPREMOVE; // This sends TrackMenu into a loop with arrow keys!!!! + //Mt->TrackFlags |= TF_SKIPREMOVE; // This sends TrackMenu into a loop with arrow keys!!!! switch( uMsg ) { @@ -3481,27 +3515,27 @@ MenuKeyEscape(MTRACKER *Mt, UINT Flags) HMENU MenuTmp, MenuPrev; if (Mt->CurrentMenu != Mt->TopMenu) - { + { if (MenuGetRosMenuInfo(&MenuInfo, Mt->CurrentMenu) && 0 != (MenuInfo.fFlags & MNF_POPUP)) - { + { MenuPrev = MenuTmp = Mt->TopMenu; /* close topmost popup */ while (MenuTmp != Mt->CurrentMenu) - { + { MenuPrev = MenuTmp; MenuTmp = MENU_GetSubPopup(MenuPrev); - } + } if (MenuGetRosMenuInfo(&MenuInfo, MenuPrev)) - { + { MenuHideSubPopups(Mt->OwnerWnd, &MenuInfo, TRUE, Flags); - } + } Mt->CurrentMenu = MenuPrev; EndMenu = FALSE; - } - } + } + } return EndMenu; } @@ -3534,44 +3568,44 @@ MenuKeyLeft(MTRACKER* Mt, UINT Flags) /* close topmost popup */ while (MenuTmp != Mt->CurrentMenu) - { + { MenuPrev = MenuTmp; MenuTmp = MENU_GetSubPopup(MenuPrev); - } + } if (! MenuGetRosMenuInfo(&PrevMenuInfo, MenuPrev)) - { + { return; - } + } MenuHideSubPopups(Mt->OwnerWnd, &PrevMenuInfo, TRUE, Flags); Mt->CurrentMenu = MenuPrev; if (! MenuGetRosMenuInfo(&TopMenuInfo, Mt->TopMenu)) - { + { return; - } + } if ((MenuPrev == Mt->TopMenu) && !(TopMenuInfo.fFlags & MNF_POPUP)) - { + { /* move menu bar selection if no more popups are left */ if (!MenuDoNextMenu(Mt, VK_LEFT, Flags)) - { + { MenuMoveSelection(Mt->OwnerWnd, &TopMenuInfo, ITEM_PREV); - } + } if (MenuPrev != MenuTmp || Mt->TrackFlags & TF_SUSPENDPOPUP) - { + { /* A sublevel menu was displayed - display the next one * unless there is another displacement coming up */ if (! MenuSuspendPopup(Mt, WM_KEYDOWN) && MenuGetRosMenuInfo(&TopMenuInfo, Mt->TopMenu)) - { + { Mt->CurrentMenu = MenuShowSubPopup(Mt->OwnerWnd, &TopMenuInfo, TRUE, Flags); - } - } - } + } + } + } } /*********************************************************************** @@ -3618,28 +3652,28 @@ static void FASTCALL MenuKeyRight(MTRACKER *Mt, UINT Flags) if (!(MenuInfo.fFlags & MNF_POPUP)) /* menu bar tracking */ { if (Mt->CurrentMenu != Mt->TopMenu) - { + { MenuHideSubPopups(Mt->OwnerWnd, &MenuInfo, FALSE, Flags); hmenutmp = Mt->CurrentMenu = Mt->TopMenu; - } + } else - { + { hmenutmp = NULL; - } + } /* try to move to the next item */ if ( !MenuDoNextMenu(Mt, VK_RIGHT, Flags)) MenuMoveSelection(Mt->OwnerWnd, &MenuInfo, ITEM_NEXT); if ( hmenutmp || Mt->TrackFlags & TF_SUSPENDPOPUP ) - { + { if (! MenuSuspendPopup(Mt, WM_KEYDOWN) && MenuGetRosMenuInfo(&MenuInfo, Mt->TopMenu)) - { + { Mt->CurrentMenu = MenuShowSubPopup(Mt->OwnerWnd, &MenuInfo, TRUE, Flags); - } - } + } + } } } @@ -4401,29 +4435,9 @@ MenuCleanup(VOID) NTSTATUS WINAPI User32LoadSysMenuTemplateForKernel(PVOID Arguments, ULONG ArgumentLength) { - HMENU hmenu = LoadMenuW(User32Instance, L"SYSMENU"); - LRESULT Result = (LRESULT)hmenu; - MENUINFO menuinfo = {0}; - MENUITEMINFOW info = {0}; + LRESULT Result = 0; - // removing space for checkboxes from menu - menuinfo.cbSize = sizeof(menuinfo); - menuinfo.fMask = MIM_STYLE; - GetMenuInfo(hmenu, &menuinfo); - menuinfo.dwStyle |= MNS_CHECKORBMP; // test_menu_bmp_and_string MNS_CHECKORBMP - SetMenuInfo(hmenu, &menuinfo); - - // adding bitmaps to menu items - info.cbSize = sizeof(info); - info.fMask |= MIIM_BITMAP; - info.hbmpItem = HBMMENU_POPUP_MINIMIZE; - SetMenuItemInfoW(hmenu, SC_MINIMIZE, FALSE, &info); - info.hbmpItem = HBMMENU_POPUP_RESTORE; - SetMenuItemInfoW(hmenu, SC_RESTORE, FALSE, &info); - info.hbmpItem = HBMMENU_POPUP_MAXIMIZE; - SetMenuItemInfoW(hmenu, SC_MAXIMIZE, FALSE, &info); - info.hbmpItem = HBMMENU_POPUP_CLOSE; - SetMenuItemInfoW(hmenu, SC_CLOSE, FALSE, &info); + // Will be converted to load bitmaps for OBMI! return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS)); } @@ -4436,10 +4450,7 @@ User32CallLoadMenuFromKernel(PVOID Arguments, ULONG ArgumentLength) Common = (PLOADMENU_CALLBACK_ARGUMENTS) Arguments; - Result = (LRESULT)LoadMenuW( Common->hModule, - IS_INTRESOURCE(Common->MenuName[0]) ? - MAKEINTRESOURCE(Common->MenuName[0]) : - (LPCWSTR)&Common->MenuName); + Result = (LRESULT)LoadMenuW( Common->hModule, Common->InterSource ? MAKEINTRESOURCE(Common->InterSource) : (LPCWSTR)&Common->MenuName); return ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS); } @@ -4464,7 +4475,7 @@ AppendMenuA(HMENU hMenu, MENU_mnu2mnuii( uFlags, uIDNewItem, (LPCWSTR)lpNewItem, &mii, FALSE); - /* copy the text string, it wll be one or the other */ + /* copy the text string, it will be one or the other */ if (lpNewItem && mii.fMask & MIIM_STRING && !mii.hbmpItem && mii.dwTypeData) { if (!RtlCreateUnicodeStringFromAsciiz(&UnicodeString, (LPSTR)mii.dwTypeData)) @@ -4502,7 +4513,7 @@ AppendMenuW(HMENU hMenu, MENU_mnu2mnuii( uFlags, uIDNewItem, lpNewItem, &mii, TRUE); - /* copy the text string, it wll be one or the other */ + /* copy the text string, it will be one or the other */ if (lpNewItem && mii.fMask & MIIM_STRING && !mii.hbmpItem && mii.dwTypeData) { RtlInitUnicodeString(&MenuText, (PWSTR)mii.dwTypeData); @@ -5039,7 +5050,7 @@ InsertMenuA( MENU_mnu2mnuii( uFlags, uIDNewItem, (LPCWSTR)lpNewItem, &mii, FALSE); - /* copy the text string, it wll be one or the other */ + /* copy the text string, it will be one or the other */ if (lpNewItem && mii.fMask & MIIM_STRING && !mii.hbmpItem && mii.dwTypeData) { if (!RtlCreateUnicodeStringFromAsciiz(&UnicodeString, (LPSTR)mii.dwTypeData)) @@ -5160,7 +5171,7 @@ InsertMenuW( MENU_mnu2mnuii( uFlags, uIDNewItem, lpNewItem, &mii, TRUE); - /* copy the text string, it wll be one or the other */ + /* copy the text string, it will be one or the other */ if (lpNewItem && mii.fMask & MIIM_STRING && !mii.hbmpItem && mii.dwTypeData) { RtlInitUnicodeString(&MenuText, (PWSTR)mii.dwTypeData); @@ -5296,7 +5307,7 @@ ModifyMenuA( MENU_mnu2mnuii( uFlags, uIDNewItem, (LPCWSTR)lpNewItem, &mii, FALSE); - /* copy the text string, it wll be one or the other */ + /* copy the text string, it will be one or the other */ if (lpNewItem && mii.fMask & MIIM_STRING && !mii.hbmpItem && mii.dwTypeData) { if (!RtlCreateUnicodeStringFromAsciiz(&UnicodeString, (LPSTR)mii.dwTypeData)) @@ -5336,7 +5347,7 @@ ModifyMenuW( MENU_mnu2mnuii( uFlags, uIDNewItem, lpNewItem, &mii, TRUE); - /* copy the text string, it wll be one or the other */ + /* copy the text string, it will be one or the other */ if (lpNewItem && mii.fMask & MIIM_STRING && !mii.hbmpItem && mii.dwTypeData) { RtlInitUnicodeString(&MenuText, (PWSTR)mii.dwTypeData);