+
+ Most of the software in these categories is machine independent
+ and is portable across different hardware architectures.
+
+ The machine-dependent aspects of the kernel
+ are isolated from the mainstream code.
+ In particular, none of the machine-independent code contains
+ conditional code for specific architecture.
+ When an architecture-dependent action is needed,
+ the machine-independent code calls an architecture-dependent
+ function that is located in the machine-dependent code.
+ The software that is machine dependent includes
+
+
+
+ Low-level system-startup actions
+
+
+
+ Trap and fault handling
+
+
+
+ Low-level manipulation of the run-time context of a
+ process
+
+
+
+ Configuration and initialization of hardware devices
+
+
+
+ Run-time support for I/O devices
+
+
+
+
+
+ Most of the software in these categories is machine independent
+ and is portable across different hardware architectures.
+
+ The machine-dependent aspects of the kernel
+ are isolated from the mainstream code.
+ In particular, none of the machine-independent code contains
+ conditional code for specific architecture.
+ When an architecture-dependent action is needed,
+ the machine-independent code calls an architecture-dependent
+ function that is located in the machine-dependent code.
+ The software that is machine dependent includes
+
+
+
+ Low-level system-startup actions
+
+
+
+ Trap and fault handling
+
+
+
+ Low-level manipulation of the run-time context of a
+ process
+
+
+
+ Configuration and initialization of hardware devices
+
+
+
+ Run-time support for I/O devices
+
+
+
+
+
+ summarizes the machine-independent software that constitutes the
+ 4.4BSD kernel for the HP300.
+ The numbers in column 2 are for lines of C source code,
+ header files, and assembly language.
+ Virtually all the software in the kernel is written in the C
+ programming language;
+ less than 2 percent is written in
+ assembly language.
+ As the statistics in show,
+ the machine-dependent software, excluding
+ HP/UX
+ and device support,
+ accounts for a minuscule 6.9 percent of the kernel.
+
+ Only a small part of the kernel is devoted to
+ initializing the system.
+ This code is used when the system is
+ bootstrapped
+ into operation and is responsible for setting up the kernel hardware
+ and software environment
+ (see
+ Chapter 14).
+ Some operating systems (especially those with limited physical memory)
+ discard or
+ overlay
+ the software that performs these functions after that software has
+ been executed.
+ The 4.4BSD kernel does not reclaim the memory used by the
+ startup code because that memory space is barely 0.5 percent
+ of the kernel resources used on a typical machine.
+ Also, the startup code does not appear in one place in the kernel -- it is
+ scattered throughout, and it usually appears
+ in places logically associated with what is being initialized.
+
+
+
+ Kernel Services
+
+ The boundary between the kernel- and user-level code is enforced by
+ hardware-protection facilities provided by the underlying hardware.
+ The kernel operates in a separate address space that is inaccessible to
+ user processes.
+ Privileged operations -- such as starting I/O
+ and halting the central processing unit
+ (CPU) --
+ are available to only the kernel.
+ Applications request services from the kernel with
+ system calls
+ System calls are used to cause the kernel to execute complicated
+ operations, such as writing data to secondary storage,
+ and simple operations, such as returning the current time of day.
+ All system calls appear
+ synchronous
+ to applications:
+ The application does not run while the kernel does the actions associated
+ with a system call.
+ The kernel may finish some operations associated with a system call
+ after it has returned.
+ For example, a
+ write
+ system call will copy the data to be written
+ from the user process to a kernel buffer while the process waits,
+ but will usually return from the system call
+ before the kernel buffer is written to the disk.
+
+ A system call usually is implemented as a hardware trap that changes the
+ CPU's
+ execution mode and the current address-space mapping.
+ Parameters supplied by users in system calls are validated by the kernel
+ before being used.
+ Such checking ensures the integrity of the system.
+ All parameters passed into the kernel are copied into the
+ kernel's address space,
+ to ensure that validated parameters are not changed
+ as a side effect of the system call.
+ System-call results are returned by the kernel,
+ either in hardware registers or by their values
+ being copied to user-specified memory addresses.
+ Like parameters passed into the kernel,
+ addresses used for
+ the return of results must be validated to ensure that they are
+ part of an application's address space.
+ If the kernel encounters an error while processing a system call,
+ it returns an error code to the user.
+ For the
+ C programming language, this error code
+ is stored in the global variable
+ errno,
+ and the function that executed the system call returns the value -1.
+
+ User applications and the kernel operate
+ independently of each other.
+ 4.4BSD does not store I/O control blocks or other
+ operating-system-related
+ data structures in the application's address space.
+ Each user-level application is provided an independent address space in
+ which it executes.
+ The kernel makes most state changes,
+ such as suspending a process while another is running,
+ invisible to the processes involved.
+
+
+
+ Process Management
+
+ 4.4BSD supports a multitasking environment.
+ Each task or thread of execution is termed a
+ process.
+ The
+ context
+ of a 4.4BSD process consists of user-level state,
+ including the contents of its address space
+ and the run-time environment, and kernel-level state,
+ which includes
+ scheduling parameters,
+ resource controls,
+ and identification information.
+ The context includes everything
+ used by the kernel in providing services for the process.
+ Users can create processes, control the processes' execution,
+ and receive notification when the processes' execution status changes.
+ Every process is assigned a unique value, termed a
+ process identifier
+ (PID).
+ This value is used by the kernel to identify a process when reporting
+ status changes to a user, and by a user when referencing a process
+ in a system call.
+
+ The kernel creates a process by duplicating the context of another process.
+ The new process is termed a
+ child process
+ of the original
+ parent process
+ The context duplicated in process creation includes
+ both the user-level execution state of the process and
+ the process's system state managed by the kernel.
+ Important components of the kernel state are described in
+ Chapter 4.
+
+
+ Process lifecycle
+
+
+
+
+
+
+
+ +----------------+ wait +----------------+
+| parent process |--------------------------------->| parent process |--->
++----------------+ +----------------+
+ | ^
+ | fork |
+ V |
++----------------+ execve +----------------+ wait +----------------+
+| child process |------->| child process |------->| zombie process |
++----------------+ +----------------+ +----------------+
+
+
+
+ Process-management system calls
+
+
+
+
+ The process lifecycle is depicted in .
+ A process may create a new process that is a copy of the original
+ by using the
+ fork
+ system call.
+ The
+ fork
+ call returns twice: once in the parent process, where
+ the return value is the process identifier of the child,
+ and once in the child process, where the return value is 0.
+ The parent-child relationship induces a hierarchical structure on
+ the set of processes in the system.
+ The new process shares all its parent's resources, such as
+ file descriptors, signal-handling status, and memory layout.
+
+ Although there are occasions when the new process is intended
+ to be a copy of the parent,
+ the loading and execution of a different program is
+ a more useful and typical action.
+ A process can overlay itself with the memory image of another program,
+ passing to the newly created image a set of parameters,
+ using the system call
+ execve.
+ One parameter is the name of a file whose contents are
+ in a format recognized by the system -- either a binary-executable file
+ or a file that causes
+ the execution of a specified interpreter program to process its contents.
+
+ A process may terminate by executing an
+ exit
+ system call, sending 8 bits of
+ exit status to its parent.
+ If a process wants to communicate more than a single byte of
+ information with its parent,
+ it must either set up an interprocess-communication channel
+ using pipes or sockets,
+ or use an intermediate file.
+ Interprocess communication is discussed extensively in
+ Chapter 11.
+
+ A process can suspend execution until any of its child processes terminate
+ using the
+ wait
+ system call, which returns the
+ PID
+ and
+ exit status of the terminated child process.
+ A parent process can arrange to be notified by a signal when
+ a child process exits or terminates abnormally.
+ Using the
+ wait4
+ system call, the parent can retrieve information about
+ the event that caused termination of the child process
+ and about resources consumed by the process during its lifetime.
+ If a process is orphaned because its parent exits before it is finished,
+ then the kernel arranges for the child's exit status to be passed back
+ to a special system process
+
+ init:
+ see Sections 3.1 and 14.6).
+
+ The details of how the kernel creates and destroys processes are given in
+ Chapter 5.
+
+ Processes are scheduled for execution according to a
+ process-priority
+ parameter.
+ This priority is managed by a kernel-based scheduling algorithm.
+ Users can influence the scheduling of a process by specifying
+ a parameter
+ (nice)
+ that weights the overall scheduling priority,
+ but are still obligated to share the underlying
+ CPU
+ resources according to the kernel's scheduling policy.
+
+
+ Signals
+
+ The system defines a set of
+ signals
+ that may be delivered to a process.
+ Signals in 4.4BSD are modeled after hardware interrupts.
+ A process may specify a user-level subroutine to be a
+ handler
+ to which a signal should be delivered.
+ When a signal is generated,
+ it is blocked from further occurrence while it is being
+ caught
+ by the handler.
+ Catching a signal involves saving the current process context
+ and building a new one in which to run the handler.
+ The signal is then delivered to the handler, which can either abort
+ the process or return to the executing process
+ (perhaps after setting a global variable).
+ If the handler returns, the signal is unblocked
+ and can be generated (and caught) again.
+
+ Alternatively, a process may specify that a signal is to be
+ ignored,
+ or that a default action, as determined by the kernel, is to be taken.
+ The default action of certain signals is to terminate the process.
+ This termination may be accompanied by creation of a
+ core file
+ that contains the current memory image of the process for use
+ in postmortem debugging.
+
+ Some signals cannot be caught or ignored.
+ These signals include
+ SIGKILL,
+ which kills runaway processes,
+ and the
+ job-control signal
+ SIGSTOP.
+
+ A process may choose to have signals delivered on a
+ special stack so that sophisticated software stack manipulations
+ are possible.
+ For example, a language supporting
+ coroutines needs to provide a stack for each coroutine.
+ The language run-time system can allocate these stacks
+ by dividing up the single stack provided by 4.4BSD.
+ If the kernel does not support a separate signal stack,
+ the space allocated for each coroutine must be expanded by the
+ amount of space required to catch a signal.
+
+ All signals have the same priority.
+ If multiple signals are pending simultaneously, the order in which
+ signals are delivered to a process is implementation specific.
+ Signal handlers execute with the signal that caused their
+ invocation to be blocked, but other signals may yet occur.
+ Mechanisms are provided so that processes can protect critical sections
+ of code against the occurrence of specified signals.
+
+ The detailed design and implementation of signals is described in
+ Section 4.7.
+
+
+
+ Process Groups and Sessions
+
+ Processes are organized into
+ process groups.
+ Process groups are used to control access to terminals
+ and to provide a means of distributing signals to collections of
+ related processes.
+ A process inherits its process group from its parent process.
+ Mechanisms are provided by the kernel to allow a process to
+ alter its process group or the process group of its descendents.
+ Creating a new process group is easy;
+ the value of a new process group is ordinarily the
+ process identifier of the creating process.
+
+ The group of processes in a process group is sometimes
+ referred to as a
+ job
+ and is manipulated by high-level system software, such as the shell.
+ A common kind of job created by a shell is a
+ pipeline
+ of several processes connected by pipes, such that the output of the first
+ process is the input of the second, the output of the second is the
+ input of the third, and so forth.
+ The shell creates such a job by forking a
+ process for each stage of the pipeline,
+ then putting all those processes into a separate process group.
+
+ A user process can send a signal to each process in
+ a process group, as well as to a single process.
+ A process in a specific process group may receive
+ software interrupts affecting the group, causing the group to
+ suspend or resume execution, or to be interrupted or terminated.
+
+ A terminal has a process-group identifier assigned to it.
+ This identifier is normally set to the identifier of a process group
+ associated with the terminal.
+ A job-control shell may create a number of process groups
+ associated with the same terminal; the terminal is the
+ controlling terminal
+ for each process in these groups.
+ A process may read from a descriptor for its controlling terminal
+ only if the terminal's process-group identifier
+ matches that of the process.
+ If the identifiers do not match,
+ the process will be blocked if it attempts to read from the terminal.
+ By changing the process-group identifier of the terminal,
+ a shell can arbitrate a terminal among several different jobs.
+ This arbitration is called
+ job control
+ and is described, with process groups, in
+ Section 4.8.
+
+ Just as a set of related processes can be collected into a process group,
+ a set of process groups can be collected into a
+ session.
+ The main uses for sessions are to create an isolated environment for a
+ daemon process and its children,
+ and to collect together a user's login shell
+ and the jobs that that shell spawns.
+
+
+
+
+ Memory Management
+
+ Each process has its own private address space.
+ The address space is initially divided into three logical segments:
+ text,
+ data,
+ and
+ stack.
+ The text segment is read-only and contains the machine
+ instructions of a program.
+ The data and stack segments are both readable and writable.
+ The data segment contains the
+ initialized and uninitialized data portions of a program, whereas
+ the stack segment holds the application's run-time stack.
+ On most machines, the stack segment is extended automatically
+ by the kernel as the process executes.
+ A process can expand or contract its data segment by making a system call,
+ whereas a process can change the size of its text segment
+ only when the segment's contents are overlaid with data from the
+ filesystem, or when debugging takes place.
+ The initial contents of the segments of a child process
+ are duplicates of the segments of a parent process.
+
+ The entire contents of a process address space do not need to be resident
+ for a process to execute.
+ If a process references a part of its address space that is not
+ resident in main memory, the system
+ pages
+ the necessary information into memory.
+ When system resources are scarce, the system uses a two-level
+ approach to maintain available resources.
+ If a modest amount of memory is available, the system will take
+ memory resources away from processes if these resources have not been
+ used recently.
+ Should there be a severe resource shortage, the system will resort to
+ swapping
+ the entire context of a process to secondary storage.
+ The
+ demand paging
+ and
+ swapping
+ done by the system are effectively transparent to processes.
+ A process may, however, advise the system
+ about expected future memory utilization as a performance aid.
+
+
+ BSD Memory-Management Design Decisions
+
+ The support of large sparse address spaces, mapped files,
+ and shared memory was a requirement for 4.2BSD.
+ An interface was specified, called
+ mmap,
+ that allowed unrelated processes to request a shared
+ mapping of a file into their address spaces.
+ If multiple processes mapped the same file into their address spaces,
+ changes to the file's portion of an address space
+ by one process would be reflected
+ in the area mapped by the other processes, as well as in the file itself.
+ Ultimately, 4.2BSD was shipped without the
+ mmap
+ interface, because of pressure to make other features, such as
+ networking, available.
+
+ Further development of the
+ mmap
+ interface continued during the work on 4.3BSD.
+ Over 40 companies and research groups participated
+ in the discussions leading to the revised architecture
+ that was described in the Berkeley Software Architecture Manual
+ .
+ Several of the companies have implemented the revised interface
+ .
+
+ Once again, time pressure prevented 4.3BSD from providing an
+ implementation of the interface.
+ Although the latter could have been built into the existing
+ 4.3BSD virtual-memory system,
+ the developers decided not to put it in because
+ that implementation was nearly 10 years old.
+ Furthermore, the original virtual-memory design was based
+ on the assumption that computer
+ memories were small and expensive, whereas disks were
+ locally connected, fast, large, and inexpensive.
+ Thus, the virtual-memory system was designed to be frugal
+ with its use of memory at the expense of generating extra disk traffic.
+ In addition, the
+ 4.3BSD implementation was riddled with
+ VAX
+ memory-management hardware dependencies that impeded its portability
+ to other computer architectures.
+ Finally, the virtual-memory system was not designed
+ to support the tightly coupled
+ multiprocessors that are becoming
+ increasingly common and important today.
+
+ Attempts to improve the old implementation incrementally
+ seemed doomed to failure.
+ A completely new design,
+ on the other hand,
+ could take advantage of large memories,
+ conserve disk transfers,
+ and have the potential to run on multiprocessors.
+ Consequently, the virtual-memory system was completely replaced in 4.4BSD.
+ The 4.4BSD virtual-memory system
+ is based on the Mach 2.0 VM system
+ .
+ with updates from Mach 2.5 and Mach 3.0.
+ It features
+ efficient support for sharing,
+ a clean separation of machine-independent and machine-dependent features,
+ as well as (currently unused) multiprocessor support.
+ Processes can map files anywhere in their address space.
+ They can share parts of their address space by
+ doing a shared mapping of the same file.
+ Changes made by one process are visible in the address space of
+ the other process, and also are written back to the file itself.
+ Processes can also request private mappings of a file, which prevents
+ any changes that they make from being visible to other processes
+ mapping the file or being written back to the file itself.
+
+ Another issue with the virtual-memory system is the way that
+ information is passed into the kernel when a system call is made.
+ 4.4BSD always copies data from the process address space
+ into a buffer in the kernel.
+ For read or write operations
+ that are transferring large quantities of data,
+ doing the copy can be time consuming.
+ An alternative to doing the copying is to remap the
+ process memory into the kernel.
+ The 4.4BSD kernel always copies the data for several reasons:
+
+
+
+ Often, the user data are not page aligned and are not a multiple of
+ the hardware page length.
+
+
+
+ If the page is taken away from the process,
+ it will no longer be able to reference that page.
+ Some programs depend on the data remaining in the
+ buffer even after those data have been written.
+
+
+
+ If the process is allowed to keep a copy of the page
+ (as it is in current 4.4BSD semantics),
+ the page must be made
+ copy-on-write.
+ A copy-on-write page is one that is protected against being written
+ by being made read-only.
+ If the process attempts to modify the page,
+ the kernel gets a write fault.
+ The kernel then makes a copy of the page that the process can modify.
+ Unfortunately, the typical process will immediately
+ try to write new data to its output buffer,
+ forcing the data to be copied anyway.
+
+
+
+ When pages are remapped to new virtual-memory addresses,
+ most memory-management hardware requires that the hardware
+ address-translation cache be purged selectively.
+ The cache purges are often slow.
+ The net effect is that remapping is slower than
+ copying for blocks of data less than 4 to 8 Kbyte.
+
+
+
+ The biggest incentives for memory mapping are the needs for
+ accessing big files and for passing large quantities of data
+ between processes.
+ The
+ mmap
+ interface provides a way for both of these tasks
+ to be done without copying.
+
+
+
+ Memory Management Inside the Kernel
+
+ The kernel often does allocations of memory that are
+ needed for only the duration of a single system call.
+ In a user process, such short-term
+ memory would be allocated on the run-time stack.
+ Because the kernel has a limited run-time stack,
+ it is not feasible to allocate even moderate-sized blocks of memory on it.
+ Consequently, such memory must be allocated
+ through a more dynamic mechanism.
+ For example,
+ when the system must translate a pathname,
+ it must allocate a 1-Kbyte buffer to hold the name.
+ Other blocks of memory must be more persistent than a single system call,
+ and thus could not be allocated on the stack even if there was space.
+ An example is protocol-control blocks that remain throughout
+ the duration of a network connection.
+
+ Demands for dynamic memory allocation in the kernel have increased
+ as more services have been added.
+ A generalized memory allocator reduces the complexity
+ of writing code inside the kernel.
+ Thus, the 4.4BSD kernel has a single memory allocator that can be
+ used by any part of the system.
+ It has an interface similar to the C library routines
+ malloc
+ and
+ free
+ that provide memory allocation to application programs
+ .
+ Like the C library interface,
+ the allocation routine takes a parameter specifying the
+ size of memory that is needed.
+ The range of sizes for memory requests is not constrained;
+ however, physical memory is allocated and is not paged.
+ The free routine takes a pointer to the storage being freed,
+ but does not require the size
+ of the piece of memory being freed.
+
+
+
+
+ I/O System
+
+ The basic model of the UNIX
+ I/O system is a sequence of bytes
+ that can be accessed either randomly or sequentially.
+ There are no
+ access methods
+ and no
+ control blocks
+ in a typical UNIX user process.
+
+ Different programs expect various levels of structure,
+ but the kernel does not impose structure on I/O.
+ For instance, the convention for text files is lines of
+ ASCII
+ characters separated by a single newline character
+ (the
+ ASCII
+ line-feed character),
+ but the kernel knows nothing about this convention.
+ For the purposes of most programs,
+ the model is further simplified to being a stream of data bytes,
+ or an
+ I/O stream.
+ It is this single common data form that makes the
+ characteristic UNIX tool-based approach work
+ .
+ An I/O stream from one program can be fed as input
+ to almost any other program.
+ (This kind of traditional UNIX
+ I/O stream should not be confused with the
+ Eighth Edition stream I/O system or with the
+ System V, Release 3
+ STREAMS,
+ both of which can be accessed as traditional I/O streams.)
+
+
+ Descriptors and I/O
+
+ UNIX processes use
+ descriptors
+ to reference I/O streams.
+ Descriptors are small unsigned integers obtained from the
+ open
+ and
+ socket
+ system calls.
+ The
+ open
+ system call takes as arguments the name of a file and
+ a permission mode to
+ specify whether the file should be open for reading or for writing,
+ or for both.
+ This system call also can be used to create a new, empty file.
+ A
+ read
+ or
+ write
+ system call can be applied to a descriptor to transfer data.
+ The
+ close
+ system call can be used to deallocate any descriptor.
+
+ Descriptors represent underlying objects supported by the kernel,
+ and are created by system calls specific to the type of object.
+ In 4.4BSD, three kinds of objects can be represented by descriptors:
+ files, pipes, and sockets.
+
+
+
+ A
+ file
+ is a linear array of bytes with at least one name.
+ A file exists until all its names are deleted explicitly
+ and no process holds a descriptor for it.
+ A process acquires a descriptor for a file
+ by opening that file's name with the
+ open
+ system call.
+ I/O devices are accessed as files.
+
+
+
+ A
+ pipe
+ is a linear array of bytes, as is a file, but it is used solely
+ as an I/O stream, and it is unidirectional.
+ It also has no name,
+ and thus cannot be opened with
+ open.
+ Instead, it is created by the
+ pipe
+ system call, which returns two descriptors,
+ one of which accepts input that is sent to the other descriptor reliably,
+ without duplication, and in order.
+ The system also supports a named pipe or
+ FIFO.
+ A
+ FIFO
+ has properties identical to a pipe, except that it appears
+ in the filesystem;
+ thus, it can be opened using the
+ open
+ system call.
+ Two processes that wish to communicate each open the
+ FIFO:
+ One opens it for reading, the other for writing.
+
+
+
+ A
+ socket
+ is a transient object that is used for
+ interprocess communication;
+ it exists only as long as some process holds a descriptor
+ referring to it.
+ A socket is created by the
+ socket
+ system call, which returns a descriptor for it.
+ There are different kinds of sockets that support various communication
+ semantics, such as reliable delivery of data, preservation of
+ message ordering, and preservation of message boundaries.
+
+
+
+ In systems before 4.2BSD, pipes were implemented using the filesystem;
+ when sockets were introduced in 4.2BSD,
+ pipes were reimplemented as sockets.
+
+ The kernel keeps for each process a
+ descriptor table,
+ which is a table that the kernel uses
+ to translate the external representation
+ of a descriptor into an internal representation.
+ (The descriptor is merely an index into this table.)
+ The descriptor table of a process is inherited from that process's parent,
+ and thus access to the objects
+ to which the descriptors refer also is inherited.
+ The main ways that a process can obtain a descriptor are by
+ opening or creation of an object,
+ and by inheritance from the parent process.
+ In addition, socket
+ IPC
+ allows passing of descriptors in messages between unrelated processes
+ on the same machine.
+
+ Every valid descriptor has an associated
+ file offset
+ in bytes from the beginning of the object.
+ Read and write operations start at this offset, which is
+ updated after each data transfer.
+ For objects that permit random access,
+ the file offset also may be set with the
+ lseek
+ system call.
+ Ordinary files permit random access, and some devices do, as well.
+ Pipes and sockets do not.
+
+ When a process terminates, the kernel
+ reclaims all the descriptors that were in use by that process.
+ If the process was holding the final reference to an object,
+ the object's manager is notified so that it can do any
+ necessary cleanup actions, such as final deletion of a file
+ or deallocation of a socket.
+
+
+
+ Descriptor Management
+
+ Most processes expect three descriptors to be open already
+ when they start running.
+ These descriptors are 0, 1, 2, more commonly known as
+ standard input,
+ standard output,
+ and
+ standard error,
+ respectively.
+ Usually, all three are associated with the user's terminal
+ by the login process
+ (see
+ Section 14.6)
+ and are inherited through
+ fork
+ and
+ exec
+ by processes run by the user.
+ Thus, a program can read what the user types by reading standard
+ input, and the program can send output to the user's screen by
+ writing to standard output.
+ The standard error descriptor also is open for writing and is
+ used for error output, whereas standard output is used for ordinary output.
+
+ These (and other) descriptors can be mapped to objects other than
+ the terminal;
+ such mapping is called
+ I/O redirection,
+ and all the standard shells permit users to do it.
+ The shell can direct the output of a program to a file
+ by closing descriptor 1 (standard output) and opening
+ the desired output file to produce a new descriptor 1.
+ It can similarly redirect standard input to come from a file
+ by closing descriptor 0 and opening the file.
+
+ Pipes allow the output of one program to be input to another program
+ without rewriting or even relinking of either program.
+ Instead of descriptor 1 (standard output)
+ of the source program being set up to write to the terminal,
+ it is set up to be the input descriptor of a pipe.
+ Similarly, descriptor 0 (standard input)
+ of the sink program is set up to reference the output of the pipe,
+ instead of the terminal keyboard.
+ The resulting set of two processes and the connecting pipe is known as a
+ pipeline.
+ Pipelines can be arbitrarily long series of processes connected by pipes.
+
+ The
+ open,
+ pipe,
+ and
+ socket
+ system calls produce new descriptors with the lowest unused number
+ usable for a descriptor.
+ For pipelines to work,
+ some mechanism must be provided to map such descriptors into 0 and 1.
+ The
+ dup
+ system call creates a copy of a descriptor that
+ points to the same file-table entry.
+ The new descriptor is also the lowest unused one,
+ but if the desired descriptor is closed first,
+ dup
+ can be used to do the desired mapping.
+ Care is required, however: If descriptor 1 is desired,
+ and descriptor 0 happens also to have been closed, descriptor 0
+ will be the result.
+ To avoid this problem, the system provides the
+ dup2
+ system call;
+ it is like
+ dup,
+ but it takes an additional argument specifying
+ the number of the desired descriptor
+ (if the desired descriptor was already open,
+ dup2
+ closes it before reusing it).
+
+
+
+ Devices
+
+ Hardware devices have filenames, and may be
+ accessed by the user via the same system calls used for regular files.
+ The kernel can distinguish a
+ device special file
+ or
+ special file,
+ and can determine to what device it refers,
+ but most processes do not need to make this determination.
+ Terminals, printers, and tape drives are all accessed as though they
+ were streams of bytes, like 4.4BSD disk files.
+ Thus, device dependencies and peculiarities are kept in the kernel
+ as much as possible, and even in the kernel most of them are segregated
+ in the device drivers.
+
+ Hardware devices can be categorized as either
+ structured
+ or
+ unstructured;
+ they are known as
+ block
+ or
+ character
+ devices, respectively.
+ Processes typically access devices through
+ special files
+ in the filesystem.
+ I/O operations to these files are handled by
+ kernel-resident software modules termed
+ device drivers.
+ Most network-communication hardware devices are accessible through only
+ the interprocess-communication facilities,
+ and do not have special files in the filesystem name space,
+ because the
+ raw-socket
+ interface provides a more natural interface than does a special file.
+
+ Structured or block devices are typified by disks and magnetic tapes,
+ and include most random-access devices.
+ The kernel supports read-modify-write-type buffering actions
+ on block-oriented structured devices to allow the latter
+ to be read and written in a
+ totally random byte-addressed fashion, like regular files.
+ Filesystems are created on block devices.
+
+ Unstructured devices are those devices that do not support a block
+ structure.
+ Familiar unstructured devices are communication lines, raster
+ plotters, and unbuffered magnetic tapes and disks.
+ Unstructured devices typically support large block I/O transfers.
+
+ Unstructured files are called
+ character devices
+ because the first of these to be implemented were terminal device drivers.
+ The kernel interface to the driver for these devices proved convenient
+ for other devices that were not block structured.
+
+ Device special files are created by the
+ mknod
+ system call.
+ There is an additional system call,
+ ioctl,
+ for manipulating the underlying device parameters of special files.
+ The operations that can be done differ for each device.
+ This system call allows the special characteristics of devices to
+ be accessed, rather than overloading the semantics of other system calls.
+ For example, there is an
+ ioctl
+ on a tape drive to write an end-of-tape mark,
+ instead of there being a special or modified version of
+ write.
+
+
+
+ Socket IPC
+
+ The 4.2BSD kernel introduced an
+ IPC
+ mechanism more flexible than pipes, based on
+ sockets.
+ A socket is an endpoint of communication referred to by
+ a descriptor, just like a file or a pipe.
+ Two processes can each create a socket, and then connect those
+ two endpoints to produce a reliable byte stream.
+ Once connected, the descriptors for the sockets can be read or written
+ by processes, just as the latter would do with a pipe.
+ The transparency of sockets allows the kernel to redirect the output
+ of one process to the input of another process residing on another machine.
+ A major difference between pipes and sockets is that
+ pipes require a common parent process to set up the
+ communications channel.
+ A connection between sockets can be set up by two unrelated processes,
+ possibly residing on different machines.
+
+ System V provides local interprocess communication through
+ FIFOs
+ (also known as
+ named pipes).
+ FIFOs
+ appear as an object in the filesystem that unrelated
+ processes can open and send data through in the same
+ way as they would communicate through a pipe.
+ Thus,
+ FIFOs
+ do not require a common parent to set them up;
+ they can be connected after a pair of processes are up and running.
+ Unlike sockets,
+ FIFOs
+ can be used on only a local machine;
+ they cannot be used to communicate between processes on different machines.
+ FIFOs
+ are implemented in 4.4BSD only because they are required by the
+ POSIX.1
+ standard.
+ Their functionality is a subset of the socket interface.
+
+ The socket mechanism requires extensions to the traditional UNIX
+ I/O system calls to provide the associated naming and connection semantics.
+ Rather than overloading the existing interface,
+ the developers used the existing interfaces to the extent that
+ the latter worked without being changed,
+ and designed new interfaces to handle the added semantics.
+ The
+ read
+ and
+ write
+ system calls were used for byte-stream type connections,
+ but six new system calls were added
+ to allow sending and receiving addressed messages
+ such as network datagrams.
+ The system calls for writing messages include
+ send,
+ sendto,
+ and
+ sendmsg.
+ The system calls for reading messages include
+ recv,
+ recvfrom,
+ and
+ recvmsg.
+ In retrospect, the first two in each class are special cases of the others;
+ recvfrom
+ and
+ sendto
+ probably should have been added as library interfaces to
+ recvmsg
+ and
+ sendmsg,
+ respectively.
+
+
+
+ Scatter/Gather I/O
+
+ In addition to the traditional
+ read
+ and
+ write
+ system calls, 4.2BSD introduced the ability to do scatter/gather I/O.
+ Scatter input uses the
+ readv
+ system call to allow a single read
+ to be placed in several different buffers.
+ Conversely, the
+ writev
+ system call allows several different buffers
+ to be written in a single atomic write.
+ Instead of passing a single buffer and length parameter, as is done with
+ read
+ and
+ write,
+ the process passes in a pointer to an array of buffers and lengths,
+ along with a count describing the size of the array.
+
+ This facility allows buffers in different parts of a process
+ address space to be written atomically, without the
+ need to copy them to a single contiguous buffer.
+ Atomic writes are necessary in the case where the underlying
+ abstraction is record based, such as tape drives that output a
+ tape block on each write request.
+ It is also convenient to be able to read a single request into
+ several different buffers (such as a record header into one place
+ and the data into another).
+ Although an application can simulate the ability to scatter data
+ by reading the data into a large buffer and then copying the pieces
+ to their intended destinations,
+ the cost of memory-to-memory copying in such cases often
+ would more than double the running time of the affected application.
+
+ Just as
+ send
+ and
+ recv
+ could have been implemented as library interfaces to
+ sendto
+ and
+ recvfrom,
+ it also would have been possible to simulate
+ read
+ with
+ readv
+ and
+ write
+ with
+ writev.
+ However,
+ read
+ and
+ write
+ are used so much more frequently that the added cost
+ of simulating them would not have been worthwhile.
+
+
+
+ Multiple Filesystem Support
+
+ With the expansion of network computing,
+ it became desirable to support both local and remote filesystems.
+ To simplify the support of multiple filesystems,
+ the developers added a new virtual node or
+ vnode
+ interface to the kernel.
+ The set of operations exported from the vnode interface
+ appear much like the filesystem operations previously supported
+ by the local filesystem.
+ However, they may be supported by a wide range of filesystem types:
+
+
+
+ Local disk-based filesystems
+
+
+
+ Files imported using a variety of remote filesystem protocols
+
+
+
+ Read-only
+ CD-ROM
+ filesystems
+
+
+
+ Filesystems providing special-purpose interfaces -- for example, the
+ /proc
+ filesystem
+
+
+
+ A few variants of 4.4BSD, such as FreeBSD,
+ allow filesystems to be loaded dynamically
+ when the filesystems are first referenced by the
+ mount
+ system call.
+ The vnode interface is described in
+ Section 6.5;
+ its ancillary support routines are described in
+ Section 6.6;
+ several of the special-purpose filesystems are described in
+ Section 6.7.
+
+
+
+
+ Filesystems
+
+ A regular file is a linear array of bytes,
+ and can be read and written starting at any byte in the file.
+ The kernel distinguishes no record boundaries in regular files, although
+ many programs recognize line-feed characters as distinguishing
+ the ends of lines, and other programs may impose other structure.
+ No system-related information about a file is kept in the file itself,
+ but the filesystem stores a small amount of ownership, protection,
+ and usage information with each file.
+
+ A
+ filename
+ component is a string of up to 255 characters.
+ These filenames are stored in a type of file called a
+ directory.
+ The information in a directory about a file is called a
+ directory entry
+ and includes, in addition to the filename,
+ a pointer to the file itself.
+ Directory entries may refer to other directories, as well as to plain files.
+ A hierarchy of directories and files is thus formed, and is called a
+ filesystem;
+
+
+ A small filesystem
+
+
+
+
+
+
+
+ +-------+
+ | |
+ +-------+
+ / \
+ usr / \ vmunix
+ |/ \|
+ +-------+ +-------+
+ | | | |
+ +-------+ +-------+
+ / | \
+ staff / | \ bin
+ |/ | tmp \|
+ +-------+ V +-------+
+ | | +-------+ | |
+ +-------+ | | +-------+
+ / | \ +-------+ / | \
+ mckusick / | \| |/ | \ ls
+ |/ | karels | vi \|
++-------+ V V +-------+
+| | +-------+ +-------+ | |
++-------+ | | | | +-------+
+ +-------+ +-------+
+
+
+
+ A small filesystem tree
+
+
+
+
+ a small one is shown in .
+ Directories may contain subdirectories, and there is no inherent
+ limitation to the depth with which directory nesting may occur.
+ To protect the consistency of the filesystem, the kernel
+ does not permit processes to write directly into directories.
+ A filesystem may include not only plain files and directories,
+ but also references to other objects, such as devices and sockets.
+
+ The filesystem forms a tree, the beginning of which is the
+ root directory,
+ sometimes referred to by the name
+ slash,
+ spelled with a single solidus character (/).
+ The root directory contains files; in our example in Fig 2.2, it contains
+ vmunix,
+ a copy of the kernel-executable object file.
+ It also contains directories; in this example, it contains the
+ usr
+ directory.
+ Within the
+ usr
+ directory is the
+ bin
+ directory, which mostly contains executable object code of programs,
+ such as the files
+
+ ls
+ and
+ vi.
+
+ A process identifies a file by specifying that file's
+ pathname,
+ which is a string composed of zero or more
+ filenames separated by slash (/) characters.
+ The kernel associates two directories with each process for use
+ in interpreting pathnames.
+ A process's
+ root directory
+ is the topmost point in the filesystem that the process can access;
+ it is ordinarily set to the root directory of the entire filesystem.
+ A pathname beginning with a slash is called an
+ absolute pathname,
+ and is interpreted by the kernel starting with the process's root directory.
+
+ A pathname that does not begin with a slash is called a
+ relative pathname,
+ and is interpreted relative to the
+ current working directory
+ of the process.
+ (This directory also is known by the shorter names
+ current directory
+ or
+ working directory.)
+ The current directory itself may be referred to directly by the name
+ dot,
+ spelled with a single period
+ (.).
+ The filename
+ dot-dot
+ (..)
+ refers to a directory's parent directory.
+ The root directory is its own parent.
+
+ A process may set its root directory with the
+ chroot
+ system call,
+ and its current directory with the
+ chdir
+ system call.
+ Any process may do
+ chdir
+ at any time, but
+ chroot
+ is permitted only a process with superuser privileges.
+ Chroot
+ is normally used to set up restricted access to the system.
+
+ Using the filesystem shown in Fig. 2.2,
+ if a process has the root of the filesystem as its root directory, and has
+ /usr
+ as its current directory, it can refer to the file
+ vi
+ either from the root with the absolute pathname
+ /usr/bin/vi,
+ or from its current directory with the relative pathname
+ bin/vi.
+
+ System utilities and databases are kept in certain well-known directories.
+ Part of the well-defined hierarchy includes a directory that contains the
+ home directory
+ for each user -- for example,
+ /usr/staff/mckusick
+ and
+ /usr/staff/karels
+ in Fig. 2.2.
+ When users log in,
+ the current working directory of their shell is set to the
+ home directory.
+ Within their home directories,
+ users can create directories as easily as they can regular files.
+ Thus, a user can build arbitrarily complex subhierarchies.
+
+ The user usually knows of only one filesystem, but the system may
+ know that this one virtual filesystem
+ is really composed of several physical
+ filesystems, each on a different device.
+ A physical filesystem may not span multiple hardware devices.
+ Since most physical disk devices are divided into several logical devices,
+ there may be more than one filesystem per physical device,
+ but there will be no more than one per logical device.
+ One filesystem -- the filesystem that
+ anchors all absolute pathnames -- is called the
+ root filesystem,
+ and is always available.
+ Others may be mounted;
+ that is, they may be integrated into the
+ directory hierarchy of the root filesystem.
+ References to a directory that has a filesystem mounted on it
+ are converted transparently by the kernel
+ into references to the root directory of the mounted filesystem.
+
+ The
+ link
+ system call takes the name of an existing file and another name
+ to create for that file.
+ After a successful
+ link,
+ the file can be accessed by either filename.
+ A filename can be removed with the
+ unlink
+ system call.
+ When the final name for a file is removed (and the final process that
+ has the file open closes it), the file is deleted.
+
+ Files are organized hierarchically in
+ directories.
+ A directory is a type of file,
+ but, in contrast to regular files,
+ a directory has a structure imposed on it by the system.
+ A process can read a directory as it would an ordinary file,
+ but only the kernel is permitted to modify a directory.
+ Directories are created by the
+ mkdir
+ system call and are removed by the
+ rmdir
+ system call.
+ Before 4.2BSD, the
+ mkdir
+ and
+ rmdir
+ system calls were implemented by a series of
+ link
+ and
+ unlink
+ system calls being done.
+ There were three reasons for adding systems calls
+ explicitly to create and delete directories:
+
+
+
+ The operation could be made atomic.
+ If the system crashed,
+ the directory would not be left half-constructed,
+ as could happen when a series of link operations were used.
+
+
+ When a
+ networked filesystem is being run,
+ the creation and deletion of files and directories need to be
+ specified atomically so that they can be serialized.
+
+
+ When supporting non-UNIX filesystems, such as an
+ MS-DOS
+ filesystem, on another partition of the disk,
+ the other filesystem may not support link operations.
+ Although other filesystems might support the concept of directories,
+ they probably would not create and delete the directories with links,
+ as the UNIX filesystem does.
+ Consequently, they could create and delete directories only
+ if explicit directory create and delete requests were presented.
+
+
+
+ The
+ chown
+ system call sets the owner and group of a file, and
+ chmod
+ changes protection attributes.
+ Stat
+ applied to a filename can be used to read back such properties of a file.
+ The
+ fchown,
+ fchmod,
+ and
+ fstat
+ system calls are applied to a descriptor, instead of
+ to a filename, to do the same set of operations.
+ The
+ rename
+ system call can be used to give a file a new name in the filesystem,
+ replacing one of the file's old names.
+ Like the directory-creation and directory-deletion operations, the
+ rename
+ system call was added to 4.2BSD
+ to provide atomicity to name changes in the local filesystem.
+ Later, it proved useful explicitly to
+ export renaming operations to foreign filesystems and over the network.
+
+ The
+ truncate
+ system call was added to 4.2BSD to allow files to be shortened
+ to an arbitrary offset.
+ The call was added primarily in support of the Fortran
+ run-time library,
+ which has the semantics such that the end of a random-access
+ file is set to be wherever the program most recently accessed that file.
+ Without the
+ truncate
+ system call, the only way to shorten a file was to
+ copy the part that was desired to a new file, to delete the old file,
+ then to rename the copy to the original name.
+ As well as this algorithm being slow,
+ the library could potentially fail on a full filesystem.
+
+ Once the filesystem had the ability to shorten files,
+ the kernel took advantage of that ability
+ to shorten large empty directories.
+ The advantage of shortening empty directories is that it reduces the
+ time spent in the kernel searching them
+ when names are being created or deleted.
+
+ Newly created files are assigned the user identifier of the process
+ that created them and the group identifier of the directory
+ in which they were created.
+ A three-level access-control mechanism is provided for
+ the protection of files.
+ These three levels specify the accessibility of a file to
+
+
+
+ The user who owns the file
+
+
+ The group that owns the file
+
+
+ Everyone else
+
+
+
+ Each level of access has separate indicators for read permission,
+ write permission, and execute permission.
+
+ Files are created with zero length, and may grow when they are written.
+ While a file is open, the system maintains a pointer into
+ the file indicating the current location in
+ the file associated with the descriptor.
+ This pointer can be moved about in the file in a random-access fashion.
+ Processes sharing a file descriptor through a
+ fork
+ or
+ dup
+ system call share the current location pointer.
+ Descriptors created by separate
+ open
+ system calls have separate current location pointers.
+ Files may have
+ holes
+ in them.
+ Holes are void areas in the linear extent of the file where data have
+ never been written.
+ A process can create these holes by positioning
+ the pointer past the current end-of-file and writing.
+ When read, holes are treated by the system as zero-valued bytes.
+
+ Earlier UNIX systems had a limit of 14 characters per filename component.
+ This limitation was often a problem.
+ For example,
+ in addition to the natural desire of users
+ to give files long descriptive names,
+ a common way of forming filenames is as
+ basename.extension,
+ where the extension (indicating the kind of file, such as
+ .c
+ for C source or
+ .o
+ for intermediate binary object)
+ is one to three characters,
+ leaving 10 to 12 characters for the basename.
+ Source-code\-control systems and editors usually take up another
+ two characters, either as a prefix or a suffix, for their purposes,
+ leaving eight to 10 characters.
+ It is easy to use 10 or 12 characters in a single
+ English word as a basename (e.g., ``multiplexer'').
+
+ It is possible to keep within these limits,
+ but it is inconvenient or even dangerous, because other UNIX
+ systems accept strings longer than the limit when creating files,
+ but then
+ truncate
+ to the limit.
+ A C language source file named
+ multiplexer.c
+ (already 13 characters) might have a source-code-control file
+ with
+ s.
+ prepended, producing a filename
+ s.multiplexer
+ that is indistinguishable from the source-code-control file for
+ multiplexer.ms,
+ a file containing
+
+ troff
+ source for documentation for the C program.
+ The contents of the two original files could easily get confused
+ with no warning from the source-code-control system.
+ Careful coding can detect this problem, but the
+ long filenames
+ first introduced in 4.2BSD practically eliminate it.
+
+
+
+ Filestores
+
+ The operations defined for local filesystems are divided into two parts.
+ Common to all local filesystems are hierarchical naming,
+ locking, quotas, attribute management, and protection.
+ These features are independent of how the data will be stored.
+ 4.4BSD has a single implementation to provide these semantics.
+
+ The other part of the local filesystem is the organization
+ and management of the data on the storage media.
+ Laying out the contents of files on the storage media is
+ the responsibility of the filestore.
+ 4.4BSD supports three different filestore layouts:
+
+
+
+ The traditional Berkeley Fast Filesystem
+
+
+ The log-structured filesystem,
+ based on the Sprite operating-system design
+
+
+
+ A memory-based filesystem
+
+
+
+ Although the organizations of these filestores are completely different,
+ these differences are indistinguishable
+ to the processes using the filestores.
+
+ The Fast Filesystem organizes data into cylinder groups.
+ Files that are likely to be accessed together,
+ based on their locations in the filesystem hierarchy,
+ are stored in the same cylinder group.
+ Files that are not expected to accessed together are moved into
+ different cylinder groups.
+ Thus, files written at the same time may be placed far apart on the
+ disk.
+
+ The log-structured filesystem organizes data as a log.
+ All data being written at any point in time are gathered together,
+ and are written at the same disk location.
+ Data are never overwritten;
+ instead, a new copy of the file is written that replaces the old one.
+ The old files are reclaimed by a garbage-collection process that runs
+ when the filesystem becomes full and additional free space is needed.
+
+ The memory-based filesystem is designed to store data in virtual memory.
+ It is used for filesystems that need to support
+ fast but temporary data, such as
+ /tmp.
+ The goal of the memory-based filesystem is to keep
+ the storage packed as compactly as possible to minimize
+ the usage of virtual-memory resources.
+
+
+
+ Network Filesystem
+
+ Initially, networking was used
+ to transfer data from one machine to another.
+ Later, it evolved to allowing users to log in remotely to another machine.
+ The next logical step was to bring the data to the user,
+ instead of having the user go to the data --
+ and network filesystems were born.
+ Users working locally
+ do not experience the network delays on each keystroke,
+ so they have a more responsive environment.
+
+ Bringing the filesystem to a local machine was among the first
+ of the major client-server applications.
+ The
+ server
+ is the remote machine that exports one or more of its filesystems.
+ The
+ client
+ is the local machine that imports those filesystems.
+ From the local client's point of view,
+ a remotely mounted filesystem appears in the file-tree name space
+ just like any other locally mounted filesystem.
+ Local clients can change into directories on the remote filesystem,
+ and can read, write, and execute binaries within that remote filesystem
+ identically to the way that they can do these operations
+ on a local filesystem.
+
+ When the local client does an operation on a remote filesystem,
+ the request is packaged and is sent to the server.
+ The server does the requested operation and
+ returns either the requested information or an error
+ indicating why the request was denied.
+ To get reasonable performance,
+ the client must cache frequently accessed data.
+ The complexity of remote filesystems lies in maintaining cache
+ consistency between the server and its many clients.
+
+ Although many remote-filesystem protocols
+ have been developed over the years,
+ the most pervasive one in use among UNIX
+ systems is the Network Filesystem
+ (NFS),
+ whose protocol and most widely used implementation were
+ done by Sun Microsystems.
+ The 4.4BSD kernel supports the
+ NFS
+ protocol, although the implementation was done independently
+ from the protocol specification
+ .
+ The
+ NFS
+ protocol is described in
+ Chapter 9.
+
+
+
+
+ Terminals
+
+ Terminals support the standard system I/O operations, as well
+ as a collection of terminal-specific operations to control input-character
+ editing and output delays.
+ At the lowest level are the terminal device drivers that control
+ the hardware terminal ports.
+ Terminal input is handled according to the underlying communication
+ characteristics, such as baud rate,
+ and according to a set of software-controllable
+ parameters, such as parity checking.
+
+ Layered above the terminal device drivers are line disciplines
+ that provide various degrees of character processing.
+ The default line discipline is selected when a port is being
+ used for an interactive login.
+ The line discipline is run in
+ canonical mode;
+ input is processed to provide standard line-oriented editing functions,
+ and input is presented to a process on a line-by-line basis.
+
+
+ Screen editors and programs that communicate with other computers
+ generally run in
+ noncanonical mode
+ (also commonly referred to as
+ raw mode
+ or
+ character-at-a-time mode).
+ In this mode, input is passed through to the reading process immediately
+ and without interpretation.
+ All special-character input processing is disabled,
+ no erase or other line editing processing is done,
+ and all characters are passed to the program
+ that is reading from the terminal.
+
+
+ It is possible to configure the terminal in thousands
+ of combinations between these two extremes.
+ For example,
+ a screen editor that wanted to receive user interrupts asynchronously
+ might enable the special characters that
+ generate signals and enable output flow control,
+ but otherwise run in noncanonical mode;
+ all other characters would be passed through to the process uninterpreted.
+
+ On output, the terminal handler provides simple formatting services,
+ including
+
+
+
+
+ Converting the line-feed character
+ to the two-character carriage-return-line-feed sequence
+
+
+
+ Inserting delays after certain standard control characters
+
+
+
+ Expanding tabs
+
+
+
+ Displaying echoed nongraphic
+ ASCII
+ characters as a two-character sequence of the
+ form ``^C''
+ (i.e., the
+ ASCII
+ caret character followed by the
+ ASCII
+ character that is the character's value offset from the
+ ASCII
+ ``@'' character).
+
+
+
+ Each of these formatting services can be disabled individually by
+ a process through control requests.
+
+
+
+
+ Interprocess Communication
+
+ Interprocess communication in 4.4BSD is organized in
+ communication domains.
+ Domains currently supported include the
+ local domain,
+ for communication between processes executing on the same machine; the
+ internet domain,
+ for communication between processes using the
+ TCP/IP
+ protocol suite (perhaps within the Internet); the
+ ISO/OSI
+ protocol family for communication between sites required to run them;
+ and the
+ XNS domain,
+ for communication between processes using the
+ XEROX
+ Network Systems
+ (XNS)
+ protocols.
+
+ Within a domain, communication takes place between communication
+ endpoints known as
+ sockets.
+ As mentioned in
+ Section 2.6,
+ the
+ socket
+ system call creates a socket and returns a descriptor;
+ other
+ IPC
+ system calls are described in
+ Chapter 11.
+ Each socket has a type that defines its communications semantics;
+ these semantics include properties such as reliability, ordering,
+ and prevention of duplication of messages.
+
+ Each socket has associated with it a
+ communication protocol.
+ This protocol provides the semantics required
+ by the socket according to the latter's type.
+ Applications may request a specific protocol when creating a socket, or
+ may allow the system to select a protocol that is appropriate for the type
+ of socket being created.
+
+ Sockets may have addresses bound to them.
+ The form and meaning of socket addresses are dependent on the
+ communication domain in which the socket is created.
+ Binding a name to a socket in the
+ local domain causes a file to be created in the filesystem.
+
+ Normal data transmitted and received through sockets are untyped.
+ Data-representation issues are the responsibility of libraries built
+ on top of the interprocess-communication facilities.
+ In addition to transporting normal data, communication domains may
+ support the transmission and reception of specially typed data, termed
+ access rights.
+ The local domain, for example,
+ uses this facility to pass descriptors between processes.
+
+ Networking implementations on UNIX before 4.2BSD
+ usually worked by overloading the character-device interfaces.
+ One goal of the socket interface was for naive
+ programs to be able to work without change on stream-style connections.
+ Such programs can work only if the
+ read
+ and
+ write
+ systems calls are unchanged.
+ Consequently, the original interfaces were left intact,
+ and were made to work on stream-type sockets.
+ A new interface was added for more complicated sockets,
+ such as those used to send datagrams, with which a destination address
+ must be presented with each
+ send
+ call.
+
+ Another benefit is that the new interface is highly portable.
+ Shortly after a test release was available from Berkeley,
+ the socket interface had been ported to System III
+ by a UNIX vendor
+ (although AT&T did not support the socket interface
+ until the release of System V Release 4,
+ deciding instead to use the
+ Eighth Edition stream mechanism).
+ The socket interface was also ported to run in many
+ Ethernet boards by vendors, such as Excelan and Interlan, that were
+ selling into the PC market, where the machines were
+ too small to run networking in the main processor.
+ More recently, the socket interface was used as the basis for
+ Microsoft's Winsock networking interface for Windows.
+
+
+
+ Network Communication
+
+ Some of the communication domains supported by the
+ socket
+ IPC
+ mechanism provide access to network protocols.
+ These protocols are implemented as a separate software
+ layer logically below the socket software in the kernel.
+ The kernel provides many ancillary services, such as
+ buffer management, message routing, standardized interfaces
+ to the protocols, and interfaces to the network interface drivers
+ for the use of the various network protocols.
+
+ At the time that 4.2BSD was being implemented,
+ there were many networking protocols in use or under development,
+ each with its own strengths and weaknesses.
+ There was no clearly superior protocol or protocol suite.
+ By supporting multiple protocols, 4.2BSD
+ could provide interoperability and resource sharing
+ among the diverse set of machines that was available
+ in the Berkeley environment.
+ Multiple-protocol support also provides for future changes.
+ Today's protocols designed for 10- to 100-Mbit-per-second
+ Ethernets are likely to be inadequate for
+ tomorrow's 1- to 10-Gbit-per-second fiber-optic networks.
+ Consequently, the network-communication layer is
+ designed to support multiple protocols.
+ New protocols are added to the kernel without
+ the support for older protocols being affected.
+ Older applications can continue to operate using the old protocol
+ over the same physical network as is used by newer applications
+ running with a newer network protocol.
+
+
+
+ Network Implementation
+
+ The first protocol suite implemented in 4.2BSD was
+ DARPA's
+ Transmission Control Protocol/Internet Protocol
+ (TCP/IP).
+ The
+ CSRG
+ chose
+ TCP/IP
+ as the first network to incorporate into the socket
+ IPC
+ framework,
+ because a 4.1BSD-based implementation was publicly available from a
+ DARPA-sponsored
+ project at Bolt, Beranek, and Newman
+ (BBN).
+ That was an influential choice:
+ The 4.2BSD implementation
+ is the main reason for the extremely widespread use of this protocol suite.
+ Later performance and capability improvements to the
+ TCP/IP
+ implementation have also been widely adopted.
+ The
+ TCP/IP
+ implementation is described in detail in
+ Chapter 13.
+
+ The release of 4.3BSD added the Xerox Network Systems
+ (XNS)
+ protocol suite,
+ partly building on work done at the
+ University of Maryland and at
+ Cornell University.
+ This suite was needed to connect
+ isolated machines that could not communicate using
+ TCP/IP.
+
+ The release of 4.4BSD added the
+ ISO
+ protocol suite because of the latter's increasing
+ visibility both within and outside the United States.
+ Because of the somewhat different semantics defined for the
+ ISO
+ protocols, some minor changes were required in the socket interface
+ to accommodate these semantics.
+ The changes were made such that they were invisible to clients
+ of other existing protocols.
+ The
+ ISO
+ protocols also required extensive addition to the two-level routing
+ tables provided by the kernel in 4.3BSD.
+ The greatly expanded routing capabilities of 4.4BSD include
+ arbitrary levels of routing with variable-length addresses and
+ network masks.
+
+
+
+ System Operation
+
+ Bootstrapping mechanisms are used to start the system running.
+ First, the 4.4BSD
+ kernel must be loaded into the main memory of the processor.
+ Once loaded, it must go through an initialization phase to
+ set the hardware into a known state.
+ Next, the kernel must do
+ autoconfiguration, a process that finds
+ and configures the peripherals that are attached to the processor.
+ The system begins running in single-user mode while a start-up script does
+ disk checks and starts the accounting and quota checking.
+ Finally, the start-up script starts the general system services
+ and brings up
+ the system to full multiuser operation.
+
+ During multiuser operation, processes wait for login requests
+ on the terminal lines and network ports that have been configured
+ for user access.
+ When a login request is detected,
+ a login process is spawned and user validation is done.
+ When the login validation is successful, a
+ login shell is created from which
+ the user can run additional processes.
+
+
+
+ References
+
+
+ Accetta et al, 1986
+
+
+ Mach: A New Kernel Foundation for UNIX Development"
+
+
+
+ M.
+ Accetta
+
+
+ R.
+ Baron
+
+
+ W.
+ Bolosky
+
+
+ D.
+ Golub
+
+
+ R.
+ Rashid
+
+
+ A.
+ Tevanian
+
+
+ M.
+ Young
+
+
+
+ 93-113
+
+
+
+ USENIX Association Conference Proceedings
+ USENIX Association
+ June 1986
+
+
+
+
+ Cheriton, 1988
+
+
+ The V Distributed System
+
+
+ D. R.
+ Cheriton
+
+
+ 314-333
+
+
+
+ Comm ACM, 31, 3
+
+ March 1988
+
+
+
+
+ Ewens et al, 1985
+
+
+ Tunis: A Distributed Multiprocessor Operating System
+
+
+
+ P.
+ Ewens
+
+
+
+ D. R.
+ Blythe
+
+
+
+ M.
+ Funkenhauser
+
+
+
+ R. C.
+ Holt
+
+
+
+ 247-254
+
+
+
+ USENIX Assocation Conference Proceedings
+ USENIX Association
+ June 1985
+
+
+
+
+ Gingell et al, 1987
+
+
+ Virtual Memory Architecture in SunOS
+
+
+
+ R.
+ Gingell
+
+
+
+ J.
+ Moran
+
+
+
+ W.
+ Shannon
+
+
+
+ 81-94
+
+
+
+ USENIX Association Conference Proceedings
+ USENIX Association
+ June 1987
+
+
+
+
+ Kernighan & Pike, 1984
+
+ The UNIX Programming Environment
+
+
+
+ B. W.
+ Kernighan
+
+
+
+ R.
+ Pike
+
+
+
+
+ Prentice-Hall
+
+ Englewood Cliffs
+ NJ
+
+
+
+ 1984
+
+
+
+ Macklem, 1994
+
+
+ The 4.4BSD NFS Implementation
+
+
+ R.
+ Macklem
+
+
+ 6:1-14
+
+
+
+ 4.4BSD System Manager's Manual
+
+
+ O'Reilly & Associates, Inc.
+
+ Sebastopol
+ CA
+
+
+
+ 1994
+
+
+
+
+ McKusick & Karels, 1988
+
+
+ Design of a General Purpose Memory Allocator for the 4.3BSD
+ UNIX Kernel
+
+
+
+ M. K.
+ McKusick
+
+
+
+ M. J.
+ Karels
+
+
+
+ 295-304
+
+
+
+ USENIX Assocation Conference Proceedings
+ USENIX Assocation
+ June 1998
+
+
+
+
+ McKusick et al, 1994
+
+
+ Berkeley Software Architecture Manual, 4.4BSD Edition
+
+
+
+ M. K.
+ McKusick
+
+
+
+ M. J.
+ Karels
+
+
+
+ S. J.
+ Leffler
+
+
+
+ W. N.
+ Joy
+
+
+
+ R. S.
+ Faber
+
+
+
+ 5:1-42
+
+
+
+ 4.4BSD Programmer's Supplementary Documents
+
+
+ O'Reilly & Associates, Inc.
+
+ Sebastopol
+ CA
+
+
+
+ 1994
+
+
+
+
+ Ritchie, 1988
+
+ Early Kernel Design
+ private communication
+
+
+ D. M.
+ Ritchie
+
+
+ March 1988
+
+
+
+ Rosenblum & Ousterhout, 1992
+
+
+ The Design and Implementation of a Log-Structured File
+ System
+
+
+
+ M.
+ Rosenblum
+
+
+
+ K.
+ Ousterhout
+
+
+
+ 26-52
+
+
+
+ ACM Transactions on Computer Systems, 10, 1
+
+ Association for Computing Machinery
+ February 1992
+
+
+
+
+ Rozier et al, 1988
+
+
+ Chorus Distributed Operating Systems
+
+
+
+ M.
+ Rozier
+
+
+
+ V.
+ Abrossimov
+
+
+
+ F.
+ Armand
+
+
+
+ I.
+ Boule
+
+
+
+ M.
+ Gien
+
+
+
+ M.
+ Guillemont
+
+
+
+ F.
+ Herrmann
+
+
+
+ C.
+ Kaiser
+
+
+
+ S.
+ Langlois
+
+
+
+ P.
+ Leonard
+
+
+
+ W.
+ Neuhauser
+
+
+
+ 305-370
+
+
+
+ USENIX Computing Systems, 1, 4
+ Fall 1988
+
+
+
+
+ Tevanian, 1987
+
+ Architecture-Independent Virtual Memory Management for Parallel
+ and Distributed Environments: The Mach Approach
+ Technical Report CMU-CS-88-106,
+
+
+ A.
+ Tevanian
+
+
+
+ Department of Computer Science, Carnegie-Mellon
+ University
+
+
+ Pittsburgh
+ PA
+
+
+
+ December 1987
+
+
+
+
diff --git a/en_US.ISO_8859-1/books/design-44bsd/fig1.eps b/en_US.ISO_8859-1/books/design-44bsd/fig1.eps
new file mode 100644
index 0000000000..d1b1976b14
--- /dev/null
+++ b/en_US.ISO_8859-1/books/design-44bsd/fig1.eps
@@ -0,0 +1,340 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Title: fig1.ps
+%%Creator: groff version 1.15
+%%CreationDate: Fri Jun 30 09:50:25 2000
+%%For:sheldonh sheldonh
+%%Pages: 1
+%%DocumentFonts:
+%%BoundingBox: 71 687 446 781
+%%BeginPreview: 376 93 1 93
+% 0000000000003fffffe00000000000000000000000000000000000000000000000000000001ffffff8000000000000
+% 000000000007c000001f000000000000000000000000040000000000000000000000000003e0000007c00000000000
+% 00000000007800000000f0000000000000000000000000000000000000000000000000001c00000000380000000000
+% 000000000380000000000e00000000000000000000000180000000000000000000000000e000000000070000000000
+% 000000000c00000000000180000000000000000006496dc0000000000000000000000003000000000000e000000000
+% 000000003000000000000060000000000000000002ca6d0000000000000000000000000c0000000000001800000000
+% 0000000040000000002000100000000000000000035469000000000000000000000000300000000008000400000000
+% 00000001800080100860000c00000000000000000374c9000000000000000000000000400040040218000200000000
+% 000000020000f395ef600002000000000000000002674b000000000000000000000000800079c57bd8000100000000
+% 0000000400009893e9200001000000000000000000000000000000000000000000000100004c44fa48000080000000
+% 0000000800008a9309200001800000000000000000000000000000000000000000000200004544c248000040000000
+% 00000f0800008e932920000080000000000000000000000000000000000000000003c200004744ca480000400003c0
+% 00000fe80000f3d9c930000080000000000000000000000000000000000000000003fc000079e6724c0000200003fc
+% fffffff80000800000000000be7c78f9f1e3e7c78f9f1e3e7c78f9f1e3c7cf8f1f3ffc00004000000000003ffffffc
+% 00000c0800008000000000008000000000000000000000000000000000000000000384000040000000000020000380
+% 00000008000590000000000080000000000000000000000000000000000000000000020001c4000000000040000000
+% 00000008000795a79fef000080000000000000000000000000000000000000000000020001e569ef7f800040000000
+% 000000040004d2183f8c00010000000000000000000000000000000000000000000001000134861f66000080000000
+% 000000020004521830e70002000000000000000000000000000000000000000000000080011486183b800080000000
+% 000000010004533cb32900040000000000000000000000000000000000000000000000c00114cf394c800300000000
+% 00000000c00799e71def001800000000000000000000000000000000000000000000002001e679ce7f800400000000
+% 0000000030040000000000600000000000000000000000000000000000000000000000180100000000001800000000
+% 000000000c040000000001800000000000000000000000000000000000000000000000060100000000006000000000
+% 00000000030c000000000e00000000000000000000000000000000000000000000000001c300000000038000000000
+% 0000000000f000000000700000000000000000000000000000000000000000000000000038000000001c0000000000
+% 00000000000f00000007800000000000000000000000000000000000000000000000000007c0000003e00000000000
+% 000000000000ff800ff80000000000000000000000000000000000000000000000000000003fe007fc000000000000
+% 000000000000007ff000000000000000000000000000000000000000000000000000000000001ff800000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000018000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000018000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000018000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000018000000000000000
+% 000000000000000800000000000000000000000000000000000000000000000000000000000003c000000000000000
+% 000000000000000800000000000000000000000000000000000000000000000000000000000003c000000000000000
+% 000000000000000800000000000000000000000000000000000000000000000000000000000003c000000000000000
+% 000000000000000800000000000000000000000000000000000000000000000000000000000003c000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000008006000000000000000000000000000000000000000000000000000000000008000000000000000
+% 000000000000000800e002000000000000000000000000000000000000000000000000000000000000000000000000
+% 0000000000000008008002000000000000000000000000000000000000000000000000000000000000000000000000
+% 0000000000000008008007000000000000000000000000000000000000000000000000000000008000000000000000
+% 000000000000000803def7800000000000000000000000000000000000000000000000000000008000000000000000
+% 00000000000000080122c4000000000000000000000000000000000000000000000000000000008000000000000000
+% 00000000000000080146c6000000000000000000000000000000000000000000000000000000008000000000000000
+% 000000000000000801448f000000000000000000000000000000000000000000000000000000000000000000000000
+% 0000000000000008037889800000000000000000000000000000000000000000000000000000000000000000000000
+% 0000000000000008020000000000000000000000000000000000000000000000000000000000008000000000000000
+% 00000000000000080a0000000000000000000000000000000000000000000000000000000000008000000000000000
+% 00000000000000080c0000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 000000000000003c000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 000000000000003c000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 000000000000003c000000000000000000000000000000000000000000000000000000000000000000000000000000
+% 000000000000003c000000000000000000000000000000000000000000000000000000000000000000000000000000
+% 0000000000000018000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000018000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000018000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 0000000000000018000000000000000000000000000000000000000000000000000000000000008000000000000000
+% 000000000000007fe000000000000000000000000000007fe0000000000000000000000000001ff800000000000000
+% 000000000000ff801ff0000000000000000000000000ff801ff000000000000080000000003fe007fc000000000000
+% 00000000000f0000000f80000000000000000000000f0000000f8000000000000000000007c0000003e00000000000
+% 0000000000f000000000700000000000000000000070000000007000000000003000000038000000001c0000000000
+% 000000000300000000000e000003bc73e47000000380000000000e000000073db8000001c000000000038000000000
+% 000000000c00008240800180000598b424b000000c0000824080018000000b19a00000060000002080006000000000
+% 000000003000008040800060000f19e839e00000300000804080006000001e19200000180000002000001800000000
+% 00000000c0000080408000180008190839000000c00000804080001800001019200000200000002000000400000000
+% 0000000100001ef647800004000f49ef11e0000100001ef64780000400001e49600000c0039a5fbd8f000300000000
+% 00000002000020924880000200000000000000020000209248800002000000000000008000a148a69f000080000000
+% 000000040000209248800001000000000000000400002092488000010000000000000100012148a298000080000000
+% 00000008000032924c8000008000000000000f88000032924c800000800000000003c200023348a699000040000000
+% 0000000800001c9267c000008000000000000ff800001c9267c00000800000000003fe0003deeebc8e000040000000
+% 000000080000000000000000bffffffffffffff80000000000000000be7cf1e7cf9ffc000000000000000020000000
+% 0000000800000000000000008000000000000e08000000000000000080000000000384000000000000000020000000
+% 0000000800041000000000008000000000000008000410000000000080000000000004000104000000000020000000
+% 00000008000795a79fef00008000000000000008000795a79fef0000800000000000020001e569ef7f800040000000
+% 000000080004d2183f8c000180000000000000080004d2183f8c000180000000000002000134861f66000040000000
+% 000000040004521830e7000100000000000000040004521830e700010000000000000100011486183b800080000000
+% 000000020004533cb329000200000000000000020004533cb329000200000000000000800114cf394c800100000000
+% 00000001000799e71def000c0000000000000001800799e71def000c000000000000004001e679ce7f800200000000
+% 00000000c0040000000000100000000000000000400400000000001000000000000000200100000000000400000000
+% 00000000300400000000006000000000000000003004000000000060000000000000001c0100000000001800000000
+% 000000000c0c00000000018000000000000000000c0c0000000001800000000000000003030000000000e000000000
+% 000000000380000000000e0000000000000000000380000000000e000000000000000000e000000000070000000000
+% 00000000007800000000f0000000000000000000007800000000f00000000000000000001c00000000380000000000
+% 0000000000078000001f0000000000000000000000078000001f0000000000000000000003e0000007c00000000000
+% 0000000000007ffdffe00000000000000000000000007ffdffe000000000000000000000001ffffff8000000000000
+% 0000000000000002000000000000000000000000000000020000000000000000000000000000000000000000000000
+%%EndImage
+%%EndPreview
+save
+countdictstack
+mark
+newpath
+/showpage {} def
+%%EndProlog
+%%Page 1 1
+%%+ font Times-Roman
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.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/circumflex
+/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/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Roman@0 ENC0/Times-Roman RE/Times-Italic@0 ENC0/Times-Italic RE
+BP
+/F0 12/Times-Italic@0 SF(fork)141.534 58.984 Q 68.832 27.216 134.424
+90.408 DE .4 LW ST/F1 12/Times-Roman@0 SF(process)116.43 97.432 Q(child)
+121.632 89.368 Q 301.968 88.824 298.368 88.824 DL 308.808 88.824 305.208
+88.824 DL 315.576 88.824 311.976 88.824 DL 322.416 88.824 318.816 88.824
+DL 329.184 88.824 325.584 88.824 DL 336.024 88.824 332.424 88.824 DL
+342.792 88.824 339.192 88.824 DL 349.632 88.824 346.032 88.824 DL
+349.632 88.824 MT -7.2 1.8 RL 0 -3.6 RL CL BL 349.632 88.824 MT -7.2 1.8
+RL 0 -3.6 RL CL ST 68.832 27.216 262.44 90.408 DE ST(process)244.374
+97.432 Q(child)249.576 89.368 Q(process)365.982 97.432 Q(zombie)364.728
+89.368 Q 383.976 72.408 383.976 76.008 DL 383.976 65.928 383.976 69.528
+DL 383.976 59.448 383.976 63.048 DL 383.976 52.968 383.976 56.568 DL
+383.976 46.488 383.976 50.088 DL 383.976 40.008 383.976 43.608 DL
+383.976 40.008 MT 1.8 7.2 RL -3.6 0 RL CL BL 383.976 40.008 MT 1.8 7.2
+RL -3.6 0 RL CL ST 68.832 27.216 384.048 90.408 DE ST 72 24.816 99.216
+24.816 DL 99.216 24.816 MT -7.2 1.8 RL 0 -3.6 RL CL BL 99.216 24.816 MT
+-7.2 1.8 RL 0 -3.6 RL CL ST 445.608 24.816 418.392 24.816 DL 445.608
+24.816 MT -7.2 1.8 RL 0 -3.6 RL CL BL 445.608 24.816 MT -7.2 1.8 RL 0
+-3.6 RL CL ST 228.024 88.824 170.424 88.824 DL 228.024 88.824 MT -7.2
+1.8 RL 0 -3.6 RL CL BL 228.024 88.824 MT -7.2 1.8 RL 0 -3.6 RL CL ST F0
+-.24(ex)180.12 84.616 S(ecve).24 E 174.024 24.816 170.424 24.816 DL
+181.296 24.816 177.696 24.816 DL 188.64 24.816 185.04 24.816 DL 195.984
+24.816 192.384 24.816 DL 203.256 24.816 199.656 24.816 DL 210.6 24.816
+207 24.816 DL 217.872 24.816 214.272 24.816 DL 225.216 24.816 221.616
+24.816 DL 232.56 24.816 228.96 24.816 DL 239.832 24.816 236.232 24.816
+DL 247.176 24.816 243.576 24.816 DL 254.448 24.816 250.848 24.816 DL
+261.792 24.816 258.192 24.816 DL 269.136 24.816 265.536 24.816 DL
+276.408 24.816 272.808 24.816 DL 283.752 24.816 280.152 24.816 DL
+291.096 24.816 287.496 24.816 DL 298.368 24.816 294.768 24.816 DL
+305.712 24.816 302.112 24.816 DL 312.984 24.816 309.384 24.816 DL
+320.328 24.816 316.728 24.816 DL 327.672 24.816 324.072 24.816 DL
+334.944 24.816 331.344 24.816 DL 342.288 24.816 338.688 24.816 DL
+349.632 24.816 346.032 24.816 DL 349.632 24.816 MT -7.2 1.8 RL 0 -3.6 RL
+CL BL 349.632 24.816 MT -7.2 1.8 RL 0 -3.6 RL CL ST(wait)236.838 20.608
+Q -.24(ex)315.456 84.616 S(it).24 E 131.976 76.008 131.976 40.008 DL
+131.976 76.008 MT -1.8 -7.2 RL 3.6 0 RL CL BL 131.976 76.008 MT -1.8
+-7.2 RL 3.6 0 RL CL ST 68.832 27.216 134.424 25.608 DE ST F1(process)
+116.43 32.632 Q(parent)118.638 24.568 Q 68.832 27.216 384.048 25.608 DE
+ST(process)365.982 32.632 Q(parent)368.19 24.568 Q EP
+end
+%%Trailer
+cleartomark
+countdictstack exch sub { end } repeat
+restore
+%%EOF
diff --git a/en_US.ISO_8859-1/books/design-44bsd/fig2.eps b/en_US.ISO_8859-1/books/design-44bsd/fig2.eps
new file mode 100644
index 0000000000..84581020db
--- /dev/null
+++ b/en_US.ISO_8859-1/books/design-44bsd/fig2.eps
@@ -0,0 +1,1476 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Title: /b/archive/c02/fig2.test.ps
+%%Creator: XV Version 3.10a Rev: 12/29/94 (jp-extension 5.3.3 + PNG patch 1.2d) - by John Bradley
+%%CreationDate: Nov 2 22:04
+%%For:sheldonh sheldonh
+%%Pages: 1
+%%DocumentFonts:
+%%BoundingBox: 187 308 426 484
+%%BeginPreview: 239 176 1 176
+% 000000000000000000000000000000000000000000aa8000000000000000
+% 000000000000000000000000000000000000000004001000000000000000
+% 000000000000000000000000000000000000000008000800000000000000
+% 000000000000000000000000000000000000000020000200000000000000
+% 000000000000000000000000000000000000000080000080000000000000
+% 000000000000000000000000000000000000000080000080000000000000
+% 000000000000000000000000000000000000000200000000000000000000
+% 000000000000000000000000000000000000000200000000000000000000
+% 000000000000000000000000000000000000000200000020000000000000
+% 000000000000000000000000000000000000000400000010000000000000
+% 000000000000000000000000000000000000000800000000000000000000
+% 000000000000000000000000000000000000000000000000000000000000
+% 000000000000000000000000000000000000000800000008000000000000
+% 000000000000000000000000000000000000000000000000000000000000
+% 000000000000000000000000000000000000000800000008000000000000
+% 000000000000000000000000000000000000000000000000000000000000
+% 000000000000000000000000000000000000000800000008000000000000
+% 000000000000000000000000000000000000000000000000000000000000
+% 000000000000000000000000000000000000000800000008000000000000
+% 000000000000000000000000000000000000000000000000000000000000
+% 000000000000000000000000000000000000000800000008000000000000
+% 000000000000000000000000000000000000000000000000000000000000
+% 000000000000000000000000000000000000000800000000000000000000
+% 000000000000000000000000000000000000000400000010000000000000
+% 000000000000000000000000000000000000000200000020000000000000
+% 000000000000000000000000000000000000000000000000000000006000
+% 000000000000000000000000000000000000000200000000000000002000
+% 00000000000000000000000000000000076c7804000000001d75ddf4fd00
+% 00000000000000000000000000000000037a68088000008008be8dbe6800
+% 00000000000000000000000000000000037c6010000000100d36cdb66600
+% 00000000000000000000000000000000036e6020280008080636cdb66600
+% 0000000000000000000000000000000003726040040010040636cdb66700
+% 0000000000000000000000000000000003fae08002aa8002023eefbeeb80
+% 000000000000000000000000000000000000010000000001000000000000
+% 000000000000000000000000000000000000020000000000800000000000
+% 000000000000000000000000000000000000040000000000400000000000
+% 000000000000000000000000000000000000080000000000080000000000
+% 000000000000000000000000000000000000100000000000080000000000
+% 000000000000000000000000000000000000200000000000020000000000
+% 000000000000000000000000000000000000400000000000010000000000
+% 00000000000000000000000000000000000080000000000000a000aa8000
+% 00000000000000000000000000000000000000000000000000700c00c000
+% 000000000000000000000000000000000002000000000000007820002800
+% 000000000000000000000000000000000040000000000000007c40000400
+% 0000000000000000000000000000000000b8000000000000003e80000200
+% 000000000000000000000000000001d500f0000000000000000700000100
+% 00000000000000000000000000000a00a0e0000000000000000200000080
+% 0000000000000000000000000000100011c0000000000000000400000000
+% 000000000000000000000000000020000b80000000000000000800000000
+% 000000000000000000000000000080000200000000000000000800000000
+% 000000000000000000000000000000000000000000000000000800000020
+% 000000000000000000000000000000000000000000000000001000000000
+% 000000000000000000000000000200000080000000000000000000000000
+% 000000000000000000000000000400000040000000000000001000000010
+% 000000000000000000000000000800000020000000000000002000000000
+% 000000000000000000000000000000000000000000000000000000000010
+% 000000000000000000000000000800000000000000000000002000000000
+% 000000000000000000000000001000000010000000000000000000000010
+% 000000000000000000000000000000000000000000000000002000000000
+% 000000000000000000000000001000000010000000000000000000000010
+% 000000000000000000000000002000000008000000000000000000000000
+% 000000000000000000000000000000000000000000000000001000000010
+% 000000000000000000000000002000000008000000000000000000000020
+% 000000000000000000000000000000000010000000000000000000000000
+% 000000000000000000000000000000000000000000000000000800000000
+% 000000000000000000000000001000000010000000000000000400000040
+% 000000000000000000000000000000000000000000000000000200000080
+% 000000000000000000000000000000000000000000000000000200000100
+% 000000000000000000000000000800000020000000000000000080000200
+% 000000000000000000000000000000000020000000000000000080000400
+% 00000000000000000000000000020000000800e180000000000020000800
+% 00000000000000000000001dc00400000000006100000000000010001000
+% 00000000000000000000201ba00a00000082006bba00000000000a808000
+% 00000000000000000007f73fc00100000101006d9b0000000000005c0000
+% 0000000000000000000c6c99802080000200806d9b000000000000000000
+% 0000000000000000000e6599800040000400406d9b000000000000000000
+% 0000000000000000000b6b9980800800280020699b000000000000000000
+% 000000000000000000016d9980000501c00010799b000000000000000000
+% 0000000000000000000e2ebb880000aa0000080000000000000000000000
+% 000000000000000000000000000000100000040000000000000000000000
+% 000000000000000000000000200000000000020000000000000000000000
+% 000000000000000000000000000000100000010000000000000000000000
+% 000000000000000000000000800000008000008000000000000000000000
+% 000000000000000000000001000000118000000000000000000000000000
+% 00000000000000000000000200000003baee800800000000000000000000
+% 000000000000000000000004000000119b66c00800000000000000000000
+% 000000000000000000000008000000019b66c00200000000000000000000
+% 000000000000000000000010000000119b66c00000000000000000000000
+% 00000000000000000aa00020000000019b668000a00aa800000000000000
+% 0000000000000000401801c0000000119b778000e0100400000000000000
+% 0000000000000002000203800000002800060000e0a00080000000000000
+% 0000000000000004000007c0000000380006000071000040000000000000
+% 000000000000000800008f8000000038000e00003a000008000000000000
+% 000000000000001000000c0000000038000000000c000008000000000000
+% 000000000000002000000800000000380000000008000000000000000000
+% 000000000000004000000000000000100000000010000000000000000000
+% 000000000000008000000800000000100000000020000002000000000000
+% 0000000000000000000004000000015d0000000000000001000000000000
+% 00000000000000000000020000000a00a000000000000000800000000000
+% 000000000000010000000000000020001000000040000000000000000000
+% 000000000000000000000200000080000800000080000000800000000000
+% 000000000000000000000100000100000400000080000000000000000000
+% 000000000000020000000000000200000200000080000000800000000000
+% 000000000000000000000100000400000100000000000000400000000000
+% 000000000000020000000000000800000080000080000000000000000000
+% 000000000000000000000100000800000000000080000000400000000000
+% 000000000000020000000000000800000000000080000000000000000000
+% 000000000000000000000100001000000000000000000000000000000000
+% 000000000000020000000000000000000020000080000000800000000000
+% 000000000000010000000000000000000000000000000000800000000000
+% 000000000000000000000200002000000020000000000000800000000000
+% 000000000000010000000000000000000000000040000000000000000000
+% 0000c0003030008000000000002000000000000020000000000000000000
+% 0000c0003030000000000400000000000010000000000000000000000000
+% fa38ebee32b2008000000800002000000000000020000002003800000000
+% db64d36c35b4000000001400002000000010000050000004001800000000
+% db28e36e3cb8022000002000002000000020000088000008801b80000000
+% db60f3673c3c041000004000000000000000000004000010001e00000000
+% db22fb6b3e3e080a00008000002000000020000002000020201e00000000
+% dbbcdbe73736100100010040001000000000000400400040001b80000000
+% 0000000000002000a0080028000800000000000800280a80081880000000
+% 00000000000040001d40000000080000004000000005d800001f80000000
+% 000000000000800000000000000800000080000000000000020000000000
+% 000000000001000001000002000400000000004000004000000000000000
+% 000000000002000000000000800200000200008000000000008000000000
+% 000000000004000001000000000100000000010000004000000000000000
+% 0000000000080000003800003000800008000000000c0000002000000000
+% 0000000000100000011800003000400010000000000c4000001000000000
+% 0000000000200000001abba2ba002800a000080003ac0000000800000000
+% 0000000001400000011859e5bc00050100001000030c4000000500000000
+% 00000020038000000018898fbe0000aa00002000030c0000000380020000
+% 0000071403c00000011e598c3700000000000000018c40000007c0556000
+% 0000280283800000001ad98eb980000000008000008c0000000382800800
+% 0000c00047000000011bd9873f40000000000000011c40000001c4000100
+% 000280000e00000000000000002000000000000000000000000028000080
+% 000200000c00000001000000000000000000000000004000000030000040
+% 00080000000000000380000000000000000000000001e000000020000020
+% 00080000000000000780000000000000000000000001c000000000000010
+% 00080000000000000380000000000000000000000000c000000080000008
+% 00100000000000000300000000000000000000000000c000000100000000
+% 002000000080000003000000000000000000000000008000000000000008
+% 00000000000000000300000000000000000000000000c000000000000004
+% 00200000000000000aa000000000000000000000000aa000000200000002
+% 004000000040000010040000000000000000000000401400000000000000
+% 000000000000000080008000000000000000000000800280000000000002
+% 004000000000000100004000000000000000000004000080000400000000
+% 008000000020000200002000000000000000000008000020000000000002
+% 000000000000000800001000000000000000000010000010000400000000
+% 008000000020000800000800000000000000000020000008000000000002
+% 004000000000001000000400000000000000000040000000000400000000
+% 000000000000002000000200000000000000000080000000000200000002
+% 004000000040004000000000000000000000000000000004000000000000
+% 000000000000008000000000000000000000000080000002000200000000
+% 000000000000000000000100000000000000000100000000000000000004
+% 002000000080008000000080000000000000000000000002000200000008
+% 001000000000000000000000000000000000000100000001000100000000
+% 000800000000008000000080000000000000000200000000000080000008
+% 000800000000010000000080000000000000000100000001000000000010
+% 000800000200008000000080000000000000000200000000000020000020
+% 000400000400010000000000000000000000000000000001000020000040
+% 000080000800008000000080000000000000000200000000000008000080
+% 000080000000000000000000000000000000000000000001000004000100
+% 000020008000008000000080000000000000000200000000000002800a00
+% 000004040000000000000000000000000000000100000001000000407000
+% 000000a800000080000000800000000000000000800000020000000a8000
+% 000000000000000000000100000000000000000000000000000000000000
+% 000000000000000000000200000000000000000080000002000000000000
+% 000000000000000000000200000000000000000040000004000000000000
+% 000000000000002000000200000000000000000000000008000000000000
+% 000000000000001000000400000000000000000000000008000000000000
+% 000000000000000800000800000000000000000020000020000000000000
+% 000000000000000400001000000000000000000008000040000000000000
+% 00000000000000020000200000000000000000000a000080000000000000
+% 000000000000000180018000000000000000000001000100000000000000
+% 0000000000000000200a0000000000000000000000a00a00000000000000
+% 000000000000000005500000000000000000000000174000000000000000
+%%EndImage
+%%EndPreview
+save
+countdictstack
+mark
+newpath
+/showpage {} def
+/setpagedevice {pop} def
+%%EndProlog
+%%Page 1 1
+%%DocumentFonts:
+
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% define string to hold a scanline's worth of data
+/pix 240 string def
+
+% define space for color conversions
+/grays 240 string def % space for gray scale line
+/npixls 0 def
+/rgbindx 0 def
+
+% lower left corner
+186 308 translate
+
+% size of image (on paper, in 1/72inch coords)
+239.97600 176.97600 scale
+
+240 177 8 % dimensions of data
+[240 0 0 -177 0 177] % mapping matrix
+{currentfile pix readhexstring pop}
+image
+
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbbbbbffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffdd8866777799bb9977777788dd
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffbb6688ddffffffffffffffffffdd88
+66ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffee7788ffffffffffffffffffffffffffff
+ee7777eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffcc55eeffffffffffffffffffffffffffffff
+ffffdd66ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff9977ffffffffffffffffffffffffffffffffff
+ffffffee66ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffcc77ffffffffffffffffffffffffffffffffffff
+ffffffffff66ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffee55ffffffffffffffffffffffffffffffffffffff
+ffffffffffee66eeffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff66eeffffffffffffffffffffffffffffffffffffff
+ffffffffffffdd77ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffbb99ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff77ddffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff55ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffee66ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffcc99ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff88ddffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff77eeffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffdd88ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffbbaaffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffbbbbffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff99ccffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffaabbffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffbbbbffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffbbbbffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff99bbffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffbbaaffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffee77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffdd88ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffaaaaffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff88ddffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff66ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff99aaffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff88bbffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff66eeffffffffffffffffffffffffffffffffffffff
+ffffffffffffee77ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff1122ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff7b50ffffffffffffffffffffffffffffffffffffff
+ffffffffffff55eeffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff4477ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff660000660000cc222288
+ff6600007711eeffffffffffffff6699aa88ffffffffffffffffffffffffffffffffffff
+ffffffffff77ccffffffffffffffffff550011cc22556600007711bb770088ff66000066
+0000660000770099ff550000550011991166ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff00002200ffbb
+ffff00007700ccffffffffffff77bbffff9988ffffffffffffffffffffffffffffffffff
+ffffffff779966ccffffffffffffffffee1144ff99ddff0011dd0011cc0011ffff0000ff
+0000ff0011ee0011ffff0000dd1133ee77ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff0000110055ee
+ffff0000ffffffffffffffff77ccffffffffaa77eeffffffffffffffffffffffffffffff
+ffffee55ccffee77aaffffffffffffffff6600dd88ffff0000ff0000ff0000ffff0000ff
+0000ff0000ff0000ffff0000ff880033eeffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff0000cc440033
+ffff0000ffffffffffffee44ccffffffffffffcc66aaffffffffffffffffffffffffffff
+ff9966eeffffffff8888ffffffffffffffdd0044bbffff0000ff0000ff0000ffff0000ff
+0000ff0000ff0000ffff0000ffff2200ccffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff000077ddcc00
+ffff0000ffffffffffee66ddffffffffffffffffff9966aaffffffffffffffffffffee99
+55bbffffffffffffffaa77eeffffffffffff4422ffffff0000ff0000ff0000ffff0000ff
+0000ff0000ff0000ffff0000ffaaaa1133ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff550044002233111166
+ffbb0000ddffffffdd66eeffffffffffffffffffffffffaa777777aabbbbbbaa777777cc
+ffffffffffffffffffffcc66eeffffffffffaa99ffffaa0000cc0000dd000055ff550044
+0022710000cc0000ccaa0000aa44ee440077ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffcc44eeffffffffffffffffffffffffffffffffeebbbbaabbbbffffffff
+ffffffffffffffffffffffee55ccffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffcc77ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff7799ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffbb77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff9977ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff9966ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffcc55eeffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff9999ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffee66ccffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7799ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffee77aaffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff7799ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff8888ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffaa77eebfbfffffffffffffffffffffcc
+776677666677776699eeffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee66
+ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffcc60161ceeffffffffffffee777799
+eeffffffffffffffcc7777bbffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee55cc
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffee27000028ffffffffff7777ddffff
+ffffffffffffffffffffff9966ccffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7b7bee66eeff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffdd300b00006dffffee66ccffffffff
+ffffffffffffffffffffffffee7799ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd180929eeffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffaf300708bfcc55eeffffffffff
+ffffffffffffffffffffffffffff9977ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffee997777776677777799eeffffffffffffff3000000dcfffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffaf2d0569ffffffffffffff
+ffffffffffffffffffffffffffffffcc77ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff996677ccffffffffffffffcc776699ffffffff6d00002058ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffee46afffffffffffffff
+ffffffffffffffffffffffffffffffff9999ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffbb55bbffffffffffffffffffffffffffbb55bbffdd0f0858eeffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff55eeffffffffffffffff
+ffffffffffffffffffffffffffffffffff77bbffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff7788ffffffffffffffffffffffffffffffffff8877191dddffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffbb99ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff66ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffee55ccffffffffffffffffffffffffffffffffffffffcc32eeffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff55ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff99aaffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffee66eeffffffffffffffffffffffffffffffffffffffffffee55ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffaaaaffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff66ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff77ccffffffffffffffffffffffffffffffffffffffffffffffcc77ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff88ddffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff77bbffffffffffffffffffffffffffffffffffffffffffffffffffaa88ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffdd88ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffee77ffffffffffffffffffffffffffffffffffffffffffffffffffffff77eeffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffbbaaffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff77ddffffffffffffffffffffffffffffffffffffffffffffffffffffffdd77ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffaabbffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ee77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77eeffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77eeffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+99ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc99ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77ddffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffbbbbffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb
+bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99bbffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffcc99ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff66ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb
+bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbbbffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffcc99ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb
+bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbbbffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff77eeffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77eeffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb
+aaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88ccffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffcc99ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff66eeffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff77ccffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffdd77ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffee77ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff77ccffffffffffffffff
+ffffffffffffffffffffffffffffffffff66ddffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+99bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaaaaffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff55eeffffffffffffff
+ffffffffffffffffffffffffffffffff77ccffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ee77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffee66eeffffffffffff
+ffffffffffffffffffffffffffffff9999ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff77ddffffffffffffffffffffffffffffffffffffffffffffffffffffffbb30ddffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffee55ccffffffffff
+ffffffffffffffffffffffffffff7799ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffee33aaffffffffffffffffffffffffffffffffffffffffffffffffffff66ee55ccffff
+ffffffffffffffffffbb0000ffffffff1122ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7788ffffffff
+ffffffffffffffffffffffffdd66ccffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff77ffffffffffffffff7700118877001188ffffffffffffffff
+ff776699ffffffffffffffffffffffffffffffffffffffffffffffffff99aaffff77bbff
+ffffffffffffffffffff0000ffffffff4477ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb6699ffff
+ffffffffffffffffffffdd7777eeffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff6600ffffffffffffffff0000889900008899ffffffffffffffff
+77bbff77ccffffffffffffffffffffffffffffffffffffffffffffffbb77ffffffff7799
+ffffffffffffffffffff00004422cc550000ff660000770099ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb7777
+aaeeffffffffffcc886688eeffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffcc22228877000044ee550022aaff4400007744000077ffffffffffffffff77
+ccffffff66ccffffffffffffffffffffffffffffffffffffffffffcc77ffffffffffff99
+88ffffffffffffffffff0000dd0055ff0000ffff0011ee0011ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+bb77777777777799ddffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff2200ffbbff0000ff8822ff8811ffff0000ffff0000ffffffffffffffee55cc
+ffffffffff7799ffffffffffffffffffffffffffffffffffffff9977ffffffffffffffff
+9977ffffffffffffffff0000ff0000ff0000ffff0000ff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff110055eeff0000ffcc77ff8800ffff0000ffff0000ffffffffffffee66ddff
+ffffffffffff9977eeffffffffffffffffffffffffffffffee7799ffffffffffffffffff
+ffcc77eeffffffffffff0000ff0000ff0000ffff0000ff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffcc440033ff0000ffee66aa0000ffff0000ffff0000ffffffffffee66eeffff
+ffffffffffffffdd7788ffffffffffffffffffffffffff7777ddffffffffffffffffffff
+ffffcc55eeffffffffff0000ee0044ff0000ffff0000ff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff77ddcc00ff0000dd3300ff0000ffff0000ffff0000ffffffffcc55eeffffff
+ffffffffffffffffffbb777799eeffffffffffee997777ccffffffffffffffffffffffff
+ffffffee66ddffffffff44220022ccaa0000ffbb0000cc0000ccffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff55111166ff330099440044660099bb000077bb000077ffffcc77eeffffffff
+ffffffffffffffffffffffffcc77776638667777ccffffffffffffffffffffffffffffff
+ffffffffee55ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc77ffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ffffffffffff77bbffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff9977ffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ffffffffffffff7799ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff9988ffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff9988ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff9999ffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffff77ffffffffffffffffffffffffffff
+ffffffffffffffffff9977ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff7799ffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffff6600ffffffffffffffffffffffffffff
+ffffffffffffffffffffcc77eeffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77bbffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffff770000446600007711bb770088ff660000
+4422ccffffffffffffffffcc55eeffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff77ccffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffff0000ffff0011dd0011cc0011ffff0022
+ee0055ffffffffffffffffffee66ddffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffee55ccffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffff0000ffff0000ff0000ff0000ffff0000
+ff0000ffffffffffffffffffffee55ccffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffee66ddffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffff0000ffff0000ff0000ff0000ffff0000
+ff0000ffffffffffffffffffffffff77bbffddffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee99777766
+667777aaeeffffffffffffffffffffff9fffee66eeffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffff0000ddff0000ff0000ff0000ffff0000
+ee0033ffffffffffffffffffffffffff77730abfffffffffffffffffffdd997777777777
+77bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffee887777bbffffff
+ffffeeaa777799ffffffffffffffffaf083a55eeffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffff330099aa0000cc0000dd000055ff0000
+3311ccffffffffffffffffffffffffffbf0f0022ffffffffffffee886688ccffffffffff
+eeaa7777bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff9966ddffffffffffff
+ffffffffffffbb66bbffffffffffee2200005affffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffaf582a58ddffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffff3700000058ffffffee7777ddffffffffffffffff
+ffffffff9966bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffdd66bbffffffffffffffff
+ffffffffffffffff9966eeffffff5000001050ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffaf00000accffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffff85290008b3ffcc66ddffffffffffffffffffff
+ffffffffffff8877ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffcc66eeffffffffffffffffff
+ffffffffffffffffffdd66ccffaf060530ddffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff180028ffffffffffffffffffffffffffffff550000
+ffffffffffffffffffffffffffffffffffffff641a0b8f77ffffffffffffffffffffffff
+ffffffffffffffcc55eeffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffbb66ffffffffffffffffffffff
+ffffffffffffffffffffee77bf0b1aafffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff380040ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffee3242ffffffffffffffffffffffffff
+ffffffffffffffffee66eeffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffdd66ffffffffffffffffffffffff
+ffffffffffffffffffffffee5366ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff500064ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffcc77ffffffffffffffffffffffffffff
+ffffffffffffffffffee55ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffee66eeffffffffffffffffffffffff
+ffffffffffffffffffffffffee66ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffaf00ccffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffdd66ffffffffffffffffffffffffffffff
+ffffffffffffffffffffcc77ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff77ddffffffffffffffffffffffffff
+ffffffffffffffffffffffffffaaaaffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff04ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffffff
+ffffffffffffffffffffff77ddffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffee77ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffdd887777777741667777aaeeffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffcc77ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffee55ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ddffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffbb99ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff996688ddffffffffffffffffaa7777ddffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff99ccffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffbb55bbffffffffffffffffffffffffffee7777eeffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffee77ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffee77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffcc99ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffffffffffffff
+ffffffffff7788ffffffffffffffffffffffffffffffffffdd55ccffffffffffffffffff
+ffffffffffffffffffffffffffffffffff99ccffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffcc99ffffffffffffffffffffffffffffffffffffff
+ffffffee66ccffffffffffffffffffffffffffffffffffffffff77aaffffffffffffffff
+ffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff99ccffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ffffff66ccffffffffffffffffffffffffffffffffffffffffffff66ccffffffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffbbbbffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ffff77ccffffffffffffffffffffffffffffffffffffffffffffffff66ddffffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffdd77ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ffbb88ffffffffffffffffffffffffffffffffffffffffffffffffffee55ffffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ff55ffffffffffffffffffffffffffffffffffffffffffffffffffffffbb99ffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+99bbffffffffffffffffffffffffffffffffffffffffffffffffffffffff66ffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffee77ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+66ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb99ffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffbbaaffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffdd88ffffffffffffffffffffffffffffffffffffdd
+88ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffffff
+ffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffaabbffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffaaaaffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff88ddffffffffffffffffffffffffffffffffffff88
+ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffffff
+ffffffffffffffffffffffffffffffffff88ddffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaabbffffff
+ffffffffffffffffffffffffffffffffffdd88ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffdd88ffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbaaffffff
+ffffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffaaaaffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffbb0000ffffffffffffffffffffffffffffffff11
+22ffffffffffbb0000ffffffffffffffffffffffdd77ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffaa99ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff55ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff44
+77ffffffffffff0000ffffffffffffffffffffffff77eeffffffffffffffffffffffffff
+ffffffffffffffffffffffffffbb77ffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff99bbffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+6600007711bb770088ffff77112299ffff0000dd8899600000660000ffcc222288ff5500
+00ff77112299ff0000dd8899eeffffffffffffff999477ffffffffffffffffffffffffff
+ffffffffffffffffffffffffee29bbffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffff
+ffffffffffffffffffffffffffffffffffffee5850ffffffffffffffffffffffffffffff
+ffffffffffffffffffffee5566eeffffffffffffffffffbb0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ff0011dd0011cc0011ff7700bb7711ffff0000ee77eeff0000ff0000ff2200ffbbffff00
+007700bb7711ff0000ee77eeffffffffffffff9999ffbb77ffffffffffffffffffffffff
+ffffffffffffffffffffffff77cc8877eeffffffffffffffffffffffffffffffffffff66
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd77ffffff
+ffffffffffffffffffffffffffffffffffbb66dd9999ffffffffffffffffffffffffffff
+ffffffffffffffffffff55eeee66eeffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ff0000ff0000ff2200ffeeaaffff000077eeffff0000ff0000ff110055eeffff00
+002200ffeeaaff000077eeffffffffffffff9977ffffff8899ffffffffffffffffffffff
+ffffffffffffffffffffff77aaffffddbbffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbbbffffff
+ffffffffffffffffffffffffffffffffff99ffffff77ccffffffffffffffffffffffffff
+ffffffffffffffffff77ccffffee44eeffffffffffffffff0000cc222288ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ff0000ff0000ff0000eeffffffff00001144ffff0000ff0000ffcc440033ffff00
+000000eeffffff00001144ffffffffffffcc66ffffffffff8877ffffffffffffffffffff
+ffffffffffffffffffff77aaffffffffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88ddffffff
+ffffffffffffffffffffffffffffffffffffffffffff7799ffffffffffffffffffffffff
+ffffffffffffffee55ccffffffffcc66ffffffffffffffff00002200ffbbffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ff0000ff0000ff440066ffeeeeff0000880077ff0000ff0000ff77ddcc00ffff00
+00440066ffeeee0000880077ffffffffcc77ffffffffffffffbb77eeffffffffffffffff
+ffffffffffffffffdd55ccffffffffffffffffffffffffffffffffffffffffffffffffaa
+aaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff66ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff9977eeffffffffffffffffffff
+ffffffffffffcc66eeffffffffffffcc77ffffffffffffff0000110055eeffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+aa0000cc0000dd000055ee55001177ffbb0011aa0000bb55004400229955111166ffaa00
+00ee55001177bb0011aa0000bbffffcc77ffffffffffffffffffdd7777eeffffffffffff
+ffffffffffffee7777eeffffffffffffffff66bbffffffffffffffffffffffffffffffee
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee77ffffffff
+ffffffffffffffffffffffffffff99aaffffffffffffffffcc6699ffffffffffffffffff
+ffffffffdd7777ffffffffffffffffffcc77ffffffffffff0000cc440033ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffcc77ffffffffffffffffffffffffcc7777aaffffffff
+ffffffeeaa7777ddffffffffffffffffffffff8877eeffffffffffffffffffffffffffff
+77eeffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ddffffffff
+ffffffffffffffffffffffffff9999ffffffffffffffffffffffbb7777ccffffffffffff
+ffee997777eeffffffffffffffffffffffcc77ffffffffff000077ddcc00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffcc66ffffffffffffffffffffffffffffffffaa77777777
+30777777bbffffffffffffffffffffffffffffffddbbffffffffffffffffffffffffffff
+dd77ffffffffffffffffffffffffffffffffffffffffffffffffffffffee77ffffffffff
+ffffffffffffffffffffffffffaaffffffffffffffffffffffffffffee99667777663077
+6677ccffffffffffffffffffffffffffffffcc66ffffffaa000055111166ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffee44eeffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff77ddffffffffffffffffffffffffffffffffffffffffffffffffffff77ddffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ff
+ffffffffffffffffffffffffffffffffffffff9977ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffee66eeffffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffff66eeffffffffffffffffffffff
+ffee55ffffffffffffffffffffffffffffffffffffffffffffffffffaa88ffffffffffff
+ffffffffffffffffff99aaffffffffffffffffffffffffffffffffffffffffffffff77ff
+ffffffffffffffffffffffffffffffffffffffff9999ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffee66eeffffffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffffee66eeffffffffffffffffffff
+ffffcc77ffffffffffffffffffffffffffffffffffffffffffffffcc77ffffffffffffff
+ffffffffffffffff9999ffffffffffffffffffffffffffffffffffffffffffffffff77ff
+ffffffffffffffffffffffffffffffffffffffffff9999ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffee66eeffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffffffeebbffffffffffffffffffff
+ffffffaa66ffffffffffffffffffffffffffffffffffffffffffcc66eeffffffffffffff
+ffffffffffffffffaaffffffffffffffffffffffffffffffffffffffffffffffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffff9999ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffee66eeffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffbb0000ffffffffffffffffffffffffffffffffffffffffbb0000ffffffffffffff
+ffffffffcc66eeffffffffffffffffffffffffffffffffffffaa77eeffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1122ffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffff9999ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff44ccffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffff0000ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffdd55bbffffffffffffffffffffffffffffffee7788ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4477ffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffffff66aaffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff77ccffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffff0000dd8899df550022aaff6600007711eeff770044eeff0000bf222288ffffff
+ffffffffffffff9966bbffffffffffffffffffffffee7777ddffffffffffffffffffffff
+ffffffff99aaffffffffffffffffffffffffffffffff550011cc2255550000ffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffffffff77ccffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff7bee77ccffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffff0000ee77ee8822ff8811ffff00007700cc9900ee7755ff00000e00ffbbffffff
+ffffffffffffffffff997777aabbffffffddbb886677ddffffffffffffffffffffffffff
+ffffff9999ffffffffffffffffffffffffffffffffffee1144ff99ddff0000ffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff77cc88bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffddbbddffffffffffffffff
+ffffffbf100da4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffff000077eeffcc77ff8800ffff0000ffffff6600000000ff0000100055eeffffff
+ffffffffffffffffffffffffbbaa77777777bbddffffffffffffffffffffffffffffffff
+ffffffaaffffffffffffffffffffffffffffffffffffff6600dd88ffff0000ffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff3a0930ffffffffffff
+ffffffffffffbbbbeeffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffee9977667777bb8877777788ddffffff
+ffffff3000000eddffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffff00001144ffee66aa0000ffff0000ffffff4400ffffffff0000cc440033ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffdd0044bbffff0000ffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff880a000085ffffffffff
+ffcc7777777799aa77777766aaffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffdd7777ccffffffffffffffffffcc8866ddff
+ffff9400001058ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffff00008800773300ff0000ffff0000ffffff880099ffccff000077ddcc0066eeff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee
+77aaffffffffffffffffffffffffffffffffffffffffffff4422ffffff0000ffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffdd280c0016eeffffff99
+6699eeffffffffffffffffffaa7777eeffffffffffffffff
+ffffffffffffffffffffffffffffffffee7777eeffffffffffffffffffffffffffee7777
+eeff150030ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffbb0011aa0000320044660099bb0000ddffffee66001199aa000055111166ee66ee
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb66
+ddffffffffffffffffffffffffffffffffffffffffffffffaa99ffffaa0000ffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff941a004bffcc66bb
+ffffffffffffffffffffffffffffcc66aaffffffffffffff
+ffffffffffffffffffffffffffffffee66ccffffffffffffffffffffffffffffffffffee
+552b0994ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeebb
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee4b037577ffff
+ffffffffffffffffffffffffffffffff9977ffffffffffff
+ffffffffffffffffffffffffffffcc66eeffffffffffffffffffffffffffffffffffffff
+ff2b9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccbb
+58ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbbb58cc
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5448ffffff
+ffffffffffffffffffffffffffffffffffcc55eeffffffff
+ffffffffffffffffffffffffffdd66ffffffffffffffffffffffffffffffffffffffffff
+ffff77ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2200
+0030ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1100003e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88aaffffffff
+ffffffffffffffffffffffffffffffffffffdd66ffffffff
+ffffffffffffffffffffffffee66eeffffffffffffffffffffffffffffffffffffffffff
+ffffff55eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4800
+0050ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff38000094
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa88ffffffffff
+ffffffffffffffffffffffffffffffffffffffcc77ffffff
+ffffffffffffffffffffffff77ccffffffffffffffffffffffffffffffffffffffffffff
+ffffffee55ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8500
+00afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff500008ee
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffee66ffffffffffff
+ffffffffffffffffffffffffffffffffffffffff88bbffff
+ffffffffffffffffffffffdd77ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff99bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd0a
+0cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaf0017ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff77ddffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff66ffff
+ffffffffffffffffffffff77eeffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff66ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28
+1bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1822ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffdd77ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffbb99ff
+ffffffffffffffffffffdd77ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff99ccffffffffffffffffffffffffffffffffffffffffffffffffffffffff40
+2affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2046ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff77eeffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff66ff
+ffffffffffffffffffff99ccffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffee77ffffffffffffffffffffffffffffffffffffffffffffffffffffcc7746
+3c77777788ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb77777777335288
+ddffffffffffffffffffffffffffffffffffffffffffffffffffff77ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff77dd
+ffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff66ffffffffffffffffffffffffffffffffffffffffffffffbb777799ddff
+ffffffffcc887777ddffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffbb777799ddffffffffffcc
+886677ddffffffffffffffffffffffffffffffffffffffffffffdd88ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffcc99
+ffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff77ffffffffffffffffffffffffffffffffffffffffffdd5599ffffffffff
+ffffffffffffffee7777eeffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffcc6699ffffffffffffffffffff
+ffffee7777eeffffffffffffffffffffffffffffffffffffffff88ccffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffaabbffffffffffffffffffffffffffffffffffffff7777eeffffffffffff
+ffffffffffffffffffdd66bbffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff7777eeffffffffffffffffffffff
+ffffffffdd66ccffffffffffffffffffffffffffffffffffffff77ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffcc99ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffbbbbffffffffffffffffffffffffffffffffffee77bbffffffffffffffff
+ffffffffffffffffffffff7799ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffee66ccffffffffffffffffffffffffff
+ffffffffffff7799ffffffffffffffffffffffffffffffffffff77ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffbbbbffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffbbaaffffffffffffffffffffffffffffffffff55ccffffffffffffffffff
+ffffffffffffffffffffffff9977ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffee66ddffffffffffffffffffffffffffff
+ffffffffffffff9988ffffffffffffffffffffffffffffffffff77ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffbbaaffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffbbbbffffffffffffffffffffffffffffffff77ccffffffffffffffffffff
+ffffffffffffffffffffffffff9999ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff77ccffffffffffffffffffffffffffffff
+ffffffffffffffff88aaffffffffffffffffffffffffffffffff66ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffaabbffffffffffffffffffffffffffffff88aaffffffffffffffffffffff
+ffffffffffffffffffffffffffff77ccffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff77bbffffffffffffffffffffffffffffffff
+ffffffffffffffffff77ccffffffffffffffffffffffffffffff77ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff77eeffffffffffffffffffffffffffffee77ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffdd77ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffee66ffffffffffffffffffffffffffffff77ddffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77
+ffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff77ffffffffffffffffffffffffffffff77ddffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff99bbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff99bbffffffffffffffffffffffffffffcc99ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffdd88
+ffffffffffffffffffff88ddffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff66ffffffffffffffffffffffffffffdd77ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffdd77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff66ffffffffffffffffffffffffffffff77ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff88dd
+ffffffffffffffffffffdd88ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffaaaaffffffffffffffffffffffffffff88ddffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff88ccffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff88ddffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff88ddffffffffffffffffffffffffffff77ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff66ff
+ffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff66ffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffdd88ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffdd88ffffffffffffffffffffffffffffbb88ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffcc77ff
+ffffffffffffffffffffffbb99ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffbb99ffffffffffffffffffffffffffffee77ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffdd88ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff77ffffffffffffffffffffffffffffff66eeffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff66ffff
+ffffffffffffffffffffffff66eeffffffffffffffffffffffffffffffffffffffffffff
+ffffffff55ffffffffffffffffffffffffffffffbbbbffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffbbbbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff77ffffffffffffffffffffffffffffffdd77ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffbb99ffff
+ffffffffffffffffffffffffee55ffffffffffffffffffffffffffffffffffffffffffff
+ffffff77ccffffffffffffffffffffffffffffffbbbbffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffaabbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff77ffffffffffffffffffffffffffffffff88aaffffffffff
+ffffffffffffffffffffffffffffffffffffffdd66ffffff
+ffffffffffffffffffffffffffcc77ffffffffffffffffffffffffffffffffffffffffff
+ffff88aaffffffffffffffffffffffffffffffff88ddffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff88ddffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffff77ccffffffff
+ffffffffffffffffffffffffffffffffffffee66eeffffff
+ffffffffffffffffffffffffffff9977ffffffffffffffffffffffffffffffffffffffff
+ff9999ffffffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff88ccffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff77eeffffffffffffffffffffffffffffffffff55ccffffff
+ffffffffffffffffffffffffffffffffffee55ddffffffff
+ffffffffffffffffffffffffffffffcc66eeffffffffffffffffffffffffffffffffffff
+7799ffffffffffffffffffffffffffffffffffffbbbbffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff99bbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff7799ffff
+ffffffffffffffffffffffffffffffffcc55eeffffffffff
+ffffffffffffffffffffffffffffffffdd6699ffffffffffffffffffffffffffffffbb66
+ccffffffffffffffffffffffffffffffffffffffbbbbffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffbbbbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffff9977dd
+ffffffffffffffffffffffffffffee7777ffffffffffffff
+ffffffffffffffffffffffffffffffffffffbb66aaffffffffffffffffffffffaa6699ff
+ffffffffffffffffffffffffffffffffffffffffdd88ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffcc99ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffffffee77
+77ccffffffffffffffffffffdd8866ddffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffaa777777bbbbccbbbb887777aaffffff
+ffffffffffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffee77ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffee77ffffffffffffffffffffffffffffffffffffffffffffff
+dd99777799bbbbccbbaa776688ccffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffddbbbb77bbbbddffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff99ccffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77eeffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff99ccffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffbbbb9988bbbbeeffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffcc99ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffcc99ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff66eeffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffbb88ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffbb99ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffcc77ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffbb88ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff66ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff77ccffffffffffffffffffffff
+ffffffffffffffffffffffffffff99aaffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff77ddffffffffffffffffffffffffffffffff
+ffffffffffffffffff88aaffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffee66eeffffffffffffffffffff
+ffffffffffffffffffffffffffcc77ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffee66eeffffffffffffffffffffffffffffff
+ffffffffffffffffbb77ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffee55eeffffffffffffffffff
+ffffffffffffffffffffffffcc66ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffdd66ffffffffffffffffffffffffffffff
+ffffffffffffffcc77ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffcc66eeffffffffffffffff
+ffffffffffffffffffffffbb77eeffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffcc55eeffffffffffffffffffffffffff
+ffffffffffffaa77ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffee55bbffffffffffffff
+ffffffffffffffffffff8877ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffee55bbffffffffffffffffffffffff
+ffffffffff8888ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9966ddffffffffff
+ffffffffffffffffaa66bbffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff9966ddffffffffffffffffffff
+ffffff9966bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee777788ddffff
+ffffffffffcc7766aaffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffee777799ddffffffffffffff
+cc7777bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd887777
+667777777799eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffcc8866776677777777
+99eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
+cleartomark
+countdictstack exch sub { end } repeat
+restore
+%%EOF